microversion_parse
A small set of functions to manage OpenStack microversion headers that can be used in middleware, application handlers and decorators to effectively manage microversions.
Also included, in the middleware module, is a MicroversionMiddleware that will process incoming microversion headers.
get_version
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
In that case, the response will be ‘2.1’.
If provided with a legacy_headers argument, this is treated as a list of additional 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.
parse_version_string
A function to turn a version string into a Version, a comparable namedtuple:
version_tuple = microversion_parse.parse_version_string('2.1')
If the provided string is not a valid microversion string, TypeError is raised.
extract_version
Combines get_version and parse_version_string to find and validate a microversion for a given service type in a collection of headers:
version_tuple = microversion_parse.extract_version(
headers, # a representation of headers, as accepted by get_version
service_type, # service type identify to match in headers
versions_list, # an ordered list of strings of version numbers that
# are the valid versions presented by this service
)
latest will be translated to whatever the max version is in versions_list.
If the found version is not in versions_list a ValueError is raised.
Note that extract_version does not support legacy_headers.
MicroversionMiddleware
A WSGI middleware that can wrap an application that needs to be microversion aware. The application will get a WSGI environ with a ‘SERVICE_TYPE.microversion’ key that has a value of the microversion found at an ‘openstack-api-version’ header that matches SERVICE_TYPE. If no header is found, the minimum microversion will be set. If the special keyword ‘latest’ is used, the maximum microversion will be set.
If the requested microversion is not available a 406 response is returned.
If there is an error parsing a provided header, a 400 response is returned.
Otherwise the application is called.
The middleware is configured when it is created. Three parameters are required:
- app
The next WSGI middleware or application in the stack.
- service_type
The service type of the application, used to identify microversion headers.
- versions_list
An ordered list of legitimate microversions (as strings) for the application. It’s assumed that any application that is using microversions will have such a list for its own housekeeping and documentation.
One named parameter is optional:
- json_error_formatter
A Webob error formatter that can be used to structure the response when JSON is expected.
For example:
def app():
app = middleware.MicroversionMiddleware(
MyWSGIApp(), 'cats', ['1.0', '1.1', '1.2'])
return app
Metadata
Release files for microversion-parse 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| microversion_parse-1.0.0.tar.gz | 19.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| microversion_parse-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.5 kB
Release files / microversion_parse-1.0.0.tar.gz
| Download URL | microversion_parse-1.0.0.tar.gz |
|---|---|
| Size | 19.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c04ee36f14b9eea21134909f46b1d482216991a8ba6f5325941fd40a71784d93
|
|
BLAKE2b-256 checksum How to use checksums |
fc43f19cf3a0206d3f345640e6155f593066aa45f75327fc381848ac1d720224
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.19.1 setuptools/20.7.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.5.2
|
Release files / microversion_parse-1.0.0-py3-none-any.whl
| Download URL | microversion_parse-1.0.0-py3-none-any.whl |
|---|---|
| Size | 19.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1e871a2ed17d44bbd33a0ea1a46aef64ef6fd872b873a08a6d92d81115f1a17d
|
|
BLAKE2b-256 checksum How to use checksums |
a234853321b8b792c2aa8862238ee9227bd31ee46c59030caacd418dd899f4e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.19.1 setuptools/20.7.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.5.2
|
Security for microversion-parse 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.