diff options
author | Jay Pipes <jaypipes@gmail.com> | 2011-07-26 12:51:10 -0400 |
---|---|---|
committer | Jay Pipes <jaypipes@gmail.com> | 2011-07-26 12:51:10 -0400 |
commit | 02fb917da8a42b38720ebe31c4d40b180b00d632 (patch) | |
tree | 6d33008ac411591ae1d72b31107bc075268512d5 /openstack | |
parent | 17df9cafa7479a56aba31c2377d1b5126e0b6b8b (diff) | |
download | oslo-02fb917da8a42b38720ebe31c4d40b180b00d632.tar.gz oslo-02fb917da8a42b38720ebe31c4d40b180b00d632.tar.xz oslo-02fb917da8a42b38720ebe31c4d40b180b00d632.zip |
Add some more generic middleware, request context, utils, and versioning. Add basic template for server binary
Diffstat (limited to 'openstack')
-rw-r--r-- | openstack/common/context.py | 40 | ||||
-rw-r--r-- | openstack/common/middleware/__init__.py | 0 | ||||
-rw-r--r-- | openstack/common/middleware/context.py | 64 | ||||
-rw-r--r-- | openstack/common/utils.py | 96 |
4 files changed, 200 insertions, 0 deletions
diff --git a/openstack/common/context.py b/openstack/common/context.py new file mode 100644 index 0000000..a9a16f8 --- /dev/null +++ b/openstack/common/context.py @@ -0,0 +1,40 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 OpenStack LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Simple class that stores security context information in the web request. + +Projects should subclass this class if they wish to enhance the request +context or provide additional information in their specific WSGI pipeline. +""" + + +class RequestContext(object): + + """ + Stores information about the security context under which the user + accesses the system, as well as additional request information. + """ + + def __init__(self, auth_tok=None, user=None, tenant=None, is_admin=False, + read_only=False, show_deleted=False): + self.auth_tok = auth_tok + self.user = user + self.tenant = tenant + self.is_admin = is_admin + self.read_only = read_only + self.show_deleted = show_deleted diff --git a/openstack/common/middleware/__init__.py b/openstack/common/middleware/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/openstack/common/middleware/__init__.py diff --git a/openstack/common/middleware/context.py b/openstack/common/middleware/context.py new file mode 100644 index 0000000..be7dafe --- /dev/null +++ b/openstack/common/middleware/context.py @@ -0,0 +1,64 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 OpenStack LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Middleware that attaches a context to the WSGI request +""" + +from openstack.common import utils +from openstack.common import wsgi +from openstack.common import context + + +class ContextMiddleware(wsgi.Middleware): + def __init__(self, app, options): + self.options = options + super(ContextMiddleware, self).__init__(app) + + def make_context(self, *args, **kwargs): + """ + Create a context with the given arguments. + """ + + # Determine the context class to use + ctxcls = context.RequestContext + if 'context_class' in self.options: + ctxcls = utils.import_class(self.options['context_class']) + + return ctxcls(*args, **kwargs) + + def process_request(self, req): + """ + Extract any authentication information in the request and + construct an appropriate context from it. + """ + # Use the default empty context, with admin turned on for + # backwards compatibility + req.context = self.make_context(is_admin=True) + + +def filter_factory(global_conf, **local_conf): + """ + Factory method for paste.deploy + """ + conf = global_conf.copy() + conf.update(local_conf) + + def filter(app): + return ContextMiddleware(app, conf) + + return filter diff --git a/openstack/common/utils.py b/openstack/common/utils.py new file mode 100644 index 0000000..45c622e --- /dev/null +++ b/openstack/common/utils.py @@ -0,0 +1,96 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 OpenStack LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +System-level utilities and helper functions. +""" + +import datetime +import inspect +import logging +import os +import random +import subprocess +import socket +import sys + +from glance.common import exception +from glance.common.exception import ProcessExecutionError + + +TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ" + + +def int_from_bool_as_string(subject): + """ + Interpret a string as a boolean and return either 1 or 0. + + Any string value in: + ('True', 'true', 'On', 'on', '1') + is interpreted as a boolean True. + + Useful for JSON-decoded stuff and config file parsing + """ + return bool_from_string(subject) and 1 or 0 + + +def bool_from_string(subject): + """ + Interpret a string as a boolean. + + Any string value in: + ('True', 'true', 'On', 'on', '1') + is interpreted as a boolean True. + + Useful for JSON-decoded stuff and config file parsing + """ + if type(subject) == type(bool): + return subject + if hasattr(subject, 'startswith'): # str or unicode... + if subject.strip().lower() in ('true', 'on', '1'): + return True + return False + + +def import_class(import_str): + """Returns a class from a string including module and class""" + mod_str, _sep, class_str = import_str.rpartition('.') + try: + __import__(mod_str) + return getattr(sys.modules[mod_str], class_str) + except (ImportError, ValueError, AttributeError): + raise exception.NotFound('Class %s cannot be found' % class_str) + + +def import_object(import_str): + """Returns an object including a module or module and class""" + try: + __import__(import_str) + return sys.modules[import_str] + except ImportError: + cls = import_class(import_str) + return cls() + + +def isotime(at=None): + if not at: + at = datetime.datetime.utcnow() + return at.strftime(TIME_FORMAT) + + +def parse_isotime(timestr): + return datetime.datetime.strptime(timestr, TIME_FORMAT) |