Skip to content
This repository has been archived by the owner on Mar 17, 2021. It is now read-only.

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

Open
vallsv opened this issue Sep 15, 2020 · 5 comments
Open

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

vallsv opened this issue Sep 15, 2020 · 5 comments

Comments

@vallsv
Copy link

vallsv commented Sep 15, 2020

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
Copy link
Member

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

@vallsv
Copy link
Author

vallsv commented Sep 15, 2020

I was in fact triggered when i close taurus form

@vallsv
Copy link
Author

vallsv commented Sep 15, 2020

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
Copy link
Member

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?

@cpascual cpascual changed the title NoneType object has no attribute 'read' 'Failed attempt to initialize value' message when closing a form Sep 15, 2020
@vallsv
Copy link
Author

vallsv commented Sep 15, 2020

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).

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants