Validate schemas

Module contains base schema for other complex pydantic models and simple schemas to use in other places

class luna_handlers.classes.schemas.base_schema.BaseSchema(**data)[source]

Base schema model

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.base_schema.HandlerSettings[source]

Container class for service settings.

classmethod initialize(faceDescriptorVersion, bodyDescriptorVersion, handlersLimitsSettings, attributeStorageSettings)[source]

Initialize settings for schemas.

Parameters:
  • faceDescriptorVersion – default face descriptor version

  • bodyDescriptorVersion – default body descriptor version

  • handlersLimitsSettings – luna handlers limits settings

  • attributeStorageSettings – attribute storage settings

class luna_handlers.classes.schemas.base_schema.SchemaUpdaterMixin[source]

Extended base schema model.

settings

alias of HandlerSettings

Module contains schemas for attribute upgrade handler

class luna_handlers.classes.schemas.attribute_upgrade.BodyUpgradeData(**data)[source]

Body upgrade data schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'policy': FieldInfo(annotation=BodyUpgradePolicy, required=False, default=BodyUpgradePolicy(descriptorVersion=0), alias='policy', alias_priority=1), 'samples': FieldInfo(annotation=List[Annotated[str, StringConstraints]], required=True, alias='samples', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.attribute_upgrade.BodyUpgradePolicy(**data)[source]

Body attribute upgrade policy

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'descriptorVersion': FieldInfo(annotation=Literal[102, 103, 104, 105, 106, 107, 108, 109, 110], required=False, default_factory=<lambda>, alias='descriptor_version', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.attribute_upgrade.FaceUpgradeData(**data)[source]

Face upgrade data schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'policy': FieldInfo(annotation=FaceUpgradePolicy, required=False, default=FaceUpgradePolicy(extractBasicAttributes=0, fdScoreThreshold=0.0, extractDescriptor=1, descriptorVersion=0), alias='policy', alias_priority=1), 'samples': FieldInfo(annotation=List[Annotated[str, StringConstraints]], required=True, alias='samples', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.attribute_upgrade.FaceUpgradePolicy(**data)[source]

Face attribute upgrade policy

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'descriptorVersion': FieldInfo(annotation=Literal[46, 52, 54, 56, 57, 58, 59, 60, 62, 64], required=False, default_factory=<lambda>, alias='descriptor_version', alias_priority=1), 'extractBasicAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_basic_attributes', alias_priority=1), 'extractDescriptor': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='extract_descriptor', alias_priority=1), 'fdScoreThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='fd_score_threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

model_post_init(__context)

This function is meant to behave like a BaseModel method to initialise private attributes.

It takes context as an argument since that’s what pydantic-core passes when calling it.

Return type:

None

Parameters:
  • self – The BaseModel instance.

  • __context – The context.

classmethod validatePolicy(values)[source]

Validate attributes are select for extract :raises VLException(Error.NotSelectedAttributesForExtract, 400, False) if no attributes select for extract:

class luna_handlers.classes.schemas.attribute_upgrade.SamplesForUpgrade(**data)[source]

Samples for upgrade schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'bodyUpgradeData': FieldInfo(annotation=BodyUpgradeData, required=False, default_factory=<lambda>, alias='body_upgrade_data', alias_priority=1), 'eventId': FieldInfo(annotation=EventId, required=False, default_factory=<lambda>, alias='event_id', alias_priority=1), 'faceId': FieldInfo(annotation=FaceId, required=False, default_factory=<lambda>, alias='face_id', alias_priority=1), 'faceUpgradeData': FieldInfo(annotation=FaceUpgradeData, required=False, default_factory=<lambda>, alias='face_upgrade_data', alias_priority=1), 'upgradeData': FieldInfo(annotation=FaceUpgradeData, required=False, default_factory=<lambda>, alias='upgrade_data', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

classmethod validateOneOf(values)[source]

Validate one of request value:

‘face_id’ and ‘upgrade_data’ or ‘event_id’ and ‘face_upgrade_data’ and/or ‘body_upgrade_data’

Module contains schemas for conditional tags policy

class luna_handlers.classes.schemas.conditional_tags_policy.ConditionalTagsPolicy(**data)[source]

Conditional tags policy schema

execute(events)[source]

Execute additional tags policy

Return type:

None

Parameters:

events – processing events

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'tag': FieldInfo(annotation=Tag, required=True, alias='tag', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.conditional_tags_policy.Tag[source]

Tag schema

Module contains schemas for detector handler

class luna_handlers.classes.schemas.detector.Detector(**data)[source]

Model for detector handler with urls or samples

static checkRequiredFaceBBox(values)[source]

Check required face bounding box for incoming image

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'image': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='image', alias_priority=1), 'mimetype': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='mimetype', alias_priority=1), 'samples': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='samples', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)]), 'trustedDetections': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='trusted_detections', alias_priority=1), 'urls': FieldInfo(annotation=List[UrlWithFaceBbox], required=False, default_factory=<lambda>, alias='urls', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

classmethod validateHandler(values)[source]

Validate handler model

Return type:

dict

Module contains schemas for extract policy

class luna_handlers.classes.schemas.extract_policies.BaseExtractPolicy(**data)[source]

Base extract policy

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'extractBasicAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_basic_attributes', alias_priority=1), 'fdScoreThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='fd_score_threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.extract_policies.HandlerExtractPolicy(**data)[source]

Handler extract policy schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'extractBasicAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_basic_attributes', alias_priority=1), 'extractBodyDescriptor': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_body_descriptor', alias_priority=1), 'extractFaceDescriptor': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='extract_face_descriptor', alias_priority=1), 'fdScoreThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='fd_score_threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

Module contains schemas for extractor handler

class luna_handlers.classes.schemas.extractor.Extractor(**data)[source]

Model for extractor handler with samples

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'samples': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='samples', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

Module contains schemas for filters

class luna_handlers.classes.schemas.filters.AttributesFilters(**data)[source]

Matching filters schema

property isEmpty: bool

Check there is nothing to filter.

Returns:

True if all filters are equal to their defaults

isEventSatisfies(event)[source]

Does event satisfy filters by face attributes.

Return type:

bool

Parameters:

event – event

Returns:

