Use six.iteritems to make dict work on Python2/3
six.iteritems returns an iterator over dictionary‘s items. This replaces dictionary.iteritems() on Python 2 and dictionary.items() on Python 3. See http://pythonhosted.org/six/#six.iteritems Part of blueprint py33 Change-Id: I72ef4e2ab6944e58069f9476b2e6dca10c9c94aa
This commit is contained in:
parent
70ef2252bc
commit
3aeff452af
@ -18,6 +18,7 @@ import re
|
||||
import urllib
|
||||
|
||||
from flask.ext import gravatar as gravatar_ext
|
||||
import six
|
||||
|
||||
from dashboard import parameters
|
||||
from dashboard import vault
|
||||
@ -64,7 +65,7 @@ def extend_record(record):
|
||||
|
||||
parent = parent.copy()
|
||||
_extend_record_common_fields(parent)
|
||||
for k, v in parent.iteritems():
|
||||
for k, v in six.iteritems(parent):
|
||||
record['parent_%s' % k] = v
|
||||
|
||||
record['review_number'] = parent.get('review_number')
|
||||
@ -186,7 +187,7 @@ def make_link(title, uri=None, options=None):
|
||||
param_values.update(options)
|
||||
if param_values:
|
||||
uri += '?' + '&'.join(['%s=%s' % (n, safe_encode(v))
|
||||
for n, v in param_values.iteritems()])
|
||||
for n, v in six.iteritems(param_values)])
|
||||
return '<a href="%(uri)s">%(title)s</a>' % {'uri': uri, 'title': title}
|
||||
|
||||
|
||||
|
@ -13,6 +13,9 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import six
|
||||
|
||||
|
||||
MEMORY_STORAGE_CACHED = 0
|
||||
|
||||
|
||||
@ -49,7 +52,7 @@ class CachedMemoryStorage(MemoryStorage):
|
||||
if record.get('company_name') == '*robots':
|
||||
return
|
||||
self.records[record['record_id']] = record
|
||||
for key, index in self.indexes.iteritems():
|
||||
for key, index in six.iteritems(self.indexes):
|
||||
self._add_to_index(index, record, key)
|
||||
for bp_id in (record.get('blueprint_id') or []):
|
||||
if bp_id in self.blueprint_id_index:
|
||||
@ -75,7 +78,7 @@ class CachedMemoryStorage(MemoryStorage):
|
||||
return have_updates
|
||||
|
||||
def _remove_record_from_index(self, record):
|
||||
for key, index in self.indexes.iteritems():
|
||||
for key, index in six.iteritems(self.indexes):
|
||||
index[record[key]].remove(record['record_id'])
|
||||
|
||||
def _add_to_index(self, record_index, record, key):
|
||||
|
@ -17,6 +17,7 @@ import os
|
||||
|
||||
import flask
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from dashboard import memory_storage
|
||||
from stackalytics.openstack.common import log as logging
|
||||
@ -179,7 +180,7 @@ def is_project_type_valid(project_type):
|
||||
project_types = get_project_type_options()
|
||||
if project_type in project_types:
|
||||
return True
|
||||
for p, g in project_types.iteritems():
|
||||
for p, g in six.iteritems(project_types):
|
||||
if project_type in g:
|
||||
return True
|
||||
return False
|
||||
|
@ -21,6 +21,7 @@ import time
|
||||
import flask
|
||||
from flask.ext import gravatar as gravatar_ext
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from dashboard import decorators
|
||||
from dashboard import helpers
|
||||
@ -386,7 +387,7 @@ def get_release_json(release):
|
||||
def get_metrics_json():
|
||||
query = (flask.request.args.get('query') or '').lower()
|
||||
return sorted([{'id': m, 'text': t}
|
||||
for m, t in parameters.METRIC_LABELS.iteritems()
|
||||
for m, t in six.iteritems(parameters.METRIC_LABELS)
|
||||
if t.lower().find(query) >= 0],
|
||||
key=operator.itemgetter('text'))
|
||||
|
||||
@ -405,7 +406,7 @@ def get_metric_json(metric):
|
||||
@decorators.exception_handler()
|
||||
def get_project_types_json():
|
||||
return [{'id': m, 'text': m, 'items': list(t)}
|
||||
for m, t in vault.get_project_type_options().iteritems()]
|
||||
for m, t in six.iteritems(vault.get_project_type_options())]
|
||||
|
||||
|
||||
@app.route('/api/1.0/project_types/<project_type>')
|
||||
@ -413,7 +414,7 @@ def get_project_types_json():
|
||||
@decorators.exception_handler()
|
||||
def get_project_type_json(project_type):
|
||||
if project_type != 'all':
|
||||
for pt, groups in vault.get_project_type_options().iteritems():
|
||||
for pt, groups in six.iteritems(vault.get_project_type_options()):
|
||||
if (project_type == pt) or (project_type in groups):
|
||||
break
|
||||
else:
|
||||
@ -502,7 +503,7 @@ gravatar = gravatar_ext.Gravatar(app, size=64, rating='g', default='wavatar')
|
||||
@app.template_filter('make_url')
|
||||
def to_url_params(dict_params, base_url):
|
||||
return base_url + '?' + '&'.join(
|
||||
['%s=%s' % (k, v) for k, v in dict_params.iteritems()])
|
||||
['%s=%s' % (k, v) for k, v in six.iteritems(dict_params)])
|
||||
|
||||
|
||||
@app.template_filter('remove_ctrl_chars')
|
||||
|
@ -17,6 +17,7 @@ import hashlib
|
||||
import json
|
||||
|
||||
from github import MainClass
|
||||
import six
|
||||
|
||||
from stackalytics.openstack.common import log as logging
|
||||
from stackalytics.processor import normalizer
|
||||
@ -112,7 +113,7 @@ def _store_default_data(runtime_storage_inst, default_data):
|
||||
normalizer.normalize_default_data(default_data)
|
||||
|
||||
LOG.debug('Update runtime storage with default data')
|
||||
for key, value in default_data.iteritems():
|
||||
for key, value in six.iteritems(default_data):
|
||||
if key in STORE_FUNCS:
|
||||
STORE_FUNCS[key](runtime_storage_inst, value)
|
||||
else:
|
||||
|
@ -20,6 +20,8 @@ import re
|
||||
import StringIO
|
||||
import urlparse
|
||||
|
||||
import six
|
||||
|
||||
from stackalytics.openstack.common import log as logging
|
||||
from stackalytics.processor import utils
|
||||
|
||||
@ -98,7 +100,7 @@ def _retrieve_mails(uri):
|
||||
email['date'] = int(email_utils.mktime_tz(
|
||||
email_utils.parsedate_tz(email['date'])))
|
||||
|
||||
for pattern_name, pattern in MESSAGE_PATTERNS.iteritems():
|
||||
for pattern_name, pattern in six.iteritems(MESSAGE_PATTERNS):
|
||||
collection = set()
|
||||
for item in re.finditer(pattern, email['body']):
|
||||
groups = item.groupdict()
|
||||
|
@ -13,6 +13,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import six
|
||||
|
||||
from stackalytics.openstack.common import log as logging
|
||||
from stackalytics.processor import utils
|
||||
|
||||
@ -63,6 +65,6 @@ NORMALIZERS = {
|
||||
|
||||
|
||||
def normalize_default_data(default_data):
|
||||
for key, normalizer in NORMALIZERS.iteritems():
|
||||
for key, normalizer in six.iteritems(NORMALIZERS):
|
||||
if key in default_data:
|
||||
normalizer(default_data[key])
|
||||
|
@ -16,6 +16,8 @@
|
||||
import bisect
|
||||
import time
|
||||
|
||||
import six
|
||||
|
||||
from stackalytics.openstack.common import log as logging
|
||||
from stackalytics.processor import launchpad_utils
|
||||
from stackalytics.processor import utils
|
||||
@ -226,7 +228,7 @@ class RecordProcessor(object):
|
||||
|
||||
def _spawn_review(self, record):
|
||||
# copy everything except patchsets and flatten user data
|
||||
review = dict([(k, v) for k, v in record.iteritems()
|
||||
review = dict([(k, v) for k, v in six.iteritems(record)
|
||||
if k not in ['patchSets', 'owner', 'createdOn']])
|
||||
owner = record['owner']
|
||||
if 'email' not in owner or 'username' not in owner:
|
||||
@ -267,7 +269,7 @@ class RecordProcessor(object):
|
||||
continue # not reviewed by anyone
|
||||
for approval in patch['approvals']:
|
||||
# copy everything and flatten user data
|
||||
mark = dict([(k, v) for k, v in approval.iteritems()
|
||||
mark = dict([(k, v) for k, v in six.iteritems(approval)
|
||||
if k not in ['by', 'grantedOn', 'value']])
|
||||
reviewer = approval['by']
|
||||
|
||||
@ -336,7 +338,7 @@ class RecordProcessor(object):
|
||||
def _process_blueprint(self, record):
|
||||
bpd_author = record.get('drafter') or record.get('owner')
|
||||
|
||||
bpd = dict([(k, v) for k, v in record.iteritems()
|
||||
bpd = dict([(k, v) for k, v in six.iteritems(record)
|
||||
if k.find('_link') < 0])
|
||||
bpd['record_type'] = 'bpd'
|
||||
bpd['primary_key'] = 'bpd:' + record['id']
|
||||
@ -348,7 +350,7 @@ class RecordProcessor(object):
|
||||
yield bpd
|
||||
|
||||
if record.get('assignee') and record['date_completed']:
|
||||
bpc = dict([(k, v) for k, v in record.iteritems()
|
||||
bpc = dict([(k, v) for k, v in six.iteritems(record)
|
||||
if k.find('_link') < 0])
|
||||
bpc['record_type'] = 'bpc'
|
||||
bpc['primary_key'] = 'bpc:' + record['id']
|
||||
@ -466,7 +468,7 @@ class RecordProcessor(object):
|
||||
'date': record['date']
|
||||
}
|
||||
|
||||
for bp_name, bp in valid_blueprints.iteritems():
|
||||
for bp_name, bp in six.iteritems(valid_blueprints):
|
||||
if bp_name in mentioned_blueprints:
|
||||
bp['count'] = mentioned_blueprints[bp_name]['count']
|
||||
bp['date'] = mentioned_blueprints[bp_name]['date']
|
||||
@ -514,7 +516,7 @@ class RecordProcessor(object):
|
||||
users_reviews[launchpad_id] = [review]
|
||||
|
||||
reviews_index = {}
|
||||
for launchpad_id, reviews in users_reviews.iteritems():
|
||||
for launchpad_id, reviews in six.iteritems(users_reviews):
|
||||
reviews.sort(key=lambda x: x['date'])
|
||||
review_number = 0
|
||||
for review in reviews:
|
||||
@ -568,7 +570,7 @@ class RecordProcessor(object):
|
||||
for user in self.runtime_storage_inst.get_all_users()
|
||||
if user['core']])
|
||||
|
||||
for key, marks in marks_per_patch.iteritems():
|
||||
for key, marks in six.iteritems(marks_per_patch):
|
||||
if len(marks) < 2:
|
||||
continue
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
import re
|
||||
|
||||
import memcache
|
||||
import six
|
||||
|
||||
from stackalytics.openstack.common import log as logging
|
||||
from stackalytics.processor import utils
|
||||
@ -111,7 +112,7 @@ class MemcachedStorage(RuntimeStorage):
|
||||
original = self.memcached.get(self._get_record_name(record_id))
|
||||
need_update = False
|
||||
|
||||
for field, value in correction.iteritems():
|
||||
for field, value in six.iteritems(correction):
|
||||
if (field not in original) or (original[field] != value):
|
||||
need_update = True
|
||||
original[field] = value
|
||||
|
@ -20,7 +20,9 @@ import re
|
||||
import time
|
||||
import urllib
|
||||
|
||||
|
||||
import iso8601
|
||||
import six
|
||||
|
||||
from stackalytics.openstack.common import log as logging
|
||||
|
||||
@ -145,7 +147,7 @@ def make_age_string(seconds):
|
||||
|
||||
def merge_records(original, new):
|
||||
need_update = False
|
||||
for key, value in new.iteritems():
|
||||
for key, value in six.iteritems(new):
|
||||
if original.get(key) != value:
|
||||
need_update = True
|
||||
original[key] = value
|
||||
|
@ -18,6 +18,7 @@ import re
|
||||
import shutil
|
||||
|
||||
import sh
|
||||
import six
|
||||
|
||||
from stackalytics.openstack.common import log as logging
|
||||
from stackalytics.processor import utils
|
||||
@ -202,7 +203,7 @@ class Git(Vcs):
|
||||
commit['lines_added'] = int(lines_changed or 0)
|
||||
commit['lines_deleted'] = int(lines_deleted or 0)
|
||||
|
||||
for pattern_name, pattern in MESSAGE_PATTERNS.iteritems():
|
||||
for pattern_name, pattern in six.iteritems(MESSAGE_PATTERNS):
|
||||
collection = set()
|
||||
for item in re.finditer(pattern, commit['message']):
|
||||
collection.add(item.group('id'))
|
||||
|
@ -18,6 +18,7 @@ import itertools
|
||||
import uuid
|
||||
|
||||
import mock
|
||||
import six
|
||||
import testtools
|
||||
|
||||
from dashboard import web
|
||||
@ -155,12 +156,12 @@ def _add_generated_records(data, *generators):
|
||||
def algebraic_product(**kwargs):
|
||||
position_to_key = {}
|
||||
values = []
|
||||
for key, value in kwargs.iteritems():
|
||||
for key, value in six.iteritems(kwargs):
|
||||
position_to_key[len(values)] = key
|
||||
values.append(value)
|
||||
|
||||
for chain in itertools.product(*values):
|
||||
result = {}
|
||||
for position, key in position_to_key.iteritems():
|
||||
for position, key in six.iteritems(position_to_key):
|
||||
result[key] = chain[position]
|
||||
yield result
|
||||
|
@ -16,6 +16,7 @@
|
||||
import itertools
|
||||
|
||||
import mock
|
||||
import six
|
||||
import testtools
|
||||
|
||||
from stackalytics.processor import record_processor
|
||||
@ -1101,7 +1102,7 @@ class TestRecordProcessor(testtools.TestCase):
|
||||
self.assertEqual(set(['nova', 'neutron']), set(modules))
|
||||
|
||||
def assertRecordsMatch(self, expected, actual):
|
||||
for key, value in expected.iteritems():
|
||||
for key, value in six.iteritems(expected):
|
||||
self.assertEqual(value, actual[key],
|
||||
'Values for key %s do not match' % key)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user