ramifice 0.8.10__py3-none-any.whl → 0.8.12__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 (84) hide show
  1. ramifice/__init__.py +16 -1
  2. ramifice/commons/__init__.py +2 -2
  3. ramifice/commons/general.py +11 -11
  4. ramifice/commons/indexes.py +8 -8
  5. ramifice/commons/many.py +10 -6
  6. ramifice/commons/one.py +13 -8
  7. ramifice/commons/tools.py +4 -4
  8. ramifice/commons/unit_manager.py +15 -5
  9. ramifice/fields/__init__.py +1 -1
  10. ramifice/fields/bool_field.py +26 -18
  11. ramifice/fields/choice_float_dyn_field.py +29 -21
  12. ramifice/fields/choice_float_field.py +41 -33
  13. ramifice/fields/choice_float_mult_dyn_field.py +29 -21
  14. ramifice/fields/choice_float_mult_field.py +48 -40
  15. ramifice/fields/choice_int_dyn_field.py +29 -21
  16. ramifice/fields/choice_int_field.py +41 -33
  17. ramifice/fields/choice_int_mult_dyn_field.py +29 -21
  18. ramifice/fields/choice_int_mult_field.py +48 -40
  19. ramifice/fields/choice_text_dyn_field.py +29 -21
  20. ramifice/fields/choice_text_field.py +47 -39
  21. ramifice/fields/choice_text_mult_dyn_field.py +29 -21
  22. ramifice/fields/choice_text_mult_field.py +48 -40
  23. ramifice/fields/color_field.py +40 -32
  24. ramifice/fields/date_field.py +49 -40
  25. ramifice/fields/date_time_field.py +49 -40
  26. ramifice/fields/email_field.py +42 -34
  27. ramifice/fields/file_field.py +45 -35
  28. ramifice/fields/float_field.py +56 -47
  29. ramifice/fields/general/__init__.py +1 -1
  30. ramifice/fields/general/choice_group.py +2 -2
  31. ramifice/fields/general/date_group.py +2 -2
  32. ramifice/fields/general/field.py +2 -2
  33. ramifice/fields/general/file_group.py +2 -2
  34. ramifice/fields/general/number_group.py +2 -2
  35. ramifice/fields/general/text_group.py +3 -3
  36. ramifice/fields/id_field.py +35 -28
  37. ramifice/fields/image_field.py +67 -57
  38. ramifice/fields/integer_field.py +56 -47
  39. ramifice/fields/ip_field.py +41 -34
  40. ramifice/fields/password_field.py +29 -22
  41. ramifice/fields/phone_field.py +44 -36
  42. ramifice/fields/slug_field.py +30 -22
  43. ramifice/fields/text_field.py +43 -35
  44. ramifice/fields/url_field.py +40 -33
  45. ramifice/models/__init__.py +1 -1
  46. ramifice/models/decorator.py +33 -11
  47. ramifice/models/model.py +16 -16
  48. ramifice/paladins/__init__.py +2 -2
  49. ramifice/paladins/check.py +58 -51
  50. ramifice/paladins/delete.py +9 -3
  51. ramifice/paladins/groups/__init__.py +1 -1
  52. ramifice/paladins/groups/bool_group.py +3 -3
  53. ramifice/paladins/groups/choice_group.py +3 -3
  54. ramifice/paladins/groups/date_group.py +3 -3
  55. ramifice/paladins/groups/file_group.py +3 -3
  56. ramifice/paladins/groups/id_group.py +3 -3
  57. ramifice/paladins/groups/img_group.py +36 -35
  58. ramifice/paladins/groups/num_group.py +3 -3
  59. ramifice/paladins/groups/pass_group.py +3 -3
  60. ramifice/paladins/groups/slug_group.py +8 -3
  61. ramifice/paladins/groups/text_group.py +3 -3
  62. ramifice/paladins/password.py +11 -4
  63. ramifice/paladins/refrash.py +7 -3
  64. ramifice/paladins/save.py +9 -3
  65. ramifice/paladins/tools.py +11 -6
  66. ramifice/paladins/validation.py +4 -4
  67. ramifice/utils/__init__.py +1 -1
  68. ramifice/utils/constants.py +1 -1
  69. ramifice/utils/errors.py +7 -7
  70. ramifice/utils/fixtures.py +7 -2
  71. ramifice/utils/migration.py +18 -9
  72. ramifice/utils/mixins/__init__.py +1 -1
  73. ramifice/utils/mixins/add_valid.py +3 -3
  74. ramifice/utils/mixins/hooks.py +8 -8
  75. ramifice/utils/mixins/indexing.py +3 -3
  76. ramifice/utils/mixins/json_converter.py +6 -6
  77. ramifice/utils/tools.py +12 -12
  78. ramifice/utils/translations.py +8 -4
  79. ramifice/utils/unit.py +8 -3
  80. {ramifice-0.8.10.dist-info → ramifice-0.8.12.dist-info}/METADATA +1 -1
  81. ramifice-0.8.12.dist-info/RECORD +84 -0
  82. ramifice-0.8.10.dist-info/RECORD +0 -84
  83. {ramifice-0.8.10.dist-info → ramifice-0.8.12.dist-info}/WHEEL +0 -0
  84. {ramifice-0.8.10.dist-info → ramifice-0.8.12.dist-info}/licenses/LICENSE +0 -0
@@ -1,4 +1,4 @@
1
- """Migration are `Ramifice` way of
1
+ """Ramifice - Migration are `Ramifice` way of
2
2
  propagating changes you make to
3
3
  your models (add or delete a Model, add or delete a field in Model, etc.) into
4
4
  your database schema.
@@ -6,6 +6,7 @@ your database schema.
6
6
 
7
7
  __all__ = ("Migration",)
8
8
 
9
+ import logging
9
10
  from datetime import datetime
10
11
  from typing import Any
11
12
 
@@ -18,16 +19,21 @@ from ramifice.utils import constants
18
19
  from ramifice.utils.errors import DoesNotMatchRegexError, NoModelsForMigrationError, PanicError
19
20
  from ramifice.utils.fixtures import apply_fixture
20
21
 
22
+ logger = logging.getLogger(__name__)
23
+
21
24
 
22
25
  class Migration:
23
- """Migration of models to database."""
26
+ """Ramifice - Migration of models to database."""
24
27
 
25
28
  def __init__(self, database_name: str, mongo_client: AsyncMongoClient): # noqa: D107
26
29
  constants.DEBUG = False
27
30
  #
28
31
  db_name_regex = constants.REGEX["database_name"]
29
32
  if db_name_regex.match(database_name) is None:
30
- raise DoesNotMatchRegexError("^[a-zA-Z][-_a-zA-Z0-9]{0,59}$")
33
+ regex_str: str = "^[a-zA-Z][-_a-zA-Z0-9]{0,59}$"
34
+ msg: str = f"Does not match the regular expression: {regex_str}"
35
+ logger.error(msg)
36
+ raise DoesNotMatchRegexError(regex_str)
31
37
  #
32
38
  constants.DATABASE_NAME = database_name
33
39
  constants.MONGO_CLIENT = mongo_client
@@ -36,10 +42,11 @@ class Migration:
36
42
  self.model_list: list[Any] = Model.__subclasses__()
37
43
  # Raise the exception if there are no models for migration.
38
44
  if len(self.model_list) == 0:
45
+ logger.error("No Models for Migration!")
39
46
  raise NoModelsForMigrationError() # type: ignore[no-untyped-call]
40
47
 
41
48
  async def reset(self) -> None:
42
- """Reset the condition of the models in a super collection.
49
+ """Ramifice - Reset the condition of the models in a super collection.
43
50
 
44
51
  Switch the `is_model_exist` parameter in the condition `False`.
45
52
  """
@@ -55,7 +62,7 @@ class Migration:
55
62
  await super_collection.update_one(q_filter, update)
56
63
 
57
64
  async def model_state(self, metadata: dict[str, Any]) -> dict[str, Any]:
58
- """Get the state of the current model from a super collection."""
65
+ """Ramifice - Get the state of the current model from a super collection."""
59
66
  # Get access to super collection.
60
67
  # (Contains Model state and dynamic field data.)
61
68
  super_collection: AsyncCollection = constants.MONGO_DATABASE[
@@ -79,7 +86,7 @@ class Migration:
79
86
  return model_state
80
87
 
81
88
  def new_fields(self, metadata: dict[str, Any], model_state: dict[str, Any]) -> list[str]:
82
- """Get a list of new fields that were added to Model."""
89
+ """Ramifice - Get a list of new fields that were added to Model."""
83
90
  new_fields: list[str] = []
84
91
  for field_name, field_type in metadata["field_name_and_type"].items():
85
92
  old_field_type: str | None = model_state["field_name_and_type"].get(field_name)
@@ -88,7 +95,7 @@ class Migration:
88
95
  return new_fields
89
96
 
90
97
  async def napalm(self) -> None:
91
- """Delete data for non-existent Models from a super collection,
98
+ """Ramifice - Delete data for non-existent Models from a super collection,
92
99
  delete collections associated with those Models.
93
100
  """ # noqa: D205
94
101
  # Get access to database.
@@ -109,7 +116,7 @@ class Migration:
109
116
  await database.drop_collection(collection_name) # type: ignore[union-attr]
110
117
 
111
118
  async def migrate(self) -> None:
112
- """Run migration process.
119
+ """Ramifice - Run migration process.
113
120
 
114
121
  1) Update the state of Models in the super collection.
115
122
  2) Register new Models in the super collection.
@@ -167,7 +174,9 @@ class Migration:
167
174
  if not result_check["is_valid"]:
168
175
  print(colored("\n!!!>>MIGRATION<<!!!", "red", attrs=["bold"]))
169
176
  inst_model.print_err()
170
- raise PanicError("Migration failed.")
177
+ msg: str = "Migration failed."
178
+ logger.error(msg)
179
+ raise PanicError(msg)
171
180
  # Get checked data.
172
181
  checked_data = result_check["data"]
173
182
  # Add password from mongo_doc to checked_data.
@@ -1,4 +1,4 @@
1
- """A set of mixins for Ramifice."""
1
+ """Ramifice - Set of mixins for Models and Fields."""
2
2
 
3
3
  from ramifice.utils.mixins.add_valid import AddValidMixin
4
4
  from ramifice.utils.mixins.hooks import HooksMixin
@@ -1,4 +1,4 @@
1
- """AddValidMixin - Contains an abstract method for additional validation of fields."""
1
+ """Ramifice - AddValidMixin - Contains an abstract method for additional validation of fields."""
2
2
 
3
3
  __all__ = ("AddValidMixin",)
4
4
 
@@ -6,9 +6,9 @@ from abc import ABCMeta
6
6
 
7
7
 
8
8
  class AddValidMixin(metaclass=ABCMeta):
9
- """Contains an abstract method for additional validation of fields."""
9
+ """Ramifice - Contains an abstract method for additional validation of fields."""
10
10
 
11
11
  async def add_validation(self) -> dict[str, str]:
12
- """Additional validation of fields."""
12
+ """Ramifice - Additional validation of fields."""
13
13
  error_map: dict[str, str] = {}
14
14
  return error_map
@@ -1,4 +1,4 @@
1
- """HooksMixin - Contains abstract methods for creating hooks."""
1
+ """Ramifice - HooksMixin - Contains abstract methods for creating hooks."""
2
2
 
3
3
  __all__ = ("HooksMixin",)
4
4
 
@@ -6,22 +6,22 @@ from abc import ABCMeta
6
6
 
7
7
 
8
8
  class HooksMixin(metaclass=ABCMeta):
9
- """A set of abstract methods for creating hooks."""
9
+ """Ramifice - A set of abstract methods for creating hooks."""
10
10
 
11
11
  async def pre_create(self) -> None:
12
- """Called before a new document is created in the database."""
12
+ """Ramifice - Called before a new document is created in the database."""
13
13
 
14
14
  async def post_create(self) -> None:
15
- """Called after a new document has been created in the database."""
15
+ """Ramifice - Called after a new document has been created in the database."""
16
16
 
17
17
  async def pre_update(self) -> None:
18
- """Called before updating an existing document in the database."""
18
+ """Ramifice - Called before updating an existing document in the database."""
19
19
 
20
20
  async def post_update(self) -> None:
21
- """Called after an existing document in the database is updated."""
21
+ """Ramifice - Called after an existing document in the database is updated."""
22
22
 
23
23
  async def pre_delete(self) -> None:
24
- """Called before deleting an existing document in the database."""
24
+ """Ramifice - Called before deleting an existing document in the database."""
25
25
 
26
26
  async def post_delete(self) -> None:
