Recipy and Third-Party Package Issues

Issues encountered during test framework development and how the test framework has been configured to get round these issues.

No information logged by recipy (recipy code is commented-out)

All these tests are marked as skipped.

PIL operations

To replicate:

python -m integration_test.packages.run_pil image_open
recipy latest
Run ID: cf695a6c-e9f0-4f4b-896f-9fa64127e2e8
Created by ubuntu on 2016-10-26 11:59:04 UTC
Ran /home/ubuntu/recipy/integration_test/packages/run_pil.py using /home/ubuntu/anaconda2/bin/python
Using command-line arguments: image_open
Git: commit 5dc58a3cf3432441c83fd9899768eb9b63583208, in repo /home/ubuntu/recipy, with origin https://mikej888@github.com/mikej888/recipy
Environment: Linux-3.19.0-25-generic-x86_64-with-debian-jessie-sid, python 2.7.12 |Anaconda custom (64-bit)| (default, Jul  2 2016, 17:42:40)
Libraries: recipy v0.3.0
Inputs: none
Outputs: none

skimage operations

To replicate:

python -m integration_test.packages.run_skimage io_imread
recipy latest
Run ID: 10c803f7-3741-4008-8548-2f8d7ba4462c
Created by ubuntu on 2016-10-26 11:57:07 UTC
Ran /home/ubuntu/recipy/integration_test/packages/run_skimage.py using /home/ubuntu/anaconda2/bin/python
Using command-line arguments: io_imread
Git: commit 5dc58a3cf3432441c83fd9899768eb9b63583208, in repo /home/ubuntu/recipy, with origin https://mikej888@github.com/mikej888/recipy
Environment: Linux-3.19.0-25-generic-x86_64-with-debian-jessie-sid, python 2.7.12 |Anaconda custom (64-bit)| (default, Jul  2 2016, 17:42:40)
Libraries: recipy v0.3.0
Inputs: none
Outputs: none

Inaccurate Information Logged by Recipy

None.

Bugs Arising within Recipy Logging

All these tests are marked as skipped.

recipy.open

To replicate:

python -m integration_test.packages.run_python open

Under Python 3 this fails with:

recipy run inserted, with ID 9abe4113-5158-4dcb-8fe8-afd1b1f6505e

Traceback (most recent call last):
  File "c:\Users\mjj\AppData\Local\Continuum\Anaconda3\lib\runpy.py", line 170,in _run_module_as_main
    "__main__", mod_spec)
  File "c:\Users\mjj\AppData\Local\Continuum\Anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\Users\mjj\Local Documents\recipy\recipy\integration_test\packages\run_python.py", line 45, in <module>
    PythonSample().invoke(sys.argv)
  File "c:\Users\mjj\Local Documents\recipy\recipy\integration_test\packages\base.py", line 57, in invoke
    function()
  File "c:\Users\mjj\Local Documents\recipy\recipy\integration_test\packages\run_python.py", line 39, in open
    with recipy.open('out.txt', 'w') as f:
  File "c:\Users\mjj\Local Documents\recipy\recipy\recipy\utils.py", line 20, in open
    mode = kwargs['mode']
KeyError: 'mode'

Under Python 2 this fails with:

recipy run inserted, with ID 5d80b88b-0d56-428d-b9e0-d95eca423044

Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_python.py", line 42, in <module>
    python_sample.invoke(sys.argv)
  File "integration_test/packages/base.py", line 57, in invoke
    function()
  File "/home/ubuntu/recipy/integration_test/packages/run_python.py", line 35, in open
    with recipy.open('out.txt', 'w') as f:
  File "recipy/utils.py", line 35, in open
    log_output(args[0], 'recipy.open')
  File "recipy/log.py", line 153, in log_output
    db.update(append("libraries", get_version(source), no_duplicates=True), eids=[RUN_ID])
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 377, in update
    cond, eids
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 230, in process_elements
    data = self._read()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 277, in _read
    return self._storage.read()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 31, in read
    raw_data = (self._storage.read() or {})[self._table_name]
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb_serialization/__init__.py", line 139, in read
    data = self.storage.read()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/storages.py", line 93, in read
    self._handle.seek(0, 2)
