ramifice 0.8.22__py3-none-any.whl → 0.8.26__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 +8 -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 +6 -6
  6. ramifice/commons/one.py +8 -8
  7. ramifice/commons/tools.py +4 -4
  8. ramifice/commons/unit_manager.py +3 -3
  9. ramifice/fields/__init__.py +1 -1
  10. ramifice/fields/bool_field.py +16 -6
  11. ramifice/fields/choice_float_dyn_field.py +16 -6
  12. ramifice/fields/choice_float_field.py +20 -8
  13. ramifice/fields/choice_float_mult_dyn_field.py +16 -6
  14. ramifice/fields/choice_float_mult_field.py +20 -8
  15. ramifice/fields/choice_int_dyn_field.py +16 -6
  16. ramifice/fields/choice_int_field.py +20 -8
  17. ramifice/fields/choice_int_mult_dyn_field.py +16 -6
  18. ramifice/fields/choice_int_mult_field.py +20 -8
  19. ramifice/fields/choice_text_dyn_field.py +16 -6
  20. ramifice/fields/choice_text_field.py +20 -8
  21. ramifice/fields/choice_text_mult_dyn_field.py +16 -6
  22. ramifice/fields/choice_text_mult_field.py +20 -8
  23. ramifice/fields/color_field.py +24 -11
  24. ramifice/fields/date_field.py +25 -10
  25. ramifice/fields/date_time_field.py +25 -10
  26. ramifice/fields/email_field.py +21 -7
  27. ramifice/fields/file_field.py +25 -10
  28. ramifice/fields/float_field.py +25 -7
  29. ramifice/fields/general/__init__.py +1 -1
  30. ramifice/fields/general/choice_group.py +9 -10
  31. ramifice/fields/general/date_group.py +11 -11
  32. ramifice/fields/general/field.py +13 -13
  33. ramifice/fields/general/file_group.py +10 -10
  34. ramifice/fields/general/number_group.py +8 -8
  35. ramifice/fields/general/text_group.py +10 -10
  36. ramifice/fields/id_field.py +20 -15
  37. ramifice/fields/image_field.py +25 -9
  38. ramifice/fields/integer_field.py +25 -7
  39. ramifice/fields/ip_field.py +21 -7
  40. ramifice/fields/password_field.py +21 -12
  41. ramifice/fields/phone_field.py +22 -8
  42. ramifice/fields/slug_field.py +17 -6
  43. ramifice/fields/text_field.py +24 -7
  44. ramifice/fields/url_field.py +19 -19
  45. ramifice/models/__init__.py +7 -1
  46. ramifice/models/decorator.py +3 -3
  47. ramifice/models/model.py +16 -16
  48. ramifice/paladins/__init__.py +17 -2
  49. ramifice/paladins/add_valid.py +3 -3
  50. ramifice/paladins/check.py +3 -3
  51. ramifice/paladins/delete.py +3 -3
  52. ramifice/paladins/groups/__init__.py +1 -1
  53. ramifice/paladins/groups/bool_group.py +3 -3
  54. ramifice/paladins/groups/choice_group.py +3 -3
  55. ramifice/paladins/groups/date_group.py +3 -3
  56. ramifice/paladins/groups/file_group.py +3 -3
  57. ramifice/paladins/groups/id_group.py +3 -3
  58. ramifice/paladins/groups/img_group.py +3 -3
  59. ramifice/paladins/groups/num_group.py +3 -3
  60. ramifice/paladins/groups/pass_group.py +3 -3
  61. ramifice/paladins/groups/slug_group.py +3 -3
  62. ramifice/paladins/groups/text_group.py +3 -3
  63. ramifice/paladins/hooks.py +8 -8
  64. ramifice/paladins/indexing.py +3 -3
  65. ramifice/paladins/password.py +4 -4
  66. ramifice/paladins/refrash.py +3 -3
  67. ramifice/paladins/save.py +3 -3
  68. ramifice/paladins/tools.py +6 -6
  69. ramifice/paladins/validation.py +4 -4
  70. ramifice/utils/__init__.py +13 -1
  71. ramifice/utils/constants.py +1 -1
  72. ramifice/utils/errors.py +23 -23
  73. ramifice/utils/fixtures.py +2 -2
  74. ramifice/utils/migration.py +8 -8
  75. ramifice/utils/{mixins/json_converter.py → mixins.py} +6 -6
  76. ramifice/utils/tools.py +12 -12
  77. ramifice/utils/translations.py +5 -5
  78. ramifice/utils/unit.py +10 -10
  79. {ramifice-0.8.22.dist-info → ramifice-0.8.26.dist-info}/METADATA +4 -4
  80. ramifice-0.8.26.dist-info/RECORD +83 -0
  81. ramifice/utils/mixins/__init__.py +0 -5
  82. ramifice-0.8.22.dist-info/RECORD +0 -84
  83. {ramifice-0.8.22.dist-info → ramifice-0.8.26.dist-info}/WHEEL +0 -0
  84. {ramifice-0.8.22.dist-info → ramifice-0.8.26.dist-info}/licenses/LICENSE +0 -0
ramifice/utils/errors.py CHANGED
@@ -1,18 +1,18 @@
1
- """Ramifice - Custom Exceptions for Ramifice."""
1
+ """Custom Exceptions for Ramifice."""
2
2
 
3
3
 
4
4
  class RamificeException(Exception):
5
- """Ramifice - Root Exception for Ramifice."""
5
+ """Root Exception for Ramifice."""
6
6
 
7
- def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]# noqa: D107
7
+ def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def] # noqa: D107
8
8
  super().__init__(*args, **kwargs)
9
9
 
10
10
 
11
11
  class FileHasNoExtensionError(RamificeException):
12
- """Ramifice - Exception raised if the file has no extension.
12
+ """Exception raised if the file has no extension.
13
13
 
