tiferet 1.0.0a19__py3-none-any.whl → 1.0.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. tiferet/__init__.py +3 -2
  2. tiferet/commands/__init__.py +6 -0
  3. tiferet/commands/app.py +102 -0
  4. tiferet/commands/core.py +124 -0
  5. tiferet/commands/dependencies.py +76 -0
  6. tiferet/commands/settings.py +101 -0
  7. tiferet/configs/__init__.py +3 -67
  8. tiferet/configs/error.py +48 -0
  9. tiferet/configs/settings.py +37 -0
  10. tiferet/contexts/__init__.py +0 -8
  11. tiferet/contexts/app.py +215 -182
  12. tiferet/contexts/cache.py +76 -0
  13. tiferet/contexts/container.py +92 -190
  14. tiferet/contexts/error.py +78 -80
  15. tiferet/contexts/feature.py +122 -83
  16. tiferet/contracts/__init__.py +4 -0
  17. tiferet/contracts/app.py +92 -0
  18. tiferet/contracts/cache.py +70 -0
  19. tiferet/contracts/container.py +147 -0
  20. tiferet/contracts/error.py +177 -0
  21. tiferet/contracts/feature.py +159 -0
  22. tiferet/contracts/settings.py +34 -0
  23. tiferet/data/__init__.py +3 -4
  24. tiferet/data/app.py +71 -208
  25. tiferet/data/container.py +52 -38
  26. tiferet/data/error.py +15 -24
  27. tiferet/data/feature.py +27 -8
  28. tiferet/{domain/core.py → data/settings.py} +36 -96
  29. tiferet/handlers/__init__.py +0 -0
  30. tiferet/handlers/container.py +116 -0
  31. tiferet/handlers/error.py +49 -0
  32. tiferet/handlers/feature.py +94 -0
  33. tiferet/models/__init__.py +4 -0
  34. tiferet/models/app.py +150 -0
  35. tiferet/models/container.py +135 -0
  36. tiferet/{domain → models}/error.py +86 -36
  37. tiferet/{domain → models}/feature.py +107 -47
  38. tiferet/models/settings.py +148 -0
  39. tiferet/proxies/__init__.py +0 -0
  40. tiferet/proxies/yaml/__init__.py +0 -0
  41. tiferet/{repos → proxies/yaml}/app.py +13 -41
  42. tiferet/{repos → proxies/yaml}/container.py +26 -56
  43. tiferet/{repos → proxies/yaml}/error.py +11 -70
  44. tiferet/proxies/yaml/feature.py +92 -0
  45. {tiferet-1.0.0a19.dist-info → tiferet-1.0.0b1.dist-info}/METADATA +12 -3
  46. tiferet-1.0.0b1.dist-info/RECORD +51 -0
  47. {tiferet-1.0.0a19.dist-info → tiferet-1.0.0b1.dist-info}/WHEEL +1 -1
  48. tiferet/commands/container.py +0 -54
  49. tiferet/commands/error.py +0 -21
  50. tiferet/commands/feature.py +0 -90
  51. tiferet/contexts/request.py +0 -110
  52. tiferet/domain/__init__.py +0 -5
  53. tiferet/domain/app.py +0 -131
  54. tiferet/domain/container.py +0 -141
  55. tiferet/repos/__init__.py +0 -7
  56. tiferet/repos/feature.py +0 -151
  57. tiferet-1.0.0a19.dist-info/RECORD +0 -35
  58. {tiferet-1.0.0a19.dist-info → tiferet-1.0.0b1.dist-info/licenses}/LICENSE +0 -0
  59. {tiferet-1.0.0a19.dist-info → tiferet-1.0.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,148 @@
1
+ # *** imports
2
+
3
+ # ** infra
4
+ from schematics import Model, types as t
5
+
6
+
7
+ # *** classes
8
+
9
+ # ** class: string_type
10
+ class StringType(t.StringType):
11
+ '''
12
+ A string type.
13
+ '''
14
+
15
+ pass
16
+
17
+
18
+ # ** class: integer_type
19
+ class IntegerType(t.IntType):
20
+ '''
21
+ An integer type.
22
+ '''
23
+
24
+ pass
25
+
26
+
27
+ # ** class: float_type
28
+ class FloatType(t.FloatType):
29
+ '''
30
+ A float type.
31
+ '''
32
+
33
+ pass
34
+
35
+
36
+ # ** class: boolean_type
37
+ class BooleanType(t.BooleanType):
38
+ '''
39
+ A boolean type.
40
+ '''
41
+
42
+ pass
43
+
44
+
45
+ # ** class: list_type
46
+ class ListType(t.ListType):
47
+ '''
48
+ A list type.
49
+ '''
50
+
51
+ pass
52
+
53
+
54
+ # ** class: dict_type
55
+ class DictType(t.DictType):
56
+ '''
57
+ A dictionary type.
58
+ '''
59
+
60
+ pass
61
+
62
+
63
+ # ** class: model_type
64
+ class ModelType(t.ModelType):
65
+ '''
66
+ A model type.
67
+ '''
68
+
69
+ pass
70
+
71
+
72
+ # ** class: model_object
73
+ class ModelObject(Model):
74
+ '''
75
+ A domain model object.
76
+ '''
77
+
78
+ # ** attribute: name
79
+ name = StringType(
80
+ metadata=dict(
81
+ description='The name of the object.'
82
+ )
83
+ )
84
+
85
+ # ** attribute: description
86
+ description = StringType(
87
+ metadata=dict(
88
+ description='The description of the object.'
89
+ )
90
+ )
91
+
92
+ # * method: new
93
+ @staticmethod
94
+ def new(
95
+ model_type: type,
96
+ validate: bool = True,
97
+ strict: bool = True,
98
+ **kwargs
99
+ ) -> 'ModelObject':
100
+ '''
101
+ Initializes a new model object.
102
+
103
+ :param model_type: The type of model object to create.
104
+ :type model_type: type
105
+ :param validate: True to validate the model object.
106
+ :type validate: bool
107
+ :param strict: True to enforce strict mode for the model object.
108
+ :type strict: bool
109
+ :param kwargs: Keyword arguments.
110
+ :type kwargs: dict
111
+ :return: A new model object.
112
+ :rclass: ModelObject
113
+ '''
114
+
115
+ # Create a new model object.
116
+ _object: ModelObject = model_type(dict(
117
+ **kwargs
118
+ ), strict=strict)
119
+
120
+ # Validate if specified.
121
+ if validate:
122
+ _object.validate()
123
+
124
+ # Return the new model object.
125
+ return _object
126
+
127
+
128
+ # ** model: value_object
129
+ class ValueObject(ModelObject):
130
+ '''
131
+ A domain model value object.
132
+ '''
133
+ pass
134
+
135
+
136
+ # ** class: entity
137
+ class Entity(ModelObject):
138
+ '''
139
+ A domain model entity.
140
+ '''
141
+
142
+ # ** attribute: id
143
+ id = StringType(
144
+ required=True,
145
+ metadata=dict(
146
+ description='The entity unique identifier.'
147
+ )
148
+ )
File without changes
File without changes
@@ -1,45 +1,13 @@
1
1
  # *** imports
2
2
 
3
3
  # ** app
4
- from ..domain.app import AppInterface
5
- from ..data.app import AppInterfaceYamlData
6
- from ..clients import yaml_client
4
+ from ...data import DataObject
5
+ from ...data.app import AppInterfaceYamlData
6
+ from ...contracts.app import AppRepository, AppInterface
7
+ from ...clients import yaml_client
7
8
 
8
9
 
9
- # *** repository
10
-
11
- # ** interface: app_repository
12
- class AppRepository(object):
13
- '''
14
- An app repository is a class that is used to get an app interface.
15
- '''
16
-
17
- # * method: list_interfaces
18
- def list_interfaces(self) -> list[AppInterface]:
19
- '''
20
- List all app interfaces.
21
-
22
- :return: The list of app interfaces.
23
- :rtype: list[AppInterface]
24
- '''
25
-
26
- # Not implemented.
27
- raise NotImplementedError()
28
-
29
- # * method: get_interface
30
- def get_interface(self, id: str) -> AppInterface:
31
- '''
32
- Get the app interface.
33
-
34
- :param id: The app interface id.
35
- :type id: str
36
- :return: The app interface.
37
- :rtype: AppInterface
38
- '''
39
-
40
- # Not implemented.
41
- raise NotImplementedError()
42
-
10
+ # *** proxies
43
11
 
44
12
  # ** proxy: app_yaml_proxy
45
13
  class AppYamlProxy(AppRepository):
@@ -65,14 +33,15 @@ class AppYamlProxy(AppRepository):
65
33
  List all app interfaces.
66
34
 
67
35
  :return: The list of app interfaces.
68
- :rtype: list[AppInterface]
36
+ :rtype: List[AppInterface]
69
37
  '''
70
38
 
71
39
  # Load the app interface data from the yaml configuration file and map it to the app interface object.
72
40
  interfaces = yaml_client.load(
73
41
  self.config_file,
74
42
  create_data=lambda data: [
75
- AppInterfaceYamlData.from_data(
43
+ DataObject.from_data(
44
+ AppInterfaceYamlData,
76
45
  id=interface_id,
77
46
  **record
78
47
  ).map() for interface_id, record in data.items()],
@@ -95,8 +64,11 @@ class AppYamlProxy(AppRepository):
95
64
  # Load the app interface data from the yaml configuration file.
96
65
  _data: AppInterface = yaml_client.load(
97
66
  self.config_file,
98
- create_data=lambda data: AppInterfaceYamlData.from_data(
99
- id=id, **data),
67
+ create_data=lambda data: DataObject.from_data(
68
+ AppInterfaceYamlData,
69
+ id=id,
70
+ **data
71
+ ),
100
72
  start_node=lambda data: data.get('interfaces').get(id))
101
73
 
102
74
  # Return the app interface object.
@@ -4,56 +4,15 @@
4
4
  from typing import List, Dict, Tuple
5
5
 
6
6
  # ** app
7
- from ..domain.container import ContainerAttribute
8
- from ..data.container import ContainerAttributeYamlData
9
- from ..clients import yaml as yaml_client
7
+ from ...data.container import ContainerAttributeYamlData
8
+ from ...contracts.container import ContainerRepository, ContainerAttribute
9
+ from ...clients import yaml as yaml_client
10
10
 
11
11
 
12
- # *** repository
12
+ # *** proxies
13
13
 
14
- # * interface: container_repository
15
- class ContainerRepository(object):
16
- '''
17
- Container repository interface.
18
- '''
19
-
20
- # * field: role
21
- read_role: str = None
22
-
23
- # * field: write_role
24
- write_role: str = None
25
-
26
- # * method: get_attribute
27
- def get_attribute(self, attribute_id: str, type: str) -> ContainerAttribute:
28
- '''
29
- Get the container attribute.
30
-
31
- :param attribute_id: The attribute id.
32
- :type attribute_id: str
33
- :param type: The container attribute type.
34
- :type type: str
35
- :return: The container attribute.
36
- :rtype: ContainerAttribute
37
- '''
38
-
39
- # Not implemented.
40
- raise NotImplementedError()
41
-
42
- # * method: list_all
43
- def list_all(self) -> Tuple[List[ContainerAttribute], List[str]]:
44
- '''
45
- List all the container attributes and constants.
46
-
47
- :return: The list of container attributes and constants.
48
- :rtype: List[ContainerAttribute]
49
- '''
50
-
51
- # Not implemented.
52
- raise NotImplementedError()
53
-
54
-
55
- # ** proxy: yaml_proxy
56
- class YamlProxy(ContainerRepository):
14
+ # ** proxy: container_yaml_proxy
15
+ class ContainerYamlProxy(ContainerRepository):
57
16
  '''
58
17
  Yaml proxy for container attributes.
59
18
  '''
@@ -71,14 +30,12 @@ class YamlProxy(ContainerRepository):
71
30
  self.config_file = container_config_file
72
31
 
73
32
  # * method: get_attribute
74
- def get_attribute(self, attribute_id: str, type: str) -> ContainerAttribute:
33
+ def get_attribute(self, attribute_id: str) -> ContainerAttribute:
75
34
  '''
76
35
  Get the attribute from the yaml file.
77
36
 
78
37
  :param attribute_id: The attribute id.
79
38
  :type attribute_id: str
80
- :param type: The attribute type.
81
- :type type: str
82
39
  :return: The container attribute.
83
40
  :rtype: ContainerAttribute
84
41
  '''
@@ -92,7 +49,8 @@ class YamlProxy(ContainerRepository):
92
49
  )
93
50
 
94
51
  # If the data is None or the type does not match, return None.
95
- if data is None or data.type != type:
52
+ # Remove the type logic later, as the type parameter will be removed in v2 (obsolete).
53
+ if data is None:
96
54
  return None
97
55
 
98
56
  # Return the attribute.
@@ -104,16 +62,28 @@ class YamlProxy(ContainerRepository):
104
62
  List all the container attributes and constants.
105
63
 
106
64
  :return: The list of container attributes and constants.
107
- :rtype: List[ContainerAttribute]
65
+ :rtype: Tuple[List[ContainerAttribute], Dict[str, str]]
108
66
  '''
109
67
 
68
+ # Define create data function to parse the YAML file.
69
+ def create_data(data):
70
+
71
+ # Create a list of ContainerAttributeYamlData objects from the YAML data.
72
+ attrs = [
73
+ ContainerAttributeYamlData.from_data(id=id, **attr_data)
74
+ for id, attr_data in data.get('attrs', {}).items()
75
+ ] if data.get('attrs') else []
76
+
77
+ # Get the constants from the YAML data.
78
+ consts = data.get('const', {}) if data.get('const') else {}
79
+
80
+ # Return the parsed attributes and constants.
81
+ return attrs, consts
82
+
110
83
  # Load the attribute data from the yaml configuration file.
111
84
  attr_data, consts = yaml_client.load(
112
85
  self.config_file,
113
- create_data=lambda data: (
114
- [ContainerAttributeYamlData.from_data(id=id, **attr_data) for id, attr_data in data.get('attrs', {}).items()],
115
- data.get('const', {}),
116
- ),
86
+ create_data=create_data
117
87
  )
118
88
 
119
89
  # Return the list of container attributes.
@@ -4,73 +4,18 @@
4
4
  from typing import List, Dict
5
5
 
6
6
  # ** app
7
- from ..domain.error import Error
8
- from ..clients import yaml as yaml_client
9
- from ..data.error import ErrorData
7
+ from ...data.error import ErrorData
8
+ from ...contracts.error import (
9
+ Error,
10
+ ErrorRepository
11
+ )
12
+ from ...clients import yaml as yaml_client
10
13
 
11
14
 
12
- # *** repository
13
-
14
- # ** interface: error_repository
15
- class ErrorRepository(object):
16
-
17
- # * method: exists
18
- def exists(self, id: str, **kwargs) -> bool:
19
- '''
20
- Check if the error exists.
21
-
22
- :param id: The error id.
23
- :type id: str
24
- :param kwargs: Additional keyword arguments.
25
- :type kwargs: dict
26
- :return: Whether the error exists.
27
- :rtype: bool
28
- '''
29
-
30
- # Not implemented.
31
- raise NotImplementedError()
32
-
33
- # * method: get
34
- def get(self, id: str) -> Error:
35
- '''
36
- Get the error.
37
-
38
- :param id: The error id.
39
- :type id: str
40
- :return: The error.
41
- :rtype: Error
42
- '''
43
-
44
- # Not implemented.
45
- raise NotImplementedError()
46
-
47
- # * method: list
48
- def list(self) -> List[Error]:
49
- '''
50
- List all errors.
51
-
52
- :return: The list of errors.
53
- :rtype: List[Error]
54
- '''
55
-
56
- # Not implemented.
57
- raise NotImplementedError()
58
-
59
- # * method: save
60
- def save(self, error: Error):
61
- '''
62
- Save the error.
63
-
64
- :param error: The error.
65
- :type error: Error
66
- '''
67
-
68
- # Not implemented.
69
- raise NotImplementedError
70
-
15
+ # *** proxies
71
16
 
72
17
  # ** proxy: yaml_proxy
73
- class YamlProxy(ErrorRepository):
18
+ class ErrorYamlProxy(ErrorRepository):
74
19
  '''
75
20
  The YAML proxy for the error repository
76
21
  '''
@@ -104,11 +49,7 @@ class YamlProxy(ErrorRepository):
104
49
  '''
105
50
 
106
51
  # Load the error data from the yaml configuration file.
107
- data: List[ErrorData] = yaml_client.load(
108
- self.config_file,
109
- create_data=lambda data: ErrorData.from_data(
110
- id=id, **data),
111
- start_node=lambda data: data.get('errors').get(id))
52
+ data = self.get(id)
112
53
 
113
54
  # Return whether the error exists.
114
55
  return data is not None
@@ -132,7 +73,7 @@ class YamlProxy(ErrorRepository):
132
73
  start_node=lambda data: data.get('errors').get(id))
133
74
 
134
75
  # Return the error object.
135
- return _data.map()
76
+ return _data.map() if _data else None
136
77
 
137
78
  # * method: list
138
79
  def list(self) -> List[Error]:
@@ -169,5 +110,5 @@ class YamlProxy(ErrorRepository):
169
110
  yaml_client.save(
170
111
  yaml_file=self.config_file,
171
112
  data=error_data.to_primitive(),
172
- data_save_path=f'errors/{error.name}',
113
+ data_save_path=f'errors/{error.id}',
173
114
  )
@@ -0,0 +1,92 @@
1
+ # *** imports
2
+
3
+ # ** core
4
+ from typing import List
5
+
6
+ # ** app
7
+ from ...clients import yaml_client
8
+ from ...contracts.feature import Feature, FeatureRepository
9
+ from ...data import DataObject
10
+ from ...data.feature import FeatureData as FeatureYamlData
11
+
12
+
13
+ # *** proxies
14
+
15
+ # ** proxies: feature_yaml_proxy
16
+ class FeatureYamlProxy(FeatureRepository):
17
+ '''
18
+ Yaml repository for features.
19
+ '''
20
+
21
+ # * method: init
22
+ def __init__(self, feature_config_file: str):
23
+ '''
24
+ Initialize the yaml repository.
25
+
26
+ :param feature_config_file: The feature configuration file.
27
+ :type feature_config_file: str
28
+ '''
29
+
30
+ # Set the base path.
31
+ self.config_file = feature_config_file
32
+
33
+ # * method: exists
34
+ def exists(self, id: str) -> bool:
35
+ '''
36
+ Verifies if the feature exists.
37
+
38
+ :param id: The feature id.
39
+ :type id: str
40
+ :return: Whether the feature exists.
41
+ :rtype: bool
42
+ '''
43
+
44
+ # Retrieve the feature by id.
45
+ feature = self.get(id)
46
+
47
+ # Return whether the feature exists.
48
+ return feature is not None
49
+
50
+ # * method: get
51
+ def get(self, id: str) -> Feature:
52
+ '''
53
+ Get the feature by id.
54
+
55
+ :param id: The feature id.
56
+ :type id: str
57
+ :return: The feature object.
58
+ '''
59
+
60
+ # Get the feature.
61
+ return next((feature for feature in self.list() if feature.id == id), None)
62
+
63
+ # * method: list
64
+ def list(self, group_id: str = None) -> List[Feature]:
65
+ '''
66
+ List the features.
67
+
68
+ :param group_id: The group id.
69
+ :type group_id: str
70
+ :return: The list of features.
71
+ :rtype: List[Feature]
72
+ '''
73
+
74
+ # Load all feature data from yaml.
75
+ features = yaml_client.load(
76
+ self.config_file,
77
+ create_data=lambda data: [DataObject.from_data(
78
+ FeatureYamlData,
79
+ id=id,
80
+ feature_key=id.split('.')[-1],
81
+ group_id=id.split('.')[0] if not group_id else group_id,
82
+ **feature_data
83
+ ) for id, feature_data in data.items()],
84
+ start_node=lambda data: data.get('features')
85
+ )
86
+
87
+ # Filter features by group id.
88
+ if group_id:
89
+ features = [feature for feature in features if feature.group_id == group_id]
90
+
91
+ # Return the list of features.
92
+ return [feature.map() for feature in features]
@@ -1,10 +1,10 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: tiferet
3
- Version: 1.0.0a19
3
+ Version: 1.0.0b1
4
4
  Summary: A multi-purpose application framework embodying beauty in form.
5
5
  Home-page: https://github.com/greatstrength/app
6
6
  Download-URL: https://github.com/greatstrength/app
7
- Author: Andrew Shatz
7
+ Author: Andrew Shatz, Great Strength Systems
8
8
  Author-email: andrew@greatstrength.me
9
9
  License: BSD 3
10
10
  License-File: LICENSE
@@ -14,3 +14,12 @@ Requires-Dist: dependencies>=7.7.0
14
14
  Provides-Extra: test
15
15
  Requires-Dist: pytest>=8.3.3; extra == "test"
16
16
  Requires-Dist: pytest_env>=1.1.5; extra == "test"
17
+ Dynamic: author
18
+ Dynamic: author-email
19
+ Dynamic: download-url
20
+ Dynamic: home-page
21
+ Dynamic: license
22
+ Dynamic: license-file
23
+ Dynamic: provides-extra
24
+ Dynamic: requires-dist
25
+ Dynamic: summary
@@ -0,0 +1,51 @@
1
+ tiferet/__init__.py,sha256=X1lGrz4BrrSfk7_pYJ159j8Q0zczJm9UEmpwY1XJ3Eg,116
2
+ tiferet/clients/__init__.py,sha256=hSa_PgXM2jw9iVRrJH_SQUlSVISK-T4tTfgRKnXKkzA,33
3
+ tiferet/clients/yaml.py,sha256=790LB7CpaMow_Ng8zB6jGmJnoqz8xjMYbfDLeMd4o3Q,2816
4
+ tiferet/commands/__init__.py,sha256=wpLgT9FHmBU7I7NJMuGyHvyiCm64QHVAoUbd38y36ZE,90
5
+ tiferet/commands/app.py,sha256=tOka9yhc6tBPT7X8ACuLlE-12CAzk0j59hstE84G6wU,3174
6
+ tiferet/commands/core.py,sha256=4MSty0qM9v8sKihoLGFoPHFOyprVQ-MlPHvPqEO3hY8,3367
7
+ tiferet/commands/dependencies.py,sha256=bYwQXcT8HLyPRAavdSkrWI4vImsJ2H4Lr7AG9q3zxUw,2035
8
+ tiferet/commands/settings.py,sha256=W_HdOF5QV33DczHQu5iXHOhPKwaE6DUG4KPd5m6fm_Y,2605
9
+ tiferet/configs/__init__.py,sha256=aSp8zTjuQK6gKyOAlsobhVcrzz7MNagPvc7K1b2DFu8,80
10
+ tiferet/configs/error.py,sha256=27ONO4jslmVPSQBh1rUAorAQ9GZMtwwEoCoyVxCtbGc,1457
11
+ tiferet/configs/settings.py,sha256=U4Do6BNCodMBT2_Qi49Zk-saRFzCkKGx-nCs9hJETe0,867
12
+ tiferet/contexts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ tiferet/contexts/app.py,sha256=EFjcz3VxBDdCSPTpSxNyyloIeOIFXoRaOv796oMDQOk,8970
14
+ tiferet/contexts/cache.py,sha256=RsklfFmZTnFxzxh7hiKD3nuEg50LX-JuWcie7P6xfTo,1758
15
+ tiferet/contexts/container.py,sha256=2oC91WlXJtAnuFJo1yyo78wO8fDZyfkwF6638L7UtIQ,3985
16
+ tiferet/contexts/error.py,sha256=Yr0rJgUTnDSxq5rSobVxUcoibehyYfKT5SrcXClBA48,3804
17
+ tiferet/contexts/feature.py,sha256=INysGSyvrqcxIyhxMXlkCsLiZP-ik3mUwnspmITw7U8,5380
18
+ tiferet/contracts/__init__.py,sha256=a8e7mleeLr0s554mRd1K0O0q2clisR7wGpeex1-9hsI,47
19
+ tiferet/contracts/app.py,sha256=x1biqBRAKhYJtljG6M1MtbVxRk5nAHSGU8X1O16W_sE,1928
20
+ tiferet/contracts/cache.py,sha256=mr_sHGSe_k5GuE22f8NfX_2ppgHHCiZrnkCK07M53cc,1653
21
+ tiferet/contracts/container.py,sha256=jy8RULSoHifMGRkuWiu2QMR4JHJSryCLKeMzEWZ7Ov4,4544
22
+ tiferet/contracts/error.py,sha256=7cVX4b8dt-LIHoUNhquYvm2pTYRzybKbDIunKxd61fQ,4984
23
+ tiferet/contracts/feature.py,sha256=7zrvqegwzCbCQMWPAvUqu5AIYi74K-FkEt6Pvh9WiGo,3661
24
+ tiferet/contracts/settings.py,sha256=csHP9pny7_M8wtHyxQdCZ7iGNV5e1nWqHVAvbvW-8-o,469
25
+ tiferet/data/__init__.py,sha256=0DsMN6Q9Jd7hGGGlfpNiuCmmXWVQQ9LL4iw8lYPn_so,48
26
+ tiferet/data/app.py,sha256=uURJsi2anQe5l56jvkqNEznx6oIDNZIija-CSwLm4cQ,4354
27
+ tiferet/data/container.py,sha256=g8wqhU44SI1OgSbciSDe3s1Stnx3i-98snqk-XpYjYs,6663
28
+ tiferet/data/error.py,sha256=9GYkmHPDkttyOlfk-9t3lHIsoWFGVkpfDN1wMpdOfTM,2189
29
+ tiferet/data/feature.py,sha256=hFUkbe-j9jqaMbnZq0sfo6N64NOl042oDwfadFTfVSY,3501
30
+ tiferet/data/settings.py,sha256=mJh3EzGHATIX_geKyK6KRcCC6v2185V7swqwnym9mdQ,4277
31
+ tiferet/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ tiferet/handlers/container.py,sha256=986kEkrjssinCHOwR0_CWEnNnaX54YI0d4UNb8n4gBU,4148
33
+ tiferet/handlers/error.py,sha256=j0AYMzskNMfzLydFfAh54NGxnaKlKFVzf_J3KpUOa2s,1242
34
+ tiferet/handlers/feature.py,sha256=ar4j0OnUorZM5tR2thoLQUh2qjx9c0NuKjr1ZgPUzIY,2749
35
+ tiferet/models/__init__.py,sha256=a8e7mleeLr0s554mRd1K0O0q2clisR7wGpeex1-9hsI,47
36
+ tiferet/models/app.py,sha256=KCMTyvqoB7Gs05pauyBiD1nUPGYWoz_gzMJwjMGelFY,3822
37
+ tiferet/models/container.py,sha256=-hkGU1jK4ETKotDNdWAZOHaD6TdgQBg1MC5_TcisaqA,3552
38
+ tiferet/models/error.py,sha256=perVK1nfot8QVaowT3tUHlr-nh8Hy9E6rTE5p3Hhv28,5627
39
+ tiferet/models/feature.py,sha256=SDnK3WsisSh5cfaEcX0WXV1Y4N2WsaGfhkDl7NL9B6s,6423
40
+ tiferet/models/settings.py,sha256=nsdRY5IYv6TKxbBbxmpE6ujwmZxJPdF6VxlJkmt1P-k,2497
41
+ tiferet/proxies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ tiferet/proxies/yaml/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ tiferet/proxies/yaml/app.py,sha256=qx0b2WtywfxtETN8OPfzrrzvYcuAY6uiyU9ctgpx8QI,2269
44
+ tiferet/proxies/yaml/container.py,sha256=raOeZ2CIAbNHTzPNqL2tgPvuad7-LcPL0a1NJ-nmUYY,2971
45
+ tiferet/proxies/yaml/error.py,sha256=fFAFxbtVZ9dguvYb08TzrIBir1H0NYoe5JHjGm5HuTU,2885
46
+ tiferet/proxies/yaml/feature.py,sha256=CKIsAqil27U0VjtVIHTiq3U9chNOZM6HAuUyH5VDF_o,2471
47
+ tiferet-1.0.0b1.dist-info/licenses/LICENSE,sha256=e8_GutFM0sxbRlgUaeVsGvJ5uE-KvruLApOzIoHy_zU,1513
48
+ tiferet-1.0.0b1.dist-info/METADATA,sha256=XV7cqV4Z8eOk-MHcsxzdiBevtyW0dB7JxwJCYyaBVwM,741
49
+ tiferet-1.0.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
50
+ tiferet-1.0.0b1.dist-info/top_level.txt,sha256=g19Qw0j_VxPw-fgPF1TMPwbtHjnEhNQs0fa69wJZ6IM,8
51
+ tiferet-1.0.0b1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5