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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions