ingestr 0.13.86__py3-none-any.whl → 0.13.87__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 ingestr might be problematic. Click here for more details.

@@ -38,6 +38,7 @@ def app_store(
38
38
  name=resource.name,
39
39
  primary_key=resource.primary_key,
40
40
  columns=resource.columns,
41
+ write_disposition="merge",
41
42
  )(client, app_ids, resource.report_name, start_date, end_date)
42
43
 
43
44
 
ingestr/src/buildinfo.py CHANGED
@@ -1 +1 @@
1
- version = "v0.13.86"
1
+ version = "v0.13.87"
@@ -75,7 +75,7 @@ def players_archives(players: List[str]) -> Iterator[List[TDataItem]]:
75
75
 
76
76
 
77
77
  @dlt.resource(
78
- write_disposition="append", columns={"end_time": {"data_type": "timestamp"}}
78
+ write_disposition="replace", columns={"end_time": {"data_type": "timestamp"}}
79
79
  )
80
80
  def players_games(
81
81
  players: List[str], start_month: str = None, end_month: str = None
@@ -30,7 +30,7 @@ def klaviyo_source(api_key: str, start_date: TAnyDateTime) -> Iterable[DltResour
30
30
  start_date_obj = ensure_pendulum_datetime(start_date)
31
31
  client = KlaviyoClient(api_key)
32
32
 
33
- @dlt.resource(write_disposition="append", primary_key="id", parallelized=True)
33
+ @dlt.resource(write_disposition="merge", primary_key="id", parallelized=True)
34
34
  def events(
35
35
  datetime=dlt.sources.incremental(
36
36
  "datetime",
@@ -135,7 +135,7 @@ def klaviyo_source(api_key: str, start_date: TAnyDateTime) -> Iterable[DltResour
135
135
  ) -> Iterable[TDataItem]:
136
136
  yield from client.fetch_catalog_item(create_client(), updated.start_value)
137
137
 
138
- @dlt.resource(write_disposition="append", primary_key="id", parallelized=True)
138
+ @dlt.resource(write_disposition="merge", primary_key="id", parallelized=True)
139
139
  def forms(
140
140
  updated_at=dlt.sources.incremental(
141
141
  "updated_at",
@@ -162,7 +162,7 @@ def klaviyo_source(api_key: str, start_date: TAnyDateTime) -> Iterable[DltResour
162
162
  ) -> Iterable[TDataItem]:
163
163
  yield from client.fetch_lists(create_client(), updated.start_value)
164
164
 
165
- @dlt.resource(write_disposition="append", primary_key="id", parallelized=True)
165
+ @dlt.resource(write_disposition="merge", primary_key="id", parallelized=True)
166
166
  def images(
167
167
  updated_at=dlt.sources.incremental(
168
168
  "updated_at",
@@ -188,7 +188,7 @@ def klaviyo_source(api_key: str, start_date: TAnyDateTime) -> Iterable[DltResour
188
188
  ) -> Iterable[TDataItem]:
189
189
  yield from client.fetch_segments(create_client(), updated.start_value)
190
190
 
191
- @dlt.resource(write_disposition="append", primary_key="id", parallelized=True)
191
+ @dlt.resource(write_disposition="merge", primary_key="id", parallelized=True)
192
192
  def flows(
193
193
  updated=dlt.sources.incremental(
194
194
  "updated",
@@ -203,7 +203,7 @@ def klaviyo_source(api_key: str, start_date: TAnyDateTime) -> Iterable[DltResour
203
203
  for start, end in intervals:
204
204
  yield lambda s=start, e=end: client.fetch_flows(create_client(), s, e)
205
205
 
206
- @dlt.resource(write_disposition="append", primary_key="id", parallelized=True)
206
+ @dlt.resource(write_disposition="merge", primary_key="id", parallelized=True)
207
207
  def templates(
208
208
  updated=dlt.sources.incremental(
209
209
  "updated",
@@ -101,7 +101,7 @@ def mongodb_collection(
101
101
  write_disposition: Optional[str] = dlt.config.value,
102
102
  parallel: Optional[bool] = False,
103
103
  limit: Optional[int] = None,
104
- chunk_size: Optional[int] = 10000,
104
+ chunk_size: Optional[int] = 1000,
105
105
  data_item_format: Optional[TDataItemFormat] = "object",
106
106
  filter_: Optional[Dict[str, Any]] = None,
107
107
  projection: Optional[Union[Mapping[str, Any], Iterable[str]]] = dlt.config.value,
@@ -518,21 +518,42 @@ class CollectionAggregationLoader(CollectionLoader):
518
518
  if limit and limit > 0:
519
519
  pipeline.append({"$limit": limit})
520
520
 
521
- print("pipeline", pipeline)
522
- # Execute aggregation
523
- cursor = self.collection.aggregate(pipeline, allowDiskUse=True)
524
-
525
- # Process results in chunks
526
- while docs_slice := list(islice(cursor, self.chunk_size)):
527
- res = map_nested_in_place(convert_mongo_objs, docs_slice)
528
- print("res", res)
529
- if len(res) > 0 and "_id" in res[0] and isinstance(res[0]["_id"], dict):
530
- yield dlt.mark.with_hints(
531
- res,
532
- dlt.mark.make_hints(columns={"_id": {"data_type": "json"}}),
533
- )
534
- else:
535
- yield res
521
+ # Add maxTimeMS to prevent hanging
522
+ cursor = self.collection.aggregate(
523
+ pipeline,
524
+ allowDiskUse=True,
525
+ batchSize=min(self.chunk_size, 101),
526
+ maxTimeMS=30000 # 30 second timeout
527
+ )
528
+
529
+ docs_buffer = []
530
+ try:
531
+ for doc in cursor:
532
+ docs_buffer.append(doc)
533
+
534
+ if len(docs_buffer) >= self.chunk_size:
535
+ res = map_nested_in_place(convert_mongo_objs, docs_buffer)
536
+ if len(res) > 0 and "_id" in res[0] and isinstance(res[0]["_id"], dict):
537
+ yield dlt.mark.with_hints(
538
+ res,
539
+ dlt.mark.make_hints(columns={"_id": {"data_type": "json"}}),
540
+ )
541
+ else:
542
+ yield res
543
+ docs_buffer = []
544
+
545
+ # Yield any remaining documents
546
+ if docs_buffer:
547
+ res = map_nested_in_place(convert_mongo_objs, docs_buffer)
548
+ if len(res) > 0 and "_id" in res[0] and isinstance(res[0]["_id"], dict):
549
+ yield dlt.mark.with_hints(
550
+ res,
551
+ dlt.mark.make_hints(columns={"_id": {"data_type": "json"}}),
552
+ )
553
+ else:
554
+ yield res
555
+ finally:
556
+ cursor.close()
536
557
 
537
558
 
538
559
  class CollectionAggregationLoaderParallel(CollectionAggregationLoader):
@@ -9,9 +9,11 @@ from .helpers import (
9
9
  _paginate,
10
10
  convert_timestamps_to_iso,
11
11
  process_customer_with_nested_resources_async,
12
+ create_project_resource,
12
13
  )
13
14
 
14
15
 
16
+
15
17
  @dlt.source(name="revenuecat", max_table_nesting=0)
16
18
  def revenuecat_source(
17
19
  api_key: str,
@@ -22,10 +24,10 @@ def revenuecat_source(
22
24
 
23
25
  Args:
24
26
  api_key: RevenueCat API v2 secret key with Bearer token format
25
- project_id: RevenueCat project ID (required for customers, products, subscriptions, purchases)
27
+ project_id: RevenueCat project ID (required for customers, products, entitlements, offerings, subscriptions, purchases)
26
28
 
27
29
  Returns:
28
- Iterable of DLT resources for customers, products, purchases, subscriptions, and projects
30
+ Iterable of DLT resources for customers, products, entitlements, offerings, purchases, subscriptions, and projects
29
31
  """
30
32
 
31
33
  @dlt.resource(name="projects", primary_key="id", write_disposition="merge")
@@ -85,19 +87,22 @@ def revenuecat_source(
85
87
  # Yield each processed customer
86
88
  yield from process_customers_sync()
87
89
 
88
- @dlt.resource(name="products", primary_key="id", write_disposition="merge")
89
- def products() -> Iterator[Dict[str, Any]]:
90
- """Get list of products."""
91
- if project_id is None:
92
- raise ValueError("project_id is required for products resource")
93
- endpoint = f"/projects/{project_id}/products"
94
-
95
- for product in _paginate(api_key, endpoint):
96
- product = convert_timestamps_to_iso(product, ["created_at", "updated_at"])
97
- yield product
90
+ # Create project-dependent resources dynamically
91
+ project_resources = []
92
+ resource_names = ["products", "entitlements", "offerings"]
93
+
94
+ for resource_name in resource_names:
95
+ @dlt.resource(name=resource_name, primary_key="id", write_disposition="merge")
96
+ def create_resource(resource_name=resource_name) -> Iterator[Dict[str, Any]]:
97
+ """Get list of project resource."""
98
+ yield from create_project_resource(resource_name, api_key, project_id)
99
+
100
+ # Set the function name for better identification
101
+ create_resource.__name__ = resource_name
102
+ project_resources.append(create_resource)
98
103
 
99
104
  return [
100
105
  projects,
101
106
  customers,
102
- products,
107
+ *project_resources,
103
108
  ]
@@ -260,3 +260,32 @@ async def process_customer_with_nested_resources_async(
260
260
  await asyncio.gather(*tasks)
261
261
 
262
262
  return customer
263
+
264
+
265
+ def create_project_resource(
266
+ resource_name: str,
267
+ api_key: str,
268
+ project_id: str = None,
269
+ timestamp_fields: List[str] = None,
270
+ ) -> Iterator[Dict[str, Any]]:
271
+ """
272
+ Helper function to create DLT resources for project-dependent endpoints.
273
+
274
+ Args:
275
+ resource_name: Name of the resource (e.g., 'products', 'entitlements', 'offerings')
276
+ api_key: RevenueCat API key
277
+ project_id: RevenueCat project ID
278
+ timestamp_fields: List of timestamp fields to convert to ISO format
279
+
280
+ Returns:
281
+ Iterator of resource data
282
+ """
283
+ if project_id is None:
284
+ raise ValueError(f"project_id is required for {resource_name} resource")
285
+
286
+ endpoint = f"/projects/{project_id}/{resource_name}"
287
+ default_timestamp_fields = timestamp_fields or ["created_at", "updated_at"]
288
+
289
+ for item in _paginate(api_key, endpoint):
290
+ item = convert_timestamps_to_iso(item, default_timestamp_fields)
291
+ yield item
@@ -669,7 +669,7 @@ def shopify_source(
669
669
  params["updated_at_max"] = updated_at.end_value.isoformat()
670
670
  yield from client.get_pages("customers", params)
671
671
 
672
- @dlt.resource(primary_key="id", write_disposition="append")
672
+ @dlt.resource(primary_key="id", write_disposition="merge")
673
673
  def events(
674
674
  created_at: dlt.sources.incremental[
675
675
  pendulum.DateTime
ingestr/src/sources.py CHANGED
@@ -3377,6 +3377,8 @@ class RevenueCatSource:
3377
3377
  if table not in [
3378
3378
  "customers",
3379
3379
  "products",
3380
+ "entitlements",
3381
+ "offerings",
3380
3382
  "subscriptions",
3381
3383
  "purchases",
3382
3384
  "projects",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ingestr
3
- Version: 0.13.86
3
+ Version: 0.13.87
4
4
  Summary: ingestr is a command-line application that ingests data from various sources and stores them in any database.
5
5
  Project-URL: Homepage, https://github.com/bruin-data/ingestr
6
6
  Project-URL: Issues, https://github.com/bruin-data/ingestr/issues
@@ -2,7 +2,7 @@ ingestr/conftest.py,sha256=OE2yxeTCosS9CUFVuqNypm-2ftYvVBeeq7egm3878cI,1981
2
2
  ingestr/main.py,sha256=qoWHNcHh0-xVnyQxbQ-SKuTxPb1RNV3ENkCpqO7CLrk,26694
3
3
  ingestr/src/.gitignore,sha256=8cX1AZTSI0TcdZFGTmS_oyBjpfCzhOEt0DdAo2dFIY8,203
4
4
  ingestr/src/blob.py,sha256=UUWMjHUuoR9xP1XZQ6UANQmnMVyDx3d0X4-2FQC271I,2138
5
- ingestr/src/buildinfo.py,sha256=Sau1WKfATfGbfhYBf36HIMjBxy3Ri3NHPH1bcv0qOvU,21
5
+ ingestr/src/buildinfo.py,sha256=1rVIau-By8hnJDfUNsHKA3_2BZoQHq9yn0wY8bWtb3U,21
6
6
  ingestr/src/destinations.py,sha256=M2Yni6wiWcrvZ8EPJemidqxN156l0rehgCc7xuil7mo,22840
7
7
  ingestr/src/errors.py,sha256=Ufs4_DfE77_E3vnA1fOQdi6cmuLVNm7_SbFLkL1XPGk,686
8
8
  ingestr/src/factory.py,sha256=hC5E_XgrgTHMqwqPc6ihUYvRGTGMTzdPfQhrgPyD0tY,6945
@@ -11,7 +11,7 @@ ingestr/src/http_client.py,sha256=bxqsk6nJNXCo-79gW04B53DQO-yr25vaSsqP0AKtjx4,73
11
11
  ingestr/src/loader.py,sha256=9NaWAyfkXdqAZSS-N72Iwo36Lbx4PyqIfaaH1dNdkFs,1712
12
12
  ingestr/src/partition.py,sha256=BrIP6wFJvyR7Nus_3ElnfxknUXeCipK_E_bB8kZowfc,969
13
13
  ingestr/src/resource.py,sha256=ZqmZxFQVGlF8rFPhBiUB08HES0yoTj8sZ--jKfaaVps,1164
14
- ingestr/src/sources.py,sha256=CMXQRJlbHcGwKtrD-nt_ov-UlAn5UOQe08cdc7Wzel4,125068
14
+ ingestr/src/sources.py,sha256=YtqbkrF_z5n6Ccmj6kiYgjGMPL08r_1vc9YOvNhXlcw,125121
15
15
  ingestr/src/table_definition.py,sha256=REbAbqdlmUMUuRh8nEQRreWjPVOQ5ZcfqGkScKdCrmk,390
16
16
  ingestr/src/time.py,sha256=H_Fk2J4ShXyUM-EMY7MqCLZQhlnZMZvO952bmZPc4yE,254
17
17
  ingestr/src/version.py,sha256=J_2xgZ0mKlvuHcjdKCx2nlioneLH0I47JiU_Slr_Nwc,189
@@ -22,7 +22,7 @@ ingestr/src/applovin/__init__.py,sha256=X_YCLppPrnL8KXfYWICE_uDfMzHHH3JZ-DBGZ1Rl
22
22
  ingestr/src/applovin_max/__init__.py,sha256=fxXqsIibJarp5NOGe08G964HftwLDymTtYS_LqPJht4,3315
23
23
  ingestr/src/appsflyer/__init__.py,sha256=QoK-B3cYYMD3bqzQaLWNH6FkJyjRbzRkBF2n6urxubs,8071
24
24
  ingestr/src/appsflyer/client.py,sha256=E6xPW4KlbBnQZ0K4eq2Xgb3AmGrtrzIX9bX8EnQr-D4,3615
25
- ingestr/src/appstore/__init__.py,sha256=3P4VZH2WJF477QjW19jMTwu6L8DXcLkYSdutnvp3AmM,4742
25
+ ingestr/src/appstore/__init__.py,sha256=np8AkAIVZPnJt2pjHYgzEX9UhbxseMW9MKVnJ8qowUA,4781
26
26
  ingestr/src/appstore/client.py,sha256=qY9nBZPNIAveR-Dn-pW141Mr9xi9LMOz2HHfnfueHvE,3975
27
27
  ingestr/src/appstore/errors.py,sha256=KVpPWth5qlv6_QWEm3aJAt3cdf6miPJs0UDzxknx2Ms,481
28
28
  ingestr/src/appstore/models.py,sha256=tW1JSATHBIxZ6a77-RTCBQptJk6iRC8fWcmx4NW7SVA,1716
@@ -33,7 +33,7 @@ ingestr/src/asana_source/helpers.py,sha256=PukcdDQWIGqnGxuuobbLw4hUy4-t6gxXg_Xyw
33
33
  ingestr/src/asana_source/settings.py,sha256=-2tpdkwh04RvLKFvwQodnFLYn9MaxOO1hsebGnDQMTU,2829
34
34
  ingestr/src/attio/__init__.py,sha256=CLejJjp5vGkt6r18nfNNZ-Xjc1SZgQ5IlcBW5XFQR90,3243
35
35
  ingestr/src/attio/helpers.py,sha256=fCySmG5E6Iyh3Nm9a-HGbHNedxPH_2_otXYMTQsCibw,2185
36
- ingestr/src/chess/__init__.py,sha256=y0Q8aKBigeKf3N7wuB_gadMQjVJzBPUT8Jhp1ObEWjk,6812
36
+ ingestr/src/chess/__init__.py,sha256=mvMLZdexSgDAHIk7Ps18sOrCVGCYKq35PrG2Etgj_P8,6813
37
37
  ingestr/src/chess/helpers.py,sha256=v1HTImOMjAF7AzZUPDIuHu00e7ut0o5y1kWcVYo4QZw,549
38
38
  ingestr/src/chess/settings.py,sha256=p0RlCGgtXUacPDEvZmwzSWmzX0Apj1riwfz-nrMK89k,158
39
39
  ingestr/src/clickup/__init__.py,sha256=uvfAqNturT4bMvU4NS3E8BdL6nvDFzNuh7bMlih8HJk,2547
@@ -84,7 +84,7 @@ ingestr/src/kafka/__init__.py,sha256=QUHsGmdv5_E-3z0GDHXvbk39puwuGDBsyYSDhvbA89E
84
84
  ingestr/src/kafka/helpers.py,sha256=V9WcVn3PKnEpggArHda4vnAcaV8VDuh__dSmRviJb5Y,7502
85
85
  ingestr/src/kinesis/__init__.py,sha256=YretSz4F28tbkcPhd55mBp2Xk7XE9unyWx0nmvl8iEc,6235
86
86
  ingestr/src/kinesis/helpers.py,sha256=SO2cFmWNGcykUYmjHdfxWsOQSkLQXyhFtfWnkcUOM0s,3152
87
- ingestr/src/klaviyo/__init__.py,sha256=o_noUgbxLk36s4f9W56_ibPorF0n7kVapPUlV0p-jfA,7875
87
+ ingestr/src/klaviyo/__init__.py,sha256=Tg5EqAgsEK8xM5RO2im8vFMzPGc7yDpSCUkprGjMooI,7870
88
88
  ingestr/src/klaviyo/client.py,sha256=tPj79ia7AW0ZOJhzlKNPCliGbdojRNwUFp8HvB2ym5s,7434
89
89
  ingestr/src/klaviyo/helpers.py,sha256=_i-SHffhv25feLDcjy6Blj1UxYLISCwVCMgGtrlnYHk,496
90
90
  ingestr/src/linear/__init__.py,sha256=rufjwhLip7RK6j2DpFzCRQEvA_oOqgPEEdREJkc53_U,12295
@@ -94,8 +94,8 @@ ingestr/src/linkedin_ads/dimension_time_enum.py,sha256=EmHRdkFyTAfo4chGjThrwqffW
94
94
  ingestr/src/linkedin_ads/helpers.py,sha256=eUWudRVlXl4kqIhfXQ1eVsUpZwJn7UFqKSpnbLfxzds,4498
95
95
  ingestr/src/mixpanel/__init__.py,sha256=s1QtqMP0BTGW6YtdCabJFWj7lEn7KujzELwGpBOQgfs,1796
96
96
  ingestr/src/mixpanel/client.py,sha256=c_reouegOVYBOwHLfgYFwpmkba0Sxro1Zkml07NCYf0,3602
97
- ingestr/src/mongodb/__init__.py,sha256=5KNdR2mxJoHSOU1pt-FIJNg9HT4aHPwl6mI31xPBQLA,7487
98
- ingestr/src/mongodb/helpers.py,sha256=VMGKkSN6FIQ4l-4TUqoc-Ou7r52_zPXuLF33ZN23B_I,30881
97
+ ingestr/src/mongodb/__init__.py,sha256=wu3KJ3VH5FF67gctJqm4T3ZTdBOQam1u6xuFBohq7bs,7486
98
+ ingestr/src/mongodb/helpers.py,sha256=JyZvi93_WFUowctEqOdYHNnVOWXcDdAhae-25W3jvLA,31680
99
99
  ingestr/src/notion/__init__.py,sha256=36wUui8finbc85ObkRMq8boMraXMUehdABN_AMe_hzA,1834
100
100
  ingestr/src/notion/settings.py,sha256=MwQVZViJtnvOegfjXYc_pJ50oUYgSRPgwqu7TvpeMOA,82
101
101
  ingestr/src/notion/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -113,11 +113,11 @@ ingestr/src/pipedrive/helpers/__init__.py,sha256=UX1K_qnGXB0ShtnBOfp2XuVbK8RRoCK
113
113
  ingestr/src/pipedrive/helpers/custom_fields_munger.py,sha256=rZ4AjdITHfJE2NNomCR7vMBS1KnWpEGVF6fADwsIHUE,4488
114
114
  ingestr/src/pipedrive/helpers/pages.py,sha256=Klpjw2OnMuhzit3PpiHKsfzGcJ3rQPSQBl3HhE3-6eA,3358
115
115
  ingestr/src/quickbooks/__init__.py,sha256=cZUuVCOTGPHTscRj6i0DytO63_fWF-4ieMxoU4PcyTg,3727
116
- ingestr/src/revenuecat/__init__.py,sha256=HrI4Ht8PWTHiBYphAO26tK-2S-z1FuSIq97wu7erPIw,3785
117
- ingestr/src/revenuecat/helpers.py,sha256=ntdorpAdPoPBcga1fifFeAl07rKZ-CnF5u5QiFdHbW8,8664
116
+ ingestr/src/revenuecat/__init__.py,sha256=2UBEkIPlsuJKq0TYR-LSsLk2F4ubcQ6g_H4Fw1I8zDQ,4041
117
+ ingestr/src/revenuecat/helpers.py,sha256=QpgszejLEBsn9Km-DNTidPPnapBesDCnweg1IPOgoRw,9635
118
118
  ingestr/src/salesforce/__init__.py,sha256=2hik5pRrxVODdDTlUEMoyccNC07zozjnxkMHcjMT1qA,4558
119
119
  ingestr/src/salesforce/helpers.py,sha256=QTdazBt-qRTBbCQMZnyclIaDQFmBixBy_RDKD00Lt-8,2492
120
- ingestr/src/shopify/__init__.py,sha256=dp6Ybk5LIKA5suzVt923v5LzHz5rMUuDfhjTNPqSjAc,62603
120
+ ingestr/src/shopify/__init__.py,sha256=RzSSG93g-Qlkz6TAxi1XasFDdxxtVXIo53ZTtjGczW4,62602
121
121
  ingestr/src/shopify/exceptions.py,sha256=BhV3lIVWeBt8Eh4CWGW_REFJpGCzvW6-62yZrBWa3nQ,50
122
122
  ingestr/src/shopify/helpers.py,sha256=NfHD6lWXe88ybR0ri-FCQuh2Vf8l5WG0a0FVjmdoSC4,6296
123
123
  ingestr/src/shopify/settings.py,sha256=StY0EPr7wFJ7KzRRDN4TKxV0_gkIS1wPj2eR4AYSsDk,141
@@ -157,8 +157,8 @@ ingestr/testdata/merge_expected.csv,sha256=DReHqWGnQMsf2PBv_Q2pfjsgvikYFnf1zYcQZ
157
157
  ingestr/testdata/merge_part1.csv,sha256=Pw8Z9IDKcNU0qQHx1z6BUf4rF_-SxKGFOvymCt4OY9I,185
158
158
  ingestr/testdata/merge_part2.csv,sha256=T_GiWxA81SN63_tMOIuemcvboEFeAmbKc7xRXvL9esw,287
159
159
  ingestr/tests/unit/test_smartsheets.py,sha256=eiC2CCO4iNJcuN36ONvqmEDryCA1bA1REpayHpu42lk,5058
160
- ingestr-0.13.86.dist-info/METADATA,sha256=EYqj1B1PK2F2EGHKmzuoxvQRSdXZThmlL0UutcFxzeo,15182
161
- ingestr-0.13.86.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
162
- ingestr-0.13.86.dist-info/entry_points.txt,sha256=oPJy0KBnPWYjDtP1k8qwAihcTLHSZokSQvRAw_wtfJM,46
163
- ingestr-0.13.86.dist-info/licenses/LICENSE.md,sha256=cW8wIhn8HFE-KLStDF9jHQ1O_ARWP3kTpk_-eOccL24,1075
164
- ingestr-0.13.86.dist-info/RECORD,,
160
+ ingestr-0.13.87.dist-info/METADATA,sha256=JVXcUZ0Q-y74Les20MSztmp0u_d6Y0M1XHpW6z8v-T4,15182
161
+ ingestr-0.13.87.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
162
+ ingestr-0.13.87.dist-info/entry_points.txt,sha256=oPJy0KBnPWYjDtP1k8qwAihcTLHSZokSQvRAw_wtfJM,46
163
+ ingestr-0.13.87.dist-info/licenses/LICENSE.md,sha256=cW8wIhn8HFE-KLStDF9jHQ1O_ARWP3kTpk_-eOccL24,1075
164
+ ingestr-0.13.87.dist-info/RECORD,,