ramifice 0.6.0__py3-none-any.whl → 0.7.0__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 (52) hide show
  1. ramifice/__init__.py +2 -1
  2. ramifice/commons/general.py +9 -9
  3. ramifice/commons/indexes.py +7 -7
  4. ramifice/commons/many.py +7 -7
  5. ramifice/commons/one.py +7 -7
  6. ramifice/commons/tools.py +0 -1
  7. ramifice/commons/unit_manager.py +3 -3
  8. ramifice/fields/bool_field.py +2 -2
  9. ramifice/fields/choice_float_dyn_field.py +3 -3
  10. ramifice/fields/choice_float_field.py +3 -3
  11. ramifice/fields/choice_float_mult_dyn_field.py +3 -3
  12. ramifice/fields/choice_float_mult_field.py +3 -3
  13. ramifice/fields/choice_int_dyn_field.py +3 -3
  14. ramifice/fields/choice_int_field.py +3 -3
  15. ramifice/fields/choice_int_mult_dyn_field.py +3 -3
  16. ramifice/fields/choice_int_mult_field.py +3 -3
  17. ramifice/fields/choice_text_dyn_field.py +3 -3
  18. ramifice/fields/choice_text_field.py +3 -3
  19. ramifice/fields/choice_text_mult_dyn_field.py +3 -3
  20. ramifice/fields/choice_text_mult_field.py +3 -3
  21. ramifice/fields/color_field.py +3 -3
  22. ramifice/fields/date_field.py +5 -5
  23. ramifice/fields/date_time_field.py +5 -5
  24. ramifice/fields/email_field.py +2 -2
  25. ramifice/fields/file_field.py +2 -2
  26. ramifice/fields/float_field.py +2 -2
  27. ramifice/fields/id_field.py +5 -5
  28. ramifice/fields/image_field.py +2 -2
  29. ramifice/fields/integer_field.py +2 -2
  30. ramifice/fields/ip_field.py +2 -2
  31. ramifice/fields/password_field.py +6 -5
  32. ramifice/fields/phone_field.py +2 -2
  33. ramifice/fields/slug_field.py +2 -2
  34. ramifice/fields/text_field.py +2 -2
  35. ramifice/fields/url_field.py +2 -2
  36. ramifice/models/decorator.py +1 -1
  37. ramifice/models/model.py +6 -6
  38. ramifice/paladins/check.py +2 -2
  39. ramifice/paladins/delete.py +2 -2
  40. ramifice/paladins/groups/text_group.py +9 -6
  41. ramifice/paladins/password.py +3 -3
  42. ramifice/paladins/refrash.py +2 -2
  43. ramifice/paladins/save.py +2 -2
  44. ramifice/utils/migration.py +15 -15
  45. ramifice/utils/mixins/json_converter.py +4 -3
  46. ramifice/utils/tools.py +8 -3
  47. {ramifice-0.6.0.dist-info → ramifice-0.7.0.dist-info}/METADATA +5 -4
  48. ramifice-0.7.0.dist-info/RECORD +84 -0
  49. ramifice-0.6.0.dist-info/RECORD +0 -84
  50. /ramifice/utils/{globals.py → constants.py} +0 -0
  51. {ramifice-0.6.0.dist-info → ramifice-0.7.0.dist-info}/WHEEL +0 -0
  52. {ramifice-0.6.0.dist-info → ramifice-0.7.0.dist-info}/licenses/LICENSE +0 -0
@@ -12,24 +12,24 @@ from pymongo.asynchronous.collection import AsyncCollection
12
12
  from termcolor import colored
13
13
 
14
14
  from ramifice.models.model import Model
15
- from ramifice.utils import globals
15
+ from ramifice.utils import constants
16
16
  from ramifice.utils.errors import DoesNotMatchRegexError, NoModelsForMigrationError, PanicError
17
17
  from ramifice.utils.fixtures import apply_fixture
18
18
 
19
19
 
20
- class Monitor:
20
+ class MigrationManager:
21
21
  """Monitoring and updating database state for application."""
22
22
 
23
23
  def __init__(self, database_name: str, mongo_client: AsyncMongoClient): # noqa: D107
24
- globals.DEBUG = False
24
+ constants.DEBUG = False
25
25
  #
26
- db_name_regex = globals.REGEX["database_name"]
26
+ db_name_regex = constants.REGEX["database_name"]
27
27
  if db_name_regex.match(database_name) is None:
28
28
  raise DoesNotMatchRegexError("^[a-zA-Z][-_a-zA-Z0-9]{0,59}$")
29
29
  #
30
- globals.DATABASE_NAME = database_name
31
- globals.MONGO_CLIENT = mongo_client
32
- globals.MONGO_DATABASE = globals.MONGO_CLIENT[globals.DATABASE_NAME]
30
+ constants.DATABASE_NAME = database_name
31
+ constants.MONGO_CLIENT = mongo_client
32
+ constants.MONGO_DATABASE = constants.MONGO_CLIENT[constants.DATABASE_NAME]
33
33
  # Get Model list.
34
34
  self.model_list: list[Any] = Model.__subclasses__()
