atdata 0.3.1b1__py3-none-any.whl → 0.3.2b1__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.
atdata/stores/_disk.py CHANGED
@@ -70,6 +70,9 @@ class LocalDiskStore:
70
70
  Raises:
71
71
  RuntimeError: If no shards were written.
72
72
  """
73
+ from atdata._logging import get_logger, log_operation
74
+
75
+ log = get_logger()
73
76
  shard_dir = self._root / prefix
74
77
  shard_dir.mkdir(parents=True, exist_ok=True)
75
78
 
@@ -85,17 +88,22 @@ class LocalDiskStore:
85
88
  # and not understood by wds.writer.ShardWriter / TarWriter.
86
89
  writer_kwargs = {k: v for k, v in kwargs.items() if k not in ("cache_local",)}
87
90
 
88
- with wds.writer.ShardWriter(
89
- shard_pattern,
90
- post=_track_shard,
91
- **writer_kwargs,
92
- ) as sink:
93
- for sample in ds.ordered(batch_size=None):
94
- sink.write(sample.as_wds)
95
-
96
- if not written_shards:
97
- raise RuntimeError(
98
- f"No shards written for prefix {prefix!r} in {self._root}"
91
+ with log_operation("LocalDiskStore.write_shards", prefix=prefix):
92
+ with wds.writer.ShardWriter(
93
+ shard_pattern,
94
+ post=_track_shard,
95
+ **writer_kwargs,
96
+ ) as sink:
97
+ for sample in ds.ordered(batch_size=None):
98
+ sink.write(sample.as_wds)
99
+
100
+ if not written_shards:
101
+ raise RuntimeError(
102
+ f"No shards written for prefix {prefix!r} in {self._root}"
103
+ )
104
+
105
+ log.info(
106
+ "LocalDiskStore.write_shards: wrote %d shard(s)", len(written_shards)
99
107
  )
100
108
 
101
109
  return written_shards
atdata/stores/_s3.py CHANGED
@@ -189,129 +189,151 @@ class S3DataStore:
189
189
  Raises:
190
190
  RuntimeError: If no shards were written.
191
191
  """
192
+ from atdata._logging import get_logger, log_operation
193
+
194
+ log = get_logger()
195
+
192
196
  new_uuid = str(uuid4())
193
197
  shard_pattern = f"{self.bucket}/{prefix}/data--{new_uuid}--%06d.tar"
194
198
 
195
199
  written_shards: list[str] = []
196
200
 
197
- # Manifest tracking state shared with the post callback
198
- manifest_builders: list = []
199
- current_builder: list = [None] # mutable ref for closure
200
- shard_counter: list[int] = [0]
201
-
202
- if manifest:
203
- from atdata.manifest import ManifestBuilder, ManifestWriter
204
-
205
- def _make_builder(shard_idx: int) -> ManifestBuilder:
206
- shard_id = f"{self.bucket}/{prefix}/data--{new_uuid}--{shard_idx:06d}"
207
- return ManifestBuilder(
208
- sample_type=ds.sample_type,
209
- shard_id=shard_id,
210
- schema_version=schema_version,
211
- source_job_id=source_job_id,
212
- parent_shards=parent_shards,
213
- pipeline_version=pipeline_version,
214
- )
215
-
216
- current_builder[0] = _make_builder(0)
217
-
218
- with TemporaryDirectory() as temp_dir:
219
- writer_opener, writer_post_orig = _create_s3_write_callbacks(
220
- credentials=self.credentials,
221
- temp_dir=temp_dir,
222
- written_shards=written_shards,
223
- fs=self._fs,
224
- cache_local=cache_local,
225
- add_s3_prefix=True,
226
- )
201
+ with log_operation(
202
+ "S3DataStore.write_shards",
203
+ prefix=prefix,
204
+ bucket=self.bucket,
205
+ manifest=manifest,
206
+ ):
207
+ # Manifest tracking state shared with the post callback
208
+ manifest_builders: list = []
209
+ current_builder: list = [None] # mutable ref for closure
210
+ shard_counter: list[int] = [0]
227
211
 
228
212
  if manifest:
213
+ from atdata.manifest import ManifestBuilder, ManifestWriter
214
+
215
+ def _make_builder(shard_idx: int) -> ManifestBuilder:
216
+ shard_id = (
217
+ f"{self.bucket}/{prefix}/data--{new_uuid}--{shard_idx:06d}"
218
+ )
219
+ return ManifestBuilder(
220
+ sample_type=ds.sample_type,
221
+ shard_id=shard_id,
222
+ schema_version=schema_version,
223
+ source_job_id=source_job_id,
224
+ parent_shards=parent_shards,
225
+ pipeline_version=pipeline_version,
226
+ )
227
+
228
+ current_builder[0] = _make_builder(0)
229
+
230
+ with TemporaryDirectory() as temp_dir:
231
+ writer_opener, writer_post_orig = _create_s3_write_callbacks(
232
+ credentials=self.credentials,
233
+ temp_dir=temp_dir,
234
+ written_shards=written_shards,
235
+ fs=self._fs,
236
+ cache_local=cache_local,
237
+ add_s3_prefix=True,
238
+ )
229
239
 
230
- def writer_post(p: str):
231
- # Finalize the current manifest builder when a shard completes
232
- builder = current_builder[0]
233
- if builder is not None:
234
- manifest_builders.append(builder)
235
- # Advance to the next shard's builder
236
- shard_counter[0] += 1
237
- current_builder[0] = _make_builder(shard_counter[0])
238
- # Call original post callback
239
- writer_post_orig(p)
240
- else:
241
- writer_post = writer_post_orig
242
-
243
- offset = 0
244
- with wds.writer.ShardWriter(
245
- shard_pattern,
246
- opener=writer_opener,
247
- post=writer_post,
248
- **kwargs,
249
- ) as sink:
250
- for sample in ds.ordered(batch_size=None):
251
- wds_dict = sample.as_wds
252
- sink.write(wds_dict)
253
-
254
- if manifest and current_builder[0] is not None:
255
- packed_size = len(wds_dict.get("msgpack", b""))
256
- current_builder[0].add_sample(
257
- key=wds_dict["__key__"],
258
- offset=offset,
259
- size=packed_size,
260
- sample=sample,
261
- )
262
- # Approximate tar entry: 512-byte header + data rounded to 512
263
- offset += 512 + packed_size + (512 - packed_size % 512) % 512
264
-
265
- # Finalize the last shard's builder (post isn't called for the last shard
266
- # until ShardWriter closes, but we handle it here for safety)
267
- if manifest and current_builder[0] is not None:
268
- builder = current_builder[0]
269
- if builder._rows: # Only if samples were added
270
- manifest_builders.append(builder)
271
-
272
- # Write all manifest files
273
- if manifest:
274
- for builder in manifest_builders:
275
- built = builder.build()
276
- writer = ManifestWriter(Path(temp_dir) / Path(built.shard_id))
277
- json_path, parquet_path = writer.write(built)
278
-
279
- # Upload manifest files to S3 alongside shards
280
- shard_id = built.shard_id
281
- json_key = f"{shard_id}.manifest.json"
282
- parquet_key = f"{shard_id}.manifest.parquet"
283
-
284
- if cache_local:
285
- import boto3
286
-
287
- s3_kwargs = {
288
- "aws_access_key_id": self.credentials["AWS_ACCESS_KEY_ID"],
289
- "aws_secret_access_key": self.credentials[
290
- "AWS_SECRET_ACCESS_KEY"
291
- ],
292
- }
293
- if "AWS_ENDPOINT" in self.credentials:
294
- s3_kwargs["endpoint_url"] = self.credentials["AWS_ENDPOINT"]
295
- s3_client = boto3.client("s3", **s3_kwargs)
296
-
297
- bucket_name = Path(shard_id).parts[0]
298
- json_s3_key = str(Path(*Path(json_key).parts[1:]))
299
- parquet_s3_key = str(Path(*Path(parquet_key).parts[1:]))
300
-
301
- with open(json_path, "rb") as f:
302
- s3_client.put_object(
303
- Bucket=bucket_name, Key=json_s3_key, Body=f.read()
240
+ if manifest:
241
+
242
+ def writer_post(p: str):
243
+ # Finalize the current manifest builder when a shard completes
244
+ builder = current_builder[0]
245
+ if builder is not None:
246
+ manifest_builders.append(builder)
247
+ # Advance to the next shard's builder
248
+ shard_counter[0] += 1
249
+ current_builder[0] = _make_builder(shard_counter[0])
250
+ # Call original post callback
251
+ writer_post_orig(p)
252
+ else:
253
+ writer_post = writer_post_orig
254
+
255
+ offset = 0
256
+ with wds.writer.ShardWriter(
257
+ shard_pattern,
258
+ opener=writer_opener,
259
+ post=writer_post,
260
+ **kwargs,
261
+ ) as sink:
262
+ for sample in ds.ordered(batch_size=None):
263
+ wds_dict = sample.as_wds
264
+ sink.write(wds_dict)
265
+
266
+ if manifest and current_builder[0] is not None:
267
+ packed_size = len(wds_dict.get("msgpack", b""))
268
+ current_builder[0].add_sample(
269
+ key=wds_dict["__key__"],
270
+ offset=offset,
271
+ size=packed_size,
272
+ sample=sample,
304
273
  )
305
- with open(parquet_path, "rb") as f:
306
- s3_client.put_object(
307
- Bucket=bucket_name, Key=parquet_s3_key, Body=f.read()
274
+ # Approximate tar entry: 512-byte header + data rounded to 512
275
+ offset += (
276
+ 512 + packed_size + (512 - packed_size % 512) % 512
308
277
  )
309
- else:
310
- self._fs.put(str(json_path), f"s3://{json_key}")
311
- self._fs.put(str(parquet_path), f"s3://{parquet_key}")
312
278
 
313
- if len(written_shards) == 0:
314
- raise RuntimeError("No shards written")
279
+ # Finalize the last shard's builder (post isn't called for the last shard
280
+ # until ShardWriter closes, but we handle it here for safety)
281
+ if manifest and current_builder[0] is not None:
282
+ builder = current_builder[0]
283
+ if builder._rows: # Only if samples were added
284
+ manifest_builders.append(builder)
285
+
286
+ # Write all manifest files
287
+ if manifest:
288
+ for builder in manifest_builders:
289
+ built = builder.build()
290
+ writer = ManifestWriter(Path(temp_dir) / Path(built.shard_id))
291
+ json_path, parquet_path = writer.write(built)
292
+
293
+ # Upload manifest files to S3 alongside shards
294
+ shard_id = built.shard_id
295
+ json_key = f"{shard_id}.manifest.json"
296
+ parquet_key = f"{shard_id}.manifest.parquet"
297
+
298
+ if cache_local:
299
+ import boto3
300
+
301
+ s3_kwargs = {
302
+ "aws_access_key_id": self.credentials[
303
+ "AWS_ACCESS_KEY_ID"
304
+ ],
305
+ "aws_secret_access_key": self.credentials[
306
+ "AWS_SECRET_ACCESS_KEY"
307
+ ],
308
+ }
309
+ if "AWS_ENDPOINT" in self.credentials:
310
+ s3_kwargs["endpoint_url"] = self.credentials[
311
+ "AWS_ENDPOINT"
312
+ ]
313
+ s3_client = boto3.client("s3", **s3_kwargs)
314
+
315
+ bucket_name = Path(shard_id).parts[0]
316
+ json_s3_key = str(Path(*Path(json_key).parts[1:]))
317
+ parquet_s3_key = str(Path(*Path(parquet_key).parts[1:]))
318
+
319
+ with open(json_path, "rb") as f:
320
+ s3_client.put_object(
321
+ Bucket=bucket_name, Key=json_s3_key, Body=f.read()
322
+ )
323
+ with open(parquet_path, "rb") as f:
324
+ s3_client.put_object(
325
+ Bucket=bucket_name,
326
+ Key=parquet_s3_key,
327
+ Body=f.read(),
328
+ )
329
+ else:
330
+ self._fs.put(str(json_path), f"s3://{json_key}")
331
+ self._fs.put(str(parquet_path), f"s3://{parquet_key}")
332
+
333
+ if len(written_shards) == 0:
334
+ raise RuntimeError("No shards written")
335
+
336
+ log.info("S3DataStore.write_shards: wrote %d shard(s)", len(written_shards))
315
337
 
316
338
  return written_shards
317
339
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atdata
3
- Version: 0.3.1b1
3
+ Version: 0.3.2b1
4
4
  Summary: A loose federation of distributed, typed datasets
5
5
  Author-email: Maxine Levesque <hello@maxine.science>, "Maxine @ Forecast Bio" <maxine@forecast.bio>
6
6
  License-File: LICENSE
@@ -1,27 +1,28 @@
1
1
  atdata/.gitignore,sha256=ROcLwaiURIGOAYGFpakac_WEeKS4hH4HxJuscfDGo2s,10
2
- atdata/__init__.py,sha256=4Md8CpLcwSlmQtogXnXl5khztgOIK_0AOkIp6CyrzgM,3392
2
+ atdata/__init__.py,sha256=C3ZBTNsredWXMpse_7GQPcVmdxwe-I1Qj8bsnCfGZSo,3462
3
3
  atdata/_cid.py,sha256=9EMJw_kcNchVF6bg5Pkl6ud99Xdm_fAEAxsgf1aV8A8,3500
4
4
  atdata/_exceptions.py,sha256=a2IzmTJqLyIgQ0RkW3KhaaaSDdQJGLoXzuHfEX0DfB4,5390
5
5
  atdata/_helpers.py,sha256=SBGrHBDPyg2ZALhVA9xLAWGERj9G7tySBx4Sn5fLvc0,2749
6
- atdata/_hf_api.py,sha256=yN8CvB6V64H3LMGbANGTMCToURsV3Th6pyhG9vMp79Y,25522
7
- atdata/_logging.py,sha256=Wj9MTe9xCP_awiQYfa7219Fb443Rkwu_jIqM-m2u2GA,2225
8
- atdata/_protocols.py,sha256=xjqsxPG6KLoq6kqZaoGbUEWXiK-gMqHjCoK_9ad8j2Q,9412
6
+ atdata/_hf_api.py,sha256=TgsTBoJpDFQuh-hNZyr4_vDXGgIKknbFUb4LIvoDkak,25928
7
+ atdata/_logging.py,sha256=nVL4t8jMVkRa8jSu5Kuy_dfYw-ULir3p2q957XfMG_M,3638
8
+ atdata/_protocols.py,sha256=M73mn0z1hc7DUWMBVVYlrYxlfOv8RKybUp3u0U8O7ek,10200
9
9
  atdata/_schema_codec.py,sha256=uje12k38EoHlkJsdtvZO14KpaAc1kzsd32QBCEOnBWE,14383
10
- atdata/_sources.py,sha256=A7HMkS_dqN5Sx7rG1nZsO1Laxozt3C65_P2Hiv41VXk,16624
10
+ atdata/_sources.py,sha256=90ZXIxfMTeXeQ-SZ0Psf683nWb6Weg6LhzZVZbuZaX4,16974
11
11
  atdata/_stub_manager.py,sha256=ciA46WKqczE1cBYE4CJZeE37vhlgShl_VpejAmAZFEQ,18195
12
12
  atdata/_type_utils.py,sha256=mhD0ywXgIEpVaAWpGVKGneUOh0cmI96zKz6g2O1bdg0,3762
13
- atdata/dataset.py,sha256=NCc1LGKCaa-miwk2P4g8b7iRb4-Kho0SujU58IQbSJ4,46800
13
+ atdata/dataset.py,sha256=PAZ7I5aP602udCOLdhySdp5BiwlIj0whDvSFUzn6RGs,50086
14
14
  atdata/lens.py,sha256=s6Ebeacth4cF_yCmnH4MuZ6TwQJmUmrFZ3eIh1jQSZI,9914
15
15
  atdata/promote.py,sha256=epFa4VXYbBigAXb_yYPiPQREPVAdmZ53Ab2sjSgybw8,6429
16
- atdata/repository.py,sha256=n4Rdpi07b2EEQhHGMOnWnV8shqQZ_BD7oEongJdhoto,10163
16
+ atdata/repository.py,sha256=EG6aq1ueNDcex_capChcfBQZMxWXvn2claOT08Cr2Uo,12307
17
17
  atdata/testing.py,sha256=bvnu8knCeLJYm4KzsU9jzw0yHYappgPk41UN-O2aLT4,10949
18
- atdata/atmosphere/__init__.py,sha256=C8YhxR9PHHUt5kDSfx9lFyMlyCPdQ1fhE6t_b7rYHfM,10024
19
- atdata/atmosphere/_types.py,sha256=UTRe-jgn0IPFcK1D00Y9A2GGPmQKABevHbebtRRXHHY,9571
18
+ atdata/atmosphere/__init__.py,sha256=shRBcACCW5I7vVmUpLjQMmLmf0tYptiBVfFr5v3KH0U,11175
19
+ atdata/atmosphere/_lexicon_types.py,sha256=8S0VWK0Jv2NlSuF4NsHFHjtvwjLWbF14bNiMudIl7-I,17921
20
+ atdata/atmosphere/_types.py,sha256=AB1MTnIwiGV24cPBNrGqH-UGf7pVCiFj2OAxrZfYljI,5407
20
21
  atdata/atmosphere/client.py,sha256=GZO6YX0SOtFr3G5y7Cpl9sckHsZfVeumUUXB7UVbW-4,17726
21
- atdata/atmosphere/lens.py,sha256=3d7GDoSsYLWJqeAe2T7WFbF59w7BWVc_B1HfwxVeeb4,9203
22
- atdata/atmosphere/records.py,sha256=1BPZjSJFL_O71SVdA-fKEEkmFdCnGkjRl88uy8XMvJ0,15815
23
- atdata/atmosphere/schema.py,sha256=GcKSeIGgnqvxmPWWU23Z2sHO78WJX9raKQWtYK-difs,7636
24
- atdata/atmosphere/store.py,sha256=WgMHoBUsuoM9DQ99ZmXJ3r-d8v3-qHDC6c3DMntHFBI,6273
22
+ atdata/atmosphere/lens.py,sha256=lfl8sARfInldc0sG4FZ98SctUI87tH82Z9DlXtcuyfk,9609
23
+ atdata/atmosphere/records.py,sha256=4zkFBrIrXnwy9BFV6FiSpR9vvKdb5788v2MBI2U_o-w,22442
24
+ atdata/atmosphere/schema.py,sha256=Tdri0EsJmK75p4JFckk_DFGWqCo2yzpTcYZAZQduNAQ,8618
25
+ atdata/atmosphere/store.py,sha256=U6S1jiYlgeF26Y2eeP5Ns_uv1aSKmqw6UqQrj_VjZdU,6314
25
26
  atdata/cli/__init__.py,sha256=_snwVqTt1qOc_cuXuEEhTTQyrD2nqd2TncZF8PCngPM,5798
26
27
  atdata/cli/diagnose.py,sha256=L1wY2xWOr-8XUd5PZngi4t_r72rQBa8YXsY71dxFA20,5483
27
28
  atdata/cli/infra.py,sha256=pL3Dg89fM7QZO4j4R037eZKJnHUnGf8uZinTvYEzfmA,8057
@@ -29,26 +30,18 @@ atdata/cli/inspect.py,sha256=YoJkWeXj1cHcOuDH9Z3btWMhiFNOG6JG3x-tScee-84,2019
29
30
  atdata/cli/preview.py,sha256=n90Eqj920JEi7nBl4NnbmEhZxKLzHoR2CfNI9lkbGuc,1735
30
31
  atdata/cli/schema.py,sha256=JwbQOBOPcvDTF6QgptuqZF5VEEMHrjxlj959q6E1DQY,2882
31
32
  atdata/index/__init__.py,sha256=dbJoHCgO3QbCAyilmEmdSsU7-RhifBa2N7h1L9Y8Gls,1329
32
- atdata/index/_entry.py,sha256=Cea1uAbURlBVn3vlrcLD5mtwIaqYoHjgb1GVsBqrszw,5264
33
- atdata/index/_index.py,sha256=XUGvSHEatqR1IHkVJ3F2YCJNPBppQ6tZzTMRfeBPpLQ,43726
33
+ atdata/index/_entry.py,sha256=vogpx6uVEzboWNF47U50tIJySsQtGTt8_63jt71-W70,5338
34
+ atdata/index/_index.py,sha256=gKw43HRM7hmStw4g4L24hj-CE4MXZDDdNz2x4S2l6s4,55003
34
35
  atdata/index/_schema.py,sha256=_-1RgFaYyBHeMhX_PzOCh8ZvtH92aGUWrOVCvMSVQSo,11604
35
- atdata/lexicons/__init__.py,sha256=rdkasqWXggLmvBQtLl-hjeVCvjxGmOZN5tjriJ88Ch4,3468
36
- atdata/lexicons/ac.foundation.dataset.arrayFormat.json,sha256=XVXqKRJKxuWOxlGVxIvMWQNqV5movjtn9JPtocf93Mo,701
37
- atdata/lexicons/ac.foundation.dataset.getLatestSchema.json,sha256=rtgPz5jZ2memj1HlWcqvF3xGTY0CBvM5ApzAhbtBBaU,2154
38
- atdata/lexicons/ac.foundation.dataset.lens.json,sha256=JG-I2WXlvsDDbAtO9CTcUPm57B-CuOeLVvjkhB6w5R4,3050
39
- atdata/lexicons/ac.foundation.dataset.record.json,sha256=dAJK7bKx_ng4AAlkdW8838GbMM12uxeonP89wvEHV4U,3174
40
- atdata/lexicons/ac.foundation.dataset.schema.json,sha256=9hQRXu9WEuX68ljOOG4XLfy1jVn7Y0uPTlhvBO5lmx0,4511
41
- atdata/lexicons/ac.foundation.dataset.schemaType.json,sha256=FK3YZuR1r_ozZJOpxfdyWm76xmKSjR9O8tvU1fLszn8,652
42
- atdata/lexicons/ac.foundation.dataset.storageBlobs.json,sha256=NjeRm72N59GanJyyJwaS3JSph7Cu6nZZHoinInh-n8Q,700
43
- atdata/lexicons/ac.foundation.dataset.storageExternal.json,sha256=iyZ1g20O7yG93cmwd6Q9aXrmR7tPsdq1H_GGt4Fb8oo,733
44
- atdata/lexicons/ndarray_shim.json,sha256=RvcOsRByfEFPQeJyaPu_QfG_gDYLA6I525-_yrRQ5g4,932
36
+ atdata/lexicons/__init__.py,sha256=ZfSsIrAcjYSoNM-VQZEvXK45-BZDcLe0skJ1Xlbrq9Q,3743
45
37
  atdata/local/__init__.py,sha256=699CAnyMUPCOIdaFDw-HStUUG_qj1rovWQuCkmrSx6U,1791
46
38
  atdata/local/_repo_legacy.py,sha256=zP_mh4p4-tJlPbu7kaNdMjNNb2S0e8HcuINPcuchQ7I,7542
47
- atdata/manifest/__init__.py,sha256=GB7V8OXLDAIuUX4JSBVL7_UV9CFALMiMfoeZvoNkug0,1309
39
+ atdata/manifest/__init__.py,sha256=0ytaV3G3BAGl1LwYPLsa8Vgbz99wInkx1ko2_w_P__Q,1473
48
40
  atdata/manifest/_aggregates.py,sha256=yabfBJtdVqOBWbkNqg9gp0BgpG62wi3QsGYlHgAAcFk,4198
49
41
  atdata/manifest/_builder.py,sha256=abU5cnRnIJZ_qf_BKr6-fMYU1HaJWkBVgmGL0WzRRzU,5252
50
42
  atdata/manifest/_fields.py,sha256=4Mm31HGb3qRwvp5Kn9Pp-4dX0tlNrQHxEDZJnBzFpos,5003
51
43
  atdata/manifest/_manifest.py,sha256=hPcURPjjPS5r3H_veVshwT6Qw-lC9eQll84Fos1xrCE,4852
44
+ atdata/manifest/_proxy.py,sha256=CslsC96ATLKM2r1oF5hrJCZMHXnS7c-eQOnfBTES3Rk,10484
52
45
  atdata/manifest/_query.py,sha256=25_0i60jWQhuMXsuuVLvSPS8v9pejTi5Bik99e2L99A,4641
53
46
  atdata/manifest/_writer.py,sha256=_g2YZof-GnN3nVLpAAE5fDmsV9GzlPYf2oa1BWYswxI,2206
54
47
  atdata/providers/__init__.py,sha256=LDziQc6Dc0QCfJcr_sDDqxArstDB0dSZHGgXCIIXbzo,848
@@ -58,10 +51,21 @@ atdata/providers/_postgres.py,sha256=BpbjiD9jifLO74aWttSq4JgVoecAypCoYzO_7DdAZuQ
58
51
  atdata/providers/_redis.py,sha256=VljNKSsLAX5H0NoOuqkuLQeQAFuuettq1MnpBJgnqhw,6054
59
52
  atdata/providers/_sqlite.py,sha256=urZWl7ErgKJJ1uBpnmmdkz7uWnrKGkJDIaTvAdyN7Uo,6486
60
53
  atdata/stores/__init__.py,sha256=juot7U0m8L5BauOvgsfq7mzdCYgSF5kzDjvSeo-KZ84,458
61
- atdata/stores/_disk.py,sha256=vHwNtE9lE1on3YTBJw5t_0tiwZjPhskNxCjpprK3sUI,3599
62
- atdata/stores/_s3.py,sha256=7KuIIZgqaiaNjULlKC3QPbLkKaj7rRVSYJt5zU_OEXI,12809
63
- atdata-0.3.1b1.dist-info/METADATA,sha256=wVRVllAuP9wa20G9a43T7YO1kf3iHVCQ27o5DCO7Mqo,7408
64
- atdata-0.3.1b1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
65
- atdata-0.3.1b1.dist-info/entry_points.txt,sha256=6-iQr1veSTq-ac94bLyfcyGHprrZWevPEd12BWX37tQ,39
66
- atdata-0.3.1b1.dist-info/licenses/LICENSE,sha256=Pz2eACSxkhsGfW9_iN60pgy-enjnbGTj8df8O3ebnQQ,16726
67
- atdata-0.3.1b1.dist-info/RECORD,,
54
+ atdata/stores/_disk.py,sha256=wP227sISh-XZPjf7rWJ6xn6aC7ezCE7hNanNYcdUwyg,3930
55
+ atdata/stores/_s3.py,sha256=8e1bxucqH7e8R0YM4tzUoNjdE7Lg_Hk4FjWnb5rUKJI,13892
56
+ atdata/lexicons/ac.foundation.dataset.arrayFormat.json,sha256=XVXqKRJKxuWOxlGVxIvMWQNqV5movjtn9JPtocf93Mo,701
57
+ atdata/lexicons/ac.foundation.dataset.getLatestSchema.json,sha256=rtgPz5jZ2memj1HlWcqvF3xGTY0CBvM5ApzAhbtBBaU,2154
58
+ atdata/lexicons/ac.foundation.dataset.lens.json,sha256=HZkoF1Y8lpgbuH_1xPKSMnWaa7FwNzdElW-d1BNMV24,3114
59
+ atdata/lexicons/ac.foundation.dataset.record.json,sha256=LH51KpYkiNzvLXIJVC2rUcmvSq2AkxDWEs_cvHDYXQY,3820
60
+ atdata/lexicons/ac.foundation.dataset.schema.json,sha256=9hQRXu9WEuX68ljOOG4XLfy1jVn7Y0uPTlhvBO5lmx0,4511
61
+ atdata/lexicons/ac.foundation.dataset.schemaType.json,sha256=FK3YZuR1r_ozZJOpxfdyWm76xmKSjR9O8tvU1fLszn8,652
62
+ atdata/lexicons/ac.foundation.dataset.storageBlobs.json,sha256=NmuFu-CN0JAGggZCr9RkRQXN-fkdNcM5AoNTM2AjeSU,1284
63
+ atdata/lexicons/ac.foundation.dataset.storageExternal.json,sha256=CvDMsWbC9cDYAC2qYCyQTW12J-J_MZ-NNLfsFXrZrDI,710
64
+ atdata/lexicons/ac.foundation.dataset.storageHttp.json,sha256=GcPx2Ar4mlLUlleNKSx41Bi0BW1meTTbpt0btdKJhsw,1269
65
+ atdata/lexicons/ac.foundation.dataset.storageS3.json,sha256=eGurvVTtOCM6Mz1lypsF9Gb2UjPbZPG8fPZj61c0eDE,1758
66
+ atdata/lexicons/ndarray_shim.json,sha256=RvcOsRByfEFPQeJyaPu_QfG_gDYLA6I525-_yrRQ5g4,932
67
+ atdata-0.3.2b1.dist-info/METADATA,sha256=c6IKzgnWxy84cXcaNTiFPJYLu38OS2454ug5G0DVsOY,7408
68
+ atdata-0.3.2b1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
69
+ atdata-0.3.2b1.dist-info/entry_points.txt,sha256=6-iQr1veSTq-ac94bLyfcyGHprrZWevPEd12BWX37tQ,39
70
+ atdata-0.3.2b1.dist-info/licenses/LICENSE,sha256=Pz2eACSxkhsGfW9_iN60pgy-enjnbGTj8df8O3ebnQQ,16726
71
+ atdata-0.3.2b1.dist-info/RECORD,,