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.
- ramifice/__init__.py +8 -1
- ramifice/commons/__init__.py +2 -2
- ramifice/commons/general.py +11 -11
- ramifice/commons/indexes.py +8 -8
- ramifice/commons/many.py +6 -6
- ramifice/commons/one.py +8 -8
- ramifice/commons/tools.py +4 -4
- ramifice/commons/unit_manager.py +3 -3
- ramifice/fields/__init__.py +1 -1
- ramifice/fields/bool_field.py +16 -6
- ramifice/fields/choice_float_dyn_field.py +16 -6
- ramifice/fields/choice_float_field.py +20 -8
- ramifice/fields/choice_float_mult_dyn_field.py +16 -6
- ramifice/fields/choice_float_mult_field.py +20 -8
- ramifice/fields/choice_int_dyn_field.py +16 -6
- ramifice/fields/choice_int_field.py +20 -8
- ramifice/fields/choice_int_mult_dyn_field.py +16 -6
- ramifice/fields/choice_int_mult_field.py +20 -8
- ramifice/fields/choice_text_dyn_field.py +16 -6
- ramifice/fields/choice_text_field.py +20 -8
- ramifice/fields/choice_text_mult_dyn_field.py +16 -6
- ramifice/fields/choice_text_mult_field.py +20 -8
- ramifice/fields/color_field.py +24 -11
- ramifice/fields/date_field.py +25 -10
- ramifice/fields/date_time_field.py +25 -10
- ramifice/fields/email_field.py +21 -7
- ramifice/fields/file_field.py +25 -10
- ramifice/fields/float_field.py +25 -7
- ramifice/fields/general/__init__.py +1 -1
- ramifice/fields/general/choice_group.py +9 -10
- ramifice/fields/general/date_group.py +11 -11
- ramifice/fields/general/field.py +13 -13
- ramifice/fields/general/file_group.py +10 -10
- ramifice/fields/general/number_group.py +8 -8
- ramifice/fields/general/text_group.py +10 -10
- ramifice/fields/id_field.py +20 -15
- ramifice/fields/image_field.py +25 -9
- ramifice/fields/integer_field.py +25 -7
- ramifice/fields/ip_field.py +21 -7
- ramifice/fields/password_field.py +21 -12
- ramifice/fields/phone_field.py +22 -8
- ramifice/fields/slug_field.py +17 -6
- ramifice/fields/text_field.py +24 -7
- ramifice/fields/url_field.py +19 -19
- ramifice/models/__init__.py +7 -1
- ramifice/models/decorator.py +3 -3
- ramifice/models/model.py +16 -16
- ramifice/paladins/__init__.py +17 -2
- ramifice/paladins/add_valid.py +3 -3
- ramifice/paladins/check.py +3 -3
- ramifice/paladins/delete.py +3 -3
- ramifice/paladins/groups/__init__.py +1 -1
- ramifice/paladins/groups/bool_group.py +3 -3
- ramifice/paladins/groups/choice_group.py +3 -3
- ramifice/paladins/groups/date_group.py +3 -3
- ramifice/paladins/groups/file_group.py +3 -3
- ramifice/paladins/groups/id_group.py +3 -3
- ramifice/paladins/groups/img_group.py +3 -3
- ramifice/paladins/groups/num_group.py +3 -3
- ramifice/paladins/groups/pass_group.py +3 -3
- ramifice/paladins/groups/slug_group.py +3 -3
- ramifice/paladins/groups/text_group.py +3 -3
- ramifice/paladins/hooks.py +8 -8
- ramifice/paladins/indexing.py +3 -3
- ramifice/paladins/password.py +4 -4
- ramifice/paladins/refrash.py +3 -3
- ramifice/paladins/save.py +3 -3
- ramifice/paladins/tools.py +6 -6
- ramifice/paladins/validation.py +4 -4
- ramifice/utils/__init__.py +13 -1
- ramifice/utils/constants.py +1 -1
- ramifice/utils/errors.py +23 -23
- ramifice/utils/fixtures.py +2 -2
- ramifice/utils/migration.py +8 -8
- ramifice/utils/{mixins/json_converter.py → mixins.py} +6 -6
- ramifice/utils/tools.py +12 -12
- ramifice/utils/translations.py +5 -5
- ramifice/utils/unit.py +10 -10
- {ramifice-0.8.22.dist-info → ramifice-0.8.26.dist-info}/METADATA +4 -4
- ramifice-0.8.26.dist-info/RECORD +83 -0
- ramifice/utils/mixins/__init__.py +0 -5
- ramifice-0.8.22.dist-info/RECORD +0 -84
- {ramifice-0.8.22.dist-info → ramifice-0.8.26.dist-info}/WHEEL +0 -0
- {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
|
-
"""
|
1
|
+
"""Custom Exceptions for Ramifice."""
|
2
2
|
|
3
3
|
|
4
4
|
class RamificeException(Exception):
|
5
|
-
"""
|
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
|
-
"""
|
12
|
+
"""Exception raised if the file has no extension.
|
13
13
|
|
14
|
-
|
15
|
-
message
|
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
|
-
"""
|
24
|
+
"""Exception raised if does not match the regular expression.
|
25
25
|
|
26
|
-
|
27
|
-
regex_str
|
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
|
-
"""
|
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
|
-
"""
|
44
|
+
"""Exception raised for cases of which should not be.
|
45
45
|
|
46
|
-
|
47
|
-
message
|
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
|
-
"""
|
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
|
-
"""
|
67
|
+
"""Exception is raised when trying to delete the document.
|
68
68
|
|
69
|
-
|
70
|
-
message
|
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
|
-
"""
|
79
|
+
"""Exception is raised when not possible to add Unit.
|
80
80
|
|
81
|
-
|
82
|
-
message
|
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
|
-
"""
|
91
|
+
"""Exception is raised when not possible to delete Unit.
|
92
92
|
|
93
|
-
|
94
|
-
message
|
93
|
+
Args:
|
94
|
+
message: explanation of the error
|
95
95
|
"""
|
96
96
|
|
97
97
|
def __init__(self, message: str) -> None: # noqa: D107
|
ramifice/utils/fixtures.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
"""
|
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
|
-
"""
|
27
|
+
"""Apply fixture for current Model.
|
28
28
|
|
29
29
|
Runs automatically during Model migration.
|
30
30
|
"""
|
ramifice/utils/migration.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
11
|
+
"""Contains the methods for converting Fields to JSON and back."""
|
12
12
|
|
13
13
|
def to_dict(self) -> dict[str, Any]:
|
14
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
124
|
+
"""Get ObjectId from hash string."""
|
125
125
|
return ObjectId(hash) if bool(hash) else None
|
ramifice/utils/translations.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
-
"""
|
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
|
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
|
-
"""
|
14
|
+
"""Unit of information for `choices` parameter in dynamic field types.
|
15
15
|
|
16
|
-
|
17
|
-
field
|
18
|
-
title
|
19
|
-
value
|
20
|
-
is_delete
|
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
|
-
"""
|
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.
|
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
|
[](https://github.com/kebasyaty/ramifice/blob/v0/assets/UBUNTU_INSTALL_MONGODB.md)
|
105
106
|
[](https://www.mongodb.com/try/download/community)
|
106
107
|
|
107
|
-
|
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
|
-
|
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,,
|
ramifice-0.8.22.dist-info/RECORD
DELETED
@@ -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,,
|
File without changes
|
File without changes
|