Hello community, here is the log from the commit of package python-Pebble for openSUSE:Factory checked in at 2020-03-26 23:37:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-Pebble (Old) and /work/SRC/openSUSE:Factory/.python-Pebble.new.3160 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Pebble" Thu Mar 26 23:37:52 2020 rev:5 rq:788613 version:4.5.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-Pebble/python-Pebble.changes 2020-01-15 16:46:16.585215959 +0100 +++ /work/SRC/openSUSE:Factory/.python-Pebble.new.3160/python-Pebble.changes 2020-03-26 23:37:54.354875387 +0100 @@ -1,0 +2,7 @@ +Thu Mar 26 16:16:44 UTC 2020 - Marketa Calabkova <mcalabk...@suse.com> + +- update to 4.5.1 + * add daemon parameter to decorator + * travis: add Python 3.8 tests + +------------------------------------------------------------------- Old: ---- Pebble-4.4.1.tar.gz New: ---- Pebble-4.5.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-Pebble.spec ++++++ --- /var/tmp/diff_new_pack.mYuexY/_old 2020-03-26 23:37:55.034875633 +0100 +++ /var/tmp/diff_new_pack.mYuexY/_new 2020-03-26 23:37:55.038875634 +0100 @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-Pebble -Version: 4.4.1 +Version: 4.5.1 Release: 0 Summary: Threading and multiprocessing eye-candy for Python License: LGPL-3.0-only ++++++ Pebble-4.4.1.tar.gz -> Pebble-4.5.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/PKG-INFO new/Pebble-4.5.1/PKG-INFO --- old/Pebble-4.4.1/PKG-INFO 2019-12-22 22:02:32.000000000 +0100 +++ new/Pebble-4.5.1/PKG-INFO 2020-03-08 14:54:43.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: Pebble -Version: 4.4.1 +Version: 4.5.1 Summary: Threading and multiprocessing eye-candy. Home-page: https://github.com/noxdafox/pebble Author: Matteo Cafasso diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/Pebble.egg-info/PKG-INFO new/Pebble-4.5.1/Pebble.egg-info/PKG-INFO --- old/Pebble-4.4.1/Pebble.egg-info/PKG-INFO 2019-12-22 22:02:31.000000000 +0100 +++ new/Pebble-4.5.1/Pebble.egg-info/PKG-INFO 2020-03-08 14:54:43.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: Pebble -Version: 4.4.1 +Version: 4.5.1 Summary: Threading and multiprocessing eye-candy. Home-page: https://github.com/noxdafox/pebble Author: Matteo Cafasso diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/__init__.py new/Pebble-4.5.1/pebble/__init__.py --- old/Pebble-4.4.1/pebble/__init__.py 2019-02-09 12:11:00.000000000 +0100 +++ new/Pebble-4.5.1/pebble/__init__.py 2020-03-08 14:54:43.000000000 +0100 @@ -14,3 +14,6 @@ from pebble.common import ProcessExpired, ProcessFuture from pebble.functions import waitforqueues, waitforthreads from pebble.pool import ThreadPool, ProcessPool, MapFuture, ProcessMapFuture +"""Versioning controlled via Git Tag, check setup.py""" + +__version__ = "4.5.1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/common.py new/Pebble-4.5.1/pebble/common.py --- old/Pebble-4.4.1/pebble/common.py 2019-12-19 23:04:31.000000000 +0100 +++ new/Pebble-4.5.1/pebble/common.py 2020-01-26 11:20:15.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License @@ -127,17 +127,17 @@ return exception -def launch_thread(name, function, *args, **kwargs): +def launch_thread(name, function, daemon, *args, **kwargs): thread = Thread(target=function, name=name, args=args, kwargs=kwargs) - thread.daemon = True + thread.daemon = daemon thread.start() return thread -def launch_process(name, function, *args, **kwargs): +def launch_process(name, function, daemon, *args, **kwargs): process = Process(target=function, name=name, args=args, kwargs=kwargs) - process.daemon = True + process.daemon = daemon process.start() return process diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/concurrent/process.py new/Pebble-4.5.1/pebble/concurrent/process.py --- old/Pebble-4.4.1/pebble/concurrent/process.py 2019-09-29 18:45:18.000000000 +0200 +++ new/Pebble-4.5.1/pebble/concurrent/process.py 2020-01-26 11:20:11.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License @@ -47,24 +47,27 @@ """ timeout = kwargs.get('timeout') name = kwargs.get('name') + daemon = kwargs.get('daemon', True) # decorator without parameters if len(args) == 1 and len(kwargs) == 0 and callable(args[0]): - return _process_wrapper(args[0], timeout, name) + return _process_wrapper(args[0], timeout, name, daemon) else: # decorator with parameters if timeout is not None and not isinstance(timeout, (int, float)): raise TypeError('Timeout expected to be None or integer or float') if name is not None and not isinstance(name, str): raise TypeError('Name expected to be None or string') + if daemon is not None and not isinstance(daemon, bool): + raise TypeError('Daemon expected to be None or bool') def decorating_function(function): - return _process_wrapper(function, timeout, name) + return _process_wrapper(function, timeout, name, daemon) return decorating_function -def _process_wrapper(function, timeout, name): +def _process_wrapper(function, timeout, name, daemon): _register_function(function) @wraps(function) @@ -79,13 +82,13 @@ target = function worker = launch_process( - name, _function_handler, target, args, kwargs, writer) + name, _function_handler, daemon, target, args, kwargs, writer) writer.close() future.set_running_or_notify_cancel() - launch_thread(name, _worker_handler, future, worker, reader, timeout) + launch_thread(name, _worker_handler, True, future, worker, reader, timeout) return future diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/concurrent/thread.py new/Pebble-4.5.1/pebble/concurrent/thread.py --- old/Pebble-4.4.1/pebble/concurrent/thread.py 2019-09-29 18:45:18.000000000 +0200 +++ new/Pebble-4.5.1/pebble/concurrent/thread.py 2020-01-26 11:20:14.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License @@ -28,30 +28,33 @@ Decorated functions will return a concurrent.futures.Future object once called. - The name parameter will set the process name. + The name parameter will set the process name. """ name = kwargs.get('name') + daemon = kwargs.get('daemon', True) if len(args) == 1 and len(kwargs) == 0 and callable(args[0]): - return _thread_wrapper(args[0], name) + return _thread_wrapper(args[0], name, daemon) else: # decorator with parameters if name is not None and not isinstance(name, str): raise TypeError('Name expected to be None or string') + if daemon is not None and not isinstance(daemon, bool): + raise TypeError('Daemon expected to be None or bool') def decorating_function(function): - return _thread_wrapper(function, name) + return _thread_wrapper(function, name, daemon) return decorating_function - -def _thread_wrapper(function, name): + +def _thread_wrapper(function, name, daemon): @wraps(function) def wrapper(*args, **kwargs): future = Future() - launch_thread(name, _function_handler, function, args, kwargs, future) + launch_thread(name, _function_handler, daemon, function, args, kwargs, future) return future diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/decorators.py new/Pebble-4.5.1/pebble/decorators.py --- old/Pebble-4.4.1/pebble/decorators.py 2019-02-09 12:11:00.000000000 +0100 +++ new/Pebble-4.5.1/pebble/decorators.py 2020-01-26 11:20:22.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/functions.py new/Pebble-4.5.1/pebble/functions.py --- old/Pebble-4.4.1/pebble/functions.py 2019-02-09 12:11:00.000000000 +0100 +++ new/Pebble-4.5.1/pebble/functions.py 2020-01-26 11:20:16.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/pool/base_pool.py new/Pebble-4.5.1/pebble/pool/base_pool.py --- old/Pebble-4.4.1/pebble/pool/base_pool.py 2019-02-17 10:32:40.000000000 +0100 +++ new/Pebble-4.5.1/pebble/pool/base_pool.py 2020-02-24 20:41:54.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License @@ -107,9 +107,7 @@ raise NotImplementedError("Not implemented") def _stop_pool(self): - for loop in self._loops: - loop.join() - self._pool_manager.stop() + raise NotImplementedError("Not implemented") class PoolContext(object): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/pool/channel.py new/Pebble-4.5.1/pebble/pool/channel.py --- old/Pebble-4.4.1/pebble/pool/channel.py 2019-12-20 23:57:33.000000000 +0100 +++ new/Pebble-4.5.1/pebble/pool/channel.py 2020-01-26 11:20:20.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/pool/process.py new/Pebble-4.5.1/pebble/pool/process.py --- old/Pebble-4.4.1/pebble/pool/process.py 2019-12-19 23:10:41.000000000 +0100 +++ new/Pebble-4.5.1/pebble/pool/process.py 2020-02-24 20:41:54.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License @@ -51,7 +51,6 @@ every time a worker is started, receiving initargs as arguments. """ - def __init__(self, max_workers=cpu_count(), max_tasks=0, initializer=None, initargs=()): super(ProcessPool, self).__init__( @@ -63,13 +62,19 @@ if self._context.state == CREATED: self._pool_manager.start() self._loops = (launch_thread(None, task_scheduler_loop, - self._pool_manager), + True, self._pool_manager), launch_thread(None, pool_manager_loop, - self._pool_manager), + True, self._pool_manager), launch_thread(None, message_manager_loop, - self._pool_manager)) + True, self._pool_manager)) self._context.state = RUNNING + def _stop_pool(self): + self._pool_manager.close() + for loop in self._loops: + loop.join() + self._pool_manager.stop() + def schedule(self, function, args=(), kwargs={}, timeout=None): """Schedules *function* to be run the Pool. @@ -177,7 +182,6 @@ class PoolManager: """Combines Task and Worker Managers providing a higher level one.""" - def __init__(self, context): self.context = context self.task_manager = TaskManager(context.task_queue.task_done) @@ -187,9 +191,11 @@ def start(self): self.worker_manager.create_workers() + def close(self): + self.worker_manager.close_channels() + def stop(self): self.worker_manager.stop_workers() - self.worker_manager.close_channels() def schedule(self, task): """Schedules a new Task in the PoolManager.""" @@ -368,7 +374,7 @@ def new_worker(self): try: worker = launch_process( - None, worker_process, self.worker_parameters, self.workers_channel) + None, worker_process, True, self.worker_parameters, self.workers_channel) self.workers[worker.pid] = worker except (OSError, EnvironmentError) as error: raise BrokenProcessPool(error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/pebble/pool/thread.py new/Pebble-4.5.1/pebble/pool/thread.py --- old/Pebble-4.4.1/pebble/pool/thread.py 2019-09-29 18:45:18.000000000 +0200 +++ new/Pebble-4.5.1/pebble/pool/thread.py 2020-02-24 20:41:54.000000000 +0100 @@ -1,5 +1,5 @@ # This file is part of Pebble. -# Copyright (c) 2013-2019, Matteo Cafasso +# Copyright (c) 2013-2020, Matteo Cafasso # Pebble is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License @@ -39,7 +39,6 @@ every time a worker is started, receiving initargs as arguments. """ - def __init__(self, max_workers=cpu_count(), max_tasks=0, initializer=None, initargs=()): super(ThreadPool, self).__init__( @@ -51,10 +50,15 @@ if self._context.state == CREATED: self._pool_manager.start() self._loops = (launch_thread(None, pool_manager_loop, - self._pool_manager),) + True, self._pool_manager),) self._context.state = RUNNING + def _stop_pool(self): + for loop in self._loops: + loop.join() + self._pool_manager.stop() + def schedule(self, function, args=(), kwargs={}): """Schedules *function* to be run the Pool. @@ -143,7 +147,7 @@ def create_workers(self): for _ in range(self.context.workers - len(self.workers)): - worker = launch_thread(None, worker_thread, self.context) + worker = launch_thread(None, worker_thread, True, self.context) self.workers.append(worker) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/setup.py new/Pebble-4.5.1/setup.py --- old/Pebble-4.4.1/setup.py 2019-02-09 12:10:58.000000000 +0100 +++ new/Pebble-4.5.1/setup.py 2020-03-08 14:45:44.000000000 +0100 @@ -3,16 +3,21 @@ from setuptools import setup, find_packages +CWD = os.path.dirname(__file__) + + def read(fname): - return open(os.path.join(os.path.dirname(__file__), fname)).read() + return open(os.path.join(CWD, fname)).read() def package_version(): """Get the package version via Git Tag.""" - version_path = os.path.join(os.path.dirname(__file__), 'version.py') + version_path = os.path.join(CWD, 'version.py') + init_path = os.path.join(CWD, 'pebble', '__init__.py') version = read_version(version_path) write_version(version_path, version) + write_version(init_path, version, mode='a') return version @@ -20,15 +25,15 @@ def read_version(path): try: return subprocess.check_output(('git', 'describe')).rstrip().decode() - except subprocess.CalledProcessError: + except Exception: with open(path) as version_file: version_string = version_file.read().split('=')[-1] return version_string.strip().replace('"', '') -def write_version(path, version): +def write_version(path, version, mode='w'): msg = '"""Versioning controlled via Git Tag, check setup.py"""' - with open(path, 'w') as version_file: + with open(path, mode) as version_file: version_file.write(msg + os.linesep + os.linesep + '__version__ = "{}"'.format(version) + os.linesep) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/test/test_concurrent_process_fork.py new/Pebble-4.5.1/test/test_concurrent_process_fork.py --- old/Pebble-4.4.1/test/test_concurrent_process_fork.py 2019-09-29 18:45:18.000000000 +0200 +++ new/Pebble-4.5.1/test/test_concurrent_process_fork.py 2020-01-25 11:41:23.000000000 +0100 @@ -77,6 +77,13 @@ @concurrent.process(name='decorator_kwarg') def name_keyword_decorated_and_argument(name='bar'): return (multiprocessing.current_process().name, name) + + +@concurrent.process(daemon=False) +def daemon_keyword_decorated(): + return multiprocessing.current_process().daemon + + class ProcessConcurrentObj: a = 0 @@ -234,4 +241,9 @@ dec_out, fn_out = f.result() self.assertEqual(dec_out, "decorator_kwarg") self.assertEqual(fn_out, "function_kwarg") - \ No newline at end of file + + def test_daemon_keyword_decorated(self): + """Daemon keyword can be passed to a decorated function and spawns correctly.""" + f = daemon_keyword_decorated() + dec_out = f.result() + self.assertEqual(dec_out, False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/test/test_concurrent_process_forkserver.py new/Pebble-4.5.1/test/test_concurrent_process_forkserver.py --- old/Pebble-4.4.1/test/test_concurrent_process_forkserver.py 2019-02-10 00:28:12.000000000 +0100 +++ new/Pebble-4.5.1/test/test_concurrent_process_forkserver.py 2020-01-25 11:41:23.000000000 +0100 @@ -64,6 +64,11 @@ time.sleep(10) +@concurrent.process(daemon=False) +def daemon_keyword_decorated(): + return multiprocessing.current_process().daemon + + class ProcessConcurrentObj: a = 0 @@ -190,3 +195,9 @@ future = sigterm_decorated() with self.assertRaises(TimeoutError): future.result() + + def test_daemon_keyword_decorated(self): + """Daemon keyword can be passed to a decorated function and spawns correctly.""" + f = daemon_keyword_decorated() + dec_out = f.result() + self.assertEqual(dec_out, False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/test/test_concurrent_process_spawn.py new/Pebble-4.5.1/test/test_concurrent_process_spawn.py --- old/Pebble-4.4.1/test/test_concurrent_process_spawn.py 2019-02-10 00:42:17.000000000 +0100 +++ new/Pebble-4.5.1/test/test_concurrent_process_spawn.py 2020-01-25 11:41:23.000000000 +0100 @@ -64,6 +64,11 @@ time.sleep(10) +@concurrent.process(daemon=False) +def daemon_keyword_decorated(): + return multiprocessing.current_process().daemon + + class ProcessConcurrentObj: a = 0 @@ -190,3 +195,9 @@ future = sigterm_decorated() with self.assertRaises(TimeoutError): future.result() + + def test_daemon_keyword_decorated(self): + """Daemon keyword can be passed to a decorated function and spawns correctly.""" + f = daemon_keyword_decorated() + dec_out = f.result() + self.assertEqual(dec_out, False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/test/test_concurrent_thread.py new/Pebble-4.5.1/test/test_concurrent_thread.py --- old/Pebble-4.4.1/test/test_concurrent_thread.py 2019-09-29 18:45:18.000000000 +0200 +++ new/Pebble-4.5.1/test/test_concurrent_thread.py 2020-01-25 11:41:23.000000000 +0100 @@ -30,6 +30,11 @@ return (threading.current_thread().name, name) +@concurrent.thread(daemon=False) +def daemon_keyword_decorated(): + return threading.current_thread().daemon + + class ThreadConcurrentObj: a = 0 @@ -132,3 +137,9 @@ dec_out, fn_out = f.result() self.assertEqual(dec_out, "decorator_kwarg") self.assertEqual(fn_out, "function_kwarg") + + def test_daemon_keyword_decorated(self): + """Daemon keyword can be passed to a decorated function and spawns correctly.""" + f = daemon_keyword_decorated() + dec_out = f.result() + self.assertEqual(dec_out, False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/test/test_pebble.py new/Pebble-4.5.1/test/test_pebble.py --- old/Pebble-4.4.1/test/test_pebble.py 2019-09-29 18:45:18.000000000 +0200 +++ new/Pebble-4.5.1/test/test_pebble.py 2020-01-25 11:41:23.000000000 +0100 @@ -127,20 +127,20 @@ class TestWaitForThreads(unittest.TestCase): def test_waitforthreads_single(self): """Waitforthreads waits for a single thread.""" - thread = launch_thread(None, thread_function, 0.01) + thread = launch_thread(None, thread_function, True, 0.01) self.assertEqual(list(waitforthreads([thread]))[0], thread) def test_waitforthreads_multiple(self): """Waitforthreads waits for multiple threads.""" threads = [] for _ in range(5): - threads.append(launch_thread(None, thread_function, 0.01)) + threads.append(launch_thread(None, thread_function, True, 0.01)) time.sleep(0.1) self.assertEqual(list(waitforthreads(threads)), threads) def test_waitforthreads_timeout(self): """Waitforthreads returns empty list if timeout.""" - thread = launch_thread(None, thread_function, 0.1) + thread = launch_thread(None, thread_function, True, 0.1) self.assertEqual(list(waitforthreads([thread], timeout=0.01)), []) def test_waitforthreads_restore(self): @@ -149,7 +149,7 @@ expected = threading.get_ident else: expected = threading._get_ident - thread = launch_thread(None, thread_function, 0) + thread = launch_thread(None, thread_function, True, 0) time.sleep(0.01) waitforthreads([thread]) if hasattr(threading, 'get_ident'): @@ -160,7 +160,7 @@ def test_waitforthreads_spurious(self): """Waitforthreads tolerates spurious wakeups.""" lock = threading.RLock() - thread = launch_thread(None, spurious_wakeup_function, 0.1, lock) + thread = launch_thread(None, spurious_wakeup_function, True, 0.1, lock) self.assertEqual(list(waitforthreads([thread])), [thread]) @@ -170,24 +170,24 @@ def test_waitforqueues_single(self): """Waitforqueues waits for a single queue.""" - launch_thread(None, queue_function, self.queues, 0, 0.01) + launch_thread(None, queue_function, True, self.queues, 0, 0.01) self.assertEqual(list(waitforqueues(self.queues))[0], self.queues[0]) def test_waitforqueues_multiple(self): """Waitforqueues waits for multiple queues.""" for index in range(3): - launch_thread(None, queue_function, self.queues, index, 0.01) + launch_thread(None, queue_function, True, self.queues, index, 0.01) time.sleep(0.1) self.assertEqual(list(waitforqueues(self.queues)), self.queues) def test_waitforqueues_timeout(self): """Waitforqueues returns empty list if timeout.""" - launch_thread(None, queue_function, self.queues, 0, 0.1) + launch_thread(None, queue_function, True, self.queues, 0, 0.1) self.assertEqual(list(waitforqueues(self.queues, timeout=0.01)), []) def test_waitforqueues_restore(self): """Waitforqueues Queue object is restored to original one.""" expected = sorted(dir(self.queues[0])) - launch_thread(None, queue_function, self.queues, 0, 0) + launch_thread(None, queue_function, True, self.queues, 0, 0) waitforqueues(self.queues) self.assertEqual(sorted(dir(self.queues[0])), expected) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Pebble-4.4.1/version.py new/Pebble-4.5.1/version.py --- old/Pebble-4.4.1/version.py 2019-12-22 22:02:31.000000000 +0100 +++ new/Pebble-4.5.1/version.py 2020-03-08 14:54:43.000000000 +0100 @@ -1,3 +1,3 @@ """Versioning controlled via Git Tag, check setup.py""" -__version__ = "4.4.1" +__version__ = "4.5.1"