14
- Attributes:
15
- message -- explanation of the error
14
+ Args:
15
+ message: explanation of the error
16
16
  """
17
17
 
18
18
  def __init__(self, message: str = "File has no extension!") -> None: # noqa: D107
@@ -21,10 +21,10 @@ class FileHasNoExtensionError(RamificeException):
21
21
 
22
22
 
23
23
  class DoesNotMatchRegexError(RamificeException):
24
- """Ramifice - Exception raised if does not match the regular expression.
24
+ """Exception raised if does not match the regular expression.
25
25
 
26
- Attributes:
27
- regex_str -- regular expression in string representation
26
+ Args:
27
+ regex_str: regular expression in string representation
28
28
  """
29
29
 
30
30
  def __init__(self, regex_str: str) -> None: # noqa: D107
@@ -33,7 +33,7 @@ class DoesNotMatchRegexError(RamificeException):
33
33
 
34
34
 
35
35
  class NoModelsForMigrationError(RamificeException):
36
- """Ramifice - Exception raised if no Models for migration."""
36
+ """Exception raised if no Models for migration."""
37
37
 
38
38
  def __init__(self) -> None: # noqa: D107
39
39
  self.message = "No Models for Migration!"
@@ -41,10 +41,10 @@ class NoModelsForMigrationError(RamificeException):
41
41
 
42
42
 
43
43
  class PanicError(RamificeException):
44
- """Ramifice - Exception raised for cases of which should not be.
44
+ """Exception raised for cases of which should not be.
45
45
 
46
- Attributes:
47
- message -- explanation of the error
46
+ Args:
47
+ message: explanation of the error
48
48
  """
49
49
 
50
50
  def __init__(self, message: str) -> None: # noqa: D107
@@ -53,7 +53,7 @@ class PanicError(RamificeException):
53
53
 
54
54
 
55
55
  class OldPassNotMatchError(RamificeException):
56
- """Ramifice - Exception is raised when trying to update the password.
56
+ """Exception is raised when trying to update the password.
57
57
 
58
58
  Hint: If old password does not match.
59
59
  """
@@ -64,10 +64,10 @@ class OldPassNotMatchError(RamificeException):
64
64
 
65
65
 
66
66
  class ForbiddenDeleteDocError(RamificeException):
67
- """Ramifice - Exception is raised when trying to delete the document.
67
+ """Exception is raised when trying to delete the document.
68
68
 
69
- Attributes:
70
- message -- explanation of the error
69
+ Args:
70
+ message: explanation of the error
71
71
  """
72
72
 
73
73
  def __init__(self, message: str) -> None: # noqa: D107
@@ -76,10 +76,10 @@ class ForbiddenDeleteDocError(RamificeException):
76
76
 
77
77
 
78
78
  class NotPossibleAddUnitError(RamificeException):
79
- """Ramifice - Exception is raised when not possible to add Unit.
79
+ """Exception is raised when not possible to add Unit.
80
80
 
81
- Attributes:
82
- message -- explanation of the error
81
+ Args:
82
+ message: explanation of the error
83
83
  """
84
84
 
85
85
  def __init__(self, message: str) -> None: # noqa: D107
@@ -88,10 +88,10 @@ class NotPossibleAddUnitError(RamificeException):
88
88
 
89
89
 
90
90
  class NotPossibleDeleteUnitError(RamificeException):
91
- """Ramifice - Exception is raised when not possible to delete Unit.
91
+ """Exception is raised when not possible to delete Unit.
92
92
 
93
- Attributes:
94
- message -- explanation of the error
93
+ Args:
94
+ message: explanation of the error
95
95
  """
96
96
 
97
97
  def __init__(self, message: str) -> None: # noqa: D107
@@ -1,4 +1,4 @@
1
- """Ramifice - Fixtures - To populate the database with pre-created data.
1
+ """Fixtures - To populate the database with pre-created data.
2
2
 
3
3
  Runs automatically during Model migration.
4
4
  """
@@ -24,7 +24,7 @@ async def apply_fixture(
24
24
  cls_model: Any,
25
25
  collection: AsyncCollection,
26
26
  ) -> None:
27
- """Ramifice - Apply fixture for current Model.
27
+ """Apply fixture for current Model.
28
28
 
29
29
  Runs automatically during Model migration.
30
30
  """
@@ -1,4 +1,4 @@
1
- """Ramifice - Migration are `Ramifice` way of
1
+ """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.
@@ -23,9 +23,9 @@ logger = logging.getLogger(__name__)
23
23
 
24
24
 
25
25
  class Migration:
26
- """Ramifice - Migration of models to database."""
26
+ """Migration of models to database."""
27
27
 
28
- def __init__(self, database_name: str, mongo_client: AsyncMongoClient): # noqa: D107
28
+ def __init__(self, database_name: str, mongo_client: AsyncMongoClient) -> None: # noqa: D107
29
29
  constants.DEBUG = False
30
30
  #
31
31
  db_name_regex = constants.REGEX["database_name"]
@@ -46,7 +46,7 @@ class Migration:
46
46
  raise NoModelsForMigrationError()
47
47
 
48
48
  async def reset(self) -> None:
49
- """Ramifice - Reset the condition of the models in a super collection.
49
+ """Reset the condition of the models in a super collection.
50
50
 
51
51
  Switch the `is_model_exist` parameter in the condition `False`.
52
52
  """
@@ -62,7 +62,7 @@ class Migration:
62
62
  await super_collection.update_one(q_filter, update)
63
63
 
64
64
  async def model_state(self, metadata: dict[str, Any]) -> dict[str, Any]:
65
- """Ramifice - Get the state of the current model from a super collection."""
65
+ """Get the state of the current model from a super collection."""
66
66
  # Get access to super collection.
67
67
  # (Contains Model state and dynamic field data.)
68
68
  super_collection: AsyncCollection = constants.MONGO_DATABASE[
@@ -86,7 +86,7 @@ class Migration:
86
86
  return model_state
87
87
 
88
88
  def new_fields(self, metadata: dict[str, Any], model_state: dict[str, Any]) -> list[str]:
89
- """Ramifice - Get a list of new fields that were added to Model."""
89
+ """Get a list of new fields that were added to Model."""
90
90
  new_fields: list[str] = []
91
91
  for field_name, field_type in metadata["field_name_and_type"].items():
92
92
  old_field_type: str | None = model_state["field_name_and_type"].get(field_name)
@@ -95,7 +95,7 @@ class Migration:
95
95
  return new_fields
96
96
 
97
97
  async def napalm(self) -> None:
98
- """Ramifice - Delete data for non-existent Models from a super collection,
98
+ """Delete data for non-existent Models from a super collection,
99
99
  delete collections associated with those Models.
100
100
  """ # noqa: D205
101
101
  # Get access to database.
@@ -116,7 +116,7 @@ class Migration:
116
116
  await database.drop_collection(collection_name) # type: ignore[union-attr]
117
117
 
118
118
  async def migrate(self) -> None:
119
- """Ramifice - Run migration process.
119
+ """Run migration process.
120
120
 
121
121
  1) Update the state of Models in the super collection.
122
122
  2) Register new Models in the super collection.
@@ -1,4 +1,4 @@
1
- """Ramifice - JsonMixin - Contains the methods for converting Fields to JSON and back."""
1
+ """Set of mixins for Models and Fields."""
2
2
 
3
3
  __all__ = ("JsonMixin",)
4
4
 
@@ -8,10 +8,10 @@ import orjson
8
8
 
9
9
 
10
10
  class JsonMixin:
11
- """Ramifice - Contains the methods for converting Fields to JSON and back."""
11
+ """Contains the methods for converting Fields to JSON and back."""
12
12
 
13
13
  def to_dict(self) -> dict[str, Any]:
14
- """Ramifice - Convert object instance to a dictionary."""
14
+ """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
- """Ramifice - Convert object instance to a JSON string."""
22
+ """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
- """Ramifice - Convert JSON string to a object instance."""
27
+ """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
- """Ramifice - Convert JSON string to a object instance."""
35
+ """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
- """Ramifice - Global collection of auxiliary methods."""
1
+ """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
- """Ramifice - Validate Password."""
32
+ """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
- """Ramifice - Convert number of bytes to readable format."""
39
+ """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
- """Ramifice - Get file size in bytes."""
47
+ """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
- """Ramifice - Normalizing email address.
53
+ """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
- """Ramifice - Validate Email address."""
71
+ """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
- """Ramifice - Validate URL address."""
84
+ """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
- """Ramifice - Validate IP address."""
92
+ """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
- """Ramifice - Validate Color code."""
101
+ """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
- """Ramifice - Validate Phone number."""
108
+ """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
- """Ramifice - Validation of the Mongodb identifier."""
119
+ """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
- """Ramifice - Get ObjectId from hash string."""
124
+ """Get ObjectId from hash string."""
125
125
  return ObjectId(hash) if bool(hash) else None
@@ -1,4 +1,4 @@
1
- """Ramifice - Localization of translations.
1
+ """Localization of translations.
2
2
 
3
3
  The module contains the following variables:
4
4
 
@@ -55,7 +55,7 @@ def add_languages(
55
55
  default_locale: str,
56
56
  languages: frozenset[str],
57
57
  ) -> None:
58
- """Ramifice - Add languages."""
58
+ """Add languages."""
59
59
  global DEFAULT_LOCALE, LANGUAGES
60
60
  if not default_locale in languages:
61
61
  msg = "DEFAULT_LOCALE is not included in the LANGUAGES!"
@@ -91,7 +91,7 @@ custom_translations: dict[str, NullTranslations] = {
91
91
 
92
92
 
93
93
  def get_ramifice_translator(lang_code: str) -> Any:
94
- """Ramifice - Get an object of translation for the desired language, for Ramifice.
94
+ """Get an object of translation for the desired language, for Ramifice.
95
95
 
96
96
  Examples:
97
97
  >>> from ramifice import translations
@@ -113,7 +113,7 @@ def get_ramifice_translator(lang_code: str) -> Any:
113
113
 
114
114
 
115
115
  def get_custom_translator(lang_code: str) -> Any:
116
- """Ramifice - Get an object of translation for the desired language, for custom project.
116
+ """Get an object of translation for the desired language, for custom project.
117
117
 
118
118
  Examples:
119
119
  >>> from ramifice import translations
@@ -143,7 +143,7 @@ ngettext: Any = get_custom_translator(DEFAULT_LOCALE).ngettext
143
143
 
144
144
 
145
145
  def change_locale(lang_code: str) -> None:
146
- """Ramifice - Change current language.
146
+ """Change current language.
147
147
 
148
148
  Examples:
149
149
  >>> from ramifice import translations
ramifice/utils/unit.py CHANGED
@@ -1,23 +1,23 @@
1
- """Ramifice - Unit - Data management in dynamic fields."""
1
+ """Unit - Data management in dynamic fields."""
2
2
 
3
3
  __all__ = ("Unit",)
4
4
 
5
5
  import logging
6
6
 
7
7
  from ramifice.utils.errors import PanicError
8
- from ramifice.utils.mixins.json_converter import JsonMixin
8
+ from ramifice.utils.mixins import JsonMixin
9
9
 
10
10
  logger = logging.getLogger(__name__)
11
11
 
12
12
 
13
13
  class Unit(JsonMixin):
14
- """Ramifice - Unit of information for `choices` parameter in dynamic field types.
14
+ """Unit of information for `choices` parameter in dynamic field types.
15
15
 
16
- Attributes:
17
- field -- The name of the dynamic field.
18
- title -- The name of the choice item.
19
- value -- The value of the choice item.
20
- is_delete -- True - if you need to remove the item of choice.
16
+ Args:
17
+ field: The name of the dynamic field.
18
+ title: The name of the choice item.
19
+ value: The value of the choice item.
20
+ is_delete: True - if you need to remove the item of choice.
21
21
  """
22
22
 
23
23
  def __init__( # noqa: D107
@@ -26,7 +26,7 @@ class Unit(JsonMixin):
26
26
  title: dict[str, str], # Example: {"en": "Title", "ru": "Заголовок"}
27
27
  value: float | int | str,
28
28
  is_delete: bool = False,
29
- ):
29
+ ) -> None:
30
30
  # Check the match of types.
31
31
  if not isinstance(field, str):
32
32
  msg = "Class: `Unit` > Field: `field` => Not а `str` type!"
@@ -54,7 +54,7 @@ class Unit(JsonMixin):
54
54
  self.check_empty_arguments()
55
55
 
56
56
  def check_empty_arguments(self) -> None:
57
- """Ramifice - Check the arguments for empty values.
57
+ """Check the arguments for empty values.
58
58
 
59
59
  Returns:
60
60
  `None` or raised exception `PanicError`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ramifice
3
- Version: 0.8.22
3
+ Version: 0.8.26
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/
@@ -68,6 +68,7 @@ Description-Content-Type: text/markdown
68
68
  <a href="https://github.com/kebasyaty/ramifice"><img src="https://img.shields.io/github/languages/top/kebasyaty/ramifice" alt="Top"></a>
69
69
  <a href="https://github.com/kebasyaty/ramifice"><img src="https://img.shields.io/github/repo-size/kebasyaty/ramifice" alt="Size"></a>
70
70
  <a href="https://github.com/kebasyaty/ramifice"><img src="https://img.shields.io/github/last-commit/kebasyaty/ramifice/main" alt="Last commit"></a>
71
+ <a href="https://github.com/kebasyaty/ramifice/releases/" alt="GitHub release"><img src="https://img.shields.io/github/release/kebasyaty/ramifice" alt="GitHub release"></a>
71
72
  </p>
72
73
  <p align="center">
73
74
  Ramifice is built around <a href="https://pypi.org/project/pymongo/" alt="PyMongo">PyMongo</a>.
@@ -104,7 +105,7 @@ Online browsable documentation is available at [https://kebasyaty.github.io/rami
104
105
  [![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?style=for-the-badge&logo=ubuntu&logoColor=white)](https://github.com/kebasyaty/ramifice/blob/v0/assets/UBUNTU_INSTALL_MONGODB.md)
105
106
  [![Windows](https://img.shields.io/badge/Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white)](https://www.mongodb.com/try/download/community)
106
107
 
107
- 2. Run:
108
+ 1. Run:
108
109
 
109
110
  ```shell
110
111
  # Fedora:
@@ -123,7 +124,6 @@ uv add ramifice
123
124
 
124
125
  3. Add `config` and `public` directories in root of your project:<br>
125
126
  [Download config directory](https://downgit.github.io/#/home?url=https://github.com/kebasyaty/ramifice/tree/main/config "Download config directory")
126
- <br>
127
127
  [Download public directory](https://downgit.github.io/#/home?url=https://github.com/kebasyaty/ramifice/tree/main/public "Download public directory")
128
128
 
129
129
  ## Usage
@@ -618,4 +618,4 @@ size: int = get_file_size(path) # => 9843
618
618
 
619
619
  ## License
620
620
 
621
- **This project is licensed under the** [MIT](https://github.com/kebasyaty/ramifice/blob/main/LICENSE "MIT")**.**
621
+ This project is licensed under the [MIT](https://github.com/kebasyaty/ramifice/blob/main/LICENSE "MIT").
@@ -0,0 +1,83 @@
1
+ ramifice/__init__.py,sha256=rTkA9TUWsis-q056oslAcalr3rwNChMUcpQX5Q43Pzs,1520
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=D4sRNe9zrG_BD43vcEbnv81YthnzctZznbih6lBCnqM,9424
7
+ ramifice/commons/one.py,sha256=htcrIjwKTegwvLoA9KHVChCLzdwVJW0LZXUGLBMFE64,6979
8
+ ramifice/commons/tools.py,sha256=wBnJFibq3jW09vXywnP3MFGWCb2iLxWeDfwWBKf2b7g,2461
9
+ ramifice/commons/unit_manager.py,sha256=hDHmn3u0NDeIXxh0iCvaxN_stxtCAJVie-cWAZ6TK88,4968
10
+ ramifice/fields/__init__.py,sha256=hjqCZG_kKsHdHtSd05vHn9SiFpk-YSvKEsVFaXim5Sw,2360
11
+ ramifice/fields/bool_field.py,sha256=d3sKQWMAfEycgtBIhIIov2XVoqLbN8th8i3H7YLrNdg,2769
12
+ ramifice/fields/choice_float_dyn_field.py,sha256=e-i7CtmDVqWzRJJ5Pq4PmI69riHDPx9NX51h2qFsjEE,3912
13
+ ramifice/fields/choice_float_field.py,sha256=4oonFHhUdHCoEr5WTQ75kol0ugK73vrGgyp2sEc1NPI,4891
14
+ ramifice/fields/choice_float_mult_dyn_field.py,sha256=45nr0FoY9roO2pJ0FfzBIMu6ih5cl7_3NyKVwtUAHrA,3979
15
+ ramifice/fields/choice_float_mult_field.py,sha256=lCRFDlftuf8FnQxhw3pw543Aeo45dDJoHJOOlEUrnXc,5261
16
+ ramifice/fields/choice_int_dyn_field.py,sha256=qUAZivbZSmGYhoPo-vu9P0psEjj-ZtUWjmjYv9GY6yc,3904
17
+ ramifice/fields/choice_int_field.py,sha256=QwRt155knw0rK-VHwc6M2GlOyUmqgI2hGyJfjaicMQA,4877
18
+ ramifice/fields/choice_int_mult_dyn_field.py,sha256=QajFttWuw5Z_S_ik48zev83tVIiPOgHjzPFnxmkO_e4,3973
19
+ ramifice/fields/choice_int_mult_field.py,sha256=bA3IzVNivQLJlQlKR9ot4TnaQVAFvGTNLvCYe55UMqE,5253
20
+ ramifice/fields/choice_text_dyn_field.py,sha256=H_BGtTuNNGJdXDZmGGPpi-7c0GtDGJwkyNFbKScLs28,3895
21
+ ramifice/fields/choice_text_field.py,sha256=8oWCn0xX_mk6ZUICq1H-poTEAsTDgHPLQfCAZSNs-xI,5097
22
+ ramifice/fields/choice_text_mult_dyn_field.py,sha256=OrPZ-y2ihcJeLkTWJrcPgMijedq_5czbPEmISg1HdWU,3964
23
+ ramifice/fields/choice_text_mult_field.py,sha256=gw5vWxooWBp0-RbFNTs74_n7Ib_nS2hKjlYzDLgy9RU,5244
24
+ ramifice/fields/color_field.py,sha256=-ju_cJBzKSmcXsFQweePqNmF8VeIyaRJLwvl_ypOuVk,4505
25
+ ramifice/fields/date_field.py,sha256=pmn627RGLojnprr3KAEYWvaF8IZm3YsWFZHBR8CCuYQ,6315
26
+ ramifice/fields/date_time_field.py,sha256=AVtxkvs6MP6GnSQ5chImWETnJ57LEHJinTj05Xg1xiE,6372
27
+ ramifice/fields/email_field.py,sha256=zW908yFZH7mY98GrvsBvE1gwvRL_yP44yh_WJE9pKWU,4431
28
+ ramifice/fields/file_field.py,sha256=Hjv1R3DYO-BaBJIBcwZVLvGsdCsBHydy3rd1bljFxcA,9478
29
+ ramifice/fields/float_field.py,sha256=ePOO0GBjDFlWjieRItpVKkUbKeuAagBCeDNvvFCVEJs,5859
30
+ ramifice/fields/id_field.py,sha256=36VroZIgCH6uKuYjjWTXIycZ06ZGy4reLX6FhMUphCI,4757
31
+ ramifice/fields/image_field.py,sha256=wfBi4M0J6JAU4dTSmtOR0L3LUyf5L6QiDY8XK1TuOUg,13046
32
+ ramifice/fields/integer_field.py,sha256=p6dkzuTDjuBdi4K43m9-qRQGOXz4zNIz0x2fD1tm-Mk,5833
33
+ ramifice/fields/ip_field.py,sha256=ICf5hwGEnq5RiRiPKZZXm6WtdzEw4_TDLB7_1BYG-Vs,4335
34
+ ramifice/fields/password_field.py,sha256=lKELnyIjlAIJWeCR_3BCa0ZL5R0L73cf9zimigIgN3g,3902
35
+ ramifice/fields/phone_field.py,sha256=XIiJJGXXeOSjoB9n2qMmTH6vIB7pAgvh-CJakL_mX8A,4622
36
+ ramifice/fields/slug_field.py,sha256=Vvuug6TYOxmOaoDeqaFgu6MlMmaSgpXkS60juuGNvIE,3538
37
+ ramifice/fields/text_field.py,sha256=fBVxBzHwj7R0TiSXnidqA5XHJdEz16WShT6TGjC-B6g,5299
38
+ ramifice/fields/url_field.py,sha256=O0IG1NKljTCN8AXll0vAQgPE5dXHJPbxrkytI6zG3i0,4348
39
+ ramifice/fields/general/__init__.py,sha256=JzgIDseNQLB_IDwY9-JSiT_bONxvhJmbKl5PhQzTnpE,40
40
+ ramifice/fields/general/choice_group.py,sha256=RkYEuEl6wSazqhq2aDhUoKzKTEd54BgItpRy69rH93o,928
41
+ ramifice/fields/general/date_group.py,sha256=9fgLgyKhfVEwlCcQ87uRInmvWhwMoyfB5dT3Tq3wCPM,1229
42
+ ramifice/fields/general/field.py,sha256=tBU-9l_w1LW1EVRvu0qJn1ySk5y3BzzaUSeStIbMEg4,1392
43
+ ramifice/fields/general/file_group.py,sha256=97JqyUCKYGtvQfNOuUjOa5SIMuQ4V6I-rpmM5UDmS1E,1032
44
+ ramifice/fields/general/number_group.py,sha256=6Canht6VXXzp2lF-6R7uoWXbPufrjceYP74btOyzmzA,785
45
+ ramifice/fields/general/text_group.py,sha256=ofWj1d-9pKkbxARpXa2xQ6ANY3fiLtJUaFPp0vsDiT4,1123
46
+ ramifice/models/__init__.py,sha256=I4p5Y_oHG9ZLZ3vR44PpCGGvB-C2W7fSQPb5qJsm-VQ,178
47
+ ramifice/models/decorator.py,sha256=uIjJ3uww0Ac7ufFn4VMqlA_8eP1I6oIhz5gRnDnH2w8,6396
48
+ ramifice/models/model.py,sha256=qH21L7sDmJxbMz5UygHPCJhWgL52snFV_BRN-GchV00,7711
49
+ ramifice/paladins/__init__.py,sha256=bFr12UzadCCpuIkGSd6reeIeQ5td8W7LfckduP84WXc,1517
50
+ ramifice/paladins/add_valid.py,sha256=NbRDEjetY0Pp3qoLzM5QUYI8ydkiXav_iOnqJUIwcRw,430
51
+ ramifice/paladins/check.py,sha256=UHGlyZqZVq200Iv7BpRphf8LfREzV3X5EkdoqSuDqsg,6935
52
+ ramifice/paladins/delete.py,sha256=k3N2qlaHZLWtFUTqWvtkYaqW9h3uK7ecpLjKr5gfoGE,3690
53
+ ramifice/paladins/hooks.py,sha256=oZXO2v9zsEzpf2w3L04YjigGKyk6c8PzCWBneqGi2CQ,943
54
+ ramifice/paladins/indexing.py,sha256=pQGKZFmYougPJwZRVqDINvcEQEcYsTCjAsNMMhmwrsU,354
55
+ ramifice/paladins/password.py,sha256=7lZmsl-bBely5zlVz0aCYlC5yf8nHp1YswoFF4CZWBI,3297
56
+ ramifice/paladins/refrash.py,sha256=oS-N1QVwQGwt5lSxS01bpM6ETGuMLV_RFt1u5v2uEds,1221
57
+ ramifice/paladins/save.py,sha256=Ylmf20iZU9IwR0kE9zNlJVUXxjb9BckP9ifwRqCTJAg,3715
58
+ ramifice/paladins/tools.py,sha256=8rkWPGrVMJiYN97EZuX52nVFVfB6qa08avYT4v8ohLA,2918
59
+ ramifice/paladins/validation.py,sha256=3x8WUR0bTDkzJj41mEZyKc6brEmNukKpy0fc0NsniwQ,1764
60
+ ramifice/paladins/groups/__init__.py,sha256=GdIBJaMKz7L8pBKMAA__a4m-p0g0_RlzCcvDLDMMiec,958
61
+ ramifice/paladins/groups/bool_group.py,sha256=X8P4YDh02gNzxTo9rgeCnmnV88jApUPqPLYIkpf5vGg,841
62
+ ramifice/paladins/groups/choice_group.py,sha256=NkD2sKqBkdUMHY36pFdvL4uQ-81LXByRHF_lhCEAI6Y,1848
63
+ ramifice/paladins/groups/date_group.py,sha256=i6beJVv4RpMsSnqZziCLnvKoC43r4lyjsUjyBu_ZBkk,3812
64
+ ramifice/paladins/groups/file_group.py,sha256=vzTfkEKA4GDd3c4opeFbM_teGslYreoAyplvzvzpeCw,3015
65
+ ramifice/paladins/groups/id_group.py,sha256=9iurBTOuhG1_8Wmxc5piTMcUNxAW3H0ZavA1sW7uopY,1321
66
+ ramifice/paladins/groups/img_group.py,sha256=yH1cNAZbRnc5l67HCsjLNf2cR0L4LGasuBMOhCOP4GA,6171
67
+ ramifice/paladins/groups/num_group.py,sha256=UtpmYELsNyooiOEIAhSaRuTxYr_FrNpqq9KqAflX2aU,2349
68
+ ramifice/paladins/groups/pass_group.py,sha256=54kvAyoUCEjujTw0Dh6oUrtv3RU80sWEem_b-3Ytv0k,1920
69
+ ramifice/paladins/groups/slug_group.py,sha256=aakQpNoAcEFppRczlZgnP4-u9_7-Mb0RAWKhSGmo0Ig,2506
70
+ ramifice/paladins/groups/text_group.py,sha256=PzFuRaHQzfsboGOOGKsxuqazN6We5u9TudB0-k1v0Ow,4505
71
+ ramifice/utils/__init__.py,sha256=lAD90nw2VfGSuf0SLjOkeFScBPmc48XFvecueAfq73w,468
72
+ ramifice/utils/constants.py,sha256=Wu_MyXvPpNonBbdgCmETLvMsZavyNXQ1IW9RXS9CMTA,2613
73
+ ramifice/utils/errors.py,sha256=eEV7-aVR0U19vKqTd9JRHFJXcOv6N1HtXSzqeQpdciE,2796
74
+ ramifice/utils/fixtures.py,sha256=n_EZ53uf4wKU1Erk9u58v0C1o5oqtBtnVe7JOJtH_VA,3335
75
+ ramifice/utils/migration.py,sha256=Oo0Zjvje8YOR1szTUL5dn6trnb5oU41u6aveDNmpIvI,11460
76
+ ramifice/utils/mixins.py,sha256=XSkxJllqsMxN7xcP_9kn3-GRS4a1l_QQpFOlD3e-tIM,1123
77
+ ramifice/utils/tools.py,sha256=EPFINdgAJgewwQ9OErLEX8_z-_soQckyX7FsA7eRvyQ,3147
78
+ ramifice/utils/translations.py,sha256=XlMcTRnDDxABxkBbFQY6Lg96IDuYoJUVSvPPWdeZNe8,4646
79
+ ramifice/utils/unit.py,sha256=7alJuqY6vmYVZtumND6yMSJQDgarqMdRHXTyC6ULh4M,2550
80
+ ramifice-0.8.26.dist-info/METADATA,sha256=O1WjnKMIkWsj1rch2lKpUIcfgnLnF_MoBafyW2-4Yq8,21081
81
+ ramifice-0.8.26.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
82
+ ramifice-0.8.26.dist-info/licenses/LICENSE,sha256=LrEL0aTZx90HDwFUQCJutORiDjJL9AnuVvCtspXIqt4,1095
83
+ ramifice-0.8.26.dist-info/RECORD,,
@@ -1,5 +0,0 @@
1
- """Ramifice - Set of mixins for Models and Fields."""
2
-
3
- __all__ = ("JsonMixin",)
4
-
5
- from ramifice.utils.mixins.json_converter import JsonMixin
@@ -1,84 +0,0 @@
1
- ramifice/__init__.py,sha256=eMxD1xjSRQ_DU1BSs9FSgt--Xs4rKdsHgY2h2lhvq7M,1163
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=Scqzrh5l3aMXGkiKi8RngWLM6CR2T1dtuqE6QOY8r3Q,9490
7
- ramifice/commons/one.py,sha256=KTX2q2XdO3ognREOJnKRrjfc9gUpfcxpN5eCrHA90zI,7067
8
- ramifice/commons/tools.py,sha256=Cs1RRWolxBrGXwTWLuqYmkOgDLYoKJmfctf_MgZPams,2505
9
- ramifice/commons/unit_manager.py,sha256=_K0dYu8iBXh9WFzZq3p8YnHj9xQOlSIUg_s_8LyNeRg,5001
10
- ramifice/fields/__init__.py,sha256=7lmcAu-7zsndVgjUJ329HFgAgCtg036lC9ifH5xpaJk,2371
11
- ramifice/fields/bool_field.py,sha256=DNC2Tw7sClOhLaR03180hdR1IK8Q7f90c0XYAHmPhFI,2411
12
- ramifice/fields/choice_float_dyn_field.py,sha256=W3SPcGzys0vUz1VKNCcQ5Oq4oq4zYyXx_iYRcgj63Zc,3493
13
- ramifice/fields/choice_float_field.py,sha256=xn-0PViaQE0VSykBj1VuhqbF7rHWhPjtOXL-5gCkPoc,4339
14
- ramifice/fields/choice_float_mult_dyn_field.py,sha256=0RtO16glK-yjjligRyErssX2GWgOFSshPQmnREz7kQM,3560
15
- ramifice/fields/choice_float_mult_field.py,sha256=s7ZqNTac5Mv1Zn7nD8JCp8aXAylPuyIUiCuM4AxnQ9A,4709
16
- ramifice/fields/choice_int_dyn_field.py,sha256=XpL3mNs2usP7ii2qetaOL263pnnVmJ4GPeBQvkSW1a8,3485
17
- ramifice/fields/choice_int_field.py,sha256=AyZMyprppzDQXU3NoCbUOqvApK_GFtNPFCUbA8t-aRI,4325
18
- ramifice/fields/choice_int_mult_dyn_field.py,sha256=BnI7pqION2OKqss2YPUmC1Qh1KFR9waiJcNGB_TVJGQ,3554
19
- ramifice/fields/choice_int_mult_field.py,sha256=vP0CbOW2TDjEX_mvKpaWQGrF1LBnl-Cs48tWMpq9srM,4701
20
- ramifice/fields/choice_text_dyn_field.py,sha256=Jh4RISEP6kdoQw4WPbWbhMG1hCBCHLxGdYEPGESjJP0,3476
21
- ramifice/fields/choice_text_field.py,sha256=eedLdbIg-X-YN8msLa4I8qC2dHRtpFsdJb_pmJ7nWt4,4545
22
- ramifice/fields/choice_text_mult_dyn_field.py,sha256=0ANNnJ6XBuvZEmh6VChImQ8nPKEzd0hFptWSn0Mm5So,3545
23
- ramifice/fields/choice_text_mult_field.py,sha256=ouz-PXJV7oQyY5wXe5noixqcT6MNQShnF_U2WwNZHLI,4692
24
- ramifice/fields/color_field.py,sha256=o_m9al63D0GwR0XSfpR-WXEwvbC8Y9t4iFhpZC5iNSg,3940
25
- ramifice/fields/date_field.py,sha256=qkq50h5V0osjwa1UVGaqvqmEHudcWOyTq07nJF65yxQ,5746
26
- ramifice/fields/date_time_field.py,sha256=QtZs87wae5Ih1rCqIqATVkNguFgw3t1pwUhkD5mdf78,5785
27
- ramifice/fields/email_field.py,sha256=8dK3KOHGXtfdA5b-UDhdaCo0Gb1L2CiE5myZSCdJ6bs,3853
28
- ramifice/fields/file_field.py,sha256=jxWPzF799ygKM0LXpBoTdslv4nw7CXvaLZyXXCGF4r8,8785
29
- ramifice/fields/float_field.py,sha256=tLmNzc4IAlx_ClqhqOFoFdTyvAVeehAzb8WYs8fd6yI,5086
30
- ramifice/fields/id_field.py,sha256=5DVR7sVDqLtpKM9HU2tyjKJCNp4PkWs6iw3EGy_xm3c,4550
31
- ramifice/fields/image_field.py,sha256=W8WwynhviX-pQX1p_hFEqEWDXkMn-nOZ3dovxcAp5KY,12305
32
- ramifice/fields/integer_field.py,sha256=ABFjWPoCzmeRQjrrH9mnqOeAoUHLSKeD-pysYUwQt-0,5060
33
- ramifice/fields/ip_field.py,sha256=BhFu9KZOg1UhpzAktFAuPiTUhc2ketJLwml6S7q_Sic,3757
34
- ramifice/fields/password_field.py,sha256=lpFVuG-sIEDFARpnx48_-MHYoW9Wk8fdHV_oxtzkzAQ,3615
35
- ramifice/fields/phone_field.py,sha256=RLH52_lSchgAFhVe4-fg9gp-UFR60o9MBzSfOQJV158,4043
36
- ramifice/fields/slug_field.py,sha256=JkIxYDVwGod2jNMg_UCIA8IXOHo7sOzh0WRnWTspZGk,3052
37
- ramifice/fields/text_field.py,sha256=YHRPtobZpNlZL-k48I99bRx7E-uOQvuysbbj8bqrZ_I,4518
38
- ramifice/fields/url_field.py,sha256=YqaGJRU4lViw2DMIcyhcQNLiaoO77-YvuyhUWWp8KsI,4405
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=f9PGmU927BkIOirtloGs3R3IhjiL8P3_0KgCkAqDz_A,6429
48
- ramifice/models/model.py,sha256=M-pYUqzOhvzZEc2tfPy5fNDdrtIC2mFvajV3q2CpOfc,7887
49
- ramifice/paladins/__init__.py,sha256=_8eJ6dAr_omSAU6VUZQjxty0V52ExBPReyUFToDX4PQ,881
50
- ramifice/paladins/add_valid.py,sha256=Yxo8LfJMxcAsY-ooZV1cLwFsfjxV5MPR0ebnWpyo4oE,463
51
- ramifice/paladins/check.py,sha256=L7mYsN5qp6ZlGiyPBQK1jw4GN03aIh8QpbbdK6-n6S4,6968
52
- ramifice/paladins/delete.py,sha256=Ynew5zvEBRJNmss5I8hSIp7KgBHpSvDEJCwOfMH5MUU,3723
53
- ramifice/paladins/hooks.py,sha256=h8coNstWWHI4VwPgpjx0NWTj93-5NDAGtav0VFh-fk4,1031
54
- ramifice/paladins/indexing.py,sha256=WVLxmkLKg-C_LHn2hq6LJuOkSr9eS-XUUvCMgK-pKYo,387
55
- ramifice/paladins/password.py,sha256=hdEfSwz0a9FJ5IIYpyD9bmV_kNGvXP4OV5Ea-V0Yx98,3341
56
- ramifice/paladins/refrash.py,sha256=0qst0ii2ThH-VJduSI1zgkuZQGLnR8IiIu5rTVxzM9U,1254
57
- ramifice/paladins/save.py,sha256=Tv6TP4Hv0sNIk_aSzLrS6f6kH29A8cFn-f_bzCqP71M,3748
58
- ramifice/paladins/tools.py,sha256=GubR4JwvFu1IAPaH7fr_Fpehd2JoY9qO23Kg8uoXiJU,2984
59
- ramifice/paladins/validation.py,sha256=DglGT-GnL7XM__77vNXkOAmdBMUVw8HyIJJ5rmKuPns,1808
60
- ramifice/paladins/groups/__init__.py,sha256=R4cr9Xt2N-TvNIsoJ4h9J10Zqcuyqk9v3lE_rMEe52o,969
61
- ramifice/paladins/groups/bool_group.py,sha256=hOD2wbz6VFS7KhxuevV5ApKXkmTJB18S-5s92PwOmHM,874
62
- ramifice/paladins/groups/choice_group.py,sha256=ODB7m8PFY-fM68LTRujN7yUL9oJvMt39p25aVBJxWCc,1881
63
- ramifice/paladins/groups/date_group.py,sha256=I7W2HFJ96IJh8lpMyHa--_msyNityN2cGbWMky-ShAc,3845
64
- ramifice/paladins/groups/file_group.py,sha256=Rtj75Q8V7ie8Nf96Z-QYj2Ah65HK8BQIwbFvSFJxeLE,3048
65
- ramifice/paladins/groups/id_group.py,sha256=cXVM65IGo7UTrTezc_6NsSfHK7SXGekQgY1YHQT6Gug,1354
66
- ramifice/paladins/groups/img_group.py,sha256=M-fzE1tX0BVYqvT9KCqdTo5FbS5f-nSXdomyNWrvTNw,6204
67
- ramifice/paladins/groups/num_group.py,sha256=WJR6Jaxd_YmEvWdgEXzDFZsiiF0OqOstw6_NaRGbLSU,2382
68
- ramifice/paladins/groups/pass_group.py,sha256=1_FYXA96yan4xCvoY-ABX02T8gyrPP5Pjr4Np_expi8,1953
69
- ramifice/paladins/groups/slug_group.py,sha256=QCO0ry0-E7bO9tsD4NajPMMbB0chGmuLyzdJCLnY1EI,2539
70
- ramifice/paladins/groups/text_group.py,sha256=2CyhZxQgFDv-uGRKIxgngB15_BfgPmhxp4N_X7WXsSQ,4538
71
- ramifice/utils/__init__.py,sha256=wdOon9X-38jYpgOy1qyN-u7IzbGEXXuXudnzj5xFQGI,54
72
- ramifice/utils/constants.py,sha256=VFvzFaOfzzhfoLMrI9nH9Dz_P5ktI8cOdqTINFHUEo4,2624
73
- ramifice/utils/errors.py,sha256=L_eZttzoLvv5_ukCan7vTmCbYcSbuGfOvfd4q4Cy17s,2953
74
- ramifice/utils/fixtures.py,sha256=R6lHvNp5hvA6Bryom2XNu3CvT-zwXpBGH8AZa3gRC1Q,3357
75
- ramifice/utils/migration.py,sha256=IZ3MFJD2n61uJ0Nl90Ll28GJwjUJf_2IOVbATTHDS_A,11529
76
- ramifice/utils/tools.py,sha256=LZyA715HnkNO7TcBu4Ia29A6Ko3n-F2BRULzIyNKt9o,3279
77
- ramifice/utils/translations.py,sha256=Jh0nzwcn3bhUU2TjPAQboe3_pkVyhYQYdeINyC5SQo8,4701
78
- ramifice/utils/unit.py,sha256=ToBeu92tzOY32fuzLdxScNeYXvGIDr0nx7yTv2DShVo,2604
79
- ramifice/utils/mixins/__init__.py,sha256=1i7Vy8JkgyUqJei9fWD62O65SPpRD0i8Gh7S66PLyLQ,145
80
- ramifice/utils/mixins/json_converter.py,sha256=qBqFYol3Pbq1kX33EWB6FsYUL3AGSdYNtQE97HQ9jy4,1225
81
- ramifice-0.8.22.dist-info/METADATA,sha256=OOB9pY3EeH9YdfJrL7xugdp1rs53CF8ZOBIoxWNo0g0,20918
82
- ramifice-0.8.22.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
83
- ramifice-0.8.22.dist-info/licenses/LICENSE,sha256=LrEL0aTZx90HDwFUQCJutORiDjJL9AnuVvCtspXIqt4,1095
84
- ramifice-0.8.22.dist-info/RECORD,,