Skip to content

Commit

Permalink
run pre-commit on all files
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids committed Oct 11, 2023
1 parent 58ab51c commit 985bda7
Show file tree
Hide file tree
Showing 10 changed files with 246 additions and 106 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ jobs:
run: |
docker run -v ${GITHUB_WORKSPACE}:/src -w /src opengisch/qgis:stable sh -c 'xvfb-run pytest-3'
env:
DOCKER_IMAGE: ${{ steps.docker-build.outputs.FULL_IMAGE_NAME }}
DOCKER_IMAGE: ${{ steps.docker-build.outputs.FULL_IMAGE_NAME }}
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ __pycache__
i18n
.DS_Store
github_deploy_key.out
ordered_relation_editor/resources_rcs.py
ordered_relation_editor/resources_rcs.py
40 changes: 40 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
exclude: ".venv|tests/dev/|tests/fixtures/"
fail_fast: false
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: check-added-large-files
args: ["--maxkb=500"]
- id: check-case-conflict
- id: check-toml
- id: check-xml
- id: check-yaml
- id: detect-private-key
- id: end-of-file-fixer
- id: fix-byte-order-marker
- id: fix-encoding-pragma
args: [--remove]
- id: trailing-whitespace
args: [--markdown-linebreak-ext=md]

- repo: https://github.com/asottile/pyupgrade
rev: v3.15.0
hooks:
- id: pyupgrade
args: [--py39-plus]

- repo: https://github.com/psf/black
rev: 23.9.1
hooks:
- id: black

- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
args: ["--profile", "black", "--filter-files"]

