Skip to main content

Wrapper for hash map based storage systems

Project description

Lint and Test Smart Hashmap logo

Wrapper for key-value based storage systems. Provides convenient way to organize data for quick searching.

Installation

1. Using pip: pip install smart_hashmap

2. Building from source: make install

How to use

Firstly you need to register methods:

from smart_hashmap.cache import Cache

Cache.register_get_method(YOUR_GET_METHOD)
Cache.register_set_method(YOUR_SET_METHOD)
Cache.register_update_method(YOUR_UPDATE_METHOD)
Cache.register_delete_method(YOUR_DELETE_METHOD)

NOTE: Methods signature MUST match their placeholders signature

GET_METHOD = lambda cache, name, key, default=None: None  # noqa: E731
SET_METHOD = lambda cache, name, key, value: None  # noqa: E731
UPDATE_METHOD = lambda cache, name, key, value: None  # noqa: E731
DELETE_METHOD = lambda cache, name, key: None  # noqa: E731
"""METHODS placeholders. You should register yours."""

Now you are all set up to use Cache.search

How it works

In default setup Cache creates and maintains indexes based on Cache.primary_key.

So every object save in cache MUST have such key. (By default its _id)

On every called action for example Cache.update Cache looks in pipeline Cache.PIPELINE.update for middlewares to run before and after main function execution. For example in current situation after .update function execution indexing middleware will check if documents fields matching its keys were changed. If so it will get index data, look for old values in value.__shadow_copy__ remove such index data and create new record with updated values.

Adding middlewares

Adding new action is easy:

from smart_hashmap.cache import Cache, PipelineContext

@Cache.PIPELINE.set.before()
def add_my_field(ctx: PipelineContext):

    key, value = ctx.args
    value["my_field"] = 1

Now every cache value saved with Cache.set will be added 'my_field' before main function execution.

Custom Indexes

To create custom index you need to simply create new subclass of Index.

from smart_hashmap.index import Index

class IndexByModel(Index):
    keys = ["_id", "model"]

NOTE: After that all values MUST have fields _id AND model

NOTE: Primary key MUST ALWAYS be in keys

Searching

After all required indexes created - searching will be as quick as possible.

from smart_hashmap.cache import Cache
from smart_hashmap.index import Index

class IndexByModel(Index):
    keys = ["_id", "model"]

cache = Cache()
cache.search("my_cache", {"model": "1.0"})

When .search is called it will firstly check for indexes containing search fields. After finding best index, it will get index data and find matching primary keys. Now searching is as easy as getting values by their key.

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

smart_hashmap-1.0.4.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

smart_hashmap-1.0.4-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file smart_hashmap-1.0.4.tar.gz.

File metadata

  • Download URL: smart_hashmap-1.0.4.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.2.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.6.13

File hashes

Hashes for smart_hashmap-1.0.4.tar.gz
Algorithm Hash digest
SHA256 5d435362caa7a98b48f63c919898f256361ce2557b412b2b115e5370d0b60f42
MD5 6b18f2172b9ad0ee56ac7b65f7f048e5
BLAKE2b-256 1a7f33cdc359f1195bb5f192856580c91f8c2b745ea32328bf37a954e1c12a9d

See more details on using hashes here.

File details

Details for the file smart_hashmap-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: smart_hashmap-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.2.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.6.13

File hashes

Hashes for smart_hashmap-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 b6b23349f6cafe1b73f1d1ae9e13fffd0cf0926bb1d5481231256d7e15ab2e8d
MD5 f4e4180cb10ec82663a3781869dcb181
BLAKE2b-256 82fbb1af95cff68f1eeec07826134e58c8ad40f30b09c55b6a5e6f0901f6655b

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