{ "info": { "author": "Bryan Davidson", "author_email": "bryan.davidson@rackspace.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Topic :: Internet :: Proxy Servers", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "CurryProxy\n==========\nA fast and performant proxy and aggregator for querying multiple instances of an API spread across globally distributed data centers.\n\n.. image:: https://travis-ci.org/rackerlabs/curryproxy.png\n :target: https://travis-ci.org/rackerlabs/curryproxy\n\nCapabilities\n------------\n- CurryProxy can handle multiple `routes `_ for use against different revisions of an API or for use against completely unrelated APIs. See `etc/routes.sample.json `_ for an example configuration.\n\n- Simple request forwarding (useful for preserving backwards compatability with pre-CurryProxy versions of an API hosted in a single datacenter)\n\n - Example: ``GET https://api.example.com/v1.0/foo/bar`` forwarded to ``GET https://1.api.example.com/v1.0/foo/bar``\n\n- Advanced request forwarding to multiple endpoints\n\n - Example: ``GET https://api.example.com/1,2/v1.0/foo/bar`` forwarded to the following:\n\n - ``GET https://1.api.example.com/v1.0/foo/bar``\n\n - ``GET https://2.api.example.com/v1.0/foo/bar``\n\n - Requests are made in parallel\n\n - JSON responses received from multiple endpoints are `aggregated `_ and returned to the client\n\n - Example: ``{\"foo\": 1}`` received from 1 and ``{\"bar\": 2}`` received from 2 are aggregated to ``[{\"foo\": 1}, {\"bar\": 2}]`` and returned to the client\n\n - Rich, meaningful `errors `_ logged *and* returned to the client when a proxied request fails\n\nInstallation\n------------\n- ``pip install curryproxy``\n- `Setup `_ the configuration files and start it up!\n\nLimitations\n-----------\n- Merging responses from multiple endpoints together occurs only under certain conditions outlined on the `Multiple Endpoints Aggregation `_ wiki page.\n\nRoadmap\n-------\n- OData support for server-side ordering and paging\n- Response caching for a specified time", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rackerlabs/curryproxy", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "curryproxy", "package_url": "https://pypi.org/project/curryproxy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/curryproxy/", "project_urls": { "Homepage": "https://github.com/rackerlabs/curryproxy" }, "release_url": "https://pypi.org/project/curryproxy/1.1.2/", "requires_dist": [ "grequests (==0.2.0)", "requests (==2.2.1)", "webob (==1.2.3)" ], "requires_python": "", "summary": "A proxy and aggregator for querying multiple instances of an API spread across globally distributed data centers.", "version": "1.1.2" }, "last_serial": 1826629, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "a30fb4b1519e33312b25d82cc7ec2320", "sha256": "b1d25e9175d104d9f1b2a6050bb29222df7f66724e34d962caaaea020e1b57dc" }, "downloads": -1, "filename": "curryproxy-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a30fb4b1519e33312b25d82cc7ec2320", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23876, "upload_time": "2013-07-15T15:55:58", "url": "https://files.pythonhosted.org/packages/60/99/4adbaa472f128856ead7e10825cdda1905c492c6bb048e1a53f9f2829e3c/curryproxy-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "7f8e23cb2607c30e249030ad25662c4c", "sha256": "c6a676da6204abe758d93ab5fd00218958a31d400fb30a36c73c63f3cfd10aed" }, "downloads": -1, "filename": "curryproxy-1.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "7f8e23cb2607c30e249030ad25662c4c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 70129, "upload_time": "2015-09-24T18:28:51", "url": "https://files.pythonhosted.org/packages/e5/dd/f8f1dade6ff2df1c55c4da88e84995dadb2533575a28f423fc0cb03b06da/curryproxy-1.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee4cb753d7d7b735543a0d9af701bb9c", "sha256": "c1f96c18f03e76633fcc5d199e50c99319631e06017287d4e4d992ba1f850e9f" }, "downloads": -1, "filename": "curryproxy-1.0.1.tar.gz", "has_sig": false, "md5_digest": "ee4cb753d7d7b735543a0d9af701bb9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24380, "upload_time": "2015-09-24T18:28:57", "url": "https://files.pythonhosted.org/packages/74/a1/36855c58fd1f245a91c9716d9dc210ac03ceec2f8ebfed6850278d78bcf6/curryproxy-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "4310a13391a9a97cee947a716b73fa1c", "sha256": "74b2fa0c83c322b1ec1c6eec43f314493bbe22e77f0ff31ab3076ae70c1c6c4f" }, "downloads": -1, "filename": "curryproxy-1.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "4310a13391a9a97cee947a716b73fa1c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 71316, "upload_time": "2015-11-02T14:04:21", "url": "https://files.pythonhosted.org/packages/cd/7f/5e3100baacdb7bcb84bbf95725772ce251d90df08f9d3091992eb7f23618/curryproxy-1.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d54461982b519860cc9b67f9bed412b1", "sha256": "c889c9df45cbce078cfcf4ebc421631f9f3b4fbcde4a940ab41a9869eb2de3c8" }, "downloads": -1, "filename": "curryproxy-1.0.2.tar.gz", "has_sig": false, "md5_digest": "d54461982b519860cc9b67f9bed412b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24809, "upload_time": "2015-11-02T14:04:37", "url": "https://files.pythonhosted.org/packages/8b/35/614392803d57109ad5f483b4827efa823972fa05ca62da7269f849e9009e/curryproxy-1.0.2.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "6b9214b92fc948aefb937473fb0b6b4c", "sha256": "0124b3d6c5f4575e467cde5dc66e6e9a55cf2ff5a0dbf5be7eec2c58de7fdf71" }, "downloads": -1, "filename": "curryproxy-1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "6b9214b92fc948aefb937473fb0b6b4c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 72720, "upload_time": "2015-11-17T20:23:23", "url": "https://files.pythonhosted.org/packages/2e/99/6fa718cfbed5e0e721148eda2927e065c061a8f906a72cacfa4c04fdec61/curryproxy-1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f5df0f53670c2535284607311febbbd", "sha256": "2d170a92982f23469e3f7ec8eebf96a7242b9669236a33c7294ba3cd5fbad8b7" }, "downloads": -1, "filename": "curryproxy-1.1.tar.gz", "has_sig": false, "md5_digest": "9f5df0f53670c2535284607311febbbd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25530, "upload_time": "2015-11-17T20:23:27", "url": "https://files.pythonhosted.org/packages/9d/d9/03744a9cb2cfa34ab3340d310afc0a3bbdb70971dc7c8410e966bfec2018/curryproxy-1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "dcb7620ce01ed88f1dbcf36e77151917", "sha256": "9e50db203bb8de1c6785557747af245217921e66e0063ce5700ac4e904eb8424" }, "downloads": -1, "filename": "curryproxy-1.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "dcb7620ce01ed88f1dbcf36e77151917", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 72779, "upload_time": "2015-11-20T21:19:33", "url": "https://files.pythonhosted.org/packages/3d/4f/45865519caff42122a672e694864be2da0ab53fdc81086614e8dfdc676d7/curryproxy-1.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "21a58758f3282aa669c868f011c063c9", "sha256": "1b965c65f8510c19693cdd36c3cc489f7055fe0b6637d176180f9067bff63970" }, "downloads": -1, "filename": "curryproxy-1.1.2.tar.gz", "has_sig": false, "md5_digest": "21a58758f3282aa669c868f011c063c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25591, "upload_time": "2015-11-20T21:19:39", "url": "https://files.pythonhosted.org/packages/5c/b0/bb3749d6f9cb57541d7521f4e8d136b4669fa5b1943463b22afa8194c12d/curryproxy-1.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dcb7620ce01ed88f1dbcf36e77151917", "sha256": "9e50db203bb8de1c6785557747af245217921e66e0063ce5700ac4e904eb8424" }, "downloads": -1, "filename": "curryproxy-1.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "dcb7620ce01ed88f1dbcf36e77151917", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 72779, "upload_time": "2015-11-20T21:19:33", "url": "https://files.pythonhosted.org/packages/3d/4f/45865519caff42122a672e694864be2da0ab53fdc81086614e8dfdc676d7/curryproxy-1.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "21a58758f3282aa669c868f011c063c9", "sha256": "1b965c65f8510c19693cdd36c3cc489f7055fe0b6637d176180f9067bff63970" }, "downloads": -1, "filename": "curryproxy-1.1.2.tar.gz", "has_sig": false, "md5_digest": "21a58758f3282aa669c868f011c063c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25591, "upload_time": "2015-11-20T21:19:39", "url": "https://files.pythonhosted.org/packages/5c/b0/bb3749d6f9cb57541d7521f4e8d136b4669fa5b1943463b22afa8194c12d/curryproxy-1.1.2.tar.gz" } ] }