{ "info": { "author": "Luca Sbardella", "author_email": "luca@quantmind.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Utilities" ], "description": ":Badges: |license| |pyversions| |status| |pypiversion|\n:Master CI: |travis| |coverage|\n:Downloads: http://pypi.python.org/pypi/pulsar-odm\n:Source: https://github.com/quantmind/pulsar-odm\n:Mailing list: `google user group`_\n:Design by: `Quantmind`_ and `Luca Sbardella`_\n:Platforms: Linux, OSX, Windows. Python 3.5 and above\n:Keywords: sql, sqlalchemy, asynchronous, asyncio, concurrency, greenlet\n\n\n.. |pypiversion| image:: https://badge.fury.io/py/pulsar-odm.svg\n :target: https://pypi.python.org/pypi/pulsar-odm\n.. |pyversions| image:: https://img.shields.io/pypi/pyversions/pulsar-odm.svg\n :target: https://pypi.python.org/pypi/pulsar-odm\n.. |license| image:: https://img.shields.io/pypi/l/pulsar-odm.svg\n :target: https://pypi.python.org/pypi/pulsar-odm\n.. |status| image:: https://img.shields.io/pypi/status/pulsar-odm.svg\n :target: https://pypi.python.org/pypi/pulsar-odm\n.. |travis| image:: https://travis-ci.org/quantmind/pulsar-odm.svg?branch=master\n :target: http://travis-ci.org/quantmind/pulsar-odm\n.. |coverage| image:: https://codecov.io/gh/quantmind/pulsar-odm/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/quantmind/pulsar-odm\n\nPulsar-odm is build on top of pulsar_, sqlalchemy_ and greenlet_ libraries to\nprovide an implicit asynchronous object data mapper to use with code written\nwith asyncio_.\nCurrently only one dialect is implemented and tested:\n\n* postgres+green, postgresql dialect with psycopg2_ and greenlet_\n\n.. contents:: **CONTENTS**\n\n\nUsage\n==========\n\nTo be able to use the object data mapper within standard blocking code,\none needs to use pulsar GreenPool_ as the following snippet highlights:\n\n.. code:: python\n\n from datetime import datetime\n\n from sqlalchemy import Integer, Column, String, DateTime, Boolean\n\n from pulsar.apps.greenio import GreenPool\n\n import odm\n\n\n class Task(odm.Model):\n id = Column(Integer, primary_key=True)\n subject = Column(String(250))\n done = Column(Boolean, default=False)\n created = Column(DateTime, default=datetime.utcnow)\n\n def __str__(self):\n return '%d: %s' % (self.id, self.subject)\n\n\n def example(mp):\n # Make sure table is available\n mp.table_create()\n # Insert a new Task in the table\n with mp.begin() as session:\n task = mp.task(subject='my task')\n session.add(task)\n return task\n\n\n if __name__ == '__main__':\n pool = GreenPool()\n mp = odm.Mapper('postgresql+green://odm:odmtest@127.0.0.1:5432/odmtests')\n mp.register(Task)\n task = pool._loop.run_until_complete(pool.submit(example, mp))\n print(task)\n\nThe ``example`` function is executed in a greenlet other than the main one. This is important otherwise the call fails:\n\n.. code:: python\n\n >> example(mp)\n >> Traceback (most recent call last):\n ...\n RuntimeError: acquire in main greenlet\n\nRunning the function on the greenlet pool guarantees the correct asynchronous execution. When psycopg2_\nexecutes a command against the database on a child greenlet, it switches control to the parent (main) greenlet, which is controlled by the asyncio eventloop so that other asynchronous operations can be carried out.\nOnce the result of the execution is ready, the execution switches back to the original child greenlet so that the ``example`` function can continue.\n\nTesting\n==========\n\nTo run tests, create a new role and database, for postgresql::\n\n psql -a -f tests/db.sql\n\n\nChangelog\n============\n\n* `Version 0.6 `_\n* `Version 0.5 `_\n* `Version 0.4 `_\n* `Versions pre 0.4 `_\n\n\n.. _`Luca Sbardella`: http://lucasbardella.com\n.. _`Quantmind`: http://quantmind.com\n.. _`google user group`: https://groups.google.com/forum/?fromgroups#!forum/python-pulsar\n.. _pulsar: https://docs.pulsarweb.org\n.. _sqlalchemy: http://www.sqlalchemy.org/\n.. _greenlet: https://greenlet.readthedocs.org/en/latest/\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _psycopg2: http://pythonhosted.org/psycopg2/\n.. _GreenPool: http://pythonhosted.org/pulsar/apps/greenio.html", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/quantmind/pulsar-odm", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "pulsar-odm", "package_url": "https://pypi.org/project/pulsar-odm/", "platform": "", "project_url": "https://pypi.org/project/pulsar-odm/", "project_urls": { "Homepage": "https://github.com/quantmind/pulsar-odm" }, "release_url": "https://pypi.org/project/pulsar-odm/0.7.0/", "requires_dist": null, "requires_python": "", "summary": "", "version": "0.7.0" }, "last_serial": 3360572, "releases": { "0.1.0": [], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3113f156483f30982b98b27ad9733d4a", "sha256": "9ff43774406b0c396b216e1388b5f6951d7ac0a50776c50c1650f3479b55652d" }, "downloads": -1, "filename": "pulsar-odm-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3113f156483f30982b98b27ad9733d4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12982, "upload_time": "2015-08-02T11:45:35", "url": "https://files.pythonhosted.org/packages/12/cd/177ee0dfb456f3b493a61131ad15ee66336c86039f1a443caaa6438baa86/pulsar-odm-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "4f21befed36e59cad1a7b975f1e11df4", "sha256": "26d826ffe250d19a2a8867b67708dd249e3c4f3ef6952f43fdb6669c68605bff" }, "downloads": -1, "filename": "pulsar-odm-0.3.0.tar.gz", "has_sig": false, "md5_digest": "4f21befed36e59cad1a7b975f1e11df4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13059, "upload_time": "2015-11-12T17:13:38", "url": "https://files.pythonhosted.org/packages/26/79/be4fdf9379b04e3f1c3a463737708739ce3105f123055a6f27c5e720edab/pulsar-odm-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "f2208049ef0aad0fd72970e8fdd43e4e", "sha256": "74c552a70e9548a39ff55c235dc4f63310ecce408334ac916670d25e53d61964" }, "downloads": -1, "filename": "pulsar-odm-0.4.0.tar.gz", "has_sig": false, "md5_digest": "f2208049ef0aad0fd72970e8fdd43e4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14132, "upload_time": "2016-03-17T11:05:07", "url": "https://files.pythonhosted.org/packages/9c/fb/1ec4eec05f804aa8d3ef7ea51f24782d3220481b3af5ae6945029348ef3f/pulsar-odm-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "d96026b014077597104dca23f613eb7b", "sha256": "e2725023a93974d41be40c21d8d69c4cf5aa6327b7eb0b0ef45dcb9eed74990d" }, "downloads": -1, "filename": "pulsar_odm-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d96026b014077597104dca23f613eb7b", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 20828, "upload_time": "2016-05-12T08:22:01", "url": "https://files.pythonhosted.org/packages/34/8e/6b0c0a0c6b38a6991e7df6ec5abb5f90af867f9c54df7711cc6bfd6ff608/pulsar_odm-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc741054e7424e86cf308f18efce61c0", "sha256": "be50309e8db3cedced470d2855ca75defebcc0407ae9213952933df1c9f75993" }, "downloads": -1, "filename": "pulsar-odm-0.5.0.tar.gz", "has_sig": false, "md5_digest": "cc741054e7424e86cf308f18efce61c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15504, "upload_time": "2016-05-12T08:21:53", "url": "https://files.pythonhosted.org/packages/2a/15/a5fb52101c0fbd20695b4f329c817c690e9d7b94d049e993abe8e226f2f8/pulsar-odm-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "bf3a462ea1d283002088e1584f7cad03", "sha256": "67ba4f0c8a68687a28c79404029614bb32a45a5ad88c09ec5fde8f12f60862b6" }, "downloads": -1, "filename": "pulsar_odm-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bf3a462ea1d283002088e1584f7cad03", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 20816, "upload_time": "2016-10-11T14:54:41", "url": "https://files.pythonhosted.org/packages/da/99/b00718145e3045985ab84cbf9ac2054b675891292cd5686b6754b5e932f5/pulsar_odm-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd08e0124039a4cfadbdb5bb7e5596ff", "sha256": "6733501870f1c1d3b1e231cf9909a0b7f894c479c7b2e7b0b2a3f2c72b48f201" }, "downloads": -1, "filename": "pulsar-odm-0.6.0.tar.gz", "has_sig": false, "md5_digest": "cd08e0124039a4cfadbdb5bb7e5596ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15424, "upload_time": "2016-10-11T14:54:39", "url": "https://files.pythonhosted.org/packages/c9/67/2c861d785888a8c65056948aac9200bb11d182eef4034f24d3fa2f9f575b/pulsar-odm-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "17aff2b000186df0f1bb8562c9328796", "sha256": "eff8e492f2453c5a8a36a137b05390886c86929de1b6494a72c5b750e849ffb7" }, "downloads": -1, "filename": "pulsar_odm-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "17aff2b000186df0f1bb8562c9328796", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 20621, "upload_time": "2016-10-13T13:04:59", "url": "https://files.pythonhosted.org/packages/7b/48/97b184aac2fd62ce0367d6878833c774de48e293bfc8f68fa5b423061d19/pulsar_odm-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d70c7d4d4e77fbb2e386a5bf19705b5d", "sha256": "e0e756cf5b37375fb5d78fd352de0b6a0bd2b59478062e5bbd0890ce441025da" }, "downloads": -1, "filename": "pulsar-odm-0.6.1.tar.gz", "has_sig": false, "md5_digest": "d70c7d4d4e77fbb2e386a5bf19705b5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15255, "upload_time": "2016-10-13T13:04:56", "url": "https://files.pythonhosted.org/packages/4a/6b/42580061d7fba8d79707d3d98878658fb67cfabdb909c69779be179e3949/pulsar-odm-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "fd52db4a0b739c496089e07eb8a7d19d", "sha256": "c0ed16b4f46e1e5a98d3d4e7bd97901bf19f93a5f6d7f7facb64a26954788e7e" }, "downloads": -1, "filename": "pulsar_odm-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fd52db4a0b739c496089e07eb8a7d19d", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 20222, "upload_time": "2016-11-20T10:12:20", "url": "https://files.pythonhosted.org/packages/20/7d/632f1e851091c11f6913ad6785ef4e10e01476be2407a43a5473d3610dc2/pulsar_odm-0.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab249e2a0a3cf0d3bd997fb3263c8b84", "sha256": "739538fefb5ffa300cbf47bf2c7e9c64d73a75f2c0c152a0164a9cbd611d435e" }, "downloads": -1, "filename": "pulsar-odm-0.6.2.tar.gz", "has_sig": false, "md5_digest": "ab249e2a0a3cf0d3bd997fb3263c8b84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14884, "upload_time": "2016-11-20T10:12:17", "url": "https://files.pythonhosted.org/packages/e3/b8/b37f49712490390519587032c0e0906fcf7ddf8effe8e4cf04dcf9c4426b/pulsar-odm-0.6.2.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "aac368e9602720280ba5e636495952ea", "sha256": "5a1bef53f7d8b85e91fdbf10c103d9fd2cadaf8549a182c193a150c997c9fdb3" }, "downloads": -1, "filename": "pulsar-odm-0.7.0.tar.gz", "has_sig": false, "md5_digest": "aac368e9602720280ba5e636495952ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40244, "upload_time": "2017-11-24T11:00:43", "url": "https://files.pythonhosted.org/packages/c9/a2/77781f094fa4fac04526e7d6f673b4b8d5e3b7b5f0ce544f15deb0c7ca06/pulsar-odm-0.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aac368e9602720280ba5e636495952ea", "sha256": "5a1bef53f7d8b85e91fdbf10c103d9fd2cadaf8549a182c193a150c997c9fdb3" }, "downloads": -1, "filename": "pulsar-odm-0.7.0.tar.gz", "has_sig": false, "md5_digest": "aac368e9602720280ba5e636495952ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40244, "upload_time": "2017-11-24T11:00:43", "url": "https://files.pythonhosted.org/packages/c9/a2/77781f094fa4fac04526e7d6f673b4b8d5e3b7b5f0ce544f15deb0c7ca06/pulsar-odm-0.7.0.tar.gz" } ] }