{ "info": { "author": "Plone Foundation", "author_email": "plone-developers@lists.sourceforge.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Plone", "Framework :: Plone :: 4.3", "Framework :: Plone :: 5.0", "Framework :: Plone :: 5.1", "Framework :: Plone :: 5.2", "Framework :: Plone :: Core", "Framework :: Zope2", "Framework :: Zope :: 4", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8" ], "description": ".. image:: https://github.com/plone/plone.rest/workflows/plone.rest%20CI/badge.svg\n :alt: Github Actions Status\n :target: https://github.com/plone/plone.rest/actions?query=workflow%3A%22plone.rest+CI%22\n\n.. image:: https://img.shields.io/coveralls/github/plone/plone.rest.svg\n :alt: Coveralls github\n :target: https://coveralls.io/github/plone/plone.restapi\n\n.. image:: https://img.shields.io/pypi/status/plone.rest.svg\n :target: https://pypi.python.org/pypi/plone.rest/\n :alt: Egg Status\n\n.. image:: https://img.shields.io/pypi/v/plone.rest.svg\n :target: https://pypi.python.org/pypi/plone.rest/\n :alt: Latest Version\n\n.. image:: https://img.shields.io/pypi/l/plone.rest.svg\n :target: https://pypi.python.org/pypi/plone.rest/\n :alt: License\n\n\n==========\nPlone REST\n==========\n\nPurpose\n-------\n\nplone.rest allows you to use HTTP verbs such as GET, POST, PUT, DELETE, etc. in `Plone `_.\n\nREST stands for `Representational State Transfer `_.\nIt is a software architectural principle to create loosely coupled web APIs.\n\nplone.rest provides the basic infrastructure that allows us to build RESTful endpoints in Plone.\n\nThe reason for separating this infrastructure into a separate package from the 'main' full `Plone REST API `_ is so you can create alternative endpoints tailored to specific usecases. A number of these specific endpoints are already in active use.\n\n\nAudience\n--------\n\nplone.rest is for experienced web developers who want to build their own HTTP/REST endpoints on top of Plone.\n\nIf you want to **use** a ready-made full RESTful Plone API, you should use `plone.restapi `_.\nThat package uses, and depends upon, this one.\n\n\nFeatures\n--------\n\n* Registering RESTful service endpoints for the following HTTP verbs:\n\n * GET\n * POST\n * PUT\n * DELETE\n * PATCH\n * OPTIONS\n\n* Support for Dexterity and Archetypes-based content objects\n* Content negotiation: Services can be registered for arbitrary media types (e.g. 'application/json').\n* Named services allows to register service endpoints for custom URLs\n\n\nRegistering RESTful Service Endpoints\n-------------------------------------\n\nplone.rest allows you to register HTTP verbs for Plone content with ZCML.\n\nThis is how you would register a PATCH request on Dexterity content:\n\n.. code-block:: xml\n\n \n\nYou have to specify the HTTP verb (GET, POST, PUT, DELETE, HEAD, OPTIONS), the\nmedia type used for content negotiation, the interface for the content objects,\nthe factory class that actually returns the content and the permission required\nto access the service.\n\nThe factory class needs to inherit from the plone.rest 'Service' class and to implement a render method that returns the body of the response::\n\n from plone.rest import Service\n\n class Patch(Service):\n\n def render(self):\n return '{\"message\": \"PATCH: Hello World!\"}'\n\n\nContent Negotiation\n-------------------\n\nTo access the service endpoint we just created we have to send a GET request to a Dexterity object by setting the 'Accept' header to 'application/json'::\n\n PATCH /Plone/doc1 HTTP/1.1\n Host: localhost:8080\n Accept: application/json\n\nThe server then will respond with '200 OK'::\n\n HTTP/1.1 200 OK\n Content-Type: application/json\n\n {\n \"message\": \"PATCH: Hello World!\"\n }\n\nYou can try this out on the command line:\n\n.. code-block:: console\n\n $ http --auth admin:admin PATCH localhost:8080/Plone/doc1 Accept:application/json\n\n.. note:: You have to install httpie (pip install httpie) to make this example work.\n\nHere is a list of examples for all supported HTTP verbs:\n\nGET::\n\n $ http --auth admin:admin GET localhost:8080/Plone/doc1 Accept:application/json\n\nPOST::\n\n $ http --auth admin:admin POST localhost:8080/Plone/doc1 Accept:application/json\n\nPUT::\n\n $ http --auth admin:admin PUT localhost:8080/Plone/doc1 Accept:application/json\n\nDELETE::\n\n $ http --auth admin:admin DELETE localhost:8080/Plone/doc1 Accept:application/json\n\nPATCH::\n\n $ http --auth admin:admin PATCH localhost:8080/Plone/doc1 Accept:application/json\n\nOPTIONS::\n\n $ http --auth admin:admin OPTIONS localhost:8080/Plone/doc1 Accept:application/json\n\n\nNamed Services\n--------------\n\nNamed services can be registered by providing a 'name' attribute in the service directive:\n\n.. code-block:: xml\n\n \n\nThis registers a service endpoint accessible at the site root using the\nfollowing request::\n\n GET /Plone/search HTTP/1.1\n Host: localhost:8080\n Accept: application/json\n\n\nAdditional Path Segments\n------------------------\n\nTo handle additional path segments after the service url like `/Plone/myservice/1/2`\na service has to implement `IPublishTraverse`. The following example simply\nstores all path segments in an array in `self.params`.\n\n.. code-block:: python\n\n from plone.rest import Service\n from zope.interface import implements\n from zope.publisher.interfaces import IPublishTraverse\n\n class MyService(Service):\n\n implements(IPublishTraverse)\n\n def __init__(self, context, request):\n super(MyService, self).__init__(context, request)\n self.params = []\n\n def publishTraverse(self, request, name):\n self.params.append(name)\n return self\n\n def render(self):\n return {'service': 'named get', 'params': self.params}\n\n\nSee also the implementation of the workflow transition endpoint in\nplone.restapi for an other example.\n\n\nCORS\n----\n\nplone.rest allows you to define CORS policies for services in ZCML. The\nfollowing example defines a policy for all services.\n\n.. code-block:: xml\n\n \n\nCORS policies can be bound to specific interfaces of content objects and to\nspecific browser layers. This allows us to define different policies for\ndifferent content types or to override existing policies. The following example\ndefines a policy for the site root.\n\n.. code-block:: xml\n\n \n\nThe CORSPolicy directive supports the following options:\n\nallow_origin\n Origins that are allowed to access the resource. Either a comma separated\n list of origins, e.g. \"http://example.net,http://mydomain.com\" or \"*\".\n\nallow_methods\n A comma separated list of HTTP method names that are allowed by this CORS\n policy, e.g. \"DELETE,GET,OPTIONS,PATCH,POST,PUT\". If not specified, all\n methods for which there's a service registerd are allowed.\n\nallow_credentials\n Indicates whether the resource supports user credentials in the request.\n\nallow_headers\n A comma separated list of request headers allowed to be sent by the client,\n e.g. \"X-My-Header\"\n\nexpose_headers\n A comma separated list of response headers clients can access,\n e.g. \"Content-Length,X-My-Header\".\n\nmax_age\n Indicates how long the results of a preflight request can be cached.\n\nfor\n Specifies the interface for which the CORS policy is registered. If this\n attribute is not specified, the CORS policy applies to all objects.\n\nlayer\n A browser layer for which this CORS policy is registered. Useful for\n overriding existing policies or for making them available only if a specific\n add-on has been installed.\n\n\nInstallation\n------------\n\nInstall plone.rest by adding it to your buildout::\n\n [buildout]\n\n ...\n\n eggs =\n plone.rest\n\nand then running \"bin/buildout\"\n\n\nRedirects\n---------\n\nplone.rest will handle redirects created by ``plone.app.redirector`` pretty\nmuch the same way as regular Plone.\n\nIf a redirect exists for a given URL, a ``GET`` request will be answered with\n``301``, and the new location for the resource is indicated in the ``Location``\nheader::\n\n HTTP/1.1 301 Moved Permanently\n\n Content-Type: application/json\n Location: http://localhost:8080/Plone/my-folder-new-location\n\nAny other request method than GET (``POST``, ``PATCH``, ...) will be answered\nwith ``308 Permanent Redirect``. This status code instructs the client that\nit should NOT switch the method, but retry (if desired) the request with the\n*same* method at the new location.\n\nIn practice, both the Python ``requests`` library a well as Postman seem to\nhonour this behavior by default.\n\n\nContribute\n----------\n\n- Issue Tracker: https://github.com/plone/plone.rest/issues\n- Source Code: https://github.com/plone/plone.rest\n- Documentation: https://pypi.python.org/pypi/plone.rest\n\n\nSupport\n-------\n\nThis package is maintained by Timo Stollenwerk and Ramon Navarro Bosch .\n\nIf you are having issues, please `let us know `_.\n\n\nLicense\n-------\n\nThe project is licensed under the GPLv2.\n\n\nChangelog\n=========\n\n.. You should *NOT* be adding new change log entries to this file.\n You should create a file in the news directory instead.\n For helpful instructions, please see:\n https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst\n\n.. towncrier release notes start\n\n1.6.2 (2021-02-20)\n------------------\n\nBug fixes:\n\n\n- Explicitly make ``allow_credentials`` required in CORS policy.\n This was the default for Bool fields until and including zope.schema 6.0.1, but in 6.1.0 this changed.\n [maurits] (#104)\n\n\n1.6.1 (2020-03-22)\n------------------\n\nBug fixes:\n\n\n- CORS preflight should happen for all error codes, fixes #101\n [sneridagh] (#101)\n\n\n1.6.0 (2019-10-15)\n------------------\n\nNew features:\n\n\n- Remove CMFPlone and make plone.app.redirector dependency optional [timo] (#81)\n\n\n1.5.1 (2019-10-15)\n------------------\n\n- Brown bag release.\n\n\n1.5.0 (2019-10-13)\n------------------\n\n- Brown bag release.\n\n\n1.4.0 (2018-11-08)\n------------------\n\nNew features:\n\n- Python 3 compatibility\n [tschorr,pbauer,frapell]\n\n\n1.3.0 (2018-09-11)\n------------------\n\nNew features:\n\n- Remove unnecessary dependency on Products.CMFPlone.\n Import ISiteRoot from Products.CMFCore.interfaces instead of\n IPloneSiteRoot from Products.CMFPlone.interfaces.siteroot.\n [jordic]\n\n\n1.2.0 (2018-06-29)\n------------------\n\nNew features:\n\n- Add support for redirects from plone.app.redirector.\n [lgraf]\n\n\n1.1.1 (2018-06-22)\n------------------\n\nBugfixes:\n\n- Re-release 1.1.0.\n\n\n1.1.0 (2018-06-22)\n------------------\n\nNew features:\n\n- Get rid of Products.Five.metaclass dependency for Zope 4 compatibility.\n [timo]\n\n\n1.0.0 (2018-01-17)\n------------------\n\nNew features:\n\n- Add support for Plone 5.1.\n [timo]\n\n- Add Plone 4.3, 5.0 and 5.1 to list classifiers in setup.py.\n [timo]\n\n- Set development status to production/stable in setup.py.\n [timo]\n\n\n1.0b1 (2017-05-14)\n------------------\n\nBugfixes:\n\n- Do not render service in preflight requests when no CORS policy was defined.\n Fixes: https://github.com/plone/plone.rest/issues/63\n [buchi]\n\n\n1.0a7 (2016-11-21)\n------------------\n\nBugfixes:\n\n- Do not handle view namespace at all. This fixes: https://github.com/plone/plone.rest/issues/50\n [buchi]\n\n\n1.0a6 (2016-05-22)\n------------------\n\n- Add support for CORS policies.\n [buchi]\n\n- Remove JSON render implementation in service base class. Services\n must provide their own render implementation.\n [buchi]\n\n- Fallback to regular views during traversal to ensure compatibility with\n views beeing called with a specific Accept header.\n [buchi]\n\n\n1.0a5 (2016-02-27)\n------------------\n\n- Implement permission handling. The permission required to access a service\n must be declared in the service directive.\n [buchi]\n\n- Register services with the Zope configuration system. This provides better\n conflict detection and resolution.\n [buchi]\n\n- Improve message for 404 Not Found exceptions (don't return HTML).\n [lgraf]\n\n- Add regression tests for service dispatching.\n [lgraf]\n\n- Restrict traversal of REST requests to content objects. This allows us to\n override existing views with a named service (e.g. /search).\n [buchi]\n\n- Allow virtual hosting scenarios. This fixes #48.\n [tomgross]\n\n\n1.0a4 (2016-02-07)\n------------------\n\n- Refactor Dexterity tests to make sure services return the correct object.\n [timo]\n\n- Add support for browser layers. REST services can now be registered to a\n specific browser layer using the 'layer' attribute.\n [buchi]\n\n- Remove request method specific marker interfaces (IGET, IPOST, etc.) because\n they're no longer required for service lookup.\n [buchi]\n\n- Add support for content negotiation. REST services are no longer hardwired\n to 'application/json' Accept headers. Instead the media type can be\n configured with the service directive.\n [buchi]\n\n- Refactor traversal of REST requests by using a traversal adapter on the site\n root instead of a traversal adapter for each REST service. This prevents\n REST services from being overriden by other traversal adapters.\n [buchi]\n\n\n1.0a3 (2015-12-16)\n------------------\n\n- Release fix. 1.0a2 was a brown-bag release. This fixes https://github.com/plone/plone.rest/issues/34.\n [timo]\n\n\n1.0a2 (2015-12-10)\n------------------\n\n- Simplify patch of DynamicType pre-traversal hook and actually make it work\n with Archetypes.\n [buchi]\n\n- Render errors as JSON.\n [jone]\n\n- Add support for named services which allows registering services like\n ``GET /Plone/search`` or ``GET /Plone/doc1/versions/1`` using a 'name' attribute.\n [jone, lukasgraf, buchi]\n\n- Remove \"layer\" from service directive for now,\n because it is not yet implemented properly.\n [jone]\n\n\n1.0a1 (2015-08-01)\n------------------\n\n- Initial release.\n [bloodbare, timo]\n\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/plone/plone.rest/", "keywords": "rest http", "license": "GPL version 2", "maintainer": "", "maintainer_email": "", "name": "plone.rest", "package_url": "https://pypi.org/project/plone.rest/", "platform": "", "project_url": "https://pypi.org/project/plone.rest/", "project_urls": { "Homepage": "https://github.com/plone/plone.rest/" }, "release_url": "https://pypi.org/project/plone.rest/1.6.2/", "requires_dist": [ "setuptools", "collective.monkeypatcher", "zope.component", "zope.interface", "zope.publisher", "zope.traversing", "Products.CMFCore", "Zope2", "six", "plone.app.testing[robot] (>=4.2.2) ; extra == 'test'", "plone.app.robotframework ; extra == 'test'", "plone.dexterity ; extra == 'test'", "Products.CMFCore ; extra == 'test'", "requests ; extra == 'test'" ], "requires_python": "", "summary": "Plone support for HTTP verbs.", "version": "1.6.2", "yanked": false, "yanked_reason": null }, "last_serial": 13436608, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "b99e251a701c8c3a3db23b71bbde869d", "sha256": "75c202d52a063179e6db99bd13a2780733e72e8ba3ccfe012c1095098309dd00" }, "downloads": -1, "filename": "plone.rest-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b99e251a701c8c3a3db23b71bbde869d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 98745, "upload_time": "2018-01-17T14:31:51", "upload_time_iso_8601": "2018-01-17T14:31:51.498077Z", "url": "https://files.pythonhosted.org/packages/90/b1/062bb8ebfe32ddc6c16e43f02212b042baa5d72f50cdedb603524b839986/plone.rest-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0a1": [ { "comment_text": "", "digests": { "md5": "16008acccd10aed89194e7c9f0ab4bf9", "sha256": "6ae463c721595721a3fe42b3d948f47741932d350c01c153daecf49745da8966" }, "downloads": -1, "filename": "plone.rest-1.0a1.zip", "has_sig": false, "md5_digest": "16008acccd10aed89194e7c9f0ab4bf9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18666, "upload_time": "2015-08-01T04:50:15", "upload_time_iso_8601": "2015-08-01T04:50:15.958559Z", "url": "https://files.pythonhosted.org/packages/b9/46/46da5b8a21a6c399997e139d99f19856a9c1980407b395b0fca02adf2293/plone.rest-1.0a1.zip", "yanked": false, "yanked_reason": null } ], "1.0a2": [ { "comment_text": "", "digests": { "md5": "c13c7cf09a680285d8905006fb2aa42a", "sha256": "3f8755b06853cd089384f7253662e265476575b79aeb69d8e17e96946c0150e0" }, "downloads": -1, "filename": "plone.rest-1.0a2.zip", "has_sig": false, "md5_digest": "c13c7cf09a680285d8905006fb2aa42a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24253, "upload_time": "2015-12-10T20:17:32", "upload_time_iso_8601": "2015-12-10T20:17:32.208929Z", "url": "https://files.pythonhosted.org/packages/99/e5/969dfdd27bede4215266b311622aa10b2e259c0e4b9e6a6781a49f1df5f4/plone.rest-1.0a2.zip", "yanked": false, "yanked_reason": null } ], "1.0a3": [ { "comment_text": "", "digests": { "md5": "4b28269471e64ced22d8bfab975ef997", "sha256": "4f176dfd6d084ee0c97d4773abc8330d7326cf7c679b1046de5fe1c73e24ed51" }, "downloads": -1, "filename": "plone.rest-1.0a3.zip", "has_sig": false, "md5_digest": "4b28269471e64ced22d8bfab975ef997", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 96645, "upload_time": "2015-12-16T19:54:50", "upload_time_iso_8601": "2015-12-16T19:54:50.191457Z", "url": "https://files.pythonhosted.org/packages/64/ca/401b0a8c4170ebfc5ca3f1edd9cc3a6dd8af832aa89fd7ea0c3cc652aa11/plone.rest-1.0a3.zip", "yanked": false, "yanked_reason": null } ], "1.0a4": [ { "comment_text": "", "digests": { "md5": "00657e52ce01127fab87242aaa446ff1", "sha256": "e0b1779f6e77faf264c71feb5f782fd15e3a1a7ec07f894b4bec91048bfad164" }, "downloads": -1, "filename": "plone.rest-1.0a4.zip", "has_sig": false, "md5_digest": "00657e52ce01127fab87242aaa446ff1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 100684, "upload_time": "2016-02-07T12:28:42", "upload_time_iso_8601": "2016-02-07T12:28:42.065351Z", "url": "https://files.pythonhosted.org/packages/c7/ce/45c2a6b8f059804736c81252643fd4679b28d6d3f1e89935862759d218b8/plone.rest-1.0a4.zip", "yanked": false, "yanked_reason": null } ], "1.0a5": [ { "comment_text": "", "digests": { "md5": "75ce779c0da2a5ac6a88785e6cc0656b", "sha256": "63b3acff1e4a9fbaf9bc0b3c974b6b1afe56b8418832271838900b26c043b4eb" }, "downloads": -1, "filename": "plone.rest-1.0a5.zip", "has_sig": false, "md5_digest": "75ce779c0da2a5ac6a88785e6cc0656b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104865, "upload_time": "2016-02-27T16:47:34", "upload_time_iso_8601": "2016-02-27T16:47:34.348710Z", "url": "https://files.pythonhosted.org/packages/5e/c6/5be5de1f2dc94e5c6dd62f4e4e82abea2a9c5c7ffe4ddd9ec408cc02904d/plone.rest-1.0a5.zip", "yanked": false, "yanked_reason": null } ], "1.0a6": [ { "comment_text": "", "digests": { "md5": "2083db2ce79ebaed18fcb7251ff6be47", "sha256": "8c3619d3877980cff788a7cbb2c21a87205174825d0af804b82612c42250a94c" }, "downloads": -1, "filename": "plone.rest-1.0a6.zip", "has_sig": false, "md5_digest": "2083db2ce79ebaed18fcb7251ff6be47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 110520, "upload_time": "2016-05-22T19:18:18", "upload_time_iso_8601": "2016-05-22T19:18:18.921391Z", "url": "https://files.pythonhosted.org/packages/fb/b7/78adb1d2fe1bf9fac4d308f11945e7a996e46c4e7192298909ca05d143c7/plone.rest-1.0a6.zip", "yanked": false, "yanked_reason": null } ], "1.0a7": [ { "comment_text": "", "digests": { "md5": "06fb41fe1ba39c0e140268f9a9eeab62", "sha256": "7c796b8c040cd7a6b0dfb297b5b6df0a233c46a22a95b63dcbc042323078c211" }, "downloads": -1, "filename": "plone.rest-1.0a7.zip", "has_sig": false, "md5_digest": "06fb41fe1ba39c0e140268f9a9eeab62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 110763, "upload_time": "2016-11-21T09:32:17", "upload_time_iso_8601": "2016-11-21T09:32:17.312490Z", "url": "https://files.pythonhosted.org/packages/76/c5/7a6247c282c778a6039df74d977850429fd64bd4aff4e86d3f46b2372959/plone.rest-1.0a7.zip", "yanked": false, "yanked_reason": null } ], "1.0b1": [ { "comment_text": "", "digests": { "md5": "ecf51002ad26a325b87506369a2bb896", "sha256": "40813eeb58f2ed149232943f2c0f417e49461c6d9e7b8468af1a1b2ad30dfe87" }, "downloads": -1, "filename": "plone.rest-1.0b1.zip", "has_sig": false, "md5_digest": "ecf51002ad26a325b87506369a2bb896", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111138, "upload_time": "2017-05-14T17:49:27", "upload_time_iso_8601": "2017-05-14T17:49:27.270936Z", "url": "https://files.pythonhosted.org/packages/b3/dd/82d3d81939fe9732cca7ff3ee02e724696f106d6877b7d6c64a5f6fa6392/plone.rest-1.0b1.zip", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "7eb1b475f2e1e1891dab2880d42de9a2", "sha256": "9bb6265ee9772006004cb9c4938072cbfd9ff4d1416694a116cdc1c3d1f6c641" }, "downloads": -1, "filename": "plone.rest-1.1.1.tar.gz", "has_sig": false, "md5_digest": "7eb1b475f2e1e1891dab2880d42de9a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 98583, "upload_time": "2018-06-22T20:01:44", "upload_time_iso_8601": "2018-06-22T20:01:44.713088Z", "url": "https://files.pythonhosted.org/packages/cc/ab/8dde9ec9eaa0dd6b224ca997319cd2350d65945696b58aaf1162936d7640/plone.rest-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "c1de9dedadce7dff0d6eb7e49eacc804", "sha256": "c604ee15705adfc3a8f645418336c9c9b796bcfdfdaa3284406b0f526deffb41" }, "downloads": -1, "filename": "plone.rest-1.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "c1de9dedadce7dff0d6eb7e49eacc804", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 104845, "upload_time": "2018-06-29T09:03:32", "upload_time_iso_8601": "2018-06-29T09:03:32.971489Z", "url": "https://files.pythonhosted.org/packages/ae/3d/f87ddd386e6f7e52c778be99183cbd85d346699aff226cd8f19289980518/plone.rest-1.2.0-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "df26c3e85fc9f880b88ac028956cfc2a", "sha256": "2c8fa6bdf51db1d6b55f8c3fb09a25a084cb530ff67d3c3a656c227de36faf43" }, "downloads": -1, "filename": "plone.rest-1.2.0.tar.gz", "has_sig": false, "md5_digest": "df26c3e85fc9f880b88ac028956cfc2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 102834, "upload_time": "2018-06-29T09:03:34", "upload_time_iso_8601": "2018-06-29T09:03:34.689510Z", "url": "https://files.pythonhosted.org/packages/c3/cf/a7885277e585da28c623f18d59d7267c911d9957397df0d07653eea9b096/plone.rest-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "c1feb7d686ada95c18b4938ded98d806", "sha256": "ba0714a20d22d228a0f9199578091a3a6a08b49a54861aed00461cd850734da3" }, "downloads": -1, "filename": "plone.rest-1.3.0.tar.gz", "has_sig": false, "md5_digest": "c1feb7d686ada95c18b4938ded98d806", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 102981, "upload_time": "2018-09-11T18:43:13", "upload_time_iso_8601": "2018-09-11T18:43:13.819874Z", "url": "https://files.pythonhosted.org/packages/fe/ba/6845c29552d42c082e5f2ae1faf1a75475754d051e32c3085a21f17cea1c/plone.rest-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "1f464a367aad549748f30ec8c262cfd8", "sha256": "8dfd41ff2831921505996c67e6608e637ca3fbf15db6f193fac823da31b6d918" }, "downloads": -1, "filename": "plone.rest-1.4.0.tar.gz", "has_sig": false, "md5_digest": "1f464a367aad549748f30ec8c262cfd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103477, "upload_time": "2018-11-08T06:20:05", "upload_time_iso_8601": "2018-11-08T06:20:05.492286Z", "url": "https://files.pythonhosted.org/packages/1e/f4/47eaf5e3a232a3db758aec4d71fe02589724dc8e852194041a63b9ce8d65/plone.rest-1.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "89402a091014ee714d4652703ecce395", "sha256": "583e083a537f76e836d9fca94ed9111175745460c09478830be783a11097f7d2" }, "downloads": -1, "filename": "plone.rest-1.5.0.tar.gz", "has_sig": false, "md5_digest": "89402a091014ee714d4652703ecce395", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103843, "upload_time": "2019-10-14T04:43:31", "upload_time_iso_8601": "2019-10-14T04:43:31.851976Z", "url": "https://files.pythonhosted.org/packages/f2/2e/00ca4b03681c2368dad6f3652f4bc6ec1dc17fa350909e640734842d225e/plone.rest-1.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "77ca0b8616f3316fbc824c1c6880decf", "sha256": "2723a5fdf00fcda2aaac568c95f5d01d1a97038b4f9c05f8d2aa9fb0874799db" }, "downloads": -1, "filename": "plone.rest-1.5.1.tar.gz", "has_sig": false, "md5_digest": "77ca0b8616f3316fbc824c1c6880decf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103891, "upload_time": "2019-10-15T06:33:04", "upload_time_iso_8601": "2019-10-15T06:33:04.650001Z", "url": "https://files.pythonhosted.org/packages/bd/c7/af70d87ccabc69a37943d8eb06d79eb5524e5aac6c1d70af8326a9d05f95/plone.rest-1.5.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "277b7a93de5d77fea1fa793eb019adee", "sha256": "08ce661487739876a659ced71020043975ea6be981e6f3b21b12da6174052048" }, "downloads": -1, "filename": "plone.rest-1.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "277b7a93de5d77fea1fa793eb019adee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 105497, "upload_time": "2019-10-15T06:43:42", "upload_time_iso_8601": "2019-10-15T06:43:42.292395Z", "url": "https://files.pythonhosted.org/packages/05/a2/46666485b3fac4d810765f2220cc93bc14f14b44a733f624dc3c0890e612/plone.rest-1.6.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5bdd70b07c29857c8a7ef7c5dd776bbc", "sha256": "c3c73c36961ad9eaafe64477f83f0844d8febdc775af956bf3f2d765335ae876" }, "downloads": -1, "filename": "plone.rest-1.6.0.tar.gz", "has_sig": false, "md5_digest": "5bdd70b07c29857c8a7ef7c5dd776bbc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104128, "upload_time": "2019-10-15T06:43:44", "upload_time_iso_8601": "2019-10-15T06:43:44.768222Z", "url": "https://files.pythonhosted.org/packages/ff/b4/ebbbedcbdc358212799b1f751eba50b66f987b23b04d484c8381f972a3ae/plone.rest-1.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "e6861162098503b4af515959111369d2", "sha256": "58ee07057644c95a0424d372887e0d66a0f980b8f16149c46f4eb39db421d2a4" }, "downloads": -1, "filename": "plone.rest-1.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e6861162098503b4af515959111369d2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 105597, "upload_time": "2020-03-22T20:13:52", "upload_time_iso_8601": "2020-03-22T20:13:52.376451Z", "url": "https://files.pythonhosted.org/packages/9e/9b/12474af8b3b99823e5ec03b7da91a6d4e2321db0c719a405e828e972bf03/plone.rest-1.6.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "40d7db99de5dc3c750220fff58ef44d1", "sha256": "b5ff7b585127571f8470725b9d053c996f884b96c22b14673638a71cb498131b" }, "downloads": -1, "filename": "plone.rest-1.6.1.tar.gz", "has_sig": false, "md5_digest": "40d7db99de5dc3c750220fff58ef44d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104095, "upload_time": "2020-03-22T20:13:54", "upload_time_iso_8601": "2020-03-22T20:13:54.240805Z", "url": "https://files.pythonhosted.org/packages/c2/bb/df0757cae895b27b318119fcdc6ec203f7b81d1ddab39724f0a2bd88662a/plone.rest-1.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "48f9e3a5bb13ef079a386db4ebb80567", "sha256": "7188dda4f377c13084c004b9df5876ea187095a7ce09d6ff5c43436af2796b83" }, "downloads": -1, "filename": "plone.rest-1.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "48f9e3a5bb13ef079a386db4ebb80567", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 105691, "upload_time": "2021-02-20T08:03:11", "upload_time_iso_8601": "2021-02-20T08:03:11.929148Z", "url": "https://files.pythonhosted.org/packages/81/ec/b0565640a0e778ba067aa15c1acb80edd16c59183a182becb6d4a55fd9b2/plone.rest-1.6.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "280f133c776b2867426aa2c6139d894b", "sha256": "9566dc2c4b7bd2934dec2c95b8708ec8994d7265ec3dd36cd42abd90593710ae" }, "downloads": -1, "filename": "plone.rest-1.6.2.tar.gz", "has_sig": false, "md5_digest": "280f133c776b2867426aa2c6139d894b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105407, "upload_time": "2021-02-20T08:03:16", "upload_time_iso_8601": "2021-02-20T08:03:16.192873Z", "url": "https://files.pythonhosted.org/packages/26/8c/4c07349dfab31c1420de7d258daa1f11e053fc8f691512c603942a8c1359/plone.rest-1.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0a1": [ { "comment_text": "", "digests": { "md5": "598c80f530ca2a8d7b7620d8e436144d", "sha256": "1f7d4905e5cabea890e99dfa3374a8ad24338e22c58fd62cfe24368c766e526b" }, "downloads": -1, "filename": "plone.rest-2.0.0a1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "598c80f530ca2a8d7b7620d8e436144d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 106359, "upload_time": "2021-10-05T19:32:11", "upload_time_iso_8601": "2021-10-05T19:32:11.969615Z", "url": "https://files.pythonhosted.org/packages/27/4e/e9dd79a70699277c0e08253aad03b3c7f80bf60a349b3213cb6207469c8f/plone.rest-2.0.0a1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a12cb8b26194ba024b19b023586645de", "sha256": "66b526b2aeab00190e0468ceff36fda98c7c1eaeff47606dfb7c2dab0abd3ce9" }, "downloads": -1, "filename": "plone.rest-2.0.0a1.tar.gz", "has_sig": false, "md5_digest": "a12cb8b26194ba024b19b023586645de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106591, "upload_time": "2021-10-05T19:32:14", "upload_time_iso_8601": "2021-10-05T19:32:14.743625Z", "url": "https://files.pythonhosted.org/packages/97/88/ecf96d9ba8b18dd7baa5e3e95c154d2dc66a2fa194b3d466fd33f6eb1b47/plone.rest-2.0.0a1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0a2": [ { "comment_text": "", "digests": { "md5": "008702846c34a88f3e0b10703e894d94", "sha256": "379a1f6731644d61bd187f94a69b29a3d33ae12bba638fbfec774fb5a94c94b8" }, "downloads": -1, "filename": "plone.rest-2.0.0a2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "008702846c34a88f3e0b10703e894d94", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 106507, "upload_time": "2022-01-25T11:48:32", "upload_time_iso_8601": "2022-01-25T11:48:32.946003Z", "url": "https://files.pythonhosted.org/packages/73/59/75daad5ddce51dd2a5e72760b2637a5bef980f0abb26510ebab6dc352532/plone.rest-2.0.0a2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "065e33ed4d33f34b4521de024c21be03", "sha256": "970c1387b77c08f9e716a0d05206d464a37553857a2b582a12eaca91443a5e2a" }, "downloads": -1, "filename": "plone.rest-2.0.0a2.tar.gz", "has_sig": false, "md5_digest": "065e33ed4d33f34b4521de024c21be03", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106918, "upload_time": "2022-01-25T11:48:36", "upload_time_iso_8601": "2022-01-25T11:48:36.073022Z", "url": "https://files.pythonhosted.org/packages/d4/25/c9130e1c32b75bdfcd8de9ec0e2b844172ca046b2f65e24e18e127f1ff74/plone.rest-2.0.0a2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0a3": [ { "comment_text": "", "digests": { "md5": "4dfd9fb4ca398208d3987990fea5a7c4", "sha256": "65477f1f481d28a5f55a04072bfa64479b2304e6ae155dbaef66d1c52f1b6b35" }, "downloads": -1, "filename": "plone.rest-2.0.0a3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4dfd9fb4ca398208d3987990fea5a7c4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 106766, "upload_time": "2022-02-12T15:41:18", "upload_time_iso_8601": "2022-02-12T15:41:18.012768Z", "url": "https://files.pythonhosted.org/packages/e4/74/dfcb94b451fff9accd5cfe1bdc2d9bd9fbf0de269d30d1de9835b8d0b11b/plone.rest-2.0.0a3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2e45371572cfa458d99e538497dc7ba4", "sha256": "b043ea649c046603695de28a3ea7b5735805d65785d8ddf251f881f855ff0585" }, "downloads": -1, "filename": "plone.rest-2.0.0a3.tar.gz", "has_sig": false, "md5_digest": "2e45371572cfa458d99e538497dc7ba4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107196, "upload_time": "2022-02-12T15:41:20", "upload_time_iso_8601": "2022-02-12T15:41:20.193460Z", "url": "https://files.pythonhosted.org/packages/7d/33/5f6a13b12e85b3dbc3301de10e96043c69c41b94b45b6e8fac07cece7e93/plone.rest-2.0.0a3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0a4": [ { "comment_text": "", "digests": { "md5": "5b11be5cd897a37833c5dd6d2463e41d", "sha256": "be7ba0c39d10e3c06bcdd252f40ddb0555ded11cc75076374659aabd131e45e9" }, "downloads": -1, "filename": "plone.rest-2.0.0a4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5b11be5cd897a37833c5dd6d2463e41d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 106839, "upload_time": "2022-03-24T16:00:56", "upload_time_iso_8601": "2022-03-24T16:00:56.840225Z", "url": "https://files.pythonhosted.org/packages/49/79/a41a65bef37236bbae22c4decfd79acdd7b3d8b4350026e383869f70fc43/plone.rest-2.0.0a4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "975c0e89711eaecac13b852c11758f04", "sha256": "8dc3a41a48cc3d327f4fd8d494cec7db18e0fb0573224155cef94fe5a9adbe45" }, "downloads": -1, "filename": "plone.rest-2.0.0a4.tar.gz", "has_sig": false, "md5_digest": "975c0e89711eaecac13b852c11758f04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107284, "upload_time": "2022-03-24T16:01:01", "upload_time_iso_8601": "2022-03-24T16:01:01.497579Z", "url": "https://files.pythonhosted.org/packages/c2/c4/5bf482bba13ecf7949126260b2a30b417486dc9192d1232a15ababb6a326/plone.rest-2.0.0a4.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0a5": [ { "comment_text": "", "digests": { "md5": "6bb27a9b142a31082c9cc270de3b0008", "sha256": "06d73e204ef5dfee520bce1533896666bc617eec794f90a8a7c2ea670f7f4d9e" }, "downloads": -1, "filename": "plone.rest-2.0.0a5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6bb27a9b142a31082c9cc270de3b0008", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 106961, "upload_time": "2022-04-07T05:20:34", "upload_time_iso_8601": "2022-04-07T05:20:34.269006Z", "url": "https://files.pythonhosted.org/packages/bd/a8/8a4ef2db60ea58fb6915959d0c6adb411002c49181e8b86967eb72682733/plone.rest-2.0.0a5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "000519b7b2a8d941726296f6582da1c9", "sha256": "c7a9dfbcde827874fbf0da011ebf02dd88362ca83a9a19c1341a982a91b21aed" }, "downloads": -1, "filename": "plone.rest-2.0.0a5.tar.gz", "has_sig": false, "md5_digest": "000519b7b2a8d941726296f6582da1c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107432, "upload_time": "2022-04-07T05:20:36", "upload_time_iso_8601": "2022-04-07T05:20:36.900461Z", "url": "https://files.pythonhosted.org/packages/4f/18/e3ef320ea095a5f155b167f335559aef17850f0c8f00164ed4dc90086f62/plone.rest-2.0.0a5.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "48f9e3a5bb13ef079a386db4ebb80567", "sha256": "7188dda4f377c13084c004b9df5876ea187095a7ce09d6ff5c43436af2796b83" }, "downloads": -1, "filename": "plone.rest-1.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "48f9e3a5bb13ef079a386db4ebb80567", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 105691, "upload_time": "2021-02-20T08:03:11", "upload_time_iso_8601": "2021-02-20T08:03:11.929148Z", "url": "https://files.pythonhosted.org/packages/81/ec/b0565640a0e778ba067aa15c1acb80edd16c59183a182becb6d4a55fd9b2/plone.rest-1.6.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "280f133c776b2867426aa2c6139d894b", "sha256": "9566dc2c4b7bd2934dec2c95b8708ec8994d7265ec3dd36cd42abd90593710ae" }, "downloads": -1, "filename": "plone.rest-1.6.2.tar.gz", "has_sig": false, "md5_digest": "280f133c776b2867426aa2c6139d894b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105407, "upload_time": "2021-02-20T08:03:16", "upload_time_iso_8601": "2021-02-20T08:03:16.192873Z", "url": "https://files.pythonhosted.org/packages/26/8c/4c07349dfab31c1420de7d258daa1f11e053fc8f691512c603942a8c1359/plone.rest-1.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }