Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

Redis native types for Python

Project description

https://travis-ci.org/vladimirshkoda/redis-bindings.svg?branch=master https://img.shields.io/badge/style-wemake-000000.svg

Redis bindings is an attempt to bring Redis types into Python as native ones. It is based on redis-py and has the following types implemented so far:

Moreover, it provides some Redis descriptor interfaces:

  • IRedisField
  • IRedisListField

It is exactly interfaces, because it requires user to override get_key_name method to define key name for Redis. Here is an example of how it can be implemented (can be found in example.py).

from redis import Redis
from redistypes.descriptors import IRedisField, IRedisListField


r_connection = Redis()


class RedisField(IRedisField):
    def __init__(self, pickling=True):
        super(RedisField, self).__init__(
            redis_connection=r_connection,
            pickling=pickling
        )

    def get_key_name(self, instance):
        return ':'.join([
            instance.__class__.__name__, str(instance.pk), self.name
        ])


class RedisListField(IRedisListField, RedisField):
    pass


class Student:
    name = RedisField()
    subjects = RedisListField()

    def __init__(self, pk):
        self.pk = pk

The Student class defined above can do the following things:

>>> from example import Student
>>> s = Student(pk=1)
>>> s.name = 'John Galt'
>>> s.subjects = ['math', 'physics']
>>> s.name
John Galt
>>> s.subjects
RedisList: ['math', 'physics']
>>> s.subjects.append('p.e.')
>>> s.subjects
RedisList: ['math', 'physics', 'p.e.']
>>> # Values stored inside the Redis types are immutable!
>>> s.subjects.append({'name': 'art', 'avg_score': 4.5})
>>> s.subjects[3]
{'avg_score': 4.5, 'name': 'art'}
>>> s.subjects[3]['avg_score'] = 3
>>> s.subjects[3]
{'avg_score': 4.5, 'name': 'art'}

Warning!

All values stored inside the Redis types are immutable! As the example above shows, an attempt to change the value stored in the dictionary inside the RedisList leads to nothing.

Roadmap

  • Querying over the pipe
  • RedisDict

Project details


Download files

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

Files for redistypes, version 0.2.0
Filename, size File type Python version Upload date Hashes
Filename, size redistypes-0.2.0-py3-none-any.whl (6.2 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size redistypes-0.2.0.tar.gz (5.7 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page