35
35
  # Raise the exception if there are no models for migration.
@@ -43,7 +43,7 @@ class Monitor:
43
43
  """
44
44
  # Get access to super collection.
45
45
  # (Contains Model state and dynamic field data.)
46
- super_collection: AsyncCollection = globals.MONGO_DATABASE[globals.SUPER_COLLECTION_NAME]
46
+ super_collection: AsyncCollection = constants.MONGO_DATABASE[constants.SUPER_COLLECTION_NAME]
47
47
  # Switch the `is_model_exist` parameter in `False`.
48
48
  async for model_state in super_collection.find():
49
49
  q_filter = {"collection_name": model_state["collection_name"]}
@@ -54,7 +54,7 @@ class Monitor:
54
54
  """Get the state of the current model from a super collection."""
55
55
  # Get access to super collection.
56
56
  # (Contains Model state and dynamic field data.)
57
- super_collection: AsyncCollection = globals.MONGO_DATABASE[globals.SUPER_COLLECTION_NAME]
57
+ super_collection: AsyncCollection = constants.MONGO_DATABASE[constants.SUPER_COLLECTION_NAME]
58
58
  # Get state of current Model.
59
59
  model_state: dict[str, Any] | None = await super_collection.find_one(
60
60
  {"collection_name": metadata["collection_name"]}
@@ -86,10 +86,10 @@ class Monitor:
86
86
  delete collections associated with those Models.
87
87
  """ # noqa: D205
88
88
  # Get access to database.
89
- database = globals.MONGO_DATABASE
89
+ database = constants.MONGO_DATABASE
90
90
  # Get access to super collection.
91
91
  # (Contains Model state and dynamic field data.)
92
- super_collection: AsyncCollection = globals.MONGO_DATABASE[globals.SUPER_COLLECTION_NAME]
92
+ super_collection: AsyncCollection = constants.MONGO_DATABASE[constants.SUPER_COLLECTION_NAME]
93
93
  # Delete data for non-existent Models.
94
94
  async for model_state in super_collection.find():
95
95
  if model_state["is_model_exist"] is False:
@@ -111,9 +111,9 @@ class Monitor:
111
111
  # Switch the `is_model_exist` parameter in the condition `False`.
112
112
  await self.reset()
113
113
  # Get access to database.
114
- database = globals.MONGO_DATABASE
114
+ database = constants.MONGO_DATABASE
115
115
  # Get access to super collection.
116
- super_collection: AsyncCollection = database[globals.SUPER_COLLECTION_NAME]
116
+ super_collection: AsyncCollection = database[constants.SUPER_COLLECTION_NAME]
117
117
  #
118
118
  for cls_model in self.model_list:
119
119
  # Get metadata of current Model.
@@ -195,7 +195,7 @@ class Monitor:
195
195
  )
196
196
  #
197
197
  # Block the verification code.
198
- globals.DEBUG = False
198
+ constants.DEBUG = False
199
199
  #
200
200
  # Delete data for non-existent Models from a
201
201
  # super collection and delete collections associated with those Models.
@@ -207,7 +207,7 @@ class Monitor:
207
207
  # Apply fixture to current Model.
208
208
  fixture_name: str | None = cls_model.META["fixture_name"]
209
209
  if fixture_name is not None:
