amsdal 0.3.3__cp311-cp311-macosx_10_9_universal2.whl → 0.5.29__cp311-cp311-macosx_10_9_universal2.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.
- amsdal/Third-Party Materials - AMSDAL Dependencies - License Notices.md +56 -2
- amsdal/__about__.py +1 -1
- amsdal/__init__.py +20 -0
- amsdal/__init__.pyi +9 -0
- amsdal/__migrations__/0000_initial.py +23 -190
- amsdal/__migrations__/0001_create_class_file.py +61 -0
- amsdal/__migrations__/0002_create_class_file.py +109 -0
- amsdal/__migrations__/0003_update_class_file.py +91 -0
- amsdal/__migrations__/0004_update_class_file.py +45 -0
- amsdal/cloud/__init__.cpython-311-darwin.so +0 -0
- amsdal/cloud/client.cpython-311-darwin.so +0 -0
- amsdal/cloud/constants.cpython-311-darwin.so +0 -0
- amsdal/cloud/enums.cpython-311-darwin.so +0 -0
- amsdal/cloud/models/__init__.cpython-311-darwin.so +0 -0
- amsdal/cloud/models/base.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/__init__.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/__init__.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/add_allowlist_ip.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/add_basic_auth.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/add_dependency.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/add_secret.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/base.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/create_deploy.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/create_env.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/create_session.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/delete_allowlist_ip.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/delete_basic_auth.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/delete_dependency.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/delete_env.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/delete_secret.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/destroy_deploy.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/expose_db.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/get_basic_auth_credentials.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/get_monitoring_info.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/list_dependencies.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/list_deploys.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/list_envs.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/list_secrets.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/manager.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/signup_action.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/actions/update_deploy.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/auth/__init__.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/auth/base.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/auth/credentials.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/auth/credentials.pyi +0 -1
- amsdal/cloud/services/auth/manager.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/auth/signup_service.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/auth/token.cpython-311-darwin.so +0 -0
- amsdal/cloud/services/auth/token.pyi +0 -1
- amsdal/configs/main.py +40 -20
- amsdal/configs/main.pyi +19 -18
- amsdal/contrib/__init__.cpython-311-darwin.so +0 -0
- amsdal/contrib/auth/errors.py +36 -0
- amsdal/contrib/auth/errors.pyi +12 -0
- amsdal/contrib/auth/fixtures/basic_permissions.json +64 -0
- amsdal/contrib/auth/lifecycle/consumer.py +13 -13
- amsdal/contrib/auth/lifecycle/consumer.pyi +3 -0
- amsdal/contrib/auth/migrations/0000_initial.py +69 -31
- amsdal/contrib/auth/migrations/0001_add_mfa_support.py +188 -0
- amsdal/contrib/auth/models/__init__.py +1 -0
- amsdal/contrib/auth/models/backup_code.py +85 -0
- amsdal/contrib/auth/models/email_mfa_device.py +108 -0
- amsdal/contrib/auth/models/login_session.py +235 -0
- amsdal/contrib/auth/models/mfa_device.py +86 -0
- amsdal/contrib/auth/models/permission.py +23 -0
- amsdal/contrib/auth/models/sms_device.py +113 -0
- amsdal/contrib/auth/models/totp_device.py +58 -0
- amsdal/contrib/auth/models/user.py +156 -0
- amsdal/contrib/auth/services/__init__.py +1 -0
- amsdal/contrib/auth/services/mfa_device_service.py +544 -0
- amsdal/contrib/auth/services/mfa_device_service.pyi +216 -0
- amsdal/contrib/auth/services/totp_service.py +358 -0
- amsdal/contrib/auth/services/totp_service.pyi +158 -0
- amsdal/contrib/auth/settings.py +8 -0
- amsdal/contrib/auth/settings.pyi +8 -0
- amsdal/contrib/auth/transactions/__init__.py +1 -0
- amsdal/contrib/auth/transactions/mfa_device_transactions.py +463 -0
- amsdal/contrib/auth/transactions/mfa_device_transactions.pyi +226 -0
- amsdal/contrib/auth/transactions/totp_transactions.py +206 -0
- amsdal/contrib/auth/transactions/totp_transactions.pyi +113 -0
- amsdal/contrib/auth/utils/__init__.py +0 -0
- amsdal/contrib/auth/utils/__init__.pyi +0 -0
- amsdal/contrib/auth/utils/mfa.py +257 -0
- amsdal/contrib/auth/utils/mfa.pyi +119 -0
- amsdal/contrib/frontend_configs/conversion/convert.py +85 -25
- amsdal/contrib/frontend_configs/conversion/convert.pyi +0 -1
- amsdal/contrib/frontend_configs/lifecycle/consumer.py +32 -13
- amsdal/contrib/frontend_configs/lifecycle/consumer.pyi +1 -1
- amsdal/contrib/frontend_configs/migrations/0000_initial.py +167 -195
- amsdal/contrib/frontend_configs/migrations/0001_update_frontend_control_config.py +245 -0
- amsdal/contrib/frontend_configs/migrations/0002_add_button_and_invoke_actions.py +352 -0
- amsdal/contrib/frontend_configs/migrations/0003_create_class_frontendconfigdashboardelement.py +145 -0
- amsdal/contrib/frontend_configs/models/__init__.py +0 -0
- amsdal/contrib/frontend_configs/models/frontend_activator_config.py +22 -0
- amsdal/contrib/frontend_configs/models/frontend_config_async_validator.py +11 -0
- amsdal/contrib/frontend_configs/models/frontend_config_control_action.py +110 -0
- amsdal/contrib/frontend_configs/models/frontend_config_dashboard.py +51 -0
- amsdal/contrib/frontend_configs/models/frontend_config_group_validator.py +21 -0
- amsdal/contrib/frontend_configs/models/frontend_config_option.py +12 -0
- amsdal/contrib/frontend_configs/models/frontend_config_skip_none_base.py +17 -0
- amsdal/contrib/frontend_configs/models/frontend_config_slider_option.py +13 -0
- amsdal/contrib/frontend_configs/models/frontend_config_text_mask.py +14 -0
- amsdal/contrib/frontend_configs/models/frontend_config_validator.py +28 -0
- amsdal/contrib/frontend_configs/models/frontend_control_config.py +110 -0
- amsdal/contrib/frontend_configs/models/frontend_model_config.py +14 -0
- amsdal/errors.py +0 -3
- amsdal/errors.pyi +0 -1
- amsdal/fixtures/__init__.cpython-311-darwin.so +0 -0
- amsdal/fixtures/manager.cpython-311-darwin.so +0 -0
- amsdal/fixtures/manager.pyi +73 -123
- amsdal/fixtures/utils.cpython-311-darwin.so +0 -0
- amsdal/fixtures/utils.pyi +9 -0
- amsdal/manager.cpython-311-darwin.so +0 -0
- amsdal/manager.pyi +9 -96
- amsdal/mixins/__init__.cpython-311-darwin.so +0 -0
- amsdal/mixins/class_versions_mixin.cpython-311-darwin.so +0 -0
- amsdal/models/__init__.py +19 -0
- amsdal/models/core/__init__.py +0 -0
- amsdal/models/core/class_object.py +38 -0
- amsdal/models/core/class_property.py +26 -0
- amsdal/models/core/file.py +243 -0
- amsdal/models/core/fixture.py +25 -0
- amsdal/models/core/option.py +11 -0
- amsdal/models/core/storage_metadata.py +15 -0
- amsdal/models/core/validator.py +12 -0
- amsdal/models/mixins.py +31 -0
- amsdal/models/types/__init__.py +0 -0
- amsdal/models/types/object.py +26 -0
- amsdal/queryset/__init__.py +21 -0
- amsdal/queryset/__init__.pyi +6 -0
- amsdal/schemas/core/class_object/model.json +20 -0
- amsdal/schemas/core/class_property/model.json +19 -0
- amsdal/schemas/core/file/properties/from_file.py +1 -1
- amsdal/schemas/core/file/properties/validate_data.py +3 -4
- amsdal/schemas/core/storage_metadata/model.json +52 -0
- amsdal/schemas/interfaces.py +25 -0
- amsdal/schemas/interfaces.pyi +20 -0
- amsdal/schemas/manager.cpython-311-darwin.so +0 -0
- amsdal/schemas/manager.py +0 -116
- amsdal/schemas/manager.pyi +0 -65
- amsdal/schemas/mixins/__init__.py +0 -0
- amsdal/schemas/mixins/__init__.pyi +0 -0
- amsdal/schemas/mixins/check_dependencies_mixin.py +130 -0
- amsdal/schemas/mixins/check_dependencies_mixin.pyi +45 -0
- amsdal/schemas/mixins/verify_schemas_mixin.py +96 -0
- amsdal/schemas/mixins/verify_schemas_mixin.pyi +33 -0
- amsdal/schemas/repository.py +84 -0
- amsdal/schemas/repository.pyi +22 -0
- amsdal/schemas/utils.py +16 -0
- amsdal/schemas/utils.pyi +10 -0
- amsdal/services/__init__.py +11 -0
- amsdal/services/__init__.pyi +4 -0
- amsdal/services/external_connections.py +262 -0
- amsdal/services/external_connections.pyi +190 -0
- amsdal/services/external_model_generator.py +350 -0
- amsdal/services/external_model_generator.pyi +134 -0
- amsdal/services/transaction_execution.cpython-311-darwin.so +0 -0
- amsdal/services/transaction_execution.pyi +2 -1
- amsdal/storages/__init__.py +20 -0
- amsdal/storages/__init__.pyi +8 -0
- amsdal/storages/file_system.py +214 -0
- amsdal/storages/file_system.pyi +36 -0
- amsdal/transactions/__init__.py +13 -0
- amsdal/transactions/__init__.pyi +4 -0
- amsdal/utils/rollback/__init__.py +99 -54
- amsdal/utils/rollback/__init__.pyi +6 -0
- amsdal/utils/tests/enums.py +0 -2
- amsdal/utils/tests/helpers.py +253 -231
- amsdal/utils/tests/migrations.py +157 -0
- {amsdal-0.3.3.dist-info → amsdal-0.5.29.dist-info}/METADATA +17 -10
- amsdal-0.5.29.dist-info/RECORD +276 -0
- {amsdal-0.3.3.dist-info → amsdal-0.5.29.dist-info}/WHEEL +1 -1
- amsdal/__migrations__/0001_datetime_type.py +0 -18
- amsdal/__migrations__/0002_fixture_order.py +0 -40
- amsdal/__migrations__/0003_schema_type_in_class_meta.py +0 -56
- amsdal/contrib/auth/models/login_session/hooks/pre_init.py +0 -68
- amsdal/contrib/auth/models/login_session/model.json +0 -23
- amsdal/contrib/auth/models/login_session/modifiers/display_name.py +0 -11
- amsdal/contrib/auth/models/permission/fixtures/basic_permissions.json +0 -62
- amsdal/contrib/auth/models/permission/model.json +0 -18
- amsdal/contrib/auth/models/permission/modifiers/display_name.py +0 -11
- amsdal/contrib/auth/models/user/hooks/post_init.py +0 -76
- amsdal/contrib/auth/models/user/hooks/pre_create.py +0 -8
- amsdal/contrib/auth/models/user/model.json +0 -25
- amsdal/contrib/auth/models/user/modifiers/display_name.py +0 -19
- amsdal/contrib/frontend_configs/models/frontend_activator_config/model.json +0 -11
- amsdal/contrib/frontend_configs/models/frontend_config_async_validator/model.json +0 -11
- amsdal/contrib/frontend_configs/models/frontend_config_group_validator/model.json +0 -52
- amsdal/contrib/frontend_configs/models/frontend_config_option/model.json +0 -15
- amsdal/contrib/frontend_configs/models/frontend_config_skip_none_base/model.json +0 -6
- amsdal/contrib/frontend_configs/models/frontend_config_skip_none_base/properties/model_dump.py +0 -13
- amsdal/contrib/frontend_configs/models/frontend_config_slider_option/model.json +0 -19
- amsdal/contrib/frontend_configs/models/frontend_config_text_mask/model.json +0 -26
- amsdal/contrib/frontend_configs/models/frontend_config_validator/model.json +0 -41
- amsdal/contrib/frontend_configs/models/frontend_control_config/model.json +0 -250
- amsdal/contrib/frontend_configs/models/frontend_model_config/fixtures/permissions.json +0 -24
- amsdal/contrib/frontend_configs/models/frontend_model_config/model.json +0 -17
- amsdal/contrib/frontend_configs/models/frontent_config_control_action/model.json +0 -54
- amsdal/contrib/frontend_configs/models/frontent_config_control_action/properties/action_validate.py +0 -33
- amsdal/migration/__init__.cpython-311-darwin.so +0 -0
- amsdal/migration/base_migration_schemas.cpython-311-darwin.so +0 -0
- amsdal/migration/base_migration_schemas.pyi +0 -120
- amsdal/migration/data_classes.cpython-311-darwin.so +0 -0
- amsdal/migration/data_classes.pyi +0 -172
- amsdal/migration/executors/__init__.cpython-311-darwin.so +0 -0
- amsdal/migration/executors/base.cpython-311-darwin.so +0 -0
- amsdal/migration/executors/base.pyi +0 -118
- amsdal/migration/executors/default_executor.cpython-311-darwin.so +0 -0
- amsdal/migration/executors/default_executor.pyi +0 -184
- amsdal/migration/executors/state_executor.cpython-311-darwin.so +0 -0
- amsdal/migration/executors/state_executor.pyi +0 -78
- amsdal/migration/file_migration_executor.cpython-311-darwin.so +0 -0
- amsdal/migration/file_migration_executor.pyi +0 -68
- amsdal/migration/file_migration_generator.cpython-311-darwin.so +0 -0
- amsdal/migration/file_migration_generator.pyi +0 -139
- amsdal/migration/file_migration_store.cpython-311-darwin.so +0 -0
- amsdal/migration/file_migration_store.pyi +0 -61
- amsdal/migration/file_migration_writer.cpython-311-darwin.so +0 -0
- amsdal/migration/file_migration_writer.pyi +0 -73
- amsdal/migration/migrations.cpython-311-darwin.so +0 -0
- amsdal/migration/migrations.pyi +0 -166
- amsdal/migration/migrations_loader.cpython-311-darwin.so +0 -0
- amsdal/migration/migrations_loader.pyi +0 -32
- amsdal/migration/schemas_loaders.cpython-311-darwin.so +0 -0
- amsdal/migration/schemas_loaders.pyi +0 -37
- amsdal/migration/templates/data_migration.tmpl +0 -18
- amsdal/migration/templates/dict_validator.tmpl +0 -4
- amsdal/migration/templates/migration.tmpl +0 -6
- amsdal/migration/templates/model_class.tmpl +0 -8
- amsdal/migration/templates/model_class_layout.tmpl +0 -24
- amsdal/migration/templates/options_validator.tmpl +0 -4
- amsdal/migration/utils.cpython-311-darwin.so +0 -0
- amsdal/migration/utils.pyi +0 -58
- amsdal/mixins/build_mixin.cpython-311-darwin.so +0 -0
- amsdal/mixins/build_mixin.pyi +0 -78
- amsdal/schemas/core/class_object_meta/model.json +0 -59
- amsdal/schemas/core/class_property_meta/model.json +0 -23
- amsdal/services/__init__.cpython-311-darwin.so +0 -0
- amsdal-0.3.3.dist-info/RECORD +0 -257
- amsdal-0.3.3.dist-info/licenses/LICENSE.txt +0 -107
- /amsdal/{migration → contrib/auth/services}/__init__.pyi +0 -0
- /amsdal/{migration/executors → contrib/auth/transactions}/__init__.pyi +0 -0
- {amsdal-0.3.3.dist-info → amsdal-0.5.29.dist-info/licenses}/LICENSE.txt +0 -0
- {amsdal-0.3.3.dist-info → amsdal-0.5.29.dist-info}/top_level.txt +0 -0
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
from datetime import datetime
|
|
2
|
-
from datetime import timedelta
|
|
3
|
-
from datetime import timezone
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
# import bcrypt
|
|
7
|
-
import jwt
|
|
8
|
-
|
|
9
|
-
# from amsdal_utils.models.enums import Versions
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def pre_init(self, *, is_new_object: bool, kwargs: dict[str, Any]) -> None: # type: ignore[no-untyped-def] # noqa: ARG001
|
|
13
|
-
"""
|
|
14
|
-
Pre-initializes a user object by validating email and password, and generating a JWT token.
|
|
15
|
-
|
|
16
|
-
This method checks if the object is new and validates the provided email and password.
|
|
17
|
-
If the email and password are valid, it generates a JWT token and adds it to the kwargs.
|
|
18
|
-
|
|
19
|
-
Args:
|
|
20
|
-
is_new_object (bool): Indicates if the object is new.
|
|
21
|
-
kwargs (dict[str, Any]): The keyword arguments containing user details.
|
|
22
|
-
|
|
23
|
-
Raises:
|
|
24
|
-
AuthenticationError: If the email or password is invalid.
|
|
25
|
-
"""
|
|
26
|
-
if not is_new_object or '_metadata' in kwargs:
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
from amsdal.contrib.auth.errors import AuthenticationError
|
|
30
|
-
from amsdal.contrib.auth.settings import auth_settings
|
|
31
|
-
|
|
32
|
-
email = kwargs.get('email', None)
|
|
33
|
-
password = kwargs.get('password', None)
|
|
34
|
-
|
|
35
|
-
if not email:
|
|
36
|
-
msg = "Email can't be empty"
|
|
37
|
-
raise AuthenticationError(msg)
|
|
38
|
-
|
|
39
|
-
if not password:
|
|
40
|
-
msg = "Password can't be empty"
|
|
41
|
-
raise AuthenticationError(msg)
|
|
42
|
-
|
|
43
|
-
lowercased_email = email.lower()
|
|
44
|
-
|
|
45
|
-
# from models.contrib.user import User # type: ignore[import-not-found]
|
|
46
|
-
|
|
47
|
-
# user = User.objects.filter(
|
|
48
|
-
# email=lowercased_email,
|
|
49
|
-
# _address__object_version=Versions.LATEST
|
|
50
|
-
# ).get_or_none().execute()
|
|
51
|
-
|
|
52
|
-
# if not user:
|
|
53
|
-
# msg = 'Invalid email / password'
|
|
54
|
-
# raise AuthenticationError(msg)
|
|
55
|
-
|
|
56
|
-
# if not bcrypt.checkpw(password.encode('utf-8') if isinstance(password, str) else password, user.password):
|
|
57
|
-
# msg = 'Invalid email / password'
|
|
58
|
-
# raise AuthenticationError(msg)
|
|
59
|
-
|
|
60
|
-
kwargs['password'] = 'validated'
|
|
61
|
-
expiration_time = datetime.now(tz=timezone.utc) + timedelta(seconds=auth_settings.AUTH_TOKEN_EXPIRATION)
|
|
62
|
-
token = jwt.encode(
|
|
63
|
-
{'email': lowercased_email, 'exp': expiration_time},
|
|
64
|
-
key=auth_settings.AUTH_JWT_KEY, # type: ignore[arg-type]
|
|
65
|
-
algorithm='HS256',
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
kwargs['token'] = token
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "LoginSession",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"properties": {
|
|
5
|
-
"email": {
|
|
6
|
-
"title": "Email",
|
|
7
|
-
"type": "string"
|
|
8
|
-
},
|
|
9
|
-
"password": {
|
|
10
|
-
"title": "Password (hash)",
|
|
11
|
-
"type": "string"
|
|
12
|
-
},
|
|
13
|
-
"token": {
|
|
14
|
-
"title": "Token",
|
|
15
|
-
"type": "string",
|
|
16
|
-
"mark_as_read_only": true
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
"required": [
|
|
20
|
-
"email",
|
|
21
|
-
"password"
|
|
22
|
-
]
|
|
23
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
@property # type: ignore[misc]
|
|
2
|
-
def display_name(self) -> str: # type: ignore[no-untyped-def]
|
|
3
|
-
"""
|
|
4
|
-
Returns the display name of the user.
|
|
5
|
-
|
|
6
|
-
This method returns the email of the user as their display name.
|
|
7
|
-
|
|
8
|
-
Returns:
|
|
9
|
-
str: The email of the user.
|
|
10
|
-
"""
|
|
11
|
-
return self.email
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"external_id": "user_delete",
|
|
4
|
-
"model": "User",
|
|
5
|
-
"action": "delete"
|
|
6
|
-
},
|
|
7
|
-
{
|
|
8
|
-
"external_id": "user_read",
|
|
9
|
-
"model": "User",
|
|
10
|
-
"action": "read"
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"external_id": "user_update",
|
|
14
|
-
"model": "User",
|
|
15
|
-
"action": "update"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"external_id": "user_all_actions",
|
|
19
|
-
"model": "User",
|
|
20
|
-
"action": "*"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"external_id": "all_models_all_actions",
|
|
24
|
-
"model": "*",
|
|
25
|
-
"action": "*"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"external_id": "login_session_delete",
|
|
29
|
-
"model": "LoginSession",
|
|
30
|
-
"action": "delete"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"external_id": "login_session_read",
|
|
34
|
-
"model": "LoginSession",
|
|
35
|
-
"action": "read"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"external_id": "login_session_update",
|
|
39
|
-
"model": "LoginSession",
|
|
40
|
-
"action": "update"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"external_id": "permission_delete",
|
|
44
|
-
"model": "Permission",
|
|
45
|
-
"action": "delete"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"external_id": "permission_read",
|
|
49
|
-
"model": "Permission",
|
|
50
|
-
"action": "read"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"external_id": "permission_update",
|
|
54
|
-
"model": "Permission",
|
|
55
|
-
"action": "update"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"external_id": "permission_create",
|
|
59
|
-
"model": "Permission",
|
|
60
|
-
"action": "create"
|
|
61
|
-
}
|
|
62
|
-
]
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
@property # type: ignore[misc]
|
|
2
|
-
def display_name(self) -> str: # type: ignore[no-untyped-def]
|
|
3
|
-
"""
|
|
4
|
-
Returns the display name of the user.
|
|
5
|
-
|
|
6
|
-
This method returns a formatted string combining the model and action of the user.
|
|
7
|
-
|
|
8
|
-
Returns:
|
|
9
|
-
str: The formatted display name in the format 'model:action'.
|
|
10
|
-
"""
|
|
11
|
-
return f'{self.model}:{self.action}'
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def post_init(self, *, is_new_object: bool, kwargs: dict[str, Any]) -> None: # type: ignore[no-untyped-def]
|
|
5
|
-
"""
|
|
6
|
-
Post-initializes a user object by validating email and password, and hashing the password.
|
|
7
|
-
|
|
8
|
-
This method checks if the email and password are provided and valid. If the object is new,
|
|
9
|
-
it hashes the password and sets the object ID to the lowercased email.
|
|
10
|
-
|
|
11
|
-
Args:
|
|
12
|
-
is_new_object (bool): Indicates if the object is new.
|
|
13
|
-
kwargs (dict[str, Any]): The keyword arguments containing user details.
|
|
14
|
-
|
|
15
|
-
Raises:
|
|
16
|
-
UserCreationError: If the email or password is invalid.
|
|
17
|
-
"""
|
|
18
|
-
import bcrypt
|
|
19
|
-
|
|
20
|
-
from amsdal.contrib.auth.errors import UserCreationError
|
|
21
|
-
|
|
22
|
-
email = kwargs.get('email', None)
|
|
23
|
-
password = kwargs.get('password', None)
|
|
24
|
-
|
|
25
|
-
if email is None or email == '':
|
|
26
|
-
msg = "Email can't be empty"
|
|
27
|
-
raise UserCreationError(msg)
|
|
28
|
-
|
|
29
|
-
if password is None or password == '':
|
|
30
|
-
msg = "Password can't be empty"
|
|
31
|
-
raise UserCreationError(msg)
|
|
32
|
-
|
|
33
|
-
kwargs['email'] = email.lower()
|
|
34
|
-
|
|
35
|
-
if is_new_object and '_metadata' not in kwargs:
|
|
36
|
-
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
|
|
37
|
-
self.password = hashed_password
|
|
38
|
-
self._object_id = email.lower()
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def pre_update(self) -> None: # type: ignore[no-untyped-def]
|
|
42
|
-
import bcrypt
|
|
43
|
-
|
|
44
|
-
original_object = self.refetch_from_db()
|
|
45
|
-
|
|
46
|
-
password = self.password
|
|
47
|
-
|
|
48
|
-
if original_object.password and password is not None:
|
|
49
|
-
if isinstance(password, str):
|
|
50
|
-
password = password.encode('utf-8')
|
|
51
|
-
|
|
52
|
-
try:
|
|
53
|
-
if not bcrypt.checkpw(password, original_object.password):
|
|
54
|
-
self.password = password
|
|
55
|
-
except ValueError:
|
|
56
|
-
hashed_password = bcrypt.hashpw(password, bcrypt.gensalt())
|
|
57
|
-
self.password = hashed_password
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
async def apre_update(self) -> None: # type: ignore[no-untyped-def]
|
|
61
|
-
import bcrypt
|
|
62
|
-
|
|
63
|
-
original_object = await self.arefetch_from_db()
|
|
64
|
-
|
|
65
|
-
password = self.password
|
|
66
|
-
|
|
67
|
-
if original_object.password and password is not None:
|
|
68
|
-
if isinstance(password, str):
|
|
69
|
-
password = password.encode('utf-8')
|
|
70
|
-
|
|
71
|
-
try:
|
|
72
|
-
if not bcrypt.checkpw(password, original_object.password):
|
|
73
|
-
self.password = password
|
|
74
|
-
except ValueError:
|
|
75
|
-
hashed_password = bcrypt.hashpw(password, bcrypt.gensalt())
|
|
76
|
-
self.password = hashed_password
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "User",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"properties": {
|
|
5
|
-
"email": {
|
|
6
|
-
"title": "Email",
|
|
7
|
-
"type": "string"
|
|
8
|
-
},
|
|
9
|
-
"password": {
|
|
10
|
-
"title": "Password (hash)",
|
|
11
|
-
"type": "binary"
|
|
12
|
-
},
|
|
13
|
-
"permissions": {
|
|
14
|
-
"title": "Permissions",
|
|
15
|
-
"type": "array",
|
|
16
|
-
"items": {
|
|
17
|
-
"type": "Permission"
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"required": [
|
|
22
|
-
"email",
|
|
23
|
-
"password"
|
|
24
|
-
]
|
|
25
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
@property # type: ignore[misc]
|
|
2
|
-
def display_name(self) -> str: # type: ignore[no-untyped-def]
|
|
3
|
-
"""
|
|
4
|
-
Returns the display name of the user.
|
|
5
|
-
|
|
6
|
-
This method returns the email of the user as their display name.
|
|
7
|
-
|
|
8
|
-
Returns:
|
|
9
|
-
str: The email of the user.
|
|
10
|
-
"""
|
|
11
|
-
return self.email
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def __str__(self) -> str: # type: ignore[no-untyped-def] # noqa: N807
|
|
15
|
-
return f'User(email={self.email})'
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def __repr__(self) -> str: # type: ignore[no-untyped-def] # noqa: N807
|
|
19
|
-
return str(self)
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "FrontendConfigGroupValidator",
|
|
3
|
-
"type": "FrontendConfigSkipNoneBase",
|
|
4
|
-
"properties": {
|
|
5
|
-
"mainControl": {
|
|
6
|
-
"title": "Main Control",
|
|
7
|
-
"type": "string"
|
|
8
|
-
},
|
|
9
|
-
"dependentControls": {
|
|
10
|
-
"title": "Dependent Controls",
|
|
11
|
-
"type": "array",
|
|
12
|
-
"items": {
|
|
13
|
-
"type": "string"
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
"condition": {
|
|
17
|
-
"title": "Condition",
|
|
18
|
-
"type": "string",
|
|
19
|
-
"options": [
|
|
20
|
-
{
|
|
21
|
-
"key": "Less Than",
|
|
22
|
-
"value": "lt"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"key": "Less Than or Equal",
|
|
26
|
-
"value": "lte"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"key": "Greater Than",
|
|
30
|
-
"value": "gt"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"key": "Greater Than or Equal",
|
|
34
|
-
"value": "gte"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"key": "Equal",
|
|
38
|
-
"value": "eq"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"key": "Not Equal",
|
|
42
|
-
"value": "neq"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"key": "Exist",
|
|
46
|
-
"value": "exist"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
"meta_class": "TypeMeta"
|
|
52
|
-
}
|
amsdal/contrib/frontend_configs/models/frontend_config_skip_none_base/properties/model_dump.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def model_dump(self, **kwargs: Any) -> dict[str, Any]: # type: ignore[no-untyped-def] # noqa: ARG001
|
|
5
|
-
kwargs['exclude_none'] = True
|
|
6
|
-
|
|
7
|
-
return super().model_dump(**kwargs) # type: ignore[misc]
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def model_dump_json(self, **kwargs: Any) -> str: # type: ignore[no-untyped-def] # noqa: ARG001
|
|
11
|
-
kwargs['exclude_none'] = True
|
|
12
|
-
|
|
13
|
-
return super().model_dump_json(**kwargs) # type: ignore[misc]
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "FrontendConfigSliderOption",
|
|
3
|
-
"type": "FrontendConfigSkipNoneBase",
|
|
4
|
-
"properties": {
|
|
5
|
-
"min": {
|
|
6
|
-
"title": "Minimum",
|
|
7
|
-
"type": "number"
|
|
8
|
-
},
|
|
9
|
-
"max": {
|
|
10
|
-
"title": "Maximum",
|
|
11
|
-
"type": "number"
|
|
12
|
-
},
|
|
13
|
-
"range": {
|
|
14
|
-
"title": "Range",
|
|
15
|
-
"type": "boolean"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
"meta_class": "TypeMeta"
|
|
19
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "FrontendConfigTextMask",
|
|
3
|
-
"type": "FrontendConfigSkipNoneBase",
|
|
4
|
-
"properties": {
|
|
5
|
-
"mask_string": {
|
|
6
|
-
"title": "Mask String",
|
|
7
|
-
"type": "string"
|
|
8
|
-
},
|
|
9
|
-
"prefix": {
|
|
10
|
-
"title": "Prefix",
|
|
11
|
-
"type": "string"
|
|
12
|
-
},
|
|
13
|
-
"suffix": {
|
|
14
|
-
"title": "Suffix",
|
|
15
|
-
"type": "string"
|
|
16
|
-
},
|
|
17
|
-
"thousands_separator": {
|
|
18
|
-
"title": "Thousands Separator",
|
|
19
|
-
"type": "string"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"required": [
|
|
23
|
-
"mask_string"
|
|
24
|
-
],
|
|
25
|
-
"meta_class": "TypeMeta"
|
|
26
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "FrontendConfigValidator",
|
|
3
|
-
"type": "FrontendConfigGroupValidator",
|
|
4
|
-
"properties": {
|
|
5
|
-
"function": {
|
|
6
|
-
"title": "Function",
|
|
7
|
-
"type": "string",
|
|
8
|
-
"options": [
|
|
9
|
-
{
|
|
10
|
-
"key": "Minimum",
|
|
11
|
-
"value": "min"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"key": "Maximum",
|
|
15
|
-
"value": "max"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"key": "Minimum Length",
|
|
19
|
-
"value": "minLength"
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"key": "Maximum Length",
|
|
23
|
-
"value": "maxLength"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"key": "Required",
|
|
27
|
-
"value": "required"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"key": "Pattern",
|
|
31
|
-
"value": "pattern"
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
|
-
"value": {
|
|
36
|
-
"title": "Value",
|
|
37
|
-
"type": "string"
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
"meta_class": "TypeMeta"
|
|
41
|
-
}
|