diff --git a/HACKING.rst b/HACKING.rst index 202c850882..85d0691f80 100644 --- a/HACKING.rst +++ b/HACKING.rst @@ -15,7 +15,6 @@ glance Specific Commandments - [G318] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert like assertIsNone(A) - [G319] Validate that debug level logs are not translated -- [G320] For python 3 compatibility, use six.text_type() instead of unicode() - [G327] Prevent use of deprecated contextlib.nested - [G328] Must use a dict comprehension instead of a dict constructor with a sequence of key-value pairs diff --git a/glance/api/v2/image_data.py b/glance/api/v2/image_data.py index 8134838299..a68ab41eba 100644 --- a/glance/api/v2/image_data.py +++ b/glance/api/v2/image_data.py @@ -22,7 +22,6 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_utils import encodeutils from oslo_utils import excutils -import six import webob.exc import glance.api.policy @@ -573,7 +572,7 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): response.headers['Content-MD5'] = image.checksum # NOTE(markwash): "response.app_iter = ..." also erroneously resets the # content-length - response.headers['Content-Length'] = six.text_type(chunk_size) + response.headers['Content-Length'] = str(chunk_size) def upload(self, response, result): response.status_int = 204 diff --git a/glance/api/v2/image_members.py b/glance/api/v2/image_members.py index e9757e1a36..f5b0e9b273 100644 --- a/glance/api/v2/image_members.py +++ b/glance/api/v2/image_members.py @@ -20,7 +20,6 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_serialization import jsonutils from oslo_utils import encodeutils -import six from six.moves import http_client as http import webob @@ -411,13 +410,13 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def create(self, response, image_member): image_member_view = self._format_image_member(image_member) body = jsonutils.dumps(image_member_view, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def update(self, response, image_member): image_member_view = self._format_image_member(image_member) body = jsonutils.dumps(image_member_view, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def index(self, response, image_members): @@ -429,13 +428,13 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): totalview = dict(members=image_members_view) totalview['schema'] = '/v2/schemas/members' body = jsonutils.dumps(totalview, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def show(self, response, image_member): image_member_view = self._format_image_member(image_member) body = jsonutils.dumps(image_member_view, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' diff --git a/glance/api/v2/images.py b/glance/api/v2/images.py index 8c550dbd17..d9dedb4233 100644 --- a/glance/api/v2/images.py +++ b/glance/api/v2/images.py @@ -27,7 +27,6 @@ from oslo_serialization import jsonutils as json from oslo_utils import encodeutils from oslo_utils import timeutils as oslo_timeutils import requests -import six from six.moves import http_client as http import six.moves.urllib.parse as urlparse import webob.exc @@ -1148,8 +1147,7 @@ class RequestDeserializer(wsgi.JSONRequestDeserializer): for key in cls._disallowed_properties: if key in image: msg = _("Attribute '%s' is read-only.") % key - raise webob.exc.HTTPForbidden( - explanation=six.text_type(msg)) + raise webob.exc.HTTPForbidden(explanation=msg) def create(self, request): body = self._get_request_body(request) @@ -1278,10 +1276,10 @@ class RequestDeserializer(wsgi.JSONRequestDeserializer): path_root = change['path'][0] if path_root in self._readonly_properties: msg = _("Attribute '%s' is read-only.") % path_root - raise webob.exc.HTTPForbidden(explanation=six.text_type(msg)) + raise webob.exc.HTTPForbidden(explanation=msg) if path_root in self._reserved_properties: msg = _("Attribute '%s' is reserved.") % path_root - raise webob.exc.HTTPForbidden(explanation=six.text_type(msg)) + raise webob.exc.HTTPForbidden(explanation=msg) if any(path_root.startswith(ns) for ns in self._reserved_namespaces): msg = _("Attribute '%s' is reserved.") % path_root raise webob.exc.HTTPForbidden(explanation=msg) @@ -1315,7 +1313,7 @@ class RequestDeserializer(wsgi.JSONRequestDeserializer): if len(path) != limits.get(op, 1): msg = _("Invalid JSON pointer for this resource: " "'/%s'") % '/'.join(path) - raise webob.exc.HTTPBadRequest(explanation=six.text_type(msg)) + raise webob.exc.HTTPBadRequest(explanation=msg) def _parse_json_schema_change(self, raw_change, draft_version): if draft_version == 10: @@ -1656,14 +1654,12 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def show(self, response, image): image_view = self._format_image(image) - body = json.dumps(image_view, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = json.dumps(image_view, ensure_ascii=False) response.content_type = 'application/json' def update(self, response, image): image_view = self._format_image(image) - body = json.dumps(image_view, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = json.dumps(image_view, ensure_ascii=False) response.content_type = 'application/json' def index(self, response, result): @@ -1681,8 +1677,7 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): params['marker'] = result['next_marker'] next_query = urlparse.urlencode(params) body['next'] = '/v2/images?%s' % next_query - response.unicode_body = six.text_type(json.dumps(body, - ensure_ascii=False)) + response.unicode_body = json.dumps(body, ensure_ascii=False) response.content_type = 'application/json' def delete_from_store(self, response, result): diff --git a/glance/api/v2/metadef_namespaces.py b/glance/api/v2/metadef_namespaces.py index 1561fa6eec..4542af5ba4 100644 --- a/glance/api/v2/metadef_namespaces.py +++ b/glance/api/v2/metadef_namespaces.py @@ -17,7 +17,6 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_serialization import jsonutils from oslo_utils import encodeutils -import six from six.moves import http_client as http import six.moves.urllib.parse as urlparse import webob.exc @@ -686,7 +685,7 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def __render(self, json_data, response, response_status=None): body = jsonutils.dumps(json_data, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' if response_status: response.status_int = response_status diff --git a/glance/api/v2/metadef_objects.py b/glance/api/v2/metadef_objects.py index 0affc3332c..e6dcc13cc6 100644 --- a/glance/api/v2/metadef_objects.py +++ b/glance/api/v2/metadef_objects.py @@ -16,7 +16,6 @@ from oslo_log import log as logging from oslo_serialization import jsonutils from oslo_utils import encodeutils -import six from six.moves import http_client as http import webob.exc from wsme.rest import json @@ -434,7 +433,7 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def show(self, response, metadata_object): metadata_object_json = json.tojson(MetadefObject, metadata_object) body = jsonutils.dumps(metadata_object_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def update(self, response, metadata_object): @@ -445,7 +444,7 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): result.schema = "v2/schemas/metadefs/objects" metadata_objects_json = json.tojson(MetadefObjects, result) body = jsonutils.dumps(metadata_objects_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def delete(self, response, result): diff --git a/glance/api/v2/metadef_properties.py b/glance/api/v2/metadef_properties.py index 8faca851e4..30607392f9 100644 --- a/glance/api/v2/metadef_properties.py +++ b/glance/api/v2/metadef_properties.py @@ -16,7 +16,6 @@ from oslo_log import log as logging from oslo_serialization import jsonutils from oslo_utils import encodeutils -import six from six.moves import http_client as http import webob.exc from wsme.rest import json @@ -322,13 +321,13 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def show(self, response, result): property_type_json = json.tojson(PropertyType, result) body = jsonutils.dumps(property_type_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def index(self, response, result): property_type_json = json.tojson(PropertyTypes, result) body = jsonutils.dumps(property_type_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def create(self, response, result): diff --git a/glance/api/v2/metadef_resource_types.py b/glance/api/v2/metadef_resource_types.py index df995b89d6..13add66a9a 100644 --- a/glance/api/v2/metadef_resource_types.py +++ b/glance/api/v2/metadef_resource_types.py @@ -15,7 +15,6 @@ from oslo_log import log as logging from oslo_serialization import jsonutils -import six from six.moves import http_client as http import webob.exc from wsme.rest import json @@ -241,20 +240,20 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def show(self, response, result): resource_type_json = json.tojson(ResourceTypeAssociations, result) body = jsonutils.dumps(resource_type_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def index(self, response, result): resource_type_json = json.tojson(ResourceTypes, result) body = jsonutils.dumps(resource_type_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def create(self, response, result): resource_type_json = json.tojson(ResourceTypeAssociation, result) response.status_int = http.CREATED body = jsonutils.dumps(resource_type_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def delete(self, response, result): diff --git a/glance/api/v2/metadef_tags.py b/glance/api/v2/metadef_tags.py index 310236974e..8c3514eecb 100644 --- a/glance/api/v2/metadef_tags.py +++ b/glance/api/v2/metadef_tags.py @@ -16,7 +16,6 @@ from oslo_log import log as logging from oslo_serialization import jsonutils from oslo_utils import encodeutils -import six from six.moves import http_client as http import webob.exc from wsme.rest import json @@ -472,13 +471,13 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): response.status_int = http.CREATED metadata_tags_json = json.tojson(MetadefTags, result) body = jsonutils.dumps(metadata_tags_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def show(self, response, metadata_tag): metadata_tag_json = json.tojson(MetadefTag, metadata_tag) body = jsonutils.dumps(metadata_tag_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def update(self, response, metadata_tag): @@ -488,7 +487,7 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def index(self, response, result): metadata_tags_json = json.tojson(MetadefTags, result) body = jsonutils.dumps(metadata_tags_json, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = body response.content_type = 'application/json' def delete(self, response, result): diff --git a/glance/api/v2/tasks.py b/glance/api/v2/tasks.py index 3f5f837a31..9dcc5a0580 100644 --- a/glance/api/v2/tasks.py +++ b/glance/api/v2/tasks.py @@ -325,8 +325,7 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def get(self, response, task): task_view = self._format_task(self.task_schema, task) - body = json.dumps(task_view, ensure_ascii=False) - response.unicode_body = six.text_type(body) + response.unicode_body = json.dumps(task_view, ensure_ascii=False) response.content_type = 'application/json' def index(self, response, result): @@ -345,8 +344,7 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): params['marker'] = result['next_marker'] next_query = urlparse.urlencode(params) body['next'] = '/v2/tasks?%s' % next_query - response.unicode_body = six.text_type(json.dumps(body, - ensure_ascii=False)) + response.unicode_body = json.dumps(body, ensure_ascii=False) response.content_type = 'application/json' diff --git a/glance/async_/flows/api_image_import.py b/glance/async_/flows/api_image_import.py index f31ee7112a..2f52d0ac28 100644 --- a/glance/async_/flows/api_image_import.py +++ b/glance/async_/flows/api_image_import.py @@ -25,7 +25,6 @@ from oslo_utils import encodeutils from oslo_utils import excutils from oslo_utils import timeutils from oslo_utils import units -import six import taskflow from taskflow.patterns import linear_flow as lf from taskflow import retry @@ -704,12 +703,12 @@ class _CompleteTask(task.Task): # necessary log_msg = _LE("Task ID %(task_id)s failed. Error: %(exc_type)s: " "%(e)s") - LOG.exception(log_msg, {'exc_type': six.text_type(type(e)), + LOG.exception(log_msg, {'exc_type': str(type(e)), 'e': encodeutils.exception_to_unicode(e), 'task_id': task.task_id}) err_msg = _("Error: %(exc_type)s: %(e)s") - task.fail(err_msg % {'exc_type': six.text_type(type(e)), + task.fail(err_msg % {'exc_type': str(type(e)), 'e': encodeutils.exception_to_unicode(e)}) finally: self.task_repo.save(task) diff --git a/glance/async_/flows/base_import.py b/glance/async_/flows/base_import.py index 3f83b8bed4..e6bb526b4d 100644 --- a/glance/async_/flows/base_import.py +++ b/glance/async_/flows/base_import.py @@ -23,7 +23,6 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_utils import encodeutils from oslo_utils import excutils -import six from stevedore import named from taskflow.patterns import linear_flow as lf from taskflow import retry @@ -388,12 +387,12 @@ class _CompleteTask(task.Task): # necessary log_msg = _LE("Task ID %(task_id)s failed. Error: %(exc_type)s: " "%(e)s") - LOG.exception(log_msg, {'exc_type': six.text_type(type(e)), + LOG.exception(log_msg, {'exc_type': str(type(e)), 'e': encodeutils.exception_to_unicode(e), 'task_id': task.task_id}) err_msg = _("Error: %(exc_type)s: %(e)s") - task.fail(err_msg % {'exc_type': six.text_type(type(e)), + task.fail(err_msg % {'exc_type': str(type(e)), 'e': encodeutils.exception_to_unicode(e)}) finally: self.task_repo.save(task) diff --git a/glance/cmd/manage.py b/glance/cmd/manage.py index 8e5169d5a2..adbb9c14ff 100644 --- a/glance/cmd/manage.py +++ b/glance/cmd/manage.py @@ -43,7 +43,6 @@ from oslo_config import cfg from oslo_db import exception as db_exc from oslo_log import log as logging from oslo_utils import encodeutils -import six from glance.common import config from glance.common import exception @@ -561,7 +560,7 @@ def main(): v = getattr(CONF.command, 'action_kwarg_' + k) if v is None: continue - if isinstance(v, six.string_types): + if isinstance(v, str): v = encodeutils.safe_decode(v) func_kwargs[k] = v func_args = [encodeutils.safe_decode(arg) diff --git a/glance/common/client.py b/glance/common/client.py index 30730617cd..c651d9e24d 100644 --- a/glance/common/client.py +++ b/glance/common/client.py @@ -390,7 +390,7 @@ class BaseClient(object): if value is None: del params[key] continue - if not isinstance(value, six.string_types): + if not isinstance(value, str): value = str(value) params[key] = encodeutils.safe_encode(value) query = urlparse.urlencode(params) diff --git a/glance/common/crypt.py b/glance/common/crypt.py index f1ec6db4e9..43df517fb4 100644 --- a/glance/common/crypt.py +++ b/glance/common/crypt.py @@ -63,8 +63,7 @@ def urlsafe_encrypt(key, plaintext, blocksize=16): cypher = Cipher(algorithms.AES(key), modes.CBC(init_vector), backend=backend) encryptor = cypher.encryptor() - padded = encryptor.update( - pad(six.binary_type(plaintext))) + encryptor.finalize() + padded = encryptor.update(pad(plaintext)) + encryptor.finalize() encoded = base64.urlsafe_b64encode(init_vector + padded) if six.PY3: encoded = encoded.decode('ascii') diff --git a/glance/common/exception.py b/glance/common/exception.py index 0d8f09bba1..4a046572ba 100644 --- a/glance/common/exception.py +++ b/glance/common/exception.py @@ -16,7 +16,6 @@ """Glance exception subclasses""" -import six import six.moves.urllib.parse as urlparse from glance.i18n import _ @@ -58,7 +57,7 @@ class GlanceException(Exception): # NOTE(flwang): By default, self.msg is an instance of Message, which # can't be converted by str(). Based on the definition of # __unicode__, it should return unicode always. - return six.text_type(self.msg) + return str(self.msg) class MissingCredentialError(GlanceException): diff --git a/glance/common/scripts/api_image_import/main.py b/glance/common/scripts/api_image_import/main.py index 5b531d7c89..bf9a2fc56e 100644 --- a/glance/common/scripts/api_image_import/main.py +++ b/glance/common/scripts/api_image_import/main.py @@ -21,7 +21,6 @@ from oslo_concurrency import lockutils from oslo_log import log as logging from oslo_utils import encodeutils from oslo_utils import excutils -import six from glance.api.v2 import images as v2_api from glance.common import exception @@ -63,7 +62,7 @@ def _execute(t_id, task_repo, image_repo, image_factory): # TODO(nikhil): need to bring back save_and_reraise_exception when # necessary - err_msg = ("Error: " + six.text_type(type(e)) + ': ' + + err_msg = ("Error: " + str(type(e)) + ': ' + encodeutils.exception_to_unicode(e)) log_msg = err_msg + ("Task ID %s" % task.task_id) LOG.exception(log_msg) diff --git a/glance/common/scripts/image_import/main.py b/glance/common/scripts/image_import/main.py index b80f738294..e6ddf72d94 100644 --- a/glance/common/scripts/image_import/main.py +++ b/glance/common/scripts/image_import/main.py @@ -21,7 +21,6 @@ from oslo_concurrency import lockutils from oslo_log import log as logging from oslo_utils import encodeutils from oslo_utils import excutils -import six from glance.api.v2 import images as v2_api from glance.common import exception @@ -65,7 +64,7 @@ def _execute(t_id, task_repo, image_repo, image_factory): # TODO(nikhil): need to bring back save_and_reraise_exception when # necessary - err_msg = ("Error: " + six.text_type(type(e)) + ': ' + + err_msg = ("Error: " + str(type(e)) + ': ' + encodeutils.exception_to_unicode(e)) log_msg = _LE(err_msg + ("Task ID %s" % task.task_id)) # noqa LOG.exception(log_msg) diff --git a/glance/common/utils.py b/glance/common/utils.py index 59a1e5a020..8c1b683b75 100644 --- a/glance/common/utils.py +++ b/glance/common/utils.py @@ -313,9 +313,9 @@ def image_meta_to_http_headers(image_meta): for pk, pv in v.items(): if pv is not None: headers["x-image-meta-property-%s" - % pk.lower()] = six.text_type(pv) + % pk.lower()] = str(pv) else: - headers["x-image-meta-%s" % k.lower()] = six.text_type(v) + headers["x-image-meta-%s" % k.lower()] = str(v) return headers @@ -516,8 +516,10 @@ def no_4byte_params(f): def wrapper(*args, **kwargs): def _is_match(some_str): - return (isinstance(some_str, six.text_type) and - REGEX_4BYTE_UNICODE.findall(some_str) != []) + return ( + isinstance(some_str, str) and + REGEX_4BYTE_UNICODE.findall(some_str) != [] + ) def _check_dict(data_dict): # a dict of dicts has to be checked recursively diff --git a/glance/common/wsgi.py b/glance/common/wsgi.py index d6ee9656ff..f1e4735328 100644 --- a/glance/common/wsgi.py +++ b/glance/common/wsgi.py @@ -1375,7 +1375,7 @@ class Resource(object): self.dispatch(self.serializer, action, response, action_result) # encode all headers in response to utf-8 to prevent unicode errors for name, value in list(response.headers.items()): - if six.PY2 and isinstance(value, six.text_type): + if six.PY2 and isinstance(value, str): response.headers[name] = encodeutils.safe_encode(value) return response except webob.exc.WSGIHTTPException as e: diff --git a/glance/db/sqlalchemy/api.py b/glance/db/sqlalchemy/api.py index 47eb1038e8..b2b5c83892 100644 --- a/glance/db/sqlalchemy/api.py +++ b/glance/db/sqlalchemy/api.py @@ -32,7 +32,6 @@ from oslo_log import log as logging from oslo_utils import excutils import osprofiler.sqlalchemy from retrying import retry -import six # NOTE(jokke): simplified transition to py3, behaves like py2 xrange from six.moves import range import sqlalchemy @@ -1527,7 +1526,7 @@ def purge_deleted_rows(context, age_in_days, max_rows, session=None): except (db_exception.DBError, db_exception.DBReferenceError) as ex: LOG.exception(_LE('DBError detected when force purging ' 'table=%(table)s: %(error)s'), - {'table': ti, 'error': six.text_type(ex)}) + {'table': ti, 'error': str(ex)}) raise rows = result.rowcount @@ -1572,7 +1571,7 @@ def purge_deleted_rows(context, age_in_days, max_rows, session=None): with excutils.save_and_reraise_exception(): LOG.error(_LE('DBError detected when purging from ' "%(tablename)s: %(error)s"), - {'tablename': tbl, 'error': six.text_type(ex)}) + {'tablename': tbl, 'error': str(ex)}) rows = result.rowcount LOG.info(_LI('Deleted %(rows)d row(s) from table %(tbl)s'), @@ -1616,7 +1615,7 @@ def purge_deleted_rows_from_images(context, age_in_days, max_rows, with excutils.save_and_reraise_exception(): LOG.error(_LE('DBError detected when purging from ' "%(tablename)s: %(error)s"), - {'tablename': tbl, 'error': six.text_type(ex)}) + {'tablename': tbl, 'error': str(ex)}) rows = result.rowcount LOG.info(_LI('Deleted %(rows)d row(s) from table %(tbl)s'), diff --git a/glance/domain/__init__.py b/glance/domain/__init__.py index 92ff071065..508afc84dc 100644 --- a/glance/domain/__init__.py +++ b/glance/domain/__init__.py @@ -22,7 +22,6 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_utils import excutils from oslo_utils import importutils -import six from glance.common import exception from glance.common import timeutils @@ -396,9 +395,9 @@ class Task(object): @message.setter def message(self, message): if message: - self._message = six.text_type(message) + self._message = str(message) else: - self._message = six.text_type('') + self._message = '' def _validate_task_status_transition(self, cur_status, new_status): valid_transitions = { diff --git a/glance/hacking/checks.py b/glance/hacking/checks.py index 3f4f10a780..1a995c767a 100644 --- a/glance/hacking/checks.py +++ b/glance/hacking/checks.py @@ -98,16 +98,6 @@ def no_translate_debug_logs(logical_line, filename): yield(0, "G319: Don't translate debug level logs") -@core.flake8ext -def no_direct_use_of_unicode_function(logical_line): - """Check for use of unicode() builtin - - G320 - """ - if unicode_func_re.match(logical_line): - yield(0, "G320: Use six.text_type() instead of unicode()") - - @core.flake8ext def check_no_contextlib_nested(logical_line): msg = ("G327: contextlib.nested is deprecated since Python 2.7. See " diff --git a/glance/image_cache/drivers/xattr.py b/glance/image_cache/drivers/xattr.py index 6c24e49270..59aca36cf8 100644 --- a/glance/image_cache/drivers/xattr.py +++ b/glance/image_cache/drivers/xattr.py @@ -476,7 +476,7 @@ def set_xattr(path, key, value): If xattrs aren't supported by the file-system, we skip setting the value. """ namespaced_key = _make_namespaced_xattr_key(key) - if not isinstance(value, six.binary_type): + if not isinstance(value, bytes): value = str(value) if six.PY3: value = value.encode('utf-8') diff --git a/glance/tests/functional/ft_utils.py b/glance/tests/functional/ft_utils.py index b533d310de..0804a00a40 100644 --- a/glance/tests/functional/ft_utils.py +++ b/glance/tests/functional/ft_utils.py @@ -13,7 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -import six import time from oslo_serialization import jsonutils @@ -43,8 +42,7 @@ def verify_image_hashes_and_status( test_obj.assertEqual(checksum, image['checksum']) if os_hash_value: # make sure we're using the hashing_algorithm we expect - test_obj.assertEqual(six.text_type(os_hash_algo), - image['os_hash_algo']) + test_obj.assertEqual(str(os_hash_algo), image['os_hash_algo']) test_obj.assertEqual(os_hash_value, image['os_hash_value']) test_obj.assertEqual(status, image['status']) test_obj.assertEqual(size, image['size']) diff --git a/glance/tests/functional/v2/test_images.py b/glance/tests/functional/v2/test_images.py index 124a0e92c3..ecdf8ebbc7 100644 --- a/glance/tests/functional/v2/test_images.py +++ b/glance/tests/functional/v2/test_images.py @@ -26,7 +26,6 @@ from oslo_serialization import jsonutils from oslo_utils.secretutils import md5 from oslo_utils import units import requests -import six from six.moves import http_client as http # NOTE(jokke): simplified transition to py3, behaves like py2 xrange from six.moves import range @@ -209,9 +208,8 @@ class TestImages(functional.FunctionalTest): status='active', max_sec=10, delay_sec=0.2) - expect_c = six.text_type(md5(image_data, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(image_data).hexdigest()) + expect_c = str(md5(image_data, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(image_data).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -353,9 +351,8 @@ class TestImages(functional.FunctionalTest): delay_sec=0.2, start_delay_sec=1) with requests.get(image_data_uri) as r: - expect_c = six.text_type(md5(r.content, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(r.content).hexdigest()) + expect_c = str(md5(r.content, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(r.content).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -732,9 +729,8 @@ class TestImages(functional.FunctionalTest): response = requests.put(path, headers=headers, data=image_data) self.assertEqual(http.NO_CONTENT, response.status_code) - expect_c = six.text_type(md5(image_data, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(image_data).hexdigest()) + expect_c = str(md5(image_data, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(image_data).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, expect_c, expect_h, 'active', size=len(image_data)) @@ -1176,9 +1172,8 @@ class TestImages(functional.FunctionalTest): image_data = b'ZZZZZ' response = requests.put(path, headers=headers, data=image_data) self.assertEqual(http.NO_CONTENT, response.status_code) - expect_c = six.text_type(md5(image_data, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(image_data).hexdigest()) + expect_c = str(md5(image_data, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(image_data).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, expect_c, @@ -1191,9 +1186,8 @@ class TestImages(functional.FunctionalTest): image_data = b'WWWWW' response = requests.put(path, headers=headers, data=image_data) self.assertEqual(http.NO_CONTENT, response.status_code) - expect_c = six.text_type(md5(image_data, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(image_data).hexdigest()) + expect_c = str(md5(image_data, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(image_data).hexdigest()) func_utils.verify_image_hashes_and_status(self, image2_id, expect_c, @@ -4636,9 +4630,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): status='active', max_sec=15, delay_sec=0.2) - expect_c = six.text_type(md5(image_data, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(image_data).hexdigest()) + expect_c = str(md5(image_data, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(image_data).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -4802,9 +4795,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): status='active', max_sec=15, delay_sec=0.2) - expect_c = six.text_type(md5(image_data, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(image_data).hexdigest()) + expect_c = str(md5(image_data, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(image_data).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -4967,9 +4959,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): delay_sec=0.2, start_delay_sec=1) with requests.get(image_data_uri) as r: - expect_c = six.text_type(md5(r.content, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(r.content).hexdigest()) + expect_c = str(md5(r.content, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(r.content).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -5131,9 +5122,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): delay_sec=0.2, start_delay_sec=1) with requests.get(image_data_uri) as r: - expect_c = six.text_type(md5(r.content, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(r.content).hexdigest()) + expect_c = str(md5(r.content, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(r.content).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -5294,9 +5284,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): delay_sec=0.2, start_delay_sec=1) with requests.get(image_data_uri) as r: - expect_c = six.text_type(md5(r.content, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(r.content).hexdigest()) + expect_c = str(md5(r.content, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(r.content).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -5459,9 +5448,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): delay_sec=0.2, start_delay_sec=1) with requests.get(image_data_uri) as r: - expect_c = six.text_type(md5(r.content, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(r.content).hexdigest()) + expect_c = str(md5(r.content, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(r.content).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -5684,9 +5672,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): delay_sec=0.2, start_delay_sec=1) with requests.get(image_data_uri) as r: - expect_c = six.text_type(md5(r.content, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(r.content).hexdigest()) + expect_c = str(md5(r.content, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(r.content).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -5943,9 +5930,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): delay_sec=0.2, start_delay_sec=1) with requests.get(image_data_uri) as r: - expect_c = six.text_type(md5(r.content, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(r.content).hexdigest()) + expect_c = str(md5(r.content, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(r.content).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -6086,9 +6072,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): response = requests.put(path, headers=headers, data=image_data) self.assertEqual(http.NO_CONTENT, response.status_code) - expect_c = six.text_type(md5(image_data, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(image_data).hexdigest()) + expect_c = str(md5(image_data, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(image_data).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -6261,9 +6246,8 @@ class TestImagesMultipleBackend(functional.MultipleBackendFunctionalTest): response = requests.put(path, headers=headers, data=image_data) self.assertEqual(http.NO_CONTENT, response.status_code) - expect_c = six.text_type(md5(image_data, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(image_data).hexdigest()) + expect_c = str(md5(image_data, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(image_data).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, @@ -6798,9 +6782,8 @@ class TestCopyImagePermissions(functional.MultipleBackendFunctionalTest): delay_sec=0.2, start_delay_sec=1) with requests.get(image_data_uri) as r: - expect_c = six.text_type(md5(r.content, - usedforsecurity=False).hexdigest()) - expect_h = six.text_type(hashlib.sha512(r.content).hexdigest()) + expect_c = str(md5(r.content, usedforsecurity=False).hexdigest()) + expect_h = str(hashlib.sha512(r.content).hexdigest()) func_utils.verify_image_hashes_and_status(self, image_id, checksum=expect_c, diff --git a/glance/tests/gate/test_data_migration_version.py b/glance/tests/gate/test_data_migration_version.py index a01483872c..992e89001f 100644 --- a/glance/tests/gate/test_data_migration_version.py +++ b/glance/tests/gate/test_data_migration_version.py @@ -13,7 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -import six import testtools from glance.db.migration import CURRENT_RELEASE @@ -29,8 +28,7 @@ class TestDataMigrationVersion(testtools.TestCase): # by rule, release names must be composed of the 26 letters of the # ISO Latin alphabet (ord('A')==65, ord('Z')==90) - release_letter = six.text_type(CURRENT_RELEASE[:1].upper()).encode( - 'ascii') + release_letter = str(CURRENT_RELEASE[:1].upper()).encode('ascii') # Convert release letter into an int in [1:26]. The first # glance release was 'Bexar'. diff --git a/glance/tests/test_hacking.py b/glance/tests/test_hacking.py index b70ae1c1ad..b9d6694b61 100644 --- a/glance/tests/test_hacking.py +++ b/glance/tests/test_hacking.py @@ -52,17 +52,6 @@ class HackingTestCase(utils.BaseTestCase): self.assertEqual(0, len(list(checks.no_translate_debug_logs( "LOG.info(_('foo'))", "glance/store/foo.py")))) - def test_no_direct_use_of_unicode_function(self): - self.assertEqual(1, len(list(checks.no_direct_use_of_unicode_function( - "unicode('the party dont start til the unicode walks in')")))) - self.assertEqual(1, len(list(checks.no_direct_use_of_unicode_function( - """unicode('something ' - 'something else""")))) - self.assertEqual(0, len(list(checks.no_direct_use_of_unicode_function( - "six.text_type('party over')")))) - self.assertEqual(0, len(list(checks.no_direct_use_of_unicode_function( - "not_actually_unicode('something completely different')")))) - def test_no_contextlib_nested(self): self.assertEqual(1, len(list(checks.check_no_contextlib_nested( "with contextlib.nested(")))) diff --git a/glance/tests/unit/common/test_exception.py b/glance/tests/unit/common/test_exception.py index 5681432c83..eea548728b 100644 --- a/glance/tests/unit/common/test_exception.py +++ b/glance/tests/unit/common/test_exception.py @@ -14,7 +14,6 @@ # under the License. from oslo_utils import encodeutils -import six from six.moves import http_client as http from glance.common import exception @@ -49,6 +48,5 @@ class GlanceExceptionTestCase(test_utils.BaseTestCase): self.assertIn('test: 500', encodeutils.exception_to_unicode(msg)) def test_non_unicode_error_msg(self): - exc = exception.GlanceException(str('test')) - self.assertIsInstance(encodeutils.exception_to_unicode(exc), - six.text_type) + exc = exception.GlanceException('test') + self.assertIsInstance(encodeutils.exception_to_unicode(exc), str) diff --git a/glance/tests/unit/common/test_wsgi.py b/glance/tests/unit/common/test_wsgi.py index 09700872e8..92933c368f 100644 --- a/glance/tests/unit/common/test_wsgi.py +++ b/glance/tests/unit/common/test_wsgi.py @@ -659,7 +659,7 @@ class TestHelpers(test_utils.BaseTestCase): 'properties': {'distro': 'Ubuntu 10.04 LTS'}} headers = utils.image_meta_to_http_headers(fixture) for k, v in headers.items(): - self.assertIsInstance(v, six.text_type) + self.assertIsInstance(v, str) def test_data_passed_properly_through_headers(self): """ diff --git a/glance/tests/unit/v2/test_images_resource.py b/glance/tests/unit/v2/test_images_resource.py index 81bcd0ea28..f238844692 100644 --- a/glance/tests/unit/v2/test_images_resource.py +++ b/glance/tests/unit/v2/test_images_resource.py @@ -5390,14 +5390,14 @@ class TestImagesSerializerWithUnicode(test_utils.BaseTestCase): u'size': 1024, u'virtual_size': 3072, u'checksum': u'ca425b88f047ce8ec45ee90e813ada91', - u'os_hash_algo': six.text_type(FAKEHASHALGO), - u'os_hash_value': six.text_type(MULTIHASH1), + u'os_hash_algo': str(FAKEHASHALGO), + u'os_hash_value': str(MULTIHASH1), u'container_format': u'ami', u'disk_format': u'ami', u'min_ram': 128, u'min_disk': 10, - u'created_at': six.text_type(ISOTIME), - u'updated_at': six.text_type(ISOTIME), + u'created_at': str(ISOTIME), + u'updated_at': str(ISOTIME), u'self': u'/v2/images/%s' % UUID1, u'file': u'/v2/images/%s/file' % UUID1, u'schema': u'/v2/schemas/image', @@ -5430,14 +5430,14 @@ class TestImagesSerializerWithUnicode(test_utils.BaseTestCase): u'size': 1024, u'virtual_size': 3072, u'checksum': u'ca425b88f047ce8ec45ee90e813ada91', - u'os_hash_algo': six.text_type(FAKEHASHALGO), - u'os_hash_value': six.text_type(MULTIHASH1), + u'os_hash_algo': str(FAKEHASHALGO), + u'os_hash_value': str(MULTIHASH1), u'container_format': u'ami', u'disk_format': u'ami', u'min_ram': 128, u'min_disk': 10, - u'created_at': six.text_type(ISOTIME), - u'updated_at': six.text_type(ISOTIME), + u'created_at': str(ISOTIME), + u'updated_at': str(ISOTIME), u'self': u'/v2/images/%s' % UUID1, u'file': u'/v2/images/%s/file' % UUID1, u'schema': u'/v2/schemas/image', @@ -5464,14 +5464,14 @@ class TestImagesSerializerWithUnicode(test_utils.BaseTestCase): u'size': 1024, u'virtual_size': 3072, u'checksum': u'ca425b88f047ce8ec45ee90e813ada91', - u'os_hash_algo': six.text_type(FAKEHASHALGO), - u'os_hash_value': six.text_type(MULTIHASH1), + u'os_hash_algo': str(FAKEHASHALGO), + u'os_hash_value': str(MULTIHASH1), u'container_format': u'ami', u'disk_format': u'ami', u'min_ram': 128, u'min_disk': 10, - u'created_at': six.text_type(ISOTIME), - u'updated_at': six.text_type(ISOTIME), + u'created_at': str(ISOTIME), + u'updated_at': str(ISOTIME), u'self': u'/v2/images/%s' % UUID1, u'file': u'/v2/images/%s/file' % UUID1, u'schema': u'/v2/schemas/image', @@ -5500,14 +5500,14 @@ class TestImagesSerializerWithUnicode(test_utils.BaseTestCase): u'size': 1024, u'virtual_size': 3072, u'checksum': u'ca425b88f047ce8ec45ee90e813ada91', - u'os_hash_algo': six.text_type(FAKEHASHALGO), - u'os_hash_value': six.text_type(MULTIHASH1), + u'os_hash_algo': str(FAKEHASHALGO), + u'os_hash_value': str(MULTIHASH1), u'container_format': u'ami', u'disk_format': u'ami', u'min_ram': 128, u'min_disk': 10, - u'created_at': six.text_type(ISOTIME), - u'updated_at': six.text_type(ISOTIME), + u'created_at': str(ISOTIME), + u'updated_at': str(ISOTIME), u'self': u'/v2/images/%s' % UUID1, u'file': u'/v2/images/%s/file' % UUID1, u'schema': u'/v2/schemas/image', diff --git a/glance/tests/utils.py b/glance/tests/utils.py index 181946b456..bbcb5ba59b 100644 --- a/glance/tests/utils.py +++ b/glance/tests/utils.py @@ -551,7 +551,7 @@ def start_http_server(image_id, image_data): self.send_response(http.OK) self.send_header('Content-Length', str(len(fixture))) self.end_headers() - self.wfile.write(six.b(fixture)) + self.wfile.write(fixture.encode('latin-1')) return def do_HEAD(self): diff --git a/tox.ini b/tox.ini index db9f7a15d8..0947198ddc 100644 --- a/tox.ini +++ b/tox.ini @@ -144,7 +144,6 @@ extension = G317 = checks:assert_equal_type G318 = checks:assert_equal_none G319 = checks:no_translate_debug_logs - G320 = checks:no_direct_use_of_unicode_function G327 = checks:check_no_contextlib_nested G328 = checks:dict_constructor_with_list_copy G329 = checks:check_python3_xrange