Skip to main content

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


Download files

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

Source Distribution

midb-0.5.1.tar.gz (20.0 kB view details)

Uploaded Source

Built Distribution

midb-0.5.1-py3-none-any.whl (31.4 kB view details)

Uploaded Python 3

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

Hashes for midb-0.5.1.tar.gz
Algorithm Hash digest
SHA256 f87705ec9c8b33c88cc67278f56f7cb62971bae5cf71fdcfbc9b26d6d26a28ae
MD5 e787544d5f791c55f6d8668c1c9d8655
BLAKE2b-256 e124954f80de620ff2733ddb4c9e712e6e63c333242fbec6f63777ffa6470a60

See more details on using hashes here.

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

Hashes for midb-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e17a09d5050f65b86f2c8f792c3ff6c8937fdcba1a78de389cd5ec2180b08602
MD5 b9cb723f7cbe9bf482b9ec41d2d7d6d8
BLAKE2b-256 586fd540f38b7f26f9e96e053d3777678a5279e02da6dd4129d33ab240025de0

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