Skip to content

Commit

Permalink
Fixing tests
Browse files Browse the repository at this point in the history
  • Loading branch information
safwanrahman committed Nov 23, 2019
1 parent b618963 commit 1fea0ec
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 17 deletions.
17 changes: 14 additions & 3 deletions celery/backends/base.py
Expand Up @@ -352,9 +352,12 @@ def is_cached(self, task_id):
return task_id in self._cache

def _get_result_meta(self, result,
state, traceback, request):
state, traceback, request, format_date=True,
encode=False):
if state in self.READY_STATES:
date_done = datetime.datetime.utcnow().isoformat()
date_done = datetime.datetime.utcnow()
if format_date:
date_done = date_done.isoformat()
else:
date_done = None

Expand Down Expand Up @@ -384,6 +387,14 @@ def _get_result_meta(self, result,
request.delivery_info else None
}

if encode:
# args and kwargs need to be encoded properly before saving
encode_needed_fields = {"args", "kwargs"}
for field in encode_needed_fields:
value = request_meta[field]
encoded_value = self.encode(value)
request_meta[field] = ensure_bytes(encoded_value)

meta.update(request_meta)

return meta
Expand Down Expand Up @@ -742,7 +753,7 @@ def _store_result(self, task_id, result, state,
traceback=None, request=None, **kwargs):
meta = self._get_result_meta(result=result, state=state,
traceback=traceback, request=request)
meta['task_id'] = task_id
meta['task_id'] = bytes_to_str(task_id)

self.set(self.get_key_for_task(task_id), self.encode(meta))
return result
Expand Down
19 changes: 7 additions & 12 deletions celery/backends/database/__init__.py
Expand Up @@ -26,12 +26,6 @@
'The database result backend requires SQLAlchemy to be installed.'
'See https://pypi.org/project/SQLAlchemy/')

try:
from dateutil.parser import parse
except ImportError: # pragma: no cover
raise ImproperlyConfigured('The database result backend '
'requires python-dateutil to be installed.')

logger = logging.getLogger(__name__)

__all__ = ('DatabaseBackend',)
Expand Down Expand Up @@ -127,6 +121,7 @@ def _store_result(self, task_id, result, state, traceback=None,
task = task and task[0]
if not task:
task = self.task_cls(task_id)
task.task_id = task_id
session.add(task)
session.flush()

Expand All @@ -137,14 +132,13 @@ def _update_result(self, task, result, state, traceback=None,
request=None):

meta = self._get_result_meta(result=result, state=state,
traceback=traceback, request=request)
# Convert date_done to python datetime
if meta['date_done']:
meta['date_done'] = parse(meta['date_done'])
traceback=traceback, request=request,
format_date=False, encode=True)

# Exclude the primary key id column as we should not set it None
# Exclude the primary key id and task_id columns
# as we should not set it None
columns = [column.name for column in self.task_cls.__table__.columns
if column.name != 'id']
if column.name not in {'id', 'task_id'}]

# Iterate through the columns name of the table
# to set the value from meta.
Expand All @@ -160,6 +154,7 @@ def _get_task_meta_for(self, task_id):
with session_cleanup(session):
task = list(session.query(self.task_cls).filter(self.task_cls.task_id == task_id))
task = task and task[0]
print(task, self.task_cls)
if not task:
task = self.task_cls(task_id)
task.status = states.PENDING
Expand Down
1 change: 0 additions & 1 deletion requirements/extras/sqlalchemy.txt
@@ -1,2 +1 @@
sqlalchemy
python-dateutil
2 changes: 1 addition & 1 deletion tox.ini
Expand Up @@ -28,7 +28,7 @@ deps=
sitepackages = False
recreate = False
commands =
unit: pytest -xv --cov=celery --cov-report=xml --cov-report term {posargs}
unit: pytest -v --cov=celery --cov-report=xml --cov-report term {posargs}
integration: pytest -xsv t/integration {posargs}
setenv =
BOTO_CONFIG = /dev/null
Expand Down

0 comments on commit 1fea0ec

Please sign in to comment.