ramifice 0.8.32__py3-none-any.whl → 0.8.33__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 +2 -0
- ramifice/commons/__init__.py +2 -0
- ramifice/commons/general.py +2 -0
- ramifice/commons/indexes.py +6 -6
- ramifice/commons/many.py +2 -0
- ramifice/commons/one.py +2 -0
- ramifice/commons/tools.py +7 -5
- ramifice/commons/unit_manager.py +2 -0
- ramifice/fields/__init__.py +2 -0
- ramifice/fields/bool_field.py +2 -0
- ramifice/fields/choice_float_dyn_field.py +2 -0
- ramifice/fields/choice_float_field.py +2 -0
- ramifice/fields/choice_float_mult_dyn_field.py +2 -0
- ramifice/fields/choice_float_mult_field.py +2 -0
- ramifice/fields/choice_int_dyn_field.py +2 -0
- ramifice/fields/choice_int_field.py +2 -0
- ramifice/fields/choice_int_mult_dyn_field.py +2 -0
- ramifice/fields/choice_int_mult_field.py +2 -0
- ramifice/fields/choice_text_dyn_field.py +2 -0
- ramifice/fields/choice_text_field.py +2 -0
- ramifice/fields/choice_text_mult_dyn_field.py +2 -0
- ramifice/fields/choice_text_mult_field.py +2 -0
- ramifice/fields/color_field.py +2 -0
- ramifice/fields/date_field.py +6 -6
- ramifice/fields/date_time_field.py +6 -6
- ramifice/fields/email_field.py +2 -0
- ramifice/fields/file_field.py +4 -2
- ramifice/fields/float_field.py +2 -0
- ramifice/fields/general/choice_group.py +2 -0
- ramifice/fields/general/date_group.py +2 -0
- ramifice/fields/general/field.py +2 -0
- ramifice/fields/general/file_group.py +2 -0
- ramifice/fields/general/number_group.py +2 -0
- ramifice/fields/general/text_group.py +2 -0
- ramifice/fields/id_field.py +2 -0
- ramifice/fields/image_field.py +5 -3
- ramifice/fields/integer_field.py +2 -0
- ramifice/fields/ip_field.py +2 -0
- ramifice/fields/password_field.py +5 -3
- ramifice/fields/phone_field.py +3 -1
- ramifice/fields/slug_field.py +2 -0
- ramifice/fields/text_field.py +3 -1
- ramifice/fields/url_field.py +2 -0
- ramifice/models/decorator.py +4 -2
- ramifice/models/model.py +2 -1
- ramifice/paladins/__init__.py +2 -0
- ramifice/paladins/add_valid.py +2 -0
- ramifice/paladins/check.py +2 -0
- ramifice/paladins/delete.py +2 -0
- ramifice/paladins/groups/__init__.py +2 -0
- ramifice/paladins/groups/bool_group.py +2 -0
- ramifice/paladins/groups/choice_group.py +2 -0
- ramifice/paladins/groups/date_group.py +6 -3
- ramifice/paladins/groups/file_group.py +20 -16
- ramifice/paladins/groups/id_group.py +2 -0
- ramifice/paladins/groups/img_group.py +20 -16
- ramifice/paladins/groups/num_group.py +8 -2
- ramifice/paladins/groups/pass_group.py +3 -1
- ramifice/paladins/groups/slug_group.py +2 -0
- ramifice/paladins/groups/text_group.py +5 -1
- ramifice/paladins/hooks.py +2 -0
- ramifice/paladins/indexing.py +2 -0
- ramifice/paladins/password.py +4 -3
- ramifice/paladins/refrash.py +2 -0
- ramifice/paladins/save.py +2 -0
- ramifice/paladins/tools.py +2 -0
- ramifice/paladins/validation.py +2 -0
- ramifice/utils/constants.py +2 -0
- ramifice/utils/errors.py +5 -3
- ramifice/utils/fixtures.py +4 -1
- ramifice/utils/migration.py +2 -0
- ramifice/utils/mixins.py +2 -0
- ramifice/utils/tools.py +5 -9
- ramifice/utils/translations.py +4 -2
- ramifice/utils/unit.py +2 -0
- {ramifice-0.8.32.dist-info → ramifice-0.8.33.dist-info}/METADATA +1 -1
- ramifice-0.8.33.dist-info/RECORD +83 -0
- ramifice-0.8.32.dist-info/RECORD +0 -83
- {ramifice-0.8.32.dist-info → ramifice-0.8.33.dist-info}/WHEEL +0 -0
- {ramifice-0.8.32.dist-info → ramifice-0.8.33.dist-info}/licenses/LICENSE +0 -0
@@ -4,6 +4,8 @@ Supported fields:
|
|
4
4
|
DateTimeField | DateField
|
5
5
|
"""
|
6
6
|
|
7
|
+
from __future__ import annotations
|
8
|
+
|
7
9
|
__all__ = ("DateGroupMixin",)
|
8
10
|
|
9
11
|
from datetime import datetime
|
@@ -72,8 +74,7 @@ class DateGroupMixin:
|
|
72
74
|
)
|
73
75
|
)
|
74
76
|
err_msg = translations._(
|
75
|
-
"The date
|
76
|
-
max_date_str,
|
77
|
+
"The date {} must not be greater than max={} !".format(value_str, max_date_str),
|
77
78
|
)
|
78
79
|
accumulate_error(err_msg, params)
|
79
80
|
# Validation the `min_date` field attribute.
|
@@ -105,7 +106,9 @@ class DateGroupMixin:
|
|
105
106
|
locale=translations.CURRENT_LOCALE,
|
106
107
|
)
|
107
108
|
)
|
108
|
-
err_msg = translations._(
|
109
|
+
err_msg = translations._(
|
110
|
+
"The date {} must not be less than min={} !".format(value_str, min_date_str),
|
111
|
+
)
|
109
112
|
accumulate_error(err_msg, params)
|
110
113
|
# Insert result.
|
111
114
|
if params["is_save"]:
|
@@ -3,6 +3,8 @@
|
|
3
3
|
Supported fields: FileField
|
4
4
|
"""
|
5
5
|
|
6
|
+
from __future__ import annotations
|
7
|
+
|
6
8
|
__all__ = ("FileGroupMixin",)
|
7
9
|
|
8
10
|
from typing import Any
|
@@ -30,22 +32,21 @@ class FileGroupMixin:
|
|
30
32
|
if not isinstance(value, (dict, type(None))):
|
31
33
|
panic_type_error("dict | None", params)
|
32
34
|
|
33
|
-
if not params["is_update"]:
|
35
|
+
if not params["is_update"] and value is None:
|
36
|
+
default = field.default or None
|
37
|
+
# If necessary, use the default value.
|
38
|
+
if default is not None:
|
39
|
+
params["field_data"].from_path(default)
|
40
|
+
value = params["field_data"].value
|
41
|
+
# Validation, if the field is required and empty, accumulate the error.
|
42
|
+
# ( the default value is used whenever possible )
|
34
43
|
if value is None:
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
# ( the default value is used whenever possible )
|
42
|
-
if value is None:
|
43
|
-
if field.required:
|
44
|
-
err_msg = translations._("Required field !")
|
45
|
-
accumulate_error(err_msg, params)
|
46
|
-
if params["is_save"]:
|
47
|
-
params["result_map"][field.name] = None
|
48
|
-
return
|
44
|
+
if field.required:
|
45
|
+
err_msg = translations._("Required field !")
|
46
|
+
accumulate_error(err_msg, params)
|
47
|
+
if params["is_save"]:
|
48
|
+
params["result_map"][field.name] = None
|
49
|
+
return
|
49
50
|
# Return if the current value is missing
|
50
51
|
if value is None:
|
51
52
|
return
|
@@ -67,7 +68,10 @@ class FileGroupMixin:
|
|
67
68
|
return
|
68
69
|
# Accumulate an error if the file size exceeds the maximum value.
|
69
70
|
if value["size"] > field.max_size:
|
70
|
-
|
71
|
+
human_size = to_human_size(field.max_size)
|
72
|
+
err_msg = translations._(
|
73
|
+
"File size exceeds the maximum value {} !".format(human_size),
|
74
|
+
)
|
71
75
|
accumulate_error(err_msg, params)
|
72
76
|
return
|
73
77
|
# Insert result.
|
@@ -3,6 +3,8 @@
|
|
3
3
|
Supported fields: ImageField
|
4
4
|
"""
|
5
5
|
|
6
|
+
from __future__ import annotations
|
7
|
+
|
6
8
|
__all__ = ("ImgGroupMixin",)
|
7
9
|
|
8
10
|
from asyncio import to_thread
|
@@ -29,22 +31,21 @@ class ImgGroupMixin:
|
|
29
31
|
if not isinstance(value, (dict, type(None))):
|
30
32
|
panic_type_error("dict | None", params)
|
31
33
|
|
32
|
-
if not params["is_update"]:
|
34
|
+
if not params["is_update"] and value is None:
|
35
|
+
default = field.default or None
|
36
|
+
# If necessary, use the default value.
|
37
|
+
if default is not None:
|
38
|
+
params["field_data"].from_path(default)
|
39
|
+
value = params["field_data"].value
|
40
|
+
# Validation, if the field is required and empty, accumulate the error.
|
41
|
+
# ( the default value is used whenever possible )
|
33
42
|
if value is None:
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
# ( the default value is used whenever possible )
|
41
|
-
if value is None:
|
42
|
-
if field.required:
|
43
|
-
err_msg = translations._("Required field !")
|
44
|
-
accumulate_error(err_msg, params)
|
45
|
-
if params["is_save"]:
|
46
|
-
params["result_map"][field.name] = None
|
47
|
-
return
|
43
|
+
if field.required:
|
44
|
+
err_msg = translations._("Required field !")
|
45
|
+
accumulate_error(err_msg, params)
|
46
|
+
if params["is_save"]:
|
47
|
+
params["result_map"][field.name] = None
|
48
|
+
return
|
48
49
|
# Return if the current value is missing
|
49
50
|
if value is None:
|
50
51
|
return
|
@@ -66,7 +67,10 @@ class ImgGroupMixin:
|
|
66
67
|
return
|
67
68
|
# Accumulate an error if the file size exceeds the maximum value.
|
68
69
|
if value["size"] > field.max_size:
|
69
|
-
|
70
|
+
human_size = to_human_size(field.max_size)
|
71
|
+
err_msg = translations._(
|
72
|
+
"Image size exceeds the maximum value {} !".format(human_size),
|
73
|
+
)
|
70
74
|
accumulate_error(err_msg, params)
|
71
75
|
return
|
72
76
|
# Create thumbnails.
|
@@ -4,6 +4,8 @@ Supported fields:
|
|
4
4
|
IntegerField | FloatField
|
5
5
|
"""
|
6
6
|
|
7
|
+
from __future__ import annotations
|
8
|
+
|
7
9
|
__all__ = ("NumGroupMixin",)
|
8
10
|
|
9
11
|
from typing import Any
|
@@ -49,12 +51,16 @@ class NumGroupMixin:
|
|
49
51
|
# Validation the `max_number` field attribute.
|
50
52
|
max_number = field.max_number
|
51
53
|
if max_number is not None and value > max_number:
|
52
|
-
err_msg = translations._(
|
54
|
+
err_msg = translations._(
|
55
|
+
"The value {} must not be greater than max={} !".format(value, max_number),
|
56
|
+
)
|
53
57
|
accumulate_error(err_msg, params)
|
54
58
|
# Validation the `min_number` field attribute.
|
55
59
|
min_number = field.min_number
|
56
60
|
if min_number is not None and value < min_number:
|
57
|
-
err_msg = translations._(
|
61
|
+
err_msg = translations._(
|
62
|
+
"The value {} must not be less than min={} !".format(value, min_number),
|
63
|
+
)
|
58
64
|
accumulate_error(err_msg, params)
|
59
65
|
# Validation the `unique` field attribute.
|
60
66
|
if field.unique and not await check_uniqueness(value, params, field_name):
|
@@ -3,6 +3,8 @@
|
|
3
3
|
Supported fields: PasswordField
|
4
4
|
"""
|
5
5
|
|
6
|
+
from __future__ import annotations
|
7
|
+
|
6
8
|
__all__ = ("PassGroupMixin",)
|
7
9
|
|
8
10
|
from typing import Any
|
@@ -45,7 +47,7 @@ class PassGroupMixin:
|
|
45
47
|
err_msg = translations._("Invalid Password !")
|
46
48
|
accumulate_error(err_msg, params)
|
47
49
|
chars = "a-z A-Z 0-9 - . _ ! \" ` ' # % & , : ; < > = @ { } ~ $ ( ) * + / \\ ? [ ] ^ |"
|
48
|
-
err_msg = translations._("Valid characters:
|
50
|
+
err_msg = translations._("Valid characters: {}".format(chars))
|
49
51
|
accumulate_error(err_msg, params)
|
50
52
|
err_msg = translations._("Number of characters: from 8 to 256")
|
51
53
|
accumulate_error(err_msg, params)
|
@@ -5,6 +5,8 @@ Supported fields:
|
|
5
5
|
IPField | EmailField | ColorField
|
6
6
|
"""
|
7
7
|
|
8
|
+
from __future__ import annotations
|
9
|
+
|
8
10
|
__all__ = ("TextGroupMixin",)
|
9
11
|
|
10
12
|
import asyncio
|
@@ -63,7 +65,9 @@ class TextGroupMixin:
|
|
63
65
|
# Validation the `maxlength` field attribute.
|
64
66
|
maxlength: int | None = field.__dict__.get("maxlength")
|
65
67
|
if maxlength is not None and len(field) > maxlength:
|
66
|
-
err_msg = translations._(
|
68
|
+
err_msg = translations._(
|
69
|
+
"The length of the string exceeds maxlength={} !".format(maxlength),
|
70
|
+
)
|
67
71
|
accumulate_error(err_msg, params)
|
68
72
|
# Validation the `unique` field attribute.
|
69
73
|
if field.unique and not await check_uniqueness(
|
ramifice/paladins/hooks.py
CHANGED
ramifice/paladins/indexing.py
CHANGED
ramifice/paladins/password.py
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
"""Verification, replacement and recoverang of password."""
|
2
2
|
|
3
|
+
from __future__ import annotations
|
4
|
+
|
3
5
|
__all__ = ("PasswordMixin",)
|
4
6
|
|
7
|
+
import contextlib
|
5
8
|
import logging
|
6
9
|
from typing import Any
|
7
10
|
|
@@ -59,10 +62,8 @@ class PasswordMixin:
|
|
59
62
|
# Password verification.
|
60
63
|
is_valid: bool = False
|
61
64
|
ph = PasswordHasher()
|
62
|
-
|
65
|
+
with contextlib.suppress(BaseException):
|
63
66
|
is_valid = ph.verify(hash, password)
|
64
|
-
except:
|
65
|
-
pass
|
66
67
|
#
|
67
68
|
if is_valid and ph.check_needs_rehash(hash):
|
68
69
|
hash = ph.hash(password)
|
ramifice/paladins/refrash.py
CHANGED
ramifice/paladins/save.py
CHANGED
ramifice/paladins/tools.py
CHANGED
ramifice/paladins/validation.py
CHANGED
ramifice/utils/constants.py
CHANGED
ramifice/utils/errors.py
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
"""Custom Exceptions for Ramifice."""
|
2
2
|
|
3
|
+
from __future__ import annotations
|
4
|
+
|
3
5
|
|
4
6
|
class RamificeException(Exception):
|
5
7
|
"""Root Exception for Ramifice."""
|
@@ -67,7 +69,7 @@ class ForbiddenDeleteDocError(RamificeException):
|
|
67
69
|
"""Exception is raised when trying to delete the document.
|
68
70
|
|
69
71
|
Args:
|
70
|
-
|
72
|
+
message: explanation of the error
|
71
73
|
"""
|
72
74
|
|
73
75
|
def __init__(self, message: str) -> None: # noqa: D107
|
@@ -79,7 +81,7 @@ class NotPossibleAddUnitError(RamificeException):
|
|
79
81
|
"""Exception is raised when not possible to add Unit.
|
80
82
|
|
81
83
|
Args:
|
82
|
-
|
84
|
+
message: explanation of the error
|
83
85
|
"""
|
84
86
|
|
85
87
|
def __init__(self, message: str) -> None: # noqa: D107
|
@@ -91,7 +93,7 @@ class NotPossibleDeleteUnitError(RamificeException):
|
|
91
93
|
"""Exception is raised when not possible to delete Unit.
|
92
94
|
|
93
95
|
Args:
|
94
|
-
|
96
|
+
message: explanation of the error
|
95
97
|
"""
|
96
98
|
|
97
99
|
def __init__(self, message: str) -> None: # noqa: D107
|
ramifice/utils/fixtures.py
CHANGED
@@ -3,10 +3,13 @@
|
|
3
3
|
Runs automatically during Model migration.
|
4
4
|
"""
|
5
5
|
|
6
|
+
from __future__ import annotations
|
7
|
+
|
6
8
|
__all__ = ("apply_fixture",)
|
7
9
|
|
8
10
|
import logging
|
9
11
|
from datetime import datetime
|
12
|
+
from pathlib import Path
|
10
13
|
from typing import Any
|
11
14
|
|
12
15
|
import yaml
|
@@ -32,7 +35,7 @@ async def apply_fixture(
|
|
32
35
|
fixture_path: str = f"config/fixtures/{fixture_name}.yml"
|
33
36
|
data_yaml: dict[str, Any] | list[dict[str, Any]] | None = None
|
34
37
|
|
35
|
-
with open(fixture_path) as file:
|
38
|
+
with Path.open(Path(fixture_path)) as file:
|
36
39
|
data_yaml = yaml.safe_load(file)
|
37
40
|
|
38
41
|
if not bool(data_yaml):
|
ramifice/utils/migration.py
CHANGED
ramifice/utils/mixins.py
CHANGED
ramifice/utils/tools.py
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
"""Global collection of auxiliary methods."""
|
2
2
|
|
3
|
+
from __future__ import annotations
|
4
|
+
|
3
5
|
__all__ = (
|
4
6
|
"is_password",
|
5
7
|
"get_file_size",
|
@@ -28,9 +30,7 @@ from ramifice.utils.constants import REGEX
|
|
28
30
|
|
29
31
|
def is_password(password: str | None) -> bool:
|
30
32
|
"""Validate Password."""
|
31
|
-
|
32
|
-
return False
|
33
|
-
return True
|
33
|
+
return REGEX["password"].match(str(password)) is not None
|
34
34
|
|
35
35
|
|
36
36
|
async def get_file_size(path: str) -> int:
|
@@ -73,9 +73,7 @@ async def is_email(email: str | None) -> bool:
|
|
73
73
|
def is_url(url: str | None) -> bool:
|
74
74
|
"""Validate URL address."""
|
75
75
|
result = urlparse(str(url))
|
76
|
-
|
77
|
-
return False
|
78
|
-
return True
|
76
|
+
return not (not result.scheme or not result.netloc)
|
79
77
|
|
80
78
|
|
81
79
|
def is_ip(address: str | int | None) -> bool:
|
@@ -89,9 +87,7 @@ def is_ip(address: str | int | None) -> bool:
|
|
89
87
|
|
90
88
|
def is_color(color_code: str | None) -> bool:
|
91
89
|
"""Validate Color code."""
|
92
|
-
|
93
|
-
return False
|
94
|
-
return True
|
90
|
+
return REGEX["color_code"].match(str(color_code)) is not None
|
95
91
|
|
96
92
|
|
97
93
|
def is_phone(number: str | None) -> bool:
|
ramifice/utils/translations.py
CHANGED
@@ -22,6 +22,8 @@ sl | sq | sr | sr_latn | sv | th | tk | tr | tt | ug | uk | vi |
|
|
22
22
|
zh | zh_cn
|
23
23
|
"""
|
24
24
|
|
25
|
+
from __future__ import annotations
|
26
|
+
|
25
27
|
__all__ = (
|
26
28
|
"DEFAULT_LOCALE",
|
27
29
|
"CURRENT_LOCALE",
|
@@ -56,7 +58,7 @@ def add_languages(
|
|
56
58
|
languages: frozenset[str],
|
57
59
|
) -> None:
|
58
60
|
"""Add languages."""
|
59
|
-
global DEFAULT_LOCALE, LANGUAGES
|
61
|
+
global DEFAULT_LOCALE, LANGUAGES # noqa: PLW0603
|
60
62
|
if default_locale not in languages:
|
61
63
|
msg = "DEFAULT_LOCALE is not included in the LANGUAGES!"
|
62
64
|
logger.critical(msg)
|
@@ -155,7 +157,7 @@ def change_locale(lang_code: str) -> None:
|
|
155
157
|
Returns:
|
156
158
|
Object `None`.
|
157
159
|
"""
|
158
|
-
global CURRENT_LOCALE, _, gettext, ngettext
|
160
|
+
global CURRENT_LOCALE, _, gettext, ngettext # noqa: PLW0603
|
159
161
|
if lang_code != CURRENT_LOCALE:
|
160
162
|
CURRENT_LOCALE = lang_code if lang_code in LANGUAGES else DEFAULT_LOCALE
|
161
163
|
_ = get_ramifice_translator(CURRENT_LOCALE).gettext
|
ramifice/utils/unit.py
CHANGED
@@ -0,0 +1,83 @@
|
|
1
|
+
ramifice/__init__.py,sha256=VWqmauH79bM0bPlbHJURZKwcOHJSEf97tpHpz5l7A8c,1622
|
2
|
+
ramifice/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
|
+
ramifice/commons/__init__.py,sha256=RR_cVDF0H8xa56q2PXGKUSmYOPF-AUNKRY9u7DHD_KU,583
|
4
|
+
ramifice/commons/general.py,sha256=zaWBzSLEaUC6Jl3uXwVKlteaGmh1Y3m1TKbRQ9YpNw0,5471
|
5
|
+
ramifice/commons/indexes.py,sha256=Y8v1L3_upl771pJG7mQkSJNwP6slGEakVvj2fZ4zloE,3655
|
6
|
+
ramifice/commons/many.py,sha256=paHeSx1aVg08C52h6b3vb-jNXqm0_zgRqxViUvqTmVo,9416
|
7
|
+
ramifice/commons/one.py,sha256=hv3gj739YKF3UWtS2Q-TFqgAkZs2du0HxMuQ0LIArJc,6993
|
8
|
+
ramifice/commons/tools.py,sha256=MCTPtOl14sIUBkp51f-nqTFVsD0iUj51G40rEFSzU20,2477
|
9
|
+
ramifice/commons/unit_manager.py,sha256=V9i3O-Z3eZKVpMUv2a_8FV0VBeHpJZWqeLRGJmtAEsg,4983
|
10
|
+
ramifice/fields/__init__.py,sha256=e1TlGRLYMo-97CNUona6EFR0svR--Wp77d_LsYhaBoo,2398
|
11
|
+
ramifice/fields/bool_field.py,sha256=efDgdK7p-ch2IHdFUuBBlW4JuogUOCD17sirqW_OBWc,2807
|
12
|
+
ramifice/fields/choice_float_dyn_field.py,sha256=nBteSr_Twtr75OKZ8H-t2hd_9dqNHq_C5bM6ZzTYCgg,3950
|
13
|
+
ramifice/fields/choice_float_field.py,sha256=ku3Jjc2lM1W2oY9KOGWbDWow6H_dcBDJh2RfR6pjpEg,4849
|
14
|
+
ramifice/fields/choice_float_mult_dyn_field.py,sha256=BHs6zuW97YWg7leweCNXhebVjnQbl0vb0mnsKbK4T_s,4017
|
15
|
+
ramifice/fields/choice_float_mult_field.py,sha256=UhdPo_XXaRA_543PtXEUTA29YYrx8poKbjb0FhSALTA,5159
|
16
|
+
ramifice/fields/choice_int_dyn_field.py,sha256=_M7SGv4-LxGF3pd8u0II-jwfxAs8_8qZTe33T6Kbe8Y,3942
|
17
|
+
ramifice/fields/choice_int_field.py,sha256=RJifV0x8-iVh9SRwkj3PSGdf1ndSjmettqfpgPrmuKA,4835
|
18
|
+
ramifice/fields/choice_int_mult_dyn_field.py,sha256=TbUNZPvEp6mYRGD1XL7xFX3Ea6VINdl1cxHvj85eWno,4011
|
19
|
+
ramifice/fields/choice_int_mult_field.py,sha256=UCoMBznMA0rdvVq1fRkiFK6Q4RyKqtKeGnWyQjDS8-8,5151
|
20
|
+
ramifice/fields/choice_text_dyn_field.py,sha256=uI5hdwntVFZMbgHys3iO0YlGATIKXLfPDdio3FL2Dv4,3933
|
21
|
+
ramifice/fields/choice_text_field.py,sha256=H7ckqvnRINqTNrEthRx00wHaWatCorjJlT8VuHOD-Qs,4995
|
22
|
+
ramifice/fields/choice_text_mult_dyn_field.py,sha256=k8pCriKlMDR2nwxStr-1H-_SP5CYofsXdw51onlW9xA,4002
|
23
|
+
ramifice/fields/choice_text_mult_field.py,sha256=QGtKbr9IM0TlDswdkpKbt7PSAdCI6J44qmuhzQJV36U,5142
|
24
|
+
ramifice/fields/color_field.py,sha256=eTWSqin6ZM1V6U9PRfEphuCdfNajFiT4nInorelWLqU,4487
|
25
|
+
ramifice/fields/date_field.py,sha256=p-pMTDpIWrK0SqUk8FVnribIEmQk37modEveytOJuKA,6255
|
26
|
+
ramifice/fields/date_time_field.py,sha256=UZLl8zvwLfytJDmrTIhpbMJVHHjg6AU_p9U0O1E0f34,6312
|
27
|
+
ramifice/fields/email_field.py,sha256=7T1ks9Plusr-fon1wa9rO7S6_Zj7J9ZmwE504UFDHx8,4427
|
28
|
+
ramifice/fields/file_field.py,sha256=G510AuGjtMerHjpUpIV6tYRShTBkNzWcI3hD_vqAGyQ,9532
|
29
|
+
ramifice/fields/float_field.py,sha256=XtyaTgAFaTem4Hv7c0G_l6LIrspraijqkEqE8G7gEE0,5834
|
30
|
+
ramifice/fields/id_field.py,sha256=pNDQRmqcsDtWVC2zW310T_3tqxpM-d3sd1elwxL14a8,4795
|
31
|
+
ramifice/fields/image_field.py,sha256=LZqDXgRLXljNUqqMSpvfPJwwiNnLB2PpSQ8F8SBNg_g,12904
|
32
|
+
ramifice/fields/integer_field.py,sha256=kZohnGFJb9YFiJ3Fl-YnPQJW1YBCAEzyavY23hl9jxc,5808
|
33
|
+
ramifice/fields/ip_field.py,sha256=FGf2Bnz87k9HRDY3SZ92OKdRb_8Z34iVq_UnP-fb7ew,4331
|
34
|
+
ramifice/fields/password_field.py,sha256=aBY8XaRCTqHGi7LfCfImoaUZuPrXmvDwquGjEkCda0A,3958
|
35
|
+
ramifice/fields/phone_field.py,sha256=mYjDkUvKStc3bJ9co5HZ2j1wzW-V8vVCkGBf1NbREwA,4622
|
36
|
+
ramifice/fields/slug_field.py,sha256=D66m1nB-gFcgYPJiFU0jBaP999RC5ng6nejpa0gV_gA,3590
|
37
|
+
ramifice/fields/text_field.py,sha256=mul51E2ZkTWDC6_b7DtF9FjA-aYuB7kxK3SaHpqmNF8,5335
|
38
|
+
ramifice/fields/url_field.py,sha256=JhbVSBpQqqoJtZX8SVEiGSNVXXi0KoWUgiQVXtNhpcc,4330
|
39
|
+
ramifice/fields/general/__init__.py,sha256=JzgIDseNQLB_IDwY9-JSiT_bONxvhJmbKl5PhQzTnpE,40
|
40
|
+
ramifice/fields/general/choice_group.py,sha256=_0f9NDACGzvxCR3rN-DGxqRGz1wjjOqracvgFzhMY5s,934
|
41
|
+
ramifice/fields/general/date_group.py,sha256=8-YqqYCjjRAmi6RkuzTxzGmxeO7UNVTuYfjFAMnXIR4,1223
|
42
|
+
ramifice/fields/general/field.py,sha256=WgfywZqsjqd6NNJ0zMS0FUXNbN2Kgvv3bJqpOxWKM8g,1398
|
43
|
+
ramifice/fields/general/file_group.py,sha256=La0gJ2PZE09CljRLMzEM1WjtAkEGXVQFiBxGpk9Jq30,1024
|
44
|
+
ramifice/fields/general/number_group.py,sha256=67BTG6GiteTVQEpiE4PXXXZP8mGhUtEqr436-iZG3ys,791
|
45
|
+
ramifice/fields/general/text_group.py,sha256=X2EkgApy_IFi48oP8YNr2SobbZlf0wi0VtyAjpaJfC0,1115
|
46
|
+
ramifice/models/__init__.py,sha256=I4p5Y_oHG9ZLZ3vR44PpCGGvB-C2W7fSQPb5qJsm-VQ,178
|
47
|
+
ramifice/models/decorator.py,sha256=9A_xEeyM0UEVeDMC8MDzvroort3dzNHxgIGWpVgQEts,6393
|
48
|
+
ramifice/models/model.py,sha256=fve4_gcv_aFMbs0yeoDuAh56JYrAtKLJZdRAX1Bhm4Y,7663
|
49
|
+
ramifice/paladins/__init__.py,sha256=ViMABU9Mnh3cL7gl8JQ8ngF4SzydrfskC8xf4MBDPso,1555
|
50
|
+
ramifice/paladins/add_valid.py,sha256=G5i2-bO0EraPyWjffVxhhmRxAse6u06iNj74X8N_RB8,477
|
51
|
+
ramifice/paladins/check.py,sha256=AVSh1v-7V_411gbiPnY4iEOu9UKq4jylR1lvyibt9tY,6946
|
52
|
+
ramifice/paladins/delete.py,sha256=NGNM-thGNaTNBq66v3opm62Cm8BdNh8q0WjIStF45M4,3728
|
53
|
+
ramifice/paladins/hooks.py,sha256=yWDmbXGU1XDHXONtUVqRHvinn4TTRqRj7jfuQieW_Rk,1095
|
54
|
+
ramifice/paladins/indexing.py,sha256=DFql_QJ8LUEK0i1K-7r7VJrTGLxHAZ2UkWvIVhg-e3g,401
|
55
|
+
ramifice/paladins/password.py,sha256=hIFRqdujn6XsScpbp6Y0pZUVMH8pk0a1zVuLWVb0j84,3355
|
56
|
+
ramifice/paladins/refrash.py,sha256=wTuwv6lXUzV29SUwiB-XqUNrvQlMmKDkK8sKpFHilaE,1259
|
57
|
+
ramifice/paladins/save.py,sha256=UfBz8i6RspNmt9YNxXMAypA4PLVPRwGDO92UsTlya3w,3712
|
58
|
+
ramifice/paladins/tools.py,sha256=6lRI9ISTC-6RJrJmwQzG6lUN3xt3UE1aPFDW5PzYr_o,2956
|
59
|
+
ramifice/paladins/validation.py,sha256=1g727ZO7E3Gj2k7qiVBMjOjdol2YGlRjxKcOsu6IPpE,1928
|
60
|
+
ramifice/paladins/groups/__init__.py,sha256=MmScWKa2cfEfowr2fUxH41VIVOkOpgz5ELTdJ8ez4Fc,996
|
61
|
+
ramifice/paladins/groups/bool_group.py,sha256=yHdjC1MknQCQ-PssQRkxhQObE7U6XjlBTk40sa54a3M,879
|
62
|
+
ramifice/paladins/groups/choice_group.py,sha256=PRuxCkDrWtoCyEhCn-WTPjub7RfoWEdSHJRyza3Nsc8,1886
|
63
|
+
ramifice/paladins/groups/date_group.py,sha256=K6ViiwKGafaCFk3fXVnem6ElUgwZG3ECjHGzV5OKLSQ,3846
|
64
|
+
ramifice/paladins/groups/file_group.py,sha256=EDXua0Dv44S4xlGlpKmF2oC_BUfY3MWKYz4DZuc0EFI,3028
|
65
|
+
ramifice/paladins/groups/id_group.py,sha256=PnWfH1LkpduMxU9Qpm6XhC1zeKb_KQNgGAFSASQm9q0,1359
|
66
|
+
ramifice/paladins/groups/img_group.py,sha256=3uTOLd-RqNBa3U3shxGSMVhkuKTLtdqzX3lktnzSJCY,6182
|
67
|
+
ramifice/paladins/groups/num_group.py,sha256=Faqsnf77CF0OZNcmhRhXh4eqEg5LxEC2DK6PKGe3XBs,2401
|
68
|
+
ramifice/paladins/groups/pass_group.py,sha256=4NH303GixKbuU7EUdPRPmxrfrhN42oVn7Co0FtELbYg,1964
|
69
|
+
ramifice/paladins/groups/slug_group.py,sha256=zq1C-4XvL7vnM12FhzXYgDhgAgydrU1PlG70pP0pQnA,2543
|
70
|
+
ramifice/paladins/groups/text_group.py,sha256=Qu1n-G86Gxk8oK2_16lA21g-QksTWLcmSFCmOB0xgcY,4555
|
71
|
+
ramifice/utils/__init__.py,sha256=lAD90nw2VfGSuf0SLjOkeFScBPmc48XFvecueAfq73w,468
|
72
|
+
ramifice/utils/constants.py,sha256=a_sabPso9tgXnnG6fmWqNSb-3zyEGGS_lEXIqQU5nqQ,2835
|
73
|
+
ramifice/utils/errors.py,sha256=n2Fs7qZHP3w7t8Kyb1uRnNHLjuDhjD37iZe60-UM70s,2846
|
74
|
+
ramifice/utils/fixtures.py,sha256=nkrnkIEPeuswouY-cuve7uBh8-kc_J9T167UI_ZZcOQ,3496
|
75
|
+
ramifice/utils/migration.py,sha256=0yL9LwWqTentY_G57QLqQ1lOxzxqBPUvrpQNEyAjlyA,11422
|
76
|
+
ramifice/utils/mixins.py,sha256=5G3x8hK3igM7JBgCiCnVDdb_0K_D1gV1tw0QKpDlm-A,1161
|
77
|
+
ramifice/utils/tools.py,sha256=WOazw24pvL96-0yNBy7YRGErN3vAQ4F6GS9TLvWFqrs,2747
|
78
|
+
ramifice/utils/translations.py,sha256=YItvCWv-13FS2x8VYsAOH-Nx_qQOitOX7-bRGX3mc3A,4718
|
79
|
+
ramifice/utils/unit.py,sha256=zHfvkyEU4sxHOc-QMuntEcvyfQqH75AK1zx8E25kM9Y,2535
|
80
|
+
ramifice-0.8.33.dist-info/METADATA,sha256=Darwww-mGko50sGv1RaBfgNXtwYcqO9hExOrbct4kfg,21094
|
81
|
+
ramifice-0.8.33.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
82
|
+
ramifice-0.8.33.dist-info/licenses/LICENSE,sha256=LrEL0aTZx90HDwFUQCJutORiDjJL9AnuVvCtspXIqt4,1095
|
83
|
+
ramifice-0.8.33.dist-info/RECORD,,
|