{ "info": { "author": "OpenStack", "author_email": "openstack-dev@lists.openstack.org", "bugtrack_url": null, "classifiers": [ "Environment :: OpenStack", "Intended Audience :: Information Technology", "License :: OSI Approved :: Apache Software License", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "microversion_parse\n==================\n\nA small set of functions to manage OpenStack `microversion`_ headers that can\nbe used in middleware, application handlers and decorators to effectively\nmanage microversions.\n\nAlso included, in the ``middleware`` module, is a ``MicroversionMiddleware``\nthat will process incoming microversion headers.\n\nget_version\n-----------\n\nA simple parser for OpenStack microversion headers::\n\n import microversion_parse\n\n # headers is a dict of headers with folded (comma-separated\n # values) or a list of header, value tuples\n version = microversion_parse.get_version(\n headers, service_type='compute',\n legacy_headers=['x-openstack-nova-api-version'])\n\n # If headers are not already available, a dict of headers\n # can be extracted from the WSGI environ\n headers = microversion_parse.headers_from_wsgi_environ(environ)\n version = microversion_parse.get_version(\n headers, service_type='placement')\n\nIt processes microversion headers with the standard form::\n\n OpenStack-API-Version: compute 2.1\n\nIn that case, the response will be '2.1'.\n\nIf provided with a ``legacy_headers`` argument, this is treated as\na list of additional headers to check for microversions. Some examples of\nheaders include::\n\n OpenStack-telemetry-api-version: 2.1\n OpenStack-nova-api-version: 2.1\n X-OpenStack-nova-api-version: 2.1\n\nIf a version string cannot be found, ``None`` will be returned. If\nthe input is incorrect usual Python exceptions (ValueError,\nTypeError) are allowed to raise to the caller.\n\nparse_version_string\n--------------------\n\nA function to turn a version string into a ``Version``, a comparable\n``namedtuple``::\n\n version_tuple = microversion_parse.parse_version_string('2.1')\n\nIf the provided string is not a valid microversion string, ``TypeError``\nis raised.\n\nextract_version\n---------------\n\nCombines ``get_version`` and ``parse_version_string`` to find and validate\na microversion for a given service type in a collection of headers::\n\n version_tuple = microversion_parse.extract_version(\n headers, # a representation of headers, as accepted by get_version\n service_type, # service type identify to match in headers\n versions_list, # an ordered list of strings of version numbers that\n # are the valid versions presented by this service\n )\n\n``latest`` will be translated to whatever the max version is in versions_list.\n\nIf the found version is not in versions_list a ``ValueError`` is raised.\n\nNote that ``extract_version`` does not support ``legacy_headers``.\n\nMicroversionMiddleware\n----------------------\n\nA WSGI middleware that can wrap an application that needs to be microversion\naware. The application will get a WSGI environ with a\n'SERVICE_TYPE.microversion' key that has a value of the microversion found at\nan 'openstack-api-version' header that matches SERVICE_TYPE. If no header is\nfound, the minimum microversion will be set. If the special keyword 'latest' is\nused, the maximum microversion will be set.\n\nIf the requested microversion is not available a 406 response is returned.\n\nIf there is an error parsing a provided header, a 400 response is returned.\n\nOtherwise the application is called.\n\nThe middleware is configured when it is created. Three parameters are required:\n\napp\n The next WSGI middleware or application in the stack.\n\nservice_type\n The service type of the application, used to identify microversion headers.\n\nversions_list\n An ordered list of legitimate microversions (as strings) for the application.\n It's assumed that any application that is using microversions will have such\n a list for its own housekeeping and documentation.\n\nOne named parameter is optional:\n\njson_error_formatter\n A Webob error formatter that can be used to structure the response when JSON\n is expected.\n\nFor example::\n\n def app():\n app = middleware.MicroversionMiddleware(\n MyWSGIApp(), 'cats', ['1.0', '1.1', '1.2'])\n return app\n\n\n.. _microversion: http://specs.openstack.org/openstack/api-wg/guidelines/microversion_specification.html\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://www.openstack.org/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "microversion_parse", "package_url": "https://pypi.org/project/microversion_parse/", "platform": "", "project_url": "https://pypi.org/project/microversion_parse/", "project_urls": { "Homepage": "http://www.openstack.org/" }, "release_url": "https://pypi.org/project/microversion_parse/0.2.1/", "requires_dist": [ "WebOb (>=1.2.3)" ], "requires_python": "", "summary": "OpenStack microversion header parser", "version": "0.2.1" }, "last_serial": 3695161, "releases": { "0.0.1.dev2": [], "0.1.0": [ { "comment_text": "", "digests": { "md5": "1007cc568a9c8be7ead68963d5af5c42", "sha256": "0c606a750ccf207ded8c4a5aedb9cb319017198d3cfaa8966c0e336d2aa92c7e" }, "downloads": -1, "filename": "microversion_parse-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "1007cc568a9c8be7ead68963d5af5c42", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 6424, "upload_time": "2016-03-30T13:33:12", "url": "https://files.pythonhosted.org/packages/8f/78/5a64f9bd051a1d4a4ce583b31cedfb9480c3c735c97eb09631102686a6b4/microversion_parse-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a144e234f7f311d7e6a6ea08dd1de84", "sha256": "5ae3a58638fc58d7b31ab9965de8350802e4b137b0dcd4bef6239b612cc5c1f1" }, "downloads": -1, "filename": "microversion_parse-0.1.0.tar.gz", "has_sig": false, "md5_digest": "8a144e234f7f311d7e6a6ea08dd1de84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8637, "upload_time": "2016-03-24T13:27:46", "url": "https://files.pythonhosted.org/packages/4f/b2/8873786013a63546b94baf8856755be9da69f50cbac90807d077b63ddfb0/microversion_parse-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "4d5b9032302eb3766fff399a4cdc0b90", "sha256": "0ec601ae5ea7c32ad989bb045e41e5e7bc95a712f8710d520546b785d3b91108" }, "downloads": -1, "filename": "microversion_parse-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "4d5b9032302eb3766fff399a4cdc0b90", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 6428, "upload_time": "2016-03-30T13:33:33", "url": "https://files.pythonhosted.org/packages/e2/68/80327b632a1b16ca299fbd0f84699a6e0b8d473f1322b312a35fc7753ae9/microversion_parse-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ded53265cb01a55140883bc31a5e0399", "sha256": "2c44b7b52863cb722d2b862071712abcc6429e0e85aba688fc5bd8ccd7518448" }, "downloads": -1, "filename": "microversion_parse-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ded53265cb01a55140883bc31a5e0399", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8669, "upload_time": "2016-03-24T13:36:28", "url": "https://files.pythonhosted.org/packages/98/06/291bf8ea25385958dfcad60827b6a7e7ac5f701bba79ae12844291c0ae8f/microversion_parse-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "ba025854542b3009d0c8cd298d9b6c98", "sha256": "dd7065161bfab6e3afb8acea928e2d06d1113cbf8dbdba647dac14b5d69dec0c" }, "downloads": -1, "filename": "microversion_parse-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "ba025854542b3009d0c8cd298d9b6c98", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7633, "upload_time": "2016-03-31T17:33:24", "url": "https://files.pythonhosted.org/packages/5e/e9/312a2e337ef3c8a3a9f6c0da50a6f611f6c7aa26be9ff4e9a198da4a0179/microversion_parse-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a6ac9ed6d6efbc94c6fa555125b492a1", "sha256": "208b00bf0c7b2fce409ba3448d3367e0ac6c6e7c4d3c34e4334957493285ab93" }, "downloads": -1, "filename": "microversion_parse-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a6ac9ed6d6efbc94c6fa555125b492a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12722, "upload_time": "2016-03-31T17:33:30", "url": "https://files.pythonhosted.org/packages/38/a8/d1f965184f80edb78c809653e9137a8c5fbda138b10c9f3a01e3c40cf494/microversion_parse-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "3a79f65fa670801c2d0715451899c213", "sha256": "08b383070931cfbaa12322569645d38837a213f7d8c2c6df4242228e6bf8eff6" }, "downloads": -1, "filename": "microversion_parse-0.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "3a79f65fa670801c2d0715451899c213", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7590, "upload_time": "2016-04-11T17:57:00", "url": "https://files.pythonhosted.org/packages/ef/a6/66e0206b1e9c7356faafc12870e7280c248905524f2fba8c540fcb23048a/microversion_parse-0.1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9a519878d0fe29da4b1bce41c5eabb24", "sha256": "601859f22504fb9ca941bd5cad773ad8354d63561d316c41096d9c4c7f0dba79" }, "downloads": -1, "filename": "microversion_parse-0.1.3.tar.gz", "has_sig": false, "md5_digest": "9a519878d0fe29da4b1bce41c5eabb24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13291, "upload_time": "2016-04-11T17:57:16", "url": "https://files.pythonhosted.org/packages/1a/11/ee8024e8bd33ae3f7947453ae941f839cdf54d3442286f214046741a59d4/microversion_parse-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "b1ef611c8af4438894cf27753c7c28e1", "sha256": "1466c5a91870792f206a923c2c26b6bc5b132a291e76efb287e7e6f1dd4edbd9" }, "downloads": -1, "filename": "microversion_parse-0.1.4-py2-none-any.whl", "has_sig": false, "md5_digest": "b1ef611c8af4438894cf27753c7c28e1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7647, "upload_time": "2016-08-05T17:46:03", "url": "https://files.pythonhosted.org/packages/cd/c4/07276145a0a990c4918cf1de71a87937de2b1fa9d34a2f4a6ee3fdefcef0/microversion_parse-0.1.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d7f87025750d6962834c9a7128770d0", "sha256": "040558958b5a9db618b55c326c5cb15a59e21ae7a2754c7017ffc85015b2db7c" }, "downloads": -1, "filename": "microversion_parse-0.1.4.tar.gz", "has_sig": false, "md5_digest": "8d7f87025750d6962834c9a7128770d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12795, "upload_time": "2016-08-05T17:46:05", "url": "https://files.pythonhosted.org/packages/58/01/46079587391734d6ceb8ba7956c9a8e766c4e31d55b953dd872db703d182/microversion_parse-0.1.4.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "c643a9be78316bea2de0a74a938fadd3", "sha256": "df86bb015fa5c72b74a7e796001d3edefaea8eda3c3e59408d7412fb9a78a1c5" }, "downloads": -1, "filename": "microversion_parse-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "c643a9be78316bea2de0a74a938fadd3", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 17509, "upload_time": "2018-03-21T17:19:18", "url": "https://files.pythonhosted.org/packages/30/e6/acc0e343bb20b58141fc07eafa972828543dc1bff585e2812ff0c10895df/microversion_parse-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ab6c1888153c336dfc8af54e68a8f75", "sha256": "dfeb18fbba5c5346a564ce175018dedb6818e205b3afee2447ebcc11bc2f00c0" }, "downloads": -1, "filename": "microversion_parse-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ab6c1888153c336dfc8af54e68a8f75", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20156, "upload_time": "2018-03-21T17:19:22", "url": "https://files.pythonhosted.org/packages/0c/24/e099456bf5d9f3309aa18d6430c839672ef96f6458d7f3bd5d56497887a6/microversion_parse-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "e0633e7f878cb092db99f7ad893bc41f", "sha256": "ccaa417d02e1c0cdc5aa3a192541d1c3a416efa5b3dc21c8ddc41a5cc55333f2" }, "downloads": -1, "filename": "microversion_parse-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e0633e7f878cb092db99f7ad893bc41f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17517, "upload_time": "2018-03-22T12:27:35", "url": "https://files.pythonhosted.org/packages/36/f9/80cab06e1440691e8565a01da5b2e14d6e5d6be2769a1c2904b605096a69/microversion_parse-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b608e8dcff60b9c5b6d8830edb31b3d6", "sha256": "5ff172d5d5dbe039ed2c6fc2cb2c1d8887ad6e8738de115791a96b05dfcad15f" }, "downloads": -1, "filename": "microversion_parse-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b608e8dcff60b9c5b6d8830edb31b3d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20327, "upload_time": "2018-03-22T12:27:39", "url": "https://files.pythonhosted.org/packages/7e/ec/4dff77cbcad8e0d1ce151c7bf5a10e305e6c65ef067c0dc8dfa6db2c3206/microversion_parse-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e0633e7f878cb092db99f7ad893bc41f", "sha256": "ccaa417d02e1c0cdc5aa3a192541d1c3a416efa5b3dc21c8ddc41a5cc55333f2" }, "downloads": -1, "filename": "microversion_parse-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e0633e7f878cb092db99f7ad893bc41f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17517, "upload_time": "2018-03-22T12:27:35", "url": "https://files.pythonhosted.org/packages/36/f9/80cab06e1440691e8565a01da5b2e14d6e5d6be2769a1c2904b605096a69/microversion_parse-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b608e8dcff60b9c5b6d8830edb31b3d6", "sha256": "5ff172d5d5dbe039ed2c6fc2cb2c1d8887ad6e8738de115791a96b05dfcad15f" }, "downloads": -1, "filename": "microversion_parse-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b608e8dcff60b9c5b6d8830edb31b3d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20327, "upload_time": "2018-03-22T12:27:39", "url": "https://files.pythonhosted.org/packages/7e/ec/4dff77cbcad8e0d1ce151c7bf5a10e305e6c65ef067c0dc8dfa6db2c3206/microversion_parse-0.2.1.tar.gz" } ] }