Skip to main content

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.Dict has a dict_name that is used in the database to identify the dictionary.
  • Tuple-based indexing. Get and set values by dict_name, version and key.

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)

Source distribution for tsih 0.1.9
File Size Uploaded Provenance
tsih-0.1.9.tar.gz 12.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tsih 0.1.9
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page