{ "info": { "author": "Jacek Furmankiewicz", "author_email": "jacek99@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Twisted REST micro-framework\n================================\n\nBased on *Flask* API, with plans for integrated multiprocessing support for full usage of all CPUs. \nProvides a more Flask/Sinatra-style API on top of the core *twisted.web* APIs.\nIntegrates FormEncode for path, form and query argument validation.\n\nAn example of a multi--module twisted.web CorePost REST application\nwhich exposes two separate REST services (for a Customer and Customer Address entities):\n\n::\n\n class CustomerRESTService():\n path = \"/customer\"\n \n @route(\"/\")\n def getAll(self,request):\n return DB.getAllCustomers()\n \n @route(\"/\")\n def get(self,request,customerId):\n return DB.getCustomer(customerId)\n \n @route(\"/\",Http.POST)\n def post(self,request,customerId,firstName,lastName):\n customer = Customer(customerId, firstName, lastName)\n DB.saveCustomer(customer)\n return Response(201)\n \n @route(\"/\",Http.PUT) \n def put(self,request,customerId,firstName,lastName):\n c = DB.getCustomer(customerId)\n (c.firstName,c.lastName) = (firstName,lastName)\n return Response(200)\n \n @route(\"/\",Http.DELETE)\n def delete(self,request,customerId):\n DB.deleteCustomer(customerId)\n return Response(200)\n \n @route(\"/\",Http.DELETE)\n def deleteAll(self,request):\n DB.deleteAllCustomers()\n return Response(200)\n \n class CustomerAddressRESTService():\n path = \"/customer//address\"\n \n @route(\"/\")\n def getAll(self,request,customerId):\n return DB.getCustomer(customerId).addresses\n \n @route(\"/\")\n def get(self,request,customerId,addressId):\n return DB.getCustomerAddress(customerId, addressId)\n \n @route(\"/\",Http.POST)\n def post(self,request,customerId,addressId,streetNumber,streetName,stateCode,countryCode):\n c = DB.getCustomer(customerId)\n address = CustomerAddress(streetNumber,streetName,stateCode,countryCode)\n c.addresses[addressId] = address\n return Response(201)\n \n @route(\"/\",Http.PUT) \n def put(self,request,customerId,addressId,streetNumber,streetName,stateCode,countryCode):\n address = DB.getCustomerAddress(customerId, addressId)\n (address.streetNumber,address.streetName,address.stateCode,address.countryCode) = (streetNumber,streetName,stateCode,countryCode)\n return Response(200)\n \n @route(\"/\",Http.DELETE)\n def delete(self,request,customerId,addressId):\n DB.getCustomerAddress(customerId, addressId) #validate address exists\n del(DB.getCustomer(customerId).addresses[addressId])\n return Response(200)\n \n @route(\"/\",Http.DELETE)\n def deleteAll(self,request,customerId):\n c = DB.getCustomer(customerId)\n c.addresses = {}\n return Response(200)\n \n \n def run_rest_app():\n app = RESTResource((CustomerRESTService(),CustomerAddressRESTService()))\n app.run(8080)\n \n if __name__ == \"__main__\":\n run_rest_app()\n\nAnd the BDD showing off its different features\n\nhttps://github.com/jacek99/corepost/blob/master/corepost/test/feature/rest_app.feature\n\nLinks\n`````\n\n* `Website `_\n* `Twisted `_\n* `FormEncode `_\n\nChangelog\n`````````\n* 0.0.16:\n - minor bug fix for issue #4 (serializing object graphs to XML), removed Jinja2 as dependency:\n https://github.com/jacek99/corepost/issues/4\n* 0.0.15:\n - minor bug fixes in auto-converting responses to JSON and parsing arguments/paths with unexpectec characters\n* 0.0.14:\n - automatic parsing of query, form, JSON, YAML and XML arguments: \n http://jacek99.github.com/corepost/argument_parsing.html\n* 0.0.13:\n - perf fix to avoid unnecessary string concatenation when doing URL routing, after code review (thanks to Gerald Tremblay) \n* 0.0.12:\n - backwards incompatible change: added advanced URL routing for nested REST services.\n CorePost object is gone, REST services are now just standard classes.\n They get wrapped in a RESTResource object (see sample above) when exposed\n* 0.0.11:\n - added support for request/response filters\n* 0.0.10:\n - removed dependency on txZMQ which was not needed at this point (yet)\n* 0.0.9:\n - fix for issue #3 (wrong class passes as 'self' to router method): \n https://github.com/jacek99/corepost/issues/3 \n* 0.0.8:\n - support for serializing of classes to JSON,XML,YAML based on caller's Accept header\n - separate routing functionality from CorePost Resource object, in preparation for future multicore support\n* 0.0.7:\n - automatic parsing of incoming content (JSON, YAML, XML)\n - routing by incoming content type\n - automatic response conversion based on caller's Accept header (JSON/YAML\n - support for defer.returnValue() in @inlineCallbacks route methods\n* 0.0.6 - redesigned API around classes and methods, rather than functions and global objects (after feedback from Twisted devs)\n* 0.0.5 - added FormEncode validation for arguments\n* 0.0.4 - path argument extraction, mandatory argument error checking", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jacek99/corepost", "keywords": "twisted rest flask sinatra get post put delete web", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "CorePost", "package_url": "https://pypi.org/project/CorePost/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/CorePost/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/jacek99/corepost" }, "release_url": "https://pypi.org/project/CorePost/0.0.16/", "requires_dist": null, "requires_python": null, "summary": "A Twisted Web REST micro-framework", "version": "0.0.16" }, "last_serial": 784021, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "19bca47ad273387c10fd6b3f32615599", "sha256": "8ca132948f30a4d317b4d9d475681aab82f0a906f6b90311c20836fe17d2cacb" }, "downloads": -1, "filename": "CorePost-0.0.1-py2.7.egg", "has_sig": false, "md5_digest": "19bca47ad273387c10fd6b3f32615599", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 9243, "upload_time": "2011-08-25T19:10:17", "url": "https://files.pythonhosted.org/packages/ee/d2/f3889082588f953bfe550fac08d81d872ec982b0fc9a61fb1e794e0e1752/CorePost-0.0.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "7a6bcce2e2aa14572e1d66cd462662d7", "sha256": "3e8c7eebef3e70a189d3e05b560a41b37da9122c76172961abf971c474987986" }, "downloads": -1, "filename": "CorePost-0.0.1.tar.gz", "has_sig": false, "md5_digest": "7a6bcce2e2aa14572e1d66cd462662d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4575, "upload_time": "2011-08-25T21:22:53", "url": "https://files.pythonhosted.org/packages/46/86/4d7cc263aeae66055758c43779bcee3d374997e371c1e3f69b6374d4496a/CorePost-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "63388e570476548605838850a9b264f8", "sha256": "36c3d2f39859771fbd281ac1eb1096b5da6951bc52598910e4ceea7910589db7" }, "downloads": -1, "filename": "CorePost-0.0.10.tar.gz", "has_sig": false, "md5_digest": "63388e570476548605838850a9b264f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8526, "upload_time": "2012-02-14T18:38:17", "url": "https://files.pythonhosted.org/packages/39/16/3a57091b1c7355f56fe1e7b6e9b28aebfb76af725ac098bb4f65d721bbb3/CorePost-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "9e0463e50b24cd766b2af481b640cab6", "sha256": "6d175412a65d54ea6b3fe5d896e685dfa72099a3644a90a1e7ca84b73d259943" }, "downloads": -1, "filename": "CorePost-0.0.11.tar.gz", "has_sig": false, "md5_digest": "9e0463e50b24cd766b2af481b640cab6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8998, "upload_time": "2012-02-22T18:43:02", "url": "https://files.pythonhosted.org/packages/ba/60/550d2f216462d666af4ec31f3707f94a0b575ae65f189e80159fbf0d7620/CorePost-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "f4f67b69bfdb84f2225603131e7a880d", "sha256": "a0b1a42dbb2173bf2e6d15f73e18481e62a317161c6e500e96210cc349d072b1" }, "downloads": -1, "filename": "CorePost-0.0.12.tar.gz", "has_sig": false, "md5_digest": "f4f67b69bfdb84f2225603131e7a880d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12411, "upload_time": "2012-03-05T02:51:18", "url": "https://files.pythonhosted.org/packages/8f/87/0230c0b10d800111cc4b3dc723efbbddc5cebc42992f3a9b7cbec89b0986/CorePost-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "9d3de288f327fd0549f33b64f52f53e3", "sha256": "b18b1daa0593f9287d2764c082c0d44ee5cd5875eba86d3cbd922830d2103174" }, "downloads": -1, "filename": "CorePost-0.0.13.tar.gz", "has_sig": false, "md5_digest": "9d3de288f327fd0549f33b64f52f53e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11093, "upload_time": "2012-03-05T18:47:30", "url": "https://files.pythonhosted.org/packages/f5/3f/6935e9613c4e48e68ccd2cbbba4c7a1212b998e5dafeb28984e72267a3cc/CorePost-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "c0fc909898ea1db52abf7e594be0db4f", "sha256": "72b717cb52534128df1c54cdfa7394969d3143324cf691a09c4d832185ef463c" }, "downloads": -1, "filename": "CorePost-0.0.14.tar.gz", "has_sig": false, "md5_digest": "c0fc909898ea1db52abf7e594be0db4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11888, "upload_time": "2012-03-19T20:09:44", "url": "https://files.pythonhosted.org/packages/9d/79/8adac58b5b39c34392cf3bec6d07b31b59ccc0fcc26f658c00a4a1910918/CorePost-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "aa6fb706dcfa6bce2c6f1372bf409a53", "sha256": "abb42b6afa9ac260f126b32b9d3ec168d9bb3f9c01b1291e8ebabb690499fbf6" }, "downloads": -1, "filename": "CorePost-0.0.15.tar.gz", "has_sig": false, "md5_digest": "aa6fb706dcfa6bce2c6f1372bf409a53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12110, "upload_time": "2012-03-23T21:55:07", "url": "https://files.pythonhosted.org/packages/99/e5/1dd8143c32173f02c5c0595c288af10f28e091609317c51753d6fbc81845/CorePost-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "e505612363eaba0e807f31a9bcf9b2da", "sha256": "bec43025ad28b3b821af899dd62c721312f35848bd116a21d386db3d5bfec139" }, "downloads": -1, "filename": "CorePost-0.0.16.tar.gz", "has_sig": false, "md5_digest": "e505612363eaba0e807f31a9bcf9b2da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11918, "upload_time": "2012-04-17T19:07:45", "url": "https://files.pythonhosted.org/packages/72/d3/e9bee9ad89471a91692587d51d493d8e6f768c29077436cc6f1e67ec0038/CorePost-0.0.16.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "4e6e0a1463d2a86aded0d2cd20322a9f", "sha256": "1bfd06e8c6425c86b3315134779aa0810c9dc97116f5e772d63b49f87d28c3b9" }, "downloads": -1, "filename": "CorePost-0.0.2-py2.7.egg", "has_sig": false, "md5_digest": "4e6e0a1463d2a86aded0d2cd20322a9f", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 9556, "upload_time": "2011-08-30T04:43:39", "url": "https://files.pythonhosted.org/packages/61/ee/1bd6648dc780b1402bb37a7b9aab63bdb72e532b449378aa1799a7b1f647/CorePost-0.0.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "ac55f6db58a2b497c9c21336e33ac11b", "sha256": "1069acec76c00a2a26034aefad115c3caa448c4e3801f4711c740affbb286a21" }, "downloads": -1, "filename": "CorePost-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ac55f6db58a2b497c9c21336e33ac11b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4733, "upload_time": "2011-08-30T04:35:22", "url": "https://files.pythonhosted.org/packages/3f/2d/e93014e22e217b388952ae6030a744cbde8a5d3cfa5534536add70f91eed/CorePost-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "27f9f96e0f8ce901650d893e8ddee86c", "sha256": "098a0de3c8f775bc74945dc0125e66a962ec5aa4e1410cf8eadd29d726fccacb" }, "downloads": -1, "filename": "CorePost-0.0.3-py2.7.egg", "has_sig": false, "md5_digest": "27f9f96e0f8ce901650d893e8ddee86c", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 10228, "upload_time": "2011-08-30T23:17:41", "url": "https://files.pythonhosted.org/packages/11/f2/392f4fe6e318e9d792c82d214c67660e730dc0bcfb9941ff35e28a9c6e63/CorePost-0.0.3-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "febff10395605d419a5d89d991be2e59", "sha256": "20f70c435090dd0ceecdc198a25218dca059c46956b63cd31599f26ed147b7ab" }, "downloads": -1, "filename": "CorePost-0.0.3.tar.gz", "has_sig": false, "md5_digest": "febff10395605d419a5d89d991be2e59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5396, "upload_time": "2011-08-30T23:17:50", "url": "https://files.pythonhosted.org/packages/ee/54/a621043e1aa231b941b23c8ae849ca89108c898f172cf8a440b35cdfd380/CorePost-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "8e3b10ce77a3d9d9f75dcb54de64d470", "sha256": "e042b46245ec6f0941231495117954803415544c0d20188fdc6cc799d661f931" }, "downloads": -1, "filename": "CorePost-0.0.4.tar.gz", "has_sig": false, "md5_digest": "8e3b10ce77a3d9d9f75dcb54de64d470", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5135, "upload_time": "2011-09-02T18:47:50", "url": "https://files.pythonhosted.org/packages/70/d0/d132747b2fedcd9def9043a87b77f5cbee3523471554038cc1f528f47cd1/CorePost-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "1f0507c4a524caacc53c5325c604e3e3", "sha256": "bc61b47b73c331d6d14e76b8cef88487355c21f11a474d9f550a92d6a78b412f" }, "downloads": -1, "filename": "CorePost-0.0.5.tar.gz", "has_sig": false, "md5_digest": "1f0507c4a524caacc53c5325c604e3e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5590, "upload_time": "2011-09-04T05:12:41", "url": "https://files.pythonhosted.org/packages/a9/4f/49a961256659a588d854f903585aaa1946bc8aa2c849a2918101e4aa555d/CorePost-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "30b53f881dff65614a1dd71f25a9a3db", "sha256": "4ddbc71499066309f0e1f4cf834d66f3639b73b555ad884d43a84f43d2815841" }, "downloads": -1, "filename": "CorePost-0.0.6.tar.gz", "has_sig": false, "md5_digest": "30b53f881dff65614a1dd71f25a9a3db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5860, "upload_time": "2011-09-05T19:44:18", "url": "https://files.pythonhosted.org/packages/2f/d4/6cae427523b0c941785862b17a0517d054c6689d9aac7988e91ed4bce5a8/CorePost-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "4492f73315d571350844cf73b9c3db5f", "sha256": "2487612f7489376876102c43b9c404cab88a480a0a46e74077818ec37eb35c2d" }, "downloads": -1, "filename": "CorePost-0.0.7.tar.gz", "has_sig": false, "md5_digest": "4492f73315d571350844cf73b9c3db5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7232, "upload_time": "2011-09-29T23:32:07", "url": "https://files.pythonhosted.org/packages/5b/e3/68f15dc2d3af4cb01d825b595464df568124be7351fd8df1c1abf179226b/CorePost-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "94acf5150fd2f2e92c3a9e29df680955", "sha256": "9bd6da67c1c7a236e45389925acaaee1ad9ea81b106e70c8535adb4fb77bf2b4" }, "downloads": -1, "filename": "CorePost-0.0.8.tar.gz", "has_sig": false, "md5_digest": "94acf5150fd2f2e92c3a9e29df680955", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8955, "upload_time": "2011-11-21T19:56:04", "url": "https://files.pythonhosted.org/packages/dc/ed/c1615930f01732f81e2c593c32a61768d88676e9784731ade55c3b12ae90/CorePost-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "ba54febbd8daacadd65a832c67a5bd62", "sha256": "2f0137482893ab24d02ac098c488de9bcfdf01e483b49a50ce2d96c3f508b969" }, "downloads": -1, "filename": "CorePost-0.0.9.tar.gz", "has_sig": false, "md5_digest": "ba54febbd8daacadd65a832c67a5bd62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8487, "upload_time": "2012-02-14T18:33:58", "url": "https://files.pythonhosted.org/packages/aa/94/1b56ea81c94bc646ec95307b0580f66e5092bf04125389569d90b614c9cf/CorePost-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e505612363eaba0e807f31a9bcf9b2da", "sha256": "bec43025ad28b3b821af899dd62c721312f35848bd116a21d386db3d5bfec139" }, "downloads": -1, "filename": "CorePost-0.0.16.tar.gz", "has_sig": false, "md5_digest": "e505612363eaba0e807f31a9bcf9b2da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11918, "upload_time": "2012-04-17T19:07:45", "url": "https://files.pythonhosted.org/packages/72/d3/e9bee9ad89471a91692587d51d493d8e6f768c29077436cc6f1e67ec0038/CorePost-0.0.16.tar.gz" } ] }