{ "info": { "author": "St\u00e9phane Brunner", "author_email": "stephane.brunner@camptocamp.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Framework :: Buildout :: Recipe", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Topic :: System :: Installation/Setup" ], "description": "c2c.sqlalchemy.rest\n===================\n\nUse it\n------\n\nIn ``/model.py``:\n\n.. code:: python\n\n from pyramid.security import Allow, Authenticated, ALL_PERMISSIONS\n class Object(Base):\n __tablename__ = 'object'\n __table_args__ = {'autoload':True}\n __acl__ = [\n (Allow, 'admin', ALL_PERMISSIONS),\n (Allow, 'editor', ('view', 'edit', 'new', 'delete')),\n (Allow, Authenticated, ('view')),\n ]\n\nIn ``/views/rest.py``:\n\n.. code:: python\n\n from pyramid.view import view_config\n from c2c.sqlalchemy.rest import REST\n from .models import DBSession, Object\n obj = REST(DBSession, Object)\n\n @view_config(route_name='obj_read_many', renderer='jsonp')\n def obj_read_many(request):\n return obj.read_many(request)\n\n @view_config(route_name='obj_read_one', renderer='jsonp')\n def obj_read_one(request):\n return obj.read_one(request)\n\n @view_config(route_name='obj_count', renderer='string')\n def obj_count(request):\n return obj.count(request)\n\n @view_config(route_name='obj_create', renderer='jsonp')\n def obj_create(request):\n return obj.create(request)\n\n @view_config(route_name='obj_update')\n def obj_update(request):\n return obj.update(request)\n\n @view_config(route_name='obj_auto')\n def obj_auto(request):\n return obj.auto(request)\n\n @view_config(route_name='obj_delete', renderer='jsonp')\n def obj_delete(request):\n return obj.delete(request)\n\nIn ``/__init__.py``:\n\n.. code:: python\n\n from pyramid.renderers import JSONP\n from c2c.sqlalchemy.rest import add_rest_routes\n config.add_renderer('jsonp', JSONP(param_name='callback'))\n add_rest_routes(config, 'obj', '/object')\n\nControlling what attributes to display\n--------------------------------------\n\nOne may restrict the displayed attributes to a subset by passing an\n``attr_list`` argument to the constructor. By default all attributes are\ndisplayed. For instance:\n\n.. code:: python\n\n obj = REST(DBSession, Object, attr_list=['id', 'name'])\n\nAdditional properties\n---------------------\n\nIt is possible to add some extra properties by defining in the model an\n``__additional_properties__`` function with an ``attr_list`` argument.\nFor instance:\n\n.. code:: python\n\n class Object(Base):\n\n def __additional_properties__(self, attr_list=None):\n properties = {}\n if attr_list is None or 'l10n' in attr_list:\n l10n = {}\n for l in self.l10n:\n l10n[l.lang.code] = l.value\n properties.update({ \"l10n\": l10n })\n return properties\n\nUsing Relationships\n-------------------\n\nIt is possible to retrieve related objects with ``read_many`` and ``read_one``\nactions provided that the relationships are defined in the models and that\nthey are passed to the REST constructor. For instance:\n\n.. code:: python\n\n class Tag(GeoInterface, Base):\n __tablename__ = 'tag'\n __table_args__ = (\n UniqueConstraint('name'),\n {\"schema\": 'tagging'}\n )\n __acl__ = [\n (Allow, 'admin', ALL_PERMISSIONS),\n (Allow, 'editor', ('view', 'edit', 'new', 'delete')),\n (Allow, Everyone, ('view')),\n ]\n id = Column(types.Integer, primary_key=True)\n name = Column(types.Unicode(200), nullable=False)\n active = Column(types.Boolean, default=True)\n l10n = relationship(\"TagL10n\", backref=\"tag\")\n childrenTags = relationship(\"Tag\",\n secondary=tag_tag,\n primaryjoin=id==tag_tag.c.tag_id1,\n secondaryjoin=id==tag_tag.c.tag_id2,\n order_by=name, backref=\"parentTags\")\n\n.. code:: python\n\n tag_children = { \n 'childrenTags': { 'rest': REST(DBSession, Tag) }\n }\n tag = REST(DBSession, Tag, children=tag_children)\n\nThe name of the property containing the related objects may be specified\nusing the ``propname`` parameter (default is the relationship name):\n\n.. code:: python\n\n tag_children = { \n 'childrenTags': { 'rest': REST(DBSession, Tag), 'propname': 'tags' }\n }\n tag = REST(DBSession, Tag, children=tag_children)\n\nExample result:\n\n.. code:: javascript\n\n {\n \"active\": false,\n \"tags\": [{\n \"active\": true,\n \"name\": \"Artenschutz\",\n \"id\": 31\n }, {\n \"active\": false,\n \"name\": \"Pioniervegetation\",\n \"id\": 71\n }],\n \"name\": \"Naturschutz\",\n \"id\": 58\n }\n\nFrom source\n-----------\n\nBuild::\n\n python bootstrap.py --distribute -v 1.7.1\n ./buildout/bin/buildout\n\nProtocol\n--------\n\n* Read many, ``GET`` on ``.../obj``:\n\n.. code:: javascript\n\n {\n \"objects\": [{\n \"id\": id,\n \"property\": \"value\",\n ...\n },\n ...\n ]\n }\n\n* Read one, ``GET`` on ``.../obj/{id}``:\n\n.. code:: javascript\n\n {\n \"id\": id,\n \"property\": \"value\",\n ...\n }\n\n* Count, ``GET`` on ``.../obj/count``:\n\n.. code:: javascript\n\n 23\n\n* Create, ``POST`` on ``.../obj`` with data:\n\n.. code:: javascript\n\n {\n \"property\": \"value\",\n ...\n }\n\nand it will return the id.\n\n* Update, ``PUT`` on ``.../obj/{id}`` with data:\n\n.. code:: javascript\n\n {\n \"property\": \"value\",\n ...\n }\n\n* Auto, ``POST`` on ``.../obj/auto`` with data:\n\n.. code:: javascript\n\n {\n \"id\": id,\n \"property\": \"value\",\n ...\n }\n\nIf an object matches the given id, it will be updated, else a new object is\nautomatically created with the given id value.\n\n* Delete, ``DELETE`` on ``.../obj/{id}``.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/sbrunner/c2c.sqlalchemy.rest", "keywords": "sqlalchemy rest", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "c2c.sqlalchemy.rest", "package_url": "https://pypi.org/project/c2c.sqlalchemy.rest/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/c2c.sqlalchemy.rest/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/sbrunner/c2c.sqlalchemy.rest" }, "release_url": "https://pypi.org/project/c2c.sqlalchemy.rest/0.3/", "requires_dist": null, "requires_python": null, "summary": "Add a REST interface to simple SQLAlchemy object", "version": "0.3" }, "last_serial": 1652784, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "0eb980a5305a756d0403eadc3d0a74ef", "sha256": "ee0fc7c58c272299f85380d0fa2b1a7f054ec92b1b4a3760cd00847f4d47ee63" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.1.tar.gz", "has_sig": false, "md5_digest": "0eb980a5305a756d0403eadc3d0a74ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3776, "upload_time": "2013-03-14T12:39:16", "url": "https://files.pythonhosted.org/packages/c6/fc/a7b39b091266826e2424cecb70b7829026cd3b5c3624f6625bc35ca28b8f/c2c.sqlalchemy.rest-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "e6ca13a2d5da295ed42f6a511f00c997", "sha256": "4de223aa3aa1bb04a91defd21aacbeca75a6c8146895668a402392fbfbfcc6e3" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.2.tar.gz", "has_sig": false, "md5_digest": "e6ca13a2d5da295ed42f6a511f00c997", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3864, "upload_time": "2013-06-25T13:30:25", "url": "https://files.pythonhosted.org/packages/e2/60/f517cd70845d90181bc9ca8c77d55e6ebe20c0a4952fd1abc64004a56068/c2c.sqlalchemy.rest-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "6b6d209b0401de0b71fdaeb6ae4635f9", "sha256": "bb5d0b9c27846ee549ab6772c0ad5e40ca56fbb527435d176e9579ad294e81cc" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.2.1.tar.gz", "has_sig": false, "md5_digest": "6b6d209b0401de0b71fdaeb6ae4635f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3876, "upload_time": "2013-08-30T11:53:39", "url": "https://files.pythonhosted.org/packages/12/86/a0c94a345dc4d0370b0d504e95d17c19937cabecb747769e9845f9926f39/c2c.sqlalchemy.rest-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "530cf2cbb7cba03143382ba802023ae9", "sha256": "305ddb0887d2cdafd2a11d5bc3089abee30509c8db08836918295021e8eee328" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.2.2.tar.gz", "has_sig": false, "md5_digest": "530cf2cbb7cba03143382ba802023ae9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3881, "upload_time": "2013-10-09T12:53:50", "url": "https://files.pythonhosted.org/packages/07/56/0c6ecef4d9c5ccada1da6372a9c8ffd5f642323e9941a4e92d486fdea225/c2c.sqlalchemy.rest-0.2.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "1e89f53a9337dc64122a308700457d03", "sha256": "7ee45bebf256cc29ba7612940c42f2761d46f686c59351ae02ad488dd3ff11ea" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.3.tar.gz", "has_sig": false, "md5_digest": "1e89f53a9337dc64122a308700457d03", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5868, "upload_time": "2015-07-27T12:50:24", "url": "https://files.pythonhosted.org/packages/94/76/7f50a5a47c183cff5f5e4eb530437c03e67ecf42f3c10f460257e97d8aba/c2c.sqlalchemy.rest-0.3.tar.gz" } ], "0.3dev-20131025": [ { "comment_text": "", "digests": { "md5": "6f94791de091767ff00632738a974e45", "sha256": "71d54a3f48de82c9a4a03c7bb194d03c4aca49f59424bbec28b3daa29b86e476" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.3dev-20131025.tar.gz", "has_sig": false, "md5_digest": "6f94791de091767ff00632738a974e45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5001, "upload_time": "2013-10-25T14:12:20", "url": "https://files.pythonhosted.org/packages/cb/b6/284002045f520d6ed09064b6824e508a8d7ffd3ea63310cc5ebac329c3f8/c2c.sqlalchemy.rest-0.3dev-20131025.tar.gz" } ], "0.3rc1": [ { "comment_text": "", "digests": { "md5": "21e597b1d6521968d218c3ad8fbf1c08", "sha256": "87559e63f4070e5a79131622113edd00687d843b9d97e6bc4ae5b53f27f21d4e" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.3rc1.tar.gz", "has_sig": false, "md5_digest": "21e597b1d6521968d218c3ad8fbf1c08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5370, "upload_time": "2013-11-01T14:52:14", "url": "https://files.pythonhosted.org/packages/e7/3b/d8c2810fc96b9f3ca308598d1065455d823e901c44cdbbb8de8a49cb1bd3/c2c.sqlalchemy.rest-0.3rc1.tar.gz" } ], "0.3rc2": [ { "comment_text": "", "digests": { "md5": "a0104aace3674e0986bd9d125d921b05", "sha256": "fe9bf259c39ec2e6bc13082480e46c9a05decbe8f3deeed5fe3fb1c139908951" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.3rc2.tar.gz", "has_sig": false, "md5_digest": "a0104aace3674e0986bd9d125d921b05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5587, "upload_time": "2013-11-07T08:37:15", "url": "https://files.pythonhosted.org/packages/5d/14/dcc353fe312ed565b50b20c5eef9d820014c253b4078b1f1a51726ffaf07/c2c.sqlalchemy.rest-0.3rc2.tar.gz" } ], "0.3rc3": [ { "comment_text": "", "digests": { "md5": "05fd7b3f59b3e73948d2278789198b26", "sha256": "67871b9ebd575290ab6d71dc9d2082d34f5619eb03e624aec82a27e21e36f04e" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.3rc3.tar.gz", "has_sig": false, "md5_digest": "05fd7b3f59b3e73948d2278789198b26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5800, "upload_time": "2013-11-07T15:54:51", "url": "https://files.pythonhosted.org/packages/0f/74/ead675f3c039052b38ee87c4641b26dc213f93ca19800e5f60faaa339f3d/c2c.sqlalchemy.rest-0.3rc3.tar.gz" } ], "0.4.dev1": [ { "comment_text": "", "digests": { "md5": "04043d356ae7ff022c0ed3a2fe12b8d4", "sha256": "be1d4e49e48f59a93f14b8042004e549ba95bc5b5c97e0445849b164a6845e1c" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.4.dev1.tar.gz", "has_sig": false, "md5_digest": "04043d356ae7ff022c0ed3a2fe12b8d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6707, "upload_time": "2015-07-28T07:48:42", "url": "https://files.pythonhosted.org/packages/9e/a3/14fb8f3253a82498ef8ca992a7cbbda7e4b1ae84e6915e7d5e53818450a7/c2c.sqlalchemy.rest-0.4.dev1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1e89f53a9337dc64122a308700457d03", "sha256": "7ee45bebf256cc29ba7612940c42f2761d46f686c59351ae02ad488dd3ff11ea" }, "downloads": -1, "filename": "c2c.sqlalchemy.rest-0.3.tar.gz", "has_sig": false, "md5_digest": "1e89f53a9337dc64122a308700457d03", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5868, "upload_time": "2015-07-27T12:50:24", "url": "https://files.pythonhosted.org/packages/94/76/7f50a5a47c183cff5f5e4eb530437c03e67ecf42f3c10f460257e97d8aba/c2c.sqlalchemy.rest-0.3.tar.gz" } ] }