Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marshalx/python-libipld
🏎️ Fast Python library to work with IPLD: DAG-CBOR, CID, CAR, multibase
https://github.com/marshalx/python-libipld
atproto cid dag-cbor decoding encoding ipld multibase
Last synced: 30 days ago
JSON representation
🏎️ Fast Python library to work with IPLD: DAG-CBOR, CID, CAR, multibase
- Host: GitHub
- URL: https://github.com/marshalx/python-libipld
- Owner: MarshalX
- License: mit
- Created: 2023-09-03T12:46:11.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-24T11:33:34.000Z (3 months ago)
- Last Synced: 2024-10-25T09:12:34.524Z (3 months ago)
- Topics: atproto, cid, dag-cbor, decoding, encoding, ipld, multibase
- Language: Rust
- Homepage: https://pypi.org/project/libipld/
- Size: 4.14 MB
- Stars: 16
- Watchers: 3
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
## Python IPLD
> This project aims to speed up [The AT Protocol SDK](https://github.com/MarshalX/atproto) by using Rust for the heavy lifting. Only atproto related parts are implemented first.
Code snippet:
```python
import libipld# CID
print(libipld.decode_cid('bafyreig7jbijxpn4lfhvnvyuwf5u5jyhd7begxwyiqe7ingwxycjdqjjoa'))
# Output: {'hash': {'size': 32, 'code': 18, 'digest': b'\xdfHP\x9b\xbd\xbcYOV\xd7\x14\xb1{N\xa7\x07\x1f\xc2C^\xd8D\t\xf44\xd6\xbe\x04\x91\xc1)p'}, 'version': 1, 'codec': 113}
print(libipld.encode_cid(b'\x01q\x12 \xb6\x81\x1a\x1d\x7f\x8c\x17\x91\xdam\x1bO\x13m\xc0\xe2&y\xea\xfe\xaaX\xd6M~/\xaa\xd5\x89\x0e\x9d\x9c'))
# Output: bafyreifwqenb274mc6i5u3i3j4jw3qhcez46v7vkldle27rpvlkysdu5tq# DAG-CBOR
print(libipld.decode_dag_cbor(b'\xa2aa\x0cabfhello!'))
# Output: {'a': 12, 'b': 'hello!'}
print(libipld.encode_dag_cbor({'a': 12, 'b': 'hello!'}))
# Output: b'\xa2aa\x0cabfhello!'# multibase
print(libipld.decode_multibase('ueWVzIG1hbmkgIQ'))
# Output: ('u', b'yes mani !')
print(libipld.encode_multibase('u', b'yes mani !'))
# Output: ueWVzIG1hbmkgIQ
```### Features
- Decode DAG-CBOR (`decode_dag_cbor(bytes) -> dict`, `decode_dag_cbor_multi(bytes) -> list[dict]`)
- Encode DAG-CBOR (`encode_dag_cbor(obj) -> bytes`)
- Decode CID (`decode_cid(str | bytes) -> dict`). Accepts CID stringified form or CID raw byte form.
- Encode CID (`encode_cid(bytes) -> str`). Encodes CID raw byte form to stringified form.
- Decode Multibase (`decode_multibase(str) -> tuple[str, bytes]`). Returns base and data.
- Encode Multibase (`encode_multibase(str, bytes) -> str`). Accepts base and data.
- Decode CAR (`decode_car(bytes) -> tuple[dict, dict[bytes, dict]]`). Returns a header and blocks mapped by CID. CIDs in raw byte form.Note: a stub file will be provided in the future.
## Requirements
- Python 3.8 or higher.
## Installing
You can install or upgrade `libipld` via
```bash
pip install libipld
```### Contributing
Contributions of all sizes are welcome.
### License
MIT