diff --git a/src/stampede/worker.py b/src/stampede/worker.py index a9dde5d..f8ef50f 100644 --- a/src/stampede/worker.py +++ b/src/stampede/worker.py @@ -42,13 +42,13 @@ def __str__(self): class SingleInstanceMeta(type): __inst = None - def __call__(cls, path): + def __call__(cls, path, *args, **kwargs): if cls.__inst is not None: raise RuntimeError("Only 1 instance allowed!") lock = FileLock(path) if lock.acquire(): - inst = cls.__inst = super(SingleInstanceMeta, cls).__call__(path) + inst = cls.__inst = super(SingleInstanceMeta, cls).__call__(path, *args, **kwargs) return inst else: return StampedeStub() diff --git a/tests/test_worker.py b/tests/test_worker.py index bf7dd8a..7078da2 100644 --- a/tests/test_worker.py +++ b/tests/test_worker.py @@ -178,6 +178,20 @@ def test_empty_request(): def test_double_instance(): from stampede import StampedeWorker + StampedeWorker.__SingleInstanceMeta_inst = None StampedeWorker(helper.PATH) with pytest.raises(RuntimeError): StampedeWorker(helper.PATH) + + +def test_subclassing(): + from stampede import StampedeWorker + + class MyWorker(StampedeWorker): + def __init__(self, path, config): + super(MyWorker, self).__init__(path) + self.config = config + + MyWorker.__SingleInstanceMeta_inst = None + worker = MyWorker(helper.PATH, 'foobar') + assert worker.config == 'foobar'