true if event satisfied a filters otherwise false

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'ageGte': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__gte', alias_priority=1), 'ageLt': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__lt', alias_priority=1), 'deepfake': FieldInfo(annotation=List[IntDeepfake], required=False, default_factory=<lambda>, alias='deepfake', alias_priority=1, metadata=[Len(min_length=1, max_length=2)]), 'ethnicities': FieldInfo(annotation=List[IntEthnicities], required=False, default_factory=<lambda>, alias='ethnicities', alias_priority=1, metadata=[Len(min_length=1, max_length=4)]), 'gender': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='gender', alias_priority=1), 'liveness': FieldInfo(annotation=List[IntLiveness], required=False, default_factory=<lambda>, alias='liveness', alias_priority=1, metadata=[Len(min_length=1, max_length=3)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.filters.ComplexFilter(**data)[source]

Complex filter - includes attributes and list of match filters

property isEmpty: bool

Check there is nothing to filter.

Returns:

True if all filters are equal to None

isEventSatisfies(event)[source]

Does an event satisfy the filters.

Return type:

bool

Parameters:

event – event

Returns:

true if event satisfied filters otherwise false

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'ageGte': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__gte', alias_priority=1), 'ageLt': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__lt', alias_priority=1), 'deepfake': FieldInfo(annotation=List[IntDeepfake], required=False, default_factory=<lambda>, alias='deepfake', alias_priority=1, metadata=[Len(min_length=1, max_length=2)]), 'ethnicities': FieldInfo(annotation=List[IntEthnicities], required=False, default_factory=<lambda>, alias='ethnicities', alias_priority=1, metadata=[Len(min_length=1, max_length=4)]), 'gender': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='gender', alias_priority=1), 'liveness': FieldInfo(annotation=List[IntLiveness], required=False, default_factory=<lambda>, alias='liveness', alias_priority=1, metadata=[Len(min_length=1, max_length=3)]), 'match': FieldInfo(annotation=List[MatchFilter], required=False, default_factory=<lambda>, alias='match', alias_priority=1, metadata=[Len(min_length=1, max_length=30)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.filters.MatchFilter(**data)[source]

Simple match filter

property isEmpty: bool

Check there is nothing to filter.

Returns:

True if all filters are equal to their defaults

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'label': FieldInfo(annotation=Str36, required=True, alias='label', alias_priority=1), 'similarityGte': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='similarity__gte', alias_priority=1), 'similarityLte': FieldInfo(annotation=StrictFloat01, required=False, default=1.0, alias='similarity__lte', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

Module contains schemas for handler

class luna_handlers.classes.schemas.handler.CachedHandlerModel(**data)[source]

Cached handler model | contains minimal required fields

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'accountId': FieldInfo(annotation=UUID, required=True, alias='account_id', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'handlerType': FieldInfo(annotation=HandlerType, required=False, default=<HandlerType.static: 0>, alias='handler_type', alias_priority=1), 'lambdaId': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, alias='lambda_id', alias_priority=1), 'lastUpdateTime': FieldInfo(annotation=CustomDatetime, required=True, alias='last_update_time', alias_priority=1), 'policies': FieldInfo(annotation=Union[Policies, NoneType], required=False, default=None, alias='policies', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

model_post_init(_CachedHandlerModel__context)[source]

Post init

static postInitMatchPolicy(matchPolicies, accountId)[source]
Return type:

None

Post init matching policy - apply handler account id for matching candidates :param matchPolicies: matching policies :param accountId: handler account id

class luna_handlers.classes.schemas.handler.CreateHandlerModel(**data)[source]

Handler model for handler creation

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'description': FieldInfo(annotation=Str128, required=False, default='', alias='description', alias_priority=1), 'handlerType': FieldInfo(annotation=HandlerType, required=False, default=<HandlerType.static: 0>, alias='handler_type', alias_priority=1), 'lambdaId': FieldInfo(annotation=Union[UUID, NoneType], required=False, default=None, alias='lambda_id', alias_priority=1), 'policies': FieldInfo(annotation=Union[CreateHandlerPolicies, NoneType], required=False, default=None, alias='policies', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

model_post_init(_CreateHandlerModel__context)[source]

Validate handler, post init

class luna_handlers.classes.schemas.handler.CreateHandlerPolicies(*, detect_policy: HandlerDetectPolicy = None, extract_policy: HandlerExtractPolicy = HandlerExtractPolicy(extractBasicAttributes=0, fdScoreThreshold=0.0, extractFaceDescriptor=1, extractBodyDescriptor=0), match_policy: list[MatchPolicy] = [], conditional_tags_policy: list[ConditionalTagsPolicy] = [], storage_policy: StoragePolicy = None)[source]
asDict()[source]

Get data from initialized model excluding match policy on-load transformations.

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'conditionalTagsPolicy': FieldInfo(annotation=list[ConditionalTagsPolicy], required=False, default=[], alias='conditional_tags_policy', alias_priority=1, metadata=[MaxLen(max_length=30)]), 'detectPolicy': FieldInfo(annotation=HandlerDetectPolicy, required=False, default_factory=<lambda>, alias='detect_policy', alias_priority=1), 'extractPolicy': FieldInfo(annotation=HandlerExtractPolicy, required=False, default=HandlerExtractPolicy(extractBasicAttributes=0, fdScoreThreshold=0.0, extractFaceDescriptor=1, extractBodyDescriptor=0), alias='extract_policy', alias_priority=1), 'matchPolicy': FieldInfo(annotation=list[MatchPolicy], required=False, default=[], alias='match_policy', alias_priority=1, metadata=[MaxLen(max_length=30)]), 'storagePolicy': FieldInfo(annotation=StoragePolicy, required=False, default_factory=<lambda>, alias='storage_policy', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

model_post_init(__context)

This function is meant to behave like a BaseModel method to initialise private attributes.

It takes context as an argument since that’s what pydantic-core passes when calling it.

Return type:

None

Parameters:
  • self – The BaseModel instance.

  • __context – The context.

class luna_handlers.classes.schemas.handler.FaceInputEstimationsModel(**data)[source]

Model for incoming face estimations: urls, image or samples

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'image': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='image', alias_priority=1), 'mimetype': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='mimetype', alias_priority=1), 'samples': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='samples', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)]), 'trustedDetections': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='trusted_detections', alias_priority=1), 'urls': FieldInfo(annotation=List[UrlWithFaceBbox], required=False, default_factory=<lambda>, alias='urls', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

classmethod validateHandler(values)[source]

Validate handler model

Return type:

dict

class luna_handlers.classes.schemas.handler.HandlerInputEstimationsModel(*, image: str | None = None, mimetype: str | None = None, face_bounding_boxes: List[BoundingBoxSchema] = None, body_bounding_boxes: List[BoundingBoxSchema] = None, urls: List[UrlForInputEvent] = None, samples: List[SampleForInputEvent] | List[UUID] = None, detect_time: CustomDatetime = None, detect_ts: DetectTs | None = None, image_origin: str = None, image_origin_mimetype: str = None, meta: dict = None, trusted_detections: Literal[0, 1] = None)[source]

Handler model for incoming estimations: urls, image(with face and/or body bounding boxes) or samples

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'bodyBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='body_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'detectTime': FieldInfo(annotation=CustomDatetime, required=False, default_factory=<lambda>, alias='detect_time', alias_priority=1), 'detectTs': FieldInfo(annotation=Union[DetectTs, NoneType], required=False, default=None, alias='detect_ts', alias_priority=1), 'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'image': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='image', alias_priority=1), 'imageOrigin': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin', alias_priority=1, metadata=[Strict(strict=True)]), 'imageOriginMimetype': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin_mimetype', alias_priority=1, metadata=[Strict(strict=True)]), 'meta': FieldInfo(annotation=dict, required=False, default_factory=<lambda>, alias='meta', alias_priority=1), 'mimetype': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='mimetype', alias_priority=1), 'samples': FieldInfo(annotation=Union[Annotated[List[SampleForInputEvent], AfterValidator], Annotated[List[Annotated[UUID, BeforeValidator]], AfterValidator]], required=False, default_factory=<lambda>, alias='samples', alias_priority=1), 'trustedDetections': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='trusted_detections', alias_priority=1), 'urls': FieldInfo(annotation=List[UrlForInputEvent], required=False, default_factory=<lambda>, alias='urls', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

