We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
An issue occurs during diagram updating after new elements have been pasted.
This looks like a regression, due to the changes in the update process in 2.25.0.
Steps to reproduce the behavior:
Gaphor version: 2.25.0 Operating System: Darwin (23.4.0) Display: GdkMacosDisplay Python version: 3.11.9 GTK version: 4.14.3 Adwaita version: 1.5.0 GtkSourceView version: 5.11.0 Cairo version: 1.18.0 Pango version: 1.52.2 PyGObject version: 3.48.2 Pycairo version: 1.26.0 Errors: Time since application startup: 0:00:58 |Traceback (most recent call last): | File "/Users/arjan/Development/gaphor/gaphor/ui/copyservice.py", line 84, in on_paste | new_items = paster(copy_buffer.buffer, diagram) | │ │ └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | │ └ <copyservice.CopyBuffer object at 0x122be1940 (gaphor+ui+copyservice+CopyBuffer at 0x142ce3ff0)> | └ <function paste_link at 0x10a023060> | File "/Users/arjan/Development/gaphor/gaphor/diagram/copypaste.py", line 65, in paste_link | return _paste(copy_data, diagram, full=False) | │ │ └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | │ └ CopyData(elements={'aac36821-e964-11ea-96dc-bf74f1f80424': PresentationCopy(cls=<class 'gaphor.UML.classes.association.Associati... | └ <function _paste at 0x10a0489a0> | File "/Users/arjan/Development/gaphor/gaphor/diagram/copypaste.py", line 238, in _paste | element_lookup(old_id) | │ └ 'aac36821-e964-11ea-96dc-bf74f1f80424' | └ <function _paste.<locals>.element_lookup at 0x121d5aa20> | File "/Users/arjan/Development/gaphor/gaphor/diagram/copypaste.py", line 225, in element_lookup | new_elements[ref] = next(paster) | │ │ └ <generator object _paste_presentation at 0x120cf56c0> | │ └ 'aac36821-e964-11ea-96dc-bf74f1f80424' | └ {'70258172-e964-11ea-96dc-bf74f1f80424': <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f>} | File "/Users/arjan/Development/gaphor/gaphor/diagram/copypaste.py", line 195, in _paste_presentation | item = diagram.create(cls) | │ └ <class 'gaphor.UML.classes.association.AssociationItem'> | └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 364, in create | return self.create_as(type_, generate_id(), parent, subject) | │ │ │ │ └ None | │ │ │ └ None | │ │ └ <function generate_id at 0x105ce62a0> | │ └ <class 'gaphor.UML.classes.association.AssociationItem'> | └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 381, in create_as | self.update({item}) | │ └ <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f> | └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 440, in update | update(UpdateContext(style=self.style(StyledItem(item)))) | │ │ │ │ └ <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f> | │ │ │ └ <class 'gaphor.core.modeling.diagram.StyledItem'> | │ │ └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | │ └ <class 'gaphor.core.modeling.diagram.UpdateContext'> | └ <bound method AssociationItem.update of <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daa... | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 333, in style | compiled_style_sheet.compute_style(node) | │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | └ <gaphor.core.styling.CompiledStyleSheet object at 0x122bab450> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/__init__.py", line 178, in _compute_style_uncached | return merge_styles( | File "/Users/arjan/Development/gaphor/gaphor/core/styling/__init__.py", line 180, in <genexpr> | *(declarations for selector, declarations in self.rules if selector(node)), | │ │ │ │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | │ │ │ └ <function compile_compound_selector.<locals>.<lambda> at 0x120d7f4c0> | │ │ └ {'color': (0.0, 0.0, 1.0, 1.0)} | │ └ <function compile_compound_selector.<locals>.<lambda> at 0x120d7f4c0> | └ {'color': (0.0, 0.0, 1.0, 1.0)} | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 137, in <lambda> | return lambda el: all(expr(el) for expr in sub_expressions) | │ └ [<function compile_name_selector.<locals>.<lambda> at 0x120d7f560>, <function compile_functional_pseudo_class_selector.<locals>.... | └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 137, in <genexpr> | return lambda el: all(expr(el) for expr in sub_expressions) | │ │ └ <function compile_functional_pseudo_class_selector.<locals>.<lambda> at 0x120d7f600> | │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | └ <function compile_functional_pseudo_class_selector.<locals>.<lambda> at 0x120d7f600> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 258, in <lambda> | return lambda el: not any(sel(el) for sel, _ in sub_selectors) | │ └ [(<function compile_compound_selector.<locals>.<lambda> at 0x120d7f6a0>, (0, 1, 0))] | └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 258, in <genexpr> | return lambda el: not any(sel(el) for sel, _ in sub_selectors) | │ │ │ └ (0, 1, 0) | │ │ └ <function compile_compound_selector.<locals>.<lambda> at 0x120d7f6a0> | │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | └ <function compile_compound_selector.<locals>.<lambda> at 0x120d7f6a0> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 137, in <lambda> | return lambda el: all(expr(el) for expr in sub_expressions) | │ └ [<function compile_attribute_selector.<locals>.<lambda> at 0x120d7f740>] | └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 137, in <genexpr> | return lambda el: all(expr(el) for expr in sub_expressions) | │ │ └ <function compile_attribute_selector.<locals>.<lambda> at 0x120d7f740> | │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | └ <function compile_attribute_selector.<locals>.<lambda> at 0x120d7f740> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 214, in <lambda> | return lambda el: value and value in el.attribute(name) | │ │ │ └ 'memberend.navigability' | │ │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | │ └ 'true' | └ 'true' |TypeError: argument of type 'NoneType' is not iterable |During handling of the above exception, another exception occurred: |Traceback (most recent call last): | File "/Users/arjan/Development/gaphor/gaphor/ui/copyservice.py", line 82, in on_paste | with Transaction(self.event_manager): | File "/Users/arjan/Development/gaphor/gaphor/transaction.py", line 132, in __exit__ | self.commit() | └ <gaphor.transaction.Transaction object at 0x142927d90> | File "/Users/arjan/Development/gaphor/gaphor/transaction.py", line 73, in commit | self._handle(TransactionRollback(self.context)) | │ │ └ <gaphor.transaction.Transaction object at 0x142927d90> | │ └ <class 'gaphor.event.TransactionRollback'> | └ <gaphor.transaction.Transaction object at 0x142927d90> | File "/Users/arjan/Development/gaphor/gaphor/transaction.py", line 114, in _handle | self.event_manager.handle(event) | │ └ <gaphor.event.TransactionRollback object at 0x120122250> | └ <gaphor.transaction.Transaction object at 0x142927d90> | File "/Users/arjan/Development/gaphor/gaphor/core/eventmanager.py", line 83, in handle | self._events.handle(queue.pop()) | │ └ deque([]) | └ <gaphor.core.eventmanager.EventManager object at 0x111043850> | File "/Users/arjan/Development/gaphor/.venv/lib/python3.11/site-packages/generic/event.py", line 61, in handle | raise ExceptionGroup("Error while handling events", exceptions) | │ └ [KeyError(<gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f>)] | └ <class 'ExceptionGroup'> |ExceptionGroup: Error while handling events (1 sub-exception) └─┬──────────────────────────────╌┄┈ |Traceback (most recent call last): | File "/Users/arjan/Development/gaphor/gaphor/ui/copyservice.py", line 84, in on_paste | new_items = paster(copy_buffer.buffer, diagram) | │ │ └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | │ └ <copyservice.CopyBuffer object at 0x122be1940 (gaphor+ui+copyservice+CopyBuffer at 0x142ce3ff0)> | └ <function paste_link at 0x10a023060> | File "/Users/arjan/Development/gaphor/gaphor/diagram/copypaste.py", line 65, in paste_link | return _paste(copy_data, diagram, full=False) | │ │ └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | │ └ CopyData(elements={'aac36821-e964-11ea-96dc-bf74f1f80424': PresentationCopy(cls=<class 'gaphor.UML.classes.association.Associati... | └ <function _paste at 0x10a0489a0> | File "/Users/arjan/Development/gaphor/gaphor/diagram/copypaste.py", line 238, in _paste | element_lookup(old_id) | │ └ 'aac36821-e964-11ea-96dc-bf74f1f80424' | └ <function _paste.<locals>.element_lookup at 0x121d5aa20> | File "/Users/arjan/Development/gaphor/gaphor/diagram/copypaste.py", line 225, in element_lookup | new_elements[ref] = next(paster) | │ │ └ <generator object _paste_presentation at 0x120cf56c0> | │ └ 'aac36821-e964-11ea-96dc-bf74f1f80424' | └ {'70258172-e964-11ea-96dc-bf74f1f80424': <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f>} | File "/Users/arjan/Development/gaphor/gaphor/diagram/copypaste.py", line 195, in _paste_presentation | item = diagram.create(cls) | │ └ <class 'gaphor.UML.classes.association.AssociationItem'> | └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 364, in create | return self.create_as(type_, generate_id(), parent, subject) | │ │ │ │ └ None | │ │ │ └ None | │ │ └ <function generate_id at 0x105ce62a0> | │ └ <class 'gaphor.UML.classes.association.AssociationItem'> | └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 381, in create_as | self.update({item}) | │ └ <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f> | └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 440, in update | update(UpdateContext(style=self.style(StyledItem(item)))) | │ │ │ │ └ <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f> | │ │ │ └ <class 'gaphor.core.modeling.diagram.StyledItem'> | │ │ └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | │ └ <class 'gaphor.core.modeling.diagram.UpdateContext'> | └ <bound method AssociationItem.update of <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daa... | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 333, in style | compiled_style_sheet.compute_style(node) | │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | └ <gaphor.core.styling.CompiledStyleSheet object at 0x122bab450> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/__init__.py", line 178, in _compute_style_uncached | return merge_styles( | File "/Users/arjan/Development/gaphor/gaphor/core/styling/__init__.py", line 180, in <genexpr> | *(declarations for selector, declarations in self.rules if selector(node)), | │ │ │ │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | │ │ │ └ <function compile_compound_selector.<locals>.<lambda> at 0x120d7f4c0> | │ │ └ {'color': (0.0, 0.0, 1.0, 1.0)} | │ └ <function compile_compound_selector.<locals>.<lambda> at 0x120d7f4c0> | └ {'color': (0.0, 0.0, 1.0, 1.0)} | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 137, in <lambda> | return lambda el: all(expr(el) for expr in sub_expressions) | │ └ [<function compile_name_selector.<locals>.<lambda> at 0x120d7f560>, <function compile_functional_pseudo_class_selector.<locals>.... | └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 137, in <genexpr> | return lambda el: all(expr(el) for expr in sub_expressions) | │ │ └ <function compile_functional_pseudo_class_selector.<locals>.<lambda> at 0x120d7f600> | │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | └ <function compile_functional_pseudo_class_selector.<locals>.<lambda> at 0x120d7f600> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 258, in <lambda> | return lambda el: not any(sel(el) for sel, _ in sub_selectors) | │ └ [(<function compile_compound_selector.<locals>.<lambda> at 0x120d7f6a0>, (0, 1, 0))] | └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 258, in <genexpr> | return lambda el: not any(sel(el) for sel, _ in sub_selectors) | │ │ │ └ (0, 1, 0) | │ │ └ <function compile_compound_selector.<locals>.<lambda> at 0x120d7f6a0> | │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | └ <function compile_compound_selector.<locals>.<lambda> at 0x120d7f6a0> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 137, in <lambda> | return lambda el: all(expr(el) for expr in sub_expressions) | │ └ [<function compile_attribute_selector.<locals>.<lambda> at 0x120d7f740>] | └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 137, in <genexpr> | return lambda el: all(expr(el) for expr in sub_expressions) | │ │ └ <function compile_attribute_selector.<locals>.<lambda> at 0x120d7f740> | │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | └ <function compile_attribute_selector.<locals>.<lambda> at 0x120d7f740> | File "/Users/arjan/Development/gaphor/gaphor/core/styling/compiler.py", line 214, in <lambda> | return lambda el: value and value in el.attribute(name) | │ │ │ └ 'memberend.navigability' | │ │ └ <gaphor.core.modeling.diagram.StyledItem object at 0x122ba9310> | │ └ 'true' | └ 'true' |TypeError: argument of type 'NoneType' is not iterable |During handling of the above exception, another exception occurred: |Traceback (most recent call last): | File "/Users/arjan/Development/gaphor/.venv/lib/python3.11/site-packages/generic/event.py", line 57, in handle | handler(event) | │ └ <gaphor.core.modeling.event.AssociationDeleted object at 0x122bc2610> | └ <bound method ElementDispatcher.on_element_change_event of <gaphor.core.modeling.elementdispatcher.ElementDispatcher object at 0... | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/elementdispatcher.py", line 240, in on_element_change_event | handler(event) | │ └ <gaphor.core.modeling.event.AssociationDeleted object at 0x122bc2610> | └ <bound method Diagram._order_owned_presentation of <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4da... | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 300, in _owned_presentation_changed | self._update_dirty_items(removed_items={event.old_value}) | │ └ <gaphor.core.modeling.event.AssociationDeleted object at 0x122bc2610> | └ <gaphor.core.modeling.diagram.Diagram element cd4825cc-0093-11ef-8465-be7f4daace3f> | File "/Users/arjan/Development/gaphor/gaphor/core/modeling/diagram.py", line 500, in _update_dirty_items | v.request_update(dirty_items, removed_items) | │ │ └ {<gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f>} | │ └ () | └ <gtkview.GtkView object at 0x122bcf340 (GaphasView at 0x142b4ba00)> | File "/Users/arjan/Development/gaphor/.venv/lib/python3.11/site-packages/gaphas/view/gtkview.py", line 270, in request_update | self._qtree.remove(item) | │ └ <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f> | └ <gtkview.GtkView object at 0x122bcf340 (GaphasView at 0x142b4ba00)> | File "/Users/arjan/Development/gaphor/.venv/lib/python3.11/site-packages/gaphas/quadtree.py", line 157, in remove | bounds, data = self._ids[item] | │ └ <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f> | └ <gaphas.quadtree.Quadtree object at 0x122bcf4d0> |KeyError: <gaphor.UML.classes.association.AssociationItem element de0771ce-0093-11ef-8465-be7f4daace3f> └─────────────────────────────╌┄┈
A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
Version of Gaphor: 2.25.0
@danyeaw Should we yank (retract) 2.25.0 for now? It has a few issues: pasting elements, and screen updates on macOS.
The text was updated successfully, but these errors were encountered:
Successfully merging a pull request may close this issue.
Describe the bug
An issue occurs during diagram updating after new elements have been pasted.
This looks like a regression, due to the changes in the update process in 2.25.0.
To Reproduce
Steps to reproduce the behavior:
Error Report
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
OS
Version
Version of Gaphor: 2.25.0
Additional information
@danyeaw Should we yank (retract) 2.25.0 for now? It has a few issues: pasting elements, and screen updates on macOS.
The text was updated successfully, but these errors were encountered: