python-stdnet

by lsbardel

lsbardel / python-stdnet

Object-data mapper and advanced query manager for non relational databases

123 Stars 18 Forks Last release: Not found BSD 3-Clause "New" or "Revised" License 843 Commits 22 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Object data mapper and advanced query manager for non relational databases.

The data is owned by different, configurable back-end databases and it is accessed using a light-weight Object Data Mapper (ODM). The ODM presents a method of associating user-defined Python classes with database collections, and instances of those classes with items in their corresponding collections. Collections and items are different for different backend databases but are treated in the same way in the python language domain.

:Master CI: |master-build|_ |coverage| :Dev CI: |dev-build|_ |coverage-dev| :Documentation: http://pythonhosted.org/python-stdnet/ :Dowloads: http://pypi.python.org/pypi/python-stdnet/ :Source: https://github.com/lsbardel/python-stdnet :Platforms: Linux, OS X, Windows. Python 2.6, 2.7, 3.2, 3.3, pypy_ :Mailing List: https://groups.google.com/group/python-stdnet :Keywords: server, database, redis, odm

.. |master-build| image:: https://secure.travis-ci.org/lsbardel/python-stdnet.png?branch=master .. _master-build: http://travis-ci.org/lsbardel/python-stdnet .. |dev-build| image:: https://secure.travis-ci.org/lsbardel/python-stdnet.png?branch=dev .. _dev-build: http://travis-ci.org/lsbardel/python-stdnet .. |coverage| image:: https://coveralls.io/repos/lsbardel/python-stdnet/badge.png?branch=master :target: https://coveralls.io/r/lsbardel/python-stdnet?branch=master .. |coverage-dev| image:: https://coveralls.io/repos/lsbardel/python-stdnet/badge.png?branch=dev :target: https://coveralls.io/r/lsbardel/python-stdnet?branch=dev

Contents ~~~~~~~~~~~~~~~

.. contents:: :local:

Features

  • Models with scalar and multi-value fields.
  • Rich query API including unions, intersections, exclusions, ranges and more.
  • Minimal server round-trips via backend scripting (lua for redis).
  • Full text search.
  • Signals handling to allow decoupled applications to get notified on changes.
  • Synchronous and asynchronous database connection.
  • Multi-variate numeric timeseries application.
  • Asynchronous Publish/Subscribe application.
  • 90% Test coverage.
  • Fully documented.

Requirements

  • Python 2.6, 2.7, 3.2, 3.3 and pypy_. Single code-base.
  • redis-py_ for redis backend.
  • Optional pulsar_ when using the asynchronous connections or the test suite.
  • You need access to a Redis_ server version 2.6 or above.

Philosophy

Key-valued pairs databases, also know as key-value stores, have many differences from traditional relational databases, most important being they do not use

SQL
as their query language, storage does not require a fixed table schemas and usually they do not support complex queries.

Stdnet aims to accommodate a flexible schema and join type operations via a lightweight object data mapper. Importantly, it is designed with large data sets in mind. You pull data you need, nothing more, nothing less. Bandwidth and server round-trips can be reduced to the bare minimum so that your application is fast and memory efficient.

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

Version Check

To know which version you have installed::

>>> import stdnet
>>> stdnet.__version__
'0.8.0'
>>> stdnet.VERSION
stdnet_version(major=0, minor=8, micro=0, releaselevel='final', serial=1)

Backends

Backend data-stores are the backbone of the library. Currently the list is limited to

  • Redis_ 2.6 or above.

Object Data Mapper

The

stdnet.odm
module is the ODM, it maps python objects into database data and vice-versa. It is design to be fast and safe to use::
from stdnet import odm

class Base(odm.StdModel): '''An abstract model. This won't have any data in the database.''' name = odm.SymbolField(unique = True) ccy = odm.SymbolField()

def __unicode__(self):
    return self.name

class Meta:
    abstract = True

class Instrument(Base): itype = odm.SymbolField()

class Fund(Base): description = odm.CharField()

class PositionDescriptor(odm.StdModel): dt = odm.DateField() size = odm.FloatField() price = odm.FloatField() position = odm.ForeignKey("Position", index=False)

class Position(odm.StdModel): instrument = odm.ForeignKey(Instrument, related_name='positions') fund = odm.ForeignKey(Fund) history = odm.ListField(model=PositionDescriptor)

def __unicode__(self):
    return '%s: %s @ %s' % (self.fund,self.instrument,self.dt)

Register models with backend::

models = orm.Router('redis://localhost?db=1')
models.register(Instrument)
models.register(Fund)
models.register(PositionDescriptor,'redis://localhost?db=2')
models.register(Position,'redis://localhost?db=2')

And play with the API::

>>> f = models.fund.new(name="pluto, description="The pluto fund", ccy="EUR")
>>> f
Fund: pluto

.. _runningtests:

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 you can find sources from MSOpenTech.

Requirements for running tests:

  • python-stdnet
    project directory.
  • pulsar_.

To run tests open a shell and launch Redis. On another shell, from within the

python-stdnet
package directory, type::
python runtests.py

Tests are run against a local redis server on port

6379
and database 7 by default. To change the server and database where to run tests pass the
--server
option as follow::
python runtests.py --server redis://myserver.com:6450?db=12&password=bla

For more information type::

python runtests.py -h

.. _kudos:

Kudos

  • Redis_ simply because this library uses its awesome features.
  • SQLAlchemy_ and Django_ for ideas and API design.

.. _contributing:

Contributing

Development of stdnet happens at Github: http://github.com/lsbardel/python-stdnet

We very much welcome your contribution of course. To do so, simply follow these guidelines:

  1. Fork python-stdnet on github
  2. Create a topic branch
    git checkout -b my_branch
  3. Push to your branch
    git push origin my_branch
  4. Create an issue at https://github.com/lsbardel/python-stdnet/issues with a link to your patch

.. _license:

License

This software is licensed under the New BSD_ License. See the LICENSE file in the top distribution directory for the full license text.

.. Cython: http://cython.org/ .. _redis-py: https://github.com/andymccurdy/redis-py .. _Redis: http://redis.io/ .. _Mongo: http://www.mongodb.org/ .. _hiredis-py: https://github.com/pietern/hiredis-py .. _pymongo: http://pypi.python.org/pypi/pymongo/ .. _Django: http://www.djangoproject.com/ .. _SQLAlchemy: http://www.sqlalchemy.org/ .. _ORM: http://en.wikipedia.org/wiki/Object-relationalmapping .. _CouchDB: http://couchdb.apache.org/ .. _couchdb-python: http://code.google.com/p/couchdb-python/ .. _Memcached: http://memcached.org/ .. _BSD: http://www.opensource.org/licenses/bsd-license.php .. _Sphinx: http://sphinx.pocoo.org/ .. _coverage: http://nedbatchelder.com/code/coverage/ .. _argparse: http://pypi.python.org/pypi/argparse .. _unittest2: http://pypi.python.org/pypi/unittest2 .. _nose: http://readthedocs.org/docs/nose/en/latest .. _DynamoDB: http://aws.amazon.com/dynamodb/ .. _pulsar: http://pypi.python.org/pypi/pulsar .. _mock: http://pypi.python.org/pypi/mock .. _pypy: http://pypy.org/ .. _Mongodb: http://www.mongodb.org/ .. _MSOpenTech: https://github.com/MSOpenTech/redis

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.