Skip to content

Commit

Permalink
Development on Windows (prototype) (#16)
Browse files Browse the repository at this point in the history
  • Loading branch information
ciscorn committed Mar 21, 2023
1 parent dff18e4 commit 116e8f3
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 16 deletions.
35 changes: 32 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,59 @@ PACKAGE_NAME = mojxml_plugin
# Use this tag for packaging
VERSION = HEAD

# Windows (OSGeo4W)
ifeq ($(OS),Windows_NT)
QGIS_PYTHON = C:\OSGeo4W\bin\python-qgis-ltr.bat
QGIS_USER = $(APPDATA)\QGIS\QGIS3\profiles\default
QGIS_DLL = C:\OSGeo4W\bin
export QGIS_PREFIX_PATH = C:\OSGeo4W\apps\qgis-ltr
else
# macOS
QGIS_BIN = /Applications/QGIS.app/Contents/MacOS/bin
ifeq ($(shell uname),Darwin)
QGIS_PYTHON = /Applications/QGIS.app/Contents/MacOS/bin/python3
QGIS_USER = ~/Library/Application\ Support/QGIS/QGIS3/profiles/default
QGIS_STD_PLUGINS = /Applications/QGIS.app/Contents/Resources/python/plugins
export QGIS_PREFIX_PATH = /Applications/QGIS.app/Contents/MacOS
export DYLD_LIBRARY_PATH = /Applications/QGIS.app/Contents/MacOS/lib
export PROJ_LIB = /Applications/QGIS.app/Contents/Resources/proj
else
# TODO: Linux
endif
endif


help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

init: ## Startup project
poetry env use $(QGIS_BIN)/python3
ifeq ($(OS),Windows_NT)
$(QGIS_PYTHON) -m pip install poetry
$(QGIS_PYTHON) -m poetry config --local virtualenvs.in-project true
$(QGIS_PYTHON) -m poetry install
$(QGIS_PYTHON) -c "import pathlib;import qgis;open('.venv/Lib/site-packages/qgis.pth', 'w').write(str((pathlib.Path(qgis.__file__)/'../..').resolve()) + '\n' + str((pathlib.Path(qgis.__file__)/'../../plugins').resolve()))"
else
poetry env use $(QGIS_PYTHON)
poetry install
echo $(QGIS_STD_PLUGINS) > .venv/lib/python3.9/site-packages/qgis_std_plugins.pth
endif

deploy: ## Deploy to QGIS
ifeq ($(OS),Windows_NT)
robocopy /mir ${PACKAGE_NAME} $(QGIS_USER)/python/plugins/${PACKAGE_NAME}
else
rsync -av --delete ${PACKAGE_NAME} $(QGIS_USER)/python/plugins/
endif

package: ## Build zip package
mkdir -p dist
git archive -o dist/artifact-${VERSION}.zip ${VERSION} ${PACKAGE_NAME}

test: ## Test
pytest -v --cov --cov-report=term
ifeq ($(OS),Windows_NT)
$(QGIS_PYTHON) -m poetry run python -c "import os; os.add_dll_directory(r'${QGIS_DLL}'); import pytest; pytest.main('-v --cov --cov-report=term'.split())"
else
poetry run pytest -v --cov --cov-report=term
endif

update-deps: ## Update mojxml library
pip download mojxml --no-dependencies
Expand Down
17 changes: 16 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ isort = "^5.12.0"
pytest = "^7.2.2"
flake8-pyproject = "^1.2.2"
pytest-cov = "^4.0.0"
pyqt5-stubs = { version = "^5.15.6.0", platform = "win32" }

[build-system]
requires = ["poetry-core"]
Expand All @@ -26,7 +27,7 @@ build-backend = "poetry.core.masonry.api"
profile = "black"

[tool.pytest.ini_options]
# pythonpath = "src"
pythonpath = "."
addopts = ["--import-mode=importlib"]

[tool.flake8]
Expand Down
23 changes: 12 additions & 11 deletions tests/test_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@

def test_registered(qgis_app: QgsApplication, provider: str):
registory = QgsApplication.processingRegistry()
p = registory.providerById("mojxmlloader")
assert p is not None
assert isinstance(p.icon(), QIcon)
provider = registory.providerById("mojxmlloader")
assert provider is not None
assert len(provider.name()) > 0
assert isinstance(provider.icon(), QIcon)

alg = registory.algorithmById("mojxmlloader:mojxmlloader")
assert alg is not None
Expand All @@ -19,7 +20,7 @@ def test_registered(qgis_app: QgsApplication, provider: str):


def test_load_xml(qgis_app: QgsApplication, provider: str):
import processing # pyright: ignore
import processing

result = processing.run(
"mojxmlloader:mojxmlloader",
Expand All @@ -33,7 +34,7 @@ def test_load_xml(qgis_app: QgsApplication, provider: str):


def test_load_xml_to_file(qgis_app: QgsApplication, provider: str, tmp_path: Path):
import processing # pyright: ignore
import processing

output_path = str(tmp_path / "test.gpkg")
result = processing.run(
Expand All @@ -57,8 +58,8 @@ def test_load_zip(qgis_app: QgsApplication, provider: str):
"OUTPUT": "memory:",
},
)
v: QgsVectorLayer = result["OUTPUT"]
assert v.featureCount() == 453
layer: QgsVectorLayer = result["OUTPUT"]
assert layer.featureCount() == 453

result = processing.run(
"mojxmlloader:mojxmlloader",
Expand All @@ -68,8 +69,8 @@ def test_load_zip(qgis_app: QgsApplication, provider: str):
"OUTPUT": "memory:",
},
)
v: QgsVectorLayer = result["OUTPUT"]
assert v.featureCount() == 446
layer: QgsVectorLayer = result["OUTPUT"]
assert layer.featureCount() == 446

result = processing.run(
"mojxmlloader:mojxmlloader",
Expand All @@ -80,5 +81,5 @@ def test_load_zip(qgis_app: QgsApplication, provider: str):
"OUTPUT": "memory:",
},
)
v: QgsVectorLayer = result["OUTPUT"]
assert v.featureCount() == 27237
layer: QgsVectorLayer = result["OUTPUT"]
assert layer.featureCount() == 27237

0 comments on commit 116e8f3

Please sign in to comment.