classmethod validateHandler(values)[source]

Validate handler model

Return type:

dict

class luna_handlers.classes.schemas.handler.SampleForInputEvent(**data)[source]

Sample schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'detectTime': FieldInfo(annotation=CustomDatetime, required=False, default_factory=<lambda>, alias='detect_time', alias_priority=1), 'detectTs': FieldInfo(annotation=Union[DetectTs, NoneType], required=False, default=None, alias='detect_ts', alias_priority=1), 'imageOrigin': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin', alias_priority=1, metadata=[Strict(strict=True)]), 'imageOriginMimetype': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin_mimetype', alias_priority=1, metadata=[Strict(strict=True)]), 'meta': FieldInfo(annotation=dict, required=False, default_factory=<lambda>, alias='meta', alias_priority=1), 'sampleId': FieldInfo(annotation=UUID, required=True, alias='sample_id', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'trustedDetections': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='trusted_detections', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.handler.UrlForInputEvent(**data)[source]

Url schema with detection time and image origin

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'bodyBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='body_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'detectTime': FieldInfo(annotation=CustomDatetime, required=False, default_factory=<lambda>, alias='detect_time', alias_priority=1), 'detectTs': FieldInfo(annotation=Union[DetectTs, NoneType], required=False, default=None, alias='detect_ts', alias_priority=1), 'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'imageOrigin': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin', alias_priority=1, metadata=[Strict(strict=True)]), 'imageOriginMimetype': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin_mimetype', alias_priority=1, metadata=[Strict(strict=True)]), 'meta': FieldInfo(annotation=dict, required=False, default_factory=<lambda>, alias='meta', alias_priority=1), 'trustedDetections': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='trusted_detections', alias_priority=1), 'url': FieldInfo(annotation=str, required=True, alias='url', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.handler.ValidatorHandlerModel(**data)[source]

