Updates latest OSLO changes

Change-Id: Ief4a24a620b798bf8ece393e90c292c8121ae280
This commit is contained in:
Gary Kotton 2013-03-11 06:45:02 +00:00
parent c0aa3128fc
commit bd687a7c38
4 changed files with 51 additions and 29 deletions

View File

@ -37,9 +37,9 @@ class RequestContext(object):
accesses the system, as well as additional request information. accesses the system, as well as additional request information.
""" """
def __init__(self, auth_tok=None, user=None, tenant=None, is_admin=False, def __init__(self, auth_token=None, user=None, tenant=None, is_admin=False,
read_only=False, show_deleted=False, request_id=None): read_only=False, show_deleted=False, request_id=None):
self.auth_tok = auth_tok self.auth_token = auth_token
self.user = user self.user = user
self.tenant = tenant self.tenant = tenant
self.is_admin = is_admin self.is_admin = is_admin
@ -55,7 +55,7 @@ class RequestContext(object):
'is_admin': self.is_admin, 'is_admin': self.is_admin,
'read_only': self.read_only, 'read_only': self.read_only,
'show_deleted': self.show_deleted, 'show_deleted': self.show_deleted,
'auth_token': self.auth_tok, 'auth_token': self.auth_token,
'request_id': self.request_id} 'request_id': self.request_id}

View File

@ -38,14 +38,10 @@ import functools
import inspect import inspect
import itertools import itertools
import json import json
import logging
import xmlrpclib import xmlrpclib
from quantum.openstack.common.gettextutils import _
from quantum.openstack.common import timeutils from quantum.openstack.common import timeutils
LOG = logging.getLogger(__name__)
def to_primitive(value, convert_instances=False, convert_datetime=True, def to_primitive(value, convert_instances=False, convert_datetime=True,
level=0, max_depth=3): level=0, max_depth=3):
@ -85,8 +81,6 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
return 'mock' return 'mock'
if level > max_depth: if level > max_depth:
LOG.error(_('Max serialization depth exceeded on object: %d %s'),
level, value)
return '?' return '?'
# The try block may not be necessary after the class check above, # The try block may not be necessary after the class check above,

View File

