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')
assert db.open()
More pythonic variant is using context manager:
from lsm import LSM
with LSM("test.ldb") as db:
assert db.info()
Not opened database will raise a RuntimeError:
import pytest
from lsm import LSM
db = LSM('test.ldb')
with pytest.raises(RuntimeError):
db.info()
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("test_0.ldb", binary=False) as db:
# must be str for keys and values
db['foo'] = 'bar'
assert db['foo'] == "bar"
Otherwise, you must pass keys and values ad bytes
(default behaviour):
from lsm import LSM
with LSM("test.ldb") as db:
db[b'foo'] = b'bar'
assert 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("test.ldb", binary=False) as db:
db['foo'] = 'bar'
assert db['foo'] == 'bar'
Database apply changes as soon as possible:
import pytest
from lsm import LSM
with LSM("test.ldb", binary=False) as db:
for i in range(4):
db[f'k{i}'] = str(i)
assert 'k3' in db
assert 'k4' not in db
del db['k3']
with pytest.raises(KeyError):
print(db['k3'])
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:
import pytest
from lsm import LSM, SEEK_LE, SEEK_GE, SEEK_LEFAST
with LSM("test.ldb", binary=False) as db:
for i in range(4):
db[f'k{i}'] = str(i)
# Here we will match "k1".
assert db['k1xx', SEEK_LE] == '1'
# Here we will match "k1" but do not fetch a value
# In this case the value will always be ``True`` or there will
# be an exception if the key is not found
assert db['k1xx', SEEK_LEFAST] is True
with pytest.raises(KeyError):
print(db['000', SEEK_LEFAST])
# Here we will match "k2".
assert db['k1xx', SEEK_GE] == "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).
from lsm import LSM
with LSM("test_slices.ldb", binary=False) as db:
# clean database
for key in db.keys():
del db[key]
db['foo'] = 'bar'
for i in range(3):
db[f'k{i}'] = str(i)
# Can easily iterate over the database items
assert (
sorted(item for item in db.items()) == [
('foo', 'bar'), ('k0', '0'), ('k1', '1'), ('k2', '2')
]
)
# However, you will not read the entire database into memory, as special
# iterator objects are used.
assert str(db['k0':'k99']).startswith("<lsm_slice object at")
# But you can cast it to the list for example
assert 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.
with LSM("test_slices.ldb", binary=False, readonly=True) as db:
assert list(db['k0':]) == [('k0', '0'), ('k1', '1'), ('k2', '2')]
assert list(db[:'k1']) == [('foo', 'bar'), ('k0', '0'), ('k1', '1')]
assert list(db[:'aaa']) == []
To retrieve keys in reverse order or stepping over more than one item, simply use a third slice argument as usual. Negative step value means reverse order, but first and second arguments must be ordinarily ordered.
with LSM("test_slices.ldb", binary=False, readonly=True) as db:
assert list(db['k0':'k99':2]) == [('k0', '0'), ('k2', '2')]
assert list(db['k0'::-1]) == [('k2', '2'), ('k1', '1'), ('k0', '0')]
assert list(db['k0'::-2]) == [('k2', '2'), ('k0', '0')]
assert list(db['k0'::3]) == [('k0', '0')]
You can also delete slices of keys, but note that delete will not include the keys themselves:
with LSM("test_slices.ldb", binary=False) as db:
del db['k0':'k99']
# Note that 'k0' still exists.
assert list(db.items()) == [('foo', 'bar'), ('k0', '0')]
Cursors
While slicing may cover most use-cases, for finer-grained control you can use cursors for traversing records.
from lsm import LSM, SEEK_GE, SEEK_LE
with LSM("test_cursors.ldb", binary=False) as db:
del db["a":"z"]
db["spam"] = "spam"
with db.cursor() as cursor:
cursor.seek('spam')
key, value = cursor.retrieve()
assert key == 'spam'
assert value == 'spam'
Seeking over cursors:
with LSM("test_cursors.ldb", binary=False) as db:
db.update({'k0': '0', 'k1': '1', 'k2': '2', 'k3': '3', 'foo': 'bar'})
with db.cursor() as cursor:
cursor.first()
key, value = cursor.retrieve()
assert key == "foo"
assert value == "bar"
cursor.last()
key, value = cursor.retrieve()
assert key == "spam"
assert value == "spam"
cursor.previous()
key, value = cursor.retrieve()
assert key == "k3"
assert value == "3"
Finding the first match that is greater than or equal to 'k0'
and move
forward until the key is less than 'k99'
with LSM("test_cursors.ldb", binary=False) as db:
with db.cursor() as cursor:
cursor.seek("k0", SEEK_GE)
results = []
while cursor.compare("k99") > 0:
key, value = cursor.retrieve()
results.append((key, value))
cursor.next()
assert results == [('k0', '0'), ('k1', '1'), ('k2', '2'), ('k3', '3')]
Finding the last match that is lower than or equal to 'k99'
and move
backward until the key is less than 'k0'
with LSM("test_cursors.ldb", binary=False) as db:
with db.cursor() as cursor:
cursor.seek("k99", SEEK_LE)
results = []
while cursor.compare("k0") >= 0:
key, value = cursor.retrieve()
results.append((key, value))
cursor.previous()
assert results == [('k3', '3'), ('k2', '2'), ('k1', '1'), ('k0', '0')]
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 returns a context-manager:
from lsm import LSM
with LSM("test_tx.ldb", binary=False) as db:
del db["a":"z"]
for i in range(10):
db[f"k{i}"] = f"{i}"
with LSM("test_tx.ldb", binary=False) as db:
with db.transaction() as tx1:
db['k1'] = '1-mod'
with db.transaction() as tx2:
db['k2'] = '2-mod'
tx2.rollback()
assert db['k1'] == '1-mod'
assert db['k2'] == '2'
You can commit or roll-back transactions part-way through a wrapped block:
from lsm import LSM
with LSM("test_tx_2.ldb", binary=False) as db:
del db["a":"z"]
for i in range(10):
db[f"k{i}"] = f"{i}"
with LSM("test_tx_2.ldb", binary=False) as db:
with db.transaction() as txn:
db['k1'] = 'outer txn'
# The write operation is preserved.
txn.commit()
db['k1'] = 'outer txn-2'
with db.transaction() as txn2:
# This is committed after the block ends.
db['k1'] = 'inner-txn'
assert db['k1'] == "inner-txn"
# Rolls back both the changes from txn2 and the preceding write.
txn.rollback()
assert db['k1'] == 'outer txn', db['k1']
If you like, you can also explicitly call LSM.begin()
, LSM.commit()
, and
LSM.rollback()
.
from lsm import LSM
# fill db
with LSM("test_db_tx.ldb", binary=False) as db:
del db["k":"z"]
for i in range(10):
db[f"k{i}"] = f"{i}"
with LSM("test_db_tx.ldb", binary=False) as db:
# start transaction
db.begin()
db['k1'] = '1-mod'
# nested transaction
db.begin()
db['k2'] = '2-mod'
# rolling back nested transaction
db.rollback()
# comitting top-level transaction
db.commit()
assert db['k1'] == '1-mod'
assert db['k2'] == '2'
Thanks to
- @coleifer - this project was inspired by coleifer/python-lsm-db.
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 Distribution
Built Distributions
File details
Details for the file lsm-0.5.4.tar.gz
.
File metadata
- Download URL: lsm-0.5.4.tar.gz
- Upload date:
- Size: 891.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2048586ce2202de895270e557500e86dc2127d44f5943b99091b9deb19380e55 |
|
MD5 | c0255f353109131a4e675c4126c9c3df |
|
BLAKE2b-256 | 066b0ffe3ccab39dc87807aa52ddde66c7947324bbf1827604df571a44c5a64e |
File details
Details for the file lsm-0.5.4-cp311-cp311-win_amd64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 812654eeb02b4441445369b8ce2c8fc5a865e1e092e31e80b63f16fd2e3d2b6d |
|
MD5 | 3a3dd66daf539455cc43da69856951b4 |
|
BLAKE2b-256 | 1fb77e63a1f8925aff680b39e4d71a035fc14621d22d6d5db29d8674ab136e39 |
File details
Details for the file lsm-0.5.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f20b82b82faf3b88022fcbf2605fd22f21c641a58d849ae870e183cbfc1ffbe2 |
|
MD5 | bf940dd02893cee6578d067e3b2c12de |
|
BLAKE2b-256 | 17e08873804a2e76338ee47a5d99e1f652c294a552d31e0e57c8fc194481e31e |
File details
Details for the file lsm-0.5.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e89ec0cee4a86a86373f61bfacdff9c4e8a1527d46e8abbe579766c804af01a9 |
|
MD5 | a0526b9f3b94ea934b6eb6a8c0cf8d10 |
|
BLAKE2b-256 | 1ffe88e2198b84f34b0583354cda3e35965e1b7be181bf6167c230104bbe9ad6 |
File details
Details for the file lsm-0.5.4-cp311-cp311-macosx_10_9_universal2.whl
.
File metadata
- Download URL: lsm-0.5.4-cp311-cp311-macosx_10_9_universal2.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.11, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 672b1c37b9c42de0d1090a30b5dc2b0a25b76e6882f4912869be54dda5c8a597 |
|
MD5 | 477eec57e324d14613658a227d8e6636 |
|
BLAKE2b-256 | 8fbbe02a85da9e1da3ad7c150a4e52fb3427110d48daf23ff0d9442d4037b3bc |
File details
Details for the file lsm-0.5.4-cp310-cp310-win_amd64.whl
.
File metadata
- Download URL: lsm-0.5.4-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/4.0.2 CPython/3.10.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb498840c471c36d1a5a798323ab02e8dd0c748d9bfe8388e799e037a5bc46e3 |
|
MD5 | 1e5dca192616d40560dfac103815b0dd |
|
BLAKE2b-256 | ecd424221f9520260b8f812450f1055ad430e00557c1b77d15f623086a99c93a |
File details
Details for the file lsm-0.5.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 16373c7d6f2d7bcf3cf164d87fa331d33feb561ac2c6a4053d3c2187ae70314a |
|
MD5 | 0b284d101923f9beb70be212acea7ba4 |
|
BLAKE2b-256 | 95296504dc500ba90f279b69052f1a07b1e288eb8627bfe1127b5bbeafb3099d |
File details
Details for the file lsm-0.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f78ea0ee5324f543c89d28d43abd28e8582450bdc259a85d54b41e6448f66ec |
|
MD5 | 0a169a345662dd55985e2d56381348bc |
|
BLAKE2b-256 | bcc2b5e7cb91dd837cce3a24186343b679aa6cb428b557570b61da8e333f2215 |
File details
Details for the file lsm-0.5.4-cp310-cp310-macosx_11_0_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp310-cp310-macosx_11_0_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.10, macOS 11.0+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b265d3237b27019cc490c43f681646a6eb3b8d6c499f6f69e339dd9b430f3604 |
|
MD5 | 13ef6c52ab966b74a309a52a3dff83d9 |
|
BLAKE2b-256 | c669b9ae85ff4c9ce982e104e6a7e27ad8feba2ed59f3897f2e63cc1730afdd5 |
File details
Details for the file lsm-0.5.4-cp310-cp310-macosx_10_9_universal2.whl
.
File metadata
- Download URL: lsm-0.5.4-cp310-cp310-macosx_10_9_universal2.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.10, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | acc953e61e75b1efa36d909b604f1237762dedef955b065f77080bb5ccc06b6f |
|
MD5 | 081775682466f06b35c9de985081c110 |
|
BLAKE2b-256 | 2e2c0dc11291fa4abd99e4366e33e9b18116cc93715dcc7406980b69f74fe622 |
File details
Details for the file lsm-0.5.4-cp39-cp39-win_amd64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54c848fea5cd8771bc62276c73fee69bdd84823d49a0a1d2efa6168494956e75 |
|
MD5 | 1378e5a6b28a7cca6fc63d7b2069385e |
|
BLAKE2b-256 | b5653dce69bc0103b3d0cb441ab1aee1238a415343bf9bd9dc5442cd8d8680c5 |
File details
Details for the file lsm-0.5.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72e48572e75db24a3ef98aeafcb4e3c8c4b2546025e57bca859aa6e97574dfcd |
|
MD5 | b3df6687e16ac9f52d7ae43bb2766034 |
|
BLAKE2b-256 | 432d0e8548df768694fbe28974d65882ce11cac1c754ba6df08ba5918cf3203d |
File details
Details for the file lsm-0.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9bc285ebd1cc038bdbd15e00abc71a22c15d381a358744bd7816f9fb29955a44 |
|
MD5 | 53142c214b3f658e5473822aac147053 |
|
BLAKE2b-256 | 4c15c342a05fc632eafcc7dacd6f87262257d03def0a48e3226f974326dea52b |
File details
Details for the file lsm-0.5.4-cp39-cp39-macosx_11_0_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp39-cp39-macosx_11_0_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.9, macOS 11.0+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf9c95851fa41f8dbd590056f271fc5a9afab311a865a9f77cbd920e4f3f48c5 |
|
MD5 | 8a7ed707c56daa1c97adf37475faeb78 |
|
BLAKE2b-256 | eaef5e65e774a7811a46a8c2bc810713d154e5b1419c5b1cb95401830e5c8d3d |
File details
Details for the file lsm-0.5.4-cp39-cp39-macosx_10_9_universal2.whl
.
File metadata
- Download URL: lsm-0.5.4-cp39-cp39-macosx_10_9_universal2.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.9, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 43dd488443eb0347f3ece19f77040888581190bd3f28c76dd217c90674b6f55d |
|
MD5 | bcc8f8a468ed8961da17cdfdce03c720 |
|
BLAKE2b-256 | 02bbddbdd88b68b5379b26c0029d6c4c3dee369f35c5fd8e8e5ae830e20d369d |
File details
Details for the file lsm-0.5.4-cp38-cp38-win_amd64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8589723021a4091e07fddfbf15ead6c4f99133502c00ca6ef9c118acb95d5163 |
|
MD5 | 34853068ae229c18047bc015a9592292 |
|
BLAKE2b-256 | 627d6f5e8e77e737e2c68d25d3450007626eb1a9a8c88b1bf90563133fa74ac6 |
File details
Details for the file lsm-0.5.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f6315cfb014abd49d4570708d97d8894406b3bca8a7b23865935059d156ca08 |
|
MD5 | a52a03262f185b3e60aa25a197b79b29 |
|
BLAKE2b-256 | da740b193cd2cf4aa0b770834cdc75bb487f85dbe62095d1ad60d88d6c3a5e38 |
File details
Details for the file lsm-0.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.8, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e8ab1e76acc867b5e72d0974623e3830d25d60e5cf48025b509ee3a0e27b33b8 |
|
MD5 | e69366014a5d578b87ac2fab6ad14e70 |
|
BLAKE2b-256 | 84ce97aa7f86b59d6c276e50340773c35b285ad4215d7fdc8e863bce0946faa6 |
File details
Details for the file lsm-0.5.4-cp38-cp38-macosx_11_0_universal2.whl
.
File metadata
- Download URL: lsm-0.5.4-cp38-cp38-macosx_11_0_universal2.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.8, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 57c4eab9fe6500c8b73333aa5c0fd23b23120ab9bffa512277903238480706ff |
|
MD5 | 70abe5f2ed895fcaa6b68c5cbd165140 |
|
BLAKE2b-256 | f52be7ea2e0b33e2f1dbda75f1e247d0271d0f3c06077dfa113a80e164a17bec |
File details
Details for the file lsm-0.5.4-cp38-cp38-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp38-cp38-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.8, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97c4bc88284a0ef59f1a4726fef9bed575b5154f358b9bda171c057abe9568fe |
|
MD5 | abae8f4230240263c005e0fe20e2a6c4 |
|
BLAKE2b-256 | ca4b620604464daffb6c96c764209d86927206e03bed2bd69b9fd7b276e987be |
File details
Details for the file lsm-0.5.4-cp37-cp37m-win_amd64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp37-cp37m-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.7m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 15809f186e2d5f44e31bce57792a6b1a0e6c945ad2cdf750386fdd8efe452b38 |
|
MD5 | e046cccc7f261c47b2ff9dff56825ee8 |
|
BLAKE2b-256 | 1d59ae5308dd7b61b320181bddb2cf5cb21f1601937389f3bf806f18458d58ad |
File details
Details for the file lsm-0.5.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ebe692d83456fd57bd24c5c057326f15dd517107aee56bdd1a063507234a9ebd |
|
MD5 | 0631b74c515fc5536c7599f11ea6ab66 |
|
BLAKE2b-256 | 2fba150aa501e7ad631738adedaa32350d06523c8d747f7f1c7e769bf7a25ae2 |
File details
Details for the file lsm-0.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ccf2ba35e6814868592fa01be379ca2c33b25c558456d6f2b65f3ae6b5cb914 |
|
MD5 | 8e2b39fd81387c708023210f1b750f97 |
|
BLAKE2b-256 | a49dac73c416c539ec7acee73de47a35293cb3eae70815e4b58f3d29ce78da33 |
File details
Details for the file lsm-0.5.4-cp37-cp37m-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp37-cp37m-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.7m, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f6b233641c9f40ba30aff20f7a7916c04e3bc6d8e3efeda29397d5d81b60c37e |
|
MD5 | 3bde1d44616a4d79ba04608aaf2c22a6 |
|
BLAKE2b-256 | 8996aa39a1dad7d3f6e48351c5b3fcca1063be1c9e60736d8b085377b024fdd6 |
File details
Details for the file lsm-0.5.4-cp37-cp37m-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: lsm-0.5.4-cp37-cp37m-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.7m, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.62.3 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fd620afa8068699a877702a1003d542f8135e6f14b66bc49d581a6f4b19d9fbb |
|
MD5 | 6ab45d2a890b745451356c674237ffc4 |
|
BLAKE2b-256 | 940eae9c9c64ef4f2cf93e12cf9fdc2e0e14a58cfa1203e5b5a141f71f502589 |