Simple library for parsing OpenStack microversion headers.
Go to file
Chris Dent bd003b52a5 Provide a helper method to get headers from environ
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
2018-03-15 18:15:20 +00:00
doc/source Include README.rst content on doc index 2016-03-31 18:07:23 +01:00
microversion_parse Provide a helper method to get headers from environ 2018-03-15 18:15:20 +00:00
.gitignore Initial commit 2016-03-22 15:29:38 +00:00
.gitreview Enable gerrit, gitreview and gate testing 2016-03-31 12:31:20 +01:00
.testr.conf Initial proof of concept of microversion_parse 2016-03-22 17:48:42 +00:00
LICENSE Initial commit 2016-03-22 15:29:38 +00:00
Makefile allow tox to skip missing interpreters 2016-03-24 13:28:08 +00:00
README.rst Provide a helper method to get headers from environ 2018-03-15 18:15:20 +00:00
requirements.txt Initial proof of concept of microversion_parse 2016-03-22 17:48:42 +00:00
setup.cfg Fix summary information used in pypi display 2016-04-11 18:59:35 +01:00
setup.py Initial proof of concept of microversion_parse 2016-03-22 17:48:42 +00:00
test-requirements.txt Fix folded header checks for WebOb 2016-03-31 14:03:13 +01:00
tox.ini Enable gerrit, gitreview and gate testing 2016-03-31 12:31:20 +01:00

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.