vavacars-data-utils 1.1.3__tar.gz → 1.2.0__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.1.3 → vavacars_data_utils-1.2.0}/PKG-INFO +10 -1
  2. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/setup.cfg +1 -1
  3. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/sql/sql_helper.py +19 -5
  4. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vavacars_data_utils.egg-info/PKG-INFO +10 -1
  5. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/README.md +0 -0
  6. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/pyproject.toml +0 -0
  7. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/test/utils/__init__.py +0 -0
  8. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/test/utils/test_strings.py +0 -0
  9. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/__init__.py +0 -0
  10. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/azure/__init__.py +0 -0
  11. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/azure/az_helper.py +0 -0
  12. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/bigquery/__init__.py +0 -0
  13. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/bigquery/bigquery_helper.py +0 -0
  14. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/camunda/__init__.py +0 -0
  15. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/camunda/camunda_helper.py +0 -0
  16. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/email/__init__.py +0 -0
  17. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/email/email_helper.py +0 -0
  18. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/salesforce/__init__.py +0 -0
  19. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/salesforce/salesforce_helper.py +0 -0
  20. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/smartiq/__init__.py +0 -0
  21. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/smartiq/smartiq_helper.py +0 -0
  22. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/smartiq/smartiq_helper_v2.py +0 -0
  23. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/sql/__init__.py +0 -0
  24. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/turkey/__init__.py +0 -0
  25. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/turkey/dates.py +0 -0
  26. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/utils/__init__.py +0 -0
  27. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/utils/callables.py +0 -0
  28. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/utils/comparisons.py +0 -0
  29. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/utils/naming.py +0 -0
  30. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/utils/singleton.py +0 -0
  31. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/utils/strings.py +0 -0
  32. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/utils/utils.py +0 -0
  33. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/vavaprice/__init__.py +0 -0
  34. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vava_utils/vavaprice/vavaprice_helper.py +0 -0
  35. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vavacars_data_utils.egg-info/SOURCES.txt +0 -0
  36. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vavacars_data_utils.egg-info/dependency_links.txt +0 -0
  37. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/vavacars_data_utils.egg-info/requires.txt +0 -0
  38. {vavacars_data_utils-1.1.3 → vavacars_data_utils-1.2.0}/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.1.3
3
+ Version: 1.2.0
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
@@ -10,6 +10,15 @@ Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.6
12
12
  Description-Content-Type: text/markdown
13
+ Requires-Dist: pandas
14
+ Requires-Dist: PyYAML>=6.0
15
+ Requires-Dist: requests
16
+ Requires-Dist: sqlalchemy<2.0
17
+ Requires-Dist: redis
18
+ Requires-Dist: msal
19
+ Requires-Dist: pyodbc
20
+ Requires-Dist: unidecode
21
+ Requires-Dist: azure-communication-email
13
22
 
14
23
  # Vavacars
15
24
 
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = vavacars_data_utils
3
- version = 1.1.3
3
+ version = 1.2.0
4
4
  author = Vavacars Data Science Team
5
5
  author_email = acg@vava.cars
6
6
  description = Package with utils
@@ -1,5 +1,7 @@
1
1
  from sqlalchemy import create_engine, event, text
2
2
  from sqlalchemy.engine.url import URL
3
+ from sqlalchemy.engine.cursor import LegacyCursorResult
4
+
3
5
  from msal import ConfidentialClientApplication
4
6
  import urllib
5
7
  import struct
@@ -175,7 +177,7 @@ class SQL_Helper:
175
177
  chunksize (int): number of rows in each batch to be written at a time
176
178
  """
177
179
  if self.engine_type == "sql_server":
178
- tmp_table_name = f"##{table_name}_tmp_{random.randrange(0, 100)}" # This has to be a global table
180
+ tmp_table_name = f"##{table_name}_tmp_{random.randrange(0, 1000)}" # This has to be a global table
179
181
  create_sql_model = """
180
182
  SELECT TOP 0 * INTO dbo.{tmp_table_name} FROM dbo.{table_name}
181
183
  """
@@ -196,8 +198,11 @@ class SQL_Helper:
196
198
  WHERE {not_exists_part_cols}
197
199
  );
198
200
  """
201
+ col_names = [f'[{x}]' for x in df.columns]
202
+ upsert_cols = [f'[{x}]' for x in upsert_cols]
203
+
199
204
  elif self.engine_type == "mysql":
200
- tmp_table_name = f"{table_name}_tmp_{random.randrange(0, 100)}"
205
+ tmp_table_name = f"{table_name}_tmp_{random.randrange(0, 1000)}"
201
206
  create_sql_model = """
202
207
  CREATE TEMPORARY TABLE IF NOT EXISTS {tmp_table_name} LIKE {table_name};
203
208
  """
@@ -217,6 +222,9 @@ class SQL_Helper:
217
222
  WHERE {not_exists_part_cols}
218
223
  );
219
224
  """
225
+ col_names = [f'`{x}`' for x in df.columns]
226
+ upsert_cols = [f'`{x}`' for x in upsert_cols]
227
+
220
228
  else:
221
229
  raise NotImplementedError(f"Method not implemented for {self.engine_type} engine")
222
230
 
@@ -233,7 +241,6 @@ class SQL_Helper:
233
241
  df.to_sql(tmp_table_name, conn, if_exists="append", index=False, chunksize=chunksize)
234
242
 
235
243
  # UPDATE Existing
236
- col_names = list(df.columns)
237
244
  set_part = []
238
245
  for col in col_names:
239
246
  set_part.append(set_part_sql_model.format(col=col))
@@ -263,7 +270,10 @@ class SQL_Helper:
263
270
  not_exists_part_cols=not_exists_part_cols,
264
271
  )
265
272
  conn.execute(text(insert_sql))
266
-
273
+
274
+ # DROP tmp table
275
+ conn.execute(text(f"DROP TABLE {tmp_table_name};"))
276
+
267
277
  trans.commit()
268
278
  except Exception as ex:
269
279
  LOGGER.warning(str(ex))
@@ -331,7 +341,7 @@ class SQL_Helper:
331
341
  [f"{k} = {_value_to_str(row[k])}" if not pd.isna(row[k]) else f"{k} IS NULL" for k in keys]
332
342
  )
333
343
 
334
- exists = self._engine.execute(f"SELECT EXISTS (SELECT * FROM {table_name} WHERE {condition_exists})").first()[0]
344
+ exists = int(self._engine.execute(f"SELECT COUNT(1) FROM {table_name} WHERE {condition_exists}").first()[0])
335
345
 
336
346
  if exists:
337
347
  self.update_row(row, keys, table_name)
@@ -339,3 +349,7 @@ class SQL_Helper:
339
349
  self.write_row(row, table_name)
340
350
 
341
351
  return "UPDATE" if exists else "CREATE"
352
+
353
+
354
+ def execute(self, query: str) -> LegacyCursorResult:
355
+ return self._engine.execute(query)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vavacars-data-utils
3
- Version: 1.1.3
3
+ Version: 1.2.0
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
@@ -10,6 +10,15 @@ Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.6
12
12
  Description-Content-Type: text/markdown
13
+ Requires-Dist: pandas
14
+ Requires-Dist: PyYAML>=6.0
15
+ Requires-Dist: requests
16
+ Requires-Dist: sqlalchemy<2.0
17
+ Requires-Dist: redis
18
+ Requires-Dist: msal
19
+ Requires-Dist: pyodbc
20
+ Requires-Dist: unidecode
21
+ Requires-Dist: azure-communication-email
13
22
 
14
23
  # Vavacars
15
24