Updates latest OSLO changes
Change-Id: Ief4a24a620b798bf8ece393e90c292c8121ae280
This commit is contained in:
parent
c0aa3128fc
commit
bd687a7c38
@ -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}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user