mirror of
https://github.com/ARUP-CAS/aiscr-qgis-amcr-viewer.git
synced 2026-06-19 04:12:55 +02:00
Removed unused files
This commit is contained in:
@@ -1,244 +0,0 @@
|
|||||||
#/***************************************************************************
|
|
||||||
# AmcrViewer
|
|
||||||
#
|
|
||||||
# Viewing and downloading the AMČR data.
|
|
||||||
# -------------------
|
|
||||||
# begin : 2026-02-03
|
|
||||||
# git sha : $Format:%H$
|
|
||||||
# copyright : (C) 2026 by David Spáčil
|
|
||||||
# email : spacil@arub.cz
|
|
||||||
# ***************************************************************************/
|
|
||||||
#
|
|
||||||
#/***************************************************************************
|
|
||||||
# * *
|
|
||||||
# * This program is free software; you can redistribute it and/or modify *
|
|
||||||
# * it under the terms of the GNU General Public License as published by *
|
|
||||||
# * the Free Software Foundation; either version 2 of the License, or *
|
|
||||||
# * (at your option) any later version. *
|
|
||||||
# * *
|
|
||||||
# ***************************************************************************/
|
|
||||||
|
|
||||||
#################################################
|
|
||||||
# Edit the following to match your sources lists
|
|
||||||
#################################################
|
|
||||||
|
|
||||||
|
|
||||||
#Add iso code for any locales you want to support here (space separated)
|
|
||||||
# default is no locales
|
|
||||||
# LOCALES = af
|
|
||||||
LOCALES =
|
|
||||||
|
|
||||||
# If locales are enabled, set the name of the lrelease binary on your system. If
|
|
||||||
# you have trouble compiling the translations, you may have to specify the full path to
|
|
||||||
# lrelease
|
|
||||||
#LRELEASE = lrelease
|
|
||||||
#LRELEASE = lrelease-qt4
|
|
||||||
|
|
||||||
|
|
||||||
# translation
|
|
||||||
SOURCES = \
|
|
||||||
__init__.py \
|
|
||||||
amcr_viewer.py amcr_viewer_dialog.py
|
|
||||||
|
|
||||||
PLUGINNAME = amcr_viewer
|
|
||||||
|
|
||||||
PY_FILES = \
|
|
||||||
__init__.py \
|
|
||||||
amcr_viewer.py amcr_viewer_dialog.py
|
|
||||||
|
|
||||||
UI_FILES = amcr_viewer_dialog_base.ui
|
|
||||||
|
|
||||||
EXTRAS = metadata.txt icon.png
|
|
||||||
|
|
||||||
EXTRA_DIRS =
|
|
||||||
|
|
||||||
COMPILED_RESOURCE_FILES = resources.py
|
|
||||||
|
|
||||||
PEP8EXCLUDE=pydev,resources.py,conf.py,third_party,ui
|
|
||||||
|
|
||||||
# QGISDIR points to the location where your plugin should be installed.
|
|
||||||
# This varies by platform, relative to your HOME directory:
|
|
||||||
# * Linux:
|
|
||||||
# .local/share/QGIS/QGIS3/profiles/default/python/plugins/
|
|
||||||
# * Mac OS X:
|
|
||||||
# Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins
|
|
||||||
# * Windows:
|
|
||||||
# AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins'
|
|
||||||
|
|
||||||
QGISDIR=C:\Users\Spacil\AppData/Roaming/QGIS/QGIS3/profiles/default/python/plugins
|
|
||||||
|
|
||||||
#################################################
|
|
||||||
# Normally you would not need to edit below here
|
|
||||||
#################################################
|
|
||||||
|
|
||||||
HELP = help/build/html
|
|
||||||
|
|
||||||
PLUGIN_UPLOAD = $(c)/plugin_upload.py
|
|
||||||
|
|
||||||
RESOURCE_SRC=$(shell grep '^ *<file' resources.qrc | sed 's@</file>@@g;s/.*>//g' | tr '\n' ' ')
|
|
||||||
|
|
||||||
.PHONY: default
|
|
||||||
default:
|
|
||||||
@echo While you can use make to build and deploy your plugin, pb_tool
|
|
||||||
@echo is a much better solution.
|
|
||||||
@echo A Python script, pb_tool provides platform independent management of
|
|
||||||
@echo your plugins and runs anywhere.
|
|
||||||
@echo You can install pb_tool using: pip install pb_tool
|
|
||||||
@echo See https://g-sherman.github.io/plugin_build_tool/ for info.
|
|
||||||
|
|
||||||
compile: $(COMPILED_RESOURCE_FILES)
|
|
||||||
|
|
||||||
%.py : %.qrc $(RESOURCES_SRC)
|
|
||||||
pyrcc5 -o $*.py $<
|
|
||||||
|
|
||||||
%.qm : %.ts
|
|
||||||
$(LRELEASE) $<
|
|
||||||
|
|
||||||
test: compile transcompile
|
|
||||||
@echo
|
|
||||||
@echo "----------------------"
|
|
||||||
@echo "Regression Test Suite"
|
|
||||||
@echo "----------------------"
|
|
||||||
|
|
||||||
@# Preceding dash means that make will continue in case of errors
|
|
||||||
@-export PYTHONPATH=`pwd`:$(PYTHONPATH); \
|
|
||||||
export QGIS_DEBUG=0; \
|
|
||||||
export QGIS_LOG_FILE=/dev/null; \
|
|
||||||
nosetests -v --with-id --with-coverage --cover-package=. \
|
|
||||||
3>&1 1>&2 2>&3 3>&- || true
|
|
||||||
@echo "----------------------"
|
|
||||||
@echo "If you get a 'no module named qgis.core error, try sourcing"
|
|
||||||
@echo "the helper script we have provided first then run make test."
|
|
||||||
@echo "e.g. source run-env-linux.sh <path to qgis install>; make test"
|
|
||||||
@echo "----------------------"
|
|
||||||
|
|
||||||
deploy: compile doc transcompile
|
|
||||||
@echo
|
|
||||||
@echo "------------------------------------------"
|
|
||||||
@echo "Deploying plugin to your .qgis2 directory."
|
|
||||||
@echo "------------------------------------------"
|
|
||||||
# The deploy target only works on unix like operating system where
|
|
||||||
# the Python plugin directory is located at:
|
|
||||||
# $HOME/$(QGISDIR)/python/plugins
|
|
||||||
mkdir -p $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
|
|
||||||
cp -vf $(PY_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
|
|
||||||
cp -vf $(UI_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
|
|
||||||
cp -vf $(COMPILED_RESOURCE_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
|
|
||||||
cp -vf $(EXTRAS) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
|
|
||||||
cp -vfr i18n $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
|
|
||||||
cp -vfr $(HELP) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)/help
|
|
||||||
# Copy extra directories if any
|
|
||||||
(foreach EXTRA_DIR,(EXTRA_DIRS), cp -R (EXTRA_DIR) (HOME)/(QGISDIR)/python/plugins/(PLUGINNAME)/;)
|
|
||||||
|
|
||||||
|
|
||||||
# The dclean target removes compiled python files from plugin directory
|
|
||||||
# also deletes any .git entry
|
|
||||||
dclean:
|
|
||||||
@echo
|
|
||||||
@echo "-----------------------------------"
|
|
||||||
@echo "Removing any compiled python files."
|
|
||||||
@echo "-----------------------------------"
|
|
||||||
find $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) -iname "*.pyc" -delete
|
|
||||||
find $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) -iname ".git" -prune -exec rm -Rf {} \;
|
|
||||||
|
|
||||||
|
|
||||||
derase:
|
|
||||||
@echo
|
|
||||||
@echo "-------------------------"
|
|
||||||
@echo "Removing deployed plugin."
|
|
||||||
@echo "-------------------------"
|
|
||||||
rm -Rf $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
|
|
||||||
|
|
||||||
zip: deploy dclean
|
|
||||||
@echo
|
|
||||||
@echo "---------------------------"
|
|
||||||
@echo "Creating plugin zip bundle."
|
|
||||||
@echo "---------------------------"
|
|
||||||
# The zip target deploys the plugin and creates a zip file with the deployed
|
|
||||||
# content. You can then upload the zip file on http://plugins.qgis.org
|
|
||||||
rm -f $(PLUGINNAME).zip
|
|
||||||
cd $(HOME)/$(QGISDIR)/python/plugins; zip -9r $(CURDIR)/$(PLUGINNAME).zip $(PLUGINNAME)
|
|
||||||
|
|
||||||
package: compile
|
|
||||||
# Create a zip package of the plugin named $(PLUGINNAME).zip.
|
|
||||||
# This requires use of git (your plugin development directory must be a
|
|
||||||
# git repository).
|
|
||||||
# To use, pass a valid commit or tag as follows:
|
|
||||||
# make package VERSION=Version_0.3.2
|
|
||||||
@echo
|
|
||||||
@echo "------------------------------------"
|
|
||||||
@echo "Exporting plugin to zip package. "
|
|
||||||
@echo "------------------------------------"
|
|
||||||
rm -f $(PLUGINNAME).zip
|
|
||||||
git archive --prefix=$(PLUGINNAME)/ -o $(PLUGINNAME).zip $(VERSION)
|
|
||||||
echo "Created package: $(PLUGINNAME).zip"
|
|
||||||
|
|
||||||
upload: zip
|
|
||||||
@echo
|
|
||||||
@echo "-------------------------------------"
|
|
||||||
@echo "Uploading plugin to QGIS Plugin repo."
|
|
||||||
@echo "-------------------------------------"
|
|
||||||
$(PLUGIN_UPLOAD) $(PLUGINNAME).zip
|
|
||||||
|
|
||||||
transup:
|
|
||||||
@echo
|
|
||||||
@echo "------------------------------------------------"
|
|
||||||
@echo "Updating translation files with any new strings."
|
|
||||||
@echo "------------------------------------------------"
|
|
||||||
@chmod +x scripts/update-strings.sh
|
|
||||||
@scripts/update-strings.sh $(LOCALES)
|
|
||||||
|
|
||||||
transcompile:
|
|
||||||
@echo
|
|
||||||
@echo "----------------------------------------"
|
|
||||||
@echo "Compiled translation files to .qm files."
|
|
||||||
@echo "----------------------------------------"
|
|
||||||
@chmod +x scripts/compile-strings.sh
|
|
||||||
@scripts/compile-strings.sh $(LRELEASE) $(LOCALES)
|
|
||||||
|
|
||||||
transclean:
|
|
||||||
@echo
|
|
||||||
@echo "------------------------------------"
|
|
||||||
@echo "Removing compiled translation files."
|
|
||||||
@echo "------------------------------------"
|
|
||||||
rm -f i18n/*.qm
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo
|
|
||||||
@echo "------------------------------------"
|
|
||||||
@echo "Removing uic and rcc generated files"
|
|
||||||
@echo "------------------------------------"
|
|
||||||
rm $(COMPILED_UI_FILES) $(COMPILED_RESOURCE_FILES)
|
|
||||||
|
|
||||||
doc:
|
|
||||||
@echo
|
|
||||||
@echo "------------------------------------"
|
|
||||||
@echo "Building documentation using sphinx."
|
|
||||||
@echo "------------------------------------"
|
|
||||||
cd help; make html
|
|
||||||
|
|
||||||
pylint:
|
|
||||||
@echo
|
|
||||||
@echo "-----------------"
|
|
||||||
@echo "Pylint violations"
|
|
||||||
@echo "-----------------"
|
|
||||||
@pylint --reports=n --rcfile=pylintrc . || true
|
|
||||||
@echo
|
|
||||||
@echo "----------------------"
|
|
||||||
@echo "If you get a 'no module named qgis.core' error, try sourcing"
|
|
||||||
@echo "the helper script we have provided first then run make pylint."
|
|
||||||
@echo "e.g. source run-env-linux.sh <path to qgis install>; make pylint"
|
|
||||||
@echo "----------------------"
|
|
||||||
|
|
||||||
|
|
||||||
# Run pep8 style checking
|
|
||||||
#http://pypi.python.org/pypi/pep8
|
|
||||||
pep8:
|
|
||||||
@echo
|
|
||||||
@echo "-----------"
|
|
||||||
@echo "PEP8 issues"
|
|
||||||
@echo "-----------"
|
|
||||||
@pep8 --repeat --ignore=E203,E121,E122,E123,E124,E125,E126,E127,E128 --exclude $(PEP8EXCLUDE) . || true
|
|
||||||
@echo "-----------"
|
|
||||||
@echo "Ignored in PEP8 check:"
|
|
||||||
@echo $(PEP8EXCLUDE)
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
|
||||||
/***************************************************************************
|
|
||||||
AmcrViewerDialog
|
|
||||||
A QGIS plugin
|
|
||||||
Viewing and downloading the AMČR data.
|
|
||||||
Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
|
|
||||||
-------------------
|
|
||||||
begin : 2026-02-03
|
|
||||||
git sha : $Format:%H$
|
|
||||||
copyright : (C) 2026 by David Spáčil
|
|
||||||
email : spacil@arub.cz
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* *
|
|
||||||
* This program is free software; you can redistribute it and/or modify *
|
|
||||||
* it under the terms of the GNU General Public License as published by *
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or *
|
|
||||||
* (at your option) any later version. *
|
|
||||||
* *
|
|
||||||
***************************************************************************/
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
|
||||||
from qgis.PyQt import QtWidgets
|
|
||||||
|
|
||||||
# This loads your .ui file so that PyQt can populate your plugin with the elements from Qt Designer
|
|
||||||
FORM_CLASS, _ = uic.loadUiType(os.path.join(
|
|
||||||
os.path.dirname(__file__), 'amcr_viewer_dialog_base.ui'))
|
|
||||||
|
|
||||||
|
|
||||||
class AmcrViewerDialog(QtWidgets.QDialog, FORM_CLASS):
|
|
||||||
def __init__(self, parent=None):
|
|
||||||
"""Constructor."""
|
|
||||||
super(AmcrViewerDialog, self).__init__(parent)
|
|
||||||
# Set up the user interface from Designer through FORM_CLASS.
|
|
||||||
# After self.setupUi() you can access any designer object by doing
|
|
||||||
# self.<objectname>, and you can use autoconnect slots - see
|
|
||||||
# http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
|
|
||||||
# #widgets-and-dialogs-with-auto-connect
|
|
||||||
self.setupUi(self)
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
<ui version="4.0" >
|
|
||||||
<class>AmcrViewerDialogBase</class>
|
|
||||||
<widget class="QDialog" name="AmcrViewerDialogBase" >
|
|
||||||
<property name="geometry" >
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>400</width>
|
|
||||||
<height>300</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle" >
|
|
||||||
<string>AMČR Viewer</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QDialogButtonBox" name="button_box" >
|
|
||||||
<property name="geometry" >
|
|
||||||
<rect>
|
|
||||||
<x>30</x>
|
|
||||||
<y>240</y>
|
|
||||||
<width>341</width>
|
|
||||||
<height>32</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="orientation" >
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="standardButtons" >
|
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections>
|
|
||||||
<connection>
|
|
||||||
<sender>button_box</sender>
|
|
||||||
<signal>accepted()</signal>
|
|
||||||
<receiver>AmcrViewerDialogBase</receiver>
|
|
||||||
<slot>accept()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="source_label" >
|
|
||||||
<x>248</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destination_label" >
|
|
||||||
<x>157</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>button_box</sender>
|
|
||||||
<signal>rejected()</signal>
|
|
||||||
<receiver>AmcrViewerDialogBase</receiver>
|
|
||||||
<slot>reject()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="source_label" >
|
|
||||||
<x>316</x>
|
|
||||||
<y>260</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destination_label" >
|
|
||||||
<x>286</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
</ui>
|
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
name=AMČR Viewer
|
name=AMČR Viewer
|
||||||
qgisMinimumVersion=3.4
|
qgisMinimumVersion=3.4
|
||||||
description=Viewing and downloading the AMČR data.
|
description=Viewing and downloading the AMČR data.
|
||||||
version=1
|
version=1.0.1
|
||||||
author=David Spáčil
|
author=David Spáčil
|
||||||
email=spacil@arub.cz
|
email=spacil@arub.cz
|
||||||
|
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
#/***************************************************************************
|
|
||||||
# AmcrViewer
|
|
||||||
#
|
|
||||||
# Configuration file for plugin builder tool (pb_tool)
|
|
||||||
# Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
|
|
||||||
# -------------------
|
|
||||||
# begin : 2026-02-03
|
|
||||||
# copyright : (C) 2026 by David Spáčil
|
|
||||||
# email : spacil@arub.cz
|
|
||||||
# ***************************************************************************/
|
|
||||||
#
|
|
||||||
#/***************************************************************************
|
|
||||||
# * *
|
|
||||||
# * This program is free software; you can redistribute it and/or modify *
|
|
||||||
# * it under the terms of the GNU General Public License as published by *
|
|
||||||
# * the Free Software Foundation; either version 2 of the License, or *
|
|
||||||
# * (at your option) any later version. *
|
|
||||||
# * *
|
|
||||||
# ***************************************************************************/
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# You can install pb_tool using:
|
|
||||||
# pip install http://geoapt.net/files/pb_tool.zip
|
|
||||||
#
|
|
||||||
# Consider doing your development (and install of pb_tool) in a virtualenv.
|
|
||||||
#
|
|
||||||
# For details on setting up and using pb_tool, see:
|
|
||||||
# http://g-sherman.github.io/plugin_build_tool/
|
|
||||||
#
|
|
||||||
# Issues and pull requests here:
|
|
||||||
# https://github.com/g-sherman/plugin_build_tool:
|
|
||||||
#
|
|
||||||
# Sane defaults for your plugin generated by the Plugin Builder are
|
|
||||||
# already set below.
|
|
||||||
#
|
|
||||||
# As you add Python source files and UI files to your plugin, add
|
|
||||||
# them to the appropriate [files] section below.
|
|
||||||
|
|
||||||
[plugin]
|
|
||||||
# Name of the plugin. This is the name of the directory that will
|
|
||||||
# be created in .qgis2/python/plugins
|
|
||||||
name: amcr_viewer
|
|
||||||
|
|
||||||
# Full path to where you want your plugin directory copied. If empty,
|
|
||||||
# the QGIS default path will be used. Don't include the plugin name in
|
|
||||||
# the path.
|
|
||||||
plugin_path:
|
|
||||||
|
|
||||||
[files]
|
|
||||||
# Python files that should be deployed with the plugin
|
|
||||||
python_files: __init__.py amcr_viewer.py amcr_viewer_dialog.py
|
|
||||||
|
|
||||||
# The main dialog file that is loaded (not compiled)
|
|
||||||
main_dialog: amcr_viewer_dialog_base.ui
|
|
||||||
|
|
||||||
# Other ui files for dialogs you create (these will be compiled)
|
|
||||||
compiled_ui_files:
|
|
||||||
|
|
||||||
# Resource file(s) that will be compiled
|
|
||||||
resource_files: resources.qrc
|
|
||||||
|
|
||||||
# Other files required for the plugin
|
|
||||||
extras: metadata.txt icon.png
|
|
||||||
|
|
||||||
# Other directories to be deployed with the plugin.
|
|
||||||
# These must be subdirectories under the plugin directory
|
|
||||||
extra_dirs:
|
|
||||||
|
|
||||||
# ISO code(s) for any locales (translations), separated by spaces.
|
|
||||||
# Corresponding .ts files must exist in the i18n directory
|
|
||||||
locales:
|
|
||||||
|
|
||||||
[help]
|
|
||||||
# the built help directory that should be deployed with the plugin
|
|
||||||
dir: help/build/html
|
|
||||||
# the name of the directory to target in the deployed plugin
|
|
||||||
target: help
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# coding=utf-8
|
|
||||||
"""This script uploads a plugin package to the plugin repository.
|
|
||||||
Authors: A. Pasotti, V. Picavet
|
|
||||||
git sha : $TemplateVCSFormat
|
|
||||||
"""
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import getpass
|
|
||||||
import xmlrpc.client
|
|
||||||
from optparse import OptionParser
|
|
||||||
|
|
||||||
standard_library.install_aliases()
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
PROTOCOL = 'https'
|
|
||||||
SERVER = 'plugins.qgis.org'
|
|
||||||
PORT = '443'
|
|
||||||
ENDPOINT = '/plugins/RPC2/'
|
|
||||||
VERBOSE = False
|
|
||||||
|
|
||||||
|
|
||||||
def main(parameters, arguments):
|
|
||||||
"""Main entry point.
|
|
||||||
|
|
||||||
:param parameters: Command line parameters.
|
|
||||||
:param arguments: Command line arguments.
|
|
||||||
"""
|
|
||||||
address = "{protocol}://{username}:{password}@{server}:{port}{endpoint}".format(
|
|
||||||
protocol=PROTOCOL,
|
|
||||||
username=parameters.username,
|
|
||||||
password=parameters.password,
|
|
||||||
server=parameters.server,
|
|
||||||
port=parameters.port,
|
|
||||||
endpoint=ENDPOINT)
|
|
||||||
print("Connecting to: %s" % hide_password(address))
|
|
||||||
|
|
||||||
server = xmlrpc.client.ServerProxy(address, verbose=VERBOSE)
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(arguments[0], 'rb') as handle:
|
|
||||||
plugin_id, version_id = server.plugin.upload(
|
|
||||||
xmlrpc.client.Binary(handle.read()))
|
|
||||||
print("Plugin ID: %s" % plugin_id)
|
|
||||||
print("Version ID: %s" % version_id)
|
|
||||||
except xmlrpc.client.ProtocolError as err:
|
|
||||||
print("A protocol error occurred")
|
|
||||||
print("URL: %s" % hide_password(err.url, 0))
|
|
||||||
print("HTTP/HTTPS headers: %s" % err.headers)
|
|
||||||
print("Error code: %d" % err.errcode)
|
|
||||||
print("Error message: %s" % err.errmsg)
|
|
||||||
except xmlrpc.client.Fault as err:
|
|
||||||
print("A fault occurred")
|
|
||||||
print("Fault code: %d" % err.faultCode)
|
|
||||||
print("Fault string: %s" % err.faultString)
|
|
||||||
|
|
||||||
|
|
||||||
def hide_password(url, start=6):
|
|
||||||
"""Returns the http url with password part replaced with '*'.
|
|
||||||
|
|
||||||
:param url: URL to upload the plugin to.
|
|
||||||
:type url: str
|
|
||||||
|
|
||||||
:param start: Position of start of password.
|
|
||||||
:type start: int
|
|
||||||
"""
|
|
||||||
start_position = url.find(':', start) + 1
|
|
||||||
end_position = url.find('@')
|
|
||||||
return "%s%s%s" % (
|
|
||||||
url[:start_position],
|
|
||||||
'*' * (end_position - start_position),
|
|
||||||
url[end_position:])
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
parser = OptionParser(usage="%prog [options] plugin.zip")
|
|
||||||
parser.add_option(
|
|
||||||
"-w", "--password", dest="password",
|
|
||||||
help="Password for plugin site", metavar="******")
|
|
||||||
parser.add_option(
|
|
||||||
"-u", "--username", dest="username",
|
|
||||||
help="Username of plugin site", metavar="user")
|
|
||||||
parser.add_option(
|
|
||||||
"-p", "--port", dest="port",
|
|
||||||
help="Server port to connect to", metavar="80")
|
|
||||||
parser.add_option(
|
|
||||||
"-s", "--server", dest="server",
|
|
||||||
help="Specify server name", metavar="plugins.qgis.org")
|
|
||||||
options, args = parser.parse_args()
|
|
||||||
if len(args) != 1:
|
|
||||||
print("Please specify zip file.\n")
|
|
||||||
parser.print_help()
|
|
||||||
sys.exit(1)
|
|
||||||
if not options.server:
|
|
||||||
options.server = SERVER
|
|
||||||
if not options.port:
|
|
||||||
options.port = PORT
|
|
||||||
if not options.username:
|
|
||||||
# interactive mode
|
|
||||||
username = getpass.getuser()
|
|
||||||
print("Please enter user name [%s] :" % username, end=' ')
|
|
||||||
|
|
||||||
res = input()
|
|
||||||
if res != "":
|
|
||||||
options.username = res
|
|
||||||
else:
|
|
||||||
options.username = username
|
|
||||||
if not options.password:
|
|
||||||
# interactive mode
|
|
||||||
options.password = getpass.getpass()
|
|
||||||
main(options, args)
|
|
||||||
@@ -1,281 +0,0 @@
|
|||||||
[MASTER]
|
|
||||||
|
|
||||||
# Specify a configuration file.
|
|
||||||
#rcfile=
|
|
||||||
|
|
||||||
# Python code to execute, usually for sys.path manipulation such as
|
|
||||||
# pygtk.require().
|
|
||||||
#init-hook=
|
|
||||||
|
|
||||||
# Profiled execution.
|
|
||||||
profile=no
|
|
||||||
|
|
||||||
# Add files or directories to the blacklist. They should be base names, not
|
|
||||||
# paths.
|
|
||||||
ignore=CVS
|
|
||||||
|
|
||||||
# Pickle collected data for later comparisons.
|
|
||||||
persistent=yes
|
|
||||||
|
|
||||||
# List of plugins (as comma separated values of python modules names) to load,
|
|
||||||
# usually to register additional checkers.
|
|
||||||
load-plugins=
|
|
||||||
|
|
||||||
|
|
||||||
[MESSAGES CONTROL]
|
|
||||||
|
|
||||||
# Enable the message, report, category or checker with the given id(s). You can
|
|
||||||
# either give multiple identifier separated by comma (,) or put this option
|
|
||||||
# multiple time. See also the "--disable" option for examples.
|
|
||||||
#enable=
|
|
||||||
|
|
||||||
# Disable the message, report, category or checker with the given id(s). You
|
|
||||||
# can either give multiple identifiers separated by comma (,) or put this
|
|
||||||
# option multiple times (only on the command line, not in the configuration
|
|
||||||
# file where it should appear only once).You can also use "--disable=all" to
|
|
||||||
# disable everything first and then reenable specific checks. For example, if
|
|
||||||
# you want to run only the similarities checker, you can use "--disable=all
|
|
||||||
# --enable=similarities". If you want to run only the classes checker, but have
|
|
||||||
# no Warning level messages displayed, use"--disable=all --enable=classes
|
|
||||||
# --disable=W"
|
|
||||||
# see http://stackoverflow.com/questions/21487025/pylint-locally-defined-disables-still-give-warnings-how-to-suppress-them
|
|
||||||
disable=locally-disabled,C0103
|
|
||||||
|
|
||||||
|
|
||||||
[REPORTS]
|
|
||||||
|
|
||||||
# Set the output format. Available formats are text, parseable, colorized, msvs
|
|
||||||
# (visual studio) and html. You can also give a reporter class, eg
|
|
||||||
# mypackage.mymodule.MyReporterClass.
|
|
||||||
output-format=text
|
|
||||||
|
|
||||||
# Put messages in a separate file for each module / package specified on the
|
|
||||||
# command line instead of printing them on stdout. Reports (if any) will be
|
|
||||||
# written in a file name "pylint_global.[txt|html]".
|
|
||||||
files-output=no
|
|
||||||
|
|
||||||
# Tells whether to display a full report or only the messages
|
|
||||||
reports=yes
|
|
||||||
|
|
||||||
# Python expression which should return a note less than 10 (10 is the highest
|
|
||||||
# note). You have access to the variables errors warning, statement which
|
|
||||||
# respectively contain the number of errors / warnings messages and the total
|
|
||||||
# number of statements analyzed. This is used by the global evaluation report
|
|
||||||
# (RP0004).
|
|
||||||
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
|
|
||||||
|
|
||||||
# Add a comment according to your evaluation note. This is used by the global
|
|
||||||
# evaluation report (RP0004).
|
|
||||||
comment=no
|
|
||||||
|
|
||||||
# Template used to display messages. This is a python new-style format string
|
|
||||||
# used to format the message information. See doc for all details
|
|
||||||
#msg-template=
|
|
||||||
|
|
||||||
|
|
||||||
[BASIC]
|
|
||||||
|
|
||||||
# Required attributes for module, separated by a comma
|
|
||||||
required-attributes=
|
|
||||||
|
|
||||||
# List of builtins function names that should not be used, separated by a comma
|
|
||||||
bad-functions=map,filter,apply,input
|
|
||||||
|
|
||||||
# Regular expression which should only match correct module names
|
|
||||||
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct module level names
|
|
||||||
const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct class names
|
|
||||||
class-rgx=[A-Z_][a-zA-Z0-9]+$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct function names
|
|
||||||
function-rgx=[a-z_][a-z0-9_]{2,30}$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct method names
|
|
||||||
method-rgx=[a-z_][a-z0-9_]{2,30}$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct instance attribute names
|
|
||||||
attr-rgx=[a-z_][a-z0-9_]{2,30}$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct argument names
|
|
||||||
argument-rgx=[a-z_][a-z0-9_]{2,30}$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct variable names
|
|
||||||
variable-rgx=[a-z_][a-z0-9_]{2,30}$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct attribute names in class
|
|
||||||
# bodies
|
|
||||||
class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
|
|
||||||
|
|
||||||
# Regular expression which should only match correct list comprehension /
|
|
||||||
# generator expression variable names
|
|
||||||
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
|
|
||||||
|
|
||||||
# Good variable names which should always be accepted, separated by a comma
|
|
||||||
good-names=i,j,k,ex,Run,_
|
|
||||||
|
|
||||||
# Bad variable names which should always be refused, separated by a comma
|
|
||||||
bad-names=foo,bar,baz,toto,tutu,tata
|
|
||||||
|
|
||||||
# Regular expression which should only match function or class names that do
|
|
||||||
# not require a docstring.
|
|
||||||
no-docstring-rgx=__.*__
|
|
||||||
|
|
||||||
# Minimum line length for functions/classes that require docstrings, shorter
|
|
||||||
# ones are exempt.
|
|
||||||
docstring-min-length=-1
|
|
||||||
|
|
||||||
|
|
||||||
[MISCELLANEOUS]
|
|
||||||
|
|
||||||
# List of note tags to take in consideration, separated by a comma.
|
|
||||||
notes=FIXME,XXX,TODO
|
|
||||||
|
|
||||||
|
|
||||||
[TYPECHECK]
|
|
||||||
|
|
||||||
# Tells whether missing members accessed in mixin class should be ignored. A
|
|
||||||
# mixin class is detected if its name ends with "mixin" (case insensitive).
|
|
||||||
ignore-mixin-members=yes
|
|
||||||
|
|
||||||
# List of classes names for which member attributes should not be checked
|
|
||||||
# (useful for classes with attributes dynamically set).
|
|
||||||
ignored-classes=SQLObject
|
|
||||||
|
|
||||||
# When zope mode is activated, add a predefined set of Zope acquired attributes
|
|
||||||
# to generated-members.
|
|
||||||
zope=no
|
|
||||||
|
|
||||||
# List of members which are set dynamically and missed by pylint inference
|
|
||||||
# system, and so shouldn't trigger E0201 when accessed. Python regular
|
|
||||||
# expressions are accepted.
|
|
||||||
generated-members=REQUEST,acl_users,aq_parent
|
|
||||||
|
|
||||||
|
|
||||||
[VARIABLES]
|
|
||||||
|
|
||||||
# Tells whether we should check for unused import in __init__ files.
|
|
||||||
init-import=no
|
|
||||||
|
|
||||||
# A regular expression matching the beginning of the name of dummy variables
|
|
||||||
# (i.e. not used).
|
|
||||||
dummy-variables-rgx=_$|dummy
|
|
||||||
|
|
||||||
# List of additional names supposed to be defined in builtins. Remember that
|
|
||||||
# you should avoid to define new builtins when possible.
|
|
||||||
additional-builtins=
|
|
||||||
|
|
||||||
|
|
||||||
[FORMAT]
|
|
||||||
|
|
||||||
# Maximum number of characters on a single line.
|
|
||||||
max-line-length=80
|
|
||||||
|
|
||||||
# Regexp for a line that is allowed to be longer than the limit.
|
|
||||||
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
|
|
||||||
|
|
||||||
# Allow the body of an if to be on the same line as the test if there is no
|
|
||||||
# else.
|
|
||||||
single-line-if-stmt=no
|
|
||||||
|
|
||||||
# List of optional constructs for which whitespace checking is disabled
|
|
||||||
no-space-check=trailing-comma,dict-separator
|
|
||||||
|
|
||||||
# Maximum number of lines in a module
|
|
||||||
max-module-lines=1000
|
|
||||||
|
|
||||||
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
|
|
||||||
# tab).
|
|
||||||
indent-string=' '
|
|
||||||
|
|
||||||
|
|
||||||
[SIMILARITIES]
|
|
||||||
|
|
||||||
# Minimum lines number of a similarity.
|
|
||||||
min-similarity-lines=4
|
|
||||||
|
|
||||||
# Ignore comments when computing similarities.
|
|
||||||
ignore-comments=yes
|
|
||||||
|
|
||||||
# Ignore docstrings when computing similarities.
|
|
||||||
ignore-docstrings=yes
|
|
||||||
|
|
||||||
# Ignore imports when computing similarities.
|
|
||||||
ignore-imports=no
|
|
||||||
|
|
||||||
|
|
||||||
[IMPORTS]
|
|
||||||
|
|
||||||
# Deprecated modules which should not be used, separated by a comma
|
|
||||||
deprecated-modules=regsub,TERMIOS,Bastion,rexec
|
|
||||||
|
|
||||||
# Create a graph of every (i.e. internal and external) dependencies in the
|
|
||||||
# given file (report RP0402 must not be disabled)
|
|
||||||
import-graph=
|
|
||||||
|
|
||||||
# Create a graph of external dependencies in the given file (report RP0402 must
|
|
||||||
# not be disabled)
|
|
||||||
ext-import-graph=
|
|
||||||
|
|
||||||
# Create a graph of internal dependencies in the given file (report RP0402 must
|
|
||||||
# not be disabled)
|
|
||||||
int-import-graph=
|
|
||||||
|
|
||||||
|
|
||||||
[DESIGN]
|
|
||||||
|
|
||||||
# Maximum number of arguments for function / method
|
|
||||||
max-args=5
|
|
||||||
|
|
||||||
# Argument names that match this expression will be ignored. Default to name
|
|
||||||
# with leading underscore
|
|
||||||
ignored-argument-names=_.*
|
|
||||||
|
|
||||||
# Maximum number of locals for function / method body
|
|
||||||
max-locals=15
|
|
||||||
|
|
||||||
# Maximum number of return / yield for function / method body
|
|
||||||
max-returns=6
|
|
||||||
|
|
||||||
# Maximum number of branch for function / method body
|
|
||||||
max-branches=12
|
|
||||||
|
|
||||||
# Maximum number of statements in function / method body
|
|
||||||
max-statements=50
|
|
||||||
|
|
||||||
# Maximum number of parents for a class (see R0901).
|
|
||||||
max-parents=7
|
|
||||||
|
|
||||||
# Maximum number of attributes for a class (see R0902).
|
|
||||||
max-attributes=7
|
|
||||||
|
|
||||||
# Minimum number of public methods for a class (see R0903).
|
|
||||||
min-public-methods=2
|
|
||||||
|
|
||||||
# Maximum number of public methods for a class (see R0904).
|
|
||||||
max-public-methods=20
|
|
||||||
|
|
||||||
|
|
||||||
[CLASSES]
|
|
||||||
|
|
||||||
# List of interface methods to ignore, separated by a comma. This is used for
|
|
||||||
# instance to not check methods defines in Zope's Interface base class.
|
|
||||||
ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
|
|
||||||
|
|
||||||
# List of method names used to declare (i.e. assign) instance attributes.
|
|
||||||
defining-attr-methods=__init__,__new__,setUp
|
|
||||||
|
|
||||||
# List of valid names for the first argument in a class method.
|
|
||||||
valid-classmethod-first-arg=cls
|
|
||||||
|
|
||||||
# List of valid names for the first argument in a metaclass class method.
|
|
||||||
valid-metaclass-classmethod-first-arg=mcs
|
|
||||||
|
|
||||||
|
|
||||||
[EXCEPTIONS]
|
|
||||||
|
|
||||||
# Exceptions that will emit a warning when being caught. Defaults to
|
|
||||||
# "Exception"
|
|
||||||
overgeneral-exceptions=Exception
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<RCC>
|
|
||||||
<qresource prefix="/plugins/amcr_viewer" >
|
|
||||||
<file>icon.png</file>
|
|
||||||
</qresource>
|
|
||||||
</RCC>
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
LRELEASE=$1
|
|
||||||
LOCALES=$2
|
|
||||||
|
|
||||||
|
|
||||||
for LOCALE in ${LOCALES}
|
|
||||||
do
|
|
||||||
echo "Processing: ${LOCALE}.ts"
|
|
||||||
# Note we don't use pylupdate with qt .pro file approach as it is flakey
|
|
||||||
# about what is made available.
|
|
||||||
$LRELEASE i18n/${LOCALE}.ts
|
|
||||||
done
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
QGIS_PREFIX_PATH=/usr/local/qgis-2.0
|
|
||||||
if [ -n "$1" ]; then
|
|
||||||
QGIS_PREFIX_PATH=$1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ${QGIS_PREFIX_PATH}
|
|
||||||
|
|
||||||
|
|
||||||
export QGIS_PREFIX_PATH=${QGIS_PREFIX_PATH}
|
|
||||||
export QGIS_PATH=${QGIS_PREFIX_PATH}
|
|
||||||
export LD_LIBRARY_PATH=${QGIS_PREFIX_PATH}/lib
|
|
||||||
export PYTHONPATH=${QGIS_PREFIX_PATH}/share/qgis/python:${QGIS_PREFIX_PATH}/share/qgis/python/plugins:${PYTHONPATH}
|
|
||||||
|
|
||||||
echo "QGIS PATH: $QGIS_PREFIX_PATH"
|
|
||||||
export QGIS_DEBUG=0
|
|
||||||
export QGIS_LOG_FILE=/tmp/inasafe/realtime/logs/qgis.log
|
|
||||||
|
|
||||||
export PATH=${QGIS_PREFIX_PATH}/bin:$PATH
|
|
||||||
|
|
||||||
echo "This script is intended to be sourced to set up your shell to"
|
|
||||||
echo "use a QGIS 2.0 built in $QGIS_PREFIX_PATH"
|
|
||||||
echo
|
|
||||||
echo "To use it do:"
|
|
||||||
echo "source $BASH_SOURCE /your/optional/install/path"
|
|
||||||
echo
|
|
||||||
echo "Then use the make file supplied here e.g. make guitest"
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
LOCALES=$*
|
|
||||||
|
|
||||||
# Get newest .py files so we don't update strings unnecessarily
|
|
||||||
|
|
||||||
CHANGED_FILES=0
|
|
||||||
PYTHON_FILES=`find . -regex ".*\(ui\|py\)$" -type f`
|
|
||||||
for PYTHON_FILE in $PYTHON_FILES
|
|
||||||
do
|
|
||||||
CHANGED=$(stat -c %Y $PYTHON_FILE)
|
|
||||||
if [ ${CHANGED} -gt ${CHANGED_FILES} ]
|
|
||||||
then
|
|
||||||
CHANGED_FILES=${CHANGED}
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Qt translation stuff
|
|
||||||
# for .ts file
|
|
||||||
UPDATE=false
|
|
||||||
for LOCALE in ${LOCALES}
|
|
||||||
do
|
|
||||||
TRANSLATION_FILE="i18n/$LOCALE.ts"
|
|
||||||
if [ ! -f ${TRANSLATION_FILE} ]
|
|
||||||
then
|
|
||||||
# Force translation string collection as we have a new language file
|
|
||||||
touch ${TRANSLATION_FILE}
|
|
||||||
UPDATE=true
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
MODIFICATION_TIME=$(stat -c %Y ${TRANSLATION_FILE})
|
|
||||||
if [ ${CHANGED_FILES} -gt ${MODIFICATION_TIME} ]
|
|
||||||
then
|
|
||||||
# Force translation string collection as a .py file has been updated
|
|
||||||
UPDATE=true
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ ${UPDATE} == true ]
|
|
||||||
# retrieve all python files
|
|
||||||
then
|
|
||||||
echo ${PYTHON_FILES}
|
|
||||||
# update .ts
|
|
||||||
echo "Please provide translations by editing the translation files below:"
|
|
||||||
for LOCALE in ${LOCALES}
|
|
||||||
do
|
|
||||||
echo "i18n/"${LOCALE}".ts"
|
|
||||||
# Note we don't use pylupdate with qt .pro file approach as it is flakey
|
|
||||||
# about what is made available.
|
|
||||||
pylupdate4 -noobsolete ${PYTHON_FILES} -ts i18n/${LOCALE}.ts
|
|
||||||
done
|
|
||||||
else
|
|
||||||
echo "No need to edit any translation files (.ts) because no python files"
|
|
||||||
echo "has been updated since the last update translation. "
|
|
||||||
fi
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
# import qgis libs so that ve set the correct sip api version
|
|
||||||
import qgis # pylint: disable=W0611 # NOQA
|
|
||||||
@@ -1,205 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
"""QGIS plugin implementation.
|
|
||||||
|
|
||||||
.. note:: This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
.. note:: This source code was copied from the 'postgis viewer' application
|
|
||||||
with original authors:
|
|
||||||
Copyright (c) 2010 by Ivan Mincik, ivan.mincik@gista.sk
|
|
||||||
Copyright (c) 2011 German Carrillo, geotux_tuxman@linuxmail.org
|
|
||||||
Copyright (c) 2014 Tim Sutton, tim@linfiniti.com
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
__author__ = 'tim@linfiniti.com'
|
|
||||||
__revision__ = '$Format:%H$'
|
|
||||||
__date__ = '10/01/2011'
|
|
||||||
__copyright__ = (
|
|
||||||
'Copyright (c) 2010 by Ivan Mincik, ivan.mincik@gista.sk and '
|
|
||||||
'Copyright (c) 2011 German Carrillo, geotux_tuxman@linuxmail.org'
|
|
||||||
'Copyright (c) 2014 Tim Sutton, tim@linfiniti.com'
|
|
||||||
)
|
|
||||||
|
|
||||||
import logging
|
|
||||||
from qgis.PyQt.QtCore import QObject, pyqtSlot, pyqtSignal
|
|
||||||
from qgis.core import QgsMapLayerRegistry
|
|
||||||
from qgis.gui import QgsMapCanvasLayer
|
|
||||||
LOGGER = logging.getLogger('QGIS')
|
|
||||||
|
|
||||||
|
|
||||||
#noinspection PyMethodMayBeStatic,PyPep8Naming
|
|
||||||
class QgisInterface(QObject):
|
|
||||||
"""Class to expose QGIS objects and functions to plugins.
|
|
||||||
|
|
||||||
This class is here for enabling us to run unit tests only,
|
|
||||||
so most methods are simply stubs.
|
|
||||||
"""
|
|
||||||
currentLayerChanged = pyqtSignal(QgsMapCanvasLayer)
|
|
||||||
|
|
||||||
def __init__(self, canvas):
|
|
||||||
"""Constructor
|
|
||||||
:param canvas:
|
|
||||||
"""
|
|
||||||
QObject.__init__(self)
|
|
||||||
self.canvas = canvas
|
|
||||||
# Set up slots so we can mimic the behaviour of QGIS when layers
|
|
||||||
# are added.
|
|
||||||
LOGGER.debug('Initialising canvas...')
|
|
||||||
# noinspection PyArgumentList
|
|
||||||
QgsMapLayerRegistry.instance().layersAdded.connect(self.addLayers)
|
|
||||||
# noinspection PyArgumentList
|
|
||||||
QgsMapLayerRegistry.instance().layerWasAdded.connect(self.addLayer)
|
|
||||||
# noinspection PyArgumentList
|
|
||||||
QgsMapLayerRegistry.instance().removeAll.connect(self.removeAllLayers)
|
|
||||||
|
|
||||||
# For processing module
|
|
||||||
self.destCrs = None
|
|
||||||
|
|
||||||
@pyqtSlot('QStringList')
|
|
||||||
def addLayers(self, layers):
|
|
||||||
"""Handle layers being added to the registry so they show up in canvas.
|
|
||||||
|
|
||||||
:param layers: list<QgsMapLayer> list of map layers that were added
|
|
||||||
|
|
||||||
.. note:: The QgsInterface api does not include this method,
|
|
||||||
it is added here as a helper to facilitate testing.
|
|
||||||
"""
|
|
||||||
#LOGGER.debug('addLayers called on qgis_interface')
|
|
||||||
#LOGGER.debug('Number of layers being added: %s' % len(layers))
|
|
||||||
#LOGGER.debug('Layer Count Before: %s' % len(self.canvas.layers()))
|
|
||||||
current_layers = self.canvas.layers()
|
|
||||||
final_layers = []
|
|
||||||
for layer in current_layers:
|
|
||||||
final_layers.append(QgsMapCanvasLayer(layer))
|
|
||||||
for layer in layers:
|
|
||||||
final_layers.append(QgsMapCanvasLayer(layer))
|
|
||||||
|
|
||||||
self.canvas.setLayerSet(final_layers)
|
|
||||||
#LOGGER.debug('Layer Count After: %s' % len(self.canvas.layers()))
|
|
||||||
|
|
||||||
@pyqtSlot('QgsMapLayer')
|
|
||||||
def addLayer(self, layer):
|
|
||||||
"""Handle a layer being added to the registry so it shows up in canvas.
|
|
||||||
|
|
||||||
:param layer: list<QgsMapLayer> list of map layers that were added
|
|
||||||
|
|
||||||
.. note: The QgsInterface api does not include this method, it is added
|
|
||||||
here as a helper to facilitate testing.
|
|
||||||
|
|
||||||
.. note: The addLayer method was deprecated in QGIS 1.8 so you should
|
|
||||||
not need this method much.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
@pyqtSlot()
|
|
||||||
def removeAllLayers(self):
|
|
||||||
"""Remove layers from the canvas before they get deleted."""
|
|
||||||
self.canvas.setLayerSet([])
|
|
||||||
|
|
||||||
def newProject(self):
|
|
||||||
"""Create new project."""
|
|
||||||
# noinspection PyArgumentList
|
|
||||||
QgsMapLayerRegistry.instance().removeAllMapLayers()
|
|
||||||
|
|
||||||
# ---------------- API Mock for QgsInterface follows -------------------
|
|
||||||
|
|
||||||
def zoomFull(self):
|
|
||||||
"""Zoom to the map full extent."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def zoomToPrevious(self):
|
|
||||||
"""Zoom to previous view extent."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def zoomToNext(self):
|
|
||||||
"""Zoom to next view extent."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def zoomToActiveLayer(self):
|
|
||||||
"""Zoom to extent of active layer."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def addVectorLayer(self, path, base_name, provider_key):
|
|
||||||
"""Add a vector layer.
|
|
||||||
|
|
||||||
:param path: Path to layer.
|
|
||||||
:type path: str
|
|
||||||
|
|
||||||
:param base_name: Base name for layer.
|
|
||||||
:type base_name: str
|
|
||||||
|
|
||||||
:param provider_key: Provider key e.g. 'ogr'
|
|
||||||
:type provider_key: str
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def addRasterLayer(self, path, base_name):
|
|
||||||
"""Add a raster layer given a raster layer file name
|
|
||||||
|
|
||||||
:param path: Path to layer.
|
|
||||||
:type path: str
|
|
||||||
|
|
||||||
:param base_name: Base name for layer.
|
|
||||||
:type base_name: str
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def activeLayer(self):
|
|
||||||
"""Get pointer to the active layer (layer selected in the legend)."""
|
|
||||||
# noinspection PyArgumentList
|
|
||||||
layers = QgsMapLayerRegistry.instance().mapLayers()
|
|
||||||
for item in layers:
|
|
||||||
return layers[item]
|
|
||||||
|
|
||||||
def addToolBarIcon(self, action):
|
|
||||||
"""Add an icon to the plugins toolbar.
|
|
||||||
|
|
||||||
:param action: Action to add to the toolbar.
|
|
||||||
:type action: QAction
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def removeToolBarIcon(self, action):
|
|
||||||
"""Remove an action (icon) from the plugin toolbar.
|
|
||||||
|
|
||||||
:param action: Action to add to the toolbar.
|
|
||||||
:type action: QAction
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def addToolBar(self, name):
|
|
||||||
"""Add toolbar with specified name.
|
|
||||||
|
|
||||||
:param name: Name for the toolbar.
|
|
||||||
:type name: str
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def mapCanvas(self):
|
|
||||||
"""Return a pointer to the map canvas."""
|
|
||||||
return self.canvas
|
|
||||||
|
|
||||||
def mainWindow(self):
|
|
||||||
"""Return a pointer to the main window.
|
|
||||||
|
|
||||||
In case of QGIS it returns an instance of QgisApp.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def addDockWidget(self, area, dock_widget):
|
|
||||||
"""Add a dock widget to the main window.
|
|
||||||
|
|
||||||
:param area: Where in the ui the dock should be placed.
|
|
||||||
:type area:
|
|
||||||
|
|
||||||
:param dock_widget: A dock widget to add to the UI.
|
|
||||||
:type dock_widget: QDockWidget
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def legendInterface(self):
|
|
||||||
"""Get the legend."""
|
|
||||||
return self.canvas
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
NCOLS 10
|
|
||||||
NROWS 10
|
|
||||||
XLLCENTER 1535380.000000
|
|
||||||
YLLCENTER 5083260.000000
|
|
||||||
DX 10
|
|
||||||
DY 10
|
|
||||||
NODATA_VALUE -9999
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
CRS
|
|
||||||
NOTES
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
<PAMDataset>
|
|
||||||
<Metadata>
|
|
||||||
<MDI key="AREA_OR_POINT">Point</MDI>
|
|
||||||
</Metadata>
|
|
||||||
<PAMRasterBand band="1">
|
|
||||||
<Metadata>
|
|
||||||
<MDI key="STATISTICS_MAXIMUM">9</MDI>
|
|
||||||
<MDI key="STATISTICS_MEAN">4.5</MDI>
|
|
||||||
<MDI key="STATISTICS_MINIMUM">0</MDI>
|
|
||||||
<MDI key="STATISTICS_STDDEV">2.872281323269</MDI>
|
|
||||||
</Metadata>
|
|
||||||
</PAMRasterBand>
|
|
||||||
</PAMDataset>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
title: Tenbytenraster
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='iso-8859-1'?>
|
|
||||||
<ga_license_file>
|
|
||||||
<metadata>
|
|
||||||
<author>Tim Sutton, Linfiniti Consulting CC</author>
|
|
||||||
</metadata>
|
|
||||||
|
|
||||||
<datafile>
|
|
||||||
<filename>tenbytenraster.asc</filename>
|
|
||||||
<checksum>2700044251</checksum>
|
|
||||||
<publishable>Yes</publishable>
|
|
||||||
<accountable>Tim Sutton</accountable>
|
|
||||||
<source>Tim Sutton (QGIS Source Tree)</source>
|
|
||||||
<IP_owner>Tim Sutton</IP_owner>
|
|
||||||
<IP_info>This data is publicly available from QGIS Source Tree. The original
|
|
||||||
file was created and contributed to QGIS by Tim Sutton.</IP_info>
|
|
||||||
</datafile>
|
|
||||||
|
|
||||||
</ga_license_file>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
|
|
||||||
<qgis version="1.9.0-Master" minimumScale="-4.65661e-10" maximumScale="1e+08" hasScaleBasedVisibilityFlag="0">
|
|
||||||
<pipe>
|
|
||||||
<rasterrenderer opacity="1" alphaBand="0" classificationMax="9" classificationMinMaxOrigin="MinMaxFullExtentExact" band="1" classificationMin="0" type="singlebandpseudocolor">
|
|
||||||
<rasterTransparency/>
|
|
||||||
<rastershader>
|
|
||||||
<colorrampshader colorRampType="INTERPOLATED" clip="0">
|
|
||||||
<item alpha="255" value="0" label="0.000000" color="#d7191c"/>
|
|
||||||
<item alpha="255" value="1" label="1.000000" color="#e75b3a"/>
|
|
||||||
<item alpha="255" value="2" label="2.000000" color="#f89d59"/>
|
|
||||||
<item alpha="255" value="3" label="3.000000" color="#fdc980"/>
|
|
||||||
<item alpha="255" value="4" label="4.000000" color="#feedaa"/>
|
|
||||||
<item alpha="255" value="5" label="5.000000" color="#ecf7b9"/>
|
|
||||||
<item alpha="255" value="6" label="6.000000" color="#c7e8ad"/>
|
|
||||||
<item alpha="255" value="7" label="7.000000" color="#9cd3a6"/>
|
|
||||||
<item alpha="255" value="8" label="8.000000" color="#63abb0"/>
|
|
||||||
<item alpha="255" value="9" label="9.000000" color="#2b83ba"/>
|
|
||||||
</colorrampshader>
|
|
||||||
</rastershader>
|
|
||||||
</rasterrenderer>
|
|
||||||
<brightnesscontrast brightness="0" contrast="0"/>
|
|
||||||
<huesaturation colorizeGreen="128" colorizeOn="0" colorizeRed="255" colorizeBlue="128" grayscaleMode="0" saturation="0" colorizeStrength="100"/>
|
|
||||||
<rasterresampler maxOversampling="2"/>
|
|
||||||
</pipe>
|
|
||||||
<blendMode>0</blendMode>
|
|
||||||
</qgis>
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
"""Dialog test.
|
|
||||||
|
|
||||||
.. note:: This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
__author__ = 'spacil@arub.cz'
|
|
||||||
__date__ = '2026-02-03'
|
|
||||||
__copyright__ = 'Copyright 2026, David Spáčil'
|
|
||||||
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
from qgis.PyQt.QtGui import QDialogButtonBox, QDialog
|
|
||||||
|
|
||||||
from amcr_viewer_dialog import AmcrViewerDialog
|
|
||||||
|
|
||||||
from utilities import get_qgis_app
|
|
||||||
QGIS_APP = get_qgis_app()
|
|
||||||
|
|
||||||
|
|
||||||
class AmcrViewerDialogTest(unittest.TestCase):
|
|
||||||
"""Test dialog works."""
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
"""Runs before each test."""
|
|
||||||
self.dialog = AmcrViewerDialog(None)
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
"""Runs after each test."""
|
|
||||||
self.dialog = None
|
|
||||||
|
|
||||||
def test_dialog_ok(self):
|
|
||||||
"""Test we can click OK."""
|
|
||||||
|
|
||||||
button = self.dialog.button_box.button(QDialogButtonBox.Ok)
|
|
||||||
button.click()
|
|
||||||
result = self.dialog.result()
|
|
||||||
self.assertEqual(result, QDialog.Accepted)
|
|
||||||
|
|
||||||
def test_dialog_cancel(self):
|
|
||||||
"""Test we can click cancel."""
|
|
||||||
button = self.dialog.button_box.button(QDialogButtonBox.Cancel)
|
|
||||||
button.click()
|
|
||||||
result = self.dialog.result()
|
|
||||||
self.assertEqual(result, QDialog.Rejected)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
suite = unittest.makeSuite(AmcrViewerDialogTest)
|
|
||||||
runner = unittest.TextTestRunner(verbosity=2)
|
|
||||||
runner.run(suite)
|
|
||||||
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
"""Tests QGIS plugin init."""
|
|
||||||
|
|
||||||
__author__ = 'Tim Sutton <tim@linfiniti.com>'
|
|
||||||
__revision__ = '$Format:%H$'
|
|
||||||
__date__ = '17/10/2010'
|
|
||||||
__license__ = "GPL"
|
|
||||||
__copyright__ = 'Copyright 2012, Australia Indonesia Facility for '
|
|
||||||
__copyright__ += 'Disaster Reduction'
|
|
||||||
|
|
||||||
import os
|
|
||||||
import unittest
|
|
||||||
import logging
|
|
||||||
import configparser
|
|
||||||
|
|
||||||
LOGGER = logging.getLogger('QGIS')
|
|
||||||
|
|
||||||
|
|
||||||
class TestInit(unittest.TestCase):
|
|
||||||
"""Test that the plugin init is usable for QGIS.
|
|
||||||
|
|
||||||
Based heavily on the validator class by Alessandro
|
|
||||||
Passoti available here:
|
|
||||||
|
|
||||||
http://github.com/qgis/qgis-django/blob/master/qgis-app/
|
|
||||||
plugins/validator.py
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def test_read_init(self):
|
|
||||||
"""Test that the plugin __init__ will validate on plugins.qgis.org."""
|
|
||||||
|
|
||||||
# You should update this list according to the latest in
|
|
||||||
# https://github.com/qgis/qgis-django/blob/master/qgis-app/
|
|
||||||
# plugins/validator.py
|
|
||||||
|
|
||||||
required_metadata = [
|
|
||||||
'name',
|
|
||||||
'description',
|
|
||||||
'version',
|
|
||||||
'qgisMinimumVersion',
|
|
||||||
'email',
|
|
||||||
'author']
|
|
||||||
|
|
||||||
file_path = os.path.abspath(os.path.join(
|
|
||||||
os.path.dirname(__file__), os.pardir,
|
|
||||||
'metadata.txt'))
|
|
||||||
LOGGER.info(file_path)
|
|
||||||
metadata = []
|
|
||||||
parser = configparser.ConfigParser()
|
|
||||||
parser.optionxform = str
|
|
||||||
parser.read(file_path)
|
|
||||||
message = 'Cannot find a section named "general" in %s' % file_path
|
|
||||||
assert parser.has_section('general'), message
|
|
||||||
metadata.extend(parser.items('general'))
|
|
||||||
|
|
||||||
for expectation in required_metadata:
|
|
||||||
message = ('Cannot find metadata "%s" in metadata source (%s).' % (
|
|
||||||
expectation, file_path))
|
|
||||||
|
|
||||||
self.assertIn(expectation, dict(metadata), message)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main()
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
"""Tests for QGIS functionality.
|
|
||||||
|
|
||||||
|
|
||||||
.. note:: This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
"""
|
|
||||||
__author__ = 'tim@linfiniti.com'
|
|
||||||
__date__ = '20/01/2011'
|
|
||||||
__copyright__ = ('Copyright 2012, Australia Indonesia Facility for '
|
|
||||||
'Disaster Reduction')
|
|
||||||
|
|
||||||
import os
|
|
||||||
import unittest
|
|
||||||
from qgis.core import (
|
|
||||||
QgsProviderRegistry,
|
|
||||||
QgsCoordinateReferenceSystem,
|
|
||||||
QgsRasterLayer)
|
|
||||||
|
|
||||||
from .utilities import get_qgis_app
|
|
||||||
QGIS_APP = get_qgis_app()
|
|
||||||
|
|
||||||
|
|
||||||
class QGISTest(unittest.TestCase):
|
|
||||||
"""Test the QGIS Environment"""
|
|
||||||
|
|
||||||
def test_qgis_environment(self):
|
|
||||||
"""QGIS environment has the expected providers"""
|
|
||||||
|
|
||||||
r = QgsProviderRegistry.instance()
|
|
||||||
self.assertIn('gdal', r.providerList())
|
|
||||||
self.assertIn('ogr', r.providerList())
|
|
||||||
self.assertIn('postgres', r.providerList())
|
|
||||||
|
|
||||||
def test_projection(self):
|
|
||||||
"""Test that QGIS properly parses a wkt string.
|
|
||||||
"""
|
|
||||||
crs = QgsCoordinateReferenceSystem()
|
|
||||||
wkt = (
|
|
||||||
'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",'
|
|
||||||
'SPHEROID["WGS_1984",6378137.0,298.257223563]],'
|
|
||||||
'PRIMEM["Greenwich",0.0],UNIT["Degree",'
|
|
||||||
'0.0174532925199433]]')
|
|
||||||
crs.createFromWkt(wkt)
|
|
||||||
auth_id = crs.authid()
|
|
||||||
expected_auth_id = 'EPSG:4326'
|
|
||||||
self.assertEqual(auth_id, expected_auth_id)
|
|
||||||
|
|
||||||
# now test for a loaded layer
|
|
||||||
path = os.path.join(os.path.dirname(__file__), 'tenbytenraster.asc')
|
|
||||||
title = 'TestRaster'
|
|
||||||
layer = QgsRasterLayer(path, title)
|
|
||||||
auth_id = layer.crs().authid()
|
|
||||||
self.assertEqual(auth_id, expected_auth_id)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main()
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
"""Resources test.
|
|
||||||
|
|
||||||
.. note:: This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
__author__ = 'spacil@arub.cz'
|
|
||||||
__date__ = '2026-02-03'
|
|
||||||
__copyright__ = 'Copyright 2026, David Spáčil'
|
|
||||||
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
from qgis.PyQt.QtGui import QIcon
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class AmcrViewerDialogTest(unittest.TestCase):
|
|
||||||
"""Test rerources work."""
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
"""Runs before each test."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
"""Runs after each test."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def test_icon_png(self):
|
|
||||||
"""Test we can click OK."""
|
|
||||||
path = ':/plugins/AmcrViewer/icon.png'
|
|
||||||
icon = QIcon(path)
|
|
||||||
self.assertFalse(icon.isNull())
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
suite = unittest.makeSuite(AmcrViewerResourcesTest)
|
|
||||||
runner = unittest.TextTestRunner(verbosity=2)
|
|
||||||
runner.run(suite)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
"""Safe Translations Test.
|
|
||||||
|
|
||||||
.. note:: This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
"""
|
|
||||||
from .utilities import get_qgis_app
|
|
||||||
|
|
||||||
__author__ = 'ismailsunni@yahoo.co.id'
|
|
||||||
__date__ = '12/10/2011'
|
|
||||||
__copyright__ = ('Copyright 2012, Australia Indonesia Facility for '
|
|
||||||
'Disaster Reduction')
|
|
||||||
import unittest
|
|
||||||
import os
|
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import QCoreApplication, QTranslator
|
|
||||||
|
|
||||||
QGIS_APP = get_qgis_app()
|
|
||||||
|
|
||||||
|
|
||||||
class SafeTranslationsTest(unittest.TestCase):
|
|
||||||
"""Test translations work."""
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
"""Runs before each test."""
|
|
||||||
if 'LANG' in iter(os.environ.keys()):
|
|
||||||
os.environ.__delitem__('LANG')
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
"""Runs after each test."""
|
|
||||||
if 'LANG' in iter(os.environ.keys()):
|
|
||||||
os.environ.__delitem__('LANG')
|
|
||||||
|
|
||||||
def test_qgis_translations(self):
|
|
||||||
"""Test that translations work."""
|
|
||||||
parent_path = os.path.join(__file__, os.path.pardir, os.path.pardir)
|
|
||||||
dir_path = os.path.abspath(parent_path)
|
|
||||||
file_path = os.path.join(
|
|
||||||
dir_path, 'i18n', 'af.qm')
|
|
||||||
translator = QTranslator()
|
|
||||||
translator.load(file_path)
|
|
||||||
QCoreApplication.installTranslator(translator)
|
|
||||||
|
|
||||||
expected_message = 'Goeie more'
|
|
||||||
real_message = QCoreApplication.translate("@default", 'Good morning')
|
|
||||||
self.assertEqual(real_message, expected_message)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
suite = unittest.makeSuite(SafeTranslationsTest)
|
|
||||||
runner = unittest.TextTestRunner(verbosity=2)
|
|
||||||
runner.run(suite)
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
"""Common functionality used by regression tests."""
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import logging
|
|
||||||
|
|
||||||
|
|
||||||
LOGGER = logging.getLogger('QGIS')
|
|
||||||
QGIS_APP = None # Static variable used to hold hand to running QGIS app
|
|
||||||
CANVAS = None
|
|
||||||
PARENT = None
|
|
||||||
IFACE = None
|
|
||||||
|
|
||||||
|
|
||||||
def get_qgis_app():
|
|
||||||
""" Start one QGIS application to test against.
|
|
||||||
|
|
||||||
:returns: Handle to QGIS app, canvas, iface and parent. If there are any
|
|
||||||
errors the tuple members will be returned as None.
|
|
||||||
:rtype: (QgsApplication, CANVAS, IFACE, PARENT)
|
|
||||||
|
|
||||||
If QGIS is already running the handle to that app will be returned.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
from qgis.PyQt import QtGui, QtCore
|
|
||||||
from qgis.core import QgsApplication
|
|
||||||
from qgis.gui import QgsMapCanvas
|
|
||||||
from .qgis_interface import QgisInterface
|
|
||||||
except ImportError:
|
|
||||||
return None, None, None, None
|
|
||||||
|
|
||||||
global QGIS_APP # pylint: disable=W0603
|
|
||||||
|
|
||||||
if QGIS_APP is None:
|
|
||||||
gui_flag = True # All test will run qgis in gui mode
|
|
||||||
#noinspection PyPep8Naming
|
|
||||||
QGIS_APP = QgsApplication(sys.argv, gui_flag)
|
|
||||||
# Make sure QGIS_PREFIX_PATH is set in your env if needed!
|
|
||||||
QGIS_APP.initQgis()
|
|
||||||
s = QGIS_APP.showSettings()
|
|
||||||
LOGGER.debug(s)
|
|
||||||
|
|
||||||
global PARENT # pylint: disable=W0603
|
|
||||||
if PARENT is None:
|
|
||||||
#noinspection PyPep8Naming
|
|
||||||
PARENT = QtGui.QWidget()
|
|
||||||
|
|
||||||
global CANVAS # pylint: disable=W0603
|
|
||||||
if CANVAS is None:
|
|
||||||
#noinspection PyPep8Naming
|
|
||||||
CANVAS = QgsMapCanvas(PARENT)
|
|
||||||
CANVAS.resize(QtCore.QSize(400, 400))
|
|
||||||
|
|
||||||
global IFACE # pylint: disable=W0603
|
|
||||||
if IFACE is None:
|
|
||||||
# QgisInterface is a stub implementation of the QGIS plugin interface
|
|
||||||
#noinspection PyPep8Naming
|
|
||||||
IFACE = QgisInterface(CANVAS)
|
|
||||||
|
|
||||||
return QGIS_APP, CANVAS, IFACE, PARENT
|
|
||||||
Reference in New Issue
Block a user