Skip to main content

A convenience wrapper around serialization libraries to handle common tasks.

Project description

https://img.shields.io/pypi/v/basicserial.svg https://img.shields.io/pypi/l/basicserial.svg https://github.com/jayclassless/basicserial/workflows/Test/badge.svg

Overview

Does this look familiar?

>>> import json
>>> from datetime import date
>>> MY_DATA = {'foo': 123, 'bar': date(2018, 5, 22)}
>>> json.dumps(MY_DATA)
Traceback (most recent call last):
    ...
TypeError: datetime.date(2018, 5, 22) is not JSON serializable

It’s one thing when your serialization tools don’t know how to handle your custom classes, but it’s annoying when they don’t handle the built-in and/or common data types. Thus, basicserial was born.

This package is a thin wrapper around the common serialization tools that can do the following for you when working with JSON, YAML, and TOML:

  • Automatically serializes the following types to common-sense representations:

    Type JSON YAML TOML
    set array sequence array
    frozenset array sequence array
    Decimal number float float
    Fraction string string string
    date string (ISO 8601) timestamp string (ISO 8601)
    time string (ISO 8601) string (ISO 8601) string (ISO 8601)
    datetime string (ISO 8601) timestamp string (ISO 8601)
    complex string string string
    OrderedDict object map key/value
    defaultdict object map key/value
    namedtuple object map key/value
    UserDict object map key/value
    UserList array sequence array
    UserString string string string
  • Can automatically deserialize dates, times, and datetimes into the native Python objects.

  • Provides a simple flag for generating “pretty” strings.

Usage

To use this package, install it from PyPI (pip install basicserial). Then, if you want to use YAML or TOML, you’ll also need to install a package that provides that functionality (for YAML basicserial supports PyYAML and ruamel.yaml, for TOML it supports toml or pytoml). basicserial will use Python’s built-in json module to handle JSON.

JSON:

>>> print(basicserial.to_json(MY_DATA))
{"foo": 123, "bar": "2018-05-22"}

>>> print(basicserial.to_json(MY_DATA, pretty=True))
{
  "foo": 123,
  "bar": "2018-05-22"
}

>>> basicserial.from_json(basicserial.to_json(MY_DATA))
{u'foo': 123, u'bar': datetime.date(2018, 5, 22)}

>>> basicserial.from_json(basicserial.to_json(MY_DATA), native_datetimes=False)
{u'foo': 123, u'bar': u'2018-05-22'}

YAML:

>>> print(basicserial.to_yaml(MY_DATA))
{bar: 2018-05-22, foo: 123}

>>> print(basicserial.to_yaml(MY_DATA, pretty=True))
bar: 2018-05-22
foo: 123

>>> basicserial.from_yaml(basicserial.to_yaml(MY_DATA))
{u'foo': 123, u'bar': datetime.date(2018, 5, 22)}

>>> basicserial.from_yaml(basicserial.to_yaml(MY_DATA), native_datetimes=False)
{'foo': 123, 'bar': u'2018-05-22'}

TOML:

>>> print(basicserial.to_toml(MY_DATA))
foo = 123
bar = "2018-05-22"

>>> print(basicserial.to_toml(MY_DATA, pretty=True))
foo = 123
bar = "2018-05-22"

>>> basicserial.from_toml(basicserial.to_toml(MY_DATA))
{u'foo': 123, u'bar': datetime.date(2018, 5, 22)}

>>> basicserial.from_toml(basicserial.to_toml(MY_DATA), native_datetimes=False)
{u'foo': 123, u'bar': u'2018-05-22'}

License

This project is released under the terms of the MIT License.

Project details


Download files

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

Files for basicserial, version 1.0.0
Filename, size File type Python version Upload date Hashes
Filename, size basicserial-1.0.0-py3-none-any.whl (6.4 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size basicserial-1.0.0.tar.gz (6.6 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page