bd003b52a5
The get_version method accepts a dict or list of tuples that represent HTTP request headers that will be processed to find a microversion header. Sometimes, for example in some middlewares, direct access to a headers dict will not be available and only the WSGI environ will be present. This change provides a utility method which creates a new dict of headers: headers_from_wsgi_environ. This mode was chosen to make it clear that a copy of the environ is being made, not the environ itself as we really don't want to be passing that as some values in it will not be simple objects (strings and numbers) and we do not know what other middleware might have done or want to do with it. Internal to get_version any attempt to get a header named 'FOO' will fall back to looking for the WSGI equivalent of 'HTTP_FOO'. README.rst has been updated to indicate the new style. This change is backwards compatible, existing clients will not notice. Change-Id: I5262031d9cde0378eabe342c1913091658c3bf9b Closes-Bug: #1579772 |
||
---|---|---|
doc/source | ||
microversion_parse | ||
.gitignore | ||
.gitreview | ||
.testr.conf | ||
LICENSE | ||
Makefile | ||
README.rst | ||
requirements.txt | ||
setup.cfg | ||
setup.py | ||
test-requirements.txt | ||
tox.ini |
README.rst
microversion_parse
A simple parser for OpenStack microversion headers:
import microversion_parse
# headers is a dict of headers with folded (comma-separated
# values) or a list of header, value tuples
version = microversion_parse.get_version(
headers, service_type='compute',
legacy_headers=['x-openstack-nova-api-version'])
# If headers are not already available, a dict of headers
# can be extracted from the WSGI environ
headers = microversion_parse.headers_from_wsgi_environ(environ)
version = microversion_parse.get_version(
headers, service_type='placement')
It processes microversion headers with the standard form:
OpenStack-API-Version: compute 2.1
If provided with a legacy_headers
argument, this is
treated as a list of headers to check for microversions. Some examples
of headers include:
OpenStack-telemetry-api-version: 2.1
OpenStack-nova-api-version: 2.1
X-OpenStack-nova-api-version: 2.1
If a version string cannot be found, None
will be
returned. If the input is incorrect usual Python exceptions (ValueError,
TypeError) are allowed to raise to the caller.