Python module for base62 encoding
Project description
base62
A Python module for base62 encoding. Ported from PHP code that I wrote in mid-2000, which can be found here.
Rationale
When writing a web application, often times we would like to keep the URLs short.
http://localhost/posts/V1Biicwt
This certainly gives a more concise look than the following.
http://localhost/posts/109237591284123
This was the original motivation to write this module, but there shall be much more broader potential use cases of this module. The main advantage of base62 is that it is URL-safe (as opposed to base64) due to the lack of special characters such as ‘/’ or ‘=’. Another key aspect is that the alphabetical orders of the original (unencoded) data is preserved when encoded. In other words, encoded data can be sorted without being decoded at all.
Installation
base62 can be installed via pypi. Unfortunately, the package name base62 on pypi had already been occupied by someone else, so we had to go by pybase62.
pip install pybase62
Alternatively, you may clone the code to manually install it.
git clone https://github.com/suminb/base62 cd base62 && python setup.py install
Usage
The following section describes a basic usage of base62.
>>> import base62
>>> base62.encode(34441886726)
'base62'
>>> base62.decode('base62')
34441886726
From version 0.2.0, base62 supports bytes array encoding as well.
>>> base62.encodebytes(b'\0')
0
>>> base62.encodebytes(b'\xff\xff')
H31
>>> base62.decodebytes('0')
b''
>>> base62.decodebytes('1')
b'\x01'
Some may be inclined to assume that they both take bytes types as input due to their namings. However, encodebytes() takes bytes types whereas decodebytes() takes str types as an input. They are intended to be commutative, so that a roundtrip between both functions yields the original value.
Formally speaking, we say function f and g commute if f∘g = g∘f where f(g(x)) = (f∘g)(x).
Therefore, we may expect the following relationships:
value == encodebytes(decodebytes(value))
value == decodebytes(encodebytes(value))
Tests
You may run some test cases to ensure all functionalities are operational.
pytest -v
If pytest is not installed, you may want to run the following command:
pip install -r tests/requirements.txt
Deployment
Deploy a source package (to pypi) as follows:
python setup.py sdist upload
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file pybase62-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: pybase62-1.0.0-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60539ad956ec9e9de091bc7ae88c9550bc2fa17f503050cf34d021b75e73cb27 |
|
MD5 | 16985fa217b8c7e43441d173f6d5b437 |
|
BLAKE2b-256 | 11078fe498201daece90af1725cf48d5de9d1a87ea8d457df52c986ef926ff33 |