An object relational mapper library for Redis remote data structures.
Project description
- Documentation:
- Dowloads:
- Source:
- Keywords:
server, database, cache, redis, orm
–
A Python 3 compatible object relational mapper for Redis remote data structures.
The data is owned by different, configurable back-end databases and it is accessed using a light-weight Object Relational Mapper (ORM) inspired by Django and SQLAlchemy. The source code and documentation are hosted at github while Downloads are available via PyPi.
Requirements
You need access to a Redis server.
Python 2.6 or above, including Python 3.
Installing
To install, download, uncompress and type:
python setup.py install
otherwise use easy_install:
easy_install python-stdnet
or pip:
pip install python-stdnet
Documentation
StdNet uses Sphinx for its documentation, and the latest is available at GitHub:
Version Check
To know which version you have installed:
>>> import stdnet >>> stdnet.__version__ '0.5.1'
Running Tests
At the moment, only redis back-end is available and therefore to run tests you need to install Redis. If you are using linux, it can be achieved simply by downloading, uncompressing and running make, if you are using windows and want to save yourself a headache you can download precompiled binaries at servicestack.
Once done that, open a shell and launch Redis. On another shell, from the package directory, type:
python runtests.py
BE WARNED! RUNNING TESTS WILL DESTROY ANYTHING IN LOCALHOST REDIS DATABASE 13. MAKE SURE YOU DONT HAVE ANYTHING ON DATABASE 13 OTHERWISE FOLLOW INSTRUCTIONS BELOW
To access coverage of tests you need to install the coverage package and run the tests using:
coverage run runtests.py
and to check out the coverage report:
coverage report -m
Default settings
Running tests with the above commands assumes your Redis server is running on the same machine and it will use the database 13.
StdNet comes with two default settings.
>>> from stdnet.conf import settings >>> settings.__dict__ {'DEFAULT_BACKEND': 'redis://127.0.0.1:6379/?db=7', 'DEFAULT_KEYPREFIX': 'stdnet'}
If your redis server runs on a different machine, or you would like to use a different database number, you need to setup a script file along these lines:
if __name__ == '__main__': import stdnet stdnet.runtests('redis://your.server.url:6379/?db=10')
Backends
Backend data-stores provide the backbone of the library, while the Object Relational Mapper the syntactic sugar. Currently the list of back-ends is limited to
Local memory (planned). For testing purposes.
Only Redis is operational.
Object Relational Mapper
The module stdnet.orm is the ORM, it maps python object into database data. It is design to be fast and safe to use:
from stdnet import orm class Base(orm.StdModel): '''An abstract model. This won't have any data in the database.''' # A unique symbol field, a symbol is an immutable string name = orm.SymbolField(unique = True) # Another symbol, symbol fields are by default indexes ccy = orm.SymbolField() def __str__(self): return str(self.name) class Meta: abstract = True class Instrument(Base): itype = orm.SymbolField() class Fund(Base): # A char field is a string and it is never an index description = orm.CharField() class PositionDescriptor(orm.StdModel): dt = orm.DateField() # A float field is not an index by default size = orm.FloatField() price = orm.FloatField() # A FK field which we explicitly set as non-index position = orm.ForeignKey("Position", index = False) class Position(orm.StdModel): instrument = orm.ForeignKey(Instrument, related_name = 'positions') fund = orm.ForeignKey(Fund) history = orm.ListField(model = PositionDescriptor) def __str__(self): return '%s: %s @ %s' % (self.fund,self.instrument,self.dt)
Register models with backend:
orm.register(Instrument,'redis://localhost/?db=1') orm.register(Fund,'redis://localhost/?db=1') orm.register(PositionDescriptor,'redis://localhost/?db=2') orm.register(Position,'redis://localhost/?db=2')
And play with the API:
>>> f = Fund(name="pluto,description="The super pluto fund",ccy="EUR").save() Fund: pluto
Kudos
Contributing
Development of StdNet happens at Github: http://github.com/lsbardel/python-stdnet
You are highly encouraged to participate in the development. Here how to do it:
Fork python-stdnet on github
Create a topic branch (git checkout -b my_branch)
Push to your branch (git push origin my_branch)
Create an issue at https://github.com/lsbardel/python-stdnet/issues with a link to your patch
Licence
This software is licensed under the New BSD License. See the LICENSE file in the top distribution directory for the full license text.
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.