Skip to content

derrickturk/antibiotics

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
doc
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.

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') as f:
        csv.write(SampleDC, dcs, f)

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

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

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

View the full pdocs-generated API documentation.

Install with:

pip install antibiotics

Or download directly from PyPI.

(c) 2020 dwt | terminus data science, LLC

available under the Apache License 2.0

About

the best treatment for acute episodes of PANDAS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published