Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions eddy/core/diagram.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ class Diagram(QtWidgets.QGraphicsScene):
Extension of QtWidgets.QGraphicsScene which implements a single Graphol diagram.
Additionally to built-in signals, this class emits:

* sgnDragDropEvent: whenever data is dropped onto the Diagram.
* sgnItemAdded: whenever an element is added to the Diagram.
* sgnItemInsertionCompleted: whenever an item 'MANUAL' insertion process is completed.
* sgnItemRemoved: whenever an element is removed from the Diagram.
Expand All @@ -110,6 +111,7 @@ class Diagram(QtWidgets.QGraphicsScene):
MaxFontSize = 40
SelectionRadius = 4

sgnDragDropEvent = QtCore.pyqtSignal(QtWidgets.QGraphicsScene, QtWidgets.QGraphicsSceneDragDropEvent)
sgnItemAdded = QtCore.pyqtSignal(QtWidgets.QGraphicsScene, QtWidgets.QGraphicsItem)
sgnItemInsertionCompleted = QtCore.pyqtSignal(QtWidgets.QGraphicsItem, int)
sgnItemRemoved = QtCore.pyqtSignal(QtWidgets.QGraphicsScene, QtWidgets.QGraphicsItem)
Expand Down Expand Up @@ -235,15 +237,25 @@ def dropEvent(self, dropEvent: QtWidgets.QGraphicsSceneDragDropEvent) -> None:
Executed when a dragged element is dropped on the diagram.
"""
super().dropEvent(dropEvent)
if dropEvent.mimeData().hasFormat('text/plain') and Item.valueOf(dropEvent.mimeData().text()):
self.sgnDragDropEvent.emit(self, dropEvent)
if (
dropEvent.dropAction() == QtCore.Qt.DropAction.CopyAction
and dropEvent.mimeData().hasFormat('text/plain')
and Item.valueOf(dropEvent.mimeData().text())
):
snapToGrid = self.session.action('toggle_grid').isChecked()
node = self.factory.create(Item.valueOf(dropEvent.mimeData().text()))
node.setPos(snap(dropEvent.scenePos(), Diagram.GridSize, snapToGrid))
data = dropEvent.mimeData().data(dropEvent.mimeData().text())
if int(dropEvent.mimeData().text()) in {Item.ConceptNode, Item.AttributeNode,
Item.RoleNode, Item.IndividualNode,
Item.ValueDomainNode, Item.LiteralNode,
Item.FacetNode}:
if Item.valueOf(dropEvent.mimeData().text()) in {
Item.ConceptNode,
Item.AttributeNode,
Item.RoleNode,
Item.IndividualNode,
Item.ValueDomainNode,
Item.LiteralNode,
Item.FacetNode,
}:
if not data:
# For new nodes (e.g. drag and drop from palette)
if isinstance(node, FacetNode):
Expand Down
57 changes: 2 additions & 55 deletions eddy/core/exporters/owl2.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,6 @@
)
from eddy.core.functions.signals import connect
from eddy.core.jvm import getJavaVM
from eddy.core.metadata import (
LiteralValue,
NamedEntity,
)
from eddy.core.ndc import (
ADMS,
NDCDataset,
Expand Down Expand Up @@ -481,17 +477,6 @@ def onErrored(self, exception):

self.reject()

@QtCore.pyqtSlot(str)
def onMetadataFetchErrored(self, message):
"""
Executed when a metadata fetch request fails.
:type message: str
"""
self.session.addNotification(textwrap.dedent(f"""
<b><font color="#7E0B17">ERROR</font></b>:\n
{message}
"""))

@QtCore.pyqtSlot(str)
def onNDCMetadataMissing(self, uri):
"""
Expand Down Expand Up @@ -570,7 +555,6 @@ def run(self):
connect(worker.sgnStarted, self.onStarted)
connect(worker.sgnCompleted, self.onCompleted)
connect(worker.sgnErrored, self.onErrored)
connect(worker.sgnMetadataFetchErrored, self.onMetadataFetchErrored)
connect(worker.sgnNDCMetadataMissing, self.onNDCMetadataMissing)
connect(worker.sgnProgress, self.onProgress)
self.startThread('OWL2Export', worker)
Expand All @@ -582,7 +566,6 @@ class OWLOntologyExporterWorker(AbstractWorker):
"""
sgnCompleted = QtCore.pyqtSignal()
sgnErrored = QtCore.pyqtSignal(Exception)
sgnMetadataFetchErrored = QtCore.pyqtSignal(str)
sgnNDCMetadataMissing = QtCore.pyqtSignal(str)
sgnProgress = QtCore.pyqtSignal(int, int)
sgnStarted = QtCore.pyqtSignal()
Expand Down Expand Up @@ -638,7 +621,6 @@ def __init__(self, project, path=None, **kwargs):
self._axioms = set()
self._converted = dict()
self._converted_meta_individuals = dict()
self.metadataProperty = self.project.getIRI('urn:x-graphol:origin')

self.df = None
self.man = None
Expand Down Expand Up @@ -1405,43 +1387,8 @@ def createAnnotationAssertionAxioms(self, node):
if OWLAxiom.Annotation in self.axiomsList:
for annotation in node.iri.annotationAssertions:
subject = self.IRI.create(str(annotation.subject))
if annotation.assertionProperty == self.metadataProperty:
uri = annotation.value
# FIXME: this is a sync request!!!
result, response = self.nmanager.getSync(str(uri))
if not result:
msg = f'Retrieval of {uri} failed: {response}'
LOGGER.warning(msg)
self.sgnMetadataFetchErrored.emit(msg)
continue
try:
for assertion in NamedEntity.from_dict(json.loads(response)).annotations:
if isinstance(assertion.object, LiteralValue):
from eddy.core.owl import Annotation
value = Annotation(
self.project.getIRI(str(assertion.predicate.iri)),
assertion.object.value,
type=assertion.object.datatype,
language=assertion.object.language,
parent=self.project,
)
elif isinstance(assertion.object, NamedEntity):
value = Annotation(
self.project.getIRI(str(assertion.predicate.iri)),
self.project.getIRI(str(assertion.object.iri)),
parent=self.project,
)
else:
LOGGER.warning(f'Skipping annotation with bnode object {assertion}')
value = self.getOWLApiAnnotation(value)
self.addAxiom(self.df.getOWLAnnotationAssertionAxiom(subject, value))
except Exception as e:
msg = f'Failed to parse metadata for {uri}'
LOGGER.warning(f'{msg}: {response}')
self.sgnMetadataFetchErrored.emit(f'{msg}: See log for details.')
else:
value = self.getOWLApiAnnotation(annotation)
self.addAxiom(self.df.getOWLAnnotationAssertionAxiom(subject, value))
value = self.getOWLApiAnnotation(annotation)
self.addAxiom(self.df.getOWLAnnotationAssertionAxiom(subject, value))

def createClassAssertionAxiom(self, edge):
"""
Expand Down
Loading