ci:
autofix_prs: true
autoupdate_schedule: quarterly
6 changes: 4 additions & 2 deletions ordered_relation_editor/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# -----------------------------------------------------------
#
# QGIS Ordered Relation Editor Plugin
Expand All @@ -15,5 +14,8 @@ def classFactory(iface):
:type iface: QgsInterface
"""
#
from ordered_relation_editor.core.ordered_relation_editor_plugin import OrderedRelationEditorPlugin
from ordered_relation_editor.core.ordered_relation_editor_plugin import (
OrderedRelationEditorPlugin,
)

return OrderedRelationEditorPlugin(iface)
22 changes: 13 additions & 9 deletions ordered_relation_editor/core/ordered_relation_editor_plugin.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# -----------------------------------------------------------
#
# QGIS Ordered Relation Editor Plugin
Expand All @@ -9,31 +8,36 @@
# -----------------------------------------------------------

import os
from qgis.PyQt.QtCore import QCoreApplication, QTranslator, QObject, QLocale, QSettings

from qgis.gui import QgisInterface, QgsGui
from ordered_relation_editor.gui.ordered_relation_editor_widget_factory import OrderedRelationEditorWidgetFactory, WIDGET_TYPE
from qgis.PyQt.QtCore import QCoreApplication, QLocale, QObject, QSettings, QTranslator

from ordered_relation_editor.gui.ordered_relation_editor_widget_factory import (
WIDGET_TYPE,
OrderedRelationEditorWidgetFactory,
)

DEBUG = True


class OrderedRelationEditorPlugin(QObject):

plugin_name = "&Ordered Relation Editor"

def __init__(self, iface: QgisInterface):
QObject.__init__(self)
self.iface = iface

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

def initGui(self):
QgsGui.relationWidgetRegistry().addRelationWidget(OrderedRelationEditorWidgetFactory())
QgsGui.relationWidgetRegistry().addRelationWidget(
OrderedRelationEditorWidgetFactory()
)

def unload(self):
QgsGui.relationWidgetRegistry().removeRelationWidget(WIDGET_TYPE)

112 changes: 80 additions & 32 deletions ordered_relation_editor/core/ordered_relation_model.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# -----------------------------------------------------------
#
# QGIS Ordered Relation Editor Plugin
Expand All @@ -9,13 +8,29 @@
# -----------------------------------------------------------

from enum import Enum
from qgis.PyQt.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, Qt, QObject, QAbstractTableModel, QModelIndex
from qgis.core import QgsRelation, QgsFeature, QgsExpression, QgsExpressionContext, QgsExpressionContextUtils, QgsMessageLog

from qgis.core import (
QgsExpression,
QgsExpressionContext,
QgsExpressionContextUtils,
QgsFeature,
QgsMessageLog,
QgsRelation,
)
from qgis.PyQt.QtCore import (
QAbstractTableModel,
QModelIndex,
QObject,
Qt,
pyqtProperty,
pyqtSignal,
pyqtSlot,
)

Debug = True

class OrderedRelationModel(QAbstractTableModel):

class OrderedRelationModel(QAbstractTableModel):
ImagePathRole = Qt.UserRole + 1
DescriptionRole = Qt.UserRole + 2
FeatureIdRole = Qt.UserRole + 5
Expand All @@ -24,15 +39,22 @@ class OrderedRelationModel(QAbstractTableModel):
currentFeatureChanged = pyqtSignal(QgsFeature)

def __init__(self, parent: QObject = None):
super(OrderedRelationModel, self).__init__(parent)
super().__init__(parent)
self._relation = QgsRelation()
self._ordering_field = str()
self._image_path = str()
self._description = str()
self._ordering_field = ""
self._image_path = ""
self._description = ""
self._feature = QgsFeature()
self._related_features = []

def init(self, relation: QgsRelation, ordering_field: str, feature: QgsFeature, image_path: str, description: str):
def init(
self,
relation: QgsRelation,
ordering_field: str,
feature: QgsFeature,
image_path: str,
description: str,
):
self._relation = relation
self._ordering_field = ordering_field
self._image_path = image_path
Expand Down Expand Up @@ -85,25 +107,33 @@ def data(self, index: QModelIndex, role: int = ...):
if role == self.ImagePathRole:
exp = QgsExpression(self._image_path)
context = QgsExpressionContext()
context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(self._relation.referencingLayer()))
context.appendScopes(
QgsExpressionContextUtils.globalProjectLayerScopes(
self._relation.referencingLayer()
)
)
context.setFeature(self._related_features[index.row()])
res = exp.evaluate(context)
if res is None:
res = str()
res = ""
if Debug:
QgsMessageLog.logMessage("ImagePath role: '{0}'".format(str(res)))
QgsMessageLog.logMessage(f"ImagePath role: '{str(res)}'")
return res

elif role == self.DescriptionRole:
exp = QgsExpression(self._description)
context = QgsExpressionContext()
context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(self._relation.referencingLayer()))
context.appendScopes(
QgsExpressionContextUtils.globalProjectLayerScopes(
self._relation.referencingLayer()
)
)
context.setFeature(self._related_features[index.row()])
res = exp.evaluate(context)
if res is None:
res = str()
res = ""
if Debug:
QgsMessageLog.logMessage("Description role: '{0}'".format(str(res)))
QgsMessageLog.logMessage(f"Description role: '{str(res)}'")
return res

elif role == self.FeatureIdRole:
Expand All @@ -123,7 +153,11 @@ def moveitems(self, index_from, index_to):
if index_from == index_to:
return

field_index = self._relation.referencingLayer().fields().indexFromName(self._ordering_field)
field_index = (
self._relation.referencingLayer()
.fields()
.indexFromName(self._ordering_field)
)
if field_index < 0:
return

Expand All @@ -133,17 +167,23 @@ def moveitems(self, index_from, index_to):

self.beginResetModel()

for i in range(start_index, end_index+1):
for i in range(start_index, end_index + 1):
f = self._related_features[i]
if i == index_from:
self._related_features[i][self._ordering_field] = index_to + 1 # ranks are index +1 (start at 1)
self._related_features[i][self._ordering_field] = (
index_to + 1
) # ranks are index +1 (start at 1)
else:
self._related_features[i][self._ordering_field] += delta

res = self._relation.referencingLayer().changeAttributeValue(f.id(), field_index, f[self._ordering_field])
res = self._relation.referencingLayer().changeAttributeValue(
f.id(), field_index, f[self._ordering_field]
)
print(res)

self._related_features = sorted(self._related_features, key=lambda _f: _f[self._ordering_field])
self._related_features = sorted(
self._related_features, key=lambda _f: _f[self._ordering_field]
)

self.endResetModel()

Expand All @@ -154,28 +194,36 @@ def onViewCurrentFeatureChanged(self, index):

def roleNames(self):
return {
self.ImagePathRole: b'ImagePath',
self.DescriptionRole: b'Description',
self.FeatureIdRole: b'FeatureId'
self.ImagePathRole: b"ImagePath",
self.DescriptionRole: b"Description",
self.FeatureIdRole: b"FeatureId",
}

def reloadData(self):
self.beginResetModel()
self._related_features = []

if Debug:
QgsMessageLog.logMessage("Reload data: Ordering field='{0}', Relation valid/id={1}/'{2}', Feature valid={3}"
.format(self._ordering_field, self._relation.isValid(), self._relation.id(), self._feature.isValid()))

if len(self._ordering_field) > 0 and self._relation.isValid() and self._feature.isValid():
QgsMessageLog.logMessage(
"Reload data: Ordering field='{}', Relation valid/id={}/'{}', Feature valid={}".format(
self._ordering_field,
self._relation.isValid(),
self._relation.id(),
self._feature.isValid(),
)
)

if (
len(self._ordering_field) > 0
and self._relation.isValid()
and self._feature.isValid()
):
request = self._relation.getRelatedFeaturesRequest(self._feature)
for f in self._relation.referencingLayer().getFeatures(request):
self._related_features.append(f)

self._related_features = sorted(self._related_features, key=lambda _f: _f[self._ordering_field])
self._related_features = sorted(
self._related_features, key=lambda _f: _f[self._ordering_field]
)

self.endResetModel()




Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# -----------------------------------------------------------
#
# QGIS Ordered Relation Editor Plugin
Expand All @@ -9,15 +8,21 @@
# -----------------------------------------------------------

import os
from qgis.PyQt.uic import loadUiType
from qgis.PyQt.QtWidgets import QGridLayout, QLabel
from qgis.gui import QgsAbstractRelationEditorConfigWidget

WidgetUi, _ = loadUiType(os.path.join(os.path.dirname(__file__), '../ui/ordered_relation_editor_config_widget.ui'))
from qgis.gui import QgsAbstractRelationEditorConfigWidget
from qgis.PyQt.QtWidgets import QGridLayout, QLabel
from qgis.PyQt.uic import loadUiType

WidgetUi, _ = loadUiType(
os.path.join(
os.path.dirname(__file__), "../ui/ordered_relation_editor_config_widget.ui"
)
)

class OrderedRelationEditorConfigWidget(QgsAbstractRelationEditorConfigWidget, WidgetUi):

class OrderedRelationEditorConfigWidget(
QgsAbstractRelationEditorConfigWidget, WidgetUi
):
def __init__(self, relation, parent):
super().__init__(relation, parent)
self.setupUi(self)
Expand All @@ -28,12 +33,12 @@ def __init__(self, relation, parent):

def config(self):
return {
'ordering_field': self.mOrderingFieldComboBox.currentField(),
'description': self.mDescriptionExpressionWidget.currentField()[0],
'image_path': self.mImagePathExpressionWidget.currentField()[0]
"ordering_field": self.mOrderingFieldComboBox.currentField(),
"description": self.mDescriptionExpressionWidget.currentField()[0],
"image_path": self.mImagePathExpressionWidget.currentField()[0],
}

def setConfig(self, config):
self.mOrderingFieldComboBox.setField(config.get('ordering_field'))
self.mDescriptionExpressionWidget.setField(config.get('description'))
self.mImagePathExpressionWidget.setField(config.get('image_path'))
self.mOrderingFieldComboBox.setField(config.get("ordering_field"))
self.mDescriptionExpressionWidget.setField(config.get("description"))
self.mImagePathExpressionWidget.setField(config.get("image_path"))
Loading

0 comments on commit 985bda7

Please sign in to comment.