Handler validator model

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'policies': FieldInfo(annotation=Policies, required=True, alias='policies', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

Module contains schemas for match policy

class luna_handlers.classes.schemas.match_policy.AttributeMatchCandidates(**data)[source]

Face match candidates

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'accountId': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='account_id', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'attributeIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='attribute_ids', alias_priority=1, metadata=[Len(min_length=0, max_length=1000)]), 'origin': FieldInfo(annotation=Literal['attributes'], required=True, alias='origin', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.match_policy.BaseMatchPolicy(**data)[source]

Base match policy schema

applyMatchingResultToEvents(events, matchingResult)[source]

Unpack response data and updates events

Return type:

None

Parameters:
  • events – list of events that suppose to be matching

  • matchingResult – result of matching

classmethod descriptorValidator(descriptor, values)[source]

Candidate descriptor parameters validator, depends on matching candidates

Return type:

Optional[str]

async execute(events, luna3Client)[source]
Return type:

None

Execute match policy:
  • filter events fo matching

  • match events’ descriptors with policy candidates

Results are stored in the input events.

Parameters:
  • events – events (references)

  • luna3Client – client

getEventsReferences(events)[source]

Builds descriptor references list for events

Return type:

list[RawDescriptorReference] | None

Parameters:

events – list of events that suppose to be matching

Returns:

List of descriptors references

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'candidates': FieldInfo(annotation=Union[FaceMatchCandidates, EventMatchCandidates, AttributeMatchCandidates], required=True, alias='candidates', alias_priority=1, discriminator='origin', metadata=[WrapValidator(func=<function excludeDiscriminatorFromException>)]), 'descriptor': FieldInfo(annotation=MatchingDescriptor, required=False, default=MatchingDescriptor(descriptorType='face'), alias='descriptor', alias_priority=1), 'filters': FieldInfo(annotation=AttributesFilters, required=False, default=AttributesFilters(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None), alias='filters', alias_priority=1), 'label': FieldInfo(annotation=Str36, required=False, default='', alias='label', alias_priority=1), 'limit': FieldInfo(annotation=Union[IntMatchingLimit, NoneType], required=False, default=3, alias='limit', alias_priority=1), 'targets': FieldInfo(annotation=Union[List[str], NoneType], required=False, default_factory=<lambda>, alias='targets', alias_priority=1), 'threshold': FieldInfo(annotation=Union[StrictFloat01, NoneType], required=False, default_factory=<lambda>, alias='threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

prepareCandidatesFilters()[source]

Builds filter data from candidates’ fields, skipping unset ones

Return type:

dict[str, any]

Returns:

Dict with actual data from matching candidate

prepareMatchPayload(candidatesFilters, references)[source]

Builds payload with all the necessary attributes for matching request

Return type:

dict[str, list[Candidates | RawDescriptorReference]]

Parameters:
  • candidatesFilters – filter built from candidate’s data

  • references – list of descriptor references built from events that suppose to be matching

Returns:

Payload dictionary with candidates and references lists

async requestMatching(luna3Client, matchPayload)[source]

Sends request for matching

Return type:

LunaResponse

Parameters:
  • luna3Client – client for communication with matching service

  • matchPayload – payload dictionary with candidates and references lists

Returns:

Result of matching

classmethod targetsValidator(targets, values)[source]

Targets validator, depends on matching candidates

Return type:

Optional[List[str]]

class luna_handlers.classes.schemas.match_policy.EventMatchCandidates(**data)[source]

Event match candidates

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'accountId': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='account_id', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'ageGte': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__gte', alias_priority=1), 'ageLt': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__lt', alias_priority=1), 'apparentAgeGte': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='apparent_age__gte', alias_priority=1), 'apparentAgeLt': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='apparent_age__lt', alias_priority=1), 'apparentGender': FieldInfo(annotation=List[Union[Literal[0, 1, 2], NoneType]], required=False, default_factory=<lambda>, alias='apparent_gender', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'areas': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='areas', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'backpackStates': FieldInfo(annotation=List[Union[Literal[0, 1, 2], NoneType]], required=False, default_factory=<lambda>, alias='backpack_states', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'cities': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='cities', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'createTimeGte': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='create_time__gte', alias_priority=1), 'createTimeLt': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='create_time__lt', alias_priority=1), 'deepfake': FieldInfo(annotation=list[Union[Literal[0, 1], NoneType]], required=False, default_factory=<lambda>, alias='deepfake', alias_priority=1, metadata=[MinLen(min_length=1), MaxLen(max_length=3), AfterValidator(func=<function validateUniqueItems>)]), 'districts': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='districts', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'emotions': FieldInfo(annotation=list[Union[Literal[1, 2, 3, 4, 5, 6, 7], NoneType]], required=False, default_factory=<lambda>, alias='emotions', alias_priority=1, metadata=[MinLen(min_length=1), MaxLen(max_length=8), AfterValidator(func=<function validateUniqueItems>)]), 'endTimeGte': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='end_time__gte', alias_priority=1), 'endTimeLt': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='end_time__lt', alias_priority=1), 'ethnicGroups': FieldInfo(annotation=list[Union[Literal[1, 2, 3, 4], NoneType]], required=False, default_factory=<lambda>, alias='ethnic_groups', alias_priority=1, metadata=[MinLen(min_length=1), MaxLen(max_length=5), AfterValidator(func=<function validateUniqueItems>)]), 'eventIdGte': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='event_id__gte', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'eventIdLt': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='event_id__lt', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'eventIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='event_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'externalIds': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='external_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'faceIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='face_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'gender': FieldInfo(annotation=Union[Literal[0, 1], NoneType], required=False, default=None, alias='gender', alias_priority=1), 'geoPosition': FieldInfo(annotation=Union[GeoPosition, NoneType], required=False, default=None, alias='geo_position', alias_priority=1), 'handlerIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='handler_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'headwearApparentColors': FieldInfo(annotation=List[Union[Literal['undefined', 'black', 'white', 'other'], NoneType]], required=False, default_factory=<lambda>, alias='headwear_apparent_colors', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'headwearStates': FieldInfo(annotation=List[Union[Literal[0, 1, 2], NoneType]], required=False, default_factory=<lambda>, alias='headwear_states', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'house_numbers': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='house_numbers', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'liveness': FieldInfo(annotation=list[Union[Literal[0, 1, 2], NoneType]], required=False, default_factory=<lambda>, alias='liveness', alias_priority=1, metadata=[MinLen(min_length=1), MaxLen(max_length=4), AfterValidator(func=<function validateUniqueItems>)]), 'lowerGarmentColors': FieldInfo(annotation=List[Union[Literal['undefined', 'black', 'blue', 'green', 'gray', 'orange', 'purple', 'red', 'white', 'yellow', 'pink', 'brown', 'beige', 'khaki', 'multicolored'], NoneType]], required=False, default_factory=<lambda>, alias='lower_garment_colors', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'lowerGarmentTypes': FieldInfo(annotation=List[Union[Literal['undefined', 'trousers', 'shorts', 'skirt'], NoneType]], required=False, default_factory=<lambda>, alias='lower_garment_types', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'masks': FieldInfo(annotation=list[Union[Literal[1, 2, 3], NoneType]], required=False, default_factory=<lambda>, alias='masks', alias_priority=1, metadata=[MinLen(min_length=1), MaxLen(max_length=4), AfterValidator(func=<function validateUniqueItems>)]), 'meta': FieldInfo(annotation=Meta, required=False, default_factory=<lambda>, alias='meta', alias_priority=1), 'origin': FieldInfo(annotation=Literal['events'], required=True, alias='origin', alias_priority=1), 'shoesApparentColors': FieldInfo(annotation=List[Union[Literal['undefined', 'black', 'white', 'other'], NoneType]], required=False, default_factory=<lambda>, alias='shoes_apparent_colors', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'sleeveLengths': FieldInfo(annotation=List[Union[Literal['short', 'long', 'undefined'], NoneType]], required=False, default_factory=<lambda>, alias='sleeve_lengths', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'sources': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='sources', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'streamIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='stream_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'streets': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='streets', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'tags': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='tags', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'topMatchingCandidatesLabel': FieldInfo(annotation=Str36, required=False, default_factory=<lambda>, alias='top_matching_candidates_label', alias_priority=1), 'topSimilarExternalIds': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='top_similar_external_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'topSimilarObjectIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='top_similar_object_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'topSimilarObjectSimilarityGte': FieldInfo(annotation=StrictFloat01, required=False, default_factory=<lambda>, alias='top_similar_object_similarity__gte', alias_priority=1), 'topSimilarObjectSimilarityLt': FieldInfo(annotation=StrictFloat01, required=False, default_factory=<lambda>, alias='top_similar_object_similarity__lt', alias_priority=1), 'trackIds': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='track_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'upperClothingColors': FieldInfo(annotation=List[Union[Literal['undefined', 'black', 'blue', 'green', 'gray', 'orange', 'purple', 'red', 'white', 'yellow', 'pink', 'brown', 'beige', 'khaki', 'multicolored'], NoneType]], required=False, default_factory=<lambda>, alias='upper_clothing_colors', alias_priority=1, metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'userData': FieldInfo(annotation=Str128, required=False, default_factory=<lambda>, alias='user_data', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.match_policy.FaceMatchCandidates(**data)[source]

