Skip to content

Bug When Creating Diff With Non-Serializable Object #334

@jdrew82

Description

@jdrew82

Environment

  • Python version: 3.10
  • DiffSync version: 2.2.0

Expected Behavior

I expect the Diff to be created without issue.

Observed Behavior

I observed a TypeError exception being thrown:

Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/celery/app/trace.py", line 479, in trace_task
    R = retval = fun(*args, **kwargs)
                 ~~~^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/celery/app/trace.py", line 779, in __protected_call__
    return self.run(*args, **kwargs)
           ~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/nautobot/extras/jobs.py", line 1312, in run_job
    result = job(*args, **kwargs)
  File "/usr/local/lib/python3.13/site-packages/nautobot/extras/jobs.py", line 186, in __call__
    return self.run(*args, **deserialized_kwargs)
           ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/nautobot/git/itd_nautobot_jobs/jobs/netsuite_sync/data_source.py", line 139, in run
    super().run(*args, **kwargs)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/nautobot_ssot/jobs/base.py", line 640, in run
    self.sync_data(self.memory_profiling)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/nautobot_ssot/jobs/base.py", line 422, in sync_data
    self.load_source_adapter()
    ~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/opt/nautobot/git/itd_nautobot_jobs/jobs/netsuite_sync/data_source.py", line 88, in load_source_adapter
    self.source_adapter = JiraAdapter(
                          ~~~~~~~~~~~^
        job=self,
        ^^^^^^^^^
    ...<3 lines>...
        tempo_client=self.tempo_client,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/local/lib/python3.13/site-packages/diffsync/__init__.py", line 487, in __new__
    meta_kwargs = deepcopy(kwargs)
  File "/usr/local/lib/python3.13/copy.py", line 137, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.13/copy.py", line 222, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
                             ~~~~~~~~^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/copy.py", line 163, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/lib/python3.13/copy.py", line 260, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/lib/python3.13/copy.py", line 137, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.13/copy.py", line 222, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
                             ~~~~~~~~^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/copy.py", line 163, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/lib/python3.13/copy.py", line 260, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/lib/python3.13/copy.py", line 137, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.13/copy.py", line 222, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
                             ~~~~~~~~^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/copy.py", line 152, in deepcopy
    rv = reductor(4)
TypeError: cannot pickle '_thread.RLock' object

Steps to Reproduce

  1. Create Diff with non-serializable object.
  2. See Exception.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions