srsly


Namesrsly JSON
Version 2.5.0 PyPI version JSON
download
home_pagehttps://github.com/explosion/srsly
SummaryModern high-performance serialization utilities for Python
upload_time2024-12-10 13:13:02
maintainerNone
docs_urlNone
authorExplosion
requires_python<3.14,>=3.9
licenseMIT
keywords
VCS
bugtrack_url
requirements catalogue cython pytest pytest-timeout mock numpy psutil
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <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"
}
        
Elapsed time: 0.57015s