ul-api-utils 7.10.5__tar.gz → 7.10.6__tar.gz
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.
Potentially problematic release.
This version of ul-api-utils might be problematic. Click here for more details.
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/PKG-INFO +1 -1
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/setup.py +1 -1
- ul-api-utils-7.10.6/ul_api_utils/utils/instance_checks.py +16 -0
- ul-api-utils-7.10.6/ul_api_utils/utils/memory_db/errors.py +8 -0
- ul-api-utils-7.10.6/ul_api_utils/utils/memory_db/repository.py +98 -0
- ul-api-utils-7.10.6/ul_api_utils/validators/__init__.py +0 -0
- ul-api-utils-7.10.6/ul_api_utils/validators/__tests__/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils.egg-info/PKG-INFO +1 -1
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils.egg-info/SOURCES.txt +5 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/LICENSE +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/README.md +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/conf.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/main.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/models/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/permissions.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/pure_flask_example.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/rate_limit_load.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/routes/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/routes/api_some.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/sockets/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/sockets/on_connect.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/sockets/on_disconnect.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/sockets/on_json.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/sockets/on_message.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/sockets/on_open.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/workers/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/example/workers/worker.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/setup.cfg +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/access/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_request.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_resource.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_resource_config.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_resource_error_handling.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_resource_fn_typing.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_resource_type.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_response.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_response_db.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_response_payload_alias.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/db_types.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/signature_check.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/cmd_enc_keys.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/cmd_gen_api_user_token.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/cmd_gen_new_api_user.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/cmd_generate_api_docs.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/cmd_start.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/cmd_worker_start.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/start/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/start/gunicorn.conf.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/commands/start/wsgi.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/conf/ul-debugger-main.js +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/conf/ul-debugger-ui.js +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/conf.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/const.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/debug/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/debug/debugger.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/debug/malloc.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/debug/stat.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/encrypt/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/errors.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/__tests__/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/__tests__/internal_api.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/__tests__/internal_api_content_type.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/internal_api.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/internal_api_check_context.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/internal_api_error.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/internal_api_response.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/main.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/__tests__/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/api_sdk.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/api_sdk_config.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/api_sdk_jwt.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/intermediate_state.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/worker_context.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/worker_sdk.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/worker_sdk_config.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/py.typed +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/caching.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/debugger_scripts.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/health_check/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/health_check/const.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/health_check/health_check.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/health_check/health_check_template.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/health_check/resource.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/not_implemented.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/permissions.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/rate_limitter.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/socketio.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/swagger.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/web_forms/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/web_forms/custom_fields/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/web_forms/custom_fields/custom_checkbox_select.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/web_forms/custom_widgets/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/web_forms/custom_widgets/custom_select_widget.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/web_forms/custom_widgets/custom_text_input_widget.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/web_forms/uni_form.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/sentry.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/__tests__/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/__tests__/api_path_version.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/__tests__/unwrap_typing.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/api_encoding.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/api_format.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/api_method.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/api_pagination.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/api_path_version.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/api_request_info.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/avro.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/broker_topics_message_count.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/cached_per_request.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/colors.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/constants.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/decode_base64.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/deprecated.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flags.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/conf.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/exceptions.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_models.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_specifier.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_three_specifier.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_version.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/utils/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/utils/input_type.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/utils/parameter_type.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/utils/replace_in_dict.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/utils/request_type.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/utils/schema_type.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/utils/security_type.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/imports.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/jinja/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/jinja/t_url_for.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/jinja/to_pretty_json.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/json_encoder.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/load_modules.py +0 -0
- {ul-api-utils-7.10.5/ul_api_utils/validators → ul-api-utils-7.10.6/ul_api_utils/utils/memory_db}/__init__.py +0 -0
- {ul-api-utils-7.10.5/ul_api_utils/validators → ul-api-utils-7.10.6/ul_api_utils/utils/memory_db}/__tests__/__init__.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/token_check.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/token_check_through_request.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/unwrap_typing.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/uuid_converter.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/validators/__tests__/test_custom_fields.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/validators/custom_fields.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/validators/validate_empty_object.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/validators/validate_uuid.py +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils.egg-info/dependency_links.txt +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils.egg-info/entry_points.txt +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils.egg-info/requires.txt +0 -0
- {ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def isinstance_namedtuple(obj: Any) -> bool:
|
|
5
|
+
namedtuple_unique_attributes = ('_asdict', '_fields')
|
|
6
|
+
is_tuple = isinstance(obj, tuple)
|
|
7
|
+
has_namedtuple_attributes = hasattr(obj, namedtuple_unique_attributes[0]) and hasattr(obj, namedtuple_unique_attributes[1])
|
|
8
|
+
return has_namedtuple_attributes and is_tuple
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def is_iterable(obj: Any) -> bool:
|
|
12
|
+
try:
|
|
13
|
+
iter(obj)
|
|
14
|
+
except TypeError:
|
|
15
|
+
return False
|
|
16
|
+
return True
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import decimal
|
|
2
|
+
import redis
|
|
3
|
+
import ormsgpack
|
|
4
|
+
import collections
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, ValidationError
|
|
7
|
+
from typing import Any, Type, overload, Iterator, KeysView, cast
|
|
8
|
+
|
|
9
|
+
from ul_api_utils.utils.instance_checks import isinstance_namedtuple
|
|
10
|
+
from ul_api_utils.utils.memory_db.errors import CompositeKeyError, UnsupportedParsingType
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
CompositeKeyT = tuple[str, Type[BaseModel]]
|
|
14
|
+
AnyKeyT = str | CompositeKeyT
|
|
15
|
+
AnyT = Any
|
|
16
|
+
RedisClientT = redis.StrictRedis | redis.Redis
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BaseMemoryDbRepository(collections.abc.MutableMapping[str, AnyT]):
|
|
20
|
+
def __init__(self, redis_client: RedisClientT) -> None:
|
|
21
|
+
self._db = redis_client
|
|
22
|
+
self._composite_key_max_length = 2
|
|
23
|
+
|
|
24
|
+
@property
|
|
25
|
+
def db(self) -> RedisClientT:
|
|
26
|
+
return self._db
|
|
27
|
+
|
|
28
|
+
def get(self, __key: str, *, parse_as_type: Type[BaseModel] | None = None, default: Any | None = None) -> AnyT | None: # type: ignore
|
|
29
|
+
try:
|
|
30
|
+
if parse_as_type is None:
|
|
31
|
+
return self[__key]
|
|
32
|
+
return self[__key, parse_as_type]
|
|
33
|
+
except KeyError:
|
|
34
|
+
return default
|
|
35
|
+
|
|
36
|
+
@overload
|
|
37
|
+
def __getitem__(self, key: str) -> AnyT:
|
|
38
|
+
...
|
|
39
|
+
|
|
40
|
+
@overload
|
|
41
|
+
def __getitem__(self, key: CompositeKeyT) -> AnyT:
|
|
42
|
+
...
|
|
43
|
+
|
|
44
|
+
def __getitem__(self, key: AnyKeyT) -> AnyT:
|
|
45
|
+
key_complex = isinstance(key, tuple)
|
|
46
|
+
|
|
47
|
+
if not key_complex:
|
|
48
|
+
single_key = cast(str, key)
|
|
49
|
+
return ormsgpack.unpackb(self._db[single_key])
|
|
50
|
+
|
|
51
|
+
composite_key = cast(CompositeKeyT, key)
|
|
52
|
+
|
|
53
|
+
if len(composite_key) > self._composite_key_max_length:
|
|
54
|
+
raise CompositeKeyError(f"Can't retrieve an item with {key=}. Composite key should have only two arguments.")
|
|
55
|
+
|
|
56
|
+
composite_key_name, _parse_as_type = composite_key
|
|
57
|
+
parsing_type_supported = issubclass(_parse_as_type, BaseModel) and _parse_as_type is not BaseModel
|
|
58
|
+
if not parsing_type_supported:
|
|
59
|
+
raise UnsupportedParsingType(f"Unsupported parsing type {_parse_as_type}.")
|
|
60
|
+
value = ormsgpack.unpackb(self._db[composite_key_name])
|
|
61
|
+
try:
|
|
62
|
+
model_fields = _parse_as_type.__fields_set__
|
|
63
|
+
if isinstance(value, list):
|
|
64
|
+
return [_parse_as_type.construct(_fields_set=model_fields, **obj) for obj in value]
|
|
65
|
+
return _parse_as_type.construct(_fields_set=model_fields, **value)
|
|
66
|
+
except ValidationError:
|
|
67
|
+
raise UnsupportedParsingType(f"Could not parse the value of key '{composite_key_name}' with type {_parse_as_type}") from None
|
|
68
|
+
|
|
69
|
+
def __setitem__(self, key: str, value: AnyT) -> None:
|
|
70
|
+
self._db[key] = ormsgpack.packb(value, option=ormsgpack.OPT_SERIALIZE_PYDANTIC, default=self._default_serializer)
|
|
71
|
+
|
|
72
|
+
def __delitem__(self, key: str) -> None:
|
|
73
|
+
del self._db[key]
|
|
74
|
+
|
|
75
|
+
def __iter__(self) -> Iterator[str]:
|
|
76
|
+
return iter(self.keys())
|
|
77
|
+
|
|
78
|
+
def __len__(self) -> int:
|
|
79
|
+
return len(self._db.keys())
|
|
80
|
+
|
|
81
|
+
def keys(self) -> KeysView[str]:
|
|
82
|
+
available_keys = [key.decode() for key in self._db.keys()]
|
|
83
|
+
return cast(KeysView[str], available_keys)
|
|
84
|
+
|
|
85
|
+
def clear(self) -> None:
|
|
86
|
+
self._db.flushdb()
|
|
87
|
+
|
|
88
|
+
@staticmethod
|
|
89
|
+
def _default_serializer(obj: Any) -> Any:
|
|
90
|
+
if isinstance_namedtuple(obj):
|
|
91
|
+
return obj._asdict()
|
|
92
|
+
if isinstance(obj, decimal.Decimal):
|
|
93
|
+
return str(obj)
|
|
94
|
+
if isinstance(obj, set):
|
|
95
|
+
return list(obj)
|
|
96
|
+
if isinstance(obj, frozenset):
|
|
97
|
+
return list(obj)
|
|
98
|
+
raise TypeError
|
|
File without changes
|
|
File without changes
|
|
@@ -117,6 +117,7 @@ ul_api_utils/utils/decode_base64.py
|
|
|
117
117
|
ul_api_utils/utils/deprecated.py
|
|
118
118
|
ul_api_utils/utils/flags.py
|
|
119
119
|
ul_api_utils/utils/imports.py
|
|
120
|
+
ul_api_utils/utils/instance_checks.py
|
|
120
121
|
ul_api_utils/utils/json_encoder.py
|
|
121
122
|
ul_api_utils/utils/load_modules.py
|
|
122
123
|
ul_api_utils/utils/token_check.py
|
|
@@ -144,6 +145,10 @@ ul_api_utils/utils/flask_swagger_generator/utils/security_type.py
|
|
|
144
145
|
ul_api_utils/utils/jinja/__init__.py
|
|
145
146
|
ul_api_utils/utils/jinja/t_url_for.py
|
|
146
147
|
ul_api_utils/utils/jinja/to_pretty_json.py
|
|
148
|
+
ul_api_utils/utils/memory_db/__init__.py
|
|
149
|
+
ul_api_utils/utils/memory_db/errors.py
|
|
150
|
+
ul_api_utils/utils/memory_db/repository.py
|
|
151
|
+
ul_api_utils/utils/memory_db/__tests__/__init__.py
|
|
147
152
|
ul_api_utils/validators/__init__.py
|
|
148
153
|
ul_api_utils/validators/custom_fields.py
|
|
149
154
|
ul_api_utils/validators/validate_empty_object.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_resource_config.py
RENAMED
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_resource_error_handling.py
RENAMED
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_resource_fn_typing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/api_resource/api_response_payload_alias.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py
RENAMED
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/__tests__/internal_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/internal_api_check_context.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/internal_api/internal_api_response.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/resources/health_check/health_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/__tests__/api_path_version.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/broker_topics_message_count.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/__init__.py
RENAMED
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/conf.py
RENAMED
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/flask_swagger_generator/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/utils/token_check_through_request.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/validators/__tests__/test_custom_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.10.5 → ul-api-utils-7.10.6}/ul_api_utils/validators/validate_empty_object.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|