ValueError: I/O operation on closed file

bs4.beautifulsoup.prettify

To replicate:

python -m integration_test.packages.run_bs4 beautifulsoup
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_bs4.py", line 53, in <module>
    Bs4Sample().invoke(sys.argv)
  File "integration_test/packages/base.py", line 57, in invoke
    function()
  File "/home/ubuntu/recipy/integration_test/packages/run_bs4.py", line 49, in beautifulsoup
    print((soup.prettify()))
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/bs4/element.py", line 1160, in prettify
    return self.decode(True, formatter=formatter)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/bs4/__init__.py", line 439, in decode
    return prefix + super(BeautifulSoup, self).decode(
TypeError: super() argument 1 must be type, not FunctionWrapper

pandas.Panel.to_excel

To replicate:

python -m integration_test.packages.run_pandas panel_to_excel
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_pandas.py", line 355, in <module>
    PandasSample().invoke(sys.argv)
  File "integration_test/packages/base.py", line 57, in invoke
    function()
  File "/home/ubuntu/recipy/integration_test/packages/run_pandas.py", line 195, in panel_to_excel
    panel.to_excel(file_name)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/pandas/core/panel.py", line 460, in to_excel
    df.to_excel(writer, name, **kwargs)
  File "recipyCommon/utils.py", line 90, in f
    function(args[arg_loc], source)
  File "recipy/log.py", line 139, in log_output
    filename = os.path.abspath(filename)
  File "/home/ubuntu/anaconda2/lib/python2.7/posixpath.py", line 360, in abspath
    if not isabs(path):
  File "/home/ubuntu/anaconda2/lib/python2.7/posixpath.py", line 54, in isabs
    return s.startswith('/')
AttributeError: '_XlwtWriter' object has no attribute 'startswith'

nibabel.minc2.Minc2Image.from_filename

To replicate:

python -m integration_test.packages.run_nibabel minc2_from_filename
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 302, in <module>
    NibabelSample().invoke(sys.argv)
  File "integration_test/packages/base.py", line 57, in invoke
    function()
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 143, in minc2_from_filename
    data = nib.minc2.Minc2Image.from_filename(file_name)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/spatialimages.py", line 699, in from_filename
    return klass.from_file_map(file_map)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/minc1.py", line 299, in from_file_map
    minc_file = Minc1File(netcdf_file(fobj))
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/externals/netcdf.py", line 230, in __init__
    self._read()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/externals/netcdf.py", line 513, in _read
    self.filename)
TypeError: Error: None is not a valid NetCDF 3 file

nibabel.Nifti2Image.from_filename

To replicate:

python -m integration_test.packages.run_nibabel nifti2_from_filename
sizeof_hdr should be 348; set sizeof_hdr to 348
data code 0 not supported; not attempting fix
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 302, in <module>
    NibabelSample().invoke(sys.argv)
  File "integration_test/packages/base.py", line 57, in invoke
    function()
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 182, in nifti2_from_filename
    data = nib.Nifti2Image.from_filename(file_name)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/keywordonly.py", line 16, in wrapper
    return func(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/analyze.py", line 986, in from_filename
    return klass.from_file_map(file_map, mmap=mmap)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/keywordonly.py", line 16, in wrapper
    return func(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/analyze.py", line 947, in from_file_map
    header = klass.header_class.from_fileobj(hdrf)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/nifti1.py", line 594, in from_fileobj
    hdr = klass(raw_str, endianness, check)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/nifti1.py", line 577, in __init__
    check)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/analyze.py", line 252, in __init__
    super(AnalyzeHeader, self).__init__(binaryblock, endianness, check)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/wrapstruct.py", line 176, in __init__
    self.check_fix()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/wrapstruct.py", line 361, in check_fix
    report.log_raise(logger, error_level)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/batteryrunners.py", line 275, in log_raise
    raise self.error(self.problem_msg)
nibabel.spatialimages.HeaderDataError: data code 0 not supported

sklearn.load_svmlight_file and sklearn.dump_svmlight_file

To replicate:

python -m integration_test.packages.run_sklearn load_svmlight_file

Under Python 3 this fails with:

Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/lib/python3.5/runpy.py", line 184, in _run_module_as_main
    "__main__", mod_spec)
  File "/home/ubuntu/anaconda3/lib/python3.5/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/ubuntu/recipy/integration_test/packages/run_sklearn.py", line 16, in <module>
    from sklearn import datasets
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
  File "/home/ubuntu/recipy/recipy/PatchImporter.py", line 52, in load_module
    mod = self.patch(mod)
  File "/home/ubuntu/recipy/recipy/PatchSimple.py", line 25, in patch
    patch_function(mod, f, self.input_wrapper)
  File "/home/ubuntu/recipy/recipyCommon/utils.py", line 82, in patch_function
    setattr(mod, old_f_name, recursive_getattr(mod, function))
  File "/home/ubuntu/recipy/recipyCommon/utils.py", line 54, in recursive_getattr
    prev_part = getattr(prev_part, part)
