summaryrefslogtreecommitdiffstats
path: root/openstack/common/utils.py
diff options
context:
space:
mode:
authorJay Pipes <jaypipes@gmail.com>2011-07-26 12:51:10 -0400
committerJay Pipes <jaypipes@gmail.com>2011-07-26 12:51:10 -0400
commit02fb917da8a42b38720ebe31c4d40b180b00d632 (patch)
tree6d33008ac411591ae1d72b31107bc075268512d5 /openstack/common/utils.py
parent17df9cafa7479a56aba31c2377d1b5126e0b6b8b (diff)
downloadoslo-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/common/utils.py')
-rw-r--r--openstack/common/utils.py96
1 files changed, 96 insertions, 0 deletions
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)