From ebc67aa02886a9f9bf9ba932ebe19b4c613a9bf1 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: May 18 2020 14:05:00 +0000 Subject: [PATCH 1/3] drop py2 hub and web from spec Fixes: https://pagure.io/koji/issue/1942 --- diff --git a/koji.spec b/koji.spec index 96d7412..8022923 100644 --- a/koji.spec +++ b/koji.spec @@ -183,6 +183,7 @@ Provides: python%{python3_pkgversion}-%{name}-sidetag-plugin-cli = %{version}-%{ Plugins to the koji command-line interface %endif +%if 0%{py3_support} > 1 %package hub Summary: Koji XMLRPC interface Group: Applications/Internet @@ -197,27 +198,6 @@ Suggests: python%{python3_pkgversion}-%{name}-hub-plugins %description hub koji-hub is the XMLRPC interface to the koji database -%if 0%{py2_support} > 1 -%package -n python2-%{name}-hub -Summary: Koji XMLRPC interface -Group: Applications/Internet -License: LGPLv2 and GPLv2 -# rpmdiff lib (from rpmlint) is GPLv2 (only) -Requires: httpd -Requires: mod_wsgi -%if 0%{?fedora} || 0%{?rhel} >= 7 -Requires: mod_auth_gssapi -%endif -Requires: python-psycopg2 -Requires: python2-%{name} = %{version}-%{release} -# py2 xor py3 -Provides: %{name}-hub-code = %{version}-%{release} - -%description -n python2-%{name}-hub -koji-hub is the XMLRPC interface to the koji database -%endif - -%if 0%{py3_support} > 1 %package -n python%{python3_pkgversion}-%{name}-hub Summary: Koji XMLRPC interface Group: Applications/Internet @@ -235,7 +215,6 @@ Provides: %{name}-hub-code = %{version}-%{release} %description -n python%{python3_pkgversion}-%{name}-hub koji-hub is the XMLRPC interface to the koji database -%endif %package hub-plugins Summary: Koji hub plugins @@ -249,27 +228,6 @@ Suggests: python%{python3_pkgversion}-%{name}-hub-plugins %description hub-plugins Plugins to the koji XMLRPC interface -%if 0%{py2_support} > 1 -%package -n python2-%{name}-hub-plugins -Summary: Koji hub plugins -Group: Applications/Internet -License: LGPLv2 -Requires: python2-%{name}-hub = %{version}-%{release} -%if 0%{?rhel} < 8 -Requires: python-qpid-proton -%else -Requires: python2-qpid-proton -%endif -Requires: cpio -Provides: %{name}-hub-plugins-code = %{version}-%{release} -Obsoletes: python2-%{name}-sidetag-plugin-hub < %{version}-%{release} -Provides: python2-%{name}-sidetag-plugin-hub = %{version}-%{release} - -%description -n python2-%{name}-hub-plugins -Plugins to the koji XMLRPC interface -%endif - -%if 0%{py3_support} > 1 %package -n python%{python3_pkgversion}-%{name}-hub-plugins Summary: Koji hub plugins Group: Applications/Internet @@ -384,6 +342,7 @@ Requires(postun): systemd %description utils Utilities for the Koji system +%if 0%{py3_support} > 1 %package web Summary: Koji Web UI Group: Applications/Internet @@ -397,30 +356,6 @@ Suggests: python%{python3_pkgversion}-%{name}-web %description web koji-web is a web UI to the Koji system. -%if 0%{py2_support} > 1 -%package -n python2-%{name}-web -Summary: Koji Web UI -Group: Applications/Internet -License: LGPLv2 -%{?python_provide:%python_provide python2-%{name}-web} -Requires: httpd -Requires: mod_wsgi -%if 0%{?fedora} || 0%{?rhel} >= 7 -Requires: mod_auth_gssapi -%else -Requires: mod_auth_kerb -Requires: python-krbV >= 1.0.13 -%endif -Requires: python-psycopg2 -Requires: python-cheetah -Requires: python2-%{name} = %{version}-%{release} -Provides: %{name}-web-code = %{version}-%{release} - -%description -n python2-%{name}-web -koji-web is a web UI to the Koji system. -%endif - -%if 0%{py3_support} > 1 %package -n python%{python3_pkgversion}-%{name}-web Summary: Koji Web UI Group: Applications/Internet @@ -508,6 +443,24 @@ done %endif %endif +# in case, we're building only py2, delete all py3 content +%if 0%{py3_support} < 1 && 0%{py2_support} > 0 + rm -rf %{buildroot}%{_datadir}/koji-web + rm -rf %{buildroot}%{_datadir}/koji-hub + rm -rf %{buildroot}%{_prefix}/lib/koji-hub-plugins + rm -f %{buildroot}/etc/httpd/conf.d/kojihub.conf + rm -f %{buildroot}/etc/httpd/conf.d/kojiweb.conf + rm -f %{buildroot}/etc/koji-hub/hub.conf + rm -f %{buildroot}/etc/koji-hub/plugins/protonmsg.conf + rm -f %{buildroot}/etc/koji-hub/plugins/rpm2maven.conf + rm -f %{buildroot}/etc/koji-hub/plugins/save_failed_tree.conf + rm -f %{buildroot}/etc/koji-hub/plugins/sidetag.conf + rm -f %{buildroot}/etc/kojiweb/web.conf + rm -f %{buildroot}%{_prefix}/lib/systemd/system/koji-sweep-db.service + rm -f %{buildroot}%{_prefix}/lib/systemd/system/koji-sweep-db.timer + rm -f %{buildroot}%{_prefix}/sbin/koji-sweep-db +%endif + %clean rm -rf $RPM_BUILD_ROOT @@ -545,6 +498,7 @@ rm -rf $RPM_BUILD_ROOT #%%config(noreplace) %%{_sysconfdir}/koji/plugins/*.conf %endif +%if 0%{py3_support} > 1 %files hub %config(noreplace) /etc/httpd/conf.d/kojihub.conf %dir /etc/koji-hub @@ -556,27 +510,14 @@ rm -rf $RPM_BUILD_ROOT %{_unitdir}/koji-sweep-db.timer %endif -%if 0%{py2_support} > 1 -%files -n python2-%{name}-hub -%{_datadir}/koji-hub/*.py* -%endif - -%if 0%{py3_support} > 1 %files -n python%{python3_pkgversion}-%{name}-hub %{_datadir}/koji-hub/*.py %{_datadir}/koji-hub/__pycache__ -%endif %files hub-plugins %dir /etc/koji-hub/plugins %config(noreplace) /etc/koji-hub/plugins/*.conf -%if 0%{py2_support} > 1 -%files -n python2-%{name}-hub-plugins -%{_prefix}/lib/koji-hub-plugins/*.py* -%endif - -%if 0%{py3_support} > 1 %files -n python%{python3_pkgversion}-%{name}-hub-plugins %{_prefix}/lib/koji-hub-plugins/*.py %{_prefix}/lib/koji-hub-plugins/__pycache__ @@ -612,18 +553,13 @@ rm -rf $RPM_BUILD_ROOT %config(noreplace) /etc/koji-shadow/koji-shadow.conf %{_sbindir}/koji-sidetag-cleanup +%if 0%{py3_support} > 1 %files web %dir /etc/kojiweb %config(noreplace) /etc/kojiweb/web.conf %config(noreplace) /etc/httpd/conf.d/kojiweb.conf %dir /etc/kojiweb/web.conf.d -%if 0%{py2_support} > 1 -%files -n python2-%{name}-web -%{_datadir}/koji-web -%endif - -%if 0%{py3_support} > 1 %files -n python%{python3_pkgversion}-%{name}-web %{_datadir}/koji-web %endif From ed01cdefe22848a078b7c6aaad15715657b36ed2 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: May 18 2020 14:06:49 +0000 Subject: [PATCH 2/3] dropping six from hub/web --- diff --git a/cli/koji b/cli/koji index d4e1d93..1f79f66 100755 --- a/cli/koji +++ b/cli/koji @@ -121,7 +121,7 @@ def get_options(): parser.add_option("--principal", help=_("specify a Kerberos principal to use")) parser.add_option("--krbservice", help=_("specify the Kerberos service name for the hub")) parser.add_option("--cert", help=_("specify a SSL cert to use"), metavar="FILE") - parser.add_option("--ca", help=SUPPRESS_HELP, metavar="FILE") # FIXME: remove in 1.24 + parser.add_option("--ca", help=SUPPRESS_HELP, metavar="FILE") # FIXME: remove in 1.24 parser.add_option("--runas", help=_("run as the specified user (requires special privileges)")) parser.add_option("--user", help=_("specify user")) parser.add_option("--password", help=_("specify password")) diff --git a/hub/kojihub.py b/hub/kojihub.py index 690bd24..64fadee 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -46,10 +46,8 @@ import traceback import zipfile import rpm -import six -import six.moves.xmlrpc_client -from six.moves import range -from six.moves.urllib.parse import parse_qs +import xmlrpc.client +from urllib.parse import parse_qs import koji import koji.auth @@ -84,7 +82,7 @@ except ImportError: logger = logging.getLogger('koji.hub') -NUMERIC_TYPES = tuple(list(six.integer_types) + [float]) +NUMERIC_TYPES = (int, float) def log_error(msg): @@ -436,7 +434,7 @@ class Task(object): # handle older base64 encoded data xml_request = base64.b64decode(xml_request) # note: loads accepts either bytes or string - params, method = six.moves.xmlrpc_client.loads(xml_request) + params, method = xmlrpc.client.loads(xml_request) return params def getResult(self, raise_fault=True): @@ -455,8 +453,8 @@ class Task(object): try: # If the result is a Fault, then loads will raise it # This is normally what we want to happen - result, method = six.moves.xmlrpc_client.loads(xml_result) - except six.moves.xmlrpc_client.Fault as fault: + result, method = xmlrpc.client.loads(xml_result) + except xmlrpc.client.Fault as fault: if raise_fault: raise # Note that you can't really return a fault over xmlrpc, except by @@ -494,7 +492,7 @@ class Task(object): # handle older base64 encoded data task['request'] = base64.b64decode(task['request']) # note: loads accepts either bytes or string - task['request'] = six.moves.xmlrpc_client.loads(task['request'])[0] + task['request'] = xmlrpc.client.loads(task['request'])[0] return results def runCallbacks(self, cbtype, old_info, attr, new_val): @@ -664,7 +662,7 @@ def eventCondition(event, table=None): table += '.' if event is None: return """(%(table)sactive = TRUE)""" % locals() - elif isinstance(event, six.integer_types): + elif isinstance(event, int): return "(%(table)screate_event <= %(event)d AND ( %(table)srevoke_event IS NULL OR " \ "%(event)d < %(table)srevoke_event ))" % locals() else: @@ -761,12 +759,12 @@ def _writeInheritanceData(tag_id, changes, clear=False): data[parent_id] = link break if clear: - for link in six.itervalues(data): + for link in data.values(): if not link.get('is_update'): link['delete link'] = True link['is_update'] = True changed = False - for link in six.itervalues(data): + for link in data.values(): if link.get('is_update'): changed = True break @@ -776,18 +774,18 @@ def _writeInheritanceData(tag_id, changes, clear=False): return # check for duplicate priorities pri_index = {} - for link in six.itervalues(data): + for link in data.values(): if link.get('delete link'): continue pri_index.setdefault(link['priority'], []).append(link) - for pri, dups in six.iteritems(pri_index): + for pri, dups in pri_index.items(): if len(dups) <= 1: continue # oops, duplicate entries for a single priority dup_ids = [link['parent_id'] for link in dups] raise koji.GenericError("Inheritance priorities must be unique (pri %s: %r )" % (pri, dup_ids)) - for parent_id, link in six.iteritems(data): + for parent_id, link in data.items(): if not link.get('is_update'): continue # revoke old values @@ -795,7 +793,7 @@ def _writeInheritanceData(tag_id, changes, clear=False): clauses=['tag_id=%(tag_id)s', 'parent_id = %(parent_id)s']) update.make_revoke() update.execute() - for parent_id, link in six.iteritems(data): + for parent_id, link in data.items(): if not link.get('is_update'): continue # skip rest if we are just deleting @@ -980,7 +978,7 @@ def _direct_pkglist_add(taginfo, pkginfo, owner, block, extra_arches, force, tag_id = tag['id'] pkg = lookup_package(pkginfo, strict=False) if not pkg: - if not isinstance(pkginfo, six.string_types): + if not isinstance(pkginfo, str): raise koji.GenericError("Invalid package: %s" % pkginfo) if owner is not None: owner = get_user(owner, strict=True)['id'] @@ -1177,7 +1175,7 @@ def readPackageList(tagID=None, userID=None, pkgID=None, event=None, inherit=Fal q += """ AND users.id = %%(userID)i""" if pkgID is not None: - if isinstance(pkgID, six.integer_types): + if isinstance(pkgID, int): q += """ AND package.id = %%(pkgID)i""" else: @@ -1463,7 +1461,7 @@ def readTaggedRPMS(tag, package=None, arch=None, event=None, inherit=False, late joins.append('LEFT OUTER JOIN rpmsigs on rpminfo.id = rpmsigs.rpm_id') if arch: data['arch'] = arch - if isinstance(arch, six.string_types): + if isinstance(arch, str): clauses.append('rpminfo.arch = %(arch)s') elif isinstance(arch, (list, tuple)): clauses.append('rpminfo.arch IN %(arch)s') @@ -2165,7 +2163,7 @@ def get_tag_groups(tag, event=None, inherit=True, incl_pkgs=True, incl_reqs=True groups.setdefault(grp_id, group) if incl_pkgs: - for group in six.itervalues(groups): + for group in groups.values(): group['packagelist'] = {} fields = ('group_id', 'tag_id', 'package', 'blocked', 'type', 'basearchonly', 'requires') q = """ @@ -2187,7 +2185,7 @@ def get_tag_groups(tag, event=None, inherit=True, incl_pkgs=True, incl_reqs=True if incl_reqs: # and now the group reqs - for group in six.itervalues(groups): + for group in groups.values(): group['grouplist'] = {} fields = ('group_id', 'tag_id', 'req_id', 'blocked', 'type', 'is_metapkg', 'name') q = """SELECT %s FROM group_req_listing JOIN groups on req_id = id @@ -2321,7 +2319,7 @@ def remove_host_from_channel(hostname, channel_name): def rename_channel(old, new): """Rename a channel""" context.session.assertPerm('admin') - if not isinstance(new, six.string_types): + if not isinstance(new, str): raise koji.GenericError("new channel name must be a string") cinfo = get_channel(old, strict=True) dup_check = get_channel(new, strict=False) @@ -2678,7 +2676,7 @@ def repo_init(tag, with_src=False, with_debuginfo=False, event=None, with_separa os.symlink(relpath, destlink) except Exception: log_error('Error linking %s to %s' % (destlink, relpath)) - for artifact_dir, artifacts in six.iteritems(artifact_dirs): + for artifact_dir, artifacts in artifact_dirs.items(): _write_maven_repo_metadata(artifact_dir, artifacts) koji.plugin.run_callbacks('postRepoInit', tag=tinfo, with_src=with_src, @@ -2691,10 +2689,7 @@ def _write_maven_repo_metadata(destdir, artifacts): # Sort the list so that the highest version number comes last. # group_id and artifact_id should be the same for all entries, # so we're really only comparing versions. - if six.PY3: - sort_param = {'key': functools.cmp_to_key(rpm.labelCompare)} - else: - sort_param = {'cmp': lambda a, b: rpm.labelCompare(a, b)} + sort_param = {'key': functools.cmp_to_key(rpm.labelCompare)} artifacts = sorted(artifacts, **sort_param) artifactinfo = dict(zip(['group_id', 'artifact_id', 'version'], artifacts[-1])) artifactinfo['timestamp'] = datetime.datetime.now().strftime('%Y%m%d%H%M%S') @@ -3100,7 +3095,7 @@ def get_build_targets(info=None, event=None, buildTagID=None, destTagID=None, qu if info: if isinstance(info, str): clauses.append('build_target.name = %(info)s') - elif isinstance(info, six.integer_types): + elif isinstance(info, int): clauses.append('build_target.id = %(info)i') else: raise koji.GenericError('invalid type for lookup: %s' % type(info)) @@ -3145,13 +3140,10 @@ def lookup_name(table, info, strict=False, create=False): create option will fail. """ fields = ('id', 'name') - if isinstance(info, six.integer_types): + if isinstance(info, int): q = """SELECT id,name FROM %s WHERE id=%%(info)d""" % table elif isinstance(info, str): q = """SELECT id,name FROM %s WHERE name=%%(info)s""" % table - elif six.PY2 and isinstance(info, unicode): # noqa: F821 - info = koji.fixEncoding(info) - q = """SELECT id,name FROM %s WHERE name=%%(info)s""" % table else: raise koji.GenericError('invalid type for id lookup: %s' % type(info)) ret = _singleRow(q, locals(), fields, strict=False) @@ -3284,7 +3276,7 @@ def _create_tag(name, parent=None, arches=None, perm=None, locked=False, maven_s # add extra data if extra is not None: - for key, value in six.iteritems(extra): + for key, value in extra.items(): data = { 'tag_id': tag_id, 'key': key, @@ -3342,9 +3334,9 @@ def get_tag(tagInfo, strict=False, event=None): 'tag_config.maven_include_all': 'maven_include_all' } clauses = [eventCondition(event, table='tag_config')] - if isinstance(tagInfo, six.integer_types): + if isinstance(tagInfo, int): clauses.append("tag.id = %(tagInfo)i") - elif isinstance(tagInfo, six.string_types): + elif isinstance(tagInfo, str): clauses.append("tag.name = %(tagInfo)s") else: raise koji.GenericError('invalid type for tagInfo: %s' % type(tagInfo)) @@ -3592,7 +3584,7 @@ def get_external_repos(info=None, url=None, event=None, queryOpts=None): if info is not None: if isinstance(info, str): clauses.append('name = %(info)s') - elif isinstance(info, six.integer_types): + elif isinstance(info, int): clauses.append('id = %(info)i') else: raise koji.GenericError('invalid type for lookup: %s' % type(info)) @@ -3889,9 +3881,9 @@ def get_user(userInfo=None, strict=False, krb_princs=True): fields = ['id', 'name', 'status', 'usertype'] if isinstance(userInfo, dict): data = userInfo - elif isinstance(userInfo, six.integer_types): + elif isinstance(userInfo, int): data = {'id': userInfo} - elif isinstance(userInfo, six.string_types): + elif isinstance(userInfo, str): data = {'info': userInfo} clauses = ['krb_principal = %(info)s OR name = %(info)s'] else: @@ -3901,21 +3893,21 @@ def get_user(userInfo=None, strict=False, krb_princs=True): clauses = [] uid = data.get('id') if uid is not None: - if isinstance(uid, six.integer_types): + if isinstance(uid, int): clauses.append('users.id = %(id)i') else: raise koji.GenericError('invalid type for userid: %s' % type(uid)) username = data.get('name') if username: - if isinstance(username, six.string_types): + if isinstance(username, str): clauses.append('users.name = %(name)s') else: raise koji.GenericError('invalid type for username: %s' % type(username)) krb_principal = data.get('krb_principal') if krb_principal: - if isinstance(krb_principal, six.string_types): + if isinstance(krb_principal, str): clauses.append('user_krb_principals.krb_principal' ' = %(krb_principal)s') else: @@ -4031,7 +4023,7 @@ def list_user_krb_principals(user_info=None): raise koji.GenericError("No user provided") fields = ['krb_principal'] data = {'info': user_info} - if isinstance(user_info, six.integer_types): + if isinstance(user_info, int): joins = [] clauses = ['user_id = %(info)i'] elif isinstance(user_info, str): @@ -4076,7 +4068,7 @@ def find_build_id(X, strict=False): :returns int: build ID """ - if isinstance(X, six.integer_types): + if isinstance(X, int): return X elif isinstance(X, str): data = koji.parse_NVR(X) @@ -4327,7 +4319,7 @@ def get_rpm(rpminfo, strict=False, multi=False): ) # we can look up by id or NVRA data = None - if isinstance(rpminfo, six.integer_types): + if isinstance(rpminfo, int): data = {'id': rpminfo} elif isinstance(rpminfo, str): data = koji.parse_NVRA(rpminfo) @@ -5216,7 +5208,7 @@ def get_host(hostInfo, strict=False, event=None): } clauses = [eventCondition(event, table='host_config')] - if isinstance(hostInfo, six.integer_types): + if isinstance(hostInfo, int): clauses.append("host.id = %(hostInfo)i") elif isinstance(hostInfo, str): clauses.append("host.name = %(hostInfo)s") @@ -5293,7 +5285,7 @@ def get_channel(channelInfo, strict=False): fields = ('id', 'name') query = """SELECT %s FROM channels WHERE """ % ', '.join(fields) - if isinstance(channelInfo, six.integer_types): + if isinstance(channelInfo, int): query += """id = %(channelInfo)i""" elif isinstance(channelInfo, str): query += """name = %(channelInfo)s""" @@ -5960,7 +5952,7 @@ def import_build(srpm, rpms, brmap=None, task_id=None, build_id=None, logs=None) import_rpm_file(fn, binfo, rpminfo) add_rpm_sig(rpminfo['id'], koji.rip_rpm_sighdr(fn)) if logs: - for key, files in six.iteritems(logs): + for key, files in logs.items(): if not key: key = None for relpath in files: @@ -6253,7 +6245,7 @@ class CG_Importer(object): if metadata is None: # default to looking for uploaded file metadata = 'metadata.json' - if not isinstance(metadata, six.string_types): + if not isinstance(metadata, str): raise koji.GenericError("Invalid metadata value: %r" % metadata) if metadata.endswith('.json'): # handle uploaded metadata @@ -6364,7 +6356,7 @@ class CG_Importer(object): datetime.datetime.fromtimestamp(float(metadata['build']['end_time'])).isoformat(' ') owner = metadata['build'].get('owner', None) if owner: - if not isinstance(owner, six.string_types): + if not isinstance(owner, str): raise koji.GenericError("Invalid owner format (expected username): %s" % owner) buildinfo['owner'] = get_user(owner, strict=True)['id'] self.buildinfo = buildinfo @@ -6781,14 +6773,14 @@ def add_external_rpm(rpminfo, external_repo, strict=True): # sanity check rpminfo dtypes = ( - ('name', six.string_types), - ('version', six.string_types), - ('release', six.string_types), + ('name', str), + ('version', str), + ('release', str), ('epoch', (int, type(None))), - ('arch', six.string_types), + ('arch', str), ('payloadhash', str), ('size', int), - ('buildtime', six.integer_types)) + ('buildtime', int)) for field, allowed in dtypes: if field not in rpminfo: raise koji.GenericError("%s field missing: %r" % (field, rpminfo)) @@ -7808,7 +7800,7 @@ def query_history(tables=None, **kwargs): fields['creator.id = %(editor)i'] = '_created_by' fields['revoker.id = %(editor)i'] = '_revoked_by' elif arg == 'after': - if not isinstance(value, six.string_types): + if not isinstance(value, str): value = datetime.datetime.fromtimestamp(value).isoformat(' ') data['after'] = value clauses.append('ev1.time > %(after)s OR ev2.time > %(after)s') @@ -7824,7 +7816,7 @@ def query_history(tables=None, **kwargs): fields[c_test] = '_created_after_event' fields[r_test] = '_revoked_after_event' elif arg == 'before': - if not isinstance(value, six.string_types): + if not isinstance(value, str): value = datetime.datetime.fromtimestamp(value).isoformat(' ') data['before'] = value clauses.append('ev1.time < %(before)s OR ev2.time < %(before)s') @@ -9289,7 +9281,7 @@ def policy_get_pkg(data): if not pkginfo: # for some operations (e.g. adding a new package), the package # entry may not exist yet - if isinstance(data['package'], six.string_types): + if isinstance(data['package'], str): return {'id': None, 'name': data['package']} else: raise koji.GenericError("Invalid package: %s" % data['package']) @@ -9672,7 +9664,7 @@ class UserInGroupTest(koji.policy.BaseSimpleTest): return False groups = koji.auth.get_user_groups(user['id']) args = self.str.split()[1:] - for group_id, group in six.iteritems(groups): + for group_id, group in groups.items(): for pattern in args: if fnmatch.fnmatch(group, pattern): return True @@ -10344,7 +10336,7 @@ class RootExports(object): # we will accept offset and size as strings to work around xmlrpc limits offset = koji.decode_int(offset) size = koji.decode_int(size) - if isinstance(md5sum, six.string_types): + if isinstance(md5sum, str): # this case is for backwards compatibility verify = "md5" digest = md5sum @@ -10990,9 +10982,9 @@ class RootExports(object): if before: if isinstance(before, datetime.datetime): before = calendar.timegm(before.utctimetuple()) - elif isinstance(before, six.string_types): + elif isinstance(before, str): before = koji.util.parseTime(before) - elif isinstance(before, six.integer_types): + elif isinstance(before, int): pass else: raise koji.GenericError('invalid type for before: %s' % type(before)) @@ -11000,9 +10992,9 @@ class RootExports(object): if after: if isinstance(after, datetime.datetime): after = calendar.timegm(after.utctimetuple()) - elif isinstance(after, six.string_types): + elif isinstance(after, str): after = koji.util.parseTime(after) - elif isinstance(after, six.integer_types): + elif isinstance(after, int): pass else: raise koji.GenericError('invalid type for after: %s' % type(after)) @@ -11306,14 +11298,14 @@ class RootExports(object): def getLatestBuilds(self, tag, event=None, package=None, type=None): """List latest builds for tag (inheritance enabled)""" - if not isinstance(tag, six.integer_types): + if not isinstance(tag, int): # lookup tag id tag = get_tag_id(tag, strict=True) return readTaggedBuilds(tag, event, inherit=True, latest=True, package=package, type=type) def getLatestRPMS(self, tag, package=None, arch=None, event=None, rpmsigs=False, type=None): """List latest RPMS for tag (inheritance enabled)""" - if not isinstance(tag, six.integer_types): + if not isinstance(tag, int): # lookup tag id tag = get_tag_id(tag, strict=True) return readTaggedRPMS(tag, package=package, arch=arch, event=event, inherit=True, @@ -11414,7 +11406,7 @@ class RootExports(object): stops = {} if jumps is None: jumps = {} - if not isinstance(tag, six.integer_types): + if not isinstance(tag, int): # lookup tag id tag = get_tag_id(tag, strict=True) for mapping in [stops, jumps]: @@ -11441,7 +11433,7 @@ class RootExports(object): - buildroot_id If no build has the given ID, or the build generated no RPMs, an empty list is returned.""" - if not isinstance(build, six.integer_types): + if not isinstance(build, int): # lookup build id build = self.findBuildID(build, strict=True) return self.listRPMs(buildID=build) @@ -11927,7 +11919,7 @@ class RootExports(object): :returns: dict with repo data (id, state, create_event, time, dist) """ - if isinstance(tag, six.integer_types): + if isinstance(tag, int): id = tag else: id = get_tag_id(tag, strict=True) @@ -12240,8 +12232,8 @@ class RootExports(object): # handle older base64 encoded data val = base64.b64decode(val) # note: loads accepts either bytes or string - data, method = six.moves.xmlrpc_client.loads(val) - except six.moves.xmlrpc_client.Fault as fault: + data, method = xmlrpc.client.loads(val) + except xmlrpc.client.Fault as fault: data = fault task[f] = data yield task @@ -12556,7 +12548,7 @@ class RootExports(object): xmlrpc DateTime value""" context.session.assertPerm('admin') buildinfo = get_build(build, strict=True) - if isinstance(ts, six.moves.xmlrpc_client.DateTime): + if isinstance(ts, xmlrpc.client.DateTime): # not recommended # the xmlrpclib.DateTime class is almost useless try: @@ -13621,7 +13613,7 @@ class HostExports(object): dest = "%s/%s" % (dir, os.path.basename(fn)) move_and_symlink(fn, dest) if logs: - for key, files in six.iteritems(logs): + for key, files in logs.items(): if key: logdir = "%s/logs/%s" % (dir, key) else: @@ -13855,7 +13847,7 @@ class HostExports(object): maven_task_id = maven_results['task_id'] maven_buildroot_id = maven_results['buildroot_id'] maven_task_dir = koji.pathinfo.task(maven_task_id) - for relpath, files in six.iteritems(maven_results['files']): + for relpath, files in maven_results['files'].items(): dir_maven_info = maven_info poms = [f for f in files if f.endswith('.pom')] if len(poms) == 0: @@ -14027,7 +14019,7 @@ class HostExports(object): task_dir = koji.pathinfo.task(results['task_id']) # import the build output - for relpath, metadata in six.iteritems(results['output']): + for relpath, metadata in results['output'].items(): archivetype = get_archive_type(relpath) if not archivetype: # Unknown archive type, fail the build @@ -14284,9 +14276,9 @@ class HostExports(object): extra_deps = [] task_deps = {} for dep in extra_deps: - if isinstance(dep, six.integer_types): + if isinstance(dep, int): task_output = list_task_output(dep, stat=True) - for filepath, filestats in six.iteritems(task_output): + for filepath, filestats in task_output.items(): if os.path.splitext(filepath)[1] in ['.log', '.md5', '.sha1']: continue tokens = filepath.split('/') @@ -14430,7 +14422,7 @@ class HostExports(object): repodir = koji.pathinfo.repo(repo_id, rinfo['tag_name']) workdir = koji.pathinfo.work() if not rinfo['dist']: - for arch, (uploadpath, files) in six.iteritems(data): + for arch, (uploadpath, files) in data.items(): archdir = "%s/%s" % (repodir, koji.canonArch(arch)) if not os.path.isdir(archdir): raise koji.GenericError("Repo arch directory missing: %s" % archdir) diff --git a/hub/kojixmlrpc.py b/hub/kojixmlrpc.py index d1aa728..ef334df 100644 --- a/hub/kojixmlrpc.py +++ b/hub/kojixmlrpc.py @@ -18,8 +18,6 @@ # Authors: # Mike McLean -from __future__ import absolute_import, division - import datetime import inspect import logging @@ -31,9 +29,6 @@ import threading import time import traceback -import six -from six.moves import range - import koji import koji.auth import koji.db @@ -52,10 +47,7 @@ class Marshaller(ExtendedMarshaller): def dump_datetime(self, value, write): # For backwards compatibility, we return datetime objects as strings value = value.isoformat(' ') - if six.PY2: - self.dump_string(value, write) - else: - self.dump_unicode(value, write) + self.dump_unicode(value, write) dispatch[datetime.datetime] = dump_datetime @@ -104,7 +96,7 @@ class HandlerRegistry(object): Handlers are functions marked with one of the decorators defined in koji.plugin """ - for v in six.itervalues(vars(plugin)): + for v in vars(plugin).values(): if isinstance(v, type): # skip classes continue @@ -375,9 +367,7 @@ def offline_reply(start_response, msg=None): faultString = "server is offline" else: faultString = msg - response = dumps(Fault(faultCode, faultString)) - if six.PY3: - response = response.encode() + response = dumps(Fault(faultCode, faultString)).encode() headers = [ ('Content-Length', str(len(response))), ('Content-Type', "text/xml"), @@ -492,7 +482,7 @@ def load_config(environ): opts['policy'] = dict(config.items('policy')) else: opts['policy'] = {} - for pname, text in six.iteritems(_default_policies): + for pname, text in _default_policies.items(): opts['policy'].setdefault(pname, text) # use configured KojiDir if opts.get('KojiDir') is not None: @@ -562,14 +552,14 @@ def get_policy(opts, plugins): continue alltests.append(koji.policy.findSimpleTests(vars(plugin))) policy = {} - for pname, text in six.iteritems(opts['policy']): + for pname, text in opts['policy'].items(): # filter/merge tests merged = {} for tests in alltests: # tests can be limited to certain policies by setting a class variable - for name, test in six.iteritems(tests): + for name, test in tests.items(): if hasattr(test, 'policy'): - if isinstance(test.policy, six.string_types): + if isinstance(test.policy, str): if pname != test.policy: continue elif pname not in test.policy: @@ -724,8 +714,7 @@ def application(environ, start_response): start_response('405 Method Not Allowed', headers) response = "Method Not Allowed\n" \ "This is an XML-RPC server. Only POST requests are accepted." - if six.PY3: - response = response.encode() + response = response.encode() headers = [ ('Content-Length', str(len(response))), ('Content-Type', "text/plain"), @@ -755,8 +744,7 @@ def application(environ, start_response): response = h._wrap_handler(h.handle_upload, environ) else: response = h._wrap_handler(h.handle_rpc, environ) - if six.PY3: - response = response.encode() + response = response.encode() headers = [ ('Content-Length', str(len(response))), ('Content-Type', "text/xml"), diff --git a/plugins/hub/echo.py b/plugins/hub/echo.py index 1fb63af..1300c1d 100644 --- a/plugins/hub/echo.py +++ b/plugins/hub/echo.py @@ -5,8 +5,6 @@ # Authors: # Mike Bonnet -from __future__ import absolute_import - import logging from koji.plugin import callback, callbacks, ignore_error diff --git a/plugins/hub/protonmsg.py b/plugins/hub/protonmsg.py index ed0830e..d4409b4 100644 --- a/plugins/hub/protonmsg.py +++ b/plugins/hub/protonmsg.py @@ -5,8 +5,6 @@ # Authors: # Mike Bonnet -from __future__ import absolute_import - import json import logging import random diff --git a/plugins/hub/rpm2maven.py b/plugins/hub/rpm2maven.py index a03a5de..90b9f2a 100644 --- a/plugins/hub/rpm2maven.py +++ b/plugins/hub/rpm2maven.py @@ -5,8 +5,6 @@ # Authors: # Mike Bonnet -from __future__ import absolute_import - import fnmatch import os import subprocess diff --git a/plugins/hub/runroot_hub.py b/plugins/hub/runroot_hub.py index cda0f8f..847cf44 100644 --- a/plugins/hub/runroot_hub.py +++ b/plugins/hub/runroot_hub.py @@ -3,8 +3,6 @@ # plugin has a config file. This hub plugin has no config file. -from __future__ import absolute_import - import random import sys diff --git a/plugins/hub/save_failed_tree.py b/plugins/hub/save_failed_tree.py index 29e2579..855eaa8 100644 --- a/plugins/hub/save_failed_tree.py +++ b/plugins/hub/save_failed_tree.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import sys import koji diff --git a/www/kojiweb/archiveinfo.chtml b/www/kojiweb/archiveinfo.chtml index d448ac7..648a93e 100644 --- a/www/kojiweb/archiveinfo.chtml +++ b/www/kojiweb/archiveinfo.chtml @@ -1,7 +1,7 @@ #import koji #from kojiweb import util #from pprint import pformat -#from six.moves.urllib.parse import quote +#from urllib.parse import quote #attr _PASSTHROUGH = ['archiveID', 'fileOrder', 'fileStart', 'buildrootOrder', 'buildrootStart'] diff --git a/www/kojiweb/fileinfo.chtml b/www/kojiweb/fileinfo.chtml index 172dfa9..1a1d04d 100644 --- a/www/kojiweb/fileinfo.chtml +++ b/www/kojiweb/fileinfo.chtml @@ -1,6 +1,6 @@ #import datetime #from kojiweb import util -#from six.moves.urllib.parse import quote +#from urllib.parse import quote #include "includes/header.chtml" #if $rpm diff --git a/www/kojiweb/index.py b/www/kojiweb/index.py index d27e4f0..3219bd0 100644 --- a/www/kojiweb/index.py +++ b/www/kojiweb/index.py @@ -20,10 +20,9 @@ # Mike Bonnet # Mike McLean -from __future__ import absolute_import, division - import datetime import hashlib +import http.cookies import logging import mimetypes import os @@ -32,10 +31,6 @@ import re import sys import time -import six -import six.moves.http_cookies -from six.moves import range - import koji import kojiweb.util from koji.server import ServerRedirect @@ -60,11 +55,10 @@ def _setUserCookie(environ, user): if not options['Secret'].value: raise koji.AuthError('Unable to authenticate, server secret not configured') digest_string = value + options['Secret'].value - if six.PY3: - digest_string = digest_string.encode('utf-8') + digest_string = digest_string.encode('utf-8') shasum = hashlib.sha1(digest_string) value = "%s:%s" % (shasum.hexdigest(), value) - cookies = six.moves.http_cookies.SimpleCookie() + cookies = http.cookies.SimpleCookie() cookies['user'] = value c = cookies['user'] # morsel instance c['secure'] = True @@ -78,7 +72,7 @@ def _setUserCookie(environ, user): def _clearUserCookie(environ): - cookies = six.moves.http_cookies.SimpleCookie() + cookies = http.cookies.SimpleCookie() cookies['user'] = '' c = cookies['user'] # morsel instance c['path'] = os.path.dirname(environ['SCRIPT_NAME']) @@ -89,7 +83,7 @@ def _clearUserCookie(environ): def _getUserCookie(environ): options = environ['koji.options'] - cookies = six.moves.http_cookies.SimpleCookie(environ.get('HTTP_COOKIE', '')) + cookies = http.cookies.SimpleCookie(environ.get('HTTP_COOKIE', '')) if 'user' not in cookies: return None value = cookies['user'].value @@ -101,8 +95,7 @@ def _getUserCookie(environ): if not options['Secret'].value: raise koji.AuthError('Unable to authenticate, server secret not configured') digest_string = value + options['Secret'].value - if six.PY3: - digest_string = digest_string.encode('utf-8') + digest_string = digest_string.encode('utf-8') shasum = hashlib.sha1(digest_string) if shasum.hexdigest() != sig: authlogger.warning('invalid user cookie: %s:%s', sig, value) @@ -738,7 +731,7 @@ def taskinfo(environ, taskID): values['pathinfo'] = pathinfo paths = [] # (volume, relpath) tuples - for relname, volumes in six.iteritems(server.listTaskOutput(task['id'], all_volumes=True)): + for relname, volumes in server.listTaskOutput(task['id'], all_volumes=True).items(): paths += [(volume, relname) for volume in volumes] values['output'] = sorted(paths, key=_sortByExtAndName) if environ['koji.currentUser']: @@ -762,8 +755,8 @@ def taskstatus(environ, taskID): return '' files = server.listTaskOutput(taskID, stat=True, all_volumes=True) output = '%i:%s\n' % (task['id'], koji.TASK_STATES[task['state']]) - for filename, volumes_data in six.iteritems(files): - for volume, file_stats in six.iteritems(volumes_data): + for filename, volumes_data in files.items(): + for volume, file_stats in volumes_data.items(): output += '%s:%s:%s\n' % (volume, filename, file_stats['st_size']) return output diff --git a/www/kojiweb/rpminfo.chtml b/www/kojiweb/rpminfo.chtml index fe7e843..4253b2e 100644 --- a/www/kojiweb/rpminfo.chtml +++ b/www/kojiweb/rpminfo.chtml @@ -2,7 +2,7 @@ #from kojiweb import util #from pprint import pformat #import time -#from six.moves.urllib.parse import quote +#from urllib.parse import quote #attr _PASSTHROUGH = ['rpmID', 'fileOrder', 'fileStart', 'buildrootOrder', 'buildrootStart'] diff --git a/www/kojiweb/search.chtml b/www/kojiweb/search.chtml index 8371c35..d67e9ea 100644 --- a/www/kojiweb/search.chtml +++ b/www/kojiweb/search.chtml @@ -1,5 +1,5 @@ #from kojiweb import util -#from six.moves.urllib.parse import quote +#from urllib.parse import quote #include "includes/header.chtml" diff --git a/www/kojiweb/taskinfo.chtml b/www/kojiweb/taskinfo.chtml index 1622da5..55f9d6e 100644 --- a/www/kojiweb/taskinfo.chtml +++ b/www/kojiweb/taskinfo.chtml @@ -1,7 +1,7 @@ #import koji #import koji.util as kojiutil #from kojiweb import util -#from six.moves.urllib.parse import quote +#from urllib.parse import quote #import datetime #def printChildren($taskID, $childMap) diff --git a/www/kojiweb/wsgi_publisher.py b/www/kojiweb/wsgi_publisher.py index 44167bd..b232ea1 100644 --- a/www/kojiweb/wsgi_publisher.py +++ b/www/kojiweb/wsgi_publisher.py @@ -19,8 +19,6 @@ # Authors: # Mike McLean -from __future__ import absolute_import - import cgi import inspect import logging @@ -29,8 +27,6 @@ import pprint import sys import traceback -import six - import koji import koji.util from koji.server import ServerError, ServerRedirect @@ -352,11 +348,8 @@ class Dispatcher(object): return self._tobytes(result), headers def _tobytes(self, result): - if isinstance(result, six.string_types): - if six.PY2: - result = [result] - else: - result = [bytes(result, encoding='utf-8')] + if isinstance(result, str): + result = [bytes(result, encoding='utf-8')] return result def handle_request(self, environ, start_response): @@ -405,7 +398,7 @@ class Dispatcher(object): else: # last one wins headers[key] = (name, value) - if isinstance(result, six.string_types): + if isinstance(result, str): headers.setdefault('content-length', ('Content-Length', str(len(result)))) headers.setdefault('content-type', ('Content-Type', 'text/html')) headers = to_list(headers.values()) + extra diff --git a/www/lib/kojiweb/util.py b/www/lib/kojiweb/util.py index 90f569f..511f419 100644 --- a/www/lib/kojiweb/util.py +++ b/www/lib/kojiweb/util.py @@ -19,21 +19,17 @@ # Authors: # Mike Bonnet # Mike McLean -from __future__ import absolute_import, division - import datetime import hashlib import os import ssl import stat +import xmlrpc.client # a bunch of exception classes that explainError needs from socket import error as socket_error from xml.parsers.expat import ExpatError import Cheetah.Template -import six -from six.moves import range -from six.moves.xmlrpc_client import ProtocolError import koji import koji.tasks @@ -105,7 +101,7 @@ class DecodeUTF8(Cheetah.Filters.Filter): def filter(self, *args, **kw): """Convert all strs to unicode objects""" result = super(DecodeUTF8, self).filter(*args, **kw) - if isinstance(result, six.text_type): + if isinstance(result, str): pass else: result = result.decode('utf-8', 'replace') @@ -159,10 +155,7 @@ def _genHTML(environ, fileName): tmpl_class = Cheetah.Template.Template.compile(file=fileName) TEMPLATES[fileName] = tmpl_class tmpl_inst = tmpl_class(namespaces=[environ['koji.values']], filter=XHTMLFilter) - if six.PY2: - return tmpl_inst.respond().encode('utf-8', 'replace') - else: - return tmpl_inst.respond() + return tmpl_inst.respond() def _truncTime(): @@ -179,8 +172,7 @@ def _genToken(environ, tstamp=None): if tstamp is None: tstamp = _truncTime() value = user + str(tstamp) + environ['koji.options']['Secret'].value - if six.PY3: - value = value.encode('utf-8') + value = value.encode('utf-8') return hashlib.md5(value).hexdigest()[-8:] @@ -662,7 +654,7 @@ a bug or a configuration issue.""" The web interface is having difficulty communicating with the main \ server. This most likely indicates a network issue.""" level = 1 - elif isinstance(error, (ProtocolError, ExpatError)): + elif isinstance(error, (xmlrpc.client.ProtocolError, ExpatError)): str = """\ The main server returned an invalid response. This could be caused by \ a network issue or load issues on the server.""" From 167751bec24f27e13ee5b947442944cc88dc132c Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: May 18 2020 14:36:24 +0000 Subject: [PATCH 3/3] simplify py3 tests --- diff --git a/Makefile b/Makefile index cee8982..24b830d 100644 --- a/Makefile +++ b/Makefile @@ -80,8 +80,9 @@ test: test2 test3 test2: coverage2 erase - PYTHONPATH=hub/.:plugins/hub/.:plugins/builder/.:plugins/cli/.:cli/.:www/lib coverage2 run \ - --source . -m nose + PYTHONPATH=.:plugins/builder/.:plugins/cli/.:cli/.:www/lib coverage2 run \ + --source . -m nose tests/test_builder tests/test_cli tests/test_lib \ + tests/test_plugins/test*builder.py tests/test_plugins/test*cli.py coverage2 report coverage2 html @echo Full coverage report at file://${CURDIR}/htmlcov/py2/index.html diff --git a/tests/test_hub/test_add_archivetype.py b/tests/test_hub/test_add_archivetype.py index e46d4af..8f2d722 100644 --- a/tests/test_hub/test_add_archivetype.py +++ b/tests/test_hub/test_add_archivetype.py @@ -1,8 +1,4 @@ -from __future__ import absolute_import -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import mock import koji diff --git a/tests/test_hub/test_add_btype.py b/tests/test_hub/test_add_btype.py index 64f19e1..e64cc0f 100644 --- a/tests/test_hub/test_add_btype.py +++ b/tests/test_hub/test_add_btype.py @@ -1,8 +1,4 @@ -from __future__ import absolute_import -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import mock import koji diff --git a/tests/test_hub/test_add_external_rpm.py b/tests/test_hub/test_add_external_rpm.py index a869256..7aa928b 100644 --- a/tests/test_hub/test_add_external_rpm.py +++ b/tests/test_hub/test_add_external_rpm.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_add_host.py b/tests/test_hub/test_add_host.py index 61c8a38..0c2a8dc 100644 --- a/tests/test_hub/test_add_host.py +++ b/tests/test_hub/test_add_host.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_add_host_to_channel.py b/tests/test_hub/test_add_host_to_channel.py index 68f2fc4..3853477 100644 --- a/tests/test_hub/test_add_host_to_channel.py +++ b/tests/test_hub/test_add_host_to_channel.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_apply_query_opts.py b/tests/test_hub/test_apply_query_opts.py index d8652d6..c1f34a3 100644 --- a/tests/test_hub/test_apply_query_opts.py +++ b/tests/test_hub/test_apply_query_opts.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import copy -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from nose.tools import eq_ import kojihub diff --git a/tests/test_hub/test_cg_importer.py b/tests/test_hub/test_cg_importer.py index defe710..e73b0ca 100644 --- a/tests/test_hub/test_cg_importer.py +++ b/tests/test_hub/test_cg_importer.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import import mock import os import shutil -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_check_volume_policy.py b/tests/test_hub/test_check_volume_policy.py index f3b6a8b..6fd20e8 100644 --- a/tests/test_hub/test_check_volume_policy.py +++ b/tests/test_hub/test_check_volume_policy.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import koji.policy import kojihub diff --git a/tests/test_hub/test_complete_image_build.py b/tests/test_hub/test_complete_image_build.py index 0b0d354..ddcfd5c 100644 --- a/tests/test_hub/test_complete_image_build.py +++ b/tests/test_hub/test_complete_image_build.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import copy import json import mock @@ -6,10 +5,8 @@ import os import os.path import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest + import koji import koji.util import kojihub diff --git a/tests/test_hub/test_complete_maven_build.py b/tests/test_hub/test_complete_maven_build.py index d2a5778..9f38b8a 100644 --- a/tests/test_hub/test_complete_maven_build.py +++ b/tests/test_hub/test_complete_maven_build.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import copy import json import mock @@ -6,10 +5,8 @@ import os import os.path import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest + import koji import koji.util import kojihub diff --git a/tests/test_hub/test_create_tag.py b/tests/test_hub/test_create_tag.py index bf79501..f5d026e 100644 --- a/tests/test_hub/test_create_tag.py +++ b/tests/test_hub/test_create_tag.py @@ -1,10 +1,7 @@ # coding: utf-8 -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest + import koji import kojihub diff --git a/tests/test_hub/test_delete_build.py b/tests/test_hub/test_delete_build.py index 83824cc..df9ca18 100644 --- a/tests/test_hub/test_delete_build.py +++ b/tests/test_hub/test_delete_build.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub import time from koji import GenericError diff --git a/tests/test_hub/test_delete_tag.py b/tests/test_hub/test_delete_tag.py index 7fcf6b4..71deb46 100644 --- a/tests/test_hub/test_delete_tag.py +++ b/tests/test_hub/test_delete_tag.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_dist_repo.py b/tests/test_hub/test_dist_repo.py index 92e34bf..c5e9626 100644 --- a/tests/test_hub/test_dist_repo.py +++ b/tests/test_hub/test_dist_repo.py @@ -1,8 +1,4 @@ -from __future__ import absolute_import -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import json import mock import os diff --git a/tests/test_hub/test_edit_host.py b/tests/test_hub/test_edit_host.py index a4b61d3..a687bd0 100644 --- a/tests/test_hub/test_edit_host.py +++ b/tests/test_hub/test_edit_host.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_edit_tag.py b/tests/test_hub/test_edit_tag.py index e207074..118f84e 100644 --- a/tests/test_hub/test_edit_tag.py +++ b/tests/test_hub/test_edit_tag.py @@ -1,10 +1,6 @@ # coding: utf-8 -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_edit_tag_external_repo.py b/tests/test_hub/test_edit_tag_external_repo.py index f7dd3b4..a71b5ec 100644 --- a/tests/test_hub/test_edit_tag_external_repo.py +++ b/tests/test_hub/test_edit_tag_external_repo.py @@ -1,8 +1,5 @@ import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_edit_user.py b/tests/test_hub/test_edit_user.py index 65fc11d..db6fc21 100644 --- a/tests/test_hub/test_edit_user.py +++ b/tests/test_hub/test_edit_user.py @@ -1,8 +1,5 @@ import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_ensure_volume_symlink.py b/tests/test_hub/test_ensure_volume_symlink.py index 31233c3..fadde6e 100644 --- a/tests/test_hub/test_ensure_volume_symlink.py +++ b/tests/test_hub/test_ensure_volume_symlink.py @@ -1,13 +1,9 @@ -from __future__ import absolute_import import mock import os import os.path import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_getPackageID.py b/tests/test_hub/test_getPackageID.py index 8172bbc..01a0381 100644 --- a/tests/test_hub/test_getPackageID.py +++ b/tests/test_hub/test_getPackageID.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import mock from .utils import DBQueryTestCase diff --git a/tests/test_hub/test_getRPMDeps.py b/tests/test_hub/test_getRPMDeps.py index d7b9c28..22ea23a 100644 --- a/tests/test_hub/test_getRPMDeps.py +++ b/tests/test_hub/test_getRPMDeps.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import import mock import os -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_getRPMFile.py b/tests/test_hub/test_getRPMFile.py index 98d1b2f..b84ba04 100644 --- a/tests/test_hub/test_getRPMFile.py +++ b/tests/test_hub/test_getRPMFile.py @@ -1,13 +1,9 @@ -from __future__ import absolute_import import os import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_get_active_repos.py b/tests/test_hub/test_get_active_repos.py index 54db43d..6f473be 100644 --- a/tests/test_hub/test_get_active_repos.py +++ b/tests/test_hub/test_get_active_repos.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub import koji.db diff --git a/tests/test_hub/test_get_archive_file.py b/tests/test_hub/test_get_archive_file.py index cec5ef0..ff71ad1 100644 --- a/tests/test_hub/test_get_archive_file.py +++ b/tests/test_hub/test_get_archive_file.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_get_build_logs.py b/tests/test_hub/test_get_build_logs.py index 30e4d20..b18f084 100644 --- a/tests/test_hub/test_get_build_logs.py +++ b/tests/test_hub/test_get_build_logs.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import import mock import os import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_get_build_notifications.py b/tests/test_hub/test_get_build_notifications.py index 275549e..b4fb176 100644 --- a/tests/test_hub/test_get_build_notifications.py +++ b/tests/test_hub/test_get_build_notifications.py @@ -1,8 +1,5 @@ import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_get_build_type.py b/tests/test_hub/test_get_build_type.py index 325386c..0ab137a 100644 --- a/tests/test_hub/test_get_build_type.py +++ b/tests/test_hub/test_get_build_type.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_get_external_repos.py b/tests/test_hub/test_get_external_repos.py index efb4e1b..bd10a36 100644 --- a/tests/test_hub/test_get_external_repos.py +++ b/tests/test_hub/test_get_external_repos.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import koji import kojihub from .utils import DBQueryTestCase diff --git a/tests/test_hub/test_get_host.py b/tests/test_hub/test_get_host.py index 420e7e2..7bf38d0 100644 --- a/tests/test_hub/test_get_host.py +++ b/tests/test_hub/test_get_host.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_get_next_release.py b/tests/test_hub/test_get_next_release.py index 1578899..ea1c0d5 100644 --- a/tests/test_hub/test_get_next_release.py +++ b/tests/test_hub/test_get_next_release.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_get_task_children.py b/tests/test_hub/test_get_task_children.py index eab40f6..6a1d449 100644 --- a/tests/test_hub/test_get_task_children.py +++ b/tests/test_hub/test_get_task_children.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_get_upload_path.py b/tests/test_hub/test_get_upload_path.py index 671e657..b1cbed8 100644 --- a/tests/test_hub/test_get_upload_path.py +++ b/tests/test_hub/test_get_upload_path.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import import os import mock import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub from koji import GenericError diff --git a/tests/test_hub/test_get_user_perms.py b/tests/test_hub/test_get_user_perms.py index 81ff47d..a9a712a 100644 --- a/tests/test_hub/test_get_user_perms.py +++ b/tests/test_hub/test_get_user_perms.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_get_verify_class.py b/tests/test_hub/test_get_verify_class.py index e733db6..4acaf71 100644 --- a/tests/test_hub/test_get_verify_class.py +++ b/tests/test_hub/test_get_verify_class.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import hashlib -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub from koji import GenericError diff --git a/tests/test_hub/test_group_operations.py b/tests/test_hub/test_group_operations.py index 459c802..90067e4 100644 --- a/tests/test_hub/test_group_operations.py +++ b/tests/test_hub/test_group_operations.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_import_build.py b/tests/test_hub/test_import_build.py index 2422d9a..aa535ee 100644 --- a/tests/test_hub/test_import_build.py +++ b/tests/test_hub/test_import_build.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import import copy import mock import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_import_image_internal.py b/tests/test_hub/test_import_image_internal.py index c96555c..34895b6 100644 --- a/tests/test_hub/test_import_image_internal.py +++ b/tests/test_hub/test_import_image_internal.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import import mock import os import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_insert_processor.py b/tests/test_hub/test_insert_processor.py index 1feaccd..697f718 100644 --- a/tests/test_hub/test_insert_processor.py +++ b/tests/test_hub/test_insert_processor.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_list_archive_files.py b/tests/test_hub/test_list_archive_files.py index 2234e55..87018e6 100644 --- a/tests/test_hub/test_list_archive_files.py +++ b/tests/test_hub/test_list_archive_files.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_list_archives.py b/tests/test_hub/test_list_archives.py index a70b549..219d972 100644 --- a/tests/test_hub/test_list_archives.py +++ b/tests/test_hub/test_list_archives.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import mock from .utils import DBQueryTestCase diff --git a/tests/test_hub/test_list_btypes.py b/tests/test_hub/test_list_btypes.py index 512a672..6bc0194 100644 --- a/tests/test_hub/test_list_btypes.py +++ b/tests/test_hub/test_list_btypes.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_list_channels.py b/tests/test_hub/test_list_channels.py index 78149e7..0847916 100644 --- a/tests/test_hub/test_list_channels.py +++ b/tests/test_hub/test_list_channels.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_list_hosts.py b/tests/test_hub/test_list_hosts.py index 4c51da2..3fc346d 100644 --- a/tests/test_hub/test_list_hosts.py +++ b/tests/test_hub/test_list_hosts.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_list_task_output.py b/tests/test_hub/test_list_task_output.py index 4a5bcd3..7f4c5d3 100644 --- a/tests/test_hub/test_list_task_output.py +++ b/tests/test_hub/test_list_task_output.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_listing.py b/tests/test_hub/test_listing.py index b622be0..95cf850 100644 --- a/tests/test_hub/test_listing.py +++ b/tests/test_hub/test_listing.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_new_build.py b/tests/test_hub/test_new_build.py index fea39c3..6d95ebf 100644 --- a/tests/test_hub/test_new_build.py +++ b/tests/test_hub/test_new_build.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_new_typed_build.py b/tests/test_hub/test_new_typed_build.py index a0e93ba..dec23f1 100644 --- a/tests/test_hub/test_new_typed_build.py +++ b/tests/test_hub/test_new_typed_build.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_notifications.py b/tests/test_hub/test_notifications.py index bbe0a62..a95116a 100644 --- a/tests/test_hub/test_notifications.py +++ b/tests/test_hub/test_notifications.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_perm_operations.py b/tests/test_hub/test_perm_operations.py index fb8a584..9db544a 100644 --- a/tests/test_hub/test_perm_operations.py +++ b/tests/test_hub/test_perm_operations.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_pkglist.py b/tests/test_hub/test_pkglist.py index f9f6c2a..fa89a04 100644 --- a/tests/test_hub/test_pkglist.py +++ b/tests/test_hub/test_pkglist.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_policy_tests.py b/tests/test_hub/test_policy_tests.py index bc56fa5..bb153d7 100644 --- a/tests/test_hub/test_policy_tests.py +++ b/tests/test_hub/test_policy_tests.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_query_processor.py b/tests/test_hub/test_query_processor.py index 570b267..51e70a2 100644 --- a/tests/test_hub/test_query_processor.py +++ b/tests/test_hub/test_query_processor.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_recycle_build.py b/tests/test_hub/test_recycle_build.py index 007eaa3..8a9749c 100644 --- a/tests/test_hub/test_recycle_build.py +++ b/tests/test_hub/test_recycle_build.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import mock import koji diff --git a/tests/test_hub/test_remove_host_from_channel.py b/tests/test_hub/test_remove_host_from_channel.py index db26349..16b4b4c 100644 --- a/tests/test_hub/test_remove_host_from_channel.py +++ b/tests/test_hub/test_remove_host_from_channel.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_repos.py b/tests/test_hub/test_repos.py index 6cba32f..771f0a9 100644 --- a/tests/test_hub/test_repos.py +++ b/tests/test_hub/test_repos.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_rpmdiff.py b/tests/test_hub/test_rpmdiff.py index b69e7f5..a644239 100644 --- a/tests/test_hub/test_rpmdiff.py +++ b/tests/test_hub/test_rpmdiff.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import import copy import mock import os -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_savepoint.py b/tests/test_hub/test_savepoint.py index b0f91b0..a77b609 100644 --- a/tests/test_hub/test_savepoint.py +++ b/tests/test_hub/test_savepoint.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_set_host_enabled.py b/tests/test_hub/test_set_host_enabled.py index b239080..fe8292f 100644 --- a/tests/test_hub/test_set_host_enabled.py +++ b/tests/test_hub/test_set_host_enabled.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_tag_operations.py b/tests/test_hub/test_tag_operations.py index e412389..e67081f 100644 --- a/tests/test_hub/test_tag_operations.py +++ b/tests/test_hub/test_tag_operations.py @@ -1,12 +1,5 @@ -from __future__ import absolute_import -import copy import mock -import shutil -import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_task_wait_results.py b/tests/test_hub/test_task_wait_results.py index 0dc72da..65d2722 100644 --- a/tests/test_hub/test_task_wait_results.py +++ b/tests/test_hub/test_task_wait_results.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import import mock -import six.moves.xmlrpc_client -try: - import unittest2 as unittest -except ImportError: - import unittest +import xmlrpc.client +import unittest import koji import kojihub @@ -66,8 +62,8 @@ class TestTaskWaitResults(unittest.TestCase): task = self.getTask(t) task.getResult.return_value = "OK" task.isCanceled.return_value = False - self.tasks[6].getResult.side_effect = six.moves.xmlrpc_client.Fault(1, "error") - with self.assertRaises(six.moves.xmlrpc_client.Fault): + self.tasks[6].getResult.side_effect = xmlrpc.client.Fault(1, "error") + with self.assertRaises(xmlrpc.client.Fault): results = self.host_exports.taskWaitResults(parent, task_ids) self.assertEqual(results, []) self.tasks[6].getResult.side_effect = koji.GenericError('problem') diff --git a/tests/test_hub/test_update_processor.py b/tests/test_hub/test_update_processor.py index 9537884..94aca2a 100644 --- a/tests/test_hub/test_update_processor.py +++ b/tests/test_hub/test_update_processor.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub diff --git a/tests/test_hub/test_user_groups.py b/tests/test_hub/test_user_groups.py index 98e5c93..c8a4240 100644 --- a/tests/test_hub/test_user_groups.py +++ b/tests/test_hub/test_user_groups.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_hub/test_write_maven_repo_metadata.py b/tests/test_hub/test_write_maven_repo_metadata.py index 6f90385..51bb1f2 100644 --- a/tests/test_hub/test_write_maven_repo_metadata.py +++ b/tests/test_hub/test_write_maven_repo_metadata.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import, with_statement import mock import os import datetime -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from kojihub import _write_maven_repo_metadata diff --git a/tests/test_hub/utils.py b/tests/test_hub/utils.py index 8a4fae9..4f5f6f3 100644 --- a/tests/test_hub/utils.py +++ b/tests/test_hub/utils.py @@ -1,10 +1,5 @@ -from __future__ import absolute_import import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import kojihub @@ -36,7 +31,7 @@ class DBQueryTestCase(unittest.TestCase): return query def assertQueryEqual(self, query, **kwargs): - for k, v in six.iteritems(kwargs): + for k, v in kwargs.items(): self.assertEqual(getattr(query, k, None), v) def assertLastQueryEqual(self, **kwargs): diff --git a/tests/test_www/loadwebindex.py b/tests/test_www/loadwebindex.py index 443ed20..faaee54 100644 --- a/tests/test_www/loadwebindex.py +++ b/tests/test_www/loadwebindex.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import os import imp diff --git a/tests/test_www/test_taskinfo.py b/tests/test_www/test_taskinfo.py index 2e0c449..eff2e7f 100644 --- a/tests/test_www/test_taskinfo.py +++ b/tests/test_www/test_taskinfo.py @@ -1,16 +1,11 @@ -from __future__ import absolute_import -from __future__ import print_function import mock -import koji import copy import datetime - -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call + +import koji from .loadwebindex import webidx diff --git a/tests/test_www/test_util.py b/tests/test_www/test_util.py index d3e1a05..0ead026 100644 --- a/tests/test_www/test_util.py +++ b/tests/test_www/test_util.py @@ -1,9 +1,4 @@ -from __future__ import absolute_import - -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from kojiweb.util import formatMode