taurus-org / taurus

Moved to https://gitlab.com/taurus-org/taurus
http://taurus-scada.org
43 stars 46 forks source link

'Failed attempt to initialize value' message when closing a form #1152

Open vallsv opened 3 years ago

vallsv commented 3 years ago

Here is few logs i have received when i was testing #1151.

The last log is i guess the most important. Cause it sounds like an issue in Taurus.

Hope it is useful.

MainThread     INFO     2020-09-15 10:00:41,906 UnitLessLineEdit: Failed attempt to initialize value: DevFailed(args = (DevError(desc = 'It is currently not allowed to read attribute lastDatafile', origin = 'Device_3Impl::read_attributes_no_except', reason = 'API_AttrNotAllowed', severity = tango._tango.ErrSeverity.ERR), DevError(desc = 'Failed to read_attribute on device id16na/metadata/ingest, attribute lastDatafile', origin = 'DeviceProxy::read_attribute()', reason = 'API_AttributeFailed', severity = tango._tango.ErrSeverity.ERR)))

MainThread     INFO     2020-09-15 10:00:41,945 UnitLessLineEdit: Failed attempt to initialize value: DevFailed(args = (DevError(desc = 'It is currently not allowed to read attribute metadataFile', origin = 'Device_3Impl::read_attributes_no_except', reason = 'API_AttrNotAllowed', severity = tango._tango.ErrSeverity.ERR), DevError(desc = 'Failed to read_attribute on device id16na/metadata/ingest, attribute metadataFile', origin = 'DeviceProxy::read_attribute()', reason = 'API_AttributeFailed', severity = tango._tango.ErrSeverity.ERR)))

MainThread     INFO     2020-09-15 10:01:02,786 UnitLessLineEdit.tango://tiktak.esrf.fr:20000/id16na/metadata/ingest/metadataFile#wvalue.magnitude: Failed attempt to initialize value: DevFailed(args = (DevError(desc = 'It is currently not allowed to read attribute metadataFile', origin = 'Device_3Impl::read_attributes_no_except', reason = 'API_AttrNotAllowed', severity = tango._tango.ErrSeverity.ERR), DevError(desc = 'Failed to read_attributes on device id16na/metadata/ingest, attribute metadatafile', origin = 'DeviceProxy::read_attributes_reply()', reason = 'API_AttributeFailed', severity = tango._tango.ErrSeverity.ERR)))

MainThread     INFO     2020-09-15 10:01:04,859 UnitLessLineEdit.tango://tiktak.esrf.fr:20000/id16na/metadata/ingest/metadataFile#wvalue: Failed attempt to initialize value: AttributeError("'NoneType' object has no attribute 'read'")
cpascual commented 3 years ago

I am afraid I cannot tell much from these logs without a way of reproducing, or at least some more context

vallsv commented 3 years ago

I was in fact triggered when i close taurus form

vallsv commented 3 years ago

I put a breakpoint on the file tauruslineedit

--- a/lib/taurus/qt/qtgui/input/tauruslineedit.py
+++ b/lib/taurus/qt/qtgui/input/tauruslineedit.py
@@ -145,6 +145,8 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
                 self._updateValidator(value)
                 self.setValue(value.wvalue)
             except Exception as e:
+                if self.getModelObj() is None:
+                    breakpoint()
                 self.info('Failed attempt to initialize value: %r', e)

Here is few information

