This is a very simple python wrapper for ucl (http://www.oberhumer.com/opensource/ucl/) using cffi. Note that it has been written for cffi 0.3, and doesn't really work hard to be efficient.
Before running, make sure to have ucl installed on your system.
OS | package name |
---|---|
Fedora 39 | ucl-devel |
Alpine 3 | ucl-dev |
Debian 12 | libucl-dev |
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m pip install .
>>> from pyucl import ucl
>>> @ucl.callback
... def a_callback(n0, n1, n, v):
... print "CALLBACK GOT CALLED: %d %d %d" % (n0, n1, n)
>>> string_in = "henkitsminehenkhenkhenkitsmine"
>>> string_out = ucl.nrv2d_99_compress(string_in,
... level=10, callback=a_callback)
CALLBACK GOT CALLED: 0 0 -1
CALLBACK GOT CALLED: 1 0 3
CALLBACK GOT CALLED: 30 24 4
>>> print len(string_in), len(string_out)
30 24
>>> string_dec = ucl.nrv2d_decompress(string_out, len(string_in))
>>> print string_dec == string_in
True
>>> string_dec = ucl.nrv2d_decompress(string_out, len(string_in) - 10)
Traceback (most recent call last):
...
RuntimeError: Decompression failed: -202 (UCL_E_OUTPUT_OVERRUN)
>>> ucl.nrv2b_decompress(string_out, 2*len(string_in))
Traceback (most recent call last):
...
RuntimeError: Decompression failed: -203 (UCL_E_LOOKBEHIND_OVERRUN)