Skip to main content

Modern high-performance serialization utilities for Python

Project description

srsly: Modern high-performance serialization utilities for Python

This package bundles some of the best Python serialization libraries into one standalone package, with a high-level API that makes it easy to write code that's correct across platforms and Pythons. This allows us to provide all the serialization utilities we need in a single binary wheel. Currently supports JSON, JSONL, MessagePack, Pickle and YAML.

Azure Pipelines PyPi conda GitHub Python wheels

Motivation

Serialization is hard, especially across Python versions and multiple platforms. After dealing with many subtle bugs over the years (encodings, locales, large files) our libraries like spaCy and Prodigy have steadily grown a number of utility functions to wrap the multiple serialization formats we need to support (especially json, msgpack and pickle). These wrapping functions ended up duplicated across our codebases, so we wanted to put them in one place.

At the same time, we noticed that having a lot of small dependencies was making maintenance harder, and making installation slower. To solve this, we've made srsly standalone, by including the component packages directly within it. This way we can provide all the serialization utilities we need in a single binary wheel.

srsly currently includes forks of the following packages:

Installation

⚠️ Note that v2.x is only compatible with Python 3.6+. For 2.7+ compatibility, use v1.x.

srsly can be installed from pip:

pip install srsly

Or from conda via conda-forge:

conda install -c conda-forge srsly

Alternatively, you can also compile the library from source. You'll need to make sure that you have a development environment consisting of a Python distribution including header files, a compiler (XCode command-line tools on macOS / OS X or Visual C++ build tools on Windows), pip, virtualenv and git installed.

pip install -r requirements.txt  # install development dependencies
python setup.py build_ext --inplace  # compile the library

API

JSON

📦 The underlying module is exposed via srsly.ujson. However, we normally interact with it via the utility functions only.

function srsly.json_dumps