27
- """Called after an existing document in the database has been deleted."""
27
+ """Ramifice - Called after an existing document in the database has been deleted."""
@@ -1,4 +1,4 @@
1
- """IndexMixin - Contains abstract method for indexing the model in the database."""
1
+ """Ramifice - IndexMixin - Contains abstract method for indexing the model in the database."""
2
2
 
3
3
  __all__ = ("IndexMixin",)
4
4
 
@@ -6,8 +6,8 @@ from abc import ABCMeta
6
6
 
7
7
 
8
8
  class IndexMixin(metaclass=ABCMeta):
9
- """Contains the method for indexing the model in the database."""
9
+ """Ramifice - Contains the method for indexing the model in the database."""
10
10
 
11
11
  @classmethod
12
12
  async def indexing(cls) -> None:
13
- """For set up and start indexing."""
13
+ """Ramifice - Set up and start indexing."""
@@ -1,4 +1,4 @@
1
- """JsonMixin - Contains the methods for converting Fields to JSON and back."""
1
+ """Ramifice - JsonMixin - Contains the methods for converting Fields to JSON and back."""
2
2
 
3
3
  __all__ = ("JsonMixin",)
4
4
 
@@ -8,10 +8,10 @@ import orjson
8
8
 
9
9
 
10
10
  class JsonMixin:
11
- """Contains the methods for converting Fields to JSON and back."""
11
+ """Ramifice - Contains the methods for converting Fields to JSON and back."""
12
12
 
13
13
  def to_dict(self) -> dict[str, Any]:
14
- """Convert object instance to a dictionary."""
14
+ """Ramifice - Convert object instance to a dictionary."""
15
15
  json_dict: dict[str, Any] = {}
16
16
  for name, data in self.__dict__.items():
17
17
  if not callable(data):
@@ -19,12 +19,12 @@ class JsonMixin:
19
19
  return json_dict
20
20
 
21
21
  def to_json(self) -> str:
22
- """Convert object instance to a JSON string."""
22
+ """Ramifice - Convert object instance to a JSON string."""
23
23
  return orjson.dumps(self.to_dict()).decode("utf-8")
24
24
 
25
25
  @classmethod
26
26
  def from_dict(cls, json_dict: dict[str, Any]) -> Any:
27
- """Convert JSON string to a object instance."""
27
+ """Ramifice - Convert JSON string to a object instance."""
28
28
  obj = cls()
29
29
  for name, data in json_dict.items():
30
30
  obj.__dict__[name] = data
@@ -32,6 +32,6 @@ class JsonMixin:
32
32
 
33
33
  @classmethod
34
34
  def from_json(cls, json_str: str) -> Any:
35
- """Convert JSON string to a object instance."""
35
+ """Ramifice - Convert JSON string to a object instance."""
36
36
  json_dict = orjson.loads(json_str)
37
37
  return cls.from_dict(json_dict)
ramifice/utils/tools.py CHANGED
@@ -1,4 +1,4 @@
1
- """Global collection of auxiliary methods."""
1
+ """Ramifice - Global collection of auxiliary methods."""
2
2
 
