~yolanda.robla/glance/precise-security

« back to all changes in this revision

Viewing changes to glance/util.py

  • Committer: Bazaar Package Importer
  • Author(s): Soren Hansen
  • Date: 2011-01-19 12:01:32 UTC
  • Revision ID: james.westby@ubuntu.com-20110119120132-uy3vi38a02yq967k
Tags: upstream-0.1.3pre~bzr39
ImportĀ upstreamĀ versionĀ 0.1.3pre~bzr39

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 
2
 
 
3
# Copyright 2010 OpenStack LLC.
 
4
# All Rights Reserved.
 
5
#
 
6
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 
7
#    not use this file except in compliance with the License. You may obtain
 
8
#    a copy of the License at
 
9
#
 
10
#         http://www.apache.org/licenses/LICENSE-2.0
 
11
#
 
12
#    Unless required by applicable law or agreed to in writing, software
 
13
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
14
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
15
#    License for the specific language governing permissions and limitations
 
16
#    under the License.
 
17
 
 
18
"""
 
19
A few utility routines used throughout Glance
 
20
"""
 
21
 
 
22
 
 
23
def image_meta_to_http_headers(image_meta):
 
24
    """
 
25
    Returns a set of image metadata into a dict
 
26
    of HTTP headers that can be fed to either a Webob
 
27
    Request object or an httplib.HTTP(S)Connection object
 
28
 
 
29
    :param image_meta: Mapping of image metadata
 
30
    """
 
31
    headers = {}
 
32
    for k, v in image_meta.items():
 
33
        if k == 'properties':
 
34
            for pk, pv in v.items():
 
35
                headers["x-image-meta-property-%s"
 
36
                        % pk.lower()] = pv
 
37
 
 
38
        headers["x-image-meta-%s" % k.lower()] = v
 
39
    return headers
 
40
 
 
41
 
 
42
def inject_image_meta_into_headers(response, image_meta):
 
43
    """
 
44
    Given a response and mapping of image metadata, injects
 
45
    the Response with a set of HTTP headers for the image
 
46
    metadata. Each main image metadata field is injected
 
47
    as a HTTP header with key 'x-image-meta-<FIELD>' except
 
48
    for the properties field, which is further broken out
 
49
    into a set of 'x-image-meta-property-<KEY>' headers
 
50
 
 
51
    :param response: The Webob Response object
 
52
    :param image_meta: Mapping of image metadata
 
53
    """
 
54
    headers = image_meta_to_http_headers(image_meta)
 
55
 
 
56
    for k, v in headers.items():
 
57
        response.headers.add(k, v)
 
58
 
 
59
 
 
60
def get_image_meta_from_headers(response):
 
61
    """
 
62
    Processes HTTP headers from a supplied response that
 
63
    match the x-image-meta and x-image-meta-property and
 
64
    returns a mapping of image metadata and properties
 
65
 
 
66
    :param response: Response to process
 
67
    """
 
68
    result = {}
 
69
    properties = {}
 
70
 
 
71
    if hasattr(response, 'getheaders'):  # httplib.HTTPResponse
 
72
        headers = response.getheaders()
 
73
    else:  # webob.Response
 
74
        headers = response.headers.items()
 
75
 
 
76
    for key, value in headers:
 
77
        key = str(key.lower())
 
78
        if key.startswith('x-image-meta-property-'):
 
79
            properties[key[len('x-image-meta-property-'):]] = value
 
80
        if key.startswith('x-image-meta-'):
 
81
            field_name = key[len('x-image-meta-'):].replace('-', '_')
 
82
            result[field_name] = value
 
83
    result['properties'] = properties
 
84
    return result