{ "info": { "author": "John Anderson", "author_email": "sontek@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "sqlalchemy_traversal\n====================\n\nThis is a pyramid extension that allows you to use traversal with SQLAlchemy objects\n\nDemo App here: https://github.com/eventray/sqlalchemy_traversal_demo\n\nTo use this you just have to include sqlalchemy_traversal in your pyramid application\nby either putting it in your development.ini:\n\n pyramid.includes = \n sqlalchemy_traversal\n\nor by including it in your main:\n\n config.include('sqlalchemy_traversal')\n\n\nThen you just register your SQLAlchemy session and declarative base:\n\n from sqlalchemy_traversal.interfaces import ISASession\n from sqlalchemy_traversal.interfaces import ISABase\n\n config.registry.registerUtility(DBSession, ISASession)\n config.registry.registerUtility(Base, ISABase)\n\n\nAnd then place the TraversalMixin on any SQLAlchemy class and it will automatically\nbe traversed:\n\n from sqlalchemy_traversal import TraversalMixin\n \n \n class User(TraversalMixin, Base):\n pass\n\n\nNow you will be able to hit the URL /traverse/user to get all the users in your database\n\n\nYou can also tell it to load relationships via the _json_eager_load property:\n\n class User(TraversalMixin, Base):\n _json_eager_load = ['permissions']\n\n\nSaving\n==================================\nIf you want to be able to create data with your API but the content\ncoming back doesn't exactly match your model or you want to run it through\nschema validation first you can use the register save decorator:\n\n @register_save(MyModel, MySchema):\n def saving_my_model(request, data):\n data['my_prop'] = 'NEW DATA'\n return data\n\nYou can also handle data exceptions with exception_handlers:\n\n def handle_integrity_error(model, exception):\n return {\n 'errors': {\n 'message': 'That data is not unique'\n }\n }\n\n @register_save(\n MyModel\n , MySchema\n , exception_handlers={\n IntegrityError: handle_integrity_error\n }\n ):\n def saving_my_model(request, data):\n data['my_prop'] = 'NEW DATA'\n return data\n", "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/eventray/sqlalchemy_traversal", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "sqlalchemy_traversal", "package_url": "https://pypi.org/project/sqlalchemy_traversal/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/sqlalchemy_traversal/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/eventray/sqlalchemy_traversal" }, "release_url": "https://pypi.org/project/sqlalchemy_traversal/0.5.2/", "requires_dist": null, "requires_python": null, "summary": "UNKNOWN", "version": "0.5.2" }, "last_serial": 800005, "releases": { "0.0": [ { "comment_text": "", "digests": { "md5": "bac55988e73eb37949109be5284b16a7", "sha256": "63cb804cbcf5f8ee82093dbb05d12c8f0657a07f8b114a51e6fc084f62c86cda" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.0.tar.gz", "has_sig": false, "md5_digest": "bac55988e73eb37949109be5284b16a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5109, "upload_time": "2012-10-20T19:12:34", "url": "https://files.pythonhosted.org/packages/fe/f7/afd440106077cd0ab22f9a3739915f10a79af68b520f15ccc079d9a699fd/sqlalchemy_traversal-0.0.tar.gz" } ], "0.1": [ { "comment_text": "", "digests": { "md5": "42dc33918c9c472d80636d83baf5941b", "sha256": "acdab26593c2bc74666938530fec674ed08ed11ecfb693f095b58f4c4ad26625" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.1.tar.gz", "has_sig": false, "md5_digest": "42dc33918c9c472d80636d83baf5941b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5186, "upload_time": "2012-10-20T23:45:13", "url": "https://files.pythonhosted.org/packages/36/b1/e26257c9da710ce3f0ab6a7b69b2cabab4aff05494d07e4faef4e3dbe76e/sqlalchemy_traversal-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "3d0e8725e085b9f85e101a87c3308c58", "sha256": "08f96afa27f857779058c8ed398cea94f92bb345a4a07cd6cc05b8e35fa636c7" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.2.tar.gz", "has_sig": false, "md5_digest": "3d0e8725e085b9f85e101a87c3308c58", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5293, "upload_time": "2012-10-21T04:13:40", "url": "https://files.pythonhosted.org/packages/26/78/22a95665f04cf4493cf9ae7bd366ddb52b07973e00fc8de6fc3520ecc52f/sqlalchemy_traversal-0.2.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "1ba07a20331b09d9f535de5bfcca7648", "sha256": "099acb5e6ca3f580e4c4fe2a123fe725526b0586c76807a9e90655203d8a0467" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.4.tar.gz", "has_sig": false, "md5_digest": "1ba07a20331b09d9f535de5bfcca7648", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5950, "upload_time": "2012-10-22T15:38:57", "url": "https://files.pythonhosted.org/packages/9b/ab/fc68fb1e45af033046da03ad7aae17e02d4cb1d0a791615c04313c9fc16b/sqlalchemy_traversal-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "39dd6d6b6b26f51646392caa81e7b050", "sha256": "fc9590734a3a370078f65185ae69f70ce3d20e51e81dc5ee66202015a7c706b0" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.4.1.tar.gz", "has_sig": false, "md5_digest": "39dd6d6b6b26f51646392caa81e7b050", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7704, "upload_time": "2012-11-27T19:22:17", "url": "https://files.pythonhosted.org/packages/7e/f0/c1a18ffe4a50e26c823614a544c7a7afbf752b3b54515ad26e56e5bdf2c3/sqlalchemy_traversal-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "fc11e5a60d70f2737194d2e0ae2c439d", "sha256": "af26d48a045b331a78a36a41d346de01d8e06fb4c321b333747f65e5f9fba023" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.5.0.tar.gz", "has_sig": false, "md5_digest": "fc11e5a60d70f2737194d2e0ae2c439d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11080, "upload_time": "2013-01-26T20:00:19", "url": "https://files.pythonhosted.org/packages/6d/62/1a4cc4f4dec407df0500cbba3ca29271d8183d14a2fd3df05fe3866ca154/sqlalchemy_traversal-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "540970c9ad0beef1a1ce39614e21600e", "sha256": "f027942d6fdcbef6bcad3a8c43113ff8b85b28cc57c9e0d21c6dfff8f70d87f1" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.5.1.tar.gz", "has_sig": false, "md5_digest": "540970c9ad0beef1a1ce39614e21600e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11198, "upload_time": "2013-01-26T21:42:45", "url": "https://files.pythonhosted.org/packages/da/dd/022406e9027bfa0bf60fc00a55d0e7360278fa16faa0430da2324ada6099/sqlalchemy_traversal-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "6ea47ede36b54010ba3a13e5f4e24529", "sha256": "45ab3775ef2154ab7f0b52ff001e2efa9e42a13478bb9f3273d18807d8c2add6" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.5.2.tar.gz", "has_sig": false, "md5_digest": "6ea47ede36b54010ba3a13e5f4e24529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11468, "upload_time": "2013-01-28T13:50:01", "url": "https://files.pythonhosted.org/packages/03/46/d99eaab53d24c91cadc1c05667d13fd3ffb3652c008b10a6aafeb0a1abe7/sqlalchemy_traversal-0.5.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6ea47ede36b54010ba3a13e5f4e24529", "sha256": "45ab3775ef2154ab7f0b52ff001e2efa9e42a13478bb9f3273d18807d8c2add6" }, "downloads": -1, "filename": "sqlalchemy_traversal-0.5.2.tar.gz", "has_sig": false, "md5_digest": "6ea47ede36b54010ba3a13e5f4e24529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11468, "upload_time": "2013-01-28T13:50:01", "url": "https://files.pythonhosted.org/packages/03/46/d99eaab53d24c91cadc1c05667d13fd3ffb3652c008b10a6aafeb0a1abe7/sqlalchemy_traversal-0.5.2.tar.gz" } ] }