3
3
  __all__ = (
4
4
  "is_password",
@@ -29,14 +29,14 @@ from ramifice.utils.constants import REGEX
29
29
 
30
30
 
31
31
  def is_password(password: str | None) -> bool:
32
- """Validate Password."""
32
+ """Ramifice - Validate Password."""
33
33
  if not REGEX["password"].match(str(password)):
34
34
  return False
35
35
  return True
36
36
 
37
37
 
38
38
  def to_human_size(size: int) -> str:
39
- """Convert number of bytes to readable format."""
39
+ """Ramifice - Convert number of bytes to readable format."""
40
40
  idx = int(math.floor(math.log(size) / math.log(1024)))
41
41
  size = size if size < 1024 else abs(round(size / pow(1024, idx), 2))
42
42
  order = ["bytes", "KB", "MB", "GB", "TB"][idx]
@@ -44,13 +44,13 @@ def to_human_size(size: int) -> str:
44
44
 
45
45
 
46
46
  async def get_file_size(path: str) -> int:
47
- """Get file size in bytes."""
47
+ """Ramifice - Get file size in bytes."""
48
48
  size: int = await to_thread(getsize, path)
49
49
  return size
50
50
 
51
51
 
52
52
  def normal_email(email: str | None) -> str | None:
53
- """Normalizing email address.
53
+ """Ramifice - Normalizing email address.
54
54
 
55
55
  Use this before requeste to a database.
56
56
  For example, on the login page.
@@ -68,7 +68,7 @@ def normal_email(email: str | None) -> str | None:
68
68
 
69
69
 
70
70
  async def is_email(email: str | None) -> bool:
71
- """Validate Email address."""
71
+ """Ramifice - Validate Email address."""
72
72
  try:
73
73
  await to_thread(
74
74
  validate_email,
@@ -81,7 +81,7 @@ async def is_email(email: str | None) -> bool:
81
81
 
82
82
 
83
83
  def is_url(url: str | None) -> bool:
84
- """Validate URL address."""
84
+ """Ramifice - Validate URL address."""
85
85
  result = urlparse(str(url))
86
86
  if not result.scheme or not result.netloc:
87
87
  return False
@@ -89,7 +89,7 @@ def is_url(url: str | None) -> bool:
89
89
 
90
90
 
91
91
  def is_ip(address: str | int | None) -> bool:
92
- """Validate IP address."""
92
+ """Ramifice - Validate IP address."""
93
93
  try:
94
94
  ipaddress.ip_address(str(address))
95
95
  except ValueError:
@@ -98,14 +98,14 @@ def is_ip(address: str | int | None) -> bool:
98
98
 
99
99
 
100
100
  def is_color(color_code: str | None) -> bool:
101
- """Validate Color code."""
101
+ """Ramifice - Validate Color code."""
102
102
  if REGEX["color_code"].match(str(color_code)) is None:
103
103
  return False
104
104
  return True
105
105
 
106
106
 
107
107
  def is_phone(number: str | None) -> bool:
108
- """Validate Phone number."""
108
+ """Ramifice - Validate Phone number."""
109
109
  try:
110
110
  phone = phonenumbers.parse(str(number))
111
111
  if not phonenumbers.is_valid_number(phone):
@@ -116,10 +116,10 @@ def is_phone(number: str | None) -> bool:
116
116
 
117
117
 
118
118
  def is_mongo_id(oid: Any) -> bool:
119
- """Validation of the Mongodb identifier."""
119
+ """Ramifice - Validation of the Mongodb identifier."""
120
120
  return ObjectId.is_valid(oid)
121
121
 
122
122
 
123
123
  def hash_to_obj_id(hash: str | None) -> ObjectId | None:
124
- """Get ObjectId from hash string."""
124
+ """Ramifice - Get ObjectId from hash string."""
125
125
  return ObjectId(hash) if bool(hash) else None
@@ -1,4 +1,4 @@
1
- """For localization of translations.
1
+ """Ramifice - Localization of translations.
2
2
 
3
3
  The module contains the following variables:
4
4
 
@@ -33,11 +33,14 @@ __all__ = (
33
33
 
34
34
  import copy
35
35
  import gettext as _gettext
36
+ import logging
36
37
  from gettext import NullTranslations
37
38
  from typing import Any
38
39
 
39
40
  from ramifice.utils.errors import PanicError
40
41
 
42
+ logger = logging.getLogger(__name__)
43
+
41
44
  # Language by default.
42
45
  DEFAULT_LOCALE: str = "en"
43
46
  # Code of current language.
@@ -47,6 +50,7 @@ LANGUAGES: frozenset[str] = frozenset(("en", "ru"))
47
50
 
48
51
  if not DEFAULT_LOCALE in LANGUAGES:
49
52
  msg = "ERROR: DEFAULT_LOCALE is not included in the LANGUAGES!"
53
+ logger.error(msg)
50
54
  raise PanicError(msg)
51
55
 
52
56
  # Add translations for Ramifice.
@@ -75,7 +79,7 @@ custom_translations: dict[str, NullTranslations] = {
75
79
 
76
80
 
77
81
  def get_ramifice_translator(lang_code: str) -> Any:
78
- """Get an object of translation for the desired language, for Ramifice.
82
+ """Ramifice - Get an object of translation for the desired language, for Ramifice.
79
83
 
80
84
  Examples:
81
85
  >>> from ramifice import translations
@@ -97,7 +101,7 @@ def get_ramifice_translator(lang_code: str) -> Any:
97
101
 
98
102
 
99
103
  def get_custom_translator(lang_code: str) -> Any:
100
- """Get an object of translation for the desired language, for custom project.
104
+ """Ramifice - Get an object of translation for the desired language, for custom project.
101
105
 
102
106
  Examples:
103
107
  >>> from ramifice import translations
@@ -127,7 +131,7 @@ ngettext: Any = get_custom_translator(DEFAULT_LOCALE).ngettext
127
131
 
128
132
 
129
133
  def change_locale(lang_code: str) -> None:
130
- """Change current language.
134
+ """Ramifice - Change current language.
131
135
 
132
136
  Examples:
133
137
  >>> from ramifice import translations
ramifice/utils/unit.py CHANGED
@@ -1,13 +1,17 @@
1
- """Unit - Data management in dynamic fields."""
1
+ """Ramifice - Unit - Data management in dynamic fields."""
2
2
 
3
3
  __all__ = ("Unit",)
4
4
 
5
+ import logging
6
+
5
7
  from ramifice.utils.errors import PanicError
6
8
  from ramifice.utils.mixins.json_converter import JsonMixin
7
9
 
10
+ logger = logging.getLogger(__name__)
11
+
8
12
 
9
13
  class Unit(JsonMixin):
10
- """Unit of information for `choices` parameter in dynamic field types.
14
+ """Ramifice - Unit of information for `choices` parameter in dynamic field types.
11
15
 
12
16
  Attributes:
13
17
  field -- The name of the dynamic field.
@@ -50,7 +54,7 @@ class Unit(JsonMixin):
50
54
  self.check_empty_arguments()
51
55
 
52
56
  def check_empty_arguments(self) -> None:
53
- """Check the arguments for empty values.
57
+ """Ramifice - Check the arguments for empty values.
54
58
 
55
59
  Returns:
56
60
  `None` or raised exception `PanicError`.
@@ -71,4 +75,5 @@ class Unit(JsonMixin):
71
75
  + f"Field: `{field_name}` => "
72
76
  + "Must not be empty!"
73
77
  )
78
+ logger.error(msg)
74
79
  raise PanicError(msg)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ramifice
3
- Version: 0.8.10
3
+ Version: 0.8.12
4
4
  Summary: ORM-pseudo-like API MongoDB for Python language.
5
5
  Project-URL: Homepage, https://github.com/kebasyaty/ramifice
6
6
  Project-URL: Documentation, https://kebasyaty.github.io/ramifice/
@@ -0,0 +1,84 @@
1
+ ramifice/__init__.py,sha256=Xejr_t4cimFFNKS6xXvAeLRue1vTB5kZWGeYbHXDUDw,1116
2
+ ramifice/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ ramifice/commons/__init__.py,sha256=F5tnz0bz7IcwOT9wkPmyWL7cDDUI1BUVSfC73G56dfs,567
4
+ ramifice/commons/general.py,sha256=HuErflr-dZ2pWhaSy81IGllFfGxlj8yrdnaAEGUtK3M,5554
5
+ ramifice/commons/indexes.py,sha256=Ay1Y7Ft8t6Yuw7_LHtK5K87BNAac2WYsY2zzvPEu_zw,3784
6
+ ramifice/commons/many.py,sha256=ekOp7XxusTA7u6GKErtV8fEeQ5mzCV3IJz_jiA045GM,9464
7
+ ramifice/commons/one.py,sha256=xSMghkeRgheIY4U9vl9om7_ASihrkQ41AXS4m7W3z2M,7028
8
+ ramifice/commons/tools.py,sha256=Cs1RRWolxBrGXwTWLuqYmkOgDLYoKJmfctf_MgZPams,2505
9
+ ramifice/commons/unit_manager.py,sha256=9XrWZtbt9CzZMUDz4mqL3McvJ8RkseMSJpNGgxoGSeA,4875
10
+ ramifice/fields/__init__.py,sha256=g1Nrv2E1XrdGO9xIiyhhjIRDh-KyOwLSvDuMCOfmBBw,1721
11
+ ramifice/fields/bool_field.py,sha256=azPiI2Fq6PkBGILeDo2wrIepzPERRPMrFvE7z7FxnvM,2408
12
+ ramifice/fields/choice_float_dyn_field.py,sha256=a2HS4PlIPQs9Ya3foyMthFqWZT45p8tIJ9NIllV9Zgk,3490
13
+ ramifice/fields/choice_float_field.py,sha256=lfDgF57LFHKcr2HyC-V8SZkuiyWUSIWEefzU_CYBE-Q,4336
14
+ ramifice/fields/choice_float_mult_dyn_field.py,sha256=zcSyyOfXHD9RE78cxnG4ACpAKrYm1n93LRwIooWTd4U,3557
15
+ ramifice/fields/choice_float_mult_field.py,sha256=WlRSb5o8Jn2F9xYBXH0u1xpuXQdNJFNED4b2PuVnD_s,4706
16
+ ramifice/fields/choice_int_dyn_field.py,sha256=wg90Pdf9gHri0VLpTLbI_ztJvFsdiN9dqJJskO1hMN4,3482
17
+ ramifice/fields/choice_int_field.py,sha256=2vM9WVXYdk9nYgGajmf_B8m3J17zRqOmncqF9_jFOYs,4322
18
+ ramifice/fields/choice_int_mult_dyn_field.py,sha256=Vn_Ua8lV-5YN6VRfHaquq299ZBlyENv88_wdqR4tnCU,3551
19
+ ramifice/fields/choice_int_mult_field.py,sha256=dv-qwE_yT_dedJicwCQM0O_jahexSlw_R1RtKGyuZ3E,4698
20
+ ramifice/fields/choice_text_dyn_field.py,sha256=lSmD-JW4w1NdVa_GhUcCZ4Su5pmRmoMtebgRgiwCfso,3473
21
+ ramifice/fields/choice_text_field.py,sha256=5choPzao1Np74e-5iRWBHL9VxkVe93XRJYqtZgY11mE,4542
22
+ ramifice/fields/choice_text_mult_dyn_field.py,sha256=8wqlU0sTJ48Joeh1yyrAE8LnRH2GSBUOWzcjqvWU7lY,3542
23
+ ramifice/fields/choice_text_mult_field.py,sha256=gbHqd0awF_h1KlEecGVzIiXNs5pdR4_VKqbFzzJjTt8,4689
24
+ ramifice/fields/color_field.py,sha256=lbSHIsf3i42S5vvTCgO9IBYgywK6EeF58TNTG71C1Xw,3937
25
+ ramifice/fields/date_field.py,sha256=vu8tiQMdwrcG0MEsBKJ7WibVY2te1goWO1m6HSb36LU,5743
26
+ ramifice/fields/date_time_field.py,sha256=ntAwhSUcVSy_-Py1IuTtZpeVqafqKmxqJPFhROMbG4s,5782
27
+ ramifice/fields/email_field.py,sha256=V_Nw6tHrWQ11-8KDn-AzA6SGyMVnSMmFEhmQdsBYke4,3850
28
+ ramifice/fields/file_field.py,sha256=YK3HU2jfiFXMkuq9m_ZBJZY4nppEJwCg4h0d9e_WQOw,8782
29
+ ramifice/fields/float_field.py,sha256=PK1YTiY2prSyMUg_TgtryAAECzmripF5VWe_trFWjEo,5083
30
+ ramifice/fields/id_field.py,sha256=osYwdJgHBSR4w4dPc1PcZmt58fq7wjrhzFoLtZ3SP9M,4547
31
+ ramifice/fields/image_field.py,sha256=gmIrtYkic7bpvOv0I-snMi1WxgyPdJlnmJWd4oIvuTk,12302
32
+ ramifice/fields/integer_field.py,sha256=Djjym6ceLtkhKzeHHCOv9Zx5egTTJhVWQpVTljxN4-4,5057
33
+ ramifice/fields/ip_field.py,sha256=nMo3t5xgg_cgU5NjsDaUko4I-MCdm9I4wg5ybV03-VM,3754
34
+ ramifice/fields/password_field.py,sha256=I6yn8Iyez-V3M8czHi25lLrR8zabGX87ozZGgq-ulBw,3612
35
+ ramifice/fields/phone_field.py,sha256=jCZkIu1FIMUA6oEGOFmrdULJM50Ag5p8wbGOnDfKKag,4040
36
+ ramifice/fields/slug_field.py,sha256=E5ZxEx8_4y6sO-neBbbodKSb4vjNg2DPO-ioLyVydxE,3049
37
+ ramifice/fields/text_field.py,sha256=qPwQ_IW6TdkK7kIV6GWTVsw1OJu6Cb-7w3UtH0Ksx1o,4515
38
+ ramifice/fields/url_field.py,sha256=10H0pg4Du5goT9mKs53A4PgMDQSCkcJB9R7tE9UrdWc,4402
39
+ ramifice/fields/general/__init__.py,sha256=j3Onqv8DAR5vMf7GLvLdBDYe5i2WaxF6aHgus0NZBMw,51
40
+ ramifice/fields/general/choice_group.py,sha256=u-xmgr88oYo2gPxmBaCk9Lzxh6dWxYj_N8hiEoOENgM,1014
41
+ ramifice/fields/general/date_group.py,sha256=RCNl5qrOwJ1AoysgpwR2mq87l0UJU0Ep7MmliLyTtjM,1263
42
+ ramifice/fields/general/field.py,sha256=bNVZrl4Vw0ZBHHdijAUAbIl78jIB4loWRUYMcdg6i0E,1430
43
+ ramifice/fields/general/file_group.py,sha256=SmF8OHKXsyZtWr90n8iCAXBXFQrjRV2HdDc_n1ngITk,1064
44
+ ramifice/fields/general/number_group.py,sha256=jspiA9hWiU_hNhXbTku2rZG3UezrhEVBGopNgooJ4ig,813
45
+ ramifice/fields/general/text_group.py,sha256=hYVX4-ipD2_eyj-WpHIHnFrpQevySaVd4twffUsrOLo,1164
46
+ ramifice/models/__init__.py,sha256=y5jRhSzcPuEVUWr1u--o1GyjFb7irlf5Rn2gPvQ3IPg,26
47
+ ramifice/models/decorator.py,sha256=U4uubmFUCipkiILvej5VrH4qwow3DGG_DG444hX6Ju0,6667
48
+ ramifice/models/model.py,sha256=m19E7h3Fv2F7oDotc1z_n_NglFN7KmXOrNL0r4Jg_y4,7352
49
+ ramifice/paladins/__init__.py,sha256=I2FzvCrp6upv_GPLfDqaVLwIT6-3Dp_K9i51tFUXDuc,673
50
+ ramifice/paladins/check.py,sha256=kZXibFqTkMnMdujAVlcGRVaMZlOQ0od5N0lWExu_FEc,6971
51
+ ramifice/paladins/delete.py,sha256=PRd-xraM9gMdCSFemGX5A8YAdg08RKVqerBGrvFwfJk,3677
52
+ ramifice/paladins/password.py,sha256=MyDZN94yUqpAmD2jt6Hk5714bYcXQZGszNVjm33e-M8,3332
53
+ ramifice/paladins/refrash.py,sha256=QyvWm_nRdbrtRuyESLZbaoEkqO8n1cs1tvsIfSu6mC8,1251
54
+ ramifice/paladins/save.py,sha256=XlJUKkMySE7_9w1H9L-u7L-J9Uj88njVzTHzfI9rYu8,4121
55
+ ramifice/paladins/tools.py,sha256=sdQQkyi3VaS0v_bVHRy6bt_pPmu0r1iorT9MX9_ThIw,2978
56
+ ramifice/paladins/validation.py,sha256=DglGT-GnL7XM__77vNXkOAmdBMUVw8HyIJJ5rmKuPns,1808
57
+ ramifice/paladins/groups/__init__.py,sha256=JCsgvspyx4dg9vNNONIlGzlL4Dnejm5N4rynOG8LLPo,723
58
+ ramifice/paladins/groups/bool_group.py,sha256=hOD2wbz6VFS7KhxuevV5ApKXkmTJB18S-5s92PwOmHM,874
59
+ ramifice/paladins/groups/choice_group.py,sha256=ODB7m8PFY-fM68LTRujN7yUL9oJvMt39p25aVBJxWCc,1881
60
+ ramifice/paladins/groups/date_group.py,sha256=I7W2HFJ96IJh8lpMyHa--_msyNityN2cGbWMky-ShAc,3845
61
+ ramifice/paladins/groups/file_group.py,sha256=Rtj75Q8V7ie8Nf96Z-QYj2Ah65HK8BQIwbFvSFJxeLE,3048
62
+ ramifice/paladins/groups/id_group.py,sha256=cXVM65IGo7UTrTezc_6NsSfHK7SXGekQgY1YHQT6Gug,1354
63
+ ramifice/paladins/groups/img_group.py,sha256=M-fzE1tX0BVYqvT9KCqdTo5FbS5f-nSXdomyNWrvTNw,6204
64
+ ramifice/paladins/groups/num_group.py,sha256=WJR6Jaxd_YmEvWdgEXzDFZsiiF0OqOstw6_NaRGbLSU,2382
65
+ ramifice/paladins/groups/pass_group.py,sha256=1_FYXA96yan4xCvoY-ABX02T8gyrPP5Pjr4Np_expi8,1953
66
+ ramifice/paladins/groups/slug_group.py,sha256=0H1baGmX572t3v6E68rwS3AvDyfGPJMldZgPVNZtyPI,2533
67
+ ramifice/paladins/groups/text_group.py,sha256=2CyhZxQgFDv-uGRKIxgngB15_BfgPmhxp4N_X7WXsSQ,4538
68
+ ramifice/utils/__init__.py,sha256=wdOon9X-38jYpgOy1qyN-u7IzbGEXXuXudnzj5xFQGI,54
69
+ ramifice/utils/constants.py,sha256=VFvzFaOfzzhfoLMrI9nH9Dz_P5ktI8cOdqTINFHUEo4,2624
70
+ ramifice/utils/errors.py,sha256=OBoTuVLkMbtt-wdOZKY6eByNwAmaQvu1FHhfUi-aU9k,1978
71
+ ramifice/utils/fixtures.py,sha256=fmC87O0EE-EHsDqSOMD0mCSehKncMazzPuIfm7cO1tI,3351
72
+ ramifice/utils/migration.py,sha256=Q_kDRdMMtkYX4mB8RoLD2sIOej8rr9yhqz-Aip57VYU,11553
73
+ ramifice/utils/tools.py,sha256=LZyA715HnkNO7TcBu4Ia29A6Ko3n-F2BRULzIyNKt9o,3279
74
+ ramifice/utils/translations.py,sha256=gI-3R-xcOfONF11VTxmya0upXdE5ALoetTibEfyqlf0,4424
75
+ ramifice/utils/unit.py,sha256=7I48948JfUSxHS78aN7VfFi5nMi5DUi2cgaDu15dn7s,2601
76
+ ramifice/utils/mixins/__init__.py,sha256=1W6HoabjN73crpzJ_rmhI10KM9C2RbPZn5Em6Gi9Aig,283
77
+ ramifice/utils/mixins/add_valid.py,sha256=vYq4wGdpfA4iLMts7G0NvDALZBwupOScsajDFWCmmYg,472
78
+ ramifice/utils/mixins/hooks.py,sha256=h8coNstWWHI4VwPgpjx0NWTj93-5NDAGtav0VFh-fk4,1031
79
+ ramifice/utils/mixins/indexing.py,sha256=WVLxmkLKg-C_LHn2hq6LJuOkSr9eS-XUUvCMgK-pKYo,387
80
+ ramifice/utils/mixins/json_converter.py,sha256=qBqFYol3Pbq1kX33EWB6FsYUL3AGSdYNtQE97HQ9jy4,1225
81
+ ramifice-0.8.12.dist-info/METADATA,sha256=bQXSVotn2jXPctHCF-GICVspqxbwwBtqCdKSv2sssK4,20328
82
+ ramifice-0.8.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
83
+ ramifice-0.8.12.dist-info/licenses/LICENSE,sha256=LrEL0aTZx90HDwFUQCJutORiDjJL9AnuVvCtspXIqt4,1095
84
+ ramifice-0.8.12.dist-info/RECORD,,
@@ -1,84 +0,0 @@
1
- ramifice/__init__.py,sha256=Pm2v5QCHErdx0sWBFeJnoczz3fg_rzd8UB7AS_ICDL0,820
2
- ramifice/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- ramifice/commons/__init__.py,sha256=HwOckqlNkt4OzFbYqnLw9x0VXLbwO_mJaJ9MLYgSvtI,545
4
- ramifice/commons/general.py,sha256=ZryiRH-qf_cH9HCul7EP11UU-k4YO_rp_kku2FWAwj4,5433
5
- ramifice/commons/indexes.py,sha256=dBPVYeJGbEyENLEzGjQmQ2XYOr3qqzjonj6zyH4rl54,3696
6
- ramifice/commons/many.py,sha256=VkEVWzz3FgoSsuQULfV8rfW87H558_NRbwfQhlGgqNs,9311
7
- ramifice/commons/one.py,sha256=XHXUthY-ACW-9dhI4yWGupZ1RsaRSQbIuwu_rdngjBc,6822
8
- ramifice/commons/tools.py,sha256=wBnJFibq3jW09vXywnP3MFGWCb2iLxWeDfwWBKf2b7g,2461
9
- ramifice/commons/unit_manager.py,sha256=bKvHEAag5FrH3kXmmqQCgfSEIkJjIGIo1ymCfLhbcKc,4569
10
- ramifice/fields/__init__.py,sha256=u_XTUfcWTI96lvxinMPm_s9XNJ4jNDd8zhL9vwRvckc,1710
11
- ramifice/fields/bool_field.py,sha256=ZZftUSR9CKhl2eGTGfbmmSgoKVnWDcNuP2bMrycF9O0,2136
12
- ramifice/fields/choice_float_dyn_field.py,sha256=F6hXUXV9iNW4TgvSvBGTXwK33qtDFx7OskfEeHFgkP4,3199
13
- ramifice/fields/choice_float_field.py,sha256=NVQGPPOMdkdFRyqXhEJoKjv6-MPAYPJcLN25VVojM78,3989
14
- ramifice/fields/choice_float_mult_dyn_field.py,sha256=voiokW_Rx89nckrRq5e_DClIe7V7cQ2B3Y58yvDSenc,3266
15
- ramifice/fields/choice_float_mult_field.py,sha256=VZtTO8Yx4fSJkW4p5mVw_DuroncGNHvtAM1nbL5rku4,4339
16
- ramifice/fields/choice_int_dyn_field.py,sha256=UHi2jpxXhP5xZQz2PhFGJybR_yjHgmrxTsUpiH7dPlU,3191
17
- ramifice/fields/choice_int_field.py,sha256=eAPQzt97_mHCDhCJt8oYuDFEMBb8s-DAwEEaRbMRDnw,3975
18
- ramifice/fields/choice_int_mult_dyn_field.py,sha256=a0p70n0xnAzJWfnOJ7HrZqYCPZeKVQEd3yNisFUgNfw,3260
19
- ramifice/fields/choice_int_mult_field.py,sha256=ZnC7bB5r1Z6PsW0Lp7r6Pu2yyI46GGPHyj9PC6juajA,4331
20
- ramifice/fields/choice_text_dyn_field.py,sha256=h2eUA2gUwmiP-ykzWVDLSCZRNLE6LFeb04GgF4MJdlU,3182
21
- ramifice/fields/choice_text_field.py,sha256=TLkZ47oX1_HCtP3erl-0vIMqzSD_vpGbcImymw3YB8M,4175
22
- ramifice/fields/choice_text_mult_dyn_field.py,sha256=h104T9SR9vjWi6KBrQ0U1-hM1rqZXXyaEVkBRb_ct4w,3251
23
- ramifice/fields/choice_text_mult_field.py,sha256=XlLxwPWyrQWmiL95GAg5Avlo84vi8jovAnkXq5GsS3E,4322
24
- ramifice/fields/color_field.py,sha256=I87c8w-2PHMCSTfWTXCmZMJNmrnqzW9Kox436M7yx6A,3605
25
- ramifice/fields/date_field.py,sha256=QkUiaBd0FxgDkjYnkCG9M8Jlsg1YuhCe-csuvZ20AGY,5305
26
- ramifice/fields/date_time_field.py,sha256=1WBb_zzYe8-eG7mWvoHSm08PF8YDCxZo7iDk8-h3arY,5344
27
- ramifice/fields/email_field.py,sha256=8BxJZQGkYSLVz01HFaSaZQw9VC_n8pUc423d7halxGA,3510
28
- ramifice/fields/file_field.py,sha256=IYICN6iYiz-VmN6GrrashE2qOBzEHTZgUzyYdYYBdPQ,8333
29
- ramifice/fields/float_field.py,sha256=pKe_XgBjUKxUWZ_ZKTwTgrZlNx8Zn1jShMukeG7P5FQ,4666
30
- ramifice/fields/id_field.py,sha256=O68MAiRcYsGmM6gxTaA7NH1obI7HFyba_ANx8_HQL9Y,4209
31
- ramifice/fields/image_field.py,sha256=w0Xd0d9idmB1Eb41VcZqjcRRU7aSPbTWp0zm0Qqom78,11753
32
- ramifice/fields/integer_field.py,sha256=CJ1tOn6eOyK9zc-NRWkNTCmpZ9HoKgEvRzCUdEHgY6o,4640
33
- ramifice/fields/ip_field.py,sha256=dS4uxcCaL49fisacVhhBS3npTuRORgKJClDMys82CG4,3416
34
- ramifice/fields/password_field.py,sha256=cEwU-YiqxZfGu7OeMilmYEakpwF5JWIYKfHiUrSKtGA,3298
35
- ramifice/fields/phone_field.py,sha256=gOU3dYfWvYzzI2TA73KiIz3vTyp1khAbVNjqz_z6Dbg,3692
36
- ramifice/fields/slug_field.py,sha256=o8ftFnwClNUl7y6zyE7UUo0daUu5SV_tvwR_f7uFNg8,2761
37
- ramifice/fields/text_field.py,sha256=QEjsvqxe76OgU5e0yIxGw_6MDbTzz0QAqtdxqbdz9-4,4168
38
- ramifice/fields/url_field.py,sha256=ww2qYPmKYMYvgG4UHbWqEZdRPLVDFTqaMFD2EZUxpWM,4068
39
- ramifice/fields/general/__init__.py,sha256=JzgIDseNQLB_IDwY9-JSiT_bONxvhJmbKl5PhQzTnpE,40
40
- ramifice/fields/general/choice_group.py,sha256=Nvpz_lXMeZPWnogOL0QB71DApv2k-KQ9ZhWCx2AjilM,992
41
- ramifice/fields/general/date_group.py,sha256=DDQayQPU0EESfYMY4pVHleYK9ysWRV86VLefV3Gs5k4,1241
42
- ramifice/fields/general/field.py,sha256=3HnAV6hQ2Jn4nn_Cososs9EqfV1Y5wbDUwEzOu23mzE,1408
43
- ramifice/fields/general/file_group.py,sha256=q1gPQpTYsLMYZIpmj_dj4CQ_Ryo7PBpsTSKwy3E5dow,1042
44
- ramifice/fields/general/number_group.py,sha256=GBE2Cv61rYKg1WjyD1nqE7z3QF3thBiLKAWAkKw1xGs,791
45
- ramifice/fields/general/text_group.py,sha256=6SLJ8TM9moFECrxDbNXeFNGclQPYxmnP2Tm19e98hmk,1131
46
- ramifice/models/__init__.py,sha256=h_QQ5rSJNZ-7kmx7wIFd8E8RmUS94b_x4jdwMbq8zm4,15
47
- ramifice/models/decorator.py,sha256=8Uy6uutRxbyNbS-C1nB50stUqJzF00MKsMECjxgMkd8,5991
48
- ramifice/models/model.py,sha256=ugkEDWsaUJOMLVQPhqDp0fcijcTk9vTsh9l-H43tZL4,7184
49
- ramifice/paladins/__init__.py,sha256=4cHrf5OhQGQm3GOTH4Wv3LVDgnVGbp6rc2EeNCRDD6Q,651
50
- ramifice/paladins/check.py,sha256=6uisaM3MgUpA_LQ_w8Did4dRcDKz9il-tRY2lrqh91I,6602
51
- ramifice/paladins/delete.py,sha256=1-CbxQMvfrdg1BXH9L1ah0tQShweXF1rbL89Yc5XMSg,3495
52
- ramifice/paladins/password.py,sha256=pcDOCNW1WOLa8qGfoCIeNOZjCe_qlcNNKBYutn52RQ0,3079
53
- ramifice/paladins/refrash.py,sha256=Ab22W4nQs3s8LgFgjmxjYKElsfRwRowM9LzTrGFyJAM,1131
54
- ramifice/paladins/save.py,sha256=2YeEofr-kRF7bP5mEVejIlspDBjiLKzBqG2lSj6BOus,3927
55
- ramifice/paladins/tools.py,sha256=YSJsjSAqP1jlcS1XvQGtLlL5b_EL-U6nYNewv5dFaZo,2807
56
- ramifice/paladins/validation.py,sha256=3x8WUR0bTDkzJj41mEZyKc6brEmNukKpy0fc0NsniwQ,1764
57
- ramifice/paladins/groups/__init__.py,sha256=GxJWM3IkYT3HW9pnJ1QTEjdOKJnjEoAaQ8SRukXnIW0,712
58
- ramifice/paladins/groups/bool_group.py,sha256=X8P4YDh02gNzxTo9rgeCnmnV88jApUPqPLYIkpf5vGg,841
59
- ramifice/paladins/groups/choice_group.py,sha256=NkD2sKqBkdUMHY36pFdvL4uQ-81LXByRHF_lhCEAI6Y,1848
60
- ramifice/paladins/groups/date_group.py,sha256=i6beJVv4RpMsSnqZziCLnvKoC43r4lyjsUjyBu_ZBkk,3812
61
- ramifice/paladins/groups/file_group.py,sha256=vzTfkEKA4GDd3c4opeFbM_teGslYreoAyplvzvzpeCw,3015
62
- ramifice/paladins/groups/id_group.py,sha256=9iurBTOuhG1_8Wmxc5piTMcUNxAW3H0ZavA1sW7uopY,1321
63
- ramifice/paladins/groups/img_group.py,sha256=qy2PeCIcEHTeFsP3GFJspUBMAGprlZEeasB8rETRtEY,6047
64
- ramifice/paladins/groups/num_group.py,sha256=UtpmYELsNyooiOEIAhSaRuTxYr_FrNpqq9KqAflX2aU,2349
65
- ramifice/paladins/groups/pass_group.py,sha256=54kvAyoUCEjujTw0Dh6oUrtv3RU80sWEem_b-3Ytv0k,1920
66
- ramifice/paladins/groups/slug_group.py,sha256=OFuSqwnvmN6SSbR05zHHHngr44lbrAgZnIugSV650V0,2362
67
- ramifice/paladins/groups/text_group.py,sha256=PzFuRaHQzfsboGOOGKsxuqazN6We5u9TudB0-k1v0Ow,4505
68
- ramifice/utils/__init__.py,sha256=xixHoOX4ja5jIUZemem1qn4k4aonv3G3Q76azQK_pkU,43
69
- ramifice/utils/constants.py,sha256=Wu_MyXvPpNonBbdgCmETLvMsZavyNXQ1IW9RXS9CMTA,2613
70
- ramifice/utils/errors.py,sha256=iuhq7fzpUmsOyeXeg2fJjta8yAuqlXLKsZVMpfUhtHE,1901
71
- ramifice/utils/fixtures.py,sha256=4vUFyIiEcqtkS5bAqwBWwXUKny3akbyWbI1j9450sBg,3211
72
- ramifice/utils/migration.py,sha256=3rGebK-df0EBvq2QKIP9URnm3TPZLI97GXUf4EZRNsM,11134
73
- ramifice/utils/tools.py,sha256=EPFINdgAJgewwQ9OErLEX8_z-_soQckyX7FsA7eRvyQ,3147
74
- ramifice/utils/translations.py,sha256=h8B9AdqFu2V-8eg8DMwLpa9pib8IMv59SyPSDuyxchM,4305
75
- ramifice/utils/unit.py,sha256=kfVlPHeVhVsli6jw5tV5yHC23QhAsTEL_V2rwHtDE20,2479
76
- ramifice/utils/mixins/__init__.py,sha256=GrxJDsw73bEkitIh0-0BCxNnUK-N5uRXMCRlaPoaz1o,265
77
- ramifice/utils/mixins/add_valid.py,sha256=9GV0XwprHl4yNRQty3InKij8oqO-9WZgWiQTfh0CVH0,439
78
- ramifice/utils/mixins/hooks.py,sha256=oZXO2v9zsEzpf2w3L04YjigGKyk6c8PzCWBneqGi2CQ,943
79
- ramifice/utils/mixins/indexing.py,sha256=bpQaQCLIhk6SmjEwZssAXhabsdXV8MFihlKhHHxO--w,358
80
- ramifice/utils/mixins/json_converter.py,sha256=HMU4gDnrUS0oW3vT-mWAruvNJGn37Pv2A4CKnOBnrJA,1159
81
- ramifice-0.8.10.dist-info/METADATA,sha256=CvH9io_z3tA8tvXlOyXRqFIcT5lWabVct11yeQW_a9g,20328
82
- ramifice-0.8.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
83
- ramifice-0.8.10.dist-info/licenses/LICENSE,sha256=LrEL0aTZx90HDwFUQCJutORiDjJL9AnuVvCtspXIqt4,1095
84
- ramifice-0.8.10.dist-info/RECORD,,