{ "info": { "author": "Franck Bret", "author_email": "franckbret@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Framework :: Pyramid", "Intended Audience :: Developers", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Internet :: WWW/HTTP :: WSGI :: Server", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. This file is a part of the AnyBlok / Pyramid / REST api project\n..\n.. Copyright (C) 2017 Franck BRET \n.. Copyright (C) 2017 Jean-Sebastien SUZANNE \n.. Copyright (C) 2019 Jean-Sebastien SUZANNE \n..\n.. This Source Code Form is subject to the terms of the Mozilla Public License,\n.. v. 2.0. If a copy of the MPL was not distributed with this file,You can\n.. obtain one at http://mozilla.org/MPL/2.0/.\n\n.. image:: https://img.shields.io/pypi/pyversions/anyblok_pyramid_rest_api.svg?longCache=True\n :alt: Python versions\n\n.. image:: https://travis-ci.org/AnyBlok/anyblok-pyramid-rest-api.svg?branch=master\n :target: https://travis-ci.org/AnyBlok/anyblok-pyramid-rest-api\n :alt: Build status\n\n.. image:: https://coveralls.io/repos/github/AnyBlok/anyblok-pyramid-rest-api/badge.svg?branch=master\n :target: https://coveralls.io/github/AnyBlok/anyblok-pyramid-rest-api?branch=master\n :alt: Coverage\n\n.. image:: https://img.shields.io/pypi/v/anyblok-pyramid-rest-api.svg\n :target: https://pypi.python.org/pypi/anyblok-pyramid-rest-api/\n :alt: Version status\n \n.. image:: https://readthedocs.org/projects/anyblok-pyramid-rest-api/badge/?version=latest\n :alt: Documentation Status\n :scale: 100%\n :target: https://doc.anyblok-pyramid-rest-api.anyblok.org/en/latest/?badge=latest\n\nAnyblok Pyramid Rest Api\n========================\n\nThe main idea is to provide facilities for building restful api that interacts with AnyBlok_ models\nthrough a CRUD like pattern.\n\nAs dependecy, it use Cornice_ for its validators and schema abilities and Marshmallow_ for\nschema definition, serialization and deserialization (we have since split this work to\nAnyBlok_Marshmallow_).\n\n* Free software: Mozilla Public License Version 2.0\n* Documentation: https://anyblok-pyramid-rest-api.readthedocs.io\n\nFeatures\n--------\n\n* Incoming request validation through schema (validation before database query and ability to\n validate several parts of the request object)\n* CRUD queries always with request.validated data\n* Data deserialization for response through schema\n* Easy CRUD resource declaration (map a model on an endpoint)\n* Automatic schema generation based on models introspection\n* Advanced collection filtering, ordering, paging (querystring validation through schema)\n\nTodo\n----\n\n* Helpers for JsonSchema or Swagger\n* Advanced introspection for api documentation generation\n\nRequest lifecyle\n----------------\n\nincoming request ::\n\n -> validators -> deserializer (json to dict) -> schema load -> request.validated -> request.errors\n\nrequest.validated ::\n\n -> crud -> resulting records\n -> deserializer (records to schema dump)\n -> serializer (default pyramid / cornice dict to json serializer)\n -> response\n\nAuthor\n------\n\nFranck Bret\n~~~~~~~~~~~\n\n* franckbret@gmail.com\n* https://github.com/franckbret\n\nContributors\n------------\n\nJean-S\u00e9bastien Suzanne\n~~~~~~~~~~~~~~~~~~~~~~\n\n* js.suzanne@gmail.com\n* https://github.com/jssuzanne\n* https://github.com/AnyBlok\n\nCredits\n-------\n\n* Anyblok_\n* Pyramid_\n* Cornice_\n* Marshmallow_\n* AnyBlok_Marshmallow_\n\n.. _Anyblok: https://github.com/AnyBlok/AnyBlok\n.. _Pyramid: https://getpyramid.com\n.. _Cornice: http://cornice.readthedocs.io/\n.. _Marshmallow: http://marshmallow.readthedocs.io/\n.. _AnyBlok_Marshmallow: https://github.com/AnyBlok/AnyBlok_Marshmallow\n\nLicense\n~~~~~~~\n\nThis Source Code Form is subject to the terms of the Mozilla Public License,\nv. 2.0. If a copy of the MPL was not distributed with this file,You can\nobtain one at http://mozilla.org/MPL/2.0/.\n\nCopyright (c) 2017, Franck Bret\n\n\n.. This file is a part of the AnyBlok / Pyramid project\n..\n.. Copyright (C) 2019 Jean-Sebastien SUZANNE \n..\n.. This Source Code Form is subject to the terms of the Mozilla Public License,\n.. v. 2.0. If a copy of the MPL was not distributed with this file,You can\n.. obtain one at http://mozilla.org/MPL/2.0/.\n\nChange Log\n==========\n\nAll notable changes to this project will be documented in this file.\nThis project adheres to `Semantic Versioning `_.\n\n0.5.0 (2019-06-21)\n------------------\n\nRefactored\n~~~~~~~~~~\n\n* Tag can now be grouped\n\n ::\n\n @Adapter.tags('green', 'blue')\n def tag_is_green_or_blue(self, querystring, query, tags):\n query = query.join(self.registry.Customer.tags, aliased=True)\n query = query.filter(self.registry.Tag.name.in_(tags))\n return query\n\n* ``adapter_cls`` is renamed ``QueryStringAdapter``. the compatibility is keeped and \n a DeprecationWarning is sent\n\n\n0.4.0 (2019-01-03)\n------------------\n\nAdded\n~~~~~\n\n* CrudResource.execute(name, kwarg) decorator to define Service on:\n\n - `collection_path`/execute/`name`: validator on the body\n - `path`/execute/`name`: validator on the path and the body\n\n ::\n\n @resource(collection_path='/foo', path='/foo/{bar}')\n class MyResource(CrudResource):\n @CrudResource.service('print', collection=True)\n def plop(self): # /foo/execute/print\n # verb : POST (default), GET, PUT, PATCH, DELETE, ...\n # schema optional\n # query = self.get_querystring('rest action given to get_model')\n # body = self.body\n ...\n\n @CrudResource.service('print')\n def otherplop(self): # /foo/{bar}/execute/print\n # verb : POST (default), GET, PUT, PATCH, DELETE, ...\n # schema optional for body, pathschema for path\n # body = self.body\n ...\n\n* Collection views to update and delete collection defined by querystring:\n\n - collection_put\n - collection_patch\n - collection_delete\n\nRefactored\n~~~~~~~~~~\n\n* If a ``request.error`` is found during the execution of a view in the crud resource,\n then a registry.rollback will be done\n* ``Collection post`` is waiting a list of dict, Now it is possible to create more than\n one entry\n\n0.3.0 (2018-12-07)\n------------------\n\nRemoved\n~~~~~~~\n\n* Compatibility with python 3.3\n\nFixed\n~~~~~\n* QueryString filters and tags are executed only one time by query\n* in the context manager to save the error, the registry is now rollbacked\n\nRefactored\n~~~~~~~~~~\n\n* The error field is now the key of the errors description dict (All validation errors messages are now dict)\n\n0.2.1 (2018-10-06)\n------------------\n\nAdded\n~~~~~\n\n* MANIFEST.in file\n\nRemoved\n~~~~~~~\n\n* VERSION file\n\n0.2.0 (2018-10-01)\n------------------\n\nAdded\n~~~~~\n\n* **context** key in querystring. The goal is to add some informations \n to help custom filter and tag to build their query\n\nRefactored\n~~~~~~~~~~\n\n* Now the querystring desarializer use regex to get the informations\n\n0.1.0 (2018-09-26)\n------------------\n\nAdded\n~~~~~\n\n* **CRUDResource** class to define REST api\n* service behaviours\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/AnyBlok/anyblok-pyramid-rest-api", "keywords": "anyblok-pyramid-rest-api", "license": "", "maintainer": "", "maintainer_email": "", "name": "anyblok_pyramid_rest_api", "package_url": "https://pypi.org/project/anyblok_pyramid_rest_api/", "platform": "", "project_url": "https://pypi.org/project/anyblok_pyramid_rest_api/", "project_urls": { "Homepage": "https://github.com/AnyBlok/anyblok-pyramid-rest-api" }, "release_url": "https://pypi.org/project/anyblok_pyramid_rest_api/0.5.0/", "requires_dist": null, "requires_python": "", "summary": "Tools to build rest api's", "version": "0.5.0" }, "last_serial": 5431539, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "7bcebcbcd71aa5e88b2c508d09049415", "sha256": "5cbfce78e6df8f549b0a83e68fdb7b5ce3543eb143423b55d093ec3dec40e5e3" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7bcebcbcd71aa5e88b2c508d09049415", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 36707, "upload_time": "2018-09-26T08:22:04", "url": "https://files.pythonhosted.org/packages/e6/4a/900e1a17f2b22347901341565f3463a323d7e1f6a6125196dfbd0e455eb9/anyblok_pyramid_rest_api-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "944a274dcf28442422bd04b64c6f6c91", "sha256": "57a5353443bdbd95f2ec5d4248ad41abf9cfad4aaa72ecf65c29722cb9fb6222" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.1.0.tar.gz", "has_sig": false, "md5_digest": "944a274dcf28442422bd04b64c6f6c91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20504, "upload_time": "2018-09-26T08:22:01", "url": "https://files.pythonhosted.org/packages/55/51/5f842d3745c545242be069f90de3108abf8ad52ef758b7c0877c0dcffaba/anyblok_pyramid_rest_api-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "fff24cd51f5ebba432a7cd6d32d4c403", "sha256": "945e2863c7422e9b176db293633d54093e073a56f73561d8ce082b2b1cd239f1" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fff24cd51f5ebba432a7cd6d32d4c403", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 38308, "upload_time": "2018-10-01T09:59:57", "url": "https://files.pythonhosted.org/packages/52/49/0cf5088d77438cc90dcf38dbe437d25a9084170164d1d24ac171e56b1325/anyblok_pyramid_rest_api-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "268c16bbb337b4690d9a541e627ab75f", "sha256": "72861cfaf319ef8853d1cb1f47897d1a233a16f122613046b3c8a9aeb8d1d716" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.2.0.tar.gz", "has_sig": false, "md5_digest": "268c16bbb337b4690d9a541e627ab75f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21568, "upload_time": "2018-10-01T09:59:54", "url": "https://files.pythonhosted.org/packages/2c/97/2b48091737b0daf1f6c14fe81f4773d2976360db3c561e26fc00c32510f7/anyblok_pyramid_rest_api-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "c6ac8f1def013b83d71d0a5feff394d9", "sha256": "df8e73532791182e0242b7aa07c46daa05b1760a79b6b1cf03b424b7a7aecada" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c6ac8f1def013b83d71d0a5feff394d9", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 38347, "upload_time": "2018-10-05T23:14:25", "url": "https://files.pythonhosted.org/packages/42/79/491db365988047e9869794ad9b043fd29dd0875a594f1f276c57b37588de/anyblok_pyramid_rest_api-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d502b6bc9559a7815b1629ce5af36b0", "sha256": "b29ea1f13125da10821b457265c72b3b5d92ed787c3242ffb43a39fab17c975c" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.2.1.tar.gz", "has_sig": false, "md5_digest": "5d502b6bc9559a7815b1629ce5af36b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22198, "upload_time": "2018-10-05T23:14:19", "url": "https://files.pythonhosted.org/packages/be/7c/267c4ec5271350e79439517f51897ad3341e9a42d49fef7ea4c5459b5895/anyblok_pyramid_rest_api-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6ce4646cb8dc2732b9859546e95337bf", "sha256": "6a97222b118363b67527e8c6d508ad8e8019e02a9a360870e88bb519cd1ab49f" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6ce4646cb8dc2732b9859546e95337bf", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 38706, "upload_time": "2018-12-07T22:01:40", "url": "https://files.pythonhosted.org/packages/8b/3f/56bb9a118042cf1f841f2ad5b222f92087be859899f29555fe4b41a155c3/anyblok_pyramid_rest_api-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c7838332f33899e347907b503282f67d", "sha256": "0d8716d6807379131622aceceecd8227830585ec426fc912694fc4bbcbacc8ef" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c7838332f33899e347907b503282f67d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22818, "upload_time": "2018-12-07T22:01:37", "url": "https://files.pythonhosted.org/packages/75/f2/f53ff33dec00991335b8b7c264b994397182cb6b671b59ebd2efdff5d16e/anyblok_pyramid_rest_api-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "711358f64a893e88922dc171af56b549", "sha256": "06754e1e4b64625cc224bff6433ac4533bf4330a7c9000426f55480ef7b5235f" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "711358f64a893e88922dc171af56b549", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 60496, "upload_time": "2019-01-03T16:10:31", "url": "https://files.pythonhosted.org/packages/a5/ec/61a1babfbb865f2a17e695f5529570e69cf25a55f9eba92db669951c6144/anyblok_pyramid_rest_api-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0e20c8735f13de5fa1452e953b68d44", "sha256": "70047d9d0e2fcd104d470ac8509164c9f26ec742fd98ec646f52ad45e743a082" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.4.0.tar.gz", "has_sig": false, "md5_digest": "a0e20c8735f13de5fa1452e953b68d44", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30451, "upload_time": "2019-01-03T16:10:29", "url": "https://files.pythonhosted.org/packages/fb/ac/b2622367e502b62771aa80e3e9b2e823834c258fb60ec9a1d397a0220c4f/anyblok_pyramid_rest_api-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "ca972a4961acecaafc1c4b43c62ba6b8", "sha256": "991686833c748fd51c89dfdc49ba00a6bcd82921f8c6530f0ac94be644525189" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ca972a4961acecaafc1c4b43c62ba6b8", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 65599, "upload_time": "2019-06-21T15:46:23", "url": "https://files.pythonhosted.org/packages/43/cd/3abb95cecaa87330d84d23c9db82a3b783e70edc4e408d08013ae2d8213b/anyblok_pyramid_rest_api-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc2827b16aae89a109540c402ffeb9bc", "sha256": "08b157317900d8d2fe2fa6b6b90fd91a4e4e2cd7d3ed75199de6d90207286593" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.5.0.tar.gz", "has_sig": false, "md5_digest": "fc2827b16aae89a109540c402ffeb9bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32968, "upload_time": "2019-06-21T15:46:20", "url": "https://files.pythonhosted.org/packages/7c/44/8d7c23e858efd88edff2a5d8f761018783484926bb0f6ca4579b2dac064a/anyblok_pyramid_rest_api-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ca972a4961acecaafc1c4b43c62ba6b8", "sha256": "991686833c748fd51c89dfdc49ba00a6bcd82921f8c6530f0ac94be644525189" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ca972a4961acecaafc1c4b43c62ba6b8", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 65599, "upload_time": "2019-06-21T15:46:23", "url": "https://files.pythonhosted.org/packages/43/cd/3abb95cecaa87330d84d23c9db82a3b783e70edc4e408d08013ae2d8213b/anyblok_pyramid_rest_api-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc2827b16aae89a109540c402ffeb9bc", "sha256": "08b157317900d8d2fe2fa6b6b90fd91a4e4e2cd7d3ed75199de6d90207286593" }, "downloads": -1, "filename": "anyblok_pyramid_rest_api-0.5.0.tar.gz", "has_sig": false, "md5_digest": "fc2827b16aae89a109540c402ffeb9bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32968, "upload_time": "2019-06-21T15:46:20", "url": "https://files.pythonhosted.org/packages/7c/44/8d7c23e858efd88edff2a5d8f761018783484926bb0f6ca4579b2dac064a/anyblok_pyramid_rest_api-0.5.0.tar.gz" } ] }