Source code for tiled.client.awkward

import awkward

from ..serialization.awkward import from_zipped_buffers, to_zipped_buffers
from ..structures.awkward import project_form
from .base import BaseClient
from .utils import export_util, handle_error


[docs]class AwkwardClient(BaseClient): def __repr__(self): # TODO Include some summary of the structure. Probably # lift __repr__ code from awkward itself here. return f"<{type(self).__name__}>"
[docs] def write(self, container): structure = self.structure() components = (structure.form, structure.length, container) handle_error( self.context.http_client.put( self.item["links"]["full"], content=bytes(to_zipped_buffers(components, {})), headers={"Content-Type": "application/zip"}, ) )
[docs] def read(self, slice=...): structure = self.structure() form = awkward.forms.from_dict(structure.form) typetracer, report = awkward.typetracer.typetracer_with_report( form, ) proxy_array = awkward.Array(typetracer) awkward.typetracer.touch_data(proxy_array[slice]) form_keys_touched = set(report.data_touched) projected_form = project_form(form, form_keys_touched) # The order is not important, but sort so that the request is deterministic. form_keys = sorted(list(form_keys_touched)) content = handle_error( self.context.http_client.post( self.item["links"]["buffers"], headers={"Accept": "application/zip"}, json=form_keys, ) ).read() container = from_zipped_buffers(content, projected_form, structure.length) projected_array = awkward.from_buffers( projected_form, structure.length, container, allow_noncanonical_form=True, ) return projected_array[slice]
def __getitem__(self, slice): return self.read(slice=slice)
[docs] def export(self, filepath, *, format=None): """ Download data in some format and write to a file. Parameters ---------- file: str or buffer Filepath or writeable buffer. format : str, optional If format is None and `file` is a filepath, the format is inferred from the name, like 'table.csv' implies format="text/csv". The format may be given as a file extension ("csv") or a media type ("text/csv"). Examples -------- Export as Parquet. >>> a.export("awkward.parquet") Export as JSON. >>> a.export("awkward.json") """ return export_util( filepath, format, self.context.http_client.get, self.item["links"]["full"], params={}, )