diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..778e2bc --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,16 @@ +repos: + - repo: https://github.com/psf/black + rev: 22.10.0 + hooks: + - id: black + language_version: python3 + args: + - --line-length=120 + + - repo: https://github.com/pycqa/flake8 + rev: 6.0.0 + hooks: + - id: flake8 + args: + - --ignore=E203,E402,E501,W291,W503 + - --max-line-length=120 \ No newline at end of file diff --git a/document_management_system/__init__.py b/document_management_system/__init__.py index 8bce63e..8449362 100644 --- a/document_management_system/__init__.py +++ b/document_management_system/__init__.py @@ -15,5 +15,8 @@ def classFactory(iface): :type iface: QgsInterface """ # - from document_management_system.core.document_management_system_relation_editor_plugin import DocumentManagementSystemRelationEditorPlugin + from document_management_system.core.document_management_system_relation_editor_plugin import ( + DocumentManagementSystemRelationEditorPlugin, + ) + return DocumentManagementSystemRelationEditorPlugin(iface) diff --git a/document_management_system/core/document_management_system_relation_editor_plugin.py b/document_management_system/core/document_management_system_relation_editor_plugin.py index 9b1c8c6..0470d8d 100644 --- a/document_management_system/core/document_management_system_relation_editor_plugin.py +++ b/document_management_system/core/document_management_system_relation_editor_plugin.py @@ -10,21 +10,21 @@ import os from qgis.PyQt.QtCore import QCoreApplication, QTranslator, QObject, QLocale, QSettings -from qgis.PyQt.QtGui import QIcon -from qgis.PyQt.QtWidgets import QAction from qgis.core import QgsApplication -from qgis.gui import ( - QgisInterface, - QgsGui -) +from qgis.gui import QgisInterface, QgsGui from document_management_system.core.settings_registry import SettingsRegistry -from document_management_system.gui.relation_editor_feature_side_widget_factory import RelationEditorFeatureSideWidgetFactory -from document_management_system.gui.relation_editor_document_side_widget_factory import RelationEditorDocumentSideWidgetFactory +from document_management_system.gui.relation_editor_feature_side_widget_factory import ( + RelationEditorFeatureSideWidgetFactory, +) +from document_management_system.gui.relation_editor_document_side_widget_factory import ( + RelationEditorDocumentSideWidgetFactory, +) DEBUG = True + class DocumentManagementSystemRelationEditorPlugin(QObject): plugin_name = "&Document Management System Relation Editor" @@ -34,28 +34,27 @@ def __init__(self, interface: QgisInterface): self.interface = interface # initialize translation - qgis_locale = QLocale(QSettings().value('locale/userLocale')) - locale_path = os.path.join(os.path.dirname(__file__), 'i18n') + qgis_locale = QLocale(QSettings().value("locale/userLocale")) + locale_path = os.path.join(os.path.dirname(__file__), "i18n") self.translator = QTranslator() - self.translator.load(qgis_locale, 'actions_for_relations', '_', locale_path) + self.translator.load(qgis_locale, "actions_for_relations", "_", locale_path) QCoreApplication.installTranslator(self.translator) self.actions = [] - self.MENU_ITEM_NAME = self.tr('&Document management system') + self.MENU_ITEM_NAME = self.tr("&Document management system") # Plugin settings self.settingsRegistry = SettingsRegistry() QgsApplication.settingsRegistryCore().addSubRegistry(self.settingsRegistry) - def initGui(self): + def initGui(self): QgsGui.relationWidgetRegistry().addRelationWidget(RelationEditorFeatureSideWidgetFactory()) QgsGui.relationWidgetRegistry().addRelationWidget(RelationEditorDocumentSideWidgetFactory()) def unload(self): # Removes the plugin menu item for action in self.actions: - self.interface.removePluginMenu(self.MENU_ITEM_NAME, - action) + self.interface.removePluginMenu(self.MENU_ITEM_NAME, action) QgsGui.relationWidgetRegistry().removeRelationWidget(RelationEditorFeatureSideWidgetFactory.type()) QgsGui.relationWidgetRegistry().removeRelationWidget(RelationEditorDocumentSideWidgetFactory.type()) diff --git a/document_management_system/core/document_model.py b/document_management_system/core/document_model.py index d438c69..c6a3906 100644 --- a/document_management_system/core/document_model.py +++ b/document_management_system/core/document_model.py @@ -9,20 +9,18 @@ # ----------------------------------------------------------- from enum import Enum -from qgis.PyQt.QtCore import ( - Qt, - QObject, - QAbstractTableModel, - QModelIndex, - QFileInfo, - QDir, - QSysInfo, - QUrl +from qgis.PyQt.QtCore import Qt, QObject, QAbstractTableModel, QModelIndex, QFileInfo, QDir +from qgis.core import ( + QgsRelation, + QgsFeature, + QgsExpression, + QgsExpressionContext, + QgsExpressionContextUtils, + QgsFeatureRequest, ) -from qgis.PyQt.QtGui import QIcon -from qgis.core import QgsRelation, QgsFeature, QgsExpression, QgsExpressionContext, QgsExpressionContextUtils, QgsFeatureRequest from document_management_system.core.preview_image_provider import PreviewImageProvider + class Role(Enum): RelationRole = Qt.UserRole + 1 RelationIdRole = Qt.UserRole + 2 @@ -32,10 +30,10 @@ class Role(Enum): class DocumentModel(QAbstractTableModel): - DocumentIdRole = Qt.UserRole + 1 - DocumentPathRole = Qt.UserRole + 2 - DocumentNameRole = Qt.UserRole + 3 - DocumentExistsRole = Qt.UserRole + 4 + DocumentIdRole = Qt.UserRole + 1 + DocumentPathRole = Qt.UserRole + 2 + DocumentNameRole = Qt.UserRole + 3 + DocumentExistsRole = Qt.UserRole + 4 DocumentToolTipRole = Qt.UserRole + 5 DocumentIsImageRole = Qt.UserRole + 6 @@ -48,12 +46,14 @@ def __init__(self, parent: QObject = None): self._feature = QgsFeature() self._document_list = [] - def init(self, - relation: QgsRelation, - nmRelation: QgsRelation, - feature: QgsFeature, - documents_path: str, - document_filename: str): + def init( + self, + relation: QgsRelation, + nmRelation: QgsRelation, + feature: QgsFeature, + documents_path: str, + document_filename: str, + ): self._relation = relation self._nmRelation = nmRelation self._documents_path = documents_path @@ -88,12 +88,12 @@ def setData(self, index: QModelIndex, value, role: int = Qt.EditRole) -> bool: def roleNames(self): return { - self.DocumentIdRole: b'DocumentId', - self.DocumentPathRole: b'DocumentPath', - self.DocumentNameRole: b'DocumentName', - self.DocumentExistsRole: b'DocumentExists', - self.DocumentToolTipRole: b'DocumentToolTip', - self.DocumentIsImageRole: b'DocumentIsImage' + self.DocumentIdRole: b"DocumentId", + self.DocumentPathRole: b"DocumentPath", + self.DocumentNameRole: b"DocumentName", + self.DocumentExistsRole: b"DocumentExists", + self.DocumentToolTipRole: b"DocumentToolTip", + self.DocumentIsImageRole: b"DocumentIsImage", } def reloadData(self): @@ -141,25 +141,27 @@ def reloadData(self): context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer)) context.setFeature(documentFeature) document_filename = exp.evaluate(context) - file_info = QFileInfo(QDir(str(documents_path)), - str(document_filename)) + file_info = QFileInfo(QDir(str(documents_path)), str(document_filename)) # ToolTip toolTipList = [] toolTipList.append("") - self._document_list.append({ - self.DocumentIdRole: documentFeature.id(), - self.DocumentPathRole: file_info.filePath(), - self.DocumentNameRole: file_info.fileName(), - self.DocumentExistsRole: file_info.exists(), - self.DocumentToolTipRole: "".join(toolTipList), - self.DocumentIsImageRole: PreviewImageProvider.isMimeTypeSupported(file_info.filePath()) - }) + self._document_list.append( + { + self.DocumentIdRole: documentFeature.id(), + self.DocumentPathRole: file_info.filePath(), + self.DocumentNameRole: file_info.fileName(), + self.DocumentExistsRole: file_info.exists(), + self.DocumentToolTipRole: "".join(toolTipList), + self.DocumentIsImageRole: PreviewImageProvider.isMimeTypeSupported(file_info.filePath()), + } + ) self.endResetModel() diff --git a/document_management_system/core/file_type_icon_image_provider.py b/document_management_system/core/file_type_icon_image_provider.py index 0d74148..9346dfb 100644 --- a/document_management_system/core/file_type_icon_image_provider.py +++ b/document_management_system/core/file_type_icon_image_provider.py @@ -10,12 +10,10 @@ from PyQt5.QtQuick import QQuickImageProvider from qgis.PyQt.QtCore import QFileInfo -from qgis.PyQt.QtGui import QPixmap from qgis.PyQt.QtWidgets import QFileIconProvider class FileTypeIconImageProvider(QQuickImageProvider): - def __init__(self, maxSize): super().__init__(QQuickImageProvider.Pixmap) diff --git a/document_management_system/core/plugin_helper.py b/document_management_system/core/plugin_helper.py index 04eddd7..4a3b38f 100644 --- a/document_management_system/core/plugin_helper.py +++ b/document_management_system/core/plugin_helper.py @@ -29,8 +29,7 @@ def tr(message): :rtype: QString """ # noinspection PyTypeChecker,PyArgumentList,PyCallByClass - return QCoreApplication.translate(PluginHelper.PLUGIN_SLUG, - message) + return QCoreApplication.translate(PluginHelper.PLUGIN_SLUG, message) @staticmethod def removeLayerIdOrName(layerUri): @@ -38,7 +37,7 @@ def removeLayerIdOrName(layerUri): for toRemove in ["|layername=", "|layerid="]: pos = layerUri.find(toRemove) if pos >= 0: - end = layerUri.find('|', pos + 1) + end = layerUri.find("|", pos + 1) if end >= 0: layerUriStripped = layerUri[pos:end] else: @@ -56,4 +55,3 @@ def connectionString(layerUri): connString = PluginHelper.removeLayerIdOrName(layerUri) return connString - diff --git a/document_management_system/core/preview_image_provider.py b/document_management_system/core/preview_image_provider.py index b010751..7d5109f 100644 --- a/document_management_system/core/preview_image_provider.py +++ b/document_management_system/core/preview_image_provider.py @@ -10,10 +10,7 @@ from PyQt5.QtQuick import QQuickImageProvider from qgis.PyQt.QtCore import QMimeDatabase -from qgis.PyQt.QtGui import ( - QImage, - QImageReader -) +from qgis.PyQt.QtGui import QImageReader class PreviewImageProvider(QQuickImageProvider): diff --git a/document_management_system/core/settings_registry.py b/document_management_system/core/settings_registry.py index 8631784..0862049 100644 --- a/document_management_system/core/settings_registry.py +++ b/document_management_system/core/settings_registry.py @@ -13,7 +13,6 @@ class SettingsRegistry(QgsSettingsRegistry): - def __init__(self): super().__init__() diff --git a/document_management_system/gui/relation_editor_document_side_config_widget.py b/document_management_system/gui/relation_editor_document_side_config_widget.py index 270f3e4..8e53a6f 100644 --- a/document_management_system/gui/relation_editor_document_side_config_widget.py +++ b/document_management_system/gui/relation_editor_document_side_config_widget.py @@ -13,12 +13,12 @@ from qgis.core import QgsProject from qgis.gui import QgsAbstractRelationEditorConfigWidget -WidgetUi, _ = loadUiType(os.path.join(os.path.dirname(__file__), - '../ui/relation_editor_document_side_config_widget.ui')) +WidgetUi, _ = loadUiType( + os.path.join(os.path.dirname(__file__), "../ui/relation_editor_document_side_config_widget.ui") +) class RelationEditorDocumentSideConfigWidget(QgsAbstractRelationEditorConfigWidget, WidgetUi): - def __init__(self, relation, parent): super().__init__(relation, parent) self.setupUi(self) @@ -27,28 +27,32 @@ def __init__(self, relation, parent): for polymorphicRelationId in polymorphicRelations: polymorphicRelationReferencingLayer = polymorphicRelations[polymorphicRelationId].referencingLayer() if ( - polymorphicRelationReferencingLayer.id() == relation.referencingLayer().id() or - polymorphicRelationReferencingLayer.id() == relation.referencedLayer().id() - ): - self.mPolymorphicRelationComboBox.addItem(polymorphicRelations[polymorphicRelationId].name(), polymorphicRelationId) + polymorphicRelationReferencingLayer.id() == relation.referencingLayer().id() + or polymorphicRelationReferencingLayer.id() == relation.referencedLayer().id() + ): + self.mPolymorphicRelationComboBox.addItem( + polymorphicRelations[polymorphicRelationId].name(), polymorphicRelationId + ) if len(polymorphicRelations) == 0: self.mPolymorphicRelationGroupBox.setEnabled(False) - self.mPolymorphicRelationGroupBox.setToolTip(self.tr('There are no polymorphic relations defined in current project')) + self.mPolymorphicRelationGroupBox.setToolTip( + self.tr("There are no polymorphic relations defined in current project") + ) def config(self): return { - 'polymorphic_relation_enabled': self.mPolymorphicRelationGroupBox.isChecked(), - 'polymorphic_relation_id': self.mPolymorphicRelationComboBox.currentData(), + "polymorphic_relation_enabled": self.mPolymorphicRelationGroupBox.isChecked(), + "polymorphic_relation_id": self.mPolymorphicRelationComboBox.currentData(), } def setConfig(self, config): - configPolymorphicRelationEnabled = config.get('polymorphic_relation_enabled') + configPolymorphicRelationEnabled = config.get("polymorphic_relation_enabled") if configPolymorphicRelationEnabled is None: configPolymorphicRelationEnabled = False self.mPolymorphicRelationGroupBox.setChecked(configPolymorphicRelationEnabled) - polymorphicRelationId = config.get('polymorphic_relation_id') + polymorphicRelationId = config.get("polymorphic_relation_id") polymorphicRelation = QgsProject.instance().relationManager().polymorphicRelation(polymorphicRelationId) self.mPolymorphicRelationComboBox.setCurrentText(polymorphicRelation.name()) pass @@ -59,7 +63,9 @@ def setNmRelation(self, nmRelation): if nmRelation.isValid(): self.mPolymorphicRelationGroupBox.setEnabled(False) - self.mPolymorphicRelationGroupBox.setToolTip(self.tr('Polymorphic relation available only for cardinality "Many to one"')) + self.mPolymorphicRelationGroupBox.setToolTip( + self.tr('Polymorphic relation available only for cardinality "Many to one"') + ) else: self.mPolymorphicRelationGroupBox.setEnabled(True) self.mPolymorphicRelationGroupBox.setToolTip("") diff --git a/document_management_system/gui/relation_editor_document_side_widget.py b/document_management_system/gui/relation_editor_document_side_widget.py index 911fbec..bde0cd4 100644 --- a/document_management_system/gui/relation_editor_document_side_widget.py +++ b/document_management_system/gui/relation_editor_document_side_widget.py @@ -9,22 +9,10 @@ # ----------------------------------------------------------- import os -from enum import ( - Enum, - IntEnum -) -from qgis.PyQt.QtCore import ( - Qt, - QTimer, - pyqtSlot -) +from enum import Enum, IntEnum +from qgis.PyQt.QtCore import Qt, QTimer, pyqtSlot from qgis.PyQt.QtGui import QIcon -from qgis.PyQt.QtWidgets import ( - QAction, - QInputDialog, - QMessageBox, - QTreeWidgetItem -) +from qgis.PyQt.QtWidgets import QAction, QInputDialog, QMessageBox, QTreeWidgetItem from qgis.PyQt.uic import loadUiType from qgis.core import ( QgsProject, @@ -34,16 +22,12 @@ QgsFeature, QgsFeatureRequest, QgsIconUtils, - QgsVectorLayerUtils -) -from qgis.gui import ( - QgsAbstractRelationEditorWidget, - QgsAttributeDialog, - QgsFeatureSelectionDlg + QgsVectorLayerUtils, ) +from qgis.gui import QgsAbstractRelationEditorWidget, QgsAttributeDialog, QgsFeatureSelectionDlg from document_management_system.core.plugin_helper import PluginHelper -WidgetUi, _ = loadUiType(os.path.join(os.path.dirname(__file__), '../ui/relation_editor_document_side_widget.ui')) +WidgetUi, _ = loadUiType(os.path.join(os.path.dirname(__file__), "../ui/relation_editor_document_side_widget.ui")) class Cardinality(Enum): @@ -66,7 +50,6 @@ class TreeWidgetItemRole(IntEnum): class RelationEditorDocumentSideWidget(QgsAbstractRelationEditorWidget, WidgetUi): - def __init__(self, config, parent): super().__init__(config, parent) self._updateUiTimer = QTimer() @@ -86,17 +69,18 @@ def __init__(self, config, parent): self.cardinality = Cardinality.ManyToOne # Actions - self.actionToggleEditing = QAction(QIcon(":/images/themes/default/mActionToggleEditing.svg"), - self.tr("Toggle editing mode for child layers")) + self.actionToggleEditing = QAction( + QIcon(":/images/themes/default/mActionToggleEditing.svg"), self.tr("Toggle editing mode for child layers") + ) self.actionToggleEditing.setCheckable(True) - self.actionSaveEdits = QAction(QIcon(":/images/themes/default/mActionSaveEdits.svg"), - self.tr("Save child layer edits")) - self.actionShowForm = QAction(QIcon(":/images/themes/default/mActionMultiEdit.svg"), - self.tr("Show form")) - self.actionLinkFeature = QAction(QIcon(":/images/themes/default/mActionLink.svg"), - self.tr("Link feature")) - self.actionUnlinkFeature = QAction(QIcon(":/images/themes/default/mActionUnlink.svg"), - self.tr("Unlink feature")) + self.actionSaveEdits = QAction( + QIcon(":/images/themes/default/mActionSaveEdits.svg"), self.tr("Save child layer edits") + ) + self.actionShowForm = QAction(QIcon(":/images/themes/default/mActionMultiEdit.svg"), self.tr("Show form")) + self.actionLinkFeature = QAction(QIcon(":/images/themes/default/mActionLink.svg"), self.tr("Link feature")) + self.actionUnlinkFeature = QAction( + QIcon(":/images/themes/default/mActionUnlink.svg"), self.tr("Unlink feature") + ) # Tool buttons self.mToggleEditingToolButton.setDefaultAction(self.actionToggleEditing) @@ -128,18 +112,18 @@ def nmRelation(self): return self._nmRelation def config(self): - return { - - } + return {} def setConfig(self, config): - self.polymorphicRelationEnabled = config['polymorphic_relation_enabled'] - self.polymorphicRelationId = config['polymorphic_relation_id'] + self.polymorphicRelationEnabled = config["polymorphic_relation_enabled"] + self.polymorphicRelationId = config["polymorphic_relation_id"] if self.polymorphicRelationEnabled is False: return - self._polymorphicRelation = QgsProject.instance().relationManager().polymorphicRelation(self.polymorphicRelationId) + self._polymorphicRelation = ( + QgsProject.instance().relationManager().polymorphicRelation(self.polymorphicRelationId) + ) self._setCardinality() @@ -147,7 +131,7 @@ def updateUi(self): self._updateUiTimer.start(200) def updateUiTimeout(self): - print('DocumentRelationEditorDocumentSideWidget.updateUiTimeout') + print("DocumentRelationEditorDocumentSideWidget.updateUiTimeout") self.mFeaturesTreeWidget.clear() @@ -170,7 +154,9 @@ def updateUiManyToOne(self): layer = self.relation().referencingLayer() request = self.relation().getRelatedFeaturesRequest(self.feature()) for feature in layer.getFeatures(request): - treeWidgetItem = QTreeWidgetItem(self.mFeaturesTreeWidget, [QgsVectorLayerUtils.getFeatureDisplayString(layer, feature)]) + treeWidgetItem = QTreeWidgetItem( + self.mFeaturesTreeWidget, [QgsVectorLayerUtils.getFeatureDisplayString(layer, feature)] + ) treeWidgetItem.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Feature) treeWidgetItem.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItem.setData(0, TreeWidgetItemRole.Feature, feature) @@ -189,7 +175,9 @@ def updateUiManyToMany(self): finalLayer = self.nmRelation().referencedLayer() for finalFeature in finalLayer.getFeatures(nmRequest): - treeWidgetItem = QTreeWidgetItem(self.mFeaturesTreeWidget, [QgsVectorLayerUtils.getFeatureDisplayString(finalLayer, finalFeature)]) + treeWidgetItem = QTreeWidgetItem( + self.mFeaturesTreeWidget, [QgsVectorLayerUtils.getFeatureDisplayString(finalLayer, finalFeature)] + ) treeWidgetItem.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Feature) treeWidgetItem.setData(0, TreeWidgetItemRole.Layer, finalLayer) treeWidgetItem.setData(0, TreeWidgetItemRole.Feature, feature) @@ -212,7 +200,9 @@ def updateUiManyToOnePolymorphic(self): treeWidgetItemLayer.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItemLayer.setIcon(0, QgsIconUtils.iconForLayer(layer)) for feature in layerFeature[layer]: - treeWidgetItem = QTreeWidgetItem(treeWidgetItemLayer, [QgsVectorLayerUtils.getFeatureDisplayString(layerFeature, feature)]) + treeWidgetItem = QTreeWidgetItem( + treeWidgetItemLayer, [QgsVectorLayerUtils.getFeatureDisplayString(layerFeature, feature)] + ) treeWidgetItem.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Feature) treeWidgetItem.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItem.setData(0, TreeWidgetItemRole.Feature, feature) @@ -243,7 +233,9 @@ def updateUiManyToManyPolymorphic(self): treeWidgetItemLayer.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItemLayer.setIcon(0, QgsIconUtils.iconForLayer(layer)) for feature, linkFeature in layerFeature[layer]: - treeWidgetItem = QTreeWidgetItem(treeWidgetItemLayer, [QgsVectorLayerUtils.getFeatureDisplayString(layer, feature)]) + treeWidgetItem = QTreeWidgetItem( + treeWidgetItemLayer, [QgsVectorLayerUtils.getFeatureDisplayString(layer, feature)] + ) treeWidgetItem.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Feature) treeWidgetItem.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItem.setData(0, TreeWidgetItemRole.Feature, feature) @@ -273,39 +265,45 @@ def parentFormValueChanged(self, attribute, newValue): def checkLayerEditingMode(self): if self.relation().referencingLayer().isEditable() is False: - QMessageBox.critical(self, - self.tr("Layer not editable"), - self.tr("Layer '{0}' is not in editing mode.").format(self.relation().referencingLayer().name())) + QMessageBox.critical( + self, + self.tr("Layer not editable"), + self.tr("Layer '{0}' is not in editing mode.").format(self.relation().referencingLayer().name()), + ) return False if self.nmRelation().isValid(): if self.nmRelation().referencedLayer().isEditable() is False: - QMessageBox.critical(self, - self.tr("Layer not editable"), - self.tr("Layer '{0}' is not in editing mode.").format(self.nmRelation().referencedLayer().name())) + QMessageBox.critical( + self, + self.tr("Layer not editable"), + self.tr("Layer '{0}' is not in editing mode.").format(self.nmRelation().referencedLayer().name()), + ) return False return True def _setCardinality(self): - if (self.nmRelation().isValid() is False and - self.polymorphicRelationEnabled is False): + if self.nmRelation().isValid() is False and self.polymorphicRelationEnabled is False: self.cardinality = Cardinality.ManyToOne return - elif (self.nmRelation().isValid() and - self.polymorphicRelationEnabled is False): + elif self.nmRelation().isValid() and self.polymorphicRelationEnabled is False: self.cardinality = Cardinality.ManyToMany return - elif (self.polymorphicRelationEnabled and - self._polymorphicRelation.referencingLayer().id() == self.relation().referencedLayer().id()): + elif ( + self.polymorphicRelationEnabled + and self._polymorphicRelation.referencingLayer().id() == self.relation().referencedLayer().id() + ): self.cardinality = Cardinality.ManyToOnePolymorphic return - elif (self.polymorphicRelationEnabled and - self._polymorphicRelation.referencingLayer().id() == self.relation().referencingLayer().id()): + elif ( + self.polymorphicRelationEnabled + and self._polymorphicRelation.referencingLayer().id() == self.relation().referencingLayer().id() + ): self.cardinality = Cardinality.ManyToManyPolymorphic return @@ -326,22 +324,20 @@ def saveChildLayerEdits(self): def actionShowFormTriggered(self): if self.mFeaturesTreeWidget.currentItem() is None: - QMessageBox.critical(self, - self.tr("No feature selected"), - self.tr("Please select a feature.")) + QMessageBox.critical(self, self.tr("No feature selected"), self.tr("Please select a feature.")) return if self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.Type) != TreeWidgetItemType.Feature: - QMessageBox.critical(self, - self.tr("Selected item is not a feature"), - self.tr("Please select a feature.")) + QMessageBox.critical(self, self.tr("Selected item is not a feature"), self.tr("Please select a feature.")) return - showDocumentFormDialog = QgsAttributeDialog(self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.Layer), - self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.Feature), - False, - self, - True) + showDocumentFormDialog = QgsAttributeDialog( + self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.Layer), + self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.Feature), + False, + self, + True, + ) showDocumentFormDialog.exec() self.updateUi() @@ -373,18 +369,15 @@ def linkFeatureManyToManyPolymorphic(self): for relation in self._polymorphicRelation.generateRelations(): nmRelations[relation.referencedLayer().name()] = relation - layerName, ok = QInputDialog.getItem(self, - self.tr("Please selct a layer"), - self.tr("Layer:"), - nmRelations.keys()) + layerName, ok = QInputDialog.getItem( + self, self.tr("Please selct a layer"), self.tr("Layer:"), nmRelations.keys() + ) if not ok: return nmRelation = nmRelations[layerName] - selectionDlg = QgsFeatureSelectionDlg(nmRelation.referencedLayer(), - self.editorContext(), - self) + selectionDlg = QgsFeatureSelectionDlg(nmRelation.referencedLayer(), self.editorContext(), self) selectionDlg.setWindowTitle(self.tr("Please select the features to link. Layer: {0}").format(layerName)) if not selectionDlg.exec(): return @@ -393,7 +386,9 @@ def linkFeatureManyToManyPolymorphic(self): fields = self.relation().referencingLayer().fields() linkAttributes = dict() - linkAttributes[fields.indexFromName(self._polymorphicRelation.referencedLayerField())] = self._polymorphicRelation.layerRepresentation(nmRelation.referencedLayer()) + linkAttributes[ + fields.indexFromName(self._polymorphicRelation.referencedLayerField()) + ] = self._polymorphicRelation.layerRepresentation(nmRelation.referencedLayer()) for key in self.relation().fieldPairs(): linkAttributes[fields.indexOf(key)] = self.feature().attribute(self.relation().fieldPairs()[key]) @@ -401,19 +396,19 @@ def linkFeatureManyToManyPolymorphic(self): context = self.relation().referencingLayer().createExpressionContext() featureIterator = nmRelation.referencedLayer().getFeatures( - QgsFeatureRequest() - .setFilterFids(selectionDlg.selectedFeatures()) - .setSubsetOfAttributes(nmRelation.referencedFields())) + QgsFeatureRequest() + .setFilterFids(selectionDlg.selectedFeatures()) + .setSubsetOfAttributes(nmRelation.referencedFields()) + ) relatedFeature = QgsFeature() newFeatures = [] while featureIterator.nextFeature(relatedFeature): for key in nmRelation.fieldPairs(): linkAttributes[fields.indexOf(key)] = relatedFeature.attribute(nmRelation.fieldPairs()[key]) - linkFeature = QgsVectorLayerUtils.createFeature(self.relation().referencingLayer(), - QgsGeometry(), - linkAttributes, - context) + linkFeature = QgsVectorLayerUtils.createFeature( + self.relation().referencingLayer(), QgsGeometry(), linkAttributes, context + ) newFeatures.append(linkFeature) self.relation().referencingLayer().addFeatures(newFeatures) @@ -428,15 +423,11 @@ def actionUnlinkFeatureTriggered(self): return if self.mFeaturesTreeWidget.currentItem() is None: - QMessageBox.critical(self, - self.tr("No feature selected"), - self.tr("Please select a feature to unlink.")) + QMessageBox.critical(self, self.tr("No feature selected"), self.tr("Please select a feature to unlink.")) return if self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.Type) != TreeWidgetItemType.Feature: - QMessageBox.critical(self, - self.tr("Selected item is not a feature"), - self.tr("Please select a feature.")) + QMessageBox.critical(self, self.tr("Selected item is not a feature"), self.tr("Please select a feature.")) return if self.cardinality == Cardinality.ManyToOne: @@ -449,7 +440,9 @@ def actionUnlinkFeatureTriggered(self): print("unlink ManyToOnePolymorphic") if self.cardinality == Cardinality.ManyToManyPolymorphic: - self.relation().referencingLayer().deleteFeature(self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.LinkFeature).id()) + self.relation().referencingLayer().deleteFeature( + self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.LinkFeature).id() + ) self.updateUi() def updateButtons(self): @@ -457,23 +450,22 @@ def updateButtons(self): toggleEditingButtonEnabled = False editable = False linkable = False - spatial = False selectionNotEmpty = True - if (self.mFeaturesTreeWidget.currentItem() is None or - self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.Type) != TreeWidgetItemType.Feature): + if ( + self.mFeaturesTreeWidget.currentItem() is None + or self.mFeaturesTreeWidget.currentItem().data(0, TreeWidgetItemRole.Type) != TreeWidgetItemType.Feature + ): selectionNotEmpty = False if self.relation().isValid(): toggleEditingButtonEnabled = self.relation().referencingLayer().supportsEditing() editable = self.relation().referencingLayer().isEditable() linkable = self.relation().referencingLayer().isEditable() - spatial = self.relation().referencingLayer().isSpatial() if self.nmRelation().isValid(): toggleEditingButtonEnabled |= self.nmRelation().referencedLayer().supportsEditing() editable = self.nmRelation().referencedLayer().isEditable() - spatial = self.nmRelation().referencedLayer().isSpatial() self.actionToggleEditing.setEnabled(toggleEditingButtonEnabled) self.actionLinkFeature.setEnabled(linkable) @@ -490,20 +482,24 @@ def _checkTransactionGroup(self): self._layerInSameTransactionGroup = False connectionString = PluginHelper.connectionString(self.relation().referencedLayer().source()) - transactionGroup = QgsProject.instance().transactionGroup(self.relation().referencedLayer().providerType(), - connectionString) + transactionGroup = QgsProject.instance().transactionGroup( + self.relation().referencedLayer().providerType(), connectionString + ) if transactionGroup is None: self.updateButtons() return if self.nmRelation().isValid(): - if (self.relation().referencedLayer() in transactionGroup.layers() and - self.relation().referencingLayer() in transactionGroup.layers() and - self.nmRelation().referencedLayer() in transactionGroup.layers()): + if ( + self.relation().referencedLayer() in transactionGroup.layers() + and self.relation().referencingLayer() in transactionGroup.layers() + and self.nmRelation().referencedLayer() in transactionGroup.layers() + ): self._layerInSameTransactionGroup = True else: - if (self.relation().referencedLayer() in transactionGroup.layers() and - self.relation().referencingLayer() in transactionGroup.layers()): + if ( + self.relation().referencedLayer() in transactionGroup.layers() + and self.relation().referencingLayer() in transactionGroup.layers() + ): self._layerInSameTransactionGroup = True - diff --git a/document_management_system/gui/relation_editor_document_side_widget_factory.py b/document_management_system/gui/relation_editor_document_side_widget_factory.py index 017f16e..15648cb 100644 --- a/document_management_system/gui/relation_editor_document_side_widget_factory.py +++ b/document_management_system/gui/relation_editor_document_side_widget_factory.py @@ -10,11 +10,12 @@ from qgis.gui import QgsAbstractRelationEditorWidgetFactory from document_management_system.gui.relation_editor_document_side_widget import RelationEditorDocumentSideWidget -from document_management_system.gui.relation_editor_document_side_config_widget import RelationEditorDocumentSideConfigWidget +from document_management_system.gui.relation_editor_document_side_config_widget import ( + RelationEditorDocumentSideConfigWidget, +) class RelationEditorDocumentSideWidgetFactory(QgsAbstractRelationEditorWidgetFactory): - @staticmethod def type(): return "document_relation_editor_document_side" diff --git a/document_management_system/gui/relation_editor_feature_side_config_widget.py b/document_management_system/gui/relation_editor_feature_side_config_widget.py index 2d7186b..e7a4818 100644 --- a/document_management_system/gui/relation_editor_feature_side_config_widget.py +++ b/document_management_system/gui/relation_editor_feature_side_config_widget.py @@ -12,11 +12,10 @@ from qgis.PyQt.uic import loadUiType from qgis.gui import QgsAbstractRelationEditorConfigWidget -WidgetUi, _ = loadUiType(os.path.join(os.path.dirname(__file__), '../ui/relation_editor_feature_side_config_widget.ui')) +WidgetUi, _ = loadUiType(os.path.join(os.path.dirname(__file__), "../ui/relation_editor_feature_side_config_widget.ui")) class RelationEditorFeatureSideConfigWidget(QgsAbstractRelationEditorConfigWidget, WidgetUi): - def __init__(self, relation, parent): super().__init__(relation, parent) self.setupUi(self) @@ -25,13 +24,13 @@ def __init__(self, relation, parent): def config(self): return { - 'documents_path': self.mDocumentsPathExpressionWidget.currentField()[0], - 'document_filename': self.mDocumentFilenameExpressionWidget.currentField()[0], + "documents_path": self.mDocumentsPathExpressionWidget.currentField()[0], + "document_filename": self.mDocumentFilenameExpressionWidget.currentField()[0], } def setConfig(self, config): - self.mDocumentsPathExpressionWidget.setField(config.get('documents_path')) - self.mDocumentFilenameExpressionWidget.setField(config.get('document_filename')) + self.mDocumentsPathExpressionWidget.setField(config.get("documents_path")) + self.mDocumentFilenameExpressionWidget.setField(config.get("document_filename")) def setNmRelation(self, nmRelation): diff --git a/document_management_system/gui/relation_editor_feature_side_widget.py b/document_management_system/gui/relation_editor_feature_side_widget.py index 9272508..7f7981f 100644 --- a/document_management_system/gui/relation_editor_feature_side_widget.py +++ b/document_management_system/gui/relation_editor_feature_side_widget.py @@ -11,20 +11,9 @@ from PyQt5.QtQuickWidgets import QQuickWidget import os from enum import Enum -from qgis.PyQt.QtCore import ( - QDir, - QTimer, - QUrl, - QVariant, - pyqtSignal, - pyqtProperty, - pyqtSlot -) +from qgis.PyQt.QtCore import QDir, QTimer, QUrl, QVariant, pyqtSignal, pyqtProperty, pyqtSlot from qgis.PyQt.QtGui import QIcon -from qgis.PyQt.QtWidgets import ( - QAction, - QMessageBox -) +from qgis.PyQt.QtWidgets import QAction, QMessageBox from qgis.PyQt.uic import loadUiType from qgis.core import ( QgsExpression, @@ -34,30 +23,28 @@ QgsProject, QgsRelation, QgsSettingsEntryString, - QgsVectorLayerUtils -) -from qgis.gui import ( - QgsAbstractRelationEditorWidget, - QgsAttributeDialog + QgsVectorLayerUtils, ) +from qgis.gui import QgsAbstractRelationEditorWidget, QgsAttributeDialog from document_management_system.core.document_model import DocumentModel from document_management_system.core.file_type_icon_image_provider import FileTypeIconImageProvider from document_management_system.core.preview_image_provider import PreviewImageProvider from document_management_system.core.plugin_helper import PluginHelper -WidgetUi, _ = loadUiType(os.path.join(os.path.dirname(__file__), '../ui/relation_editor_feature_side_widget.ui')) +WidgetUi, _ = loadUiType(os.path.join(os.path.dirname(__file__), "../ui/relation_editor_feature_side_widget.ui")) class RelationEditorFeatureSideWidget(QgsAbstractRelationEditorWidget, WidgetUi): - class LastView(str, Enum): ListView = "ListView" IconView = "IconView" - settingsLastView = QgsSettingsEntryString('relationEditorFeatureSideLastView', - PluginHelper.PLUGIN_SLUG, - LastView.ListView, - PluginHelper.tr('Last view used in the relation editor document side widget')) + settingsLastView = QgsSettingsEntryString( + "relationEditorFeatureSideLastView", + PluginHelper.PLUGIN_SLUG, + LastView.ListView, + PluginHelper.tr("Last view used in the relation editor document side widget"), + ) signalCurrentViewChanged = pyqtSignal() @@ -68,7 +55,7 @@ def __init__(self, config, parent): self._updateUiTimer.timeout.connect(self.updateUiTimeout) self.setupUi(self) - print('DocumentRelationEditorFeatureSideWidget.__init__') + print("DocumentRelationEditorFeatureSideWidget.__init__") self.documents_path = str() self.document_filename = str() @@ -81,21 +68,22 @@ def __init__(self, config, parent): self._currentDocumentId = None # Actions - self.actionToggleEditing = QAction(QIcon(":/images/themes/default/mActionToggleEditing.svg"), - self.tr("Toggle editing mode for child layers")) + self.actionToggleEditing = QAction( + QIcon(":/images/themes/default/mActionToggleEditing.svg"), self.tr("Toggle editing mode for child layers") + ) self.actionToggleEditing.setCheckable(True) - self.actionSaveEdits = QAction(QIcon(":/images/themes/default/mActionSaveEdits.svg"), - self.tr("Save child layer edits")) - self.actionShowForm = QAction(QIcon(":/images/themes/default/mActionMultiEdit.svg"), - self.tr("Show form")) - self.actionAddFeature = QAction(QIcon(":/images/themes/default/symbologyAdd.svg"), - self.tr("Add document")) - self.actionDeleteFeature = QAction(QIcon(":/images/themes/default/mActionDeleteSelected.svg"), - self.tr("Drop document")) - self.actionLinkFeature = QAction(QIcon(":/images/themes/default/mActionLink.svg"), - self.tr("Link document")) - self.actionUnlinkFeature = QAction(QIcon(":/images/themes/default/mActionUnlink.svg"), - self.tr("Unlink document")) + self.actionSaveEdits = QAction( + QIcon(":/images/themes/default/mActionSaveEdits.svg"), self.tr("Save child layer edits") + ) + self.actionShowForm = QAction(QIcon(":/images/themes/default/mActionMultiEdit.svg"), self.tr("Show form")) + self.actionAddFeature = QAction(QIcon(":/images/themes/default/symbologyAdd.svg"), self.tr("Add document")) + self.actionDeleteFeature = QAction( + QIcon(":/images/themes/default/mActionDeleteSelected.svg"), self.tr("Drop document") + ) + self.actionLinkFeature = QAction(QIcon(":/images/themes/default/mActionLink.svg"), self.tr("Link document")) + self.actionUnlinkFeature = QAction( + QIcon(":/images/themes/default/mActionUnlink.svg"), self.tr("Unlink document") + ) # Tool buttons self.mToggleEditingToolButton.setDefaultAction(self.actionToggleEditing) @@ -120,12 +108,16 @@ def __init__(self, config, parent): self.view = QQuickWidget() self.view.rootContext().setContextProperty("documentModel", self.model) self.view.rootContext().setContextProperty("parentWidget", self) - self.view.rootContext().setContextProperty("CONST_LIST_VIEW", str(RelationEditorFeatureSideWidget.LastView.ListView)) - self.view.rootContext().setContextProperty("CONST_ICON_VIEW", str(RelationEditorFeatureSideWidget.LastView.IconView)) + self.view.rootContext().setContextProperty( + "CONST_LIST_VIEW", str(RelationEditorFeatureSideWidget.LastView.ListView) + ) + self.view.rootContext().setContextProperty( + "CONST_ICON_VIEW", str(RelationEditorFeatureSideWidget.LastView.IconView) + ) self.view.engine().addImageProvider("previewImageProvider", self._previewImageProvider) self.view.engine().addImageProvider("fileTypeSmallIconProvider", self._fileTypeSmallIconProvider) self.view.engine().addImageProvider("fileTypeBigIconProvider", self._fileTypeBigIconProvider) - self.view.setSource(QUrl.fromLocalFile(os.path.join(os.path.dirname(__file__), '../qml/DocumentList.qml'))) + self.view.setSource(QUrl.fromLocalFile(os.path.join(os.path.dirname(__file__), "../qml/DocumentList.qml"))) self.view.setResizeMode(QQuickWidget.SizeRootObjectToView) self.layout().addWidget(self.view) @@ -168,41 +160,32 @@ def nmRelation(self): return self._nmRelation def config(self): - return { - - } + return {} def setConfig(self, config): - self.documents_path = config['documents_path'] - self.document_filename = config['document_filename'] + self.documents_path = config["documents_path"] + self.document_filename = config["document_filename"] def updateUi(self): self._updateUiTimer.start(200) def updateUiTimeout(self): - self.model.init(self.relation(), - self.nmRelation(), - self.feature(), - self.documents_path, - self.document_filename) + self.model.init(self.relation(), self.nmRelation(), self.feature(), self.documents_path, self.document_filename) def updateButtons(self): toggleEditingButtonEnabled = False editable = False linkable = False - spatial = False selectionNotEmpty = self._currentDocumentId is not None if self.relation().isValid(): toggleEditingButtonEnabled = self.relation().referencingLayer().supportsEditing() editable = self.relation().referencingLayer().isEditable() linkable = self.relation().referencingLayer().isEditable() - spatial = self.relation().referencingLayer().isSpatial() if self.nmRelation().isValid(): toggleEditingButtonEnabled |= self.nmRelation().referencedLayer().supportsEditing() editable = self.nmRelation().referencedLayer().isEditable() - spatial = self.nmRelation().referencedLayer().isSpatial() self.mToggleEditingToolButton.setEnabled(toggleEditingButtonEnabled) self.mAddFeatureToolButton.setEnabled(editable) @@ -240,20 +223,23 @@ def _checkTransactionGroup(self): return connectionString = PluginHelper.connectionString(referenced_layer.source()) - transactionGroup = QgsProject.instance().transactionGroup(self.relation().referencedLayer().providerType(), - connectionString) + transactionGroup = QgsProject.instance().transactionGroup(referenced_layer.providerType(), connectionString) if transactionGroup is None: return if self.nmRelation().isValid(): - if (self.relation().referencedLayer() in transactionGroup.layers() and - self.relation().referencingLayer() in transactionGroup.layers() and - self.nmRelation().referencedLayer() in transactionGroup.layers()): + if ( + self.relation().referencedLayer() in transactionGroup.layers() + and self.relation().referencingLayer() in transactionGroup.layers() + and self.nmRelation().referencedLayer() in transactionGroup.layers() + ): self._layerInSameTransactionGroup = True else: - if (self.relation().referencedLayer() in transactionGroup.layers() and - self.relation().referencingLayer() in transactionGroup.layers()): + if ( + self.relation().referencedLayer() in transactionGroup.layers() + and self.relation().referencingLayer() in transactionGroup.layers() + ): self._layerInSameTransactionGroup = True def parentFormValueChanged(self, attribute, newValue): @@ -262,16 +248,20 @@ def parentFormValueChanged(self, attribute, newValue): def checkLayerEditingMode(self): if self.relation().referencingLayer().isEditable() is False: - QMessageBox.critical(self, - self.tr("Layer not editable"), - self.tr("Layer '{0}' is not in editing mode.").format(self.relation().referencingLayer().name())) + QMessageBox.critical( + self, + self.tr("Layer not editable"), + self.tr("Layer '{0}' is not in editing mode.").format(self.relation().referencingLayer().name()), + ) return False if self.nmRelation().isValid(): if self.nmRelation().referencedLayer().isEditable() is False: - QMessageBox.critical(self, - self.tr("Layer not editable"), - self.tr("Layer '{0}' is not in editing mode.").format(self.nmRelation().referencedLayer().name())) + QMessageBox.critical( + self, + self.tr("Layer not editable"), + self.tr("Layer '{0}' is not in editing mode.").format(self.nmRelation().referencedLayer().name()), + ) return False return True @@ -334,30 +324,32 @@ def addDroppedDocument(self, fileUrl): # For generated relations insert the referenced layer field if self.relation().type() == QgsRelation.Generated: polyRel = self.relation().polymorphicRelation() - keyAttrs[fields.indexFromName(polyRel.referencedLayerField())] = polyRel.layerRepresentation(self.relation().referencedLayer()) + keyAttrs[fields.indexFromName(polyRel.referencedLayerField())] = polyRel.layerRepresentation( + self.relation().referencedLayer() + ) if self.nmRelation().isValid(): # only normal relations support m:n relation if self.nmRelation().type() != QgsRelation.Normal: - QMessageBox.critical(self, - self.tr("Add document"), - self.tr("Invalid relation, Only normal relations support m:n relation.")) + QMessageBox.critical( + self, + self.tr("Add document"), + self.tr("Invalid relation, Only normal relations support m:n relation."), + ) return # Pre fill inserting document filepath - attributes = { - self.nmRelation().referencedLayer().fields().indexFromName(self.document_filename): filename - } + attributes = {self.nmRelation().referencedLayer().fields().indexFromName(self.document_filename): filename} # n:m Relation: first let the user create a new feature on the other table # and autocreate a new linking feature. - ok, feature = self.editorContext().vectorLayerTools().addFeature(self.nmRelation().referencedLayer(), - attributes, - QgsGeometry()) + ok, feature = ( + self.editorContext() + .vectorLayerTools() + .addFeature(self.nmRelation().referencedLayer(), attributes, QgsGeometry()) + ) if not ok: - QMessageBox.critical(self, - self.tr("Add document"), - self.tr("Could not add a new linking feature.")) + QMessageBox.critical(self, self.tr("Add document"), self.tr("Could not add a new linking feature.")) return for key in self.relation().fieldPairs(): @@ -366,15 +358,15 @@ def addDroppedDocument(self, fileUrl): for key in self.nmRelation().fieldPairs(): keyAttrs[fields.indexOf(key)] = feature.attribute(self.nmRelation().fieldPairs()[key]) - linkFeature = QgsVectorLayerUtils.createFeature(self.relation().referencingLayer(), - QgsGeometry(), - keyAttrs, - self.relation().referencingLayer().createExpressionContext()) + linkFeature = QgsVectorLayerUtils.createFeature( + self.relation().referencingLayer(), + QgsGeometry(), + keyAttrs, + self.relation().referencingLayer().createExpressionContext(), + ) if not self.relation().referencingLayer().addFeature(linkFeature): - QMessageBox.critical(self, - self.tr("Add document"), - self.tr("Could not add a new feature.")) + QMessageBox.critical(self, self.tr("Add document"), self.tr("Could not add a new feature.")) return else: @@ -384,13 +376,13 @@ def addDroppedDocument(self, fileUrl): # Pre fill inserting document filepath keyAttrs[fields] = filename - ok, feature = self.editorContext().vectorLayerTools().addFeature(self.relation().referencingLayer(), - keyAttrs, - QgsGeometry()) + ok, feature = ( + self.editorContext() + .vectorLayerTools() + .addFeature(self.relation().referencingLayer(), keyAttrs, QgsGeometry()) + ) if not ok: - QMessageBox.critical(self, - self.tr("Add document"), - self.tr("Could not add a new feature.")) + QMessageBox.critical(self, self.tr("Add document"), self.tr("Could not add a new feature.")) return self.updateUi() @@ -418,11 +410,7 @@ def showDocumentForm(self): if self.nmRelation().isValid(): layer = self.nmRelation().referencedLayer() - showDocumentFormDialog = QgsAttributeDialog(layer, - layer.getFeature(self._currentDocumentId), - False, - self, - True) + showDocumentFormDialog = QgsAttributeDialog(layer, layer.getFeature(self._currentDocumentId), False, self, True) showDocumentFormDialog.exec() self.updateUi() diff --git a/document_management_system/gui/relation_editor_feature_side_widget_factory.py b/document_management_system/gui/relation_editor_feature_side_widget_factory.py index 9447ed0..fb2b19d 100644 --- a/document_management_system/gui/relation_editor_feature_side_widget_factory.py +++ b/document_management_system/gui/relation_editor_feature_side_widget_factory.py @@ -10,11 +10,12 @@ from qgis.gui import QgsAbstractRelationEditorWidgetFactory from document_management_system.gui.relation_editor_feature_side_widget import RelationEditorFeatureSideWidget -from document_management_system.gui.relation_editor_feature_side_config_widget import RelationEditorFeatureSideConfigWidget +from document_management_system.gui.relation_editor_feature_side_config_widget import ( + RelationEditorFeatureSideConfigWidget, +) class RelationEditorFeatureSideWidgetFactory(QgsAbstractRelationEditorWidgetFactory): - @staticmethod def type(): return "document_relation_editor_feature_side" diff --git a/document_management_system/tests/test_widgets.py b/document_management_system/tests/test_widgets.py index da7cce3..450ddf6 100644 --- a/document_management_system/tests/test_widgets.py +++ b/document_management_system/tests/test_widgets.py @@ -1,12 +1,11 @@ - from qgis.testing import unittest, start_app -from document_management_system.gui.relation_editor_document_side_widget_factory import RelationEditorDocumentSideWidgetFactory +from document_management_system.gui.relation_editor_document_side_widget_factory import ( + RelationEditorDocumentSideWidgetFactory, +) start_app() class TestRelationEditorDocumentSideWidgetFactory(unittest.TestCase): - def test_instantiate(self): RelationEditorDocumentSideWidgetFactory() -