No project description provided
Project description
Data Snack
About
Data Snack is a minimalistic framework for storing and accessing structured data.
It uses an Entity objects to define a schema for your data. Snack provides an interface
for automatically serializing and storing entities in a cache database of you choice.
General interface that allows you to use different backends: redis, memcached.
Features
Entityobjects are stored in a compress form to reduce memory usage.Snackis usingEntityfields to define a unique key to represent an object stored in the db.Snackis supporting batch saving and reading data to achieve high performance.
Core concepts
Entity- a class defines a schema of single object stored in dbkey fields- a list of fields (defined as a list ofstrvalues) that will be used to create a key for a givenEntityobject.key values- a list of values forkey fieldsfrom givenEntitykey- astrvalue created for a given Entity- created in a format:
<Entity type name>-<key value 1>_<key value 2>...<key value N>
- created in a format:
Install
Data Snack can be easily installed using pypi repository.
pip install data_snack
Usage
This examples shows a basic usage of defining an entity and using Snack to save and load it from the cache.
More examples can be found in the Examples section.
Example 1 - Creating new entities and saving
1. Define entities
The first thing you need to do is to define an Entity.
Entities are used to define a common structure of the objects stores in your database.
We are recommending adding data validation to your entities.
The easiest way is using pydantic for type validation of all entity fields.
from pydantic.dataclasses import dataclass
from typing import Text
from data_snack.entities import Entity
@dataclass
class Person(Entity):
index: Text
name: Text
2. Connect to Redis
Connect to you a cache database of your choice.
In this example we are using Redis, but you could also use Memcached if you want.
import redis
redis_connection = redis.Redis(host='127.0.0.1', port=6379, password='')
3. Create Snack instance
In this step we create a Snack instance and connect it to our Redis database.
Notice, that Redis client is wrapped in our RedisConnection class to ensure shared interface.
And at least we can register all entities that will be used in our project.
For each entity we specify a list of fields that will be used to define keys when saving our data.
from data_snack import Snack
from data_snack.connections.redis import RedisConnection
snack = Snack(connection=RedisConnection(redis_connection)) # create instance
snack.register_entity(Person, key_fields=['index']) # register your entity
4. Save and load your entities using Snack
You are ready to save and load data using Snack.
snack.set(Person("1", "John"))
# 'Person-1'
entity = snack.get(Person, ["1"])
# Person(index='1', name='John')
snack.set_many([Person("1", "John"), Person("2", "Anna")])
# ['Person-1', 'Person-2']
entities = snack.get_many(Person, [["1"], ["2"]])
# [Person(index='1', name='John'), Person(index='2', name='Anna')]
4. Delete your entities using Snack
After you're done with your data you can delete it using Snack.
snack.delete(Person, ["1"])
# Person(index='1', name='John')
snack.delete_many(Person, [["1"], ["2"]])
# [Person(index='1', name='John'), Person(index='2', name='Anna')]
Documentation
Access documentation
WIP. Documentation will be hosted on github pages.
Setup documentation
Setup documentation directory
mkdir docs
cd docs
Create documentation scaffold. Make sure to select an option with separated directories for source and build.
sphinx-quickstart
Update extensions in docs/source/conf.py.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon']
Update apidoc documentation
Before you start make sure to import project src directory at the very top of docs/source/conf.py file.
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join('..', '..', 'src')))
Since documentation uses additional modules (other than base data-snack), we need to install additional requirements:
pip install -r docs/requirements.txt
Update the scaffold and generate the html docs.
sphinx-apidoc -o ./source ../src/data_snack
make html
Contact
Plugin was created by the Data Science team from Webinterpret.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file data_snack-1.0.8.tar.gz.
File metadata
- Download URL: data_snack-1.0.8.tar.gz
- Upload date:
- Size: 16.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a72c248afe809a2e5b3c002754fe69391ced3fea935b7c400122f0e22765e581
|
|
| MD5 |
69f4b59ec6d1ff049532beb19ea1d2b5
|
|
| BLAKE2b-256 |
2270d009772cee0362153dad1cf9cb70404af21ee29d4e5a43836aa6f9a610d9
|
File details
Details for the file data_snack-1.0.8-py3-none-any.whl.
File metadata
- Download URL: data_snack-1.0.8-py3-none-any.whl
- Upload date:
- Size: 22.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b820f71144248fdeee2293042c59317950ca9dfeade8c5547d037c731119c2c9
|
|
| MD5 |
52369c133436ddf48f28341e62dd405d
|
|
| BLAKE2b-256 |
008461d6ae924646c7c75c4d6e7656ebacab87486ba811fa42f94e0b7deb6df3
|