Skip to main content

Python bindings for SQLite's LSM key/value engine

Project description

lsm

Fast Python bindings for SQLite's LSM key/value store. The LSM storage engine was initially written as part of the experimental SQLite4 rewrite (now abandoned). More recently, the LSM source code was moved into the SQLite3 source tree and has seen some improvements and fixes. This project uses the LSM code from the SQLite3 source tree.

Features:

  • Embedded zero-conf database.
  • Keys support in-order traversal using cursors.
  • Transactional (including nested transactions).
  • Single writer/multiple reader MVCC based transactional concurrency model.
  • On-disk database stored in a single file.
  • Data is durable in the face of application or power failure.
  • Thread-safe.
  • Releases GIL for read and write operations (each connection has own mutex)
  • Page compression (lz4 or zstd)
  • Zero dependency static library
  • Python 3.x.

Limitations:

The source for Python lsm is hosted on GitHub.

If you encounter any bugs in the library, please open an issue, including a description of the bug and any related traceback.

Quick-start

Below is a sample interactive console session designed to show some of the basic features and functionality of the lsm Python library.

To begin, instantiate a LSM object, specifying a path to a database file.

>>> from lsm import LSM
>>> db = LSM('test.ldb')
>>> db.open()
>>> print(db)
<LSM at "/tmp/test.ldb" as 0x10951e450>

More pythonic variant is using context manager:

>>> from lsm import LSM
>>> with LSM("/tmp/test.ldb") as db:
...     print(db)
<LSM at "/tmp/test.ldb" as 0x10951e450>

Binary/string mode

You should select mode for opening the database with binary: bool = True argument.

For example when you want to store strings just pass binary=False:

>>> from lsm import LSM
>>> with LSM("/tmp/test.ldb", binary=False) as db:
...    db['foo'] = 'bar'   # must be str for keys and values
...    print(db['foo'])
bar

Otherwise, you must pass keys and values ad bytes (default behaviour):

>>> from lsm import LSM
>>> with LSM("/tmp/test.ldb") as db:
...    db[b'foo'] = b'bar'   # must be bytes for keys and values
...    print(db[b'foo'])
b'bar'

Key/Value Features

lsm is a key/value store, and has a dictionary-like API:

>>> from lsm import LSM
>>> with LSM("/tmp/test.ldb", binary=False) as db:
...    db['foo'] = 'bar'
...    print(db['foo'])
bar

Database apply changes as soon as possible:

>>> from lsm import LSM
>>> db = LSM("/tmp/test.ldb", binary=False)
>>> db.open()
True
>>> for i in range(4):
...     db[f'k{i}'] = str(i)
...
>>> 'k3' in db
True
>>> 'k4' in db
False
>>> del db['k3']
>>> db['k3']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: "Key 'k3' was not found"

By default when you attempt to look up a key, lsm will search for an exact match. You can also search for the closest key, if the specific key you are searching for does not exist:

>>> from lsm import, LSM, SEEK_LE, SEEK_GE
>>> db = LSM("/tmp/test.ldb", binary=False)
>>> db.open()
True
>>> db['k1xx', SEEK_LE]  # Here we will match "k1".
'1'
>>> db['k1xx', SEEK_GE]  # Here we will match "k2".
'2'

LSM supports other common dictionary methods such as:

  • keys()
  • values()
  • items()
  • update()

Slices and Iteration

The database can be iterated through directly, or sliced. When you are slicing the database the start and end keys need not exist -- lsm will find the closest key (details can be found in the LSM.fetch_range() documentation).

>>> [item for item in db.items()]
[('foo', 'bar'), ('k0', '0'), ('k1', '1'), ('k2', '2')]

>>> db['k0':'k99']
<lsm_slice object at 0x10d4f3500>

>>> list(db['k0':'k99'])
[('k0', '0'), ('k1', '1'), ('k2', '2')]

You can use open-ended slices. If the lower- or upper-bound is outside the range of keys an empty list is returned.

>>> list(db['k0':])
[('k0', '0'), ('k1', '1'), ('k2', '2')]

>>> list(db[:'k1'])
[('foo', 'bar'), ('k0', '0'), ('k1', '1')]

>>> list(db[:'aaa'])
[]

To retrieve keys in reverse order or stepping over more then one item, simply use a third slice argument as usual. Negative step value means reverse order, but first and second arguments must be ordinary ordered.

>>> list(db['k0':'k99':2])
[('k0', '0'), ('k2', '2')]

>>> list(db['k0'::-1])
[('k2', '2'), ('k1', '1'), ('k0', '0')]

>>> list(db['k0'::-2])
[('k2', '2'), ('k0', '0')]


>>> list(db['k0'::3])
[('k0', '0')]

You can also delete slices of keys, but note that the delete will not include the keys themselves:

>>> del db['k0':'k99']

>>> list(db)  # Note that 'k0' still exists.
[('foo', 'bar'), ('k0', '0')]

Cursors

While slicing may cover most use-cases, for finer-grained control you can use cursors for traversing records.

>>> with db.cursor() as cursor:
...     for key, value in cursor:
...         print(key, '=>', value)
...
foo => bar
k0 => 0

>>> db.update({'k1': '1', 'k2': '2', 'k3': '3', 'foo': 'bar'})

>>> with db.cursor() as cursor:
...     cursor.first()
...     print(cursor.key())
...     cursor.last()
...     print(cursor.key())
...     cursor.previous()
...     print(cursor.key())
...
foo
k3
k2

>>> with db.cursor() as cursor:
...     cursor.seek('k0', SEEK_GE)
...     print(list(cursor.fetch_until('k99')))
...
[('k0', '0'), ('k1', '1'), ('k2', '2'), ('k3', '3')]

It is very important to close a cursor when you are through using it. For this reason, it is recommended you use the LSM.cursor() context-manager, which ensures the cursor is closed properly.

Transactions

lsm supports nested transactions. The simplest way to use transactions is with the LSM.transaction() method, which doubles as a context-manager or decorator.

>>> with db.transaction() as txn:
...     db['k1'] = '1-mod'
...     with db.transaction() as txn2:
...         db['k2'] = '2-mod'
...         txn2.rollback()
...
True
>>> print(db['k1'], db['k2'])
1-mod 2

You can commit or roll-back transactions part-way through a wrapped block:

>>> with db.transaction() as txn:
...    db['k1'] = 'outer txn'
...    txn.commit()  # The write is preserved.
...
...    db['k1'] = 'outer txn-2'
...    with db.transaction() as txn2:
...        db['k1'] = 'inner-txn'  # This is commited after the block ends.
...    print(db['k1']  # Prints "inner-txn".)
...    txn.rollback()  # Rolls back both the changes from txn2 and the preceding write.
...    print(db['k1'])
...
1              <- Return value from call to commit().
inner-txn      <- Printed after end of txn2.
True           <- Return value of call to rollback().
outer txn      <- Printed after rollback.

If you like, you can also explicitly call LSM.begin(), LSM.commit(), and LSM.rollback().

>>> db.begin()
>>> db['foo'] = 'baze'
>>> print(db['foo'])
baze
>>> db.rollback()
True
>>> print(db['foo'])
bar

Thanks to

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lsm-0.4.3.tar.gz (799.1 kB view details)

Uploaded Source

Built Distributions

lsm-0.4.3-cp310-cp310-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.10 Windows x86-64

lsm-0.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

lsm-0.4.3-cp310-cp310-macosx_10_14_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10 macOS 10.14+ x86-64

lsm-0.4.3-cp39-cp39-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.9 Windows x86-64

lsm-0.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

lsm-0.4.3-cp39-cp39-macosx_10_14_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

lsm-0.4.3-cp38-cp38-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.8 Windows x86-64

lsm-0.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

lsm-0.4.3-cp38-cp38-macosx_10_14_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

lsm-0.4.3-cp37-cp37m-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.7m Windows x86-64

lsm-0.4.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

lsm-0.4.3-cp37-cp37m-macosx_10_14_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

lsm-0.4.3-cp36-cp36m-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.6m Windows x86-64

lsm-0.4.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

lsm-0.4.3-cp36-cp36m-macosx_10_14_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

Details for the file lsm-0.4.3.tar.gz.

File metadata

  • Download URL: lsm-0.4.3.tar.gz
  • Upload date:
  • Size: 799.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for lsm-0.4.3.tar.gz
Algorithm Hash digest
SHA256 e25652f2611354217483de7c55d6b3ca7f3505532ec67b0e3658719aea0e9f39
MD5 0023c0d1619f457c3f59d1ba1fce81a9
BLAKE2b-256 2b4fe036d1341c68191e6f8a0039d810094705fe92df2258aa41b18d91079255

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for lsm-0.4.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 09b2360180eb8249c00adc93647cc882bbae593acef0333b9f434fa3dc6493bc
MD5 b50460712b1a69bee97477e5fbbbf546
BLAKE2b-256 ba28e83235ab24cdceaa9caefaf6b390bdc0c8d8c82c8f69baffd43afa3738f4

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for lsm-0.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ad29d6a6a47023220ee9dca4215c349fbce07b89ff5b003f6e8cdf00b30ee9ca
MD5 04b30f2d9eee36f25e0f8d84aa212ca6
BLAKE2b-256 ea38f63097d4b35df48eb5334de5a51c3b7e41d2f7fedcb5e369a877e7e0b761

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp310-cp310-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for lsm-0.4.3-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 312831de1786e3600b3035f24d019d81405c687752f158aecf1452bfadddd21f
MD5 a7d85ec525e2fee85c216fe54c44b79c
BLAKE2b-256 965e9eb87a98b9c86987c1ce7a95659645b3724cf382dec3180b50088600120f

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for lsm-0.4.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c9adda6ddd7a49e4120605c8d6d8ea25a61a00338b117d1b077a9500202dce64
MD5 0d0eb89d7e1b6adf04ea343b7b394997
BLAKE2b-256 1f2f1c844a13f4e818dc42816c0501de2c6992f4c001852214eaaba8c38ac170

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for lsm-0.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 15734fbfe2392e34c36cf172e8241bee0e2ea33f11777108ae81735ebe26caba
MD5 24c144d06036e330e2768ff964df692c
BLAKE2b-256 0adba8b30a151de0b2260bd53368c3fe05bb149f6beeb3b9fa6f8fab2201c031

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp39-cp39-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for lsm-0.4.3-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 8cd78c6ce2e6032bfb7bf827dad48c8a2a032f6d07493fc3db6250a0bb33b11b
MD5 3ddeb2660b2771c2396753f15d16afcf
BLAKE2b-256 6a7eaa9f1b30faff4b38b72434bf6f5e9851c87a580ac5d873c95cbbc0133dec

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for lsm-0.4.3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 99e96690eb0dd29f338f574943468225fdb03484a7e779c694b323b4a2ce0f7b
MD5 7c1977633f476389f2a0aa33843c0c1c
BLAKE2b-256 461e7fb9a2c94e2d3c04a9a58bb24f7afa9f0a5ce009c68d56d01e1bbeea0bd2

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for lsm-0.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 29a9820cb92b1a2b54bf7dc8051e4806ae9743f3afd84e00ee39ea636146515b
MD5 7a8a59047e4036ac693dac18d9af15e4
BLAKE2b-256 29f7a4d35ac2837f6d8e90efa1b7aee685f7f7c4286c0c2a68346f8c6e439dc4

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for lsm-0.4.3-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 2b38f59a19d09f4340d6385bb3d32a818564b112dfc8b16ac2c7f48a9b79fe60
MD5 99601ec92f1ebe75b55cdd217912ec9f
BLAKE2b-256 1b3f1024ad51375281a477da6afdf482e97aea36e02720fbd094fef4613da7b8

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.9

File hashes

Hashes for lsm-0.4.3-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 39766d2ee83d1bf8bac6b58b989b4d3aab0d11eeba6cef5c4ad23f723791076c
MD5 91207ce7da67a55746ad9d85c358189a
BLAKE2b-256 d58e197b9e869fb790fa3b6cb4cc90adb773cc7029043f6c301deac4af939681

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for lsm-0.4.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 fb138c8cfcbbe8bbe6d736cac63c14ff333eb62bc871a3156abb41b6b5c798ac
MD5 f212f09ee5e12abb96e0febf5d27d8ec
BLAKE2b-256 7b8b934fc8d07a9dd1b52b79ec0e435517aeff7dec0fffdbaeb27995fea8e476

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.7m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.12

File hashes

Hashes for lsm-0.4.3-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 f8934883f3bdf1f2f81cd10661c4fda696c15795b7ea0c6671bd50ac9225ea88
MD5 836ca8f9db79087b76d5b863fe600874
BLAKE2b-256 2f4b05aa2658288fb5386d20cafd0d62c688944a494f27e5197f5b506c08fb92

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.8

File hashes

Hashes for lsm-0.4.3-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 cd46621f0897a151e0a00b2001518b836da17d0ff9a1e3d651eb52cf5549fc39
MD5 45ea47f9e47e4d7f5a5d3055582168d6
BLAKE2b-256 dda857c96e8a78cc78b4824103b425e6b7180f7ccd4d5c3538704bc716c76246

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for lsm-0.4.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 631d7fb4d3985f4893d5c209afe075cf99f826961c082e0bd123607f609cbca9
MD5 ce08ecb28498ab5be69a4eda4a51a446
BLAKE2b-256 0e1eb48f9e49217aec8035a68488a1e8deb1357e3ebcca6347d704f83ee3dc19

See more details on using hashes here.

File details

Details for the file lsm-0.4.3-cp36-cp36m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: lsm-0.4.3-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.6m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.15

File hashes

Hashes for lsm-0.4.3-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 2d6e22bd0d196f4c393f6908775ad36ad94187c1824d1c871484305d7cdbedd1
MD5 6a1078b302df30cfe365cb2c3ce45db7
BLAKE2b-256 54fd07de47ef0e49093a68bcd7d05c5c66c9fe5bf7e671c7ae6fd43cb981ea1d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page