TSIH - A dict with a HISTory
tsih.Dict is a type of UserDict that allows versioning, backed up by a sqlite3 database.
- Transparent operation
- Only changes (deltas) are stored.
- Forward-filling of values. A value is reused in future versions, unless it changes.
- Auto-versioning option (off by default), to produce a new version every time a value change happens.
- Ability to store related entries as separate dictionaries. Each
tsih.Dicthas adict_namethat is used in the database to identify the dictionary. - Tuple-based indexing. Get and set values by
dict_name,versionandkey.
Usage and examples
tsih.Dict objects can be used just like regular dictionaries:
>>> from tsih import Dict
>>> a = Dict()
>>> a['test'] = True
>>> a
{'test': True}
>>> a.get('missing', 5)
5
>>> a['missing']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
But at any point, new versions can be produced:
>>> a.version
0
>>> a['start'] = 'now'
>>> a
{'test': True, 'start': 'now'}
>>> a.version = 1
>>> a['start'] = 'one version ago'
>>> a
{'test': True, 'start': 'one version ago'}
Previous values can be accessed using tuple keys, i.e., (version, key):
>>> a[(0, 'start')]
'now'
>>> a[(1, 'start')]
'one version ago'
Each version only "records" changes, but later versions (even if they don't exist yet) inherit unchanged values from the previous ones:
>>> a[(5, 'start')]
'one version ago'
>>> a.version = 5
>>> # Until the value is changed
>>> a['start'] = '4 versions ago'
>>> a[(5, 'start')]
'4 versions ago'
You can access every state of the Dict using None in place of the version and/or the key.
In that case, we will get an iterator, which we can turn into a list explicitly or with the .value method.
For example, here we get all the changes to the start key:
>>> a[(None, 'start')].value() #
[(0.0, 'now'), (1.0, 'one version ago'), (5.0, '4 versions ago')]
Similarly, to get the keys and values at a specific version:
>>> list(a[(0, None)])
[('start', 'now'), ('test', True)]
Or, we can combine both to get the keys and values at every version:
>>> a[(None, None)].value()
[(0.0, 'start', 'now'), (1.0, 'start', 'one version ago'), (5.0, 'start', '4 versions ago'), (0.0, 'test', True), (1.0, 'test', True), (5.0, 'test', True)]
Use cases
Tsih was originally part of the Soil Agent-Based Social Simulation framework, where both the environment and the agents need to keep track of state (i.e., attribute) changes.
Metadata
Release files for tsih 0.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| tsih-0.1.9.tar.gz | 12.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tsih-0.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.3 kB
Release files / tsih-0.1.9.tar.gz
| Download URL | tsih-0.1.9.tar.gz |
|---|---|
| Size | 12.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b40481b22d7983957d3c8859a245ab7f64236080dcd9bd8ef255147780657e8b
|
|
BLAKE2b-256 checksum How to use checksums |
07f08f16d1432f6a43e1a3609e778d99620cea0da90ea13d800c59a59c71737d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/5.1.0 pkginfo/1.7.1 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.8.10
|
Release files / tsih-0.1.9-py3-none-any.whl
| Download URL | tsih-0.1.9-py3-none-any.whl |
|---|---|
| Size | 14.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e1c4a743c9247493fe0c5d201d078e0a4b1cdce029a691a28accf4877571f9a4
|
|
BLAKE2b-256 checksum How to use checksums |
5a061f601e360c3eb05e02ebbb01d292556512f05aa86ef6cbb3dff66db5db98
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/5.1.0 pkginfo/1.7.1 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.8.10
|
Security for tsih 0.1.9
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.