AttributeError: module 'sklearn' has no attribute 'datasets'

Under Python 2 this fails with:

Traceback (most recent call last):
  File "recipy/log.py", line 165, in log_exception
    db.update({"exception": exception}, eids=[RUN_ID])
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 382, in update
    cond, eids
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 235, in process_elements
    func(data, eid)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 381, in <lambda>
    lambda data, eid: data[eid].update(fields),
KeyError: 316

Original exception was:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_sklearn.py", line 16, in <module>
    from sklearn import datasets
  File "recipy/PatchImporter.py", line 52, in load_module
    mod = self.patch(mod)
  File "recipy/PatchSimple.py", line 25, in patch
    patch_function(mod, f, self.input_wrapper)
  File "recipyCommon/utils.py", line 82, in patch_function
    setattr(mod, old_f_name, recursive_getattr(mod, function))
  File "recipyCommon/utils.py", line 54, in recursive_getattr
    prev_part = getattr(prev_part, part)
AttributeError: 'module' object has no attribute 'datasets'
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "recipy/log.py", line 244, in hash_outputs
    for filename in run.get('outputs')]
AttributeError: 'NoneType' object has no attribute 'get'
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "recipy/log.py", line 231, in log_exit
    db.update({'exit_date': exit_date}, eids=[RUN_ID])
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 382, in update
    cond, eids
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 235, in process_elements
    func(data, eid)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 381, in <lambda>
    lambda data, eid: data[eid].update(fields),
KeyError: 316
Error in sys.exitfunc:
Error in sys.excepthook:
Traceback (most recent call last):
  File "recipy/log.py", line 165, in log_exception
    db.update({"exception": exception}, eids=[RUN_ID])
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 382, in update
    cond, eids
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 235, in process_elements
    func(data, eid)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 381, in <lambda>
    lambda data, eid: data[eid].update(fields),
KeyError: 316

Original exception was:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "recipy/log.py", line 231, in log_exit
    db.update({'exit_date': exit_date}, eids=[RUN_ID])
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 382, in update
    cond, eids
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 235, in process_elements
    func(data, eid)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tinydb/database.py", line 381, in <lambda>
    lambda data, eid: data[eid].update(fields),
KeyError: 316

Operations Not Implemented by Packages

All these tests are marked as skipped.

nibabel.minc1.Minc1Image.to_filename

To replicate:

python -m integration_test.packages.run_nibabel minc1_to_filename
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 302, in <module>
    NibabelSample().invoke(sys.argv)
  File "integration_test/packages/base.py", line 57, in invoke
    function()
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 134, in minc1_to_filename
    img.to_filename(file_name)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/spatialimages.py", line 781, in to_filename
    self.to_file_map()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/spatialimages.py", line 790, in to_file_map
    raise NotImplementedError
NotImplementedError

nibabel.minc2.Minc2Image.to_filename

To replicate:

python -m integration_test.packages.run_nibabel minc2_to_filename
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 302, in <module>
    NibabelSample().invoke(sys.argv)
  File "integration_test/packages/base.py", line 57, in invoke
    function()
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 154, in minc2_to_filename
    img.to_filename(file_name)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/spatialimages.py", line 781, in to_filename
    self.to_file_map()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/spatialimages.py", line 790, in to_file_map
    raise NotImplementedError
NotImplementedError

nibabel.parrec.PARRECImage.to_filename