> /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/input/tauruslineedit.py(150)handleEvent()
-> self.info('Failed attempt to initialize value: %r', e)
(Pdb) evt_src, evt_type, evt_value
(TangoAttribute(tango://tiktak.esrf.fr:20000/id16na/metadata/ingest/lastDatafile), 0, None)
(Pdb) self.getModelObj()
(Pdb) (self.getModelObj(),)
(None,)

And the backtrace

(Pdb) bt
  /users/valls/Software/miniconda3/envs/taurusenv/bin/taurus(33)<module>()
-> sys.exit(load_entry_point('taurus', 'console_scripts', 'taurus')())
  /users/valls/workspace/id16/taurus.git/lib/taurus/cli/cli.py(132)main()
-> taurus_cmd()
  /users/valls/Software/miniconda3/envs/taurusenv/lib/python3.8/site-packages/click/core.py(829)__call__()
-> return self.main(*args, **kwargs)
  /users/valls/Software/miniconda3/envs/taurusenv/lib/python3.8/site-packages/click/core.py(782)main()
-> rv = self.invoke(ctx)
  /users/valls/Software/miniconda3/envs/taurusenv/lib/python3.8/site-packages/click/core.py(1259)invoke()
-> return _process_result(sub_ctx.command.invoke(sub_ctx))
  /users/valls/Software/miniconda3/envs/taurusenv/lib/python3.8/site-packages/click/core.py(1066)invoke()
-> return ctx.invoke(self.callback, **ctx.params)
  /users/valls/Software/miniconda3/envs/taurusenv/lib/python3.8/site-packages/click/core.py(610)invoke()
-> return callback(*args, **kwargs)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusform.py(1235)form_cmd()
-> sys.exit(app.exec_())
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/application/taurusapplication.py(358)exec_()
-> ret = Qt.QApplication.exec_(*args, **kwargs)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/button/taurusbutton.py(80)closeEvent()
-> self.setWidget(None)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/button/taurusbutton.py(61)setWidget()
-> self._widget.setModel(None)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py(314)setModel()
-> self.detach()
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py(420)detach()
-> detach_recursive(self)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py(410)detach_recursive()
-> detach_recursive(t)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py(410)detach_recursive()
-> detach_recursive(t)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py(410)detach_recursive()
-> detach_recursive(t)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py(410)detach_recursive()
-> detach_recursive(t)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py(415)detach_recursive()
-> obj.setModel([] if isinstance(obj, TaurusForm) else '')
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusvalue.py(1256)setModel()
-> TaurusBaseWidget.setModel(self, model)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(1184)setModel()
-> self.setModelCheck(model)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(1542)setModelCheck()
-> TaurusBaseComponent.setModelCheck(self, model, check)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(1217)setModelCheck()
-> self.setModelName(model, parent_widget)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(594)setModelName()
-> self._detach()
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(1043)_detach()
-> self.fireEvent(m, TaurusEventType.Change, None)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(388)fireEvent()
-> self.taurusEvent.emit(evt_src, evt_type, evt_value)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(425)filterEvent()
-> self.handleEvent(*evt)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusvalue.py(1276)handleEvent()
-> self.updateWriteWidget()
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusvalue.py(932)updateWriteWidget()
-> self._writeWidget.setModel(self.getFullModelName())
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/panel/taurusvalue.py(212)setModel()
-> return TaurusValueLineEdit.setModel(self, None)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(1184)setModel()
-> self.setModelCheck(model)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(1542)setModelCheck()
-> TaurusBaseComponent.setModelCheck(self, model, check)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(1217)setModelCheck()
-> self.setModelName(model, parent_widget)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(594)setModelName()
-> self._detach()
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(1043)_detach()
-> self.fireEvent(m, TaurusEventType.Change, None)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(388)fireEvent()
-> self.taurusEvent.emit(evt_src, evt_type, evt_value)
  /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/base/taurusbase.py(425)filterEvent()
-> self.handleEvent(*evt)
> /users/valls/workspace/id16/taurus.git/lib/taurus/qt/qtgui/input/tauruslineedit.py(150)handleEvent()
-> self.info('Failed attempt to initialize value: %r', e)

This always happen when i close the taurus form of this specific device. self.getModelObj() can be None.

cpascual commented 3 years ago

Ok, it looks like the issue is caused during the closing of the application after the model has already been removed. I guess we could simply handle the getModelObj()-->None case here and , but before that it would be nice to understand why we see it in this case.

@vallsv , do you think it would be possible to reproduce the issue with some simple device and using strictly taurus widgets?

vallsv commented 3 years ago

Here i was only using taurus form app. But i guess the Tango attributes also have to raise an exception when we try to read it (the API_AttrNotAllowed we can see on the logs).