Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/0xsirsaif/idcrockford
Crockford Base 32 encoder/decoder/generator/validator
https://github.com/0xsirsaif/idcrockford
Last synced: 27 days ago
JSON representation
Crockford Base 32 encoder/decoder/generator/validator
- Host: GitHub
- URL: https://github.com/0xsirsaif/idcrockford
- Owner: 0xsirsaif
- Created: 2024-11-30T22:34:01.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2024-11-30T22:59:33.000Z (about 1 month ago)
- Last Synced: 2024-11-30T23:29:58.382Z (about 1 month ago)
- Language: Python
- Homepage:
- Size: 0 Bytes
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# IDCrockford
Crockford Base32 ID encoder/decoder with FastAPI dependency injection support for validation and generation of Crockford Base32 IDs.
`idcrockford` has 3 interfaces:
- CLI
- Library
- FastAPI dependency## Installation
```bash
pip install idcrockford
```or using [uv](https://docs.astral.sh/uv/):
```bash
uvx idcrockford
```## CLI
```bash
uvx idcrockford --helpusage: idcrockford [-h] [--checksum] [--split SIZE] [--padding] [--strict] {encode,decode,normalize,generate} [input]
Crockford Base32 Utility
positional arguments:
{encode,decode,normalize,generate}
Operation to perform
input Input to process. For encode: integer or string. For generate: size (optional)options:
-h, --help show this help message and exit
--checksum Add/validate checksum symbol
--split SIZE Split encoded string with hyphens (chunk size, default: no splitting)
--padding Add padding characters (=) to output
--strict Strict mode for normalize command - error if normalization needed
```## Library
```python
from idcrockford import Base32Crockfordcrockford = Base32Crockford(
checksum=True,
split=4,
padding=True,
)# Encode and decode
crockford.encode(1234567890) # 14SC-0PJV
crockford.decode("14SC-0PJV") # 1234567890# Generate
crockford.generate() # 16 random characters
crockford.generate(size=10) # 10 random characters
crockford.generate(size=10, checksum=True, split=4, padding=True) # 10 random characters with checksum, split and padding# TODO: add normalize
crockford.normalize("14SC-0PJV") # 14SC0PJV
```## FastAPI Dependency
```python
from fastapi import FastAPI, Depends
from idcrockford import CFIdentifierConfigIdentifierConfig = CFIdentifierConfig(checksum=True, size=16)
app = FastAPI()
@app.get("/items/{id}")
def read_item(id: str = Depends(IdentifierConfig.validate)):
return {"id": id}@app.post("/items/")
def create_item(id: str = Depends(IdentifierConfig.generate)):
return {"id": id}
```## Roadmap
- [ ] Add `normalize` method to `CFIdentifierConfig`
- [ ] Support Pydantic custom type for Crockford Base32 ID validation and generation## License
MIT
### Other packages
- [inveniosoftware/base32-lib](https://github.com/inveniosoftware/base32-lib) - Python Base32 encoder/decoder with no padding
- [jbittel/base32-crockford](https://github.com/jbittel/base32-crockford) - JavaScript Base32 encoder/decoder with Crockford checksum
- [DrSLDR/krock32](https://github.com/DrSLDR/krock32) - Kotlin Base32 encoder/decoder with Crockford checksum
- [pat-jpnk/Crockford-Base32](https://github.com/pat-jpnk/Crockford-Base32) - JavaScript Base32 encoder/decoder with Crockford checksum