Skip to main content

Pythonic Redis Client.

Project description

Redisworks 0.3.0

Python Versions License Build Status Coverage Status

The Pythonic Redis Client

Why Redisworks?

  • Lazy Redis Queries
  • Dynamic Typing
  • Ease of use

Have you ever used PyRedis and wondered why you have to think about types all the time? That you have to constantly convert objects to strings and back and forth since Redis keeps most things as strings?

Redis works provides a Pythonic interface to Redis. Let Redisworks take care of type conversions for you.

Behind the scene, Redisworks uses DotObject to provide beautiful dot notation objects and lazy Redis queries.

Install

pip install redisworks

Note that RedisWorks needs Redis server 2.4+.

Setup

let's say if you want all the keys in Redis to start with the word root. Then you:

root = Root()  # connects to Redis on local host by default

Or if you want to be more specific:

root = Root(host='localhost', port=6379, db=0)

password

Any other parameter that you pass to Root will be passed down to PyRedis. For example:

root = Root(host='localhost', port=6379, db=0, password='mypass')

Saving to Redis

Saving to Redis is as simple as assigning objects to attributes of root or attributes of attributes of root (you can go as deep as you want.) Make sure you are not using any Python's reserved words in the key's name.

Example:

>>> from redisworks import Root
>>> import datetime
>>> root = Root()
>>> root.my.list = [1, 3, 4]
>>> root.my.other.list = [1, [2, 2]]
>>> 
>>> some_date = datetime.datetime(2016, 8, 22, 10, 3, 19)
>>> root.time = some_date
>>> 
>>> root.the.mapping.example = {1:1, "a": {"b": 10}}

Redis works will automatically convert your object to the proper Redis type and immediately write it to Redis as soon as you assign an element!

The respective keys for the above items will be just like what you type: root.my.list, root.time, root.the.mapping.example:

If you use redis-cli, you will notice that the data is saved in the proper Redis data type:

127.0.0.1:6379> scan 0
1) "0"
2) 1) "root.the.mapping.example"
   2) "root.time"
   3) "root.my.list"
127.0.0.1:6379> type root.the.mapping.example
hash
127.0.0.1:6379> type root.time
string
127.0.0.1:6379> type root.my.list
list

Reading from Redis

Reading the data is as simple as if it was just saved in Python memory!

Redis works returns Lazy queries just like how Django returns lazy queries. In fact the lazy objects code is borrowed from Django!

If you ran the example from Saving to Redis, run a flush root.flush() to empty Redisworks Cache. This is so it goes and gets the objects from Redis instead of reading its own current copy of data:

>>> from redisworks import Root
>>> root = Root()
>>> thetime = root.time
>>> thelist = root.my.list
>>> mydict = root.the.mapping.example
>>> mydict  # is not evalurated yet!
<Lazy object: root.the.mapping.example>
>>> print(mydict)
{1:1, "a": {"b": 10}}  # Now all the 3 objects are read from Redis!
>>> mydict
{1:1, "a": {"b": 10}}
>>> root.my.list
[1, 3, 4]
>>> root.my.other.list
[1, [2, 2]]
>>> root.time
2016-08-22 10:03:19

Changing root key name

Every key name by default starts with the word root. If you want to use another name, simple subclass Root:

>>> from redisworks import Root
>>> class Post(Root):
...     pass
>>> post=Post()
>>> post.item1 = "something"  # saves to Redis
...
>>> print(post.item1)  # loads from Redis
something

Numbers as attribute names

Let's say you want root.1 as a key name. Python does not allow attribute names start with numbers.

All you need to do is start the number with the character i so Redisworks takes care of it for you:

>>> root.i1 = 10
>>> print(root.i1)
10

The actual key in Redis will be root.1

Dynamic key names

>>> path1 = 'blah'
>>> path2 = 'blah.here`'

>>> root[path1] = 'foo'
>>> root[path2] = 'foo bar'

>>> root.blah
foo
>>> root.blah.here
foo bar

Other examples

Take a look at example.py

Primary Author

Seperman (Sep Dehpour)

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

redisworks-0.3.0.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

redisworks-0.3.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file redisworks-0.3.0.tar.gz.

File metadata

  • Download URL: redisworks-0.3.0.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.1 CPython/3.8.5

File hashes

Hashes for redisworks-0.3.0.tar.gz
Algorithm Hash digest
SHA256 609b84c4aad6c0632d117a9dbef0f098d460ac1a5a29112dbefa4afd2bd26a7d
MD5 bcaa58c9fecf1fd8bfc8fd4cb453d189
BLAKE2b-256 329510163a29117100d7f1bbbaa88c81596f030c2df12fcedebab37db65a3bab

See more details on using hashes here.

File details

Details for the file redisworks-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: redisworks-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.1 CPython/3.8.5

File hashes

Hashes for redisworks-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e693ac82a19b6ed9dd7ae7c7431d4b8c7792eea9968fa1a5617aad55da6f5160
MD5 9d458d580922461c40324b9f61c9db56
BLAKE2b-256 d81795ae0176282a514f73d8dbfc6307f89467a4a06c372e0315117f376deab9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page