dag-json


Namedag-json JSON
Version 0.3 PyPI version JSON
download
home_pageNone
SummaryPython implementation of the IPLD DAG-JSON codec
upload_time2024-09-23 20:04:00
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseNone
keywords dag-json ipld codec cid
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            dag-json [![Circle CI](https://circleci.com/gh/snarfed/dag-json.svg?style=svg)](https://circleci.com/gh/snarfed/dag-json) [![Coverage Status](https://coveralls.io/repos/github/snarfed/dag-json/badge.svg?branch=main)](https://coveralls.io/github/snarfed/dag-json?branch=master)
===

Python implementation of the [IPLD](https://ipld.io/) [DAG-JSON codec](https://ipld.io/docs/codecs/known/dag-json/). Uses the [`CID`](https://multiformats.readthedocs.io/en/latest/cid.html) class from [`multiformats`](https://multiformats.readthedocs.io/). Passes all of IPLD's [DAG-JSON cross-codec test fixtures](https://ipld.io/specs/codecs/dag-json/fixtures/cross-codec/).

Install from [PyPI](https://pypi.org/project/dag-json/) with `pip install dag-json`.

License: This project is placed in the public domain. You may also use it under the [CC0 License](https://creativecommons.org/publicdomain/zero/1.0/).

* [Usage](#usage)
* [Changelog](#changelog)
* [Release instructions](#release-instructions)


## Usage

The `dag_json` module has three functions:
* `decode` takes DAG-JSON encoded `bytes` and returns the corresponding native Python object.
* `encode` takes any IPLD-compatible native Python object - `int`, `float`, `str`, `bool`, `list`, `bytes`, or [`multiformats.CID`](https://multiformats.readthedocs.io/en/latest/cid.html) - and returns it as DAG-JSON encoded `bytes`.
* `encoded_cid` takes DAG-JSON encoded `bytes` and returns its corresponding [`multiformats.CID`](https://multiformats.readthedocs.io/en/latest/cid.html).

Here's example usage:

```py
>>> from dag_json import decode, encode, encoded_cid
>>> from multiformats import CID

>>> encoded = encode({
    'foo': 'bar',
    'data': b'hello world',
    'link': CID.decode('QmUGhP2X8xo9dsj45vqx1H6i5WqPqLqmLQsHTTxd3ke8mp'),
})
>>> encoded
b'{"data":{"/":{"bytes":"aGVsbG8gd29ybGQ"}},"foo":"bar","link":{"/":"QmUGhP2X8xo9dsj45vqx1H6i5WqPqLqmLQsHTTxd3ke8mp"}}'

>>> repr(decode(encoded))
{
    'data': b'hello world',
    'foo': 'bar',
    'link': CID('base58btc', 0, 'dag-pb', '12205822d187bd40b04cc8ae7437888ebf844efac1729e098c8816d585d0fcc42b5b'),
}

>>> encoded_cid(encoded)
CID('base58btc', 1, 'dag-json', '1220d7c1db350b6fda1df4ab788bffc87b24c68d05ddfb2c9ff6f2a4f9eb12236c31')
```


## Changelog

### 0.3 - 2024-09-23

* Add new `dialect` kwarg to `decode` to match `encode`.

### 0.2 - 2024-06-24

* Add new `encoded_cid` function.
* Add new `dialect` kwarg to `encode`, `DagJsonEncoder`. Currently only supports one value, `'atproto'`, to encode CIDs and bytes with `$link` and `$bytes` keys [according to the AT Protocol data model](https://atproto.com/specs/data-model).

### 0.1 - 2023-04-23

Initial release!


## Release instructions

Here's how to package, test, and ship a new release.

1. Run the unit tests.

    ```sh
    source local/bin/activate.csh
    python -m unittest discover
    ```
1. Bump the version number in `pyproject.toml`. `git grep` the old version number to make sure it only appears in the changelog. Change the current changelog entry in `README.md` for this new version from _unreleased_ to the current date.
1. `git commit -am 'release vX.Y'`
1. Upload to [test.pypi.org](https://test.pypi.org/) for testing.

    ```sh
    python -m build
    setenv ver X.Y
    twine upload -r pypitest dist/dag_json-$ver*
    ```
1. Install from test.pypi.org.

    ```sh
    cd /tmp
    python -m venv local
    source local/bin/activate.csh
    pip uninstall dag-json # make sure we force pip to use the uploaded version
    pip install --upgrade pip
    pip install -i https://test.pypi.org/simple --extra-index-url https://pypi.org/simple dag-json==$ver
    ```
1. [Run the example code above](#usage) to test that the code loads and runs.
1. Tag the release in git. In the tag message editor, delete the generated comments at bottom, leave the first line blank (to omit the release "title" in github), put `### Notable changes` on the second line, then copy and paste this version's changelog contents below it.

    ```sh
    git tag -a v$ver --cleanup=verbatim
    git push && git push --tags
    ```
1. [Click here to draft a new release on GitHub.](https://github.com/snarfed/dag-json/releases/new) Enter `vX.Y` in the _Tag version_ box. Leave _Release title_ empty. Copy `### Notable changes` and the changelog contents into the description text box.
1. Upload to [pypi.org](https://pypi.org/)!

    ```sh
    twine upload dist/dag_json-$ver.tar.gz dist/dag_json-$ver-py3-none-any.whl
    ```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "dag-json",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "DAG-JSON, IPLD, codec, CID",
    "author": null,
    "author_email": "Ryan Barrett <dag-json@ryanb.org>",
    "download_url": "https://files.pythonhosted.org/packages/05/10/10d2d13a0ca7012a9af6db996399c21009ea3b5618a00eb4ee29c5a22042/dag_json-0.3.tar.gz",
    "platform": null,
    "description": "dag-json [![Circle CI](https://circleci.com/gh/snarfed/dag-json.svg?style=svg)](https://circleci.com/gh/snarfed/dag-json) [![Coverage Status](https://coveralls.io/repos/github/snarfed/dag-json/badge.svg?branch=main)](https://coveralls.io/github/snarfed/dag-json?branch=master)\n===\n\nPython implementation of the [IPLD](https://ipld.io/) [DAG-JSON codec](https://ipld.io/docs/codecs/known/dag-json/). Uses the [`CID`](https://multiformats.readthedocs.io/en/latest/cid.html) class from [`multiformats`](https://multiformats.readthedocs.io/). Passes all of IPLD's [DAG-JSON cross-codec test fixtures](https://ipld.io/specs/codecs/dag-json/fixtures/cross-codec/).\n\nInstall from [PyPI](https://pypi.org/project/dag-json/) with `pip install dag-json`.\n\nLicense: This project is placed in the public domain. You may also use it under the [CC0 License](https://creativecommons.org/publicdomain/zero/1.0/).\n\n* [Usage](#usage)\n* [Changelog](#changelog)\n* [Release instructions](#release-instructions)\n\n\n## Usage\n\nThe `dag_json` module has three functions:\n* `decode` takes DAG-JSON encoded `bytes` and returns the corresponding native Python object.\n* `encode` takes any IPLD-compatible native Python object - `int`, `float`, `str`, `bool`, `list`, `bytes`, or [`multiformats.CID`](https://multiformats.readthedocs.io/en/latest/cid.html) - and returns it as DAG-JSON encoded `bytes`.\n* `encoded_cid` takes DAG-JSON encoded `bytes` and returns its corresponding [`multiformats.CID`](https://multiformats.readthedocs.io/en/latest/cid.html).\n\nHere's example usage:\n\n```py\n>>> from dag_json import decode, encode, encoded_cid\n>>> from multiformats import CID\n\n>>> encoded = encode({\n    'foo': 'bar',\n    'data': b'hello world',\n    'link': CID.decode('QmUGhP2X8xo9dsj45vqx1H6i5WqPqLqmLQsHTTxd3ke8mp'),\n})\n>>> encoded\nb'{\"data\":{\"/\":{\"bytes\":\"aGVsbG8gd29ybGQ\"}},\"foo\":\"bar\",\"link\":{\"/\":\"QmUGhP2X8xo9dsj45vqx1H6i5WqPqLqmLQsHTTxd3ke8mp\"}}'\n\n>>> repr(decode(encoded))\n{\n    'data': b'hello world',\n    'foo': 'bar',\n    'link': CID('base58btc', 0, 'dag-pb', '12205822d187bd40b04cc8ae7437888ebf844efac1729e098c8816d585d0fcc42b5b'),\n}\n\n>>> encoded_cid(encoded)\nCID('base58btc', 1, 'dag-json', '1220d7c1db350b6fda1df4ab788bffc87b24c68d05ddfb2c9ff6f2a4f9eb12236c31')\n```\n\n\n## Changelog\n\n### 0.3 - 2024-09-23\n\n* Add new `dialect` kwarg to `decode` to match `encode`.\n\n### 0.2 - 2024-06-24\n\n* Add new `encoded_cid` function.\n* Add new `dialect` kwarg to `encode`, `DagJsonEncoder`. Currently only supports one value, `'atproto'`, to encode CIDs and bytes with `$link` and `$bytes` keys [according to the AT Protocol data model](https://atproto.com/specs/data-model).\n\n### 0.1 - 2023-04-23\n\nInitial release!\n\n\n## Release instructions\n\nHere's how to package, test, and ship a new release.\n\n1. Run the unit tests.\n\n    ```sh\n    source local/bin/activate.csh\n    python -m unittest discover\n    ```\n1. Bump the version number in `pyproject.toml`. `git grep` the old version number to make sure it only appears in the changelog. Change the current changelog entry in `README.md` for this new version from _unreleased_ to the current date.\n1. `git commit -am 'release vX.Y'`\n1. Upload to [test.pypi.org](https://test.pypi.org/) for testing.\n\n    ```sh\n    python -m build\n    setenv ver X.Y\n    twine upload -r pypitest dist/dag_json-$ver*\n    ```\n1. Install from test.pypi.org.\n\n    ```sh\n    cd /tmp\n    python -m venv local\n    source local/bin/activate.csh\n    pip uninstall dag-json # make sure we force pip to use the uploaded version\n    pip install --upgrade pip\n    pip install -i https://test.pypi.org/simple --extra-index-url https://pypi.org/simple dag-json==$ver\n    ```\n1. [Run the example code above](#usage) to test that the code loads and runs.\n1. Tag the release in git. In the tag message editor, delete the generated comments at bottom, leave the first line blank (to omit the release \"title\" in github), put `### Notable changes` on the second line, then copy and paste this version's changelog contents below it.\n\n    ```sh\n    git tag -a v$ver --cleanup=verbatim\n    git push && git push --tags\n    ```\n1. [Click here to draft a new release on GitHub.](https://github.com/snarfed/dag-json/releases/new) Enter `vX.Y` in the _Tag version_ box. Leave _Release title_ empty. Copy `### Notable changes` and the changelog contents into the description text box.\n1. Upload to [pypi.org](https://pypi.org/)!\n\n    ```sh\n    twine upload dist/dag_json-$ver.tar.gz dist/dag_json-$ver-py3-none-any.whl\n    ```\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python implementation of the IPLD DAG-JSON codec",
    "version": "0.3",
    "project_urls": {
        "Homepage": "https://github.com/snarfed/dag-json"
    },
    "split_keywords": [
        "dag-json",
        " ipld",
        " codec",
        " cid"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aa53b2cbcca77777c051e0c95f4cd97f8101ec1dfe7da45f237359c120c302b9",
                "md5": "697e26948f9cb9b1f3f71973c4aaf871",
                "sha256": "61c055f90b8ee39dcf42e4189ba7fc55f37c71bddf1cce885df823f9fce7d627"
            },
            "downloads": -1,
            "filename": "dag_json-0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "697e26948f9cb9b1f3f71973c4aaf871",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 7622,
            "upload_time": "2024-09-23T20:03:59",
            "upload_time_iso_8601": "2024-09-23T20:03:59.071367Z",
            "url": "https://files.pythonhosted.org/packages/aa/53/b2cbcca77777c051e0c95f4cd97f8101ec1dfe7da45f237359c120c302b9/dag_json-0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "051010d2d13a0ca7012a9af6db996399c21009ea3b5618a00eb4ee29c5a22042",
                "md5": "a37fbb9ec216b48c5e1d7f92aa486258",
                "sha256": "854fdff028cb5289b3e3b0639f18676e9bc9c192348fc45a8691811540c1c9ef"
            },
            "downloads": -1,
            "filename": "dag_json-0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "a37fbb9ec216b48c5e1d7f92aa486258",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 7512,
            "upload_time": "2024-09-23T20:04:00",
            "upload_time_iso_8601": "2024-09-23T20:04:00.013844Z",
            "url": "https://files.pythonhosted.org/packages/05/10/10d2d13a0ca7012a9af6db996399c21009ea3b5618a00eb4ee29c5a22042/dag_json-0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-23 20:04:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "snarfed",
    "github_project": "dag-json",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "circle": true,
    "lcname": "dag-json"
}
        
Elapsed time: 8.39077s