Face match candidates

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'accountId': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='account_id', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'createTimeGte': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='create_time__gte', alias_priority=1), 'createTimeLt': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='create_time__lt', alias_priority=1), 'externalIds': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='external_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'faceIdGte': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='face_id__gte', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'faceIdLt': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='face_id__lt', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'faceIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='face_ids', alias_priority=1, metadata=[Len(min_length=1, max_length=1000)]), 'listId': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='list_id', alias_priority=1, metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'origin': FieldInfo(annotation=Literal['faces'], required=True, alias='origin', alias_priority=1), 'userData': FieldInfo(annotation=Str128, required=False, default_factory=<lambda>, alias='user_data', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.match_policy.GeoPosition(**data)[source]

Geo position: longitude and latitude with deltas

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'latitudeDelta': FieldInfo(annotation=FloatGeoDelta, required=False, default=0.01, alias='latitude_delta', alias_priority=1), 'longitudeDelta': FieldInfo(annotation=FloatGeoDelta, required=False, default=0.01, alias='longitude_delta', alias_priority=1), 'originLatitude': FieldInfo(annotation=FloatLatitude, required=True, alias='origin_latitude', alias_priority=1), 'originLongitude': FieldInfo(annotation=FloatLongitude, required=True, alias='origin_longitude', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.match_policy.MatchPolicy(**data)[source]

Match policy schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'candidates': FieldInfo(annotation=Union[FaceMatchCandidates, EventMatchCandidates], required=True, alias='candidates', alias_priority=1, discriminator='origin', metadata=[WrapValidator(func=<function excludeDiscriminatorFromException>)]), 'descriptor': FieldInfo(annotation=MatchingDescriptor, required=False, default=MatchingDescriptor(descriptorType='face'), alias='descriptor', alias_priority=1), 'filters': FieldInfo(annotation=AttributesFilters, required=False, default=AttributesFilters(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None), alias='filters', alias_priority=1), 'label': FieldInfo(annotation=Str36, required=False, default='', alias='label', alias_priority=1), 'limit': FieldInfo(annotation=Union[IntMatchingLimit, NoneType], required=False, default=3, alias='limit', alias_priority=1), 'targets': FieldInfo(annotation=Union[List[str], NoneType], required=False, default_factory=<lambda>, alias='targets', alias_priority=1), 'threshold': FieldInfo(annotation=Union[StrictFloat01, NoneType], required=False, default_factory=<lambda>, alias='threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.match_policy.MatchingDescriptor(**data)[source]

Matching descriptor parameters

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'descriptorType': FieldInfo(annotation=Literal['face', 'body'], required=False, default='face', alias='descriptor_type', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.match_policy.OriginEnum(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Match candidates origin

Module contains schemas for policies

class luna_handlers.classes.schemas.policies.Policies(**data)[source]

Policies schema

async checkListsAvailability(luna3Client, accountId)[source]

Check availability of lists from matching and link to list policies.

Return type:

None

Parameters:
  • luna3Client – luna platform client

  • accountId – account id

Raises:

VLException(Error.ListNotFound.format(listId), 400, False), if some list is not found

async execute(events, accountId, monitoring, config, luna3Client, redisContext, plugins)[source]

Execute all policies for handler.

Parameters:
  • events – events

  • accountId – account id

  • monitoring – monitoring data

  • config – handler configuration parameters

  • luna3Client – luna platform client

  • redisContext – redis context

  • plugins – plugin manager

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'conditionalTagsPolicy': FieldInfo(annotation=list[ConditionalTagsPolicy], required=False, default=[], alias='conditional_tags_policy', alias_priority=1, metadata=[MaxLen(max_length=30)]), 'detectPolicy': FieldInfo(annotation=HandlerDetectPolicy, required=False, default_factory=<lambda>, alias='detect_policy', alias_priority=1), 'extractPolicy': FieldInfo(annotation=HandlerExtractPolicy, required=False, default=HandlerExtractPolicy(extractBasicAttributes=0, fdScoreThreshold=0.0, extractFaceDescriptor=1, extractBodyDescriptor=0), alias='extract_policy', alias_priority=1), 'matchPolicy': FieldInfo(annotation=list[MatchPolicy], required=False, default=[], alias='match_policy', alias_priority=1, metadata=[MaxLen(max_length=30)]), 'storagePolicy': FieldInfo(annotation=StoragePolicy, required=False, default_factory=<lambda>, alias='storage_policy', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

publishEventsToPlugins(events, accountId, plugins)[source]

Publish events to other services.

Return type:

None

Parameters:
  • events – list of events

  • accountId – account id

  • plugins – plugin manager

static validateDetectAndExtractCompatibility(detectPolicy, extractPolicy)[source]

Validate detect and extract policies compatibility

static validateDetectPolicyNotEmpty(detectPolicy)[source]

Validate non-empty detect policy

static validateGeneratedAttributesFilters(detectPolicy, extractPolicy, matchPolicies, conditionalTagsPolicies, storagePolicy)[source]

Validate attributes and detect/extract policy compatibility

static validateMatchAndExtractCompatibility(matchPolicies, extractPolicy)[source]

Validate match and extract policies compatibility

static validateMatchLabelsCompatibility(matchPolicies, conditionalTagsPolicies, storagePolicy)[source]

Validate matching label compatibility

static validateMatchPolicyUniqueLabels(matchPolicies)[source]

Validate match policy matching label uniqueness

classmethod validatePolicies(values)[source]

Execute all compatibility validators

async luna_handlers.classes.schemas.policies.checkListAvailability(luna3Client, listId, accountId=None)[source]

Check availability of list.

Return type:

LunaResponse

Parameters:
  • luna3Client – luna platform client

  • accountId – account id

  • listId – list id

Returns:

Response from luna-faces service

luna_handlers.classes.schemas.policies.getObjectRecursively(data, expectedType)[source]

Recursively get object of expected type

Return type:

list[TypeVar(T)]

Module contains simple schemas for multiple usage

class luna_handlers.classes.schemas.simple_schemas.BoundingBoxSchema(**data)[source]

Bounding box schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'height': FieldInfo(annotation=SDKInt, required=True, alias='height', alias_priority=1), 'width': FieldInfo(annotation=SDKInt, required=True, alias='width', alias_priority=1), 'x': FieldInfo(annotation=SDKInt, required=True, alias='x', alias_priority=1), 'y': FieldInfo(annotation=SDKInt, required=True, alias='y', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.simple_schemas.UrlBboxSchema(**data)[source]

Url with face and body bounding boxes schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'bodyBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='body_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'trustedDetections': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='trusted_detections', alias_priority=1), 'url': FieldInfo(annotation=str, required=True, alias='url', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.simple_schemas.UrlWithFaceBbox(**data)[source]

Url with face bounding boxes schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'trustedDetections': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='trusted_detections', alias_priority=1), 'url': FieldInfo(annotation=str, required=True, alias='url', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

Module contains schemas for storage policy

class luna_handlers.classes.schemas.storage_policy.AttributeStorePolicy(**data)[source]

Attribute store policy

async execute(events, accountId, luna3Client)[source]

Save attributes.

Return type:

None

Parameters:
  • events – events

  • accountId – account id

  • luna3Client – client

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeAttribute': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_attribute', alias_priority=1), 'ttl': FieldInfo(annotation=IntAttributeTTL, required=False, default_factory=<lambda>, alias='ttl', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.BodySamplePolicy(**data)[source]

Body sample policy

asDict()[source]

Get BodySamplePolicy as dict with ttl

Return type:

dict

async execute(events, accountId, bucket, luna3Client)[source]

Save body samples.

Parameters:
  • events – events

  • accountId – account id

  • bucket – bucket name

  • luna3Client – client

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeSample': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='store_sample', alias_priority=1), 'ttl': FieldInfo(annotation=Union[Literal[-1, 1, 2, 3, 4, 5, 6, 7, 14, 30, 60, 90, 180, 365], NoneType], required=False, default=None, alias='ttl', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.EventStoragePolicy(**data)[source]

Event store policy

async execute(events, accountId, luna3Client)[source]

Save events.

Return type:

None

Parameters:
  • events – events

  • accountId – account id

  • luna3Client – client

generateEventToSend(event)[source]

Prepare the event data for saving. :type event: :param event: Base event. :return: Constructed object based on event’s parameters.

static getEventBasicAttributes(event)[source]

Get the basic attributes of an event. :type event: :param event: Base event. :return: Constructed object based on event’s body descriptor parameters.

static getEventFaceAttributes(event)[source]

Get the face attributes of an event :type event: :param event: Base event. :return: Constructed object based on event’s face descriptor parameters.

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeEvent': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='store_event', alias_priority=1), 'waitSaving': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='wait_saving', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

async classmethod onShutdown()[source]

Stop Policies

async classmethod onStartup()[source]

Init Policies

static processDetectionSamplesData(event)[source]

Add detection rect properties to event detections samples data :type event: :param event: Event to update

static processEventMatchCandidatesData(event)[source]

Exclude non supported properties from faces’ and events’ matching candidates :type event: :param event: Event to update

class luna_handlers.classes.schemas.storage_policy.FaceSamplePolicy(**data)[source]

Face sample policy

asDict()[source]

Get FaceSamplePolicy as dict with ttl

Return type:

dict

async execute(events, accountId, bucket, luna3Client)[source]

Save face samples.

Parameters:
  • events – events

  • accountId – account id

  • bucket – bucket name

  • luna3Client – client

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeSample': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='store_sample', alias_priority=1), 'ttl': FieldInfo(annotation=Union[Literal[-1, 1, 2, 3, 4, 5, 6, 7, 14, 30, 60, 90, 180, 365], NoneType], required=False, default=None, alias='ttl', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.FaceStoragePolicy(**data)[source]

Face store policy

async execute(events, accountId, luna3Client)[source]

Execute face policy (with link to list policy).

Return type:

None

Parameters:
  • events – processing events

  • accountId – account id

  • luna3Client – luna3 client

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'linkToListsPolicy': FieldInfo(annotation=list[LinkToListsPolicy], required=False, default=[], alias='link_to_lists_policy', alias_priority=1, metadata=[MaxLen(max_length=30)]), 'setSampleAsAvatar': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='set_sample_as_avatar', alias_priority=1), 'storeFace': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_face', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.HttpCallback(**data)[source]

Notification policy callbacks

getJsonBody(data)[source]

Description see getJsonBody().

Return type:

dict | None

getRequestCredentialsKey()[source]

Get data which a request characterization (what and where to send)

Return type:

str

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'authorization': FieldInfo(annotation=BasicAuthorization, required=False, default_factory=<lambda>, alias='authorization', alias_priority=1), 'enable': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='enable', alias_priority=1), 'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'params': FieldInfo(annotation=Params, required=False, default=Params(timeout=None, contentType='application/json', headers=None), alias='params', alias_priority=1), 'type': FieldInfo(annotation=Literal['http'], required=True, alias='type', alias_priority=1), 'url': FieldInfo(annotation=str, required=True, alias='url', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

model_post_init(_ModelMetaclass__context: Any) None

We need to both initialize private attributes and call the user-defined model_post_init method.

Return type:

None

class luna_handlers.classes.schemas.storage_policy.ImageOriginPolicy(**data)[source]

Image origin policy

asDict()[source]

Get ImageOriginPolicy as dict with ttl

Return type:

dict

async execute(events, accountId, bucket, luna3Client)[source]

Save origin images.

Parameters:
  • events – events

  • accountId – account id

  • bucket – bucket name

  • luna3Client – client

Notes

we need to loop through images if image_origin is image because we have to upload them and save as url

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeImage': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_image', alias_priority=1), 'ttl': FieldInfo(annotation=Union[Literal[-1, 1, 2, 3, 4, 5, 6, 7, 14, 30, 60, 90, 180, 365], NoneType], required=False, default=None, alias='ttl', alias_priority=1), 'useExternalReferences': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='use_external_references', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.LinkToListsPolicy(**data)[source]

Link to lists policy schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'listId': FieldInfo(annotation=UUID, required=True, alias='list_id', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.NotificationStoragePolicy(**data)[source]

Notification store policy

async execute(events, accountId, redisContext)[source]
Return type:

None

Save notifications :param events: events :param accountId: account id :param redisContext: redis context

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'sendNotification': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='send_notification', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.Params(**data)[source]
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'contentType': FieldInfo(annotation=Literal['application/json', 'application/msgpack'], required=False, default='application/json', alias='content_type', alias_priority=1), 'headers': FieldInfo(annotation=dict[str, str], required=False, default_factory=<lambda>, alias='headers', alias_priority=1), 'timeout': FieldInfo(annotation=int, required=False, default_factory=<lambda>, alias='timeout', alias_priority=1, metadata=[None, Interval(gt=None, ge=0, lt=None, le=None), None])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.StoragePolicy(**data)[source]

Storage policy schema

async execute(events, accountId, monitoring, config, luna3Client, redisContext)[source]

Execute storage policy - save objects.

Parameters:
  • events – events to process

  • accountId – account id

  • monitoring – data for monitoring

  • config – app config

  • luna3Client – client

  • redisContext – redis context

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'attributePolicy': FieldInfo(annotation=AttributeStorePolicy, required=False, default_factory=<lambda>, alias='attribute_policy', alias_priority=1), 'bodySamplePolicy': FieldInfo(annotation=BodySamplePolicy, required=False, default=BodySamplePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeSample=1, ttl=None), alias='body_sample_policy', alias_priority=1), 'callbacks': FieldInfo(annotation=List[HttpCallback], required=False, default=[], alias='callbacks', alias_priority=1), 'eventPolicy': FieldInfo(annotation=EventStoragePolicy, required=False, default=EventStoragePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeEvent=1, waitSaving=1), alias='event_policy', alias_priority=1), 'facePolicy': FieldInfo(annotation=FaceStoragePolicy, required=False, default=FaceStoragePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeFace=0, setSampleAsAvatar=1, linkToListsPolicy=[]), alias='face_policy', alias_priority=1), 'faceSamplePolicy': FieldInfo(annotation=FaceSamplePolicy, required=False, default=FaceSamplePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeSample=1, ttl=None), alias='face_sample_policy', alias_priority=1), 'imageOriginPolicy': FieldInfo(annotation=ImageOriginPolicy, required=False, default=ImageOriginPolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeImage=0, useExternalReferences=1, ttl=None), alias='image_origin_policy', alias_priority=1), 'notificationPolicy': FieldInfo(annotation=NotificationStoragePolicy, required=False, default=NotificationStoragePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), sendNotification=1), alias='notification_policy', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.storage_policy.StorePolicyConfig(facesBucket, bodiesBucket, originBucket)[source]

