vavacars-data-utils 1.3.4__tar.gz → 1.3.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.
Files changed (38) hide show
  1. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/PKG-INFO +13 -7
  2. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/setup.cfg +15 -7
  3. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/sql/sql_helper.py +22 -15
  4. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vavacars_data_utils.egg-info/PKG-INFO +13 -7
  5. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vavacars_data_utils.egg-info/requires.txt +14 -4
  6. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/README.md +0 -0
  7. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/pyproject.toml +0 -0
  8. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/test/utils/__init__.py +0 -0
  9. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/test/utils/test_strings.py +0 -0
  10. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/__init__.py +0 -0
  11. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/azure/__init__.py +0 -0
  12. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/azure/az_helper.py +0 -0
  13. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/bigquery/__init__.py +0 -0
  14. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/bigquery/bigquery_helper.py +0 -0
  15. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/camunda/__init__.py +0 -0
  16. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/camunda/camunda_helper.py +0 -0
  17. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/email/__init__.py +0 -0
  18. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/email/email_helper.py +0 -0
  19. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/salesforce/__init__.py +0 -0
  20. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/salesforce/salesforce_helper.py +0 -0
  21. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/smartiq/__init__.py +0 -0
  22. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/smartiq/smartiq_helper.py +0 -0
  23. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/smartiq/smartiq_helper_v2.py +0 -0
  24. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/sql/__init__.py +0 -0
  25. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/turkey/__init__.py +0 -0
  26. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/turkey/dates.py +0 -0
  27. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/utils/__init__.py +0 -0
  28. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/utils/callables.py +0 -0
  29. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/utils/comparisons.py +0 -0
  30. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/utils/naming.py +0 -0
  31. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/utils/singleton.py +0 -0
  32. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/utils/strings.py +0 -0
  33. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/utils/utils.py +0 -0
  34. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/vavaprice/__init__.py +0 -0
  35. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vava_utils/vavaprice/vavaprice_helper.py +0 -0
  36. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vavacars_data_utils.egg-info/SOURCES.txt +0 -0
  37. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vavacars_data_utils.egg-info/dependency_links.txt +0 -0
  38. {vavacars_data_utils-1.3.4 → vavacars_data_utils-1.3.6}/vavacars_data_utils.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vavacars_data_utils
3
- Version: 1.3.4
3
+ Version: 1.3.6
4
4
  Summary: Package with utils
5
5
  Home-page: https://dev.azure.com/vavacars/DataScience/_git/Data.Utils
6
6
  Author: Vavacars Data Science Team
@@ -13,13 +13,19 @@ Description-Content-Type: text/markdown
13
13
  Requires-Dist: pandas
14
14
  Requires-Dist: PyYAML>=6.0
15
15
  Requires-Dist: requests
16
- Requires-Dist: sqlalchemy<2.0
17
- Requires-Dist: redis
18
- Requires-Dist: msal
19
- Requires-Dist: pyodbc
20
16
  Requires-Dist: unidecode
21
- Requires-Dist: azure-communication-email
22
- Requires-Dist: psycopg2-binary
17
+ Provides-Extra: bigquery
18
+ Requires-Dist: google-cloud-bigquery; extra == "bigquery"
19
+ Requires-Dist: google-api-core; extra == "bigquery"
20
+ Provides-Extra: sql
21
+ Requires-Dist: sqlalchemy<2.0; extra == "sql"
22
+ Requires-Dist: psycopg2-binary; extra == "sql"
23
+ Requires-Dist: pyodbc; extra == "sql"
24
+ Requires-Dist: msal; extra == "sql"
25
+ Provides-Extra: emai
26
+ Requires-Dist: azure-communication-email; extra == "emai"
27
+ Provides-Extra: azure
28
+ Requires-Dist: azureml-core; extra == "azure"
23
29
 
24
30
  # Vavacars
25
31
 
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = vavacars_data_utils
3
- version = 1.3.4
3
+ version = 1.3.6
4
4
  author = Vavacars Data Science Team