To replicate:

python -m integration_test.packages.run_nibabel parrec_to_filename
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/ubuntu/anaconda2/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 302, in <module>
    NibabelSample().invoke(sys.argv)
  File "integration_test/packages/base.py", line 57, in invoke
    function()
  File "/home/ubuntu/recipy/integration_test/packages/run_nibabel.py", line 217, in parrec_to_filename
    img.to_filename(par_file_name)
  File "recipyCommon/utils.py", line 91, in f
    return wrapped(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/spatialimages.py", line 781, in to_filename
    self.to_file_map()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/nibabel/spatialimages.py", line 790, in to_file_map
    raise NotImplementedError
NotImplementedError

Using py.test and recipy

An issue that does not affect the test framework, but may affect future test development is that recipy and py.test do not integrate. For example, given test_sample.py:

class TestSample:

    def test_sample(self):
        pass

Running:

py.test test_sample.py

gives:

============================= test session starts =============================
platform win32 -- Python 3.5.1, pytest-3.0.2, py-1.4.31, pluggy-0.3.1
rootdir: c:\Users\mjj\Local Documents, inifile:
collected 1 items

test_sample.py .

========================== 1 passed in 0.02 seconds ===========================

Adding:

import recipy

Running py.test gives:

============================= test session starts =============================
platform win32 -- Python 3.5.1, pytest-3.0.2, py-1.4.31, pluggy-0.3.1
rootdir: c:\Users\mjj\Local Documents, inifile:
collected 0 items / 1 errors

=================================== ERRORS ====================================
_______________________ ERROR collecting test_sample.py _______________________
..\appdata\local\continuum\anaconda3\lib\site-packages\_pytest\python.py:209: in fget
    return self._obj
E   AttributeError: 'Module' object has no attribute '_obj'

During handling of the above exception, another exception occurred:
test_sample.py:1: in <module>
    import recipy
..\appdata\local\continuum\anaconda3\lib\site-packages\recipy-0.3.0-py3.5.egg\recipy\__init__.py:12: in <module>
    log_init()
..\appdata\local\continuum\anaconda3\lib\site-packages\recipy-0.3.0-py3.5.egg\recipy\log.py:74: in log_init
    add_git_info(run, scriptpath)
..\appdata\local\continuum\anaconda3\lib\site-packages\recipy-0.3.0-py3.5.egg\recipyCommon\version_control.py:30: in add_git_info
    repo = Repo(scriptpath, search_parent_directories=True)
..\appdata\local\continuum\anaconda3\lib\site-packages\gitpython-2.0.8-py3.5.egg\git\repo\base.py:139: in __init__
    raise NoSuchPathError(epath)
E   git.exc.NoSuchPathError: c:\Users\mjj\AppData\Local\Continuum\Anaconda3\Scripts\py.test
!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!
=========================== 1 error in 4.55 seconds ===========================
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "c:\users\mjj\appdata\local\continuum\anaconda3\lib\site-packages\recipy-0.3.0-py3.5.egg\recipy\log.py", line 242, in hash_outputs
    run = db.get(eid=RUN_ID)
  File "c:\users\mjj\appdata\local\continuum\anaconda3\lib\site-packages\tinydb-3.2.1-py3.5.egg\tinydb\database.py", line 432, in get
TypeError: unhashable type: 'dict'
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "c:\users\mjj\appdata\local\continuum\anaconda3\lib\site-packages\recipy-0.3.0-py3.5.egg\recipy\log.py", line 231, in log_exit
    db.update({'exit_date': exit_date}, eids=[RUN_ID])
  File "c:\users\mjj\appdata\local\continuum\anaconda3\lib\site-packages\tinydb-3.2.1-py3.5.egg\tinydb\database.py", line 382, in update
  File "c:\users\mjj\appdata\local\continuum\anaconda3\lib\site-packages\tinydb-3.2.1-py3.5.egg\tinydb\database.py", line 235, in process_elements
  File "c:\users\mjj\appdata\local\continuum\anaconda3\lib\site-packages\tinydb-3.2.1-py3.5.egg\tinydb\database.py", line 381, in <lambda>
TypeError: unhashable type: 'dict'