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.

field_type
index_name
unique
required
minimum
maximum
@abstractmethod
def build_schema_properties(self) -> Dict[str, <built-in function any>]:
37    @abstractmethod
38    def build_schema_properties(self) -> Dict[str, any]:
39        pass
class FloatField(Field):
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)
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)
def build_schema_properties(self) -> Dict[str, <built-in function any>]:
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
class IntField(Field):
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)
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)
def build_schema_properties(self) -> Dict[str, <built-in function any>]:
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
class StrField(Field):
 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)
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)
def build_schema_properties(self) -> Dict[str, <built-in function any>]:
 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
class ArrayField(Field):
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)
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)
array_type
minimum
maximum
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