Merge "Remove use of six library" into feature/zuulv3
This commit is contained in:
commit
e9c12ee0ce
|
@ -16,7 +16,6 @@ gear>=0.9.0,<1.0.0
|
|||
apscheduler>=3.0
|
||||
PrettyTable>=0.6,<0.8
|
||||
babel>=1.0
|
||||
six>=1.6.0
|
||||
ansible>=2.0.0.1
|
||||
kazoo
|
||||
sqlalchemy
|
||||
|
|
|
@ -15,24 +15,20 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from six.moves import configparser as ConfigParser
|
||||
import configparser
|
||||
import datetime
|
||||
import gc
|
||||
import hashlib
|
||||
import importlib
|
||||
from io import StringIO
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
from six.moves import queue as Queue
|
||||
from six.moves import urllib
|
||||
import queue
|
||||
import random
|
||||
import re
|
||||
import select
|
||||
import shutil
|
||||
from six.moves import reload_module
|
||||
try:
|
||||
from cStringIO import StringIO
|
||||
except Exception:
|
||||
from six import StringIO
|
||||
import socket
|
||||
import string
|
||||
import subprocess
|
||||
|
@ -42,6 +38,7 @@ import threading
|
|||
import traceback
|
||||
import time
|
||||
import uuid
|
||||
import urllib
|
||||
|
||||
|
||||
import git
|
||||
|
@ -463,7 +460,7 @@ class FakeGerritConnection(gerritconnection.GerritConnection):
|
|||
super(FakeGerritConnection, self).__init__(driver, connection_name,
|
||||
connection_config)
|
||||
|
||||
self.event_queue = Queue.Queue()
|
||||
self.event_queue = queue.Queue()
|
||||
self.fixture_dir = os.path.join(FIXTURE_DIR, 'gerrit')
|
||||
self.change_number = 0
|
||||
self.changes = changes_db
|
||||
|
@ -1373,8 +1370,8 @@ class FakeGearmanServer(gear.Server):
|
|||
ssl_ca=ssl_ca)
|
||||
|
||||
def getJobForConnection(self, connection, peek=False):
|
||||
for queue in [self.high_queue, self.normal_queue, self.low_queue]:
|
||||
for job in queue:
|
||||
for job_queue in [self.high_queue, self.normal_queue, self.low_queue]:
|
||||
for job in job_queue:
|
||||
if not hasattr(job, 'waiting'):
|
||||
if job.name.startswith(b'executor:execute'):
|
||||
job.waiting = self.hold_jobs_in_queue
|
||||
|
@ -1384,7 +1381,7 @@ class FakeGearmanServer(gear.Server):
|
|||
continue
|
||||
if job.name in connection.functions:
|
||||
if not peek:
|
||||
queue.remove(job)
|
||||
job_queue.remove(job)
|
||||
connection.related_jobs[job.handle] = job
|
||||
job.worker_connection = connection
|
||||
job.running = True
|
||||
|
@ -1879,8 +1876,8 @@ class ZuulTestCase(BaseTestCase):
|
|||
os.environ['STATSD_PORT'] = str(self.statsd.port)
|
||||
self.statsd.start()
|
||||
# the statsd client object is configured in the statsd module import
|
||||
reload_module(statsd)
|
||||
reload_module(zuul.scheduler)
|
||||
importlib.reload(statsd)
|
||||
importlib.reload(zuul.scheduler)
|
||||
|
||||
self.gearman_server = FakeGearmanServer(self.use_ssl)
|
||||
|
||||
|
@ -2008,7 +2005,7 @@ class ZuulTestCase(BaseTestCase):
|
|||
# This creates the per-test configuration object. It can be
|
||||
# overriden by subclasses, but should not need to be since it
|
||||
# obeys the config_file and tenant_config_file attributes.
|
||||
self.config = ConfigParser.ConfigParser()
|
||||
self.config = configparser.ConfigParser()
|
||||
self.config.read(os.path.join(FIXTURE_DIR, self.config_file))
|
||||
|
||||
if not self.setupSimpleLayout():
|
||||
|
@ -2383,12 +2380,12 @@ class ZuulTestCase(BaseTestCase):
|
|||
return True
|
||||
|
||||
def eventQueuesEmpty(self):
|
||||
for queue in self.event_queues:
|
||||
yield queue.empty()
|
||||
for event_queue in self.event_queues:
|
||||
yield event_queue.empty()
|
||||
|
||||
def eventQueuesJoin(self):
|
||||
for queue in self.event_queues:
|
||||
queue.join()
|
||||
for event_queue in self.event_queues:
|
||||
event_queue.join()
|
||||
|
||||
def waitUntilSettled(self):
|
||||
self.log.debug("Waiting until settled...")
|
||||
|
@ -2397,8 +2394,9 @@ class ZuulTestCase(BaseTestCase):
|
|||
if time.time() - start > self.wait_timeout:
|
||||
self.log.error("Timeout waiting for Zuul to settle")
|
||||
self.log.error("Queue status:")
|
||||
for queue in self.event_queues:
|
||||
self.log.error(" %s: %s" % (queue, queue.empty()))
|
||||
for event_queue in self.event_queues:
|
||||
self.log.error(" %s: %s" %
|
||||
(event_queue, event_queue.empty()))
|
||||
self.log.error("All builds waiting: %s" %
|
||||
(self.areAllBuildsWaiting(),))
|
||||
self.log.error("All builds reported: %s" %
|
||||
|
@ -2457,11 +2455,12 @@ class ZuulTestCase(BaseTestCase):
|
|||
# Make sure there are no orphaned jobs
|
||||
for tenant in self.sched.abide.tenants.values():
|
||||
for pipeline in tenant.layout.pipelines.values():
|
||||
for queue in pipeline.queues:
|
||||
if len(queue.queue) != 0:
|
||||
for pipeline_queue in pipeline.queues:
|
||||
if len(pipeline_queue.queue) != 0:
|
||||
print('pipeline %s queue %s contents %s' % (
|
||||
pipeline.name, queue.name, queue.queue))
|
||||
self.assertEqual(len(queue.queue), 0,
|
||||
pipeline.name, pipeline_queue.name,
|
||||
pipeline_queue.queue))
|
||||
self.assertEqual(len(pipeline_queue.queue), 0,
|
||||
"Pipelines queues should be empty")
|
||||
|
||||
def assertReportedStat(self, key, value=None, kind=None):
|
||||
|
|
|
@ -25,8 +25,8 @@ import time
|
|||
from unittest import skip
|
||||
|
||||
import git
|
||||
from six.moves import urllib
|
||||
import testtools
|
||||
import urllib
|
||||
|
||||
import zuul.change_matcher
|
||||
from zuul.driver.gerrit import gerritreporter
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
|
||||
import os
|
||||
import json
|
||||
import urllib
|
||||
|
||||
from six.moves import urllib
|
||||
import webob
|
||||
|
||||
from tests.base import ZuulTestCase, FIXTURE_DIR
|
||||
|
|
|
@ -17,7 +17,7 @@ import os
|
|||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from six.moves import urllib
|
||||
import urllib
|
||||
|
||||
DESCRIPTION = """Encrypt a secret for Zuul.
|
||||
|
||||
|
|
|
@ -14,9 +14,9 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import six
|
||||
from six.moves import configparser as ConfigParser
|
||||
import configparser
|
||||
import extras
|
||||
import io
|
||||
import logging
|
||||
import logging.config
|
||||
import os
|
||||
|
@ -48,7 +48,7 @@ def stack_dump_handler(signum, frame):
|
|||
yappi.start()
|
||||
else:
|
||||
yappi.stop()
|
||||
yappi_out = six.BytesIO()
|
||||
yappi_out = io.BytesIO()
|
||||
yappi.get_func_stats().print_all(out=yappi_out)
|
||||
yappi.get_thread_stats().print_all(out=yappi_out)
|
||||
log.debug(yappi_out.getvalue())
|
||||
|
@ -69,7 +69,7 @@ class ZuulApp(object):
|
|||
return "Zuul version: %s" % zuul_version_info.release_string()
|
||||
|
||||
def read_config(self):
|
||||
self.config = ConfigParser.ConfigParser()
|
||||
self.config = configparser.ConfigParser()
|
||||
if self.args.config:
|
||||
locations = [self.args.config]
|
||||
else:
|
||||
|
|
|
@ -15,7 +15,6 @@ from contextlib import contextmanager
|
|||
import copy
|
||||
import os
|
||||
import logging
|
||||
import six
|
||||
import pprint
|
||||
import textwrap
|
||||
|
||||
|
@ -427,7 +426,7 @@ class JobParser(object):
|
|||
setattr(job, a, conf[k])
|
||||
if 'nodes' in conf:
|
||||
conf_nodes = conf['nodes']
|
||||
if isinstance(conf_nodes, six.string_types):
|
||||
if isinstance(conf_nodes, str):
|
||||
# This references an existing named nodeset in the layout.
|
||||
ns = layout.nodesets[conf_nodes]
|
||||
else:
|
||||
|
@ -576,7 +575,7 @@ class ProjectTemplateParser(object):
|
|||
def _parseJobList(tenant, layout, conf, source_context,
|
||||
start_mark, job_list):
|
||||
for conf_job in conf:
|
||||
if isinstance(conf_job, six.string_types):
|
||||
if isinstance(conf_job, str):
|
||||
attrs = dict(name=conf_job)
|
||||
elif isinstance(conf_job, dict):
|
||||
# A dictionary in a job tree may override params
|
||||
|
@ -1007,7 +1006,7 @@ class TenantParser(object):
|
|||
|
||||
@staticmethod
|
||||
def _getProject(source, conf, current_include):
|
||||
if isinstance(conf, six.string_types):
|
||||
if isinstance(conf, str):
|
||||
# Return a project object whether conf is a dict or a str
|
||||
project = source.getProject(conf)
|
||||
project_include = current_include
|
||||
|
@ -1031,7 +1030,7 @@ class TenantParser(object):
|
|||
def _getProjects(source, conf, current_include):
|
||||
# Return a project object whether conf is a dict or a str
|
||||
projects = []
|
||||
if isinstance(conf, six.string_types):
|
||||
if isinstance(conf, str):
|
||||
# A simple project name string
|
||||
projects.append(TenantParser._getProject(
|
||||
source, conf, current_include))
|
||||
|
|
|
@ -15,11 +15,9 @@
|
|||
import abc
|
||||
|
||||
import extras
|
||||
import six
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseConnection(object):
|
||||
class BaseConnection(object, metaclass=abc.ABCMeta):
|
||||
"""Base class for connections.
|
||||
|
||||
A connection is a shared object that sources, triggers and reporters can
|
||||
|
|
|
@ -14,11 +14,8 @@
|
|||
|
||||
import abc
|
||||
|
||||
import six
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class Driver(object):
|
||||
class Driver(object, metaclass=abc.ABCMeta):
|
||||
"""A Driver is an extension component of Zuul that supports
|
||||
interfacing with a remote system. It can support any of the following
|
||||
interfaces (but must support at least one to be useful):
|
||||
|
@ -80,8 +77,7 @@ class Driver(object):
|
|||
pass
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ConnectionInterface(object):
|
||||
class ConnectionInterface(object, metaclass=abc.ABCMeta):
|
||||
"""The Connection interface.
|
||||
|
||||
A driver which is able to supply a Connection should implement
|
||||
|
@ -124,8 +120,7 @@ class ConnectionInterface(object):
|
|||
pass
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class TriggerInterface(object):
|
||||
class TriggerInterface(object, metaclass=abc.ABCMeta):
|
||||
"""The trigger interface.
|
||||
|
||||
A driver which is able to supply a trigger should implement this
|
||||
|
@ -167,8 +162,7 @@ class TriggerInterface(object):
|
|||
pass
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class SourceInterface(object):
|
||||
class SourceInterface(object, metaclass=abc.ABCMeta):
|
||||
"""The source interface to be implemented by a driver.
|
||||
|
||||
A driver which is able to supply a Source should implement this
|
||||
|
@ -216,8 +210,7 @@ class SourceInterface(object):
|
|||
pass
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ReporterInterface(object):
|
||||
class ReporterInterface(object, metaclass=abc.ABCMeta):
|
||||
"""The reporter interface to be implemented by a driver.
|
||||
|
||||
A driver which is able to supply a Reporter should implement this
|
||||
|
@ -256,8 +249,7 @@ class ReporterInterface(object):
|
|||
pass
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class WrapperInterface(object):
|
||||
class WrapperInterface(object, metaclass=abc.ABCMeta):
|
||||
"""The wrapper interface to be implmeneted by a driver.
|
||||
|
||||
A driver which wraps execution of commands executed by Zuul should
|
||||
|
|
|
@ -19,11 +19,10 @@ import grp
|
|||
import logging
|
||||
import os
|
||||
import pwd
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from six.moves import shlex_quote
|
||||
|
||||
from zuul.driver import (Driver, WrapperInterface)
|
||||
|
||||
|
||||
|
@ -146,7 +145,7 @@ class BubblewrapDriver(Driver, WrapperInterface):
|
|||
command = [x.format(**kwargs) for x in bwrap_command]
|
||||
|
||||
self.log.debug("Bubblewrap command: %s",
|
||||
" ".join(shlex_quote(c) for c in command))
|
||||
" ".join(shlex.quote(c) for c in command))
|
||||
|
||||
wrapped_popen = WrappedPopen(command, passwd_r, group_r)
|
||||
|
||||
|
|
|
@ -18,11 +18,11 @@ import re
|
|||
import select
|
||||
import threading
|
||||
import time
|
||||
from six.moves import queue as Queue
|
||||
from six.moves import shlex_quote
|
||||
import paramiko
|
||||
import logging
|
||||
import pprint
|
||||
import shlex
|
||||
import queue
|
||||
import voluptuous as v
|
||||
|
||||
from zuul.connection import BaseConnection
|
||||
|
@ -260,7 +260,7 @@ class GerritConnection(BaseConnection):
|
|||
self.keyfile = self.connection_config.get('sshkey', None)
|
||||
self.keepalive = int(self.connection_config.get('keepalive', 60))
|
||||
self.watcher_thread = None
|
||||
self.event_queue = Queue.Queue()
|
||||
self.event_queue = queue.Queue()
|
||||
self.client = None
|
||||
|
||||
self.baseurl = self.connection_config.get('baseurl',
|
||||
|
@ -606,7 +606,7 @@ class GerritConnection(BaseConnection):
|
|||
def review(self, project, change, message, action={}):
|
||||
cmd = 'gerrit review --project %s' % project
|
||||
if message:
|
||||
cmd += ' --message %s' % shlex_quote(message)
|
||||
cmd += ' --message %s' % shlex.quote(message)
|
||||
for key, val in action.items():
|
||||
if val is True:
|
||||
cmd += ' --%s' % key
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# under the License.
|
||||
|
||||
import logging
|
||||
from six.moves import urllib
|
||||
import urllib
|
||||
|
||||
import voluptuous as v
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import logging
|
|||
import os
|
||||
import shutil
|
||||
import signal
|
||||
import shlex
|
||||
import socket
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
@ -27,7 +28,6 @@ import traceback
|
|||
from zuul.lib.yamlutil import yaml
|
||||
|
||||
import gear
|
||||
from six.moves import shlex_quote
|
||||
|
||||
import zuul.merger.merger
|
||||
import zuul.ansible
|
||||
|
@ -1288,7 +1288,7 @@ class AnsibleJob(object):
|
|||
if self.aborted:
|
||||
return (self.RESULT_ABORTED, None)
|
||||
self.log.debug("Ansible command: ANSIBLE_CONFIG=%s %s",
|
||||
config_file, " ".join(shlex_quote(c) for c in cmd))
|
||||
config_file, " ".join(shlex.quote(c) for c in cmd))
|
||||
self.proc = popen(
|
||||
cmd,
|
||||
cwd=self.jobdir.work_root,
|
||||
|
|
|
@ -19,8 +19,6 @@ import logging
|
|||
import os
|
||||
import re
|
||||
|
||||
import six
|
||||
|
||||
|
||||
class CloneMapper(object):
|
||||
log = logging.getLogger("zuul.CloneMapper")
|
||||
|
@ -58,17 +56,17 @@ class CloneMapper(object):
|
|||
raise Exception("Expansion error. Check error messages above")
|
||||
|
||||
self.log.info("Mapping projects to workspace...")
|
||||
for project, dest in six.iteritems(ret):
|
||||
for project, dest in ret.items():
|
||||
dest = os.path.normpath(os.path.join(workspace, dest[0]))
|
||||
ret[project] = dest
|
||||
self.log.info(" %s -> %s", project, dest)
|
||||
|
||||
self.log.debug("Checking overlap in destination directories...")
|
||||
check = defaultdict(list)
|
||||
for project, dest in six.iteritems(ret):
|
||||
for project, dest in ret.items():
|
||||
check[dest].append(project)
|
||||
|
||||
dupes = dict((d, p) for (d, p) in six.iteritems(check) if len(p) > 1)
|
||||
dupes = dict((d, p) for (d, p) in check.items() if len(p) > 1)
|
||||
if dupes:
|
||||
raise Exception("Some projects share the same destination: %s",
|
||||
dupes)
|
||||
|
|
|
@ -18,8 +18,6 @@ import logging
|
|||
import os
|
||||
import re
|
||||
|
||||
import six
|
||||
|
||||
from git import GitCommandError
|
||||
from zuul import exceptions
|
||||
from zuul.lib.clonemapper import CloneMapper
|
||||
|
@ -72,7 +70,7 @@ class Cloner(object):
|
|||
dests = mapper.expand(workspace=self.workspace)
|
||||
|
||||
self.log.info("Preparing %s repositories", len(dests))
|
||||
for project, dest in six.iteritems(dests):
|
||||
for project, dest in dests.items():
|
||||
self.prepareRepo(project, dest)
|
||||
self.log.info("Prepared all repositories")
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import logging
|
|||
import os
|
||||
import socket
|
||||
import threading
|
||||
from six.moves import queue
|
||||
import queue
|
||||
|
||||
|
||||
class CommandSocket(object):
|
||||
|
|
|
@ -21,9 +21,6 @@ import struct
|
|||
import time
|
||||
from uuid import uuid4
|
||||
|
||||
import six
|
||||
|
||||
|
||||
MERGER_MERGE = 1 # "git merge"
|
||||
MERGER_MERGE_RESOLVE = 2 # "git merge -s resolve"
|
||||
MERGER_CHERRY_PICK = 3 # "git cherry-pick"
|
||||
|
@ -666,8 +663,7 @@ class PlaybookContext(object):
|
|||
path=self.path)
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class Role(object):
|
||||
class Role(object, metaclass=abc.ABCMeta):
|
||||
"""A reference to an ansible role."""
|
||||
|
||||
def __init__(self, target_name):
|
||||
|
|
|
@ -15,11 +15,8 @@
|
|||
import abc
|
||||
import logging
|
||||
|
||||
import six
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseReporter(object):
|
||||
class BaseReporter(object, metaclass=abc.ABCMeta):
|
||||
"""Base class for reporters.
|
||||
|
||||
Defines the exact public methods that must be supplied.
|
||||
|
|
|
@ -19,7 +19,6 @@ import threading
|
|||
import traceback
|
||||
|
||||
import gear
|
||||
import six
|
||||
|
||||
from zuul import model
|
||||
|
||||
|
@ -179,8 +178,7 @@ class RPCListener(object):
|
|||
# TODO: use args to filter by pipeline etc
|
||||
running_items = []
|
||||
for tenant in self.sched.abide.tenants.values():
|
||||
for pipeline_name, pipeline in six.iteritems(
|
||||
tenant.layout.pipelines):
|
||||
for pipeline_name, pipeline in tenant.layout.pipelines.items():
|
||||
for queue in pipeline.queues:
|
||||
for item in queue.queue:
|
||||
running_items.append(item.formatJSON())
|
||||
|
|
|
@ -20,8 +20,7 @@ import json
|
|||
import logging
|
||||
import os
|
||||
import pickle
|
||||
import six
|
||||
from six.moves import queue as Queue
|
||||
import queue
|
||||
import socket
|
||||
import sys
|
||||
import threading
|
||||
|
@ -49,7 +48,9 @@ class ManagementEvent(object):
|
|||
def wait(self, timeout=None):
|
||||
self._wait_event.wait(timeout)
|
||||
if self._exc_info:
|
||||
six.reraise(*self._exc_info)
|
||||
# http://python3porting.com/differences.html#raise
|
||||
e, v, t = self._exc_info
|
||||
raise e(v).with_traceback(t)
|
||||
return self._wait_event.is_set()
|
||||
|
||||
|
||||
|
@ -217,9 +218,9 @@ class Scheduler(threading.Thread):
|
|||
self.triggers = dict()
|
||||
self.config = config
|
||||
|
||||
self.trigger_event_queue = Queue.Queue()
|
||||
self.result_event_queue = Queue.Queue()
|
||||
self.management_event_queue = Queue.Queue()
|
||||
self.trigger_event_queue = queue.Queue()
|
||||
self.result_event_queue = queue.Queue()
|
||||
self.management_event_queue = queue.Queue()
|
||||
self.abide = model.Abide()
|
||||
|
||||
if not testonly:
|
||||
|
|
|
@ -14,11 +14,8 @@
|
|||
|
||||
import abc
|
||||
|
||||
import six
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseSource(object):
|
||||
class BaseSource(object, metaclass=abc.ABCMeta):
|
||||
"""Base class for sources.
|
||||
|
||||
A source class gives methods for fetching and updating changes. Each
|
||||
|
|
|
@ -14,11 +14,8 @@
|
|||
|
||||
import abc
|
||||
|
||||
import six
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseTrigger(object):
|
||||
class BaseTrigger(object, metaclass=abc.ABCMeta):
|
||||
"""Base class for triggers.
|
||||
|
||||
Defines the exact public methods that must be supplied."""
|
||||
|
|
Loading…
Reference in New Issue