Serialize an object to a JSON string. Falls back to json if sort_keys=True is used (until it's fixed in ujson).

data = {"foo": "bar", "baz": 123}
json_string = srsly.json_dumps(data)
Argument Type Description
data - The JSON-serializable data to output.
indent int Number of spaces used to indent JSON. Defaults to 0.
sort_keys bool Sort dictionary keys. Defaults to False.
RETURNS str The serialized string.

function srsly.json_loads

Deserialize unicode or bytes to a Python object.

data = '{"foo": "bar", "baz": 123}'
obj = srsly.json_loads(data)
Argument Type Description
data str / bytes The data to deserialize.
RETURNS - The deserialized Python object.

function srsly.write_json

Create a JSON file and dump contents or write to standard output.

data = {"foo": "bar", "baz": 123}
srsly.write_json("/path/to/file.json", data)
Argument Type Description
path str / Path The file path or "-" to write to stdout.
data - The JSON-serializable data to output.
indent int Number of spaces used to indent JSON. Defaults to 2.

function srsly.read_json

Load JSON from a file or standard input.

data = srsly.read_json("/path/to/file.json")
Argument Type Description
path str / Path The file path or "-" to read from stdin.
RETURNS dict / list The loaded JSON content.

function srsly.write_gzip_json

Create a gzipped JSON file and dump contents.

data = {"foo": "bar", "baz": 123}
srsly.write_gzip_json("/path/to/file.json.gz", data)
Argument Type Description
path str / Path The file path.
data - The JSON-serializable data to output.
indent int Number of spaces used to indent JSON. Defaults to 2.

function srsly.read_gzip_json

Load gzipped JSON from a file.

data = srsly.read_gzip_json("/path/to/file.json.gz")
Argument Type Description
path str / Path The file path.
RETURNS dict / list The loaded JSON content.

function srsly.write_jsonl

Create a JSONL file (newline-delimited JSON) and dump contents line by line, or write to standard output.

data = [{"foo": "bar"}, {"baz": 123}]
srsly.write_jsonl("/path/to/file.jsonl", data)
Argument Type Description
path str / Path The file path or "-" to write to stdout.
lines iterable The JSON-serializable lines.
append bool Append to an existing file. Will open it in "a" mode and insert a newline before writing lines. Defaults to False.
append_new_line bool Defines whether a new line should first be written when appending to an existing file. Defaults to True.

function srsly.read_jsonl

Read a JSONL file (newline-delimited JSON) or from JSONL data from standard input and yield contents line by line. Blank lines will always be skipped.

data = srsly.read_jsonl("/path/to/file.jsonl")
Argument Type Description
path str / Path The file path or "-" to read from stdin.
skip bool Skip broken lines and don't raise ValueError. Defaults to False.
YIELDS - The loaded JSON contents of each line.

function srsly.is_json_serializable

Check if a Python object is JSON-serializable.

assert srsly.is_json_serializable({"hello": "world"}) is True
assert srsly.is_json_serializable(lambda x: x) is False
Argument Type Description
obj - The object to check.
RETURNS bool Whether the object is JSON-serializable.

msgpack

📦 The underlying module is exposed via srsly.msgpack. However, we normally interact with it via the utility functions only.

function srsly.msgpack_dumps

Serialize an object to a msgpack byte string.

data = {"foo": "bar", "baz": 123}
msg = srsly.msgpack_dumps(data)
Argument Type Description
data - The data to serialize.
RETURNS bytes The serialized bytes.

function srsly.msgpack_loads

Deserialize msgpack bytes to a Python object.

msg = b"\x82\xa3foo\xa3bar\xa3baz{"
data = srsly.msgpack_loads(msg)
Argument Type Description
data bytes The data to deserialize.
use_list bool Don't use tuples instead of lists. Can make deserialization slower. Defaults to True.
RETURNS - The deserialized Python object.

function srsly.write_msgpack

Create a msgpack file and dump contents.

data = {"foo": "bar", "baz": 123}
srsly.write_msgpack("/path/to/file.msg", data)
Argument Type Description
path str / Path The file path.
data - The data to serialize.

function srsly.read_msgpack

Load a msgpack file.

data = srsly.read_msgpack("/path/to/file.msg")
Argument Type Description
path str / Path The file path.
use_list bool Don't use tuples instead of lists. Can make deserialization slower. Defaults to True.
RETURNS - The loaded and deserialized content.

pickle

📦 The underlying module is exposed via srsly.cloudpickle. However, we normally interact with it via the utility functions only.

function srsly.pickle_dumps

Serialize a Python object with pickle.

data = {"foo": "bar", "baz": 123}
pickled_data = srsly.pickle_dumps(data)
Argument Type Description
data - The object to serialize.
protocol int Protocol to use. -1 for highest. Defaults to None.
RETURNS bytes The serialized object.

function srsly.pickle_loads

Deserialize bytes with pickle.

pickled_data = b"\x80\x04\x95\x19\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x03foo\x94\x8c\x03bar\x94\x8c\x03baz\x94K{u."
data = srsly.pickle_loads(pickled_data)
Argument Type Description
data bytes The data to deserialize.
RETURNS - The deserialized Python object.

YAML

📦 The underlying module is exposed via srsly.ruamel_yaml. However, we normally interact with it via the utility functions only.

function srsly.yaml_dumps

Serialize an object to a YAML string. See the ruamel.yaml docs for details on the indentation format.

data = {"foo": "bar", "baz": 123}
yaml_string = srsly.yaml_dumps(data)
Argument Type Description
data - The JSON-serializable data to output.
indent_mapping int Mapping indentation. Defaults to 2.
indent_sequence int Sequence indentation. Defaults to 4.
indent_offset int Indentation offset. Defaults to 2.
sort_keys bool Sort dictionary keys. Defaults to False.
RETURNS str The serialized string.

function srsly.yaml_loads

Deserialize unicode or a file object to a Python object.

data = 'foo: bar\nbaz: 123'
obj = srsly.yaml_loads(data)
Argument Type Description
data str / file The data to deserialize.
RETURNS - The deserialized Python object.

function srsly.write_yaml

Create a YAML file and dump contents or write to standard output.

data = {"foo": "bar", "baz": 123}
srsly.write_yaml("/path/to/file.yml", data)
Argument Type Description
path str / Path The file path or "-" to write to stdout.
data - The JSON-serializable data to output.
indent_mapping int Mapping indentation. Defaults to 2.
indent_sequence int Sequence indentation. Defaults to 4.
indent_offset int Indentation offset. Defaults to 2.
sort_keys bool Sort dictionary keys. Defaults to False.

function srsly.read_yaml

Load YAML from a file or standard input.

data = srsly.read_yaml("/path/to/file.yml")
Argument Type Description
path str / Path The file path or "-" to read from stdin.
RETURNS dict / list The loaded YAML content.

function srsly.is_yaml_serializable

Check if a Python object is YAML-serializable.

assert srsly.is_yaml_serializable({"hello": "world"}) is True
assert srsly.is_yaml_serializable(lambda x: x) is False
Argument Type Description
obj - The object to check.
RETURNS bool Whether the object is YAML-serializable.

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

srsly-2.3.0.tar.gz (314.6 kB view details)

Uploaded Source

Built Distributions

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

srsly-2.3.0-cp38-cp38-win_amd64.whl (452.4 kB view details)

Uploaded CPython 3.8Windows x86-64

srsly-2.3.0-cp38-cp38-manylinux2014_x86_64.whl (459.4 kB view details)

Uploaded CPython 3.8

srsly-2.3.0-cp38-cp38-macosx_10_9_x86_64.whl (450.8 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

srsly-2.3.0-cp37-cp37m-win_amd64.whl (450.5 kB view details)

Uploaded CPython 3.7mWindows x86-64

srsly-2.3.0-cp37-cp37m-manylinux2014_x86_64.whl (457.2 kB view details)

Uploaded CPython 3.7m

srsly-2.3.0-cp37-cp37m-macosx_10_9_x86_64.whl (449.7 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

srsly-2.3.0-cp36-cp36m-win_amd64.whl (450.6 kB view details)

Uploaded CPython 3.6mWindows x86-64

srsly-2.3.0-cp36-cp36m-manylinux2014_x86_64.whl (457.1 kB view details)

Uploaded CPython 3.6m

srsly-2.3.0-cp36-cp36m-macosx_10_9_x86_64.whl (451.9 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

Details for the file srsly-2.3.0.tar.gz.

File metadata

  • Download URL: srsly-2.3.0.tar.gz
  • Upload date:
  • Size: 314.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0.tar.gz
Algorithm Hash digest
SHA256 f994a266f6e547c8ffe803cb90baed7ca566831f924e0491402564ba0d185e66
MD5 1ee33c6590b4ddc78f657425535e0fc4
BLAKE2b-256 e6fd55347f5f58db5fdec748a2234d3d82978f051ac69b2371b9d8cb2a56e180

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 452.4 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 78f85bba6f51559f498e44f1d2e7ea6b9188fcfb02534358a482edd00cd9d57f
MD5 da75605d5f413957c34a188f03165559
BLAKE2b-256 5b1fb13a196005810e8a6f2104c68ade4a37e0eb93b380d661626e66859acaa2

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp38-cp38-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 459.4 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dc12db6bff42cfb4572d99cf42fd2ea0cd995e5df4b2eef3770428e8d0830ce5
MD5 6166795f167c2c7119b30afb1023010d
BLAKE2b-256 9642d7ba742a46ec523bb9114390b1be245481059c9ffda61aa44c5faa7ab684

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 450.8 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ceaa238091a0753c43546fa1ab9c42bd0d589d021db21a38aa554b9cc9fd4a99
MD5 f84eabfc827da2fa6c6053ba9c44307f
BLAKE2b-256 6314d8425870e78ace1c17749aec8df60e818744389589ed37485ed5dc397373

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 450.5 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a784d1b6c011bb04b561dc064a2b120cf7b4768db816fe72568c280a2bba3762
MD5 b69f4124fd578768a9bb95f30b1c4e02
BLAKE2b-256 70b7672c741dbd70881bb17d1c43c91ced04922f9cf5016639bf66f9e9917891

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp37-cp37m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 457.2 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0ed9c9e93e24f20e9af5628507ac6f3f9d8a550fd13b2ecbf9122d1b88576d9b
MD5 6750f28374d143e92ad42f6363e20b71
BLAKE2b-256 9706ade2945f1cdd16f2b10e669e195cce968f80caf52b77b87df1917818e1e2

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 449.7 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aec2d95022b5a9bfae5b6c5063a31966c4599bbb9213b83ee801d072a873499b
MD5 d93d65ad342eb57996e1c253ae69ba08
BLAKE2b-256 1238f93b04f6ce5608823dd05073edabf98234bb2fd2dd87c946540a63f84a54

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 450.6 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 4664bbb625b6dfe3654b6d924b066dd400914448e1a8d3fc1a7f379f4fe674f2
MD5 ff117f17e10f7b7c6e9ebdfed126ec04
BLAKE2b-256 f8fdf5dc3e320c41ac07f60a9604e7656664688a03f490ff4b8c3966f95c29dc

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp36-cp36m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 457.1 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc012c8f4594fff772a250d8263f15f105f7c1e4a042b6e3b2a3252d6f3cca45
MD5 df309674cfb4555eee192e8bbfa93c28
BLAKE2b-256 ea6f4bd02da53d7dc65fe87d658c294d57c52a1f51717f853105763b7e1fb0e6

See more details on using hashes here.

File details

Details for the file srsly-2.3.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: srsly-2.3.0-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 451.9 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for srsly-2.3.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 32d0b4fb1bee59fb54a59d9a5212b83b50363b943455860afe7f6dde1cc2737b
MD5 e11b0e40d82c6cbb19bbd607763d481c
BLAKE2b-256 25c36ad4280116c37e0f525ebeffdf58a9372e3d2b489cfdd2e4ca7c5782d2d0

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