Skip to content

Commit 4164b64

Browse files
committed
celery extra's are not always available
1 parent 40ee732 commit 4164b64

File tree

5 files changed

+62
-23
lines changed

5 files changed

+62
-23
lines changed

src/pytest_celery/__init__.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,27 @@
2424
from pytest_celery.fixtures.broker import *
2525
from pytest_celery.fixtures.setup import *
2626
from pytest_celery.fixtures.worker import *
27-
from pytest_celery.vendors.memcached.api import *
28-
from pytest_celery.vendors.memcached.container import *
29-
from pytest_celery.vendors.memcached.fixtures import *
27+
from pytest_celery.vendors import MissingCeleryDependency
3028
from pytest_celery.vendors.rabbitmq.api import *
3129
from pytest_celery.vendors.rabbitmq.container import *
3230
from pytest_celery.vendors.rabbitmq.fixtures import *
33-
from pytest_celery.vendors.redis.backend.api import *
34-
from pytest_celery.vendors.redis.backend.fixtures import *
35-
from pytest_celery.vendors.redis.broker.api import *
36-
from pytest_celery.vendors.redis.broker.fixtures import *
37-
from pytest_celery.vendors.redis.container import *
31+
32+
try:
33+
from pytest_celery.vendors.memcached.api import *
34+
from pytest_celery.vendors.memcached.container import *
35+
from pytest_celery.vendors.memcached.fixtures import *
36+
except MissingCeleryDependency:
37+
pass
38+
39+
try:
40+
from pytest_celery.vendors.redis.backend.api import *
41+
from pytest_celery.vendors.redis.backend.fixtures import *
42+
from pytest_celery.vendors.redis.broker.api import *
43+
from pytest_celery.vendors.redis.broker.fixtures import *
44+
from pytest_celery.vendors.redis.container import *
45+
except MissingCeleryDependency:
46+
pass
47+
3848
from pytest_celery.vendors.worker.container import *
3949
from pytest_celery.vendors.worker.fixtures import *
4050

src/pytest_celery/defaults.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,35 @@
44

55
from pytest_docker_tools import network
66

7-
from pytest_celery.vendors.memcached.defaults import CELERY_MEMCACHED_BACKEND
8-
from pytest_celery.vendors.memcached.defaults import *
7+
from pytest_celery.vendors import MissingCeleryDependency
98
from pytest_celery.vendors.rabbitmq.defaults import CELERY_RABBITMQ_BROKER
109
from pytest_celery.vendors.rabbitmq.defaults import *
11-
from pytest_celery.vendors.redis.backend.defaults import CELERY_REDIS_BACKEND
12-
from pytest_celery.vendors.redis.backend.defaults import *
13-
from pytest_celery.vendors.redis.broker.defaults import CELERY_REDIS_BROKER
14-
from pytest_celery.vendors.redis.broker.defaults import *
15-
from pytest_celery.vendors.redis.defaults import *
1610
from pytest_celery.vendors.worker.defaults import CELERY_SETUP_WORKER
1711
from pytest_celery.vendors.worker.defaults import *
1812

13+
try:
14+
import pytest_celery.vendors.memcached
15+
except MissingCeleryDependency:
16+
_CELERY_MEMCACHED_BACKEND = None
17+
else:
18+
from pytest_celery.vendors.memcached.defaults import CELERY_MEMCACHED_BACKEND as _CELERY_MEMCACHED_BACKEND
19+
from pytest_celery.vendors.memcached.defaults import *
20+
21+
_CELERY_MEMCACHED_BACKEND = None # Beta support at the moment, to be used manually
22+
23+
try:
24+
import pytest_celery.vendors.redis
25+
except MissingCeleryDependency:
26+
_CELERY_REDIS_BACKEND = None
27+
_CELERY_REDIS_BROKER = None
28+
else:
29+
from pytest_celery.vendors.redis.backend.defaults import CELERY_REDIS_BACKEND as _CELERY_REDIS_BACKEND
30+
from pytest_celery.vendors.redis.backend.defaults import *
31+
from pytest_celery.vendors.redis.broker.defaults import CELERY_REDIS_BROKER as _CELERY_REDIS_BROKER
32+
from pytest_celery.vendors.redis.broker.defaults import *
33+
from pytest_celery.vendors.redis.defaults import *
34+
35+
1936
####################################################################################
2037
# Automatic components
2138
####################################################################################
@@ -29,14 +46,8 @@
2946
# Tests that do not rely on default parametrization will not be affected.
3047

3148
ALL_CELERY_WORKERS = (CELERY_SETUP_WORKER,)
32-
ALL_CELERY_BACKENDS = (
33-
CELERY_REDIS_BACKEND,
34-
# CELERY_MEMCACHED_BACKEND, # Beta support at the moment, to be used manually
35-
)
36-
ALL_CELERY_BROKERS = (
37-
CELERY_REDIS_BROKER,
38-
CELERY_RABBITMQ_BROKER,
39-
)
49+
ALL_CELERY_BACKENDS = (backend for backend in [_CELERY_REDIS_BACKEND, _CELERY_MEMCACHED_BACKEND] if backend is not None)
50+
ALL_CELERY_BROKERS = (broker for broker in [CELERY_RABBITMQ_BROKER, _CELERY_REDIS_BROKER] if broker is not None)
4051

4152
####################################################################################
4253
# Fixtures
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
11
"""See :ref:`vendors`."""
2+
3+
4+
class MissingCeleryDependency(ImportError):
5+
pass

src/pytest_celery/vendors/memcached/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,10 @@
33
44
This module is part of the Memcached Backend vendor.
55
"""
6+
7+
from .. import MissingCeleryDependency
8+
9+
try:
10+
import memcache # noqa F401
11+
except ImportError:
12+
raise MissingCeleryDependency("celery extra dependency missing: celery[pymemcache]")

src/pytest_celery/vendors/redis/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,10 @@
33
44
This module is part of the Redis vendor.
55
"""
6+
7+
from .. import MissingCeleryDependency
8+
9+
try:
10+
import redis # noqa F401
11+
except ImportError:
12+
raise MissingCeleryDependency("celery extra dependency missing: celery[redis]")

0 commit comments

Comments
 (0)