Handler config that policies should apply.

Module contains schemas for verifier

class luna_handlers.classes.schemas.verifier.VerifierAttributeStorePolicy(**data)[source]

Verifier attribute storage policy

async execute(events, accountId, luna3Client)[source]

Save attributes.

Return type:

None

Parameters:
  • events – events

  • accountId – account id

  • luna3Client – client

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'storeAttribute': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_attribute', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.verifier.VerifierDetectPolicy(**data)[source]

Verifier detect policy

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'deepfakeStates': FieldInfo(annotation=Union[Annotated[List[IntDeepfake], Len], NoneType], required=False, default=None, alias='deepfake_states', alias_priority=1), 'detectLandmarks68': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='detect_landmarks68', alias_priority=1), 'estimateDeepfake': FieldInfo(annotation=DeepfakePolicy, required=False, default_factory=<lambda>, alias='estimate_deepfake', alias_priority=1), 'estimateEmotions': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_emotions', alias_priority=1), 'estimateEyesAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_eyes_attributes', alias_priority=1), 'estimateGaze': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_gaze', alias_priority=1), 'estimateGlasses': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_glasses', alias_priority=1), 'estimateHeadPose': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_head_pose', alias_priority=1), 'estimateLiveness': FieldInfo(annotation=LivenessPolicy, required=False, default_factory=<lambda>, alias='estimate_liveness', alias_priority=1), 'estimateMask': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_mask', alias_priority=1), 'estimateMouthAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_mouth_attributes', alias_priority=1), 'estimateQuality': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_quality', alias_priority=1), 'extractExif': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_exif', alias_priority=1), 'faceQuality': FieldInfo(annotation=FaceQualitySchema, required=False, default_factory=<lambda>, alias='face_quality', alias_priority=1), 'livenessStates': FieldInfo(annotation=Union[Annotated[List[IntLiveness], Len], NoneType], required=False, default=None, alias='liveness_states', alias_priority=1), 'maskStates': FieldInfo(annotation=Union[Annotated[List[IntMasks], Len], NoneType], required=False, default=None, alias='mask_states', alias_priority=1), 'multifacePolicy': FieldInfo(annotation=Literal[0, 1, 2], required=False, default=1, alias='multiface_policy', alias_priority=1), 'pitchThreshold': FieldInfo(annotation=Union[IntAngle180, NoneType], required=False, default=None, alias='pitch_threshold', alias_priority=1), 'rollThreshold': FieldInfo(annotation=Union[IntAngle180, NoneType], required=False, default=None, alias='roll_threshold', alias_priority=1), 'yawThreshold': FieldInfo(annotation=Union[IntAngle180, NoneType], required=False, default=None, alias='yaw_threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.verifier.VerifierExtractPolicy(**data)[source]

Verifier extract policy

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'extractBasicAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_basic_attributes', alias_priority=1), 'fdScoreThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='fd_score_threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.verifier.VerifierFaceSampleStorePolicy(**data)[source]

Verifier face sample storage policy

asDict()[source]

Get ImageOriginPolicy as dict with ttl

Return type:

dict

async execute(events, accountId, bucket, luna3Client)[source]

Save face samples.

Parameters:
  • events – events

  • accountId – account id

  • bucket – bucket name

  • luna3Client – client

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'storeSample': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_sample', alias_priority=1), 'ttl': FieldInfo(annotation=Union[Literal[-1, 1, 2, 3, 4, 5, 6, 7, 14, 30, 60, 90, 180, 365], NoneType], required=False, default=None, alias='ttl', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.verifier.VerifierInputEstimationsModel(**data)[source]

Verifier model for incoming estimations: urls, image (only face bounding boxes available) or samples

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'image': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='image', alias_priority=1), 'mimetype': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='mimetype', alias_priority=1), 'samples': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='samples', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)]), 'trustedDetections': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='trusted_detections', alias_priority=1), 'urls': FieldInfo(annotation=List[UrlWithFaceBbox], required=False, default_factory=<lambda>, alias='urls', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.verifier.VerifierMatchPolicy(**data)[source]

Verifier match policy schema

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'candidates': FieldInfo(annotation=Union[FaceMatchCandidates, EventMatchCandidates, AttributeMatchCandidates], required=True, alias='candidates', alias_priority=1, discriminator='origin', metadata=[WrapValidator(func=<function excludeDiscriminatorFromException>)]), 'descriptor': FieldInfo(annotation=MatchingDescriptor, required=False, default=MatchingDescriptor(descriptorType='face'), alias='descriptor', alias_priority=1), 'filters': FieldInfo(annotation=AttributesFilters, required=False, default=AttributesFilters(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None), alias='filters', alias_priority=1), 'label': FieldInfo(annotation=Str36, required=False, default='', alias='label', alias_priority=1), 'limit': FieldInfo(annotation=Union[IntMatchingLimit, NoneType], required=False, default=3, alias='limit', alias_priority=1), 'targets': FieldInfo(annotation=Union[List[str], NoneType], required=False, default_factory=<lambda>, alias='targets', alias_priority=1), 'threshold': FieldInfo(annotation=Union[StrictFloat01, NoneType], required=False, default_factory=<lambda>, alias='threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.verifier.VerifierModel(**data)[source]

Verifier

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'description': FieldInfo(annotation=Str128, required=False, default='', alias='description', alias_priority=1), 'policies': FieldInfo(annotation=VerifierPoliciesModel, required=False, default_factory=<lambda>, alias='policies', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.verifier.VerifierPoliciesModel(**data)[source]

Verifier policies

async execute(events, accountId, monitoring, facesBucket, luna3Client)[source]

Executes given policies against provided data.

Parameters:
  • events – events

  • accountId – account id

  • monitoring – monitoring data

  • facesBucket – faces bucket

  • luna3Client – luna platform client

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'detectPolicy': FieldInfo(annotation=VerifierDetectPolicy, required=False, default_factory=<lambda>, alias='detect_policy', alias_priority=1), 'extractPolicy': FieldInfo(annotation=VerifierExtractPolicy, required=False, default=VerifierExtractPolicy(extractBasicAttributes=0, fdScoreThreshold=0.0), alias='extract_policy', alias_priority=1), 'storagePolicy': FieldInfo(annotation=VerifierStoragePolicy, required=False, default=VerifierStoragePolicy(attributePolicy=VerifierAttributeStorePolicy(storeAttribute=0), faceSamplePolicy=VerifierFaceSampleStorePolicy(storeSample=0, ttl=None)), alias='storage_policy', alias_priority=1), 'verificationThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.9, alias='verification_threshold', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

model_post_init(_VerifierPoliciesModel__context)[source]

Override this method to perform additional initialization after __init__ and model_construct. This is useful if you want to do some validation that requires the entire model to be initialized.

Return type:

None

class luna_handlers.classes.schemas.verifier.VerifierStoragePolicy(**data)[source]

Verifier storage policy

async execute(events, accountId, monitoring, facesBucket, luna3Client)[source]

Execute storage policy - save objects. :param events: events :param accountId: account id :param monitoring: monitoring data :param facesBucket: faces bucket :param luna3Client: luna3 client

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'attributePolicy': FieldInfo(annotation=Union[VerifierAttributeStorePolicy, NoneType], required=False, default=VerifierAttributeStorePolicy(storeAttribute=0), alias='attribute_policy', alias_priority=1), 'faceSamplePolicy': FieldInfo(annotation=Union[VerifierFaceSampleStorePolicy, NoneType], required=False, default=VerifierFaceSampleStorePolicy(storeSample=0, ttl=None), alias='face_sample_policy', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

Types

Module contains custom basics for validation schemas It highly recommended to use represented classes instead of pydantic defaults!

class luna_handlers.classes.schemas.types.DateTimeString[source]

Datetime string type/ rfc3339

validateTime(value)[source]

Validate that value can be parsed as time :param value: time in rfc3339

Returns:

value

class luna_handlers.classes.schemas.types.DetectTs(x=0, /)[source]

User-defined timestamp relative to something, such as the start of a video

class luna_handlers.classes.schemas.types.EventId[source]

Event ID type

class luna_handlers.classes.schemas.types.ExternalId[source]

External id type

class luna_handlers.classes.schemas.types.FaceId[source]

Face ID type

class luna_handlers.classes.schemas.types.Float180(x=0, /)[source]

Strict float in range -180 to 180

class luna_handlers.classes.schemas.types.FloatGeoDelta(x=0, /)[source]

Non-strict float for latitude in range 0.0 - 9.0

class luna_handlers.classes.schemas.types.FloatLatitude(x=0, /)[source]

Non-strict float for latitude in range -90.0 - 90.0

class luna_handlers.classes.schemas.types.FloatLongitude(x=0, /)[source]

Non-strict float for longitude in range -180.0 - 180.0

class luna_handlers.classes.schemas.types.GeoPosition(**data)[source]
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'latitude': FieldInfo(annotation=FloatLatitude, required=True, alias='latitude', alias_priority=1), 'longitude': FieldInfo(annotation=FloatLongitude, required=True, alias='longitude', alias_priority=1)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class luna_handlers.classes.schemas.types.IntAge[source]

Int in range 0 - 100

class luna_handlers.classes.schemas.types.IntAngle180[source]

Int for angles - in range 0 - 180

class luna_handlers.classes.schemas.types.IntAttributeTTL[source]

Int in range 0 - MAX_ATTRIBUTE_TTL

classmethod update()[source]

Update inherit schema.

class luna_handlers.classes.schemas.types.IntDeepfake[source]

Int in range of available deepfake state values

class luna_handlers.classes.schemas.types.IntEmotions[source]

Int in range of available emotions values

class luna_handlers.classes.schemas.types.IntEthnicities[source]

Int in range of available ethnicities values

class luna_handlers.classes.schemas.types.IntLiveness[source]

Int in range of available liveness state values

class luna_handlers.classes.schemas.types.IntMasks[source]

Int in range of available masks values

class luna_handlers.classes.schemas.types.IntMatchingLimit[source]

Int in range 0 - RESULT_CANDIDATE_LIMIT

classmethod update()[source]

Update inherit schema.

class luna_handlers.classes.schemas.types.IntNonNegative[source]

Int non negative

class luna_handlers.classes.schemas.types.LocationName[source]

Location name type

class luna_handlers.classes.schemas.types.ObjectId[source]

ID type, string uuid

class luna_handlers.classes.schemas.types.SDKInt[source]

Int in range from min to max SDK magic numbers

class luna_handlers.classes.schemas.types.Str128[source]

Strict string 128 len max

class luna_handlers.classes.schemas.types.Str256[source]

Strict string 128 len max

class luna_handlers.classes.schemas.types.Str36[source]

Strict string 36 len max

class luna_handlers.classes.schemas.types.StreamId[source]

Stream ID type

class luna_handlers.classes.schemas.types.StrictFloat01(x=0, /)[source]

Strict float in range 0.0 - 1.0

class luna_handlers.classes.schemas.types.StrictFloatNonNegative(x=0, /)[source]

Strict float non negative

class luna_handlers.classes.schemas.types.UserData[source]

Event user_data type