tracktolib 0.59.0__py3-none-any.whl → 0.60.0__py3-none-any.whl

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.
tracktolib/pg/__init__.py CHANGED
@@ -12,5 +12,6 @@ from .query import (
12
12
  update_one,
13
13
  insert_pg,
14
14
  OnConflict,
15
+ update_many,
15
16
  )
16
17
  from .utils import iterate_pg, upsert_csv, safe_pg, safe_pg_context, PGError, PGException
tracktolib/pg/query.py CHANGED
@@ -17,7 +17,7 @@ V = TypeVar("V")
17
17
 
18
18
  def _get_insert_query(table: str, columns: Iterable[K], values: str) -> str:
19
19
  _columns = ", ".join(columns)
20
- return f"INSERT INTO {table} AS t ({_columns}) VALUES ( {values} )"
20
+ return f"INSERT INTO {table} AS t ({_columns}) VALUES ({values})"
21
21
 
22
22
 
23
23
  def _get_returning_query(query: str, returning: Iterable[K]) -> str:
@@ -217,7 +217,7 @@ def get_update_fields(
217
217
  fields.append(
218
218
  f"{_col} = ${_counter}"
219
219
  if k not in _merge_keys
220
- else f"{_col} = COALESCE(t.{_col}, jsonb_build_object()) || " f"${_counter}"
220
+ else f"{_col} = COALESCE(t.{_col}, JSONB_BUILD_OBJECT()) || " f"${_counter}"
221
221
  )
222
222
  counter += 1
223
223
  return ",\n".join(fields), values + where_values
@@ -264,7 +264,7 @@ class PGUpdateQuery(PGQuery):
264
264
  def values(self):
265
265
  if not self._values:
266
266
  raise ValueError("No values found")
267
- return self._values
267
+ return self._values if len(self.items) == 1 else super().values
268
268
 
269
269
  def _get_where_query(self) -> str:
270
270
  if self.where:
@@ -469,3 +469,18 @@ async def update_returning(
469
469
  )
470
470
  fn = conn.fetchval if len(returning_values or []) == 1 else conn.fetchrow
471
471
  return await fn(query.query, *args, *query.values)
472
+
473
+
474
+ async def update_many(
475
+ conn: _Connection,
476
+ table: str,
477
+ items: list[dict],
478
+ keys: list[str] | None = None,
479
+ start_from: int | None = None,
480
+ where: str | None = None,
481
+ merge_keys: list[str] | None = None,
482
+ ):
483
+ query = PGUpdateQuery(
484
+ table=table, items=items, start_from=start_from, where_keys=keys, where=where, merge_keys=merge_keys
485
+ )
486
+ await conn.executemany(query.query, query.values)
tracktolib/pg_utils.py CHANGED
@@ -70,7 +70,7 @@ def get_conflict_query(
70
70
  fields = ", ".join(f"{x} = COALESCE(EXCLUDED.{x}, t.{x})" for x in columns if x not in _ignore_columns)
71
71
  if merge_columns:
72
72
  fields = fields + ", " if fields else fields
73
- fields += ", ".join(f"{x} = COALESCE(t.{x}, jsonb_build_object()) || EXCLUDED.{x}" for x in merge_columns)
73
+ fields += ", ".join(f"{x} = COALESCE(t.{x}, JSONB_BUILD_OBJECT()) || EXCLUDED.{x}" for x in merge_columns)
74
74
  if not fields:
75
75
  raise ValueError("No fields set")
76
76
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tracktolib
3
- Version: 0.59.0
3
+ Version: 0.60.0
4
4
  Summary: Utility library for python
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -2,17 +2,17 @@ tracktolib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  tracktolib/api.py,sha256=ZLMgjH3Y8r3MpXc8m3IuZbzTj3fgrZKZORtSVgbuP-M,10221
3
3
  tracktolib/http_utils.py,sha256=c10JGmHaBw3VSDMYhz2dvVw2lo4PUAq1xMub74I7xDc,2625
4
4
  tracktolib/logs.py,sha256=xgfRDnviZPr9qinSOgab8neIWPv9Rj2xzDHnIBvWQcU,2201
5
- tracktolib/pg/__init__.py,sha256=j67e3B3gBbCHLD20QBybptmNdbbVMzNhZE6XjIPuKVo,349
6
- tracktolib/pg/query.py,sha256=MBYOTL9aLnYRBhaLy8-P6uGNXOmyluejNyUdt3Gfx5M,14504
5
+ tracktolib/pg/__init__.py,sha256=Ul_hgwvTXZvQBt7sHKi4ZI-0DDpnXmoFtmVkGRy-1J0,366
6
+ tracktolib/pg/query.py,sha256=PQ-vMTwsdvGpM82oE6moHVfD6eta61yPgB7IYRU8CVU,14973
7
7
  tracktolib/pg/utils.py,sha256=cL24KEt4SWJQ7LJPzaO3c8Xg0ZLmjhn22DtTWg86nwc,6324
8
8
  tracktolib/pg_sync.py,sha256=MKDaV7dYsRy59Y0EE5RGZL0DlZ-RUdBeaN9eSBwiQJg,6718
9
- tracktolib/pg_utils.py,sha256=VXPpy1jGq6aCgTlfFJDIrq6JDujR83JN5ZRiCi8Lx4E,2582
9
+ tracktolib/pg_utils.py,sha256=ArYNdf9qsdYdzGEWmev8tZpyx8_1jaGGdkfYkauM7UM,2582
10
10
  tracktolib/s3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  tracktolib/s3/minio.py,sha256=wMEjkSes9Fp39fD17IctALpD6zB2xwDRQEmO7Vzan3g,1387
12
12
  tracktolib/s3/s3.py,sha256=0HbSAPoaup5-W4LK54zRCjrQ5mr8OWR-N9WjW99Q4aw,5937
13
13
  tracktolib/tests.py,sha256=gKE--epQjgMZGXc5ydbl4zjOdmwztJS42UMV0p4hXEA,399
14
14
  tracktolib/utils.py,sha256=ysTBF9V35fVXQVBPk0kfE_84SGRxzrayqmg9RbtoJq4,5761
15
- tracktolib-0.59.0.dist-info/METADATA,sha256=DLi6sZ3qfyvPFWz06zWPOe8-eszB5Dv1CSIcIENi8B8,3777
16
- tracktolib-0.59.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
17
- tracktolib-0.59.0.dist-info/licenses/LICENSE,sha256=uUanH0X7SeZEPdsRTHegMSMTiIHMurt9H0jSwEwKE1Y,1081
18
- tracktolib-0.59.0.dist-info/RECORD,,
15
+ tracktolib-0.60.0.dist-info/METADATA,sha256=1qNZSiff8zDxWsmA-lgHQ45EnBufiABtkMy6EK4KNbM,3777
16
+ tracktolib-0.60.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
17
+ tracktolib-0.60.0.dist-info/licenses/LICENSE,sha256=uUanH0X7SeZEPdsRTHegMSMTiIHMurt9H0jSwEwKE1Y,1081
18
+ tracktolib-0.60.0.dist-info/RECORD,,