bob1de / hass-apps

Some useful apps and snippets to empower Home Assistant and AppDaemon even more.
Apache License 2.0
85 stars 23 forks source link

[schedy] AppDaemon 4.0.0b2 deep-copies user-provided callback keyword arguments #39

Closed bachya closed 4 years ago

bachya commented 4 years ago

Loaded Schedy into a new instance of the recently-released AppDaemon 4.0.0b2 and am seeing this in the logs:

2019-10-20 20:51:54.004681 WARNING thermostat_schedule_cooling_season: ------------------------------------------------------------
2019-10-20 20:51:54.004995 WARNING thermostat_schedule_cooling_season: Unexpected error during exec_schedule() for App: thermostat_schedule_cooling_season
2019-10-20 20:51:54.005277 WARNING thermostat_schedule_cooling_season: Args: {'name': 'thermostat_schedule_cooling_season', 'id': '4392dd8aab9c48d89d7110da28dd4d57', 'callback': <bound method Room._initialize_actor_cb of <Room R:whole_house>>, 'timestamp': datetime.datetime(2019, 10, 21, 2, 51, 54, tzinfo=<UTC>), 'interval': 0, 'basetime': datetime.datetime(2019, 10, 21, 2, 51, 54, tzinfo=<UTC>), 'repeat': False, 'offset': 0, 'type': None, 'pin_app': True, 'pin_thread': 1, 'kwargs': {'actor': <Actor A:climate.thermostat_cooling>}}
2019-10-20 20:51:54.005541 WARNING thermostat_schedule_cooling_season: ------------------------------------------------------------
2019-10-20 20:51:54.006336 WARNING thermostat_schedule_cooling_season: Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/appdaemon/scheduler.py", line 139, in exec_schedule
    "kwargs": deepcopy(args["kwargs"]),
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/lib/python3.7/copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/lib/python3.7/copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/lib/python3.7/copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/lib/python3.7/copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/lib/python3.7/copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/lib/python3.7/copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/lib/python3.7/copy.py", line 150, in deepcopy
    y = copier(x, memo)
  File "/usr/local/lib/python3.7/copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/lib/python3.7/copy.py", line 169, in deepcopy
    rv = reductor(4)
TypeError: can't pickle _thread.RLock objects
bob1de commented 4 years ago

I opened an issue at the AppDaemon project regarding the underlying problem, we'll see how that goes.

Best regards Robert

acockburn commented 4 years ago

The underlying AD issue is fixed and will be available in 4.0.0

bob1de commented 4 years ago

Thanks @acockburn for getting back to this issue as well.