python_arango_ogm.db.pao_fields
1from abc import ABC, abstractmethod 2from enum import StrEnum, auto 3from typing import Dict 4 5 6class FieldTypeEnum(StrEnum): 7 """ 8 Field Type Enum, used to specify field type in certain situations: 9 """ 10 11 ARRAY = auto() 12 FLOAT = auto() 13 INT = auto() 14 STRING = auto() 15 16 17class Field(ABC): 18 def __init__( 19 self, 20 field_type: FieldTypeEnum, 21 index_name: str = None, 22 required: bool = False, 23 unique: bool = False, 24 minimum: float = None, 25 maximum: float = None 26 ): 27 if unique and not index_name: 28 raise ValueError(f"unique attribute requires an index_name for field {self.__class__.__name__}") 29 self.field_type = field_type 30 self.index_name = index_name 31 self.unique = unique 32 self.required = required 33 self.minimum = minimum 34 self.maximum = maximum 35 36 @abstractmethod 37 def build_schema_properties(self) -> Dict[str, any]: 38 pass 39 40 41class FloatField(Field): 42 def __init__(self, 43 index_name: str = None, 44 required: bool = False, 45 unique: bool = False, 46 minimum: float = None, 47 maximum: float = None): 48 super().__init__(FieldTypeEnum.FLOAT, index_name=index_name, unique=unique, required=required, minimum=minimum, 49 maximum=maximum) 50 51 def build_schema_properties(self) -> Dict[str, any]: 52 props = {'type': 'number'} 53 if self.minimum is not None: 54 props['minimum'] = self.minimum 55 56 if self.maximum is not None: 57 props['maximum'] = self.maximum 58 return props 59 60 61class IntField(Field): 62 def __init__(self, 63 index_name: str = None, 64 unique: bool = False, 65 required: bool = False, 66 minimum=None, 67 maximum=None): 68 super().__init__(FieldTypeEnum.INT, index_name=index_name, unique=unique, required=required, minimum=minimum, 69 maximum=maximum) 70 71 def build_schema_properties(self) -> Dict[str, any]: 72 props = {'type': 'number', 'multipleOf': 1} 73 if self.minimum is not None: 74 props['minimum'] = self.minimum 75 76 if self.maximum is not None: 77 props['maximum'] = self.maximum 78 79 return props 80 81 82class StrField(Field): 83 def __init__(self, 84 index_name: str = None, 85 unique: bool = False, 86 required: bool = False, 87 minimum=None, 88 maximum=None): 89 super().__init__(FieldTypeEnum.STRING, index_name=index_name, unique=unique, required=required, minimum=minimum, 90 maximum=maximum) 91 92 def build_schema_properties(self) -> Dict[str, any]: 93 props = {'type': 'string'} 94 if self.minimum is not None: 95 props['minimum'] = self.minimum 96 97 if self.maximum is not None: 98 props['maximum'] = self.maximum 99 100 return props 101 102 103class ArrayField(Field): 104 def __init__(self, array_type: FieldTypeEnum, required: bool = False, minimum=None, maximum=None): 105 self.array_type = array_type 106 self.minimum = minimum 107 self.maximum = maximum 108 super().__init__(FieldTypeEnum.ARRAY, required=required) 109 110 def build_schema_properties(self) -> Dict[str, any]: 111 inner_field_type = 'number' if self.array_type in [FieldTypeEnum.INT, FieldTypeEnum.FLOAT] else 'string' 112 113 schema = { 114 'type': 'array', 115 'items': { 116 'type': inner_field_type 117 } 118 } 119 120 if self.minimum is not None: 121 schema['items']['minimum'] = self.minimum 122 123 if self.maximum is not None: 124 schema['items']['maximum'] = self.maximum 125 126 return schema
class
FieldTypeEnum(enum.StrEnum):
7class FieldTypeEnum(StrEnum): 8 """ 9 Field Type Enum, used to specify field type in certain situations: 10 """ 11 12 ARRAY = auto() 13 FLOAT = auto() 14 INT = auto() 15 STRING = auto()
Field Type Enum, used to specify field type in certain situations:
ARRAY =
<FieldTypeEnum.ARRAY: 'array'>
FLOAT =
<FieldTypeEnum.FLOAT: 'float'>
INT =
<FieldTypeEnum.INT: 'int'>
STRING =
<FieldTypeEnum.STRING: 'string'>
Inherited Members
- enum.Enum
- name
- value
- builtins.str
- encode
- replace
- split
- rsplit
- join
- capitalize
- casefold
- title
- center
- count
- expandtabs
- find
- partition
- index
- ljust
- lower
- lstrip
- rfind
- rindex
- rjust
- rstrip
- rpartition
- splitlines
- strip
- swapcase
- translate
- upper
- startswith
- endswith
- removeprefix
- removesuffix
- isascii
- islower
- isupper
- istitle
- isspace
- isdecimal
- isdigit
- isnumeric
- isalpha
- isalnum
- isidentifier
- isprintable
- zfill
- format
- format_map
- maketrans
class
Field(abc.ABC):
18class Field(ABC): 19 def __init__( 20 self, 21 field_type: FieldTypeEnum, 22 index_name: str = None, 23 required: bool = False, 24 unique: bool = False, 25 minimum: float = None, 26 maximum: float = None 27 ): 28 if unique and not index_name: 29 raise ValueError(f"unique attribute requires an index_name for field {self.__class__.__name__}") 30 self.field_type = field_type 31 self.index_name = index_name 32 self.unique = unique 33 self.required = required 34 self.minimum = minimum 35 self.maximum = maximum 36 37 @abstractmethod 38 def build_schema_properties(self) -> Dict[str, any]: 39 pass
Helper class that provides a standard way to create an ABC using inheritance.
42class FloatField(Field): 43 def __init__(self, 44 index_name: str = None, 45 required: bool = False, 46 unique: bool = False, 47 minimum: float = None, 48 maximum: float = None): 49 super().__init__(FieldTypeEnum.FLOAT, index_name=index_name, unique=unique, required=required, minimum=minimum, 50 maximum=maximum) 51 52 def build_schema_properties(self) -> Dict[str, any]: 53 props = {'type': 'number'} 54 if self.minimum is not None: 55 props['minimum'] = self.minimum 56 57 if self.maximum is not None: 58 props['maximum'] = self.maximum 59 return props
Helper class that provides a standard way to create an ABC using inheritance.
FloatField( index_name: str = None, required: bool = False, unique: bool = False, minimum: float = None, maximum: float = None)
Inherited Members
62class IntField(Field): 63 def __init__(self, 64 index_name: str = None, 65 unique: bool = False, 66 required: bool = False, 67 minimum=None, 68 maximum=None): 69 super().__init__(FieldTypeEnum.INT, index_name=index_name, unique=unique, required=required, minimum=minimum, 70 maximum=maximum) 71 72 def build_schema_properties(self) -> Dict[str, any]: 73 props = {'type': 'number', 'multipleOf': 1} 74 if self.minimum is not None: 75 props['minimum'] = self.minimum 76 77 if self.maximum is not None: 78 props['maximum'] = self.maximum 79 80 return props
Helper class that provides a standard way to create an ABC using inheritance.
IntField( index_name: str = None, unique: bool = False, required: bool = False, minimum=None, maximum=None)
Inherited Members
83class StrField(Field): 84 def __init__(self, 85 index_name: str = None, 86 unique: bool = False, 87 required: bool = False, 88 minimum=None, 89 maximum=None): 90 super().__init__(FieldTypeEnum.STRING, index_name=index_name, unique=unique, required=required, minimum=minimum, 91 maximum=maximum) 92 93 def build_schema_properties(self) -> Dict[str, any]: 94 props = {'type': 'string'} 95 if self.minimum is not None: 96 props['minimum'] = self.minimum 97 98 if self.maximum is not None: 99 props['maximum'] = self.maximum 100 101 return props
Helper class that provides a standard way to create an ABC using inheritance.
StrField( index_name: str = None, unique: bool = False, required: bool = False, minimum=None, maximum=None)
Inherited Members
104class ArrayField(Field): 105 def __init__(self, array_type: FieldTypeEnum, required: bool = False, minimum=None, maximum=None): 106 self.array_type = array_type 107 self.minimum = minimum 108 self.maximum = maximum 109 super().__init__(FieldTypeEnum.ARRAY, required=required) 110 111 def build_schema_properties(self) -> Dict[str, any]: 112 inner_field_type = 'number' if self.array_type in [FieldTypeEnum.INT, FieldTypeEnum.FLOAT] else 'string' 113 114 schema = { 115 'type': 'array', 116 'items': { 117 'type': inner_field_type 118 } 119 } 120 121 if self.minimum is not None: 122 schema['items']['minimum'] = self.minimum 123 124 if self.maximum is not None: 125 schema['items']['maximum'] = self.maximum 126 127 return schema
Helper class that provides a standard way to create an ABC using inheritance.
ArrayField( array_type: FieldTypeEnum, required: bool = False, minimum=None, maximum=None)
def
build_schema_properties(self) -> Dict[str, <built-in function any>]:
111 def build_schema_properties(self) -> Dict[str, any]: 112 inner_field_type = 'number' if self.array_type in [FieldTypeEnum.INT, FieldTypeEnum.FLOAT] else 'string' 113 114 schema = { 115 'type': 'array', 116 'items': { 117 'type': inner_field_type 118 } 119 } 120 121 if self.minimum is not None: 122 schema['items']['minimum'] = self.minimum 123 124 if self.maximum is not None: 125 schema['items']['maximum'] = self.maximum 126 127 return schema