Source code for blocklib.validation.psig_validation

from enum import Enum
from typing import cast, Union, List, Optional

from typing_extensions import Literal
from pydantic import BaseModel, Field

from .constrained_types import UnitFloat, PositiveInt
from .shared_blocking_config import BlockingConfigBase


[docs]class PSigFilterConfigBase(BaseModel): type: str
[docs]class PSigFilterRatioConfig(PSigFilterConfigBase): type: Literal['ratio'] max: UnitFloat min: UnitFloat = cast(UnitFloat, 0.0)
[docs]class PSigFilterCountConfig(PSigFilterConfigBase): type: Literal['count'] max: PositiveInt min: PositiveInt
[docs]class PSigBlockingBFFilterConfig(BaseModel): type: Literal['bloom filter'] number_of_hash_functions: int = Field(..., alias='number-hash-functions') bloom_filter_length: int = Field(..., alias='bf-len') compress_block_key: Optional[bool] = Field(False, alias='compress-block-key')
[docs]class PSigSignatureTypes(str, Enum): chars_at = 'characters-at' feature_value = 'feature-value' metaphone = 'metaphone'
[docs]class PSigSignatureSpecBase(BaseModel): type: str feature: Union[int, str]
[docs]class PSigCharsAtSignatureConfig(BaseModel): pos: List[Union[PositiveInt, str]]
[docs]class PSigCharsAtSignatureSpec(PSigSignatureSpecBase): type: Literal[PSigSignatureTypes.chars_at] = Field(..., name='type', alias='type') config: PSigCharsAtSignatureConfig
[docs]class PSigMetaphoneSignatureSpec(PSigSignatureSpecBase): type: Literal[PSigSignatureTypes.metaphone]
[docs]class PSigFeatureValueSignatureSpec(PSigSignatureSpecBase): type: Literal[PSigSignatureTypes.feature_value] = Field(..., name='type', alias='type')
PSigSignatureModel = List[Union[ PSigCharsAtSignatureSpec, PSigMetaphoneSignatureSpec, PSigFeatureValueSignatureSpec ]]
[docs]class PSigConfig(BlockingConfigBase): filter: Union[PSigFilterRatioConfig, PSigFilterCountConfig] blocking_filter: PSigBlockingBFFilterConfig = Field(..., alias='blocking-filter') signatures: List[PSigSignatureModel] = Field(..., alias='signatureSpecs')