Encryptors 2.51__tar.gz → 2.53__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.
- {encryptors-2.51 → encryptors-2.53}/PKG-INFO +1 -1
- {encryptors-2.51 → encryptors-2.53}/setup.py +1 -1
- {encryptors-2.51 → encryptors-2.53}/src/Encryptors.egg-info/PKG-INFO +1 -1
- {encryptors-2.51 → encryptors-2.53}/src/Encryptors.egg-info/SOURCES.txt +27 -29
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Cache/Redis.py +8 -6
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Cli/__init__.py +7 -5
- encryptors-2.53/src/Osdental/Constants/Constant.py +10 -0
- {encryptors-2.51/src/Osdental/Shared/Enums → encryptors-2.53/src/Osdental/Constants}/Message.py +2 -2
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Database/BaseRepository.py +1 -1
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Decorators/Grpc.py +3 -1
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Decorators/SecureResolver.py +5 -2
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Encryptor/Aes.py +6 -4
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Encryptor/Jwt.py +7 -5
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Encryptor/Rsa.py +6 -4
- encryptors-2.53/src/Osdental/Enums/FileType.py +9 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Enums/GrahpqlOperation.py +2 -2
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Exception/ControlledException.py +2 -2
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Graphql/Extensions/AuditExtension.py +3 -1
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Helpers/AuditDispatcher.py +4 -1
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Helpers/JwtTokenHelper.py +1 -1
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Helpers/ResponseDecryptor.py +4 -1
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Http/APIClient.py +8 -4
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Http/_Helpers.py +5 -2
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Models/ApiResponse.py +2 -2
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Models/Response.py +2 -2
- encryptors-2.51/src/Osdental/Helpers/KeyVaultService.py → encryptors-2.53/src/Osdental/Secrets/AzureKeyVaultProvider.py +1 -8
- encryptors-2.53/src/Osdental/Secrets/__init__.py +7 -0
- {encryptors-2.51/src/Osdental/Helpers → encryptors-2.53/src/Osdental/Services}/JwtAuthTokenService.py +2 -3
- {encryptors-2.51/src/Osdental/Helpers → encryptors-2.53/src/Osdental/Services}/WebsocketClient.py +4 -3
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/FileMetaData.py +1 -1
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/PasswordGenerator.py +1 -1
- encryptors-2.51/src/Osdental/Decorators/PublicResolver.py +0 -3
- encryptors-2.51/src/Osdental/Decorators/SqlDataNormalizer.py +0 -60
- encryptors-2.51/src/Osdental/Shared/Enums/Constant.py +0 -10
- encryptors-2.51/src/Osdental/Shared/Enums/FileType.py +0 -9
- encryptors-2.51/src/Osdental/Shared/Logger.py +0 -17
- {encryptors-2.51 → encryptors-2.53}/README.md +0 -0
- {encryptors-2.51 → encryptors-2.53}/setup.cfg +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Encryptors.egg-info/dependency_links.txt +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Encryptors.egg-info/entry_points.txt +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Encryptors.egg-info/requires.txt +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Encryptors.egg-info/top_level.txt +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Cache/__init__.py +0 -0
- {encryptors-2.51/src/Osdental/Database → encryptors-2.53/src/Osdental/Constants}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Database/Connection.py +0 -0
- {encryptors-2.51/src/Osdental/Decorators → encryptors-2.53/src/Osdental/Database}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Decorators/Retry.py +0 -0
- {encryptors-2.51/src/Osdental/Encryptor → encryptors-2.53/src/Osdental/Decorators}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Encryptor/Argon2.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Encryptor/Bcrypt.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Encryptor/Sha512.py +0 -0
- {encryptors-2.51/src/Osdental/Exception → encryptors-2.53/src/Osdental/Encryptor}/__init__.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Enums/Profile.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Enums/StatusCode.py +0 -0
- {encryptors-2.51/src/Osdental/Graphql/Extensions → encryptors-2.53/src/Osdental/Enums}/__init__.py +0 -0
- {encryptors-2.51/src/Osdental/Graphql/_Helpers → encryptors-2.53/src/Osdental/Exception}/__init__.py +0 -0
- {encryptors-2.51/src/Osdental/Graphql → encryptors-2.53/src/Osdental/Graphql/Extensions}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Graphql/Models/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Graphql/_Exceptions/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Graphql/_Helpers/_AuditHelper.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Graphql/_Helpers/_ExtractAuthToken.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Graphql/_Helpers/_TenantPolicy.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Graphql/_Helpers/_TokenService.py +0 -0
- {encryptors-2.51/src/Osdental/Helpers → encryptors-2.53/src/Osdental/Graphql/_Helpers}/__init__.py +0 -0
- {encryptors-2.51/src/Osdental/Http → encryptors-2.53/src/Osdental/Graphql}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Helpers/AzureClassifier.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Helpers/GrpcConnection.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Helpers/Resilience.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Helpers/_AuthTokenProcessor.py +0 -0
- {encryptors-2.51/src/Osdental/Models → encryptors-2.53/src/Osdental/Helpers}/__init__.py +0 -0
- {encryptors-2.51/src/Osdental/Rest/Context → encryptors-2.53/src/Osdental/Http}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Messaging/AzureServiceBus.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Messaging/Kafka.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Messaging/RabbitMQ.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Messaging/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Models/AuditConfig.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Models/Notification.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Models/Token.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Models/TokenClaims.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Models/_Audit.py +0 -0
- {encryptors-2.51/src/Osdental/Rest/Middlewares → encryptors-2.53/src/Osdental/Models}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Rest/Context/RequestContext.py +0 -0
- {encryptors-2.51/src/Osdental/Rest → encryptors-2.53/src/Osdental/Rest/Context}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Rest/Middlewares/RequestContextMiddleware.py +0 -0
- {encryptors-2.51/src/Osdental/Shared/Enums → encryptors-2.53/src/Osdental/Rest/Middlewares}/__init__.py +0 -0
- {encryptors-2.51/src/Osdental/Shared/Utils → encryptors-2.53/src/Osdental/Rest}/__init__.py +0 -0
- /encryptors-2.51/src/Osdental/Helpers/_Ports.py → /encryptors-2.53/src/Osdental/Services/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Storage/AzureBlobStorage.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Storage/S3Storage.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/Storage/__init__.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/CaseConverter.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/CodeGenerator.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/DataNormalizer.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/DataUtils.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/DateUtils.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/HashValidator.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/Mapper.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/QueryGenerator.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/RsaUtils.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/TextProcessor.py +0 -0
- {encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental/Utils}/__init__.py +0 -0
- {encryptors-2.51 → encryptors-2.53}/src/Osdental/__init__.py +0 -0
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
# ANDERSON REVISAR EL CACHE LOCAL DEL KEYVAULT PARA VALIDAR SI FUNCIONA
|
|
3
3
|
setup(
|
|
4
4
|
name="Encryptors",
|
|
5
|
-
version="2.
|
|
5
|
+
version="2.53",
|
|
6
6
|
author="OSDental LLC",
|
|
7
7
|
author_email="support@osdental.ai",
|
|
8
8
|
description="End-to-end algorithm library",
|
|
@@ -10,14 +10,15 @@ src/Osdental/__init__.py
|
|
|
10
10
|
src/Osdental/Cache/Redis.py
|
|
11
11
|
src/Osdental/Cache/__init__.py
|
|
12
12
|
src/Osdental/Cli/__init__.py
|
|
13
|
+
src/Osdental/Constants/Constant.py
|
|
14
|
+
src/Osdental/Constants/Message.py
|
|
15
|
+
src/Osdental/Constants/__init__.py
|
|
13
16
|
src/Osdental/Database/BaseRepository.py
|
|
14
17
|
src/Osdental/Database/Connection.py
|
|
15
18
|
src/Osdental/Database/__init__.py
|
|
16
19
|
src/Osdental/Decorators/Grpc.py
|
|
17
|
-
src/Osdental/Decorators/PublicResolver.py
|
|
18
20
|
src/Osdental/Decorators/Retry.py
|
|
19
21
|
src/Osdental/Decorators/SecureResolver.py
|
|
20
|
-
src/Osdental/Decorators/SqlDataNormalizer.py
|
|
21
22
|
src/Osdental/Decorators/__init__.py
|
|
22
23
|
src/Osdental/Encryptor/Aes.py
|
|
23
24
|
src/Osdental/Encryptor/Argon2.py
|
|
@@ -26,6 +27,11 @@ src/Osdental/Encryptor/Jwt.py
|
|
|
26
27
|
src/Osdental/Encryptor/Rsa.py
|
|
27
28
|
src/Osdental/Encryptor/Sha512.py
|
|
28
29
|
src/Osdental/Encryptor/__init__.py
|
|
30
|
+
src/Osdental/Enums/FileType.py
|
|
31
|
+
src/Osdental/Enums/GrahpqlOperation.py
|
|
32
|
+
src/Osdental/Enums/Profile.py
|
|
33
|
+
src/Osdental/Enums/StatusCode.py
|
|
34
|
+
src/Osdental/Enums/__init__.py
|
|
29
35
|
src/Osdental/Exception/ControlledException.py
|
|
30
36
|
src/Osdental/Exception/__init__.py
|
|
31
37
|
src/Osdental/Graphql/__init__.py
|
|
@@ -41,14 +47,10 @@ src/Osdental/Graphql/_Helpers/__init__.py
|
|
|
41
47
|
src/Osdental/Helpers/AuditDispatcher.py
|
|
42
48
|
src/Osdental/Helpers/AzureClassifier.py
|
|
43
49
|
src/Osdental/Helpers/GrpcConnection.py
|
|
44
|
-
src/Osdental/Helpers/JwtAuthTokenService.py
|
|
45
50
|
src/Osdental/Helpers/JwtTokenHelper.py
|
|
46
|
-
src/Osdental/Helpers/KeyVaultService.py
|
|
47
51
|
src/Osdental/Helpers/Resilience.py
|
|
48
52
|
src/Osdental/Helpers/ResponseDecryptor.py
|
|
49
|
-
src/Osdental/Helpers/WebsocketClient.py
|
|
50
53
|
src/Osdental/Helpers/_AuthTokenProcessor.py
|
|
51
|
-
src/Osdental/Helpers/_Ports.py
|
|
52
54
|
src/Osdental/Helpers/__init__.py
|
|
53
55
|
src/Osdental/Http/APIClient.py
|
|
54
56
|
src/Osdental/Http/_Helpers.py
|
|
@@ -70,28 +72,24 @@ src/Osdental/Rest/Context/RequestContext.py
|
|
|
70
72
|
src/Osdental/Rest/Context/__init__.py
|
|
71
73
|
src/Osdental/Rest/Middlewares/RequestContextMiddleware.py
|
|
72
74
|
src/Osdental/Rest/Middlewares/__init__.py
|
|
73
|
-
src/Osdental/
|
|
74
|
-
src/Osdental/
|
|
75
|
-
src/Osdental/
|
|
76
|
-
src/Osdental/
|
|
77
|
-
src/Osdental/
|
|
78
|
-
src/Osdental/Shared/Enums/Message.py
|
|
79
|
-
src/Osdental/Shared/Enums/Profile.py
|
|
80
|
-
src/Osdental/Shared/Enums/StatusCode.py
|
|
81
|
-
src/Osdental/Shared/Enums/__init__.py
|
|
82
|
-
src/Osdental/Shared/Utils/CaseConverter.py
|
|
83
|
-
src/Osdental/Shared/Utils/CodeGenerator.py
|
|
84
|
-
src/Osdental/Shared/Utils/DataNormalizer.py
|
|
85
|
-
src/Osdental/Shared/Utils/DataUtils.py
|
|
86
|
-
src/Osdental/Shared/Utils/DateUtils.py
|
|
87
|
-
src/Osdental/Shared/Utils/FileMetaData.py
|
|
88
|
-
src/Osdental/Shared/Utils/HashValidator.py
|
|
89
|
-
src/Osdental/Shared/Utils/Mapper.py
|
|
90
|
-
src/Osdental/Shared/Utils/PasswordGenerator.py
|
|
91
|
-
src/Osdental/Shared/Utils/QueryGenerator.py
|
|
92
|
-
src/Osdental/Shared/Utils/RsaUtils.py
|
|
93
|
-
src/Osdental/Shared/Utils/TextProcessor.py
|
|
94
|
-
src/Osdental/Shared/Utils/__init__.py
|
|
75
|
+
src/Osdental/Secrets/AzureKeyVaultProvider.py
|
|
76
|
+
src/Osdental/Secrets/__init__.py
|
|
77
|
+
src/Osdental/Services/JwtAuthTokenService.py
|
|
78
|
+
src/Osdental/Services/WebsocketClient.py
|
|
79
|
+
src/Osdental/Services/__init__.py
|
|
95
80
|
src/Osdental/Storage/AzureBlobStorage.py
|
|
96
81
|
src/Osdental/Storage/S3Storage.py
|
|
97
|
-
src/Osdental/Storage/__init__.py
|
|
82
|
+
src/Osdental/Storage/__init__.py
|
|
83
|
+
src/Osdental/Utils/CaseConverter.py
|
|
84
|
+
src/Osdental/Utils/CodeGenerator.py
|
|
85
|
+
src/Osdental/Utils/DataNormalizer.py
|
|
86
|
+
src/Osdental/Utils/DataUtils.py
|
|
87
|
+
src/Osdental/Utils/DateUtils.py
|
|
88
|
+
src/Osdental/Utils/FileMetaData.py
|
|
89
|
+
src/Osdental/Utils/HashValidator.py
|
|
90
|
+
src/Osdental/Utils/Mapper.py
|
|
91
|
+
src/Osdental/Utils/PasswordGenerator.py
|
|
92
|
+
src/Osdental/Utils/QueryGenerator.py
|
|
93
|
+
src/Osdental/Utils/RsaUtils.py
|
|
94
|
+
src/Osdental/Utils/TextProcessor.py
|
|
95
|
+
src/Osdental/Utils/__init__.py
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import asyncio
|
|
2
3
|
import json
|
|
3
4
|
from typing import Dict, List, Optional, Any
|
|
@@ -9,10 +10,11 @@ from Osdental.Cache import ICacheService
|
|
|
9
10
|
from Osdental.Exception.ControlledException import RedisException
|
|
10
11
|
from Osdental.Helpers.Resilience import AzureResiliencePolicy, AzureTransientError
|
|
11
12
|
from Osdental.Helpers.AzureClassifier import classify_redis
|
|
12
|
-
from Osdental.
|
|
13
|
-
from Osdental.Shared.Enums.Message import Message
|
|
13
|
+
from Osdental.Constants.Message import Message
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
16
18
|
class RedisCacheAsync(ICacheService):
|
|
17
19
|
|
|
18
20
|
_instances: Dict[str, "RedisCacheAsync"] = {}
|
|
@@ -74,12 +76,12 @@ class RedisCacheAsync(ICacheService):
|
|
|
74
76
|
await self._reconnect()
|
|
75
77
|
|
|
76
78
|
except Exception as reconnect_exc:
|
|
77
|
-
logger.
|
|
79
|
+
logger.exception(
|
|
78
80
|
"redis.reconnect.failed error=%s",
|
|
79
81
|
reconnect_exc
|
|
80
82
|
)
|
|
81
83
|
|
|
82
|
-
logger.
|
|
84
|
+
logger.exception(
|
|
83
85
|
"redis.exhausted error=%s",
|
|
84
86
|
exc
|
|
85
87
|
)
|
|
@@ -131,7 +133,7 @@ class RedisCacheAsync(ICacheService):
|
|
|
131
133
|
except Exception as e:
|
|
132
134
|
self.client = None
|
|
133
135
|
|
|
134
|
-
logger.
|
|
136
|
+
logger.exception(
|
|
135
137
|
f"Redis connection error: {str(e)}"
|
|
136
138
|
)
|
|
137
139
|
|
|
@@ -320,6 +322,6 @@ class RedisCacheAsync(ICacheService):
|
|
|
320
322
|
|
|
321
323
|
except Exception as e:
|
|
322
324
|
|
|
323
|
-
logger.
|
|
325
|
+
logger.exception(
|
|
324
326
|
f"Redis close error: {str(e)}"
|
|
325
327
|
)
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import os
|
|
2
3
|
import sys
|
|
3
4
|
import subprocess
|
|
4
5
|
import platform
|
|
5
6
|
import click
|
|
6
|
-
from Osdental.
|
|
7
|
-
|
|
7
|
+
from Osdental.Constants.Message import Message
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
@click.group()
|
|
@@ -29,7 +31,7 @@ def start(port: int):
|
|
|
29
31
|
try:
|
|
30
32
|
subprocess.run(['uvicorn', 'app:app', '--port', str(port), '--reload'], check=True)
|
|
31
33
|
except subprocess.CalledProcessError as e:
|
|
32
|
-
logger.
|
|
34
|
+
logger.exception(f'{Message.SERVER_NETWORK_ACCESS_ERROR_MSG}: {e}')
|
|
33
35
|
|
|
34
36
|
@cli.command()
|
|
35
37
|
@click.argument('port')
|
|
@@ -38,7 +40,7 @@ def serve(port: int):
|
|
|
38
40
|
try:
|
|
39
41
|
subprocess.run(['uvicorn', 'app:app', '--host', '0.0.0.0', '--port', str(port), '--reload'], check=True)
|
|
40
42
|
except subprocess.CalledProcessError as e:
|
|
41
|
-
logger.
|
|
43
|
+
logger.exception(f'{Message.SERVER_NETWORK_ACCESS_ERROR_MSG}: {e}')
|
|
42
44
|
|
|
43
45
|
@cli.command("clean-redis")
|
|
44
46
|
@click.argument('redis_env')
|
|
@@ -54,7 +56,7 @@ async def clean_redis(redis_env: str):
|
|
|
54
56
|
await redis.flush()
|
|
55
57
|
logger.info(Message.REDIS_CLEANUP_SUCCESS_MSG)
|
|
56
58
|
except Exception as e:
|
|
57
|
-
logger.
|
|
59
|
+
logger.exception(f'{Message.REDIS_CLEANUP_ERROR_MSG}: {e}')
|
|
58
60
|
|
|
59
61
|
@cli.command(name='proto-files')
|
|
60
62
|
@click.argument('name')
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
class Constant:
|
|
4
|
+
DEFAULT_ENCODING = "utf-8"
|
|
5
|
+
MESSAGE_LOG_INTERNAL = "MESSAGE_LOG_INTERNAL"
|
|
6
|
+
DEFAULT_EMPTY_VALUE = "*"
|
|
7
|
+
RESPONSE_TYPE_ERROR = "ERROR"
|
|
8
|
+
RESPONSE_TYPE_REQUEST = "REQUEST"
|
|
9
|
+
RESPONSE_TYPE_RESPONSE = "RESPONSE"
|
|
10
|
+
MESSAGE_LOG_EXTERNAL = "MESSAGE_LOG_EXTERNAL"
|
{encryptors-2.51/src/Osdental/Shared/Enums → encryptors-2.53/src/Osdental/Constants}/Message.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from enum import StrEnum
|
|
2
1
|
|
|
3
|
-
class Message
|
|
2
|
+
class Message:
|
|
3
|
+
|
|
4
4
|
ACCESS_DENIED_MSG = "You do not have the necessary privileges for this operation."
|
|
5
5
|
UNEXPECTED_ERROR_MSG = "Something went wrong while processing your request. Please try again later."
|
|
6
6
|
PORTAL_ACCESS_RESTRICTED_MSG = "You are not authorized to access this portal."
|
|
@@ -6,7 +6,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
6
6
|
from Osdental.Exception.ControlledException import DatabaseException
|
|
7
7
|
from Osdental.Helpers.Resilience import AzureResiliencePolicy, AzureTransientError
|
|
8
8
|
from Osdental.Shared.Utils.DataNormalizer import normalize
|
|
9
|
-
from Osdental.
|
|
9
|
+
from Osdental.Constants.Message import Message
|
|
10
10
|
|
|
11
11
|
_TRANSIENT_SQL_ERRORS = {
|
|
12
12
|
"08S01", "40197", "40501", "40613", "49918",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
from functools import wraps
|
|
2
3
|
from typing import Callable
|
|
3
4
|
from graphql import GraphQLResolveInfo
|
|
@@ -7,13 +8,15 @@ from Osdental.Exception.ControlledException import (
|
|
|
7
8
|
OSDException, AccessDeniedException
|
|
8
9
|
)
|
|
9
10
|
from Osdental.Graphql.Models import BaseGraphQLContext
|
|
10
|
-
from Osdental.Shared.Logger import logger
|
|
11
11
|
from Osdental.Helpers._Ports import IAuthTokenService
|
|
12
12
|
from Osdental.Helpers._AuthTokenProcessor import (
|
|
13
13
|
extract_bearer_token, build_auth_token, decrypt_and_parse_payload
|
|
14
14
|
)
|
|
15
15
|
from Osdental.Models.TokenClaims import UserTokenClaims
|
|
16
|
-
from Osdental.
|
|
16
|
+
from Osdental.Enums.StatusCode import StatusCode
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
17
20
|
|
|
18
21
|
|
|
19
22
|
def __test(dispatcher, request, request_payload, result, decrypted_key):
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import os
|
|
2
3
|
import json
|
|
3
4
|
import base64
|
|
4
5
|
from typing import Dict, List
|
|
5
6
|
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
|
6
7
|
from Osdental.Exception.ControlledException import AESEncryptException
|
|
7
|
-
from Osdental.
|
|
8
|
-
from Osdental.Shared.Enums.Message import Message
|
|
8
|
+
from Osdental.Constants.Message import Message
|
|
9
9
|
from Osdental.Shared.Enums.Constant import Constant
|
|
10
10
|
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
11
13
|
class AES:
|
|
12
14
|
|
|
13
15
|
IV_LENGTH = 32
|
|
@@ -49,7 +51,7 @@ class AES:
|
|
|
49
51
|
return base64.b64encode(encrypted_data).decode(Constant.DEFAULT_ENCODING)
|
|
50
52
|
|
|
51
53
|
except Exception as e:
|
|
52
|
-
logger.
|
|
54
|
+
logger.exception(f'Unexpected AES encryption error: {str(e)}')
|
|
53
55
|
raise AESEncryptException(error=str(e))
|
|
54
56
|
|
|
55
57
|
@classmethod
|
|
@@ -80,6 +82,6 @@ class AES:
|
|
|
80
82
|
|
|
81
83
|
except Exception as e:
|
|
82
84
|
if not silent:
|
|
83
|
-
logger.
|
|
85
|
+
logger.exception(f'Unexpected AES decryption error: {str(e)}')
|
|
84
86
|
|
|
85
87
|
raise AESEncryptException(error=str(e))
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import jwt
|
|
2
3
|
from typing import Dict, Any
|
|
3
4
|
from cryptography.hazmat.primitives import serialization
|
|
4
5
|
from cryptography.hazmat.backends import default_backend
|
|
5
6
|
from Osdental.Exception.ControlledException import JWTokenException
|
|
6
|
-
from Osdental.
|
|
7
|
-
from Osdental.Shared.Enums.Message import Message
|
|
7
|
+
from Osdental.Constants.Message import Message
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
10
12
|
class JWT:
|
|
11
13
|
|
|
12
14
|
@staticmethod
|
|
@@ -18,7 +20,7 @@ class JWT:
|
|
|
18
20
|
return token
|
|
19
21
|
|
|
20
22
|
except Exception as e:
|
|
21
|
-
logger.
|
|
23
|
+
logger.exception(f"Unexpected jwt generating error: {str(e)}")
|
|
22
24
|
raise JWTokenException(message=Message.UNEXPECTED_ERROR_MSG, error=str(e))
|
|
23
25
|
|
|
24
26
|
@staticmethod
|
|
@@ -28,7 +30,7 @@ class JWT:
|
|
|
28
30
|
return payload
|
|
29
31
|
|
|
30
32
|
except Exception as e:
|
|
31
|
-
logger.
|
|
33
|
+
logger.exception(f"Unexpected jwt extract payload error: {str(e)}")
|
|
32
34
|
raise JWTokenException(message=Message.UNEXPECTED_ERROR_MSG, error=str(e))
|
|
33
35
|
|
|
34
36
|
@staticmethod
|
|
@@ -39,5 +41,5 @@ class JWT:
|
|
|
39
41
|
)
|
|
40
42
|
return private_key
|
|
41
43
|
except Exception as e:
|
|
42
|
-
logger.
|
|
44
|
+
logger.exception(f"Unexpected jwt private key generating error: {str(e)}")
|
|
43
45
|
raise JWTokenException(message=Message.UNEXPECTED_ERROR_MSG, error=str(e))
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import json
|
|
2
3
|
from base64 import b64decode, b64encode
|
|
3
4
|
from typing import Dict, Any
|
|
@@ -5,10 +6,11 @@ from cryptography.hazmat.primitives import serialization
|
|
|
5
6
|
from cryptography.hazmat.primitives.asymmetric import padding
|
|
6
7
|
from cryptography.hazmat.primitives import hashes
|
|
7
8
|
from Osdental.Exception.ControlledException import RSAEncryptException
|
|
8
|
-
from Osdental.
|
|
9
|
-
from Osdental.Shared.Enums.Message import Message
|
|
9
|
+
from Osdental.Constants.Message import Message
|
|
10
10
|
from Osdental.Shared.Enums.Constant import Constant
|
|
11
11
|
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
12
14
|
class RSAEncryptor:
|
|
13
15
|
|
|
14
16
|
@staticmethod
|
|
@@ -31,7 +33,7 @@ class RSAEncryptor:
|
|
|
31
33
|
return b64encode(encrypted_bytes).decode(Constant.DEFAULT_ENCODING)
|
|
32
34
|
|
|
33
35
|
except Exception as e:
|
|
34
|
-
logger.
|
|
36
|
+
logger.exception(f'Unexpected RSA encryption error: {str(e)}')
|
|
35
37
|
raise RSAEncryptException(message=Message.UNEXPECTED_ERROR_MSG, error=str(e))
|
|
36
38
|
|
|
37
39
|
|
|
@@ -53,6 +55,6 @@ class RSAEncryptor:
|
|
|
53
55
|
|
|
54
56
|
except Exception as e:
|
|
55
57
|
if not silent:
|
|
56
|
-
logger.
|
|
58
|
+
logger.exception(f'Unexpected RSA decryption error: {str(e)}')
|
|
57
59
|
|
|
58
60
|
raise RSAEncryptException(message=Message.UNEXPECTED_ERROR_MSG, error=str(e))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Any
|
|
2
|
-
from Osdental.
|
|
3
|
-
from Osdental.
|
|
2
|
+
from Osdental.Enums.StatusCode import StatusCode
|
|
3
|
+
from Osdental.Constants.Message import Message
|
|
4
4
|
|
|
5
5
|
class OSDException(Exception):
|
|
6
6
|
""" Base class for all custom exceptions. """
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import inspect
|
|
2
|
+
import logging
|
|
2
3
|
import json
|
|
3
4
|
from graphql.pyutils import is_awaitable
|
|
4
5
|
from ariadne.types import Extension
|
|
5
|
-
from Osdental.Shared.Logger import logger
|
|
6
6
|
from Osdental.Encryptor.Aes import AES
|
|
7
7
|
from Osdental.Graphql._Helpers._TenantPolicy import TenantPolicy
|
|
8
8
|
from Osdental.Rest.Context.RequestContext import (
|
|
@@ -13,6 +13,8 @@ from Osdental.Models.Response import Response
|
|
|
13
13
|
from Osdental.Graphql.Models import BaseGraphQLContext
|
|
14
14
|
from Osdental.Shared.Enums.Constant import Constant
|
|
15
15
|
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
16
18
|
class AuditExtension(Extension):
|
|
17
19
|
|
|
18
20
|
def request_started(self, context):
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import asyncio
|
|
2
3
|
from typing import Dict, Any, Optional
|
|
3
4
|
from fastapi import Request
|
|
@@ -10,7 +11,9 @@ from Osdental.Models._Audit import Audit
|
|
|
10
11
|
from Osdental.Models.Response import Response
|
|
11
12
|
from Osdental.Models.ApiResponse import ApiResponse
|
|
12
13
|
from Osdental.Shared.Enums.Constant import Constant
|
|
13
|
-
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
14
17
|
|
|
15
18
|
class AuditDispatcher:
|
|
16
19
|
|
|
@@ -6,7 +6,7 @@ from jwcrypto import jwe
|
|
|
6
6
|
from jwcrypto.jwt import JWTExpired
|
|
7
7
|
from Osdental.Models.TokenClaims import TokenValidationOptions
|
|
8
8
|
from Osdental.Exception.ControlledException import UnauthorizedException
|
|
9
|
-
from Osdental.
|
|
9
|
+
from Osdental.Enums.StatusCode import StatusCode
|
|
10
10
|
|
|
11
11
|
class JwtTokenHelper:
|
|
12
12
|
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
from typing import Dict, Any
|
|
2
3
|
from Osdental.Encryptor.Aes import AES
|
|
3
4
|
from Osdental.Encryptor.Rsa import RSAEncryptor
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
logger = logging.getLogger(__name__)
|
|
7
|
+
|
|
5
8
|
|
|
6
9
|
VALID_TYPES = {"RSA", "AES"}
|
|
7
10
|
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import logging
|
|
2
2
|
from typing import Optional, Dict, Any
|
|
3
|
+
import httpx
|
|
4
|
+
from http import HTTPMethod
|
|
3
5
|
from Osdental.Decorators.Retry import rest_retry
|
|
4
6
|
from Osdental.Http._Helpers import (
|
|
5
7
|
audit_success, audit_http_error, audit_exception_error,
|
|
6
8
|
audit_unknown_error, audit_graphql_error
|
|
7
9
|
)
|
|
8
10
|
from Osdental.Exception.ControlledException import HttpClientException
|
|
9
|
-
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
10
14
|
|
|
11
15
|
class APIClient:
|
|
12
16
|
|
|
@@ -28,7 +32,7 @@ class APIClient:
|
|
|
28
32
|
await self._client.aclose()
|
|
29
33
|
|
|
30
34
|
@rest_retry
|
|
31
|
-
async def _request(self, method:
|
|
35
|
+
async def _request(self, method: HTTPMethod, url: str, **kwargs) -> httpx.Response:
|
|
32
36
|
|
|
33
37
|
try:
|
|
34
38
|
|
|
@@ -68,7 +72,7 @@ class APIClient:
|
|
|
68
72
|
|
|
69
73
|
async def request(
|
|
70
74
|
self,
|
|
71
|
-
method:
|
|
75
|
+
method: HTTPMethod,
|
|
72
76
|
url: str,
|
|
73
77
|
**kwargs
|
|
74
78
|
) -> Any:
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
from Osdental.Rest.Context.RequestContext import current_context
|
|
2
3
|
from Osdental.Models.ApiResponse import ApiResponse
|
|
3
4
|
from Osdental.Shared.Enums.Constant import Constant
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
logger = logging.getLogger(__name__)
|
|
5
8
|
|
|
6
9
|
"""
|
|
7
10
|
Helpers to control external API audit logging.
|
|
@@ -22,7 +25,7 @@ def _safe_dispatch(**kwargs):
|
|
|
22
25
|
if dispatcher:
|
|
23
26
|
dispatcher.dispatch(**kwargs)
|
|
24
27
|
except Exception as e:
|
|
25
|
-
logger.
|
|
28
|
+
logger.exception(f"Audit error: {str(e)}")
|
|
26
29
|
|
|
27
30
|
def _build_payload(method, url, kwargs):
|
|
28
31
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from dataclasses import dataclass, field, asdict
|
|
2
2
|
from typing import Any, Optional
|
|
3
|
-
from Osdental.
|
|
4
|
-
from Osdental.
|
|
3
|
+
from Osdental.Enums.StatusCode import StatusCode
|
|
4
|
+
from Osdental.Constants.Message import Message
|
|
5
5
|
|
|
6
6
|
@dataclass
|
|
7
7
|
class ApiResponse:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from dataclasses import dataclass, field, asdict
|
|
2
2
|
from typing import Optional, Any, Literal
|
|
3
|
-
from Osdental.
|
|
4
|
-
from Osdental.
|
|
3
|
+
from Osdental.Enums.StatusCode import StatusCode
|
|
4
|
+
from Osdental.Constants.Message import Message
|
|
5
5
|
|
|
6
6
|
@dataclass
|
|
7
7
|
class Response:
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import time
|
|
3
3
|
from typing import Dict
|
|
4
|
-
from abc import ABC, abstractmethod
|
|
5
4
|
from azure.identity.aio import DefaultAzureCredential
|
|
6
5
|
from azure.keyvault.secrets.aio import SecretClient
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class ISecretProvider(ABC):
|
|
10
|
-
|
|
11
|
-
@abstractmethod
|
|
12
|
-
async def get(self, name: str) -> str:
|
|
13
|
-
pass
|
|
6
|
+
from Osdental.Secrets import ISecretProvider
|
|
14
7
|
|
|
15
8
|
class AzureKeyVaultSecretProvider(ISecretProvider):
|
|
16
9
|
|
|
@@ -5,14 +5,13 @@ from Osdental.Models.TokenClaims import (
|
|
|
5
5
|
ActionTokenClaims, TokenValidationOptions
|
|
6
6
|
)
|
|
7
7
|
|
|
8
|
-
from Osdental.
|
|
8
|
+
from Osdental.Services import IAuthTokenService
|
|
9
9
|
|
|
10
10
|
from Osdental.Helpers.JwtTokenHelper import JwtTokenHelper
|
|
11
11
|
|
|
12
|
-
|
|
13
12
|
from Osdental.Shared.Utils.RsaUtils import normalize_rsa_keys
|
|
14
13
|
|
|
15
|
-
from Osdental.
|
|
14
|
+
from Osdental.Secrets import ISecretProvider
|
|
16
15
|
|
|
17
16
|
class JwtAuthTokenService(IAuthTokenService):
|
|
18
17
|
|
{encryptors-2.51/src/Osdental/Helpers → encryptors-2.53/src/Osdental/Services}/WebsocketClient.py
RENAMED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import json
|
|
2
3
|
from Osdental.Http.APIClient import APIClient
|
|
3
|
-
from Osdental.
|
|
4
|
-
from Osdental.Helpers._Ports import INotificationPublisher
|
|
4
|
+
from Osdental.Services import INotificationPublisher
|
|
5
5
|
from Osdental.Models.Notification import Notification
|
|
6
6
|
|
|
7
|
+
logger = logging.getLogger(__name__)
|
|
7
8
|
|
|
8
9
|
class WebsocketClient(INotificationPublisher):
|
|
9
10
|
|
|
@@ -37,7 +38,7 @@ class WebsocketClient(INotificationPublisher):
|
|
|
37
38
|
|
|
38
39
|
except Exception as e:
|
|
39
40
|
|
|
40
|
-
logger.
|
|
41
|
+
logger.exception(
|
|
41
42
|
f"Error sending websocket notification: {e}"
|
|
42
43
|
)
|
|
43
44
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import mimetypes
|
|
3
3
|
from Osdental.Exception.ControlledException import ValidationDataException
|
|
4
|
-
from Osdental.
|
|
4
|
+
from Osdental.Constants.Message import Message
|
|
5
5
|
from Osdental.Shared.Enums.FileType import FileType
|
|
6
6
|
|
|
7
7
|
class FileMetaData:
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import uuid
|
|
2
|
-
from functools import wraps
|
|
3
|
-
from sqlalchemy.engine.row import RowMapping, Row
|
|
4
|
-
from sqlalchemy.engine import Result
|
|
5
|
-
from typing import Any, Callable, Awaitable
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def dictify_sql_result(func: Callable[..., Awaitable[Any]]) -> Callable[..., Awaitable[Any]]:
|
|
9
|
-
"""
|
|
10
|
-
Decorador que convierte automáticamente los resultados devueltos por funciones asíncronas
|
|
11
|
-
que usan SQLAlchemy (ORM o Core), transformando RowMapping o Row en dicts puros.
|
|
12
|
-
|
|
13
|
-
Maneja correctamente:
|
|
14
|
-
- None
|
|
15
|
-
- Escalares (int, str, etc.)
|
|
16
|
-
- RowMapping / Row únicos o listas
|
|
17
|
-
- Result devuelto sin procesar
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
def normalize_value(value: Any) -> Any:
|
|
21
|
-
if isinstance(value, uuid.UUID):
|
|
22
|
-
return str(value).lower()
|
|
23
|
-
elif isinstance(value, dict):
|
|
24
|
-
return {k: normalize_value(v) for k, v in value.items()}
|
|
25
|
-
elif isinstance(value, (list, tuple)):
|
|
26
|
-
return [normalize_value(v) for v in value]
|
|
27
|
-
return value
|
|
28
|
-
|
|
29
|
-
@wraps(func)
|
|
30
|
-
async def wrapper(*args, **kwargs):
|
|
31
|
-
result = await func(*args, **kwargs)
|
|
32
|
-
|
|
33
|
-
if result is None:
|
|
34
|
-
return None
|
|
35
|
-
|
|
36
|
-
if isinstance(result, Result):
|
|
37
|
-
try:
|
|
38
|
-
rows = result.mappings().all()
|
|
39
|
-
return [normalize_value(dict(r)) for r in rows]
|
|
40
|
-
except Exception:
|
|
41
|
-
rows = result.all()
|
|
42
|
-
return [normalize_value(dict(r._mapping)) for r in rows]
|
|
43
|
-
|
|
44
|
-
if isinstance(result, list) and result:
|
|
45
|
-
first_item = result[0]
|
|
46
|
-
if isinstance(first_item, RowMapping):
|
|
47
|
-
return [normalize_value(dict(r)) for r in result]
|
|
48
|
-
if isinstance(first_item, Row):
|
|
49
|
-
return [normalize_value(dict(r._mapping)) for r in result]
|
|
50
|
-
|
|
51
|
-
return [normalize_value(r) for r in result]
|
|
52
|
-
|
|
53
|
-
if isinstance(result, RowMapping):
|
|
54
|
-
return normalize_value(dict(result))
|
|
55
|
-
if isinstance(result, Row):
|
|
56
|
-
return normalize_value(dict(result._mapping))
|
|
57
|
-
|
|
58
|
-
return normalize_value(result)
|
|
59
|
-
|
|
60
|
-
return wrapper
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from enum import StrEnum
|
|
2
|
-
|
|
3
|
-
class Constant(StrEnum):
|
|
4
|
-
DEFAULT_ENCODING = 'utf-8'
|
|
5
|
-
MESSAGE_LOG_INTERNAL = 'MESSAGE_LOG_INTERNAL'
|
|
6
|
-
DEFAULT_EMPTY_VALUE = '*'
|
|
7
|
-
RESPONSE_TYPE_ERROR = 'ERROR'
|
|
8
|
-
RESPONSE_TYPE_REQUEST = 'REQUEST'
|
|
9
|
-
RESPONSE_TYPE_RESPONSE = 'RESPONSE'
|
|
10
|
-
MESSAGE_LOG_EXTERNAL = 'MESSAGE_LOG_EXTERNAL'
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import colorlog
|
|
3
|
-
|
|
4
|
-
handler = colorlog.StreamHandler()
|
|
5
|
-
handler.setFormatter(colorlog.ColoredFormatter(
|
|
6
|
-
'%(log_color)s%(levelname)s:%(name)s:%(message)s',
|
|
7
|
-
log_colors={
|
|
8
|
-
'DEBUG': 'cyan',
|
|
9
|
-
'INFO': 'green',
|
|
10
|
-
'WARNING': 'yellow',
|
|
11
|
-
'ERROR': 'red',
|
|
12
|
-
'CRITICAL': 'bold_red',
|
|
13
|
-
}
|
|
14
|
-
))
|
|
15
|
-
logger = colorlog.getLogger('my_logger')
|
|
16
|
-
logger.addHandler(handler)
|
|
17
|
-
logger.setLevel(logging.DEBUG)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{encryptors-2.51/src/Osdental/Database → encryptors-2.53/src/Osdental/Constants}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{encryptors-2.51/src/Osdental/Decorators → encryptors-2.53/src/Osdental/Database}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{encryptors-2.51/src/Osdental/Encryptor → encryptors-2.53/src/Osdental/Decorators}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{encryptors-2.51/src/Osdental/Exception → encryptors-2.53/src/Osdental/Encryptor}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{encryptors-2.51/src/Osdental/Graphql/Extensions → encryptors-2.53/src/Osdental/Enums}/__init__.py
RENAMED
|
File without changes
|
{encryptors-2.51/src/Osdental/Graphql/_Helpers → encryptors-2.53/src/Osdental/Exception}/__init__.py
RENAMED
|
File without changes
|
{encryptors-2.51/src/Osdental/Graphql → encryptors-2.53/src/Osdental/Graphql/Extensions}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{encryptors-2.51/src/Osdental/Helpers → encryptors-2.53/src/Osdental/Graphql/_Helpers}/__init__.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
|
{encryptors-2.51/src/Osdental/Rest/Middlewares → encryptors-2.53/src/Osdental/Models}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{encryptors-2.51 → encryptors-2.53}/src/Osdental/Rest/Middlewares/RequestContextMiddleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/encryptors-2.51/src/Osdental/Helpers/_Ports.py → /encryptors-2.53/src/Osdental/Services/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/DataNormalizer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{encryptors-2.51/src/Osdental/Shared → encryptors-2.53/src/Osdental}/Utils/QueryGenerator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|