This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

redis-limpyd-extensions

Some extensions for redis-limpyd (redis orm (sort of) in python)

Where to find it:

Install:

Python 2.6, 2.7, 3.3 and 3.4 are supported.

pip install redis-limpyd-extensions

List of available extensions:

  • Add/remove related on both sides
  • Dynamic fields

Dynamic fields

Dynamic fields provide a way to add unlimited fields to a model by defining a (or many) dynamic field, and use it with a dynamic part. ie a dynamic field name “foo” can be used with as many dynamic parts as you want to create dynamic variations: “foo_bar” for the dynamic part “bar”, “foo_baz” for the dynamic part “baz”, and so on.

A simple API to use them, and filter on them, is provided.

To use a dynamic field, your model must inherit from the following mixin: ModelWithDynamicFieldMixin, found in limpyd_extensions.dynamic.model. It’s a mixin, you should use it with another RedisModel class. Fields are available as field classes (DynamicStringField, DynamicInstanceHashField, DynamicListField, DynamicSetField, DynamicSortedSetField, DynamicHashField) or as a mixin (DynamicFieldMixin) if you want to adapt an external field. You can find them in limpyd_extensions.dynamic.fields

A short example on how to define a dynamic field on a model:

from limpyd.model import RedisModel

from limpyd_extension.dynamic.model import ModelWithDynamicFieldMixin
from limpyd_extension.dynamic.fields import DynamicSetField


class MyModel(ModelWithDynamicFieldMixin, RedisModel):
    foo = DynamicSetField(indexable=True)

As the foo field is dynamic, you cannot run any command on it, but only on its dynamic variations. How to do it ?

There is two ways:

  • use the get_field method of the model:
foo_bar = myinstance.get_field('foo_bar')
  • use the get_for method of the field:
foo_bar = myinstance.foo.get_for('bar')

The latter is useful if you have a variable instead of known value:

somebar = 'bar'
foo_bar = myinstance.foo.get_for(somevar)

Note that you can use this shortcut instead of using get_for:

foo_bar = myinstance.foo(somevar)

Knowing this, you can do operations on these fields:

myinstance.foo(somevar).sadd('one', 'two', 'three')
myinstance.foo(othervar).sadd('four', 'five')
myotherinstance.foo(somevar).sadd('three', 'thirty')
print myinstance.foo(somevar).smembers()
print myinstance.foo(othervar).smembers()
print myotherinstance.foo(somevar).smembers()

To filter on indexable dynamic fields, there is two ways too:

  • use the classic way, if you now the dynamic part in advance:
MyModel.collection(foo_bar='three')
  • use the new dynamic_filter method:
MyModel.collection().dynamic_filter('foo', 'bar', 'three')

Parameters are: the field name, the dynamic part, and the value for the filter.

The collection manager used with ModelWithDynamicFieldMixin depends on ExtendedCollectionManager, so you can chain filters and dynamic filters on the resulting collection.

Provided classes

Here is the list of modules and classes provided with the limpyd_extensions.dynamic module:

  • model
    • mixins
      • ModelWithDynamicFieldMixin(object) - A mixin tu use for your model with dynamic fields
  • collection
    • mixins
      • CollectionManagerForModelWithDynamicFieldMixin(object) - A mixin to use if you want to add the dynamic_filter method to your own collection manager
    • full classes
      • CollectionManagerForModelWithDynamicField(CollectionManagerForModelWithDynamicFieldMixin, ExtendedCollectionManager) - A simple class inheriting from our mixin and the manager from limpyd.contrib.collection
  • field
    • mixins
      • DynamicFieldMixin(object) - A mixin within all the stuff for dynamic fields is done, to use to add dynamic field support to your own fields
    • full classes All fields simply inherits from our mixin and the wanted base field, without anymore addition:
      • DynamicStringField(DynamicFieldMixin, StringField)
      • DynamicInstanceHashField(DynamicFieldMixin, InstanceHashField)
      • DynamicListField(DynamicFieldMixin, ListField)
      • DynamicSetField(DynamicFieldMixin, SetField)
      • DynamicSortedSetField(DynamicFieldMixin, SortedSetField)
      • DynamicHashField(DynamicFieldMixin, HashField)
  • related
    • mixins
      • DynamicRelatedFieldMixin(DynamicFieldMixin) - A mixin within all the stuff for dynamic related fields is done, to use to add dynamic field support to your own related fields
    • full classes
      • DynamicFKStringField(DynamicRelatedFieldMixin, FKStringField)
      • DynamicFKInstanceHashField(DynamicRelatedFieldMixin, FKInstanceHashField)
      • DynamicM2MSetField(DynamicRelatedFieldMixin, M2MSetField)
      • DynamicM2MListField(DynamicRelatedFieldMixin, M2MListField)
      • DynamicM2MSortedSetField(DynamicRelatedFieldMixin, M2MSortedSetField)

Release History

Release History

0.1.3

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.0.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
redis_limpyd_extensions-0.1.3-py2-none-any.whl (17.4 kB) Copy SHA256 Checksum SHA256 2.7 Wheel Dec 16, 2015
redis-limpyd-extensions-0.1.3.tar.gz (15.3 kB) Copy SHA256 Checksum SHA256 Source Dec 16, 2015

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting