Mostly Invisible Database. A database access layer that acts like python in-memory objects.
Project description
Mostly Invisible Database
A database access layer that acts like python in-memory objects.
Disclaimer: Only minimal attempts have been made at speed. And mainly intended for personal projects. Deeply nested data structures will likely be slow.
Example:
>>> import midb
>>> root = midb.get_root('db_file.db')
>>> root['test'] = 1
>>> root['test2'] = {'test3': 3}
>>> exit()
later ...
>>> import midb
>>> root = midb.get_root('db_file.db')
>>> root['test']
1
>>> root['test2']['test3']
3
>>> root['test2']
PDict({'test3': 3}, _backend=SQLiteBackend(filename="db_file.db"), _id=1, _temp=None)
>>> root['test2'].in_memory()
{'test3': 3}
>>> exit()
What's currently supported?
Currently, the types that are supported are:
-
Simple types:
- str
- None
- bool
- int
- float
- complex
- datetime.datetime
- datetime.date
- datetime.time
-
container types (must not contain unsupported types)
- dict (silently converted to PDict)
- tuple (silently convert to PTuple)
- list (silently convert to PList)
- custom objects (see below for example)
Custom objects
Custom objects are still not fully tested, but the basics have been including property descriptors. Also, custom objects that are hashable may be used as keys in dictionaries. The following has been tested and works.
import midb
# define or import an class
# Note: subclassing midb.MemoryObject is not necessary but useful
# because it defines __repr__ and __eq__.
class MyObj(midb.MemoryObject):
def __init__(self, a_value, b_value):
self.a = a_value
self.b = b_value
def some_other_method(self, input):
self.methods_may_set = input
return f"{self.a}, {self.b}"
# define a persistent object with an _in_memory_class attribute set to the object you
# want to have it emulate and decorate it with the @midb.setup_pobject decorator.
@midb.setup_pobject
class PMyObj(midb.PObject):
_in_memory_class = MyObj
With those objects imported or defined:
# first run
root = midb.get_root("filename.db")
root['my object'] = MyObj(1, 2)
print(root['my object'].a)
print(root['my object'].b)
print(root['my object'].some_other_method(3))
print(root['my object'].methods_may_set)
Later (also with the above classes defined or imported) ...
root = midb.get_root("filename.db")
print(root['my object'].a)
print(root['my object'].b)
print(root['my object'].some_other_method(4))
print(root['my object'].methods_may_set)
If you encounter any problems with the classes you have defined, please file an issue at https://gitlab.com/gossrock/midb/-/issues.
Future:
- Support for and/or documentation of additional or custom serializers.
- More examples and documentation
- Add support for other standard library classes that represent storable data.
- decimal.Decimal and fractions.Fraction
- set and frozenset
- collections.namedtuple()/typing.NamedTuple and dataclasses.dataclass
- colletions.OrderdDict
- enum.Enum and friends
- pathlib.Path
- Add generic type annotation to collection types.
Bugs
Please report bugs at https://gitlab.com/gossrock/midb/-/issues
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 Distribution
File details
Details for the file midb-0.5.1.tar.gz
.
File metadata
- Download URL: midb-0.5.1.tar.gz
- Upload date:
- Size: 20.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.3.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f87705ec9c8b33c88cc67278f56f7cb62971bae5cf71fdcfbc9b26d6d26a28ae |
|
MD5 | e787544d5f791c55f6d8668c1c9d8655 |
|
BLAKE2b-256 | e124954f80de620ff2733ddb4c9e712e6e63c333242fbec6f63777ffa6470a60 |
File details
Details for the file midb-0.5.1-py3-none-any.whl
.
File metadata
- Download URL: midb-0.5.1-py3-none-any.whl
- Upload date:
- Size: 31.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.3.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e17a09d5050f65b86f2c8f792c3ff6c8937fdcba1a78de389cd5ec2180b08602 |
|
MD5 | b9cb723f7cbe9bf482b9ec41d2d7d6d8 |
|
BLAKE2b-256 | 586fd540f38b7f26f9e96e053d3777678a5279e02da6dd4129d33ab240025de0 |