vavacars-data-utils 1.7.0__tar.gz → 1.7.2__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.
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/PKG-INFO +1 -1
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/setup.cfg +1 -1
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/auth/checker.py +19 -20
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/auth/config.py +3 -11
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vavacars_data_utils.egg-info/PKG-INFO +1 -1
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/README.md +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/pyproject.toml +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/test/utils/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/test/utils/test_strings.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/auth/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/auth/sql/create_auth_tables.sql +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/auth/sql/provision_auth_db.sql +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/azure/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/azure/az_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/bigquery/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/bigquery/bigquery_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/camunda/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/camunda/camunda_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/email/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/email/email_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/keyvault/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/keyvault/vault_reader.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/loganalytics/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/loganalytics/loganalytics_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/logging/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/logging/logging_middleware.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/salesforce/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/salesforce/salesforce_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/smartiq/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/smartiq/smartiq_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/smartiq/smartiq_helper_v2.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/sql/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/sql/sql_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/turkey/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/turkey/dates.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/utils/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/utils/callables.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/utils/comparisons.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/utils/naming.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/utils/singleton.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/utils/strings.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/utils/utils.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/vavaprice/__init__.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/vavaprice/vavaprice_helper.py +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vavacars_data_utils.egg-info/SOURCES.txt +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vavacars_data_utils.egg-info/dependency_links.txt +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vavacars_data_utils.egg-info/requires.txt +0 -0
- {vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vavacars_data_utils.egg-info/top_level.txt +0 -0
|
@@ -56,26 +56,30 @@ class AuthChecker:
|
|
|
56
56
|
port: Optional[int] = None,
|
|
57
57
|
user: Optional[str] = None,
|
|
58
58
|
database: Optional[str] = None,
|
|
59
|
+
password: Optional[str] = None,
|
|
59
60
|
key_vault: Optional[str] = None,
|
|
60
61
|
secret: Optional[str] = None,
|
|
61
62
|
):
|
|
62
63
|
self.env = env or os.environ.get("API_DEPLOYMENT_ENV", "dev")
|
|
63
64
|
cfg = dict(AUTH_DB_CONFIG.get(self.env, {}))
|
|
64
65
|
# explicit kwargs override the baked-in map - meant for local/testing use only
|
|
65
|
-
overrides = dict(host=host, port=port, user=user, database=database
|
|
66
|
+
overrides = dict(host=host, port=port, user=user, database=database)
|
|
66
67
|
cfg.update({k: v for k, v in overrides.items() if v is not None})
|
|
67
|
-
missing = [k for k in ("host", "user", "database"
|
|
68
|
+
missing = [k for k in ("host", "user", "database") if not cfg.get(k)]
|
|
68
69
|
if missing:
|
|
69
70
|
raise ValueError(f"Missing auth DB configuration for env '{self.env}': {missing}")
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
if password:
|
|
73
|
+
key_vault = secret = None
|
|
74
|
+
else:
|
|
75
|
+
key_vault = key_vault or cfg.get("key_vault")
|
|
76
|
+
secret = secret or cfg.get("secret")
|
|
77
|
+
|
|
78
|
+
if (key_vault is None) != (secret is None):
|
|
79
|
+
raise ValueError("Key Vault credentials require both key_vault and secret")
|
|
80
|
+
|
|
81
|
+
cfg.update(password=password, key_vault=key_vault, secret=secret)
|
|
82
|
+
self._db = get_mysql_helper(**cfg)
|
|
79
83
|
self._cache_ttl = cache_ttl_seconds
|
|
80
84
|
self._cache: Dict[Tuple[str, str, str], Tuple[float, bool]] = {}
|
|
81
85
|
|
|
@@ -146,33 +150,30 @@ class AuthChecker:
|
|
|
146
150
|
|
|
147
151
|
def create_user(self, username: str, password: str) -> int:
|
|
148
152
|
"""Creates a new user and returns its id. Fails if the username already exists."""
|
|
149
|
-
with self._db._engine.
|
|
153
|
+
with self._db._engine.begin() as conn:
|
|
150
154
|
result = conn.execute(
|
|
151
155
|
text("INSERT INTO api_users (username, password_hash) VALUES (:username, :password_hash)"),
|
|
152
156
|
{"username": username, "password_hash": hash_password(password)},
|
|
153
157
|
)
|
|
154
|
-
conn.commit()
|
|
155
158
|
return result.lastrowid
|
|
156
159
|
|
|
157
160
|
def set_password(self, username: str, password: str) -> None:
|
|
158
|
-
with self._db._engine.
|
|
161
|
+
with self._db._engine.begin() as conn:
|
|
159
162
|
conn.execute(
|
|
160
163
|
text("UPDATE api_users SET password_hash = :password_hash WHERE username = :username"),
|
|
161
164
|
{"password_hash": hash_password(password), "username": username},
|
|
162
165
|
)
|
|
163
|
-
conn.commit()
|
|
164
166
|
|
|
165
167
|
def set_active(self, username: str, is_active: bool) -> None:
|
|
166
|
-
with self._db._engine.
|
|
168
|
+
with self._db._engine.begin() as conn:
|
|
167
169
|
conn.execute(
|
|
168
170
|
text("UPDATE api_users SET is_active = :is_active WHERE username = :username"),
|
|
169
171
|
{"is_active": is_active, "username": username},
|
|
170
172
|
)
|
|
171
|
-
conn.commit()
|
|
172
173
|
|
|
173
174
|
def grant_access(self, username: str, api_name: str) -> None:
|
|
174
175
|
api_name = self._normalize_api_name(api_name)
|
|
175
|
-
with self._db._engine.
|
|
176
|
+
with self._db._engine.begin() as conn:
|
|
176
177
|
conn.execute(
|
|
177
178
|
text(
|
|
178
179
|
"INSERT IGNORE INTO api_user_access (user_id, api_name) "
|
|
@@ -180,11 +181,10 @@ class AuthChecker:
|
|
|
180
181
|
),
|
|
181
182
|
{"api_name": api_name, "username": username},
|
|
182
183
|
)
|
|
183
|
-
conn.commit()
|
|
184
184
|
|
|
185
185
|
def revoke_access(self, username: str, api_name: str) -> None:
|
|
186
186
|
api_name = self._normalize_api_name(api_name)
|
|
187
|
-
|
|
187
|
+
with self._db._engine.begin() as conn:
|
|
188
188
|
conn.execute(
|
|
189
189
|
text(
|
|
190
190
|
"DELETE a FROM api_user_access a JOIN api_users u ON u.id = a.user_id "
|
|
@@ -192,7 +192,6 @@ class AuthChecker:
|
|
|
192
192
|
),
|
|
193
193
|
{"username": username, "api_name": api_name},
|
|
194
194
|
)
|
|
195
|
-
conn.commit()
|
|
196
195
|
|
|
197
196
|
@staticmethod
|
|
198
197
|
def _normalize_api_name(api_name: str) -> str:
|
|
@@ -15,7 +15,7 @@ AUTH_DB_CONFIG = {
|
|
|
15
15
|
user="auth_svc_dev",
|
|
16
16
|
database="auth_dev",
|
|
17
17
|
key_vault="kv-ds-tr-dev-v1",
|
|
18
|
-
secret="
|
|
18
|
+
secret="auth-helper-dev",
|
|
19
19
|
),
|
|
20
20
|
"uat": dict(
|
|
21
21
|
host="mysql-vava-ds-tr-dev.mysql.database.azure.com",
|
|
@@ -23,15 +23,7 @@ AUTH_DB_CONFIG = {
|
|
|
23
23
|
user="auth_svc_uat",
|
|
24
24
|
database="auth_uat",
|
|
25
25
|
key_vault="kv-ds-tr-uat-v1",
|
|
26
|
-
secret="
|
|
27
|
-
),
|
|
28
|
-
"stg": dict(
|
|
29
|
-
host="mysql-vava-ds-tr-dev.mysql.database.azure.com",
|
|
30
|
-
port=3306,
|
|
31
|
-
user="auth_svc_stg",
|
|
32
|
-
database="auth_stg",
|
|
33
|
-
key_vault="kv-ds-tr-prod-v1",
|
|
34
|
-
secret="authDbPasswordStgV2",
|
|
26
|
+
secret="auth-helper-uat",
|
|
35
27
|
),
|
|
36
28
|
"prod": dict(
|
|
37
29
|
host="mysql-vava-ds-tr-dev.mysql.database.azure.com",
|
|
@@ -39,6 +31,6 @@ AUTH_DB_CONFIG = {
|
|
|
39
31
|
user="auth_svc",
|
|
40
32
|
database="auth",
|
|
41
33
|
key_vault="kv-ds-tr-prod-v1",
|
|
42
|
-
secret="
|
|
34
|
+
secret="auth-helper",
|
|
43
35
|
),
|
|
44
36
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/auth/sql/create_auth_tables.sql
RENAMED
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/auth/sql/provision_auth_db.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/bigquery/bigquery_helper.py
RENAMED
|
File without changes
|
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/camunda/camunda_helper.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
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/logging/logging_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/salesforce/salesforce_helper.py
RENAMED
|
File without changes
|
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/smartiq/smartiq_helper.py
RENAMED
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/smartiq/smartiq_helper_v2.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
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vava_utils/vavaprice/vavaprice_helper.py
RENAMED
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vavacars_data_utils.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vavacars_data_utils.egg-info/requires.txt
RENAMED
|
File without changes
|
{vavacars_data_utils-1.7.0 → vavacars_data_utils-1.7.2}/vavacars_data_utils.egg-info/top_level.txt
RENAMED
|
File without changes
|