5
5
  author_email = acg@vava.cars
6
6
  description = Package with utils
@@ -22,13 +22,7 @@ install_requires =
22
22
  pandas
23
23
  PyYAML>=6.0
24
24
  requests
25
- sqlalchemy<2.0
26
- redis
27
- msal
28
- pyodbc
29
25
  unidecode
30
- azure-communication-email
31
- psycopg2-binary
32
26
 
33
27
  [options.packages.find]
34
28
  where = .
@@ -37,6 +31,20 @@ exclude =
37
31
  README.md
38
32
  notebooks
39
33
 
34
+ [options.extras_require]
35
+ bigquery =
36
+ google-cloud-bigquery
37
+ google-api-core
38
+ sql =
39
+ sqlalchemy<2.0
40
+ psycopg2-binary
41
+ pyodbc
42
+ msal
43
+ emai =
44
+ azure-communication-email
45
+ azure =
46
+ azureml-core
47
+
40
48
  [egg_info]
41
49
  tag_build =
42
50
  tag_date = 0
@@ -26,9 +26,7 @@ def get_postgresql_helper(host, user, port, database=None, password=None, **kwar
26
26
  engine_url = URL.create(
27
27
  drivername="postgresql+psycopg2", host=host, username=user, database=database, password=password, port=port
28
28
  )
29
- engine = create_engine(
30
- engine_url, pool_pre_ping=True, **kwargs
31
- )
29
+ engine = create_engine(engine_url, pool_pre_ping=True, **kwargs)
32
30
 
33
31
  return SQL_Helper(engine, engine_type=POSTGRESQL)
34
32
 
@@ -162,19 +160,29 @@ class SQL_Helper:
162
160
  """
163
161
  return pd.read_sql_query(text(query), self._engine, **kwargs)
164
162
 
165
- def write_df(self, df: pd.DataFrame, table_name: str, chunksize: int = 1000, index: bool = False, **kwargs):
163
+ def write_df(
164
+ self, df: pd.DataFrame, table_name: str, chunksize: int = 1000, index: bool = False, if_exists="fail", **kwargs
165
+ ):
166
166
  """
167
167
  Store Pandas Dataframe into SQL table
168
168
 
169
169
  Args:
170
170
  df (pd.DataFrame): data to write
171
171
  table_name (str): output database table name
172
+ if_exists (str): action to take if table already exists
173
+ * fail,
174
+ * replace
175
+ * append
176
+ * truncate: NEW, truncate table before writing, like 'replace' but keeps structure
172
177
  **kwargs: additional keyword parameters passed to df.to_sql
173
178
  """
174
179
  with self._engine.connect() as conn:
175
180
  trans = conn.begin()
176
181
  try:
177
- df.to_sql(table_name.lower(), conn, chunksize=chunksize, index=index, **kwargs)
182
+ if if_exists == "truncate":
183
+ conn.execute(f"TRUNCATE TABLE {table_name}")
184
+ if_exists = "append"
185
+ df.to_sql(table_name.lower(), conn, chunksize=chunksize, index=index, if_exists=if_exists, **kwargs)
178
186
  trans.commit()
179
187
  except Exception as ex:
180
188
  LOGGER.warning(str(ex))
@@ -213,8 +221,8 @@ class SQL_Helper:
213
221
  WHERE {not_exists_part_cols}
214
222
  );
215
223
  """
216
- col_names = [f'[{x}]' for x in df.columns]
217
- upsert_cols = [f'[{x}]' for x in upsert_cols]
224
+ col_names = [f"[{x}]" for x in df.columns]
225
+ upsert_cols = [f"[{x}]" for x in upsert_cols]
218
226
 
219
227
  elif self.engine_type == MYSQL:
220
228
  tmp_table_name = f"{table_name}_tmp_{random.randrange(0, 1000)}"
@@ -237,8 +245,8 @@ class SQL_Helper:
237
245
  WHERE {not_exists_part_cols}
238
246
  );
239
247
  """
240
- col_names = [f'`{x}`' for x in df.columns]
241
- upsert_cols = [f'`{x}`' for x in upsert_cols]
248
+ col_names = [f"`{x}`" for x in df.columns]
249
+ upsert_cols = [f"`{x}`" for x in upsert_cols]
242
250
 
243
251
  elif self.engine_type == POSTGRESQL:
244
252
  tmp_table_name = f"{table_name}_tmp_{random.randrange(0, 1000)}"
@@ -261,8 +269,8 @@ class SQL_Helper:
261
269
  WHERE {not_exists_part_cols}
262
270
  );
263
271
  """
264
- col_names = [f'`{x}`' for x in df.columns]
265
- upsert_cols = [f'`{x}`' for x in upsert_cols]
272
+ col_names = [f"`{x}`" for x in df.columns]
273
+ upsert_cols = [f"`{x}`" for x in upsert_cols]
266
274
 
267
275
  else:
268
276
  raise NotImplementedError(f"Method not implemented for {self.engine_type} engine")
@@ -309,10 +317,10 @@ class SQL_Helper:
309
317
  not_exists_part_cols=not_exists_part_cols,
310
318
  )
311
319
  conn.execute(text(insert_sql))
312
-
320
+
313
321
  # DROP tmp table
314
322
  conn.execute(text(f"DROP TABLE {tmp_table_name};"))
315
-
323
+
316
324
  trans.commit()
317
325
  except Exception as ex:
318
326
  LOGGER.warning(str(ex))
@@ -389,6 +397,5 @@ class SQL_Helper:
389
397
 
390
398
  return "UPDATE" if exists else "CREATE"
391
399
 
392
-
393
400
  def execute(self, query: str) -> LegacyCursorResult:
394
- return self._engine.execute(query)
401
+ return self._engine.execute(query)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vavacars_data_utils
3
- Version: 1.3.4
3
+ Version: 1.3.6
4
4
  Summary: Package with utils
5
5
  Home-page: https://dev.azure.com/vavacars/DataScience/_git/Data.Utils
6
6
  Author: Vavacars Data Science Team
@@ -13,13 +13,19 @@ Description-Content-Type: text/markdown
13
13
  Requires-Dist: pandas
14
14
  Requires-Dist: PyYAML>=6.0
15
15
  Requires-Dist: requests
16
- Requires-Dist: sqlalchemy<2.0
17
- Requires-Dist: redis
18
- Requires-Dist: msal
19
- Requires-Dist: pyodbc
20
16
  Requires-Dist: unidecode
21
- Requires-Dist: azure-communication-email
22
- Requires-Dist: psycopg2-binary
17
+ Provides-Extra: bigquery
18
+ Requires-Dist: google-cloud-bigquery; extra == "bigquery"
19
+ Requires-Dist: google-api-core; extra == "bigquery"
20
+ Provides-Extra: sql
21
+ Requires-Dist: sqlalchemy<2.0; extra == "sql"
22
+ Requires-Dist: psycopg2-binary; extra == "sql"
23
+ Requires-Dist: pyodbc; extra == "sql"
24
+ Requires-Dist: msal; extra == "sql"
25
+ Provides-Extra: emai
26
+ Requires-Dist: azure-communication-email; extra == "emai"
27
+ Provides-Extra: azure
28
+ Requires-Dist: azureml-core; extra == "azure"
23
29
 
24
30
  # Vavacars
25
31
 
@@ -1,10 +1,20 @@
1
1
  pandas
2
2
  PyYAML>=6.0
3
3
  requests
4
- sqlalchemy<2.0
5
- redis
6
- msal
7
- pyodbc
8
4
  unidecode
5
+
6
+ [azure]
7
+ azureml-core
8
+
9
+ [bigquery]
10
+ google-cloud-bigquery
11
+ google-api-core
12
+
13
+ [emai]
9
14
  azure-communication-email
15
+
16
+ [sql]
17
+ sqlalchemy<2.0
10
18
  psycopg2-binary
19
+ pyodbc
20
+ msal