<a href="https://explosion.ai"><img src="https://explosion.ai/assets/img/logo.svg" width="125" height="125" align="right" /></a>
# 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**.
[![tests](https://github.com/explosion/srsly/actions/workflows/tests.yml/badge.svg)](https://github.com/explosion/srsly/actions/workflows/tests.yml)
[![PyPi](https://img.shields.io/pypi/v/srsly.svg?style=flat-square&logo=pypi&logoColor=white)](https://pypi.python.org/pypi/srsly)
[![conda](https://img.shields.io/conda/vn/conda-forge/srsly.svg?style=flat-square&logo=conda-forge&logoColor=white)](https://anaconda.org/conda-forge/srsly)
[![GitHub](https://img.shields.io/github/release/explosion/srsly/all.svg?style=flat-square&logo=github)](https://github.com/explosion/srsly)
[![Python wheels](https://img.shields.io/badge/wheels-%E2%9C%93-4c1.svg?longCache=true&style=flat-square&logo=python&logoColor=white)](https://github.com/explosion/wheelwright/releases)
## 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](https://github.com/explosion/spaCy) and
[Prodigy](https://prodi.gy) had 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:
- [`ujson`](https://github.com/esnme/ultrajson)
- [`msgpack`](https://github.com/msgpack/msgpack-python)
- [`msgpack-numpy`](https://github.com/lebedov/msgpack-numpy)
- [`cloudpickle`](https://github.com/cloudpipe/cloudpickle)
- [`ruamel.yaml`](https://github.com/pycontribs/ruamel-yaml) (without unsafe
implementations!)
## 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. Before installing, make sure that your `pip`,
`setuptools` and `wheel` are up to date.
```bash
python -m pip install -U pip setuptools wheel
python -m pip install srsly
```
Or from conda via conda-forge:
```bash
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 with a Python distribution
including header files, a compiler (XCode command-line tools on macOS / OS X or
Visual C++ build tools on Windows), pip and git installed.
Install from source:
```bash
# clone the repo
git clone https://github.com/explosion/srsly
cd srsly
# create a virtual environment
python -m venv .env
source .env/bin/activate
# update pip
python -m pip install -U pip setuptools wheel
# compile and install from source
python -m pip install .
```
For developers, install requirements separately and then install in editable
mode without build isolation:
```bash
# install in editable mode
python -m pip install -r requirements.txt
python -m pip install --no-build-isolation --editable .
# run test suite
python -m pytest --pyargs srsly
```
## API
### JSON
> 📦 The underlying module is exposed via `srsly.ujson`. However, we normally
> interact with it via the utility functions only.
#### <kbd>function</kbd> `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`).
```python
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. |
#### <kbd>function</kbd> `srsly.json_loads`
Deserialize unicode or bytes to a Python object.
```python
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. |
#### <kbd>function</kbd> `srsly.write_json`
Create a JSON file and dump contents or write to standard output.
```python
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`. |
#### <kbd>function</kbd> `srsly.read_json`
Load JSON from a file or standard input.
```python
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. |
#### <kbd>function</kbd> `srsly.write_gzip_json`
Create a gzipped JSON file and dump contents.
```python
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`. |
#### <kbd>function</kbd> `srsly.write_gzip_jsonl`
Create a gzipped JSONL file and dump contents.
```python
data = [{"foo": "bar"}, {"baz": 123}]
srsly.write_gzip_json("/path/to/file.jsonl.gz", data)
```
| Argument | Type | Description |
| ----------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `path` | str / `Path` | The file path. |
| `lines` | - | The JSON-serializable contents of each line. |
| `append` | bool | Whether or not to append to the location. Appending to .gz files is generally not recommended, as it doesn't allow the algorithm to take advantage of all data when compressing - files may hence be poorly compressed. |
| `append_new_line` | bool | Whether or not to write a new line before appending to the file. |
#### <kbd>function</kbd> `srsly.read_gzip_json`
Load gzipped JSON from a file.
```python
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. |
#### <kbd>function</kbd> `srsly.read_gzip_jsonl`
Load gzipped JSONL from a file.
```python
data = srsly.read_gzip_jsonl("/path/to/file.jsonl.gz")
```
| Argument | Type | Description |
| ----------- | ------------ | ------------------------- |
| `path` | str / `Path` | The file path. |
| **RETURNS** | dict / list | The loaded JSONL content. |
#### <kbd>function</kbd> `srsly.write_jsonl`
Create a JSONL file (newline-delimited JSON) and dump contents line by line, or
write to standard output.
```python
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`. |
#### <kbd>function</kbd> `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.
```python
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. |
#### <kbd>function</kbd> `srsly.is_json_serializable`
Check if a Python object is JSON-serializable.
```python
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.
#### <kbd>function</kbd> `srsly.msgpack_dumps`
Serialize an object to a msgpack byte string.
```python
data = {"foo": "bar", "baz": 123}
msg = srsly.msgpack_dumps(data)
```
| Argument | Type | Description |
| ----------- | ----- | ---------------------- |
| `data` | - | The data to serialize. |
| **RETURNS** | bytes | The serialized bytes. |
#### <kbd>function</kbd> `srsly.msgpack_loads`
Deserialize msgpack bytes to a Python object.
```python
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. |
#### <kbd>function</kbd> `srsly.write_msgpack`
Create a msgpack file and dump contents.
```python
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. |
#### <kbd>function</kbd> `srsly.read_msgpack`
Load a msgpack file.
```python
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.
#### <kbd>function</kbd> `srsly.pickle_dumps`
Serialize a Python object with pickle.
```python
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. |
#### <kbd>function</kbd> `srsly.pickle_loads`
Deserialize bytes with pickle.
```python
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.
#### <kbd>function</kbd> `srsly.yaml_dumps`
Serialize an object to a YAML string. See the
[`ruamel.yaml` docs](https://yaml.readthedocs.io/en/latest/detail.html?highlight=indentation#indentation-of-block-sequences)
for details on the indentation format.
```python
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. |
#### <kbd>function</kbd> `srsly.yaml_loads`
Deserialize unicode or a file object to a Python object.
```python
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. |
#### <kbd>function</kbd> `srsly.write_yaml`
Create a YAML file and dump contents or write to standard output.
```python
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`. |
#### <kbd>function</kbd> `srsly.read_yaml`
Load YAML from a file or standard input.
```python
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. |
#### <kbd>function</kbd> `srsly.is_yaml_serializable`
Check if a Python object is YAML-serializable.
```python
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. |
Raw data
{
"_id": null,
"home_page": "https://github.com/explosion/srsly",
"name": "srsly",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.14,>=3.9",
"maintainer_email": null,
"keywords": null,
"author": "Explosion",
"author_email": "contact@explosion.ai",
"download_url": "https://files.pythonhosted.org/packages/f5/54/52041112dfa5932ea6696ca54c5ce051a71b551641733ccdf6e2b005cab3/srsly-2.5.0.tar.gz",
"platform": null,
"description": "<a href=\"https://explosion.ai\"><img src=\"https://explosion.ai/assets/img/logo.svg\" width=\"125\" height=\"125\" align=\"right\" /></a>\n\n# srsly: Modern high-performance serialization utilities for Python\n\nThis package bundles some of the best Python serialization libraries into one\nstandalone package, with a high-level API that makes it easy to write code\nthat's correct across platforms and Pythons. This allows us to provide all the\nserialization utilities we need in a single binary wheel. Currently supports\n**JSON**, **JSONL**, **MessagePack**, **Pickle** and **YAML**.\n\n[![tests](https://github.com/explosion/srsly/actions/workflows/tests.yml/badge.svg)](https://github.com/explosion/srsly/actions/workflows/tests.yml)\n[![PyPi](https://img.shields.io/pypi/v/srsly.svg?style=flat-square&logo=pypi&logoColor=white)](https://pypi.python.org/pypi/srsly)\n[![conda](https://img.shields.io/conda/vn/conda-forge/srsly.svg?style=flat-square&logo=conda-forge&logoColor=white)](https://anaconda.org/conda-forge/srsly)\n[![GitHub](https://img.shields.io/github/release/explosion/srsly/all.svg?style=flat-square&logo=github)](https://github.com/explosion/srsly)\n[![Python wheels](https://img.shields.io/badge/wheels-%E2%9C%93-4c1.svg?longCache=true&style=flat-square&logo=python&logoColor=white)](https://github.com/explosion/wheelwright/releases)\n\n## Motivation\n\nSerialization is hard, especially across Python versions and multiple platforms.\nAfter dealing with many subtle bugs over the years (encodings, locales, large\nfiles) our libraries like [spaCy](https://github.com/explosion/spaCy) and\n[Prodigy](https://prodi.gy) had steadily grown a number of utility functions to\nwrap the multiple serialization formats we need to support (especially `json`,\n`msgpack` and `pickle`). These wrapping functions ended up duplicated across our\ncodebases, so we wanted to put them in one place.\n\nAt the same time, we noticed that having a lot of small dependencies was making\nmaintenance harder, and making installation slower. To solve this, we've made\n`srsly` standalone, by including the component packages directly within it. This\nway we can provide all the serialization utilities we need in a single binary\nwheel.\n\n`srsly` currently includes forks of the following packages:\n\n- [`ujson`](https://github.com/esnme/ultrajson)\n- [`msgpack`](https://github.com/msgpack/msgpack-python)\n- [`msgpack-numpy`](https://github.com/lebedov/msgpack-numpy)\n- [`cloudpickle`](https://github.com/cloudpipe/cloudpickle)\n- [`ruamel.yaml`](https://github.com/pycontribs/ruamel-yaml) (without unsafe\n implementations!)\n\n## Installation\n\n> \u26a0\ufe0f Note that `v2.x` is only compatible with **Python 3.6+**. For 2.7+\n> compatibility, use `v1.x`.\n\n`srsly` can be installed from pip. Before installing, make sure that your `pip`,\n`setuptools` and `wheel` are up to date.\n\n```bash\npython -m pip install -U pip setuptools wheel\npython -m pip install srsly\n```\n\nOr from conda via conda-forge:\n\n```bash\nconda install -c conda-forge srsly\n```\n\nAlternatively, you can also compile the library from source. You'll need to make\nsure that you have a development environment with a Python distribution\nincluding header files, a compiler (XCode command-line tools on macOS / OS X or\nVisual C++ build tools on Windows), pip and git installed.\n\nInstall from source:\n\n```bash\n# clone the repo\ngit clone https://github.com/explosion/srsly\ncd srsly\n\n# create a virtual environment\npython -m venv .env\nsource .env/bin/activate\n\n# update pip\npython -m pip install -U pip setuptools wheel\n\n# compile and install from source\npython -m pip install .\n```\n\nFor developers, install requirements separately and then install in editable\nmode without build isolation:\n\n```bash\n# install in editable mode\npython -m pip install -r requirements.txt\npython -m pip install --no-build-isolation --editable .\n\n# run test suite\npython -m pytest --pyargs srsly\n```\n\n## API\n\n### JSON\n\n> \ud83d\udce6 The underlying module is exposed via `srsly.ujson`. However, we normally\n> interact with it via the utility functions only.\n\n#### <kbd>function</kbd> `srsly.json_dumps`\n\nSerialize an object to a JSON string. Falls back to `json` if `sort_keys=True`\nis used (until it's fixed in `ujson`).\n\n```python\ndata = {\"foo\": \"bar\", \"baz\": 123}\njson_string = srsly.json_dumps(data)\n```\n\n| Argument | Type | Description |\n| ----------- | ---- | ------------------------------------------------------ |\n| `data` | - | The JSON-serializable data to output. |\n| `indent` | int | Number of spaces used to indent JSON. Defaults to `0`. |\n| `sort_keys` | bool | Sort dictionary keys. Defaults to `False`. |\n| **RETURNS** | str | The serialized string. |\n\n#### <kbd>function</kbd> `srsly.json_loads`\n\nDeserialize unicode or bytes to a Python object.\n\n```python\ndata = '{\"foo\": \"bar\", \"baz\": 123}'\nobj = srsly.json_loads(data)\n```\n\n| Argument | Type | Description |\n| ----------- | ----------- | ------------------------------- |\n| `data` | str / bytes | The data to deserialize. |\n| **RETURNS** | - | The deserialized Python object. |\n\n#### <kbd>function</kbd> `srsly.write_json`\n\nCreate a JSON file and dump contents or write to standard output.\n\n```python\ndata = {\"foo\": \"bar\", \"baz\": 123}\nsrsly.write_json(\"/path/to/file.json\", data)\n```\n\n| Argument | Type | Description |\n| -------- | ------------ | ------------------------------------------------------ |\n| `path` | str / `Path` | The file path or `\"-\"` to write to stdout. |\n| `data` | - | The JSON-serializable data to output. |\n| `indent` | int | Number of spaces used to indent JSON. Defaults to `2`. |\n\n#### <kbd>function</kbd> `srsly.read_json`\n\nLoad JSON from a file or standard input.\n\n```python\ndata = srsly.read_json(\"/path/to/file.json\")\n```\n\n| Argument | Type | Description |\n| ----------- | ------------ | ------------------------------------------ |\n| `path` | str / `Path` | The file path or `\"-\"` to read from stdin. |\n| **RETURNS** | dict / list | The loaded JSON content. |\n\n#### <kbd>function</kbd> `srsly.write_gzip_json`\n\nCreate a gzipped JSON file and dump contents.\n\n```python\ndata = {\"foo\": \"bar\", \"baz\": 123}\nsrsly.write_gzip_json(\"/path/to/file.json.gz\", data)\n```\n\n| Argument | Type | Description |\n| -------- | ------------ | ------------------------------------------------------ |\n| `path` | str / `Path` | The file path. |\n| `data` | - | The JSON-serializable data to output. |\n| `indent` | int | Number of spaces used to indent JSON. Defaults to `2`. |\n\n#### <kbd>function</kbd> `srsly.write_gzip_jsonl`\n\nCreate a gzipped JSONL file and dump contents.\n\n```python\ndata = [{\"foo\": \"bar\"}, {\"baz\": 123}]\nsrsly.write_gzip_json(\"/path/to/file.jsonl.gz\", data)\n```\n\n| Argument | Type | Description |\n| ----------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `path` | str / `Path` | The file path. |\n| `lines` | - | The JSON-serializable contents of each line. |\n| `append` | bool | Whether or not to append to the location. Appending to .gz files is generally not recommended, as it doesn't allow the algorithm to take advantage of all data when compressing - files may hence be poorly compressed. |\n| `append_new_line` | bool | Whether or not to write a new line before appending to the file. |\n\n#### <kbd>function</kbd> `srsly.read_gzip_json`\n\nLoad gzipped JSON from a file.\n\n```python\ndata = srsly.read_gzip_json(\"/path/to/file.json.gz\")\n```\n\n| Argument | Type | Description |\n| ----------- | ------------ | ------------------------ |\n| `path` | str / `Path` | The file path. |\n| **RETURNS** | dict / list | The loaded JSON content. |\n\n#### <kbd>function</kbd> `srsly.read_gzip_jsonl`\n\nLoad gzipped JSONL from a file.\n\n```python\ndata = srsly.read_gzip_jsonl(\"/path/to/file.jsonl.gz\")\n```\n\n| Argument | Type | Description |\n| ----------- | ------------ | ------------------------- |\n| `path` | str / `Path` | The file path. |\n| **RETURNS** | dict / list | The loaded JSONL content. |\n\n#### <kbd>function</kbd> `srsly.write_jsonl`\n\nCreate a JSONL file (newline-delimited JSON) and dump contents line by line, or\nwrite to standard output.\n\n```python\ndata = [{\"foo\": \"bar\"}, {\"baz\": 123}]\nsrsly.write_jsonl(\"/path/to/file.jsonl\", data)\n```\n\n| Argument | Type | Description |\n| ----------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------- |\n| `path` | str / `Path` | The file path or `\"-\"` to write to stdout. |\n| `lines` | iterable | The JSON-serializable lines. |\n| `append` | bool | Append to an existing file. Will open it in `\"a\"` mode and insert a newline before writing lines. Defaults to `False`. |\n| `append_new_line` | bool | Defines whether a new line should first be written when appending to an existing file. Defaults to `True`. |\n\n#### <kbd>function</kbd> `srsly.read_jsonl`\n\nRead a JSONL file (newline-delimited JSON) or from JSONL data from standard\ninput and yield contents line by line. Blank lines will always be skipped.\n\n```python\ndata = srsly.read_jsonl(\"/path/to/file.jsonl\")\n```\n\n| Argument | Type | Description |\n| ---------- | ---------- | -------------------------------------------------------------------- |\n| `path` | str / Path | The file path or `\"-\"` to read from stdin. |\n| `skip` | bool | Skip broken lines and don't raise `ValueError`. Defaults to `False`. |\n| **YIELDS** | - | The loaded JSON contents of each line. |\n\n#### <kbd>function</kbd> `srsly.is_json_serializable`\n\nCheck if a Python object is JSON-serializable.\n\n```python\nassert srsly.is_json_serializable({\"hello\": \"world\"}) is True\nassert srsly.is_json_serializable(lambda x: x) is False\n```\n\n| Argument | Type | Description |\n| ----------- | ---- | ---------------------------------------- |\n| `obj` | - | The object to check. |\n| **RETURNS** | bool | Whether the object is JSON-serializable. |\n\n### msgpack\n\n> \ud83d\udce6 The underlying module is exposed via `srsly.msgpack`. However, we normally\n> interact with it via the utility functions only.\n\n#### <kbd>function</kbd> `srsly.msgpack_dumps`\n\nSerialize an object to a msgpack byte string.\n\n```python\ndata = {\"foo\": \"bar\", \"baz\": 123}\nmsg = srsly.msgpack_dumps(data)\n```\n\n| Argument | Type | Description |\n| ----------- | ----- | ---------------------- |\n| `data` | - | The data to serialize. |\n| **RETURNS** | bytes | The serialized bytes. |\n\n#### <kbd>function</kbd> `srsly.msgpack_loads`\n\nDeserialize msgpack bytes to a Python object.\n\n```python\nmsg = b\"\\x82\\xa3foo\\xa3bar\\xa3baz{\"\ndata = srsly.msgpack_loads(msg)\n```\n\n| Argument | Type | Description |\n| ----------- | ----- | --------------------------------------------------------------------------------------- |\n| `data` | bytes | The data to deserialize. |\n| `use_list` | bool | Don't use tuples instead of lists. Can make deserialization slower. Defaults to `True`. |\n| **RETURNS** | - | The deserialized Python object. |\n\n#### <kbd>function</kbd> `srsly.write_msgpack`\n\nCreate a msgpack file and dump contents.\n\n```python\ndata = {\"foo\": \"bar\", \"baz\": 123}\nsrsly.write_msgpack(\"/path/to/file.msg\", data)\n```\n\n| Argument | Type | Description |\n| -------- | ------------ | ---------------------- |\n| `path` | str / `Path` | The file path. |\n| `data` | - | The data to serialize. |\n\n#### <kbd>function</kbd> `srsly.read_msgpack`\n\nLoad a msgpack file.\n\n```python\ndata = srsly.read_msgpack(\"/path/to/file.msg\")\n```\n\n| Argument | Type | Description |\n| ----------- | ------------ | --------------------------------------------------------------------------------------- |\n| `path` | str / `Path` | The file path. |\n| `use_list` | bool | Don't use tuples instead of lists. Can make deserialization slower. Defaults to `True`. |\n| **RETURNS** | - | The loaded and deserialized content. |\n\n### pickle\n\n> \ud83d\udce6 The underlying module is exposed via `srsly.cloudpickle`. However, we\n> normally interact with it via the utility functions only.\n\n#### <kbd>function</kbd> `srsly.pickle_dumps`\n\nSerialize a Python object with pickle.\n\n```python\ndata = {\"foo\": \"bar\", \"baz\": 123}\npickled_data = srsly.pickle_dumps(data)\n```\n\n| Argument | Type | Description |\n| ----------- | ----- | ------------------------------------------------------ |\n| `data` | - | The object to serialize. |\n| `protocol` | int | Protocol to use. `-1` for highest. Defaults to `None`. |\n| **RETURNS** | bytes | The serialized object. |\n\n#### <kbd>function</kbd> `srsly.pickle_loads`\n\nDeserialize bytes with pickle.\n\n```python\npickled_data = b\"\\x80\\x04\\x95\\x19\\x00\\x00\\x00\\x00\\x00\\x00\\x00}\\x94(\\x8c\\x03foo\\x94\\x8c\\x03bar\\x94\\x8c\\x03baz\\x94K{u.\"\ndata = srsly.pickle_loads(pickled_data)\n```\n\n| Argument | Type | Description |\n| ----------- | ----- | ------------------------------- |\n| `data` | bytes | The data to deserialize. |\n| **RETURNS** | - | The deserialized Python object. |\n\n### YAML\n\n> \ud83d\udce6 The underlying module is exposed via `srsly.ruamel_yaml`. However, we\n> normally interact with it via the utility functions only.\n\n#### <kbd>function</kbd> `srsly.yaml_dumps`\n\nSerialize an object to a YAML string. See the\n[`ruamel.yaml` docs](https://yaml.readthedocs.io/en/latest/detail.html?highlight=indentation#indentation-of-block-sequences)\nfor details on the indentation format.\n\n```python\ndata = {\"foo\": \"bar\", \"baz\": 123}\nyaml_string = srsly.yaml_dumps(data)\n```\n\n| Argument | Type | Description |\n| ----------------- | ---- | ------------------------------------------ |\n| `data` | - | The JSON-serializable data to output. |\n| `indent_mapping` | int | Mapping indentation. Defaults to `2`. |\n| `indent_sequence` | int | Sequence indentation. Defaults to `4`. |\n| `indent_offset` | int | Indentation offset. Defaults to `2`. |\n| `sort_keys` | bool | Sort dictionary keys. Defaults to `False`. |\n| **RETURNS** | str | The serialized string. |\n\n#### <kbd>function</kbd> `srsly.yaml_loads`\n\nDeserialize unicode or a file object to a Python object.\n\n```python\ndata = 'foo: bar\\nbaz: 123'\nobj = srsly.yaml_loads(data)\n```\n\n| Argument | Type | Description |\n| ----------- | ---------- | ------------------------------- |\n| `data` | str / file | The data to deserialize. |\n| **RETURNS** | - | The deserialized Python object. |\n\n#### <kbd>function</kbd> `srsly.write_yaml`\n\nCreate a YAML file and dump contents or write to standard output.\n\n```python\ndata = {\"foo\": \"bar\", \"baz\": 123}\nsrsly.write_yaml(\"/path/to/file.yml\", data)\n```\n\n| Argument | Type | Description |\n| ----------------- | ------------ | ------------------------------------------ |\n| `path` | str / `Path` | The file path or `\"-\"` to write to stdout. |\n| `data` | - | The JSON-serializable data to output. |\n| `indent_mapping` | int | Mapping indentation. Defaults to `2`. |\n| `indent_sequence` | int | Sequence indentation. Defaults to `4`. |\n| `indent_offset` | int | Indentation offset. Defaults to `2`. |\n| `sort_keys` | bool | Sort dictionary keys. Defaults to `False`. |\n\n#### <kbd>function</kbd> `srsly.read_yaml`\n\nLoad YAML from a file or standard input.\n\n```python\ndata = srsly.read_yaml(\"/path/to/file.yml\")\n```\n\n| Argument | Type | Description |\n| ----------- | ------------ | ------------------------------------------ |\n| `path` | str / `Path` | The file path or `\"-\"` to read from stdin. |\n| **RETURNS** | dict / list | The loaded YAML content. |\n\n#### <kbd>function</kbd> `srsly.is_yaml_serializable`\n\nCheck if a Python object is YAML-serializable.\n\n```python\nassert srsly.is_yaml_serializable({\"hello\": \"world\"}) is True\nassert srsly.is_yaml_serializable(lambda x: x) is False\n```\n\n| Argument | Type | Description |\n| ----------- | ---- | ---------------------------------------- |\n| `obj` | - | The object to check. |\n| **RETURNS** | bool | Whether the object is YAML-serializable. |\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Modern high-performance serialization utilities for Python",
"version": "2.5.0",
"project_urls": {
"Homepage": "https://github.com/explosion/srsly"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f8aafcf23b426fd17227b47ee14a59b2f34e8ad375a48ff4b0a1348d04f7cfc2",
"md5": "bdbd15df879f2025fc18a35a4ce54979",
"sha256": "4b6c2f8232418ef2455f19ae925806d1ada14f44435b7a7731197b8b3ab863eb"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "bdbd15df879f2025fc18a35a4ce54979",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<3.14,>=3.9",
"size": 636043,
"upload_time": "2024-12-10T13:11:56",
"upload_time_iso_8601": "2024-12-10T13:11:56.800156Z",
"url": "https://files.pythonhosted.org/packages/f8/aa/fcf23b426fd17227b47ee14a59b2f34e8ad375a48ff4b0a1348d04f7cfc2/srsly-2.5.0-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ead87b668dfe366f145a99fa8e7e242d209bacd49bc8aec87353e601baad59f8",
"md5": "2f921d18cdb2ddad47b4b71898ce113a",
"sha256": "bcb57a7439784fa6e6a316794d19e0f57ab015e2a909c76b9eca188136743eec"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2f921d18cdb2ddad47b4b71898ce113a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<3.14,>=3.9",
"size": 634428,
"upload_time": "2024-12-10T13:11:59",
"upload_time_iso_8601": "2024-12-10T13:11:59.858228Z",
"url": "https://files.pythonhosted.org/packages/ea/d8/7b668dfe366f145a99fa8e7e242d209bacd49bc8aec87353e601baad59f8/srsly-2.5.0-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ff0a0c8f0ba7ebece603abd02817d251bc360c2ce6187e17cc5e5919e0cd4abb",
"md5": "fb188095bed1ff0f7666979f6295e64b",
"sha256": "cb32303020b954670482295d044b14bd8a4ae417f475a18f870b73eab1444643"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "fb188095bed1ff0f7666979f6295e64b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<3.14,>=3.9",
"size": 1089474,
"upload_time": "2024-12-10T13:12:02",
"upload_time_iso_8601": "2024-12-10T13:12:02.881961Z",
"url": "https://files.pythonhosted.org/packages/ff/0a/0c8f0ba7ebece603abd02817d251bc360c2ce6187e17cc5e5919e0cd4abb/srsly-2.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "914896fc99c3bea3273ce0bb7fab7bcbe459814dc62e2830735745e50f4a97cf",
"md5": "9892cf19fc4e28d505eab11ddd45c2d0",
"sha256": "7450ca5f89a63eeaae845fefca69e35c13e0b476c567ab7ddd1c8119db84855a"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "9892cf19fc4e28d505eab11ddd45c2d0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<3.14,>=3.9",
"size": 1062656,
"upload_time": "2024-12-10T13:12:05",
"upload_time_iso_8601": "2024-12-10T13:12:05.868065Z",
"url": "https://files.pythonhosted.org/packages/91/48/96fc99c3bea3273ce0bb7fab7bcbe459814dc62e2830735745e50f4a97cf/srsly-2.5.0-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "22a1f4a398e66a78e3bca3be1347ce0cbe67997ff4a2737453f1c2ed78bc4e52",
"md5": "c94a103075cd3fb89569f002d22cb337",
"sha256": "53fc82cdeebd068c07fbeb5f79250e3e1159ecb8b79c43a44a1de55928df5c30"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "c94a103075cd3fb89569f002d22cb337",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<3.14,>=3.9",
"size": 632271,
"upload_time": "2024-12-10T13:12:08",
"upload_time_iso_8601": "2024-12-10T13:12:08.899439Z",
"url": "https://files.pythonhosted.org/packages/22/a1/f4a398e66a78e3bca3be1347ce0cbe67997ff4a2737453f1c2ed78bc4e52/srsly-2.5.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d5ec8c3cd621a13de18700bfa907cd2d15b88a0a8d79c100e5ad09d850e23c75",
"md5": "c8cb47fb8e04692b030aad4c39f95dba",
"sha256": "065ebe178e16874e99a459e8a244ad566eadc74304606fa429dca49026505d14"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "c8cb47fb8e04692b030aad4c39f95dba",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<3.14,>=3.9",
"size": 635917,
"upload_time": "2024-12-10T13:12:12",
"upload_time_iso_8601": "2024-12-10T13:12:12.022987Z",
"url": "https://files.pythonhosted.org/packages/d5/ec/8c3cd621a13de18700bfa907cd2d15b88a0a8d79c100e5ad09d850e23c75/srsly-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4dab44513be449756b6d79b95331fef13b8e35cb88e6016643d745c88e12f323",
"md5": "1ee36a1aebec205eae2c1316438554f4",
"sha256": "61af34e76b3284d69dd4a132577da4582b0081ac080fd9f50b8661e390027ca5"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1ee36a1aebec205eae2c1316438554f4",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<3.14,>=3.9",
"size": 634377,
"upload_time": "2024-12-10T13:12:13",
"upload_time_iso_8601": "2024-12-10T13:12:13.890845Z",
"url": "https://files.pythonhosted.org/packages/4d/ab/44513be449756b6d79b95331fef13b8e35cb88e6016643d745c88e12f323/srsly-2.5.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "28e0bc09ee1e6d4a160ef21b40f457894864f28d0e4e9ea2c2877d8d69c0a9a3",
"md5": "002231be6e3156a0bf875d4a9db2765b",
"sha256": "dc306267dd61231ec7e710db79a2c882ac34d2ba2e8b3715206709ab1076f070"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "002231be6e3156a0bf875d4a9db2765b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<3.14,>=3.9",
"size": 1110714,
"upload_time": "2024-12-10T13:12:17",
"upload_time_iso_8601": "2024-12-10T13:12:17.025797Z",
"url": "https://files.pythonhosted.org/packages/28/e0/bc09ee1e6d4a160ef21b40f457894864f28d0e4e9ea2c2877d8d69c0a9a3/srsly-2.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "49c1b2dd873f2fe989503e7aa09b5334e75d26fa9314b6009cc284ad3757be65",
"md5": "2e5cd004b823da9b9250e94f68922546",
"sha256": "88d321bfd198ac417aac5896ba48100af0513ed5801310cc1d29d3580edb9d3b"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "2e5cd004b823da9b9250e94f68922546",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<3.14,>=3.9",
"size": 1091691,
"upload_time": "2024-12-10T13:12:20",
"upload_time_iso_8601": "2024-12-10T13:12:20.197912Z",
"url": "https://files.pythonhosted.org/packages/49/c1/b2dd873f2fe989503e7aa09b5334e75d26fa9314b6009cc284ad3757be65/srsly-2.5.0-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6906dee3ed98320f7fbb18f40c3715cf32f3cc7dcf5fc0787a5c7bd78b1ff090",
"md5": "ff88d2ef3e1c37e989dbb315128e19b0",
"sha256": "68c25506c6b6e3ea83991c1d809a62edbdb959a437820529a43a6ea669b8e11a"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "ff88d2ef3e1c37e989dbb315128e19b0",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<3.14,>=3.9",
"size": 632632,
"upload_time": "2024-12-10T13:12:21",
"upload_time_iso_8601": "2024-12-10T13:12:21.950536Z",
"url": "https://files.pythonhosted.org/packages/69/06/dee3ed98320f7fbb18f40c3715cf32f3cc7dcf5fc0787a5c7bd78b1ff090/srsly-2.5.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "74168b5997dae87eb39462bc23bf059622cfc76ac8da4dde47c457101aeb488d",
"md5": "cf2b7a21de08eaa0e292ded0569ddffc",
"sha256": "72e84cd4772f3d2a855e67cdfd293f9fd40d4939ff54e530dd32c4157b46b463"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "cf2b7a21de08eaa0e292ded0569ddffc",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<3.14,>=3.9",
"size": 636712,
"upload_time": "2024-12-10T13:12:24",
"upload_time_iso_8601": "2024-12-10T13:12:24.047038Z",
"url": "https://files.pythonhosted.org/packages/74/16/8b5997dae87eb39462bc23bf059622cfc76ac8da4dde47c457101aeb488d/srsly-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c0909266899a16b275d9fd58aecbceb183562b4ee709d244e544f086e3358471",
"md5": "f676f5085c53a97efaac67a42825f1c2",
"sha256": "e1f672e879b4ada0fb5b27401f36ad246ab3046183983961e49de1e8679cc3f5"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f676f5085c53a97efaac67a42825f1c2",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<3.14,>=3.9",
"size": 634700,
"upload_time": "2024-12-10T13:12:25",
"upload_time_iso_8601": "2024-12-10T13:12:25.922501Z",
"url": "https://files.pythonhosted.org/packages/c0/90/9266899a16b275d9fd58aecbceb183562b4ee709d244e544f086e3358471/srsly-2.5.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "61e4d7495538ae1957662a7404863aac118930dafbc87e42c4cb95f7aa3feb43",
"md5": "baba2b28e365f7ca5dcb6e41d456ea28",
"sha256": "5d2762e17ad61eea776428652d36da805b8d72c396d2651621ef59513bbcd504"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "baba2b28e365f7ca5dcb6e41d456ea28",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<3.14,>=3.9",
"size": 1143540,
"upload_time": "2024-12-10T13:12:27",
"upload_time_iso_8601": "2024-12-10T13:12:27.668968Z",
"url": "https://files.pythonhosted.org/packages/61/e4/d7495538ae1957662a7404863aac118930dafbc87e42c4cb95f7aa3feb43/srsly-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f68047d815f23a793772a3847b3f49d01528ba5013beabb0e7a20b13a8ea0d97",
"md5": "8a22147166a991612e5ffe048336bc57",
"sha256": "767c902ccb16635af88fc98b10f998aa67180c343da41c34aa20679c6eb6618e"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "8a22147166a991612e5ffe048336bc57",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<3.14,>=3.9",
"size": 1110674,
"upload_time": "2024-12-10T13:12:30",
"upload_time_iso_8601": "2024-12-10T13:12:30.733664Z",
"url": "https://files.pythonhosted.org/packages/f6/80/47d815f23a793772a3847b3f49d01528ba5013beabb0e7a20b13a8ea0d97/srsly-2.5.0-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "33fff76fb452a4a504728f5d03102f67b92bb2076080ba69e9e32292b7c0566a",
"md5": "14f138f645b545b4a6d87ea04da798a3",
"sha256": "3fac84c8fbda019e3f3652854ab3c8bd439af5b57825745fa3c67a603a13a05d"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "14f138f645b545b4a6d87ea04da798a3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<3.14,>=3.9",
"size": 632605,
"upload_time": "2024-12-10T13:12:33",
"upload_time_iso_8601": "2024-12-10T13:12:33.933213Z",
"url": "https://files.pythonhosted.org/packages/33/ff/f76fb452a4a504728f5d03102f67b92bb2076080ba69e9e32292b7c0566a/srsly-2.5.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "af3f1b418e9157d2dfbf5f40e6319d16b41a34f0f3791d1bc11a263174740222",
"md5": "65d93b81f8659f1bd856306cad834940",
"sha256": "1d7fb3fd694eec2328b42ab0767193aa5561bb20cc50bf34da6cb213edf30c25"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "65d93b81f8659f1bd856306cad834940",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<3.14,>=3.9",
"size": 634880,
"upload_time": "2024-12-10T13:12:37",
"upload_time_iso_8601": "2024-12-10T13:12:37.159636Z",
"url": "https://files.pythonhosted.org/packages/af/3f/1b418e9157d2dfbf5f40e6319d16b41a34f0f3791d1bc11a263174740222/srsly-2.5.0-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "955e4c2cc489006954e1bfc24687443cbcfccbd69c52034f26d7c4f902d4a42d",
"md5": "a8f49cc8c93d125371aa96d18cc67c67",
"sha256": "40932a850b10562eb739163ff7644a6b0804fde1fe5b1f9724198e81cb09c704"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "a8f49cc8c93d125371aa96d18cc67c67",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<3.14,>=3.9",
"size": 632841,
"upload_time": "2024-12-10T13:12:39",
"upload_time_iso_8601": "2024-12-10T13:12:39.016335Z",
"url": "https://files.pythonhosted.org/packages/95/5e/4c2cc489006954e1bfc24687443cbcfccbd69c52034f26d7c4f902d4a42d/srsly-2.5.0-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "953d2dd76d2fd99f0fb632c40273755d99466bdee2aaebd40866507249debd43",
"md5": "45541c7fc82a58baff9254aaeaa8682d",
"sha256": "2a657d8c1486d47910868cfadd5a80cd77719c6228fed5b01b878329b95f0752"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "45541c7fc82a58baff9254aaeaa8682d",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<3.14,>=3.9",
"size": 1127978,
"upload_time": "2024-12-10T13:12:42",
"upload_time_iso_8601": "2024-12-10T13:12:42.151530Z",
"url": "https://files.pythonhosted.org/packages/95/3d/2dd76d2fd99f0fb632c40273755d99466bdee2aaebd40866507249debd43/srsly-2.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "549322d3f4d3c1d35d83f15f56a995777535288388f5e6161fbe36ac4bf466a5",
"md5": "727431c16191b33460aab90aa078610e",
"sha256": "9f4430fab1bd62fea7b23ad2bd7822bf80cdd4a75c7d051a555c69aa10f4bfdc"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "727431c16191b33460aab90aa078610e",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<3.14,>=3.9",
"size": 1100354,
"upload_time": "2024-12-10T13:12:43",
"upload_time_iso_8601": "2024-12-10T13:12:43.911019Z",
"url": "https://files.pythonhosted.org/packages/54/93/22d3f4d3c1d35d83f15f56a995777535288388f5e6161fbe36ac4bf466a5/srsly-2.5.0-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2351b448c7ffb15bf9e1af0369bdf3e00e87e893a9ea7fca7ea3f020af5a105a",
"md5": "f927be027893e2302cc895a70847f434",
"sha256": "35fa3aadfc0d983e80fc5e0319825e91f792d13b414c1aff20cbbb47569d5109"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "f927be027893e2302cc895a70847f434",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<3.14,>=3.9",
"size": 630642,
"upload_time": "2024-12-10T13:12:45",
"upload_time_iso_8601": "2024-12-10T13:12:45.833608Z",
"url": "https://files.pythonhosted.org/packages/23/51/b448c7ffb15bf9e1af0369bdf3e00e87e893a9ea7fca7ea3f020af5a105a/srsly-2.5.0-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1d1fe02d74e971bcd4359423f501eb1fc74ddcdc4043e8795b66833cda3f986a",
"md5": "4e6c34d4b420b2233d4705795be4ecc2",
"sha256": "fdc56646351f5c2bcda1c49243c86862cfc74f2030f8d0f00bc450264946d712"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "4e6c34d4b420b2233d4705795be4ecc2",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<3.14,>=3.9",
"size": 637246,
"upload_time": "2024-12-10T13:12:48",
"upload_time_iso_8601": "2024-12-10T13:12:48.889285Z",
"url": "https://files.pythonhosted.org/packages/1d/1f/e02d74e971bcd4359423f501eb1fc74ddcdc4043e8795b66833cda3f986a/srsly-2.5.0-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4a29d79729c871e58667451f1b42cbe76bf57a136debc2e7476ca4e8f748b3fa",
"md5": "7e6241c8284dea33424a8606ba53d535",
"sha256": "4e199c166209991b54a3370810bc85437ad81b5930b4e2bd6760964c9decaf16"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "7e6241c8284dea33424a8606ba53d535",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<3.14,>=3.9",
"size": 635658,
"upload_time": "2024-12-10T13:12:50",
"upload_time_iso_8601": "2024-12-10T13:12:50.926630Z",
"url": "https://files.pythonhosted.org/packages/4a/29/d79729c871e58667451f1b42cbe76bf57a136debc2e7476ca4e8f748b3fa/srsly-2.5.0-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a19ce2d933eb7cbdcd1a81ec5ebd419e750d167bfca31371469f261348c32433",
"md5": "023eafd50497628cbe9f5681e73cdf4c",
"sha256": "a62b4090bcbe44ce74e7be3d1d91eed71e6c53b361794b6502952a7d435278de"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "023eafd50497628cbe9f5681e73cdf4c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<3.14,>=3.9",
"size": 1093877,
"upload_time": "2024-12-10T13:12:52",
"upload_time_iso_8601": "2024-12-10T13:12:52.735699Z",
"url": "https://files.pythonhosted.org/packages/a1/9c/e2d933eb7cbdcd1a81ec5ebd419e750d167bfca31371469f261348c32433/srsly-2.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5b6240ab0c212d1505ce41f03dc346412f6000ab5eb875ffa4bb352e15781157",
"md5": "da13b34faa19b90d02365675035d4168",
"sha256": "12fc682ff19b4ad771a87e9c8d1a4d8e535d3254c6e797d4282b6bb18569c2f3"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp39-cp39-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "da13b34faa19b90d02365675035d4168",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<3.14,>=3.9",
"size": 1065906,
"upload_time": "2024-12-10T13:12:54",
"upload_time_iso_8601": "2024-12-10T13:12:54.431255Z",
"url": "https://files.pythonhosted.org/packages/5b/62/40ab0c212d1505ce41f03dc346412f6000ab5eb875ffa4bb352e15781157/srsly-2.5.0-cp39-cp39-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "750a688e6fefa160f742e081a80a741b7bd13c30dcef7007e0c8893688525154",
"md5": "4cf7013f85eb4f9a41c3bd759df5f9cb",
"sha256": "1ae3e908397df7b7b563a76b7867114af7b88ddb96b1c34c499dc47a1990523f"
},
"downloads": -1,
"filename": "srsly-2.5.0-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "4cf7013f85eb4f9a41c3bd759df5f9cb",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<3.14,>=3.9",
"size": 633385,
"upload_time": "2024-12-10T13:12:59",
"upload_time_iso_8601": "2024-12-10T13:12:59.226461Z",
"url": "https://files.pythonhosted.org/packages/75/0a/688e6fefa160f742e081a80a741b7bd13c30dcef7007e0c8893688525154/srsly-2.5.0-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f55452041112dfa5932ea6696ca54c5ce051a71b551641733ccdf6e2b005cab3",
"md5": "72278cfb58f669f41a0b59b29b6c7156",
"sha256": "2776752cdb14275ca01e9a7b7a9c047ccf31db17f0076e73343cfcc9a8df6cbd"
},
"downloads": -1,
"filename": "srsly-2.5.0.tar.gz",
"has_sig": false,
"md5_digest": "72278cfb58f669f41a0b59b29b6c7156",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.14,>=3.9",
"size": 466506,
"upload_time": "2024-12-10T13:13:02",
"upload_time_iso_8601": "2024-12-10T13:13:02.335651Z",
"url": "https://files.pythonhosted.org/packages/f5/54/52041112dfa5932ea6696ca54c5ce051a71b551641733ccdf6e2b005cab3/srsly-2.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-10 13:13:02",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "explosion",
"github_project": "srsly",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "catalogue",
"specs": [
[
">=",
"2.0.3"
],
[
"<",
"2.1.0"
]
]
},
{
"name": "cython",
"specs": [
[
">=",
"0.29.1"
]
]
},
{
"name": "pytest",
"specs": [
[
">=",
"4.6.5"
]
]
},
{
"name": "pytest-timeout",
"specs": [
[
">=",
"1.3.3"
]
]
},
{
"name": "mock",
"specs": [
[
">=",
"2.0.0"
],
[
"<",
"3.0.0"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.15.0"
]
]
},
{
"name": "psutil",
"specs": []
}
],
"lcname": "srsly"
}