aiidalab / aiidalab-qe

AiiDAlab App for Quantum ESPRESSO
https://aiidalab-qe.readthedocs.io/
MIT License
11 stars 14 forks source link

Sharing Results from aiidalab_qe between users #664

Closed AndresOrtegaGuerrero closed 5 months ago

AndresOrtegaGuerrero commented 6 months ago

I tried to share one of my aiidalab_qe results with a collaborator that has aiidalab_qe app for them to visualize the results.

Though using verdi archive create my-calculations.aiida --nodes pk i can share the QeWorkChain node, the collaborator indeed can have access in their aiida, when using the aiidalab_qe , there seems to be issues when loading the workchain. We should create test ok these kinds to improve the logic to facilitate sharing nodes

superstar54 commented 6 months ago

This is indeed a very good use case.

Could you share the details of the issues?

AndresOrtegaGuerrero commented 6 months ago

StopIteration Traceback (most recent call last) /opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget_selection.py in findvalue(array, value, compare) 136 try: --> 137 return next(x for x in array if compare(x, value)) 138 except StopIteration:

StopIteration:

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last) /opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget_selection.py in _validate_value(self, proposal) 240 try: --> 241 return findvalue(self._options_values, value, self.equals) if value is not None else None 242 except ValueError:

/opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget_selection.py in findvalue(array, value, compare) 138 except StopIteration: --> 139 raise ValueError('%r not in array'%value) 140

ValueError: 'e54f711d-4dcc-4265-8fcd-dabd05eaa1c6' not in array

During handling of the above exception, another exception occurred:

TraitError Traceback (most recent call last) /opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget.py in _handle_msg(self, msg) 762 if 'buffer_paths' in data: 763 _put_buffers(state, data['buffer_paths'], msg['buffers']) --> 764 self.set_state(state) 765 766 # Handle a state request.

/opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget.py in set_state(self, sync_data) 631 from_json = self.trait_metadata(name, 'from_json', 632 self._trait_from_json) --> 633 self.set_trait(name, from_json(sync_data[name], self)) 634 635 def send(self, content, buffers=None):

/opt/conda/lib/python3.9/contextlib.py in exit(self, typ, value, traceback) 124 if typ is None: 125 try: --> 126 next(self.gen) 127 except StopIteration: 128 return False

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in hold_trait_notifications(self) 1500 for changes in cache.values(): 1501 for change in changes: -> 1502 self.notify_change(change) 1503 1504 def _notify_trait(self, name, old_value, new_value):

/opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget.py in notify_change(self, change) 692 # Send new state to front-end 693 self.send_state(key=name) --> 694 super(Widget, self).notify_change(change) 695 696 def repr(self):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in notify_change(self, change) 1515 def notify_change(self, change): 1516 """Notify observers of a change event""" -> 1517 return self._notify_observers(change) 1518 1519 def _notify_observers(self, event):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _notify_observers(self, event) 1562 c = getattr(self, c.name) 1563 -> 1564 c(event) 1565 1566 def _add_notifiers(self, handler, name, type):

/opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget_selection.py in _propagate_index(self, change) 233 self.label = label 234 if self.value is not value: --> 235 self.value = value 236 237 @validate('value')

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in set(self, obj, value) 730 raise TraitError('The "%s" trait is read-only.' % self.name) 731 else: --> 732 self.set(obj, value) 733 734 def _validate(self, obj, value):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in set(self, obj, value) 719 # we explicitly compare silent to True just in case the equality 720 # comparison above returns something other than True/False --> 721 obj._notify_trait(self.name, old_value, new_value) 722 723 def set(self, obj, value):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _notify_trait(self, name, old_value, new_value) 1503 1504 def _notify_trait(self, name, old_value, new_value): -> 1505 self.notify_change( 1506 Bunch( 1507 name=name,

/opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget.py in notify_change(self, change) 692 # Send new state to front-end 693 self.send_state(key=name) --> 694 super(Widget, self).notify_change(change) 695 696 def repr(self):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in notify_change(self, change) 1515 def notify_change(self, change): 1516 """Notify observers of a change event""" -> 1517 return self._notify_observers(change) 1518 1519 def _notify_observers(self, event):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _notify_observers(self, event) 1562 c = getattr(self, c.name) 1563 -> 1564 c(event) 1565 1566 def _add_notifiers(self, handler, name, type):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _update(self, change) 450 return 451 with self._busy_updating(): --> 452 setattr(self.target[0], self.target[1], self._transform(change.new)) 453 454 def unlink(self):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in set(self, obj, value) 730 raise TraitError('The "%s" trait is read-only.' % self.name) 731 else: --> 732 self.set(obj, value) 733 734 def _validate(self, obj, value):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in set(self, obj, value) 719 # we explicitly compare silent to True just in case the equality 720 # comparison above returns something other than True/False --> 721 obj._notify_trait(self.name, old_value, new_value) 722 723 def set(self, obj, value):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _notify_trait(self, name, old_value, new_value) 1503 1504 def _notify_trait(self, name, old_value, new_value): -> 1505 self.notify_change( 1506 Bunch( 1507 name=name,

/opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget.py in notify_change(self, change) 692 # Send new state to front-end 693 self.send_state(key=name) --> 694 super(Widget, self).notify_change(change) 695 696 def repr(self):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in notify_change(self, change) 1515 def notify_change(self, change): 1516 """Notify observers of a change event""" -> 1517 return self._notify_observers(change) 1518 1519 def _notify_observers(self, event):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _notify_observers(self, event) 1562 c = getattr(self, c.name) 1563 -> 1564 c(event) 1565 1566 def _add_notifiers(self, handler, name, type):

~/.local/lib/python3.9/site-packages/aiidalab_qe/app/main.py in _observe_process_selection(self, change) 148 self.configure_step.set_configuration_parameters(ui_parameters) 149 self.configure_step.confirm() --> 150 self.submit_step.set_submission_parameters(ui_parameters) 151 self.submit_step.state = self.submit_step.State.SUCCESS

~/.local/lib/python3.9/site-packages/aiidalab_qe/app/submission/init.py in set_submission_parameters(self, parameters) 441 def set_submission_parameters(self, parameters): 442 self.set_resources(parameters["resources"]) --> 443 self.set_selected_codes(parameters["codes"]) 444 445 def get_submission_parameters(self):

~/.local/lib/python3.9/site-packages/aiidalab_qe/app/submission/init.py in set_selected_codes(self, codes) 345 with self.hold_trait_notifications(): 346 for name, code in self.codes.items(): --> 347 code.value = _get_code_uuid(codes.get(name)) 348 349 def update_codes_display(self):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in set(self, obj, value) 730 raise TraitError('The "%s" trait is read-only.' % self.name) 731 else: --> 732 self.set(obj, value) 733 734 def _validate(self, obj, value):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in set(self, obj, value) 719 # we explicitly compare silent to True just in case the equality 720 # comparison above returns something other than True/False --> 721 obj._notify_trait(self.name, old_value, new_value) 722 723 def set(self, obj, value):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _notify_trait(self, name, old_value, new_value) 1503 1504 def _notify_trait(self, name, old_value, new_value): -> 1505 self.notify_change( 1506 Bunch( 1507 name=name,

/opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget.py in notify_change(self, change) 692 # Send new state to front-end 693 self.send_state(key=name) --> 694 super(Widget, self).notify_change(change) 695 696 def repr(self):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in notify_change(self, change) 1515 def notify_change(self, change): 1516 """Notify observers of a change event""" -> 1517 return self._notify_observers(change) 1518 1519 def _notify_observers(self, event):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _notify_observers(self, event) 1562 c = getattr(self, c.name) 1563 -> 1564 c(event) 1565 1566 def _add_notifiers(self, handler, name, type):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _update_source(self, change) 377 return 378 with self._busy_updating(): --> 379 setattr(self.source[0], self.source[1], self._transform_inv(change.new)) 380 if getattr(self.target[0], self.target[1]) != change.new: 381 raise TraitError(

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in set(self, obj, value) 730 raise TraitError('The "%s" trait is read-only.' % self.name) 731 else: --> 732 self.set(obj, value) 733 734 def _validate(self, obj, value):

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in set(self, obj, value) 704 705 def set(self, obj, value): --> 706 new_value = self._validate(obj, value) 707 try: 708 old_value = obj._trait_values[self.name]

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _validate(self, obj, value) 738 value = self.validate(obj, value) 739 if obj._cross_validation_lock is False: --> 740 value = self._cross_validate(obj, value) 741 return value 742

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in _cross_validate(self, obj, value) 744 if self.name in obj._trait_validators: 745 proposal = Bunch({"trait": self, "value": value, "owner": obj}) --> 746 value = obj._traitvalidators[self.name](obj, proposal) 747 elif hasattr(obj, "%s_validate" % self.name): 748 methname = "%s_validate" % self.name

~/.local/lib/python3.9/site-packages/traitlets/traitlets.py in call(self, *args, kwargs) 1231 """Pass *args and **kwargs to the handler's function if it exists.""" 1232 if hasattr(self, "func"): -> 1233 return self.func(*args, kwargs) 1234 else: 1235 return self._init_call(*args, **kwargs)

/opt/conda/lib/python3.9/site-packages/ipywidgets/widgets/widget_selection.py in _validate_value(self, proposal) 241 return findvalue(self._options_values, value, self.equals) if value is not None else None 242 except ValueError: --> 243 raise TraitError('Invalid selection: value not found') 244 245 @observe('value')

TraitError: Invalid selection: value not found