210
- collection: AsyncCollection = globals.MONGO_DATABASE[
210
+ collection: AsyncCollection = constants.MONGO_DATABASE[
211
211
  cls_model.META["collection_name"]
212
212
  ]
213
213
  if await collection.estimated_document_count() == 0:
@@ -1,8 +1,9 @@
1
1
  """JsonMixin - Contains the methods for converting Fields to JSON and back."""
2
2
 
3
- import json
4
3
  from typing import Any
5
4
 
5
+ import orjson
6
+
6
7
 
7
8
  class JsonMixin:
8
9
  """Contains the methods for converting Fields to JSON and back."""
@@ -17,7 +18,7 @@ class JsonMixin:
17
18
 
18
19
  def to_json(self) -> str:
19
20
  """Convert object instance to a JSON string."""
20
- return json.dumps(self.to_dict())
21
+ return orjson.dumps(self.to_dict()).decode("utf-8")
21
22
 
22
23
  @classmethod
23
24
  def from_dict(cls, json_dict: dict[str, Any]) -> Any:
@@ -30,5 +31,5 @@ class JsonMixin:
30
31
  @classmethod
31
32
  def from_json(cls, json_str: str) -> Any:
32
33
  """Convert JSON string to a object instance."""
33
- json_dict = json.loads(json_str)
34
+ json_dict = orjson.loads(json_str)
34
35
  return cls.from_dict(json_dict)
ramifice/utils/tools.py CHANGED
@@ -1,5 +1,6 @@
1
1
  """Global collection of auxiliary methods."""
2
2
 
3
+ import asyncio
3
4
  import ipaddress
4
5
  import math
5
6
  import os
@@ -10,7 +11,7 @@ import phonenumbers
10
11
  from bson.objectid import ObjectId
11
12
  from email_validator import EmailNotValidError, validate_email
12
13
 
13
- from ramifice.utils.globals import REGEX
14
+ from ramifice.utils.constants import REGEX
14
15
 
15
16
 
16
17
  def is_password(password: str | None) -> bool:
@@ -49,10 +50,14 @@ def normal_email(email: str | None) -> str | None:
49
50
  return normal
50
51
 
51
52
 
52
- def is_email(email: str | None) -> bool:
53
+ async def is_email(email: str | None) -> bool:
53
54
  """Validate Email address."""
54
55
  try:
55
- validate_email(str(email), check_deliverability=True)
56
+ await asyncio.to_thread(
57
+ validate_email,
58
+ str(email),
59
+ check_deliverability=True,
60
+ )
56
61
  except EmailNotValidError:
57
62
  return False
58
63
  return True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ramifice
3
- Version: 0.6.0
3
+ Version: 0.7.0
4
4
  Summary: ORM-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/
@@ -28,6 +28,7 @@ Requires-Dist: aioshutil>=1.5
28
28
  Requires-Dist: argon2-cffi>=25.1.0
29
29
  Requires-Dist: babel>=2.17.0
30
30
  Requires-Dist: email-validator>=2.2.0
31
+ Requires-Dist: orjson>=3.10.18
31
32
  Requires-Dist: phonenumbers>=9.0.6
32
33
  Requires-Dist: pillow>=11.2.1
33
34
  Requires-Dist: pymongo>=4.13.0
@@ -131,7 +132,7 @@ from datetime import datetime
131
132
  import pprint
132
133
 
133
134
  from pymongo import AsyncMongoClient
134
- from ramifice import model, translations, migration
135
+ from ramifice import model, translations, MigrationManager
135
136
  from ramifice.fields import (
136
137
  ImageField,
137
138
  PasswordField,
@@ -206,7 +207,7 @@ class User:
206
207
  async def main():
207
208
  client = AsyncMongoClient()
208
209
 
209
- await migration.Monitor(
210
+ await MigrationManager(
210
211
  database_name="test_db",
211
212
  mongo_client=client,
212
213
  ).migrate()
@@ -557,7 +558,7 @@ if is_password("12345678"):
557
558
  ...
558
559
 
559
560
  # Validate Email address.
560
- if is_email("kebasyaty@gmail.com"):
561
+ if await is_email("kebasyaty@gmail.com"):
561
562
  ...
562
563
 
563
564
  # Normalizing email address.
@@ -0,0 +1,84 @@
1
+ ramifice/__init__.py,sha256=DjzNF_-s3HHGIi2JU9Yyd5EOKhL1PrHWLjpsASvPclw,827
2
+ ramifice/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ ramifice/commons/__init__.py,sha256=NZeqK9PEX7q8bVfiUaysdk_GShpA-5EfdM61mhj3wHg,513
4
+ ramifice/commons/general.py,sha256=qqISFnLo6WvStQSbm--ayRHeNGJcugpk3W_2p14ELiM,5402
5
+ ramifice/commons/indexes.py,sha256=GxUGj9rboPzrDBRcnz0UtancsO-MpvnlUJWum6fa5-Y,3667
6
+ ramifice/commons/many.py,sha256=Y9u_hTa6eehFNlOCVBp3q1jJjGvu_VOgalmDri0HaQ0,9283
7
+ ramifice/commons/one.py,sha256=njE7fFYGDu-gJyvLHP-l1tFsJsRQfI7YZ81ZiQO0voI,6795
8
+ ramifice/commons/tools.py,sha256=cF6gPOh-krNSEgslm-3tpTvbTAc6JdqihBoD0pmhSvU,2360
9
+ ramifice/commons/unit_manager.py,sha256=EuRWEDw_TRnL5F5c5IwK0YEYftzjrel7yVHwTEwL5iM,4517
10
+ ramifice/fields/__init__.py,sha256=u_XTUfcWTI96lvxinMPm_s9XNJ4jNDd8zhL9vwRvckc,1710
11
+ ramifice/fields/bool_field.py,sha256=l9oV36IkdFZhc2cTln5QWGzwf0t1s1QLf2GUBcFjNYs,2105
12
+ ramifice/fields/choice_float_dyn_field.py,sha256=eAATxYw5nyuCnnOU3n45jQ9U97dkgM5drvHh44nmEJM,3161
13
+ ramifice/fields/choice_float_field.py,sha256=0790wb8_aMjvxG7ocP1JcHr1NA3N-LbbUiBWPef9Rmc,3954
14
+ ramifice/fields/choice_float_mult_dyn_field.py,sha256=qQ99-4WbuIqKZOsoWmPvNnvMCthd2zuxPR1hgeKA3pM,3224
15
+ ramifice/fields/choice_float_mult_field.py,sha256=bxr-NAfuJqatoDt6R8KucxNZnaG4mvgTce027A12toI,4300
16
+ ramifice/fields/choice_int_dyn_field.py,sha256=XY9Li347jrX1KoVzQrE2gcu2WKYb4z2s5TKjmfw2_zc,3155
17
+ ramifice/fields/choice_int_field.py,sha256=G73y-hvO_NjKbgT2iBJ9O7ElPj4mA1b5VDNFpXvm8qs,3942
18
+ ramifice/fields/choice_int_mult_dyn_field.py,sha256=oDVSzafEQioGEBGIfRoXaukUxXJLhwo6p_WT_votvsQ,3220
19
+ ramifice/fields/choice_int_mult_field.py,sha256=RHJisTklROl-q_tEfPJVjd5Bjl2pJpC0aYM2ODHr-_0,4294
20
+ ramifice/fields/choice_text_dyn_field.py,sha256=cYAZL1v9PlvjM5BGEq0dkhtX38aC6cCGBxDFHusBdCk,3145
21
+ ramifice/fields/choice_text_field.py,sha256=ky4NHXV39v7acdUVCj0kUt2K-4AUrCtGD6ubaTeD3Tc,4141
22
+ ramifice/fields/choice_text_mult_dyn_field.py,sha256=LGSWuoNCJLGITbivsZ4XJOzjHtRh07Hhy0zwuQ7Cc6I,3210
23
+ ramifice/fields/choice_text_mult_field.py,sha256=44tKyFoUB6tEnC7pjHvbqDAqjY6vC5GiCNLBvAN_scw,4284
24
+ ramifice/fields/color_field.py,sha256=K-lYp8f08HTZt6WU0kY3CQWaAmx6I3-uyKHBq7xAeSA,3576
25
+ ramifice/fields/date_field.py,sha256=-M_dD8tVUXcDCQD5Hy5Ns9Z2QGlRya0qbvoWgA4qpmg,5277
26
+ ramifice/fields/date_time_field.py,sha256=ahjX-cD5Qj-V7JUi5QAZ8qgv9UePhYYYzJghiasKdqE,5312
27
+ ramifice/fields/email_field.py,sha256=4Kxy1K6CXJUJ8Db0CQuopjodiY4ybe7V0GT756t7Nks,3481
28
+ ramifice/fields/file_field.py,sha256=icckL_LGfPlotHO7j32lMre9J0O0k-WVjMQg5QdQav4,8130
29
+ ramifice/fields/float_field.py,sha256=fj9TPe1IYlZG7gTPp0Hr8C4PZJU9XEZMEym9hfEbB7M,4633
30
+ ramifice/fields/id_field.py,sha256=YO5oIwXtqgURjjd2oYe2ouXxdpaiJp5ZhUgUA2pkNeo,4183
31
+ ramifice/fields/image_field.py,sha256=qoUAkZW2b-EkU5IDvlbxEOFwWpLYFXs9ZFnxL55an6M,11549
32
+ ramifice/fields/integer_field.py,sha256=xPwpdhYNz4MyHgOypqa29oGNdKZic05yyUYHg5CDD3E,4609
33
+ ramifice/fields/ip_field.py,sha256=tBFGFMC_zwAyLGtVRNNfiu4vQoxXPcgVHhX_aoHrvns,3390
34
+ ramifice/fields/password_field.py,sha256=USD4Y8MTI89QZVT6zqLGBmb5kqOKrXqh73-z99cOvtk,3266
35
+ ramifice/fields/phone_field.py,sha256=UkszdRWQ-7-SutpVmr71IBZ9_Oc33h8W2vy_udMSERM,3663
36
+ ramifice/fields/slug_field.py,sha256=_g4fOyzv1qr9WI7cSXa2EOj9h1SVIBWfc29RZgxhn3c,2733
37
+ ramifice/fields/text_field.py,sha256=p4RhNjWbq0U2nd5OGnJd0CZZvoLea53nZ22kFc1NVWw,4140
38
+ ramifice/fields/url_field.py,sha256=oLdaVDwb3zaCEIE_XIikp-OZzYfi-8s19DnGrLJQ9XU,4041
39
+ ramifice/fields/general/__init__.py,sha256=JzgIDseNQLB_IDwY9-JSiT_bONxvhJmbKl5PhQzTnpE,40
40
+ ramifice/fields/general/choice_group.py,sha256=aNO8LnsafGOOQ7d2lAppI9YtzVHbWUZ6t1znEEIbAv8,962
41
+ ramifice/fields/general/date_group.py,sha256=C5VgR0CBEGgG7nIYEeI82hVXttngSJAGFvEdXC_OpGY,1213
42
+ ramifice/fields/general/field.py,sha256=qm7N-U5H1V6BK_6quJeGGpTmb9IqA-vxZlNHwoABye0,1384
43
+ ramifice/fields/general/file_group.py,sha256=T-IwFnlJAWaRcQKVn09IJCdFNGgnUfMkjLzWFFqn7gY,1117
44
+ ramifice/fields/general/number_group.py,sha256=LOPHbKAnIuqW4DEh2fH78w6qOQjp0OhkuP7MoikhlkA,761
45
+ ramifice/fields/general/text_group.py,sha256=m9EnlYGwqlck-JIYOCUd0hUYAVr8jH4YCnTmm9QlCkQ,1103
46
+ ramifice/models/__init__.py,sha256=h_QQ5rSJNZ-7kmx7wIFd8E8RmUS94b_x4jdwMbq8zm4,15
47
+ ramifice/models/decorator.py,sha256=fL9xc7-_BEiFEqfwgql6CihYWB6MC-JgiC0FSSK_JHA,5956
48
+ ramifice/models/model.py,sha256=e5UWHKIHwm7saxQ4bbamsTkz1VVBIqTRlAmJCOg5uRE,7160
49
+ ramifice/paladins/__init__.py,sha256=EJ6EEKXUcMG5P1bDmlEa4W3fsxSz5u6mzDG_oU1efMQ,618
50
+ ramifice/paladins/check.py,sha256=9lLJ6SnNQBI9eyAwWSqjFa7_F2A2QbTg4WHyrPL3E20,6584
51
+ ramifice/paladins/delete.py,sha256=90ZiTzYxa2bnhOJhkEBe7XR_Yi4gaTvrJ3u4dSik0mU,3430
52
+ ramifice/paladins/password.py,sha256=G-tMz2dIiOYEhOeSHYgAmc2e4tG_TJ2gt5tzPwBapkw,3047
53
+ ramifice/paladins/refrash.py,sha256=hIZQEBGtoIhuGGg2KQYGApCaMb8WhK_QZlzi1_-zzU0,1100
54
+ ramifice/paladins/save.py,sha256=mFau65uWYy4dSVyTVdZGR3VUnP-I_NPdMvq7F5n1sFo,3899
55
+ ramifice/paladins/tools.py,sha256=zc2VXp1U_BCT4IQWopwhxJ5vqci9jX128U5_nMeHawY,2652
56
+ ramifice/paladins/validation.py,sha256=gcEJXIEPu1g7Z54vl14YTs5rCmxOEYsgQH1usFfyy7k,1730
57
+ ramifice/paladins/groups/__init__.py,sha256=GxJWM3IkYT3HW9pnJ1QTEjdOKJnjEoAaQ8SRukXnIW0,712
58
+ ramifice/paladins/groups/bool_group.py,sha256=rz1XIIdhOqbCOYZT1Yl84XaJg-0vwdcqCnt0BH-xHVA,808
59
+ ramifice/paladins/groups/choice_group.py,sha256=KmrjbuHLLl6yGbRkdoMflf1thh17GLWrcbfaqrHlDiE,1813
60
+ ramifice/paladins/groups/date_group.py,sha256=V3MCp8eA7txVLh6xmg76G9_y62TzWIQWqH59Ip26Xag,3779
61
+ ramifice/paladins/groups/file_group.py,sha256=ySS7L5zcm2XrZRQUUOU8kgzqrucZ95UYzXD6pALWqE4,2982
62
+ ramifice/paladins/groups/id_group.py,sha256=zN_Glu_cMGk8jMSDli3vYPvYrQXvQJNJFzb-t-qtZlQ,1290
63
+ ramifice/paladins/groups/img_group.py,sha256=YDJTvbRoqQ2nf7-2QbIQ72I4j_c98_d5LZNrD9kCy0Q,6040
64
+ ramifice/paladins/groups/num_group.py,sha256=sbxzTdl33TVySfaNfqMixyBkJ69v6AqEgraFUN3Kftk,2317
65
+ ramifice/paladins/groups/pass_group.py,sha256=uuIIqMBXsYG7vTHc_AhdgWuNCivxTgQMjkEu0-ElSmY,1887
66
+ ramifice/paladins/groups/slug_group.py,sha256=ztiA2v7e5lQYRZtlLw8WGOhSWaYQfOdZ6wkKbx3ZbTM,2329
67
+ ramifice/paladins/groups/text_group.py,sha256=cdwUZoomw61A7CmDIbds_oOaia2tD-J5LLuj5b8E8O4,4472
68
+ ramifice/utils/__init__.py,sha256=xixHoOX4ja5jIUZemem1qn4k4aonv3G3Q76azQK_pkU,43
69
+ ramifice/utils/constants.py,sha256=uR20um3Qg_1SG1t7WyWbpq8kQD-9Mslyr_c1yh5Hw9w,1751
70
+ ramifice/utils/errors.py,sha256=iuhq7fzpUmsOyeXeg2fJjta8yAuqlXLKsZVMpfUhtHE,1901
71
+ ramifice/utils/fixtures.py,sha256=IG55gdFUbrWRQ2cL3Df9mYBgjVlFrlRuWB7UeK1Nzd8,3173
72
+ ramifice/utils/migration.py,sha256=Sx0uaXHVwGAYbroYuiKPCHrFBjIzOxcY3PCeP0q3KmU,11064
73
+ ramifice/utils/tools.py,sha256=dJjG92nevSq_US30pUdbBy37pvqBdxXHBeHZxpOInKM,2843
74
+ ramifice/utils/translations.py,sha256=aEkNKilD7RlJjBixqhh0cfIMw9lg13woaIwd3dyR8G4,4247
75
+ ramifice/utils/unit.py,sha256=PPNKWYFJ8cz0nwbBPaTdL58_Nr7N0fIHFJBpKG2ZLKI,2482
76
+ ramifice/utils/mixins/__init__.py,sha256=GrxJDsw73bEkitIh0-0BCxNnUK-N5uRXMCRlaPoaz1o,265
77
+ ramifice/utils/mixins/add_valid.py,sha256=TLOObedzXNA9eCylfAVbVCqIKE5sV-P5AdIN7avj-GA,407
78
+ ramifice/utils/mixins/hooks.py,sha256=33jvJRhfnJeL2Hd_YFXk3M_7wjqHaByU2wRjKyboL6s,914
79
+ ramifice/utils/mixins/indexing.py,sha256=Z0427HoaVRyNmSNN8Fx0mSICgAKV-gDdu3iR5qYUEbs,329
80
+ ramifice/utils/mixins/json_converter.py,sha256=2K_PZ34AzpesusgyyQFOLXFPcjXez3TWn-m9CHIKwRo,1131
81
+ ramifice-0.7.0.dist-info/METADATA,sha256=BAx1XVjis5nz7_9e9KQwRhcIQRwSqDC13vRcVsyjsUs,21030
82
+ ramifice-0.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
83
+ ramifice-0.7.0.dist-info/licenses/LICENSE,sha256=LrEL0aTZx90HDwFUQCJutORiDjJL9AnuVvCtspXIqt4,1095
84
+ ramifice-0.7.0.dist-info/RECORD,,
@@ -1,84 +0,0 @@
1
- ramifice/__init__.py,sha256=jLlfcFwSvw_X3dTRz3MbaLJ8SfqlNNrZ8jSwBrS3EMI,783
2
- ramifice/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- ramifice/commons/__init__.py,sha256=NZeqK9PEX7q8bVfiUaysdk_GShpA-5EfdM61mhj3wHg,513
4
- ramifice/commons/general.py,sha256=Jte8VWCGuMaQidCT19eFjh7tfaTEjBnkto_0mDJoxc4,5384
5
- ramifice/commons/indexes.py,sha256=GlAUtYnGaqNjuupg-KLzDzak9eDcOWZiE9y-Iz2AKXQ,3653
6
- ramifice/commons/many.py,sha256=5F3TsiUZuygILsNt5Er-mWHXot2qua_GEnHlT6AB-0M,9253
7
- ramifice/commons/one.py,sha256=8B5IQHX68x8hsbrb90vu-WgCH9zge2jJ3RmlJ256xU0,6781
8
- ramifice/commons/tools.py,sha256=xCalseb-sEDTqHyIv3r0o29n0VIWzmXZZoY3DTIVAIM,2373
9
- ramifice/commons/unit_manager.py,sha256=RGKxNovICXiaCzqdzsuvO4fehcSnSa0BDw-ax0J3MuE,4509
10
- ramifice/fields/__init__.py,sha256=u_XTUfcWTI96lvxinMPm_s9XNJ4jNDd8zhL9vwRvckc,1710
11
- ramifice/fields/bool_field.py,sha256=aTOLSO4k6TRvfWpRupvAuOFSuPQfRBViCE4wI2AJYgo,2101
12
- ramifice/fields/choice_float_dyn_field.py,sha256=5vfMjTr2jarr3sSaPfE-YejtTfK24CrTUPRCyn29QOE,3157
13
- ramifice/fields/choice_float_field.py,sha256=jNjEfkLXAwaAHgubGOQrT9AttwbRgxHkqhtRqMgMtsk,3950
14
- ramifice/fields/choice_float_mult_dyn_field.py,sha256=ReXje9VvEPUthqrP3fjr16VVi0GWvqiN7CQp4UeUDr4,3220
15
- ramifice/fields/choice_float_mult_field.py,sha256=70L_mMKvvVowKS7E06BSsQ9IAX3s0q6k4_MhePcsYOU,4296
16
- ramifice/fields/choice_int_dyn_field.py,sha256=yWYoESTjrk2_RxFwaVYuIXo6troyWHZK1Ey2kMJvRMs,3151
17
- ramifice/fields/choice_int_field.py,sha256=2ejg7z-Ct-Ho56bZeB-SBuvNd0Aq7rQf7AFg41qxW-w,3938
18
- ramifice/fields/choice_int_mult_dyn_field.py,sha256=TKwqvZOqUMnq7mdWrUofcnWq61FRAHBeMsIuiMXQXVw,3216
19
- ramifice/fields/choice_int_mult_field.py,sha256=e39ue_sybVO9q5S1eKg6kTox6k8gIZSUEhmIlbpwF_c,4290
20
- ramifice/fields/choice_text_dyn_field.py,sha256=6AR0vy_ZNv6XAgypzsgWrfNgHXS-7CX0OCA1gA9cy2Q,3147
21
- ramifice/fields/choice_text_field.py,sha256=HTEfKUZKBDE3Rv9eKYenodURc4O_iClPQLK2y5LSfBU,4143
22
- ramifice/fields/choice_text_mult_dyn_field.py,sha256=RxTDktctGVFKXbLWeISNrpEOIEysp7xjX0VoAn6a3NQ,3212
23
- ramifice/fields/choice_text_mult_field.py,sha256=WCpOmrmPZpvIYV9WCo2xAHhAT_Iogd0tuuuR-raGm4c,4286
24
- ramifice/fields/color_field.py,sha256=Syam8MtB--B0HzAT3w3QuWz3pPixSMbh8xGPmbGYLCs,3570
25
- ramifice/fields/date_field.py,sha256=xhMRsEwk4CztDae5va2Tx0v9Oh55M4p0S4Y0qu-ZlIk,5251
26
- ramifice/fields/date_time_field.py,sha256=RKxXVWTWGNxTri-MDlOAZNSwgtL46m-0grh3wKX-gi8,5286
27
- ramifice/fields/email_field.py,sha256=qXG7zHkr5ox4CFrb6QYarBMl8gwcq8KlVFVCj-zfvs0,3477
28
- ramifice/fields/file_field.py,sha256=YLdZvotj6ymEVRjYGU4xsiHkP_zI8krk3TuHaowvfDo,8126
29
- ramifice/fields/float_field.py,sha256=wadjiYakzv4uzWD8wI2E0B9w78Or4hZiAmrNXlOy8EI,4629
30
- ramifice/fields/id_field.py,sha256=NqdM0UJAi-iXJc7wa6CAJNG0-i4YNt08XGkHqV5ingc,4157
31
- ramifice/fields/image_field.py,sha256=MfKILPPz2ye8x696eEu8loRRpIWgP4neVoZ7ucNkDIw,11545
32
- ramifice/fields/integer_field.py,sha256=QpLqLItG4mVMYOhpGDVFNr-wDFqeUuERtfZy7C-EslE,4605
33
- ramifice/fields/ip_field.py,sha256=q-2OgT4VBDo8yzrX7wwuSHwexwsM8wDwnHOyQRACItI,3386
34
- ramifice/fields/password_field.py,sha256=EzIsegHdsVpnj9D-cTI1Q9RBbW07qUx7I7UFcMWW8Hk,3238
35
- ramifice/fields/phone_field.py,sha256=-rjW8d00phqHi0YK_R8eZtwPHszyT9Aqxdb3M_KOxIY,3659
36
- ramifice/fields/slug_field.py,sha256=V0kQ8bfqTv3Rxs17dmhGpe_LmgNS7LOGkvvK2fZJYfE,2729
37
- ramifice/fields/text_field.py,sha256=JUMF8yx1eZ79k9mw28TxVCPcPqecXjqOpkDf25a5Tu4,4136
38
- ramifice/fields/url_field.py,sha256=LsHNn38bDt_7kaggX53P-nE3C4pYIlp1NeOPcH06lTk,4037
39
- ramifice/fields/general/__init__.py,sha256=JzgIDseNQLB_IDwY9-JSiT_bONxvhJmbKl5PhQzTnpE,40
40
- ramifice/fields/general/choice_group.py,sha256=aNO8LnsafGOOQ7d2lAppI9YtzVHbWUZ6t1znEEIbAv8,962
41
- ramifice/fields/general/date_group.py,sha256=C5VgR0CBEGgG7nIYEeI82hVXttngSJAGFvEdXC_OpGY,1213
42
- ramifice/fields/general/field.py,sha256=qm7N-U5H1V6BK_6quJeGGpTmb9IqA-vxZlNHwoABye0,1384
43
- ramifice/fields/general/file_group.py,sha256=T-IwFnlJAWaRcQKVn09IJCdFNGgnUfMkjLzWFFqn7gY,1117
44
- ramifice/fields/general/number_group.py,sha256=LOPHbKAnIuqW4DEh2fH78w6qOQjp0OhkuP7MoikhlkA,761
45
- ramifice/fields/general/text_group.py,sha256=m9EnlYGwqlck-JIYOCUd0hUYAVr8jH4YCnTmm9QlCkQ,1103
46
- ramifice/models/__init__.py,sha256=h_QQ5rSJNZ-7kmx7wIFd8E8RmUS94b_x4jdwMbq8zm4,15
47
- ramifice/models/decorator.py,sha256=vEblLbpQQ0BkdTI2ch-BtDvCqWSEXe2aaEjxND705_Q,5954
48
- ramifice/models/model.py,sha256=JPEUYONRHVj7uE5vnuodc65dGHyBQCRmV8mdVUAgyXw,7118
49
- ramifice/paladins/__init__.py,sha256=EJ6EEKXUcMG5P1bDmlEa4W3fsxSz5u6mzDG_oU1efMQ,618
50
- ramifice/paladins/check.py,sha256=OeEDtL3lNR94bL1shrHloAHXHZtHnl6IWzEgukD9HSU,6580
51
- ramifice/paladins/delete.py,sha256=hnLpyMoNbgegQ_GF-A7iEHj7cbk1oSc5xyTy1BNLxsE,3426
52
- ramifice/paladins/password.py,sha256=pp0AVMf98w-2Ps3hHqwwIDSsXh93s-1TrBbeEI83Ly8,3041
53
- ramifice/paladins/refrash.py,sha256=4xojazc5BqCkE8_st11gH5tj2LpflzWVn2ZD-uNoOsg,1096
54
- ramifice/paladins/save.py,sha256=Z8vmqEksCK8XY27-BsgN2lyaNxLregOo5p0_XB9qUys,3895
55
- ramifice/paladins/tools.py,sha256=zc2VXp1U_BCT4IQWopwhxJ5vqci9jX128U5_nMeHawY,2652
56
- ramifice/paladins/validation.py,sha256=gcEJXIEPu1g7Z54vl14YTs5rCmxOEYsgQH1usFfyy7k,1730
57
- ramifice/paladins/groups/__init__.py,sha256=GxJWM3IkYT3HW9pnJ1QTEjdOKJnjEoAaQ8SRukXnIW0,712
58
- ramifice/paladins/groups/bool_group.py,sha256=rz1XIIdhOqbCOYZT1Yl84XaJg-0vwdcqCnt0BH-xHVA,808
59
- ramifice/paladins/groups/choice_group.py,sha256=KmrjbuHLLl6yGbRkdoMflf1thh17GLWrcbfaqrHlDiE,1813
60
- ramifice/paladins/groups/date_group.py,sha256=V3MCp8eA7txVLh6xmg76G9_y62TzWIQWqH59Ip26Xag,3779
61
- ramifice/paladins/groups/file_group.py,sha256=ySS7L5zcm2XrZRQUUOU8kgzqrucZ95UYzXD6pALWqE4,2982
62
- ramifice/paladins/groups/id_group.py,sha256=zN_Glu_cMGk8jMSDli3vYPvYrQXvQJNJFzb-t-qtZlQ,1290
63
- ramifice/paladins/groups/img_group.py,sha256=YDJTvbRoqQ2nf7-2QbIQ72I4j_c98_d5LZNrD9kCy0Q,6040
64
- ramifice/paladins/groups/num_group.py,sha256=sbxzTdl33TVySfaNfqMixyBkJ69v6AqEgraFUN3Kftk,2317
65
- ramifice/paladins/groups/pass_group.py,sha256=uuIIqMBXsYG7vTHc_AhdgWuNCivxTgQMjkEu0-ElSmY,1887
66
- ramifice/paladins/groups/slug_group.py,sha256=ztiA2v7e5lQYRZtlLw8WGOhSWaYQfOdZ6wkKbx3ZbTM,2329
67
- ramifice/paladins/groups/text_group.py,sha256=FSrZbm3Fd0SU0IIFFBxs9XN2HPSFHshgwIRiLaUDwNY,4456
68
- ramifice/utils/__init__.py,sha256=xixHoOX4ja5jIUZemem1qn4k4aonv3G3Q76azQK_pkU,43
69
- ramifice/utils/errors.py,sha256=iuhq7fzpUmsOyeXeg2fJjta8yAuqlXLKsZVMpfUhtHE,1901
70
- ramifice/utils/fixtures.py,sha256=IG55gdFUbrWRQ2cL3Df9mYBgjVlFrlRuWB7UeK1Nzd8,3173
71
- ramifice/utils/globals.py,sha256=uR20um3Qg_1SG1t7WyWbpq8kQD-9Mslyr_c1yh5Hw9w,1751
72
- ramifice/utils/migration.py,sha256=JUhYaJ61IS1W_Khof0sbqeHDQrI7-XcmTQ41PhCdjcQ,11017
73
- ramifice/utils/tools.py,sha256=1yFIOrkWToM55OpMMId9T26hZqPQWnxLU3_jQ4Ejazg,2743
74
- ramifice/utils/translations.py,sha256=aEkNKilD7RlJjBixqhh0cfIMw9lg13woaIwd3dyR8G4,4247
75
- ramifice/utils/unit.py,sha256=PPNKWYFJ8cz0nwbBPaTdL58_Nr7N0fIHFJBpKG2ZLKI,2482
76
- ramifice/utils/mixins/__init__.py,sha256=GrxJDsw73bEkitIh0-0BCxNnUK-N5uRXMCRlaPoaz1o,265
77
- ramifice/utils/mixins/add_valid.py,sha256=TLOObedzXNA9eCylfAVbVCqIKE5sV-P5AdIN7avj-GA,407
78
- ramifice/utils/mixins/hooks.py,sha256=33jvJRhfnJeL2Hd_YFXk3M_7wjqHaByU2wRjKyboL6s,914
79
- ramifice/utils/mixins/indexing.py,sha256=Z0427HoaVRyNmSNN8Fx0mSICgAKV-gDdu3iR5qYUEbs,329
80
- ramifice/utils/mixins/json_converter.py,sha256=WhigXyDAV-FfILaZuwvRFRIk0D90Rv3dG5t-mv5fVyc,1107
81
- ramifice-0.6.0.dist-info/METADATA,sha256=mGAJxiS68kKIy6ZO94iagVCIAXPPVM2hoxSZnwHGKyk,20987
82
- ramifice-0.6.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
83
- ramifice-0.6.0.dist-info/licenses/LICENSE,sha256=LrEL0aTZx90HDwFUQCJutORiDjJL9AnuVvCtspXIqt4,1095
84
- ramifice-0.6.0.dist-info/RECORD,,
File without changes