@ -43,6 +43,11 @@ def parse_mailmap(mailmap='.mailmap'):
return mapping return mapping
def _parse_git_mailmap(git_dir, mailmap='.mailmap'):
mailmap = os.path.join(os.path.dirname(git_dir), mailmap)
return parse_mailmap(mailmap)
def canonicalize_emails(changelog, mapping): def canonicalize_emails(changelog, mapping):
"""Takes in a string and an email alias mapping and replaces all """Takes in a string and an email alias mapping and replaces all
instances of the aliases in the string with their real email. instances of the aliases in the string with their real email.
@ -127,14 +132,26 @@ def _run_shell_command(cmd, throw_on_error=False):
return out[0].strip() return out[0].strip()
def _get_git_directory():
parent_dir = os.path.dirname(__file__)
while True:
git_dir = os.path.join(parent_dir, '.git')
if os.path.exists(git_dir):
return git_dir
parent_dir, child = os.path.split(parent_dir)
if not child: # reached to root dir
return None
def write_git_changelog(): def write_git_changelog():
"""Write a changelog based on the git changelog.""" """Write a changelog based on the git changelog."""
new_changelog = 'ChangeLog' new_changelog = 'ChangeLog'
git_dir = _get_git_directory()
if not os.getenv('SKIP_WRITE_GIT_CHANGELOG'): if not os.getenv('SKIP_WRITE_GIT_CHANGELOG'):
if os.path.exists('.git'): if git_dir:
git_log_cmd = 'git log --stat' git_log_cmd = 'git --git-dir=%s log' % git_dir
changelog = _run_shell_command(git_log_cmd) changelog = _run_shell_command(git_log_cmd)
mailmap = parse_mailmap() mailmap = _parse_git_mailmap(git_dir)
with open(new_changelog, "w") as changelog_file: with open(new_changelog, "w") as changelog_file:
changelog_file.write(canonicalize_emails(changelog, mailmap)) changelog_file.write(canonicalize_emails(changelog, mailmap))
else: else:
@ -146,13 +163,15 @@ def generate_authors():
jenkins_email = 'jenkins@review.(openstack|stackforge).org' jenkins_email = 'jenkins@review.(openstack|stackforge).org'
old_authors = 'AUTHORS.in' old_authors = 'AUTHORS.in'
new_authors = 'AUTHORS' new_authors = 'AUTHORS'
git_dir = _get_git_directory()
if not os.getenv('SKIP_GENERATE_AUTHORS'): if not os.getenv('SKIP_GENERATE_AUTHORS'):
if os.path.exists('.git'): if git_dir:
# don't include jenkins email address in AUTHORS file # don't include jenkins email address in AUTHORS file
git_log_cmd = ("git log --format='%aN <%aE>' | sort -u | " git_log_cmd = ("git --git-dir=" + git_dir +
" log --format='%aN <%aE>' | sort -u | "
"egrep -v '" + jenkins_email + "'") "egrep -v '" + jenkins_email + "'")
changelog = _run_shell_command(git_log_cmd) changelog = _run_shell_command(git_log_cmd)
mailmap = parse_mailmap() mailmap = _parse_git_mailmap(git_dir)
with open(new_authors, 'w') as new_authors_fh: with open(new_authors, 'w') as new_authors_fh:
new_authors_fh.write(canonicalize_emails(changelog, mailmap)) new_authors_fh.write(canonicalize_emails(changelog, mailmap))
if os.path.exists(old_authors): if os.path.exists(old_authors):
@ -258,19 +277,21 @@ def get_cmdclass():
return cmdclass return cmdclass
def _get_revno(): def _get_revno(git_dir):
"""Return the number of commits since the most recent tag. """Return the number of commits since the most recent tag.
We use git-describe to find this out, but if there are no We use git-describe to find this out, but if there are no
tags then we fall back to counting commits since the beginning tags then we fall back to counting commits since the beginning
of time. of time.
""" """
describe = _run_shell_command("git describe --always") describe = _run_shell_command(
"git --git-dir=%s describe --always" % git_dir)
if "-" in describe: if "-" in describe:
return describe.rsplit("-", 2)[-2] return describe.rsplit("-", 2)[-2]
# no tags found # no tags found
revlist = _run_shell_command("git rev-list --abbrev-commit HEAD") revlist = _run_shell_command(
"git --git-dir=%s rev-list --abbrev-commit HEAD" % git_dir)
return len(revlist.splitlines()) return len(revlist.splitlines())
@ -279,18 +300,21 @@ def _get_version_from_git(pre_version):
revision if there is one, or tag plus number of additional revisions revision if there is one, or tag plus number of additional revisions
if the current revision has no tag.""" if the current revision has no tag."""
if os.path.exists('.git'): git_dir = _get_git_directory()
if git_dir:
if pre_version: if pre_version:
try: try:
return _run_shell_command( return _run_shell_command(
"git describe --exact-match", "git --git-dir=" + git_dir + " describe --exact-match",
throw_on_error=True).replace('-', '.') throw_on_error=True).replace('-', '.')
except Exception: except Exception:
sha = _run_shell_command("git log -n1 --pretty=format:%h") sha = _run_shell_command(
return "%s.a%s.g%s" % (pre_version, _get_revno(), sha) "git --git-dir=" + git_dir + " log -n1 --pretty=format:%h")
return "%s.a%s.g%s" % (pre_version, _get_revno(git_dir), sha)
else: else:
return _run_shell_command( return _run_shell_command(
"git describe --always").replace('-', '.') "git --git-dir=" + git_dir + " describe --always").replace(
'-', '.')
return None return None

View File

@ -25,18 +25,22 @@ import datetime
import iso8601 import iso8601
TIME_FORMAT = "%Y-%m-%dT%H:%M:%S" # ISO 8601 extended time format with microseconds
PERFECT_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%f" _ISO8601_TIME_FORMAT_SUBSECOND = '%Y-%m-%dT%H:%M:%S.%f'
_ISO8601_TIME_FORMAT = '%Y-%m-%dT%H:%M:%S'
PERFECT_TIME_FORMAT = _ISO8601_TIME_FORMAT_SUBSECOND
def isotime(at=None): def isotime(at=None, subsecond=False):
"""Stringify time in ISO 8601 format""" """Stringify time in ISO 8601 format"""
if not at: if not at:
at = utcnow() at = utcnow()
str = at.strftime(TIME_FORMAT) st = at.strftime(_ISO8601_TIME_FORMAT
if not subsecond
else _ISO8601_TIME_FORMAT_SUBSECOND)
tz = at.tzinfo.tzname(None) if at.tzinfo else 'UTC' tz = at.tzinfo.tzname(None) if at.tzinfo else 'UTC'
str += ('Z' if tz == 'UTC' else tz) st += ('Z' if tz == 'UTC' else tz)
return str return st
def parse_isotime(timestr): def parse_isotime(timestr):