datamarket 0.9.9__py3-none-any.whl → 0.9.11__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.

Potentially problematic release.


This version of datamarket might be problematic. Click here for more details.

@@ -5,6 +5,7 @@ import logging
5
5
  from urllib.parse import quote_plus
6
6
 
7
7
  from sqlalchemy import DDL, create_engine, text
8
+ from sqlalchemy.dialects.postgresql import insert
8
9
  from sqlalchemy.exc import IntegrityError
9
10
  from sqlalchemy.orm import sessionmaker
10
11
 
@@ -117,6 +118,34 @@ class AlchemyInterface:
117
118
 
118
119
  self.session.rollback()
119
120
 
121
+ def upsert_alchemy_obj(self, alchemy_obj, index_elements, silent=False):
122
+ if not silent:
123
+ logger.info(f"upserting {alchemy_obj}")
124
+
125
+ primary_keys = list(
126
+ column.name for column in alchemy_obj.__table__.primary_key.columns.values()
127
+ )
128
+ obj_dict = {
129
+ column.name: getattr(alchemy_obj, column.name)
130
+ for column in alchemy_obj.__table__.columns
131
+ if column.name not in primary_keys
132
+ }
133
+
134
+ statement = (
135
+ insert(alchemy_obj.__table__)
136
+ .values(obj_dict)
137
+ .on_conflict_do_update(index_elements=index_elements, set_=obj_dict)
138
+ )
139
+
140
+ try:
141
+ self.session.execute(statement)
142
+ self.session.commit()
143
+ except IntegrityError:
144
+ if not silent:
145
+ logger.info(f"could not upsert {alchemy_obj}")
146
+
147
+ self.session.rollback()
148
+
120
149
  def reset_column(self, query_results, column_name):
121
150
  if not query_results:
122
151
  logger.warning("No objects to reset column for.")
@@ -113,7 +113,7 @@ class ClickhousePeer:
113
113
  if "clickhouse" in config:
114
114
  self.config = config["clickhouse"]
115
115
  self.credentials = {key: self.config[key] for key in ["user", "password", "host", "port"]}
116
-
116
+
117
117
  else:
118
118
  logger.warning("no clickhouse section in config")
119
119
 
@@ -122,7 +122,7 @@ class ClickhousePeer:
122
122
  return
123
123
 
124
124
  self.ensure_database_exists(database)
125
- self.config["database"] = database
125
+ self.config["database"] = self.credentials["database"] = database
126
126
  self.client = clickhouse_driver.Client(**self.credentials)
127
127
 
128
128
  def _check_connection(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: datamarket
3
- Version: 0.9.9
3
+ Version: 0.9.11
4
4
  Summary: Utilities that integrate advanced scraping knowledge into just one library.
5
5
  License: GPL-3.0-or-later
6
6
  Author: DataMarket
@@ -1,11 +1,11 @@
1
1
  datamarket/__init__.py,sha256=FHS77P9qNewKMoN-p0FLEUEC60oWIYup1QkbJZP4ays,12
2
2
  datamarket/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- datamarket/interfaces/alchemy.py,sha256=9Guzsdy8k8tBsODeozQhuuXshxf3dMgERPVhuumiP2M,5427
3
+ datamarket/interfaces/alchemy.py,sha256=5ZER9xiGj-7TqWrLiLUMk-rpiJFrqLffvqZzsqJdG5o,6388
4
4
  datamarket/interfaces/aws.py,sha256=7KLUeBxmPN7avEMPsu5HC_KHB1N7W6Anp2X8fo43mlw,2383
5
5
  datamarket/interfaces/drive.py,sha256=shbV5jpQVe_KPE-8Idx6Z9te5Zu1SmVfrvSAyd9ZIgE,2915
6
6
  datamarket/interfaces/ftp.py,sha256=o0KlJxtksbop9OjCiQRzyAa2IeG_ExVXagS6apwrAQo,1881
7
7
  datamarket/interfaces/nominatim.py,sha256=_gFJ04D-ju5xn3wuaGT5Pj5jhf4F5eINpxOpuQL_dIQ,3664
8
- datamarket/interfaces/peerdb.py,sha256=WKMMHlTGB8piDah-mpepWhgKFvgPZmhaVU3Ueh04oY0,22213
8
+ datamarket/interfaces/peerdb.py,sha256=2FrG7E5BAGxhwoxjjlPP7ceE7bmUpQi54jtTPtjQul0,22232
9
9
  datamarket/interfaces/proxy.py,sha256=updoOStKd8-nQBbxWbnD9eOt6HksnYi-5dQ0rEySf5M,3152
10
10
  datamarket/interfaces/tinybird.py,sha256=AYrcRGNOCoCt7ojilkWa27POROee9sTCwZ61GGHEPeM,2698
11
11
  datamarket/params/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -17,7 +17,7 @@ datamarket/utils/main.py,sha256=O6rX-65h4h0j2zs9dofdTPlly5reKDnvgLtTwbLmbWg,6529
17
17
  datamarket/utils/selenium.py,sha256=IMKlbLzXABFhACnWzhHmB0l2hhVzNwHGZwbo14nEewQ,2499
18
18
  datamarket/utils/soda.py,sha256=eZTXFbI1P3WoMd1MM-YjoVTpdjTcDSWuvBb7ViBMhSQ,941
19
19
  datamarket/utils/typer.py,sha256=FDF3l6gh3UlAFPsHCtesnekvct2rKz0oFn3uKARBQvE,814
20
- datamarket-0.9.9.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
21
- datamarket-0.9.9.dist-info/METADATA,sha256=0CjAFeYD6ybomculTyKLtQqMgD67YXeXsRQ3UtTz31A,6362
22
- datamarket-0.9.9.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
23
- datamarket-0.9.9.dist-info/RECORD,,
20
+ datamarket-0.9.11.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
21
+ datamarket-0.9.11.dist-info/METADATA,sha256=u6jfz9BqUNb4JdeVunWGwSVdsL2bzipytRBcxT-HzeQ,6363
22
+ datamarket-0.9.11.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
23
+ datamarket-0.9.11.dist-info/RECORD,,