Skip to main content

a treatment for PANDAS

Project description

antibiotics

NamedTuple / dataclasses <-> delimited text

"The best treatment for acute episodes of PANDAS is to treat the strep infection causing the symptoms, if it is still present, with antibiotics."
-- National Institute of Mental Health

antibiotics is a minimalist type-driven serialization/deserialization library inspired by Serde and cassava.

It uses type annotations to automatically read and write NamedTuple or @dataclass objects to or from delimited text files.

Out of the box, it only knows about Python scalar types and typing.Unions of them (including typing.Optional), but an extension mechanism for arbitrary type-directed serialization and deserialization is provided through the type_serde_ext argument to the Delimited constructor - see examples/advanced.py.

For Union types, serialization is driven by the runtime type, and deserialization is attempted in the order of declaration of the Union arguments - except that NoneType is tried first if present, to preserve the expected behavior when deserializing null/missing values of types whose deserializers do not throw when receiving '' as an argument.

A type ExternalName is also provided which may be used with typing.Annotated to specify the name which should be used for a member when serializing or deserializing (e.g. to match CSV headers).

Please note that as with the built-in csv module, file-like objects used with this library should be opened with newline=''.

Basic example

from antibiotics import Delimited
from dataclasses import dataclass
from typing import NamedTuple, Optional

@dataclass
class SampleDC():
    w: Optional[float]
    x: int
    y: bool
    z: str

class SampleNT(NamedTuple):
    w: Optional[float]
    x: int
    y: bool
    z: str

if __name__ == '__main__':
    dcs = list()
    nts = list()
    for i in range(10):
        even = i % 2 == 0
        dcs.append(SampleDC(
            i * 3.5 if even else None,
            i,
            not even,
            f'_",\t_{i}'
        ))
        nts.append(SampleNT(
            i * 3.5 if even else None,
            i,
            not even,
            f'_",\t_{i}'
        ))

    csv = Delimited()
    with open('dcs.csv', 'w', newline='') as f:
        csv.write(SampleDC, dcs, f)

    tsv = Delimited(sep='\t', escape='\\', newline='\n')
    with open('nts.tsv', 'w', newline='') as f:
        tsv.write(SampleNT, dcs, f, header=False)

    with open('dcs.csv', 'r', newline='') as f:
        for r in csv.read(SampleDC, f):
            print(r)

    with open('nts.tsv', 'r', newline='') as f:
        for r in tsv.read(SampleNT, f, header=False):
            print(r)

Example with custom external names

from antibiotics import Delimited, ExternalName
from dataclasses import dataclass
from typing import Annotated, Optional

@dataclass
class SampleDC():
    w: Annotated[Optional[float], ExternalName('BigW')]
    x: Annotated[int, ExternalName('Fancy X')]
    y: bool
    z: str

if __name__ == '__main__':
    dcs = list()
    for i in range(10):
        even = i % 2 == 0
        dcs.append(SampleDC(
            i * 3.5 if even else None,
            i,
            not even,
            f'_",\t_{i}'
        ))

    csv = Delimited()
    with open('dcs.csv', 'w', newline='') as f:
        csv.write(SampleDC, dcs, f)

    with open('dcs.csv', 'r', newline='') as f:
        for dc in csv.read(SampleDC, f):
            print(dc)

Documentation

Documentation strings and type annotations are provided for public types and functions. We recommend viewing "nice" documentation pages using pdoc; e.g. in the same environment as the antibiotics package is installed, install pdoc with pip install pdoc, then run pdoc antibiotics.


Install with:

pip install antibiotics

Or download directly from PyPI.

(c) 2023 dwt | terminus data science, LLC

available under the Apache License 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

antibiotics-0.4.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

antibiotics-0.4-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file antibiotics-0.4.tar.gz.

File metadata

  • Download URL: antibiotics-0.4.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for antibiotics-0.4.tar.gz
Algorithm Hash digest
SHA256 3fb26b4e55ec016670b5529dd57792c2a899bda43570ce3fc4e0beebb2f0e856
MD5 bd8a834d92a89a43cf671cd4633d67c0
BLAKE2b-256 fd74815ccc554817ee7aecf7d3dfcff435523fc552ad8e3f881c47c96654eea8

See more details on using hashes here.

File details

Details for the file antibiotics-0.4-py3-none-any.whl.

File metadata

  • Download URL: antibiotics-0.4-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for antibiotics-0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8903c3329fa89327db2584e34a05a7b1b29fc0df5a1966fa2faf106c98f16e82
MD5 cb287a5afa312678b73c887a1c0b13b0
BLAKE2b-256 40ac244d95842c7fca534be2ad86424c80d9b1ea005866ff1796a5bc775ec956

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page