Refont du code de CenRa_COPIE
This commit is contained in:
parent
0997a7d6d8
commit
70232ac4c7
100
CenRa_COPIE/CenRa_Copie.py
Normal file
100
CenRa_COPIE/CenRa_Copie.py
Normal file
@ -0,0 +1,100 @@
|
||||
__copyright__ = "Copyright 2021, 3Liz"
|
||||
__license__ = "GPL version 3"
|
||||
__email__ = "info@3liz.org"
|
||||
|
||||
|
||||
from qgis.core import QgsApplication
|
||||
from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
|
||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||
from qgis.PyQt.QtWidgets import QAction, QMessageBox
|
||||
from qgis.utils import iface
|
||||
import qgis
|
||||
|
||||
|
||||
#include <QSettings>
|
||||
|
||||
import os
|
||||
from .tools.resources import (
|
||||
plugin_path,
|
||||
resources_path,
|
||||
maj_verif,
|
||||
)
|
||||
from .copie_editor import Copie_Editor
|
||||
from .about_form import CopieAboutDialog
|
||||
|
||||
from PyQt5.QtCore import *
|
||||
|
||||
class PgCopie:
|
||||
def __init__(self):
|
||||
""" Constructor. """
|
||||
self.action_editor = None
|
||||
self.issues = None
|
||||
self.provider = None
|
||||
self.locator_filter = None
|
||||
self.dock_action = None
|
||||
self.help_action = None
|
||||
plugin_dir = os.path.dirname(__file__)
|
||||
end_find = plugin_dir.rfind('\\')+1
|
||||
global NAME
|
||||
NAME = plugin_dir[end_find:]
|
||||
maj_verif(NAME)
|
||||
|
||||
# Display About window on first use
|
||||
version = qgis.utils.pluginMetadata('CenRa_Copie','version')
|
||||
s = QSettings()
|
||||
versionUse = s.value("copie/version", 1, type=str)
|
||||
if str(versionUse) != str(version) :
|
||||
s.setValue("copie/version", str(version))
|
||||
print(versionUse,version)
|
||||
self.open_about_dialog()
|
||||
|
||||
def initGui(self):
|
||||
""" Build the plugin GUI. """
|
||||
|
||||
self.toolBar = iface.addToolBar("CenRa_Copie")
|
||||
self.toolBar.setObjectName("CenRa_Copie")
|
||||
|
||||
icon = QIcon(resources_path('icons', 'icon.png'))
|
||||
|
||||
# Open the online help
|
||||
self.help_action = QAction(icon, "CenRa_Copie", iface.mainWindow())
|
||||
iface.pluginHelpMenu().addAction(self.help_action)
|
||||
self.help_action.triggered.connect(self.open_help)
|
||||
if not self.action_editor:
|
||||
self.action_editor = Copie_Editor()
|
||||
|
||||
self.copie_editor = QAction(icon, 'Copie',None)
|
||||
self.toolBar.addAction(self.copie_editor)
|
||||
self.copie_editor.triggered.connect(self.open_editor)
|
||||
|
||||
def open_about_dialog(self):
|
||||
"""
|
||||
About dialog
|
||||
"""
|
||||
dialog = CopieAboutDialog(iface)
|
||||
dialog.exec_()
|
||||
def open_help():
|
||||
""" Open the online help. """
|
||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||
|
||||
def open_editor(self):
|
||||
self.action_editor.show()
|
||||
self.action_editor.raise_()
|
||||
|
||||
def unload(self):
|
||||
""" Unload the plugin. """
|
||||
if self.action_editor:
|
||||
iface.removePluginMenu('CenRa_Copie',self.copie_editor)
|
||||
|
||||
|
||||
if self.provider:
|
||||
QgsApplication.processingRegistry().removeProvider(self.provider)
|
||||
del self.provider
|
||||
|
||||
if self.locator_filter:
|
||||
iface.deregisterLocatorFilter(self.locator_filter)
|
||||
del self.locator_filter
|
||||
|
||||
if self.help_action:
|
||||
iface.pluginHelpMenu().removeAction(self.help_action)
|
||||
del self.help_action
|
||||
@ -1,226 +0,0 @@
|
||||
#/***************************************************************************
|
||||
# Copie
|
||||
#
|
||||
# Permet la copie d'une table dans une base PostGis
|
||||
# -------------------
|
||||
# begin : 2015-04-13
|
||||
# git sha : $Format:%H$
|
||||
# copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes
|
||||
# email : guillaume.costes@espaces-naturels.fr
|
||||
# ***************************************************************************/
|
||||
#
|
||||
#/***************************************************************************
|
||||
# * *
|
||||
# * 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 \
|
||||
copie.py \
|
||||
copie_dialog.py
|
||||
|
||||
PLUGINNAME = Copie
|
||||
|
||||
PY_FILES = \
|
||||
copie.py \
|
||||
copie_dialog.py \
|
||||
__init__.py
|
||||
|
||||
UI_FILES = copie_dialog_base.ui
|
||||
|
||||
EXTRAS = icon.png metadata.txt
|
||||
|
||||
COMPILED_RESOURCE_FILES = resources_rc.py
|
||||
|
||||
PEP8EXCLUDE=pydev,resources_rc.py,conf.py,third_party,ui
|
||||
|
||||
|
||||
#################################################
|
||||
# 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' ' ')
|
||||
|
||||
QGISDIR=.qgis2
|
||||
|
||||
default: compile
|
||||
|
||||
compile: $(COMPILED_RESOURCE_FILES)
|
||||
|
||||
%_rc.py : %.qrc $(RESOURCES_SRC)
|
||||
pyrcc4 -o $*_rc.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
|
||||
|
||||
# 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,41 +0,0 @@
|
||||
<html>
|
||||
<body>
|
||||
<h3>Plugin Builder Results</h3>
|
||||
|
||||
Congratulations! You just built a plugin for QGIS!<br/><br />
|
||||
|
||||
<div id='help' style='font-size:.9em;'>
|
||||
Your plugin <b>Copie</b> was created in:<br>
|
||||
<b>C:\Users\gcostes\.qgis2\python\plugins\Copie</b>
|
||||
<p>
|
||||
Your QGIS plugin directory is located at:<br>
|
||||
<b>C:/Users/gcostes/.qgis2/python/plugins</b>
|
||||
<p>
|
||||
<h3>What's Next</h3>
|
||||
<ol>
|
||||
<li>In your plugin directory, compile the resources file using pyrcc4 (simply run <b>make</b> if you have automake or use <b>pb_tool</b>)
|
||||
<li>Test the generated sources using <b>make test</b> (or run tests from your IDE)
|
||||
<li>Copy the entire directory containing your new plugin to the QGIS plugin directory (see Notes below)
|
||||
<li>Test the plugin by enabling it in the QGIS plugin manager
|
||||
<li>Customize it by editing the implementation file <b>copie.py</b>
|
||||
<li>Create your own custom icon, replacing the default <b>icon.png</b>
|
||||
<li>Modify your user interface by opening <b>copie_dialog_base.ui</b> in Qt Designer
|
||||
</ol>
|
||||
Notes:
|
||||
<ul>
|
||||
<li>You can use the <b>Makefile</b> to compile and deploy when you
|
||||
make changes. This requires GNU make (gmake). The Makefile is ready to use, however you
|
||||
will have to edit it to add addional Python source files, dialogs, and translations.
|
||||
<li>You can also use <b>pb_tool</b> to compile and deploy your plugin. Tweak the <i>pb_tool.cfg</i> file included with your plugin as you add files. Install <b>pb_tool</b> using
|
||||
<i>pip</i> or <i>easy_install</i>. See <a href="http://loc8.cc/pb_tool">http://loc8.cc/pb_tool</a> for more information.
|
||||
</ul>
|
||||
</div>
|
||||
<div style='font-size:.9em;'>
|
||||
<p>
|
||||
For information on writing PyQGIS code, see <a href="http://loc8.cc/pyqgis_resources">http://loc8.cc/pyqgis_resources</a> for a list of resources.
|
||||
</p>
|
||||
</div>
|
||||
<img src="http://geoapt.com/geoapt_logo_p.png" alt='GeoApt LLC' title='GeoApt LLC' align='absmiddle'>
|
||||
©2011-2015 GeoApt LLC - geoapt.com
|
||||
</body>
|
||||
</html>
|
||||
5
CenRa_COPIE/README.md
Normal file
5
CenRa_COPIE/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Plugin_COPIE
|
||||
---
|
||||
## Objectif !
|
||||
Vise à faciliter la création table dans PostgreSQL en utilisant des table déja existant,
|
||||
tout en utilisant des modèles homogènes pour la saisie.
|
||||
@ -1,33 +0,0 @@
|
||||
Plugin Builder Results
|
||||
|
||||
Your plugin Copie was created in:
|
||||
C:\Users\gcostes\.qgis2\python\plugins\Copie
|
||||
|
||||
Your QGIS plugin directory is located at:
|
||||
C:/Users/gcostes/.qgis2/python/plugins
|
||||
|
||||
What's Next:
|
||||
|
||||
* Copy the entire directory containing your new plugin to the QGIS plugin
|
||||
directory
|
||||
|
||||
* Compile the resources file using pyrcc4
|
||||
|
||||
* Run the tests (``make test``)
|
||||
|
||||
* Test the plugin by enabling it in the QGIS plugin manager
|
||||
|
||||
* Customize it by editing the implementation file: ``copie.py``
|
||||
|
||||
* Create your own custom icon, replacing the default icon.png
|
||||
|
||||
* Modify your user interface by opening Copie.ui in Qt Designer
|
||||
|
||||
* You can use the Makefile to compile your Ui and resource files when
|
||||
you make changes. This requires GNU make (gmake)
|
||||
|
||||
For more information, see the PyQGIS Developer Cookbook at:
|
||||
http://www.qgis.org/pyqgis-cookbook/index.html
|
||||
|
||||
(C) 2011-2014 GeoApt LLC - geoapt.com
|
||||
Git revision : $Format:%H$
|
||||
@ -1,35 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
/***************************************************************************
|
||||
Copie
|
||||
A QGIS plugin
|
||||
Permet la copie d'une table dans une base PostGis
|
||||
-------------------
|
||||
begin : 2015-04-13
|
||||
copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes
|
||||
email : guillaume.costes@espaces-naturels.fr
|
||||
git sha : $Format:%H$
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
This script initializes the plugin, making it known to QGIS.
|
||||
"""
|
||||
|
||||
|
||||
# noinspection PyPep8Naming
|
||||
def classFactory(iface): # pylint: disable=invalid-name
|
||||
"""Load Copie class from file Copie.
|
||||
|
||||
:param iface: A QGIS interface instance.
|
||||
:type iface: QgsInterface
|
||||
"""
|
||||
#
|
||||
from .copie import Copie
|
||||
return Copie(iface)
|
||||
def classFactory(iface):
|
||||
_ = iface
|
||||
from CenRa_COPIE.CenRa_Copie import PgCopie
|
||||
return PgCopie()
|
||||
|
||||
@ -6,13 +6,13 @@ from qgis.PyQt import uic
|
||||
from qgis.PyQt.QtGui import QPixmap
|
||||
from qgis.PyQt.QtWidgets import QDialog
|
||||
|
||||
from ..tools.resources import devlog
|
||||
from .tools.resources import devlog
|
||||
|
||||
ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
||||
os.path.join(
|
||||
str(Path(__file__).resolve().parent.parent),
|
||||
'forms',
|
||||
'copie_about_form.ui'
|
||||
str(Path(__file__).resolve().parent),
|
||||
'tools/ui',
|
||||
'CenRa_about_form.ui'
|
||||
)
|
||||
)
|
||||
|
||||
@ -1,360 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
/***************************************************************************
|
||||
Copie
|
||||
A QGIS plugin
|
||||
Permet la copie d'une table dans une base PostGis
|
||||
-------------------
|
||||
begin : 2015-04-13
|
||||
git sha : $Format:%H$
|
||||
copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes
|
||||
email : guillaume.costes@espaces-naturels.fr
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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 PyQt4.QtCore import *
|
||||
#from PyQt4.QtGui import *
|
||||
from qgis.core import *
|
||||
from qgis.gui import *
|
||||
# Initialize Qt resources from file resources.py
|
||||
import resources_rc
|
||||
# Import the code for the dialog
|
||||
from copie_dialog import CopieDialog
|
||||
import os.path
|
||||
|
||||
|
||||
class Copie:
|
||||
"""QGIS Plugin Implementation."""
|
||||
|
||||
def __init__(self, iface):
|
||||
"""Constructor.
|
||||
|
||||
:param iface: An interface instance that will be passed to this class
|
||||
which provides the hook by which you can manipulate the QGIS
|
||||
application at run time.
|
||||
:type iface: QgsInterface
|
||||
"""
|
||||
# Save reference to the QGIS interface
|
||||
self.iface = iface
|
||||
# initialize plugin directory
|
||||
self.plugin_dir = os.path.dirname(__file__)
|
||||
# initialize locale
|
||||
locale = QSettings().value('locale/userLocale')[0:2]
|
||||
locale_path = os.path.join(
|
||||
self.plugin_dir,
|
||||
'i18n',
|
||||
'Copie_{}.qm'.format(locale))
|
||||
|
||||
if os.path.exists(locale_path):
|
||||
self.translator = QTranslator()
|
||||
self.translator.load(locale_path)
|
||||
|
||||
if qVersion() > '4.3.3':
|
||||
QCoreApplication.installTranslator(self.translator)
|
||||
|
||||
# Create the dialog (after translation) and keep reference
|
||||
self.dlg = CopieDialog()
|
||||
|
||||
# Declare instance attributes
|
||||
self.actions = []
|
||||
self.menu = self.tr(u'&Copie')
|
||||
# TODO: We are going to let the user set this up in a future iteration
|
||||
self.toolbar = self.iface.addToolBar(u'Copie')
|
||||
self.toolbar.setObjectName(u'Copie')
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
def tr(self, message):
|
||||
"""Get the translation for a string using Qt translation API.
|
||||
|
||||
We implement this ourselves since we do not inherit QObject.
|
||||
|
||||
:param message: String for translation.
|
||||
:type message: str, QString
|
||||
|
||||
:returns: Translated version of message.
|
||||
:rtype: QString
|
||||
"""
|
||||
# noinspection PyTypeChecker,PyArgumentList,PyCallByClass
|
||||
return QCoreApplication.translate('Copie', message)
|
||||
|
||||
|
||||
def add_action(
|
||||
self,
|
||||
icon_path,
|
||||
text,
|
||||
callback,
|
||||
enabled_flag=True,
|
||||
add_to_menu=True,
|
||||
add_to_toolbar=True,
|
||||
status_tip=None,
|
||||
whats_this=None,
|
||||
parent=None):
|
||||
"""Add a toolbar icon to the toolbar.
|
||||
|
||||
:param icon_path: Path to the icon for this action. Can be a resource
|
||||
path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
|
||||
:type icon_path: str
|
||||
|
||||
:param text: Text that should be shown in menu items for this action.
|
||||
:type text: str
|
||||
|
||||
:param callback: Function to be called when the action is triggered.
|
||||
:type callback: function
|
||||
|
||||
:param enabled_flag: A flag indicating if the action should be enabled
|
||||
by default. Defaults to True.
|
||||
:type enabled_flag: bool
|
||||
|
||||
:param add_to_menu: Flag indicating whether the action should also
|
||||
be added to the menu. Defaults to True.
|
||||
:type add_to_menu: bool
|
||||
|
||||
:param add_to_toolbar: Flag indicating whether the action should also
|
||||
be added to the toolbar. Defaults to True.
|
||||
:type add_to_toolbar: bool
|
||||
|
||||
:param status_tip: Optional text to show in a popup when mouse pointer
|
||||
hovers over the action.
|
||||
:type status_tip: str
|
||||
|
||||
:param parent: Parent widget for the new action. Defaults None.
|
||||
:type parent: QWidget
|
||||
|
||||
:param whats_this: Optional text to show in the status bar when the
|
||||
mouse pointer hovers over the action.
|
||||
|
||||
:returns: The action that was created. Note that the action is also
|
||||
added to self.actions list.
|
||||
:rtype: QAction
|
||||
"""
|
||||
|
||||
icon = QIcon(icon_path)
|
||||
action = QAction(icon, text, parent)
|
||||
action.triggered.connect(callback)
|
||||
action.setEnabled(enabled_flag)
|
||||
|
||||
if status_tip is not None:
|
||||
action.setStatusTip(status_tip)
|
||||
|
||||
if whats_this is not None:
|
||||
action.setWhatsThis(whats_this)
|
||||
|
||||
if add_to_toolbar:
|
||||
self.toolbar.addAction(action)
|
||||
|
||||
if add_to_menu:
|
||||
self.iface.addPluginToMenu(
|
||||
self.menu,
|
||||
action)
|
||||
|
||||
self.actions.append(action)
|
||||
|
||||
return action
|
||||
|
||||
def initGui(self):
|
||||
"""Create the menu entries and toolbar icons inside the QGIS GUI."""
|
||||
|
||||
icon_path = ':/plugins/Copie/table_copie.png'
|
||||
self.add_action(
|
||||
icon_path,
|
||||
text=self.tr(u'Copie'),
|
||||
callback=self.run,
|
||||
parent=self.iface.mainWindow())
|
||||
|
||||
|
||||
def unload(self):
|
||||
"""Removes the plugin menu item and icon from QGIS GUI."""
|
||||
for action in self.actions:
|
||||
self.iface.removePluginMenu(
|
||||
self.tr(u'&Copie'),
|
||||
action)
|
||||
self.iface.removeToolBarIcon(action)
|
||||
# remove the toolbar
|
||||
del self.toolbar
|
||||
|
||||
|
||||
def run(self):
|
||||
"""Run method that performs all the real work"""
|
||||
layer = self.iface.activeLayer()
|
||||
|
||||
if layer == None :
|
||||
self.iface.messageBar().pushMessage(u"Vous devez sélectionner une table !", level=QgsMessageBar.WARNING, duration=5)
|
||||
|
||||
else :
|
||||
# Récupération des sources de la couche active
|
||||
list_sources = layer.source().split(" ")
|
||||
# dbname
|
||||
source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1]
|
||||
# schema
|
||||
source_schema = [s for s in list_sources if "table" in s][0].split('"')[1]
|
||||
# tablename
|
||||
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
||||
|
||||
if source_db != 'sig4269':
|
||||
self.iface.messageBar().pushMessage(u"Un référentiel ne peut être copié, utilisez les filtres !", level=QgsMessageBar.CRITICAL, duration=10)
|
||||
|
||||
else :
|
||||
import psycopg2
|
||||
|
||||
config = "//100.100.100.100/bd_sig/z_QGIS/config.txt" # Chemin du fichier config
|
||||
# Fonction de lecture des lignes du fichier config
|
||||
def readline(n):
|
||||
with open(config, "r") as f:
|
||||
for lineno, line in enumerate(f):
|
||||
if lineno == n:
|
||||
return line.strip() # Permet d'enlever les retours chariots
|
||||
|
||||
host = readline(10)
|
||||
port = readline(12)
|
||||
dbname = readline(14)
|
||||
user = readline(16)
|
||||
password = readline(18)
|
||||
|
||||
con = psycopg2.connect("dbname="+ dbname + " user=" + user + " host=" + host + " password=" + password)
|
||||
cur = con.cursor()
|
||||
# Creation de la liste des schemas de la base de donnees
|
||||
SQL = """WITH list_schema AS (
|
||||
SELECT catalog_name, schema_name
|
||||
FROM information_schema.schemata
|
||||
WHERE schema_name <> 'information_schema'
|
||||
AND schema_name !~ E'^pg_'
|
||||
ORDER BY schema_name
|
||||
)
|
||||
|
||||
SELECT string_agg(schema_name,',')
|
||||
FROM list_schema
|
||||
GROUP BY catalog_name"""
|
||||
|
||||
cur.execute(SQL)
|
||||
|
||||
list_brut = str(cur.next())
|
||||
|
||||
list = list_brut [3:-3]
|
||||
listItems = list.split(",")
|
||||
|
||||
con.close()
|
||||
|
||||
self.dlg.schema.clear()
|
||||
self.dlg.schema.addItems(listItems)
|
||||
self.dlg.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema
|
||||
|
||||
|
||||
self.dlg.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source
|
||||
# show the dialog
|
||||
self.dlg.show()
|
||||
# Run the dialog event loop
|
||||
result = self.dlg.exec_()
|
||||
# See if OK was pressed
|
||||
if result:
|
||||
#******************************debut script*********************************
|
||||
### config.txt
|
||||
config = "//100.100.100.100/bd_sig/z_QGIS/config.txt" # Chemin du fichier config
|
||||
|
||||
# Fonction de lecture des lignes du fichier config
|
||||
def readline(n):
|
||||
with open(config, "r") as f:
|
||||
for lineno, line in enumerate(f):
|
||||
if lineno == n:
|
||||
return line.strip() # Permet d'enlever les retours chariots
|
||||
|
||||
# Recuperation des donnees
|
||||
host = readline(10)
|
||||
port = readline(12)
|
||||
dbname = readline(14)
|
||||
user = readline(16)
|
||||
password = readline(18)
|
||||
|
||||
con = psycopg2.connect("dbname="+ dbname + " user=" + user + " host=" + host + " password=" + password)
|
||||
cur = con.cursor()
|
||||
|
||||
# Récupération de la couche active
|
||||
layer = self.iface.activeLayer()
|
||||
|
||||
# Récupération des sources de la couche active
|
||||
list_sources = layer.source().split(" ")
|
||||
# dbname
|
||||
source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1]
|
||||
# schema
|
||||
source_schema = [s for s in list_sources if "table" in s][0].split('"')[1]
|
||||
# tablename
|
||||
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
||||
|
||||
if self.dlg.schema.currentIndex() == -1 :
|
||||
QMessageBox.warning(None, "Oups :", "Veuillez choisir un dossier de destination.")
|
||||
return
|
||||
|
||||
schema = self.dlg.schema.currentText()
|
||||
|
||||
if self.dlg.table_destination.text() == '' :
|
||||
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.")
|
||||
return
|
||||
|
||||
if self.dlg.annee.text() == 'aaaa' or self.dlg.annee.text() == '':
|
||||
tablename = schema + "_" + self.dlg.table_destination.text().lower()
|
||||
else :
|
||||
tablename = schema + "_" + self.dlg.table_destination.text().lower() + "_" + self.dlg.annee.text()
|
||||
|
||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||
|
||||
geom = readline(6)
|
||||
|
||||
if self.dlg.table_vide.isChecked() == 1 :
|
||||
SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename + " LIMIT 0;"
|
||||
else :
|
||||
SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename
|
||||
|
||||
|
||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
||||
SQL_sequence_01 = "CREATE SEQUENCE " + schema + "." + tablename + "_gid_seq" + " INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;"
|
||||
SQL_sequence_02 = "ALTER TABLE " + schema + "." + tablename + " ALTER COLUMN gid SET DEFAULT nextval(\'" + schema + "." + tablename + "_gid_seq\'::regclass);"
|
||||
SQL_sequence_03 = "SELECT setval(\'" + schema + "." + tablename + "_gid_seq\'::regclass, (SELECT max(gid) AS max_gid FROM " + schema + "." + tablename + "));"
|
||||
SQL_sequence_04 = "ALTER SEQUENCE " + schema + "." + tablename + "_gid_seq" + " OWNED BY " + schema + "." + tablename + ".gid;"
|
||||
|
||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
||||
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
||||
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
||||
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
||||
|
||||
cur.execute(SQL_table)
|
||||
cur.execute(SQL_pkey)
|
||||
cur.execute(SQL_sequence_01)
|
||||
cur.execute(SQL_sequence_02)
|
||||
cur.execute(SQL_sequence_03)
|
||||
cur.execute(SQL_sequence_04)
|
||||
|
||||
if layer.wkbType() == QGis.WKBPoint :
|
||||
cur.execute(SQL_trigger_coordonnees)
|
||||
|
||||
if layer.wkbType() == QGis.WKBMultiLineString :
|
||||
cur.execute(SQL_trigger_length_m)
|
||||
cur.execute(SQL_trigger_length_km)
|
||||
|
||||
if layer.wkbType() == QGis.WKBMultiPolygon :
|
||||
cur.execute(SQL_trigger_area_m2)
|
||||
cur.execute(SQL_trigger_area_ha)
|
||||
|
||||
con.commit()
|
||||
|
||||
### Affichage de la table
|
||||
uri = QgsDataSourceURI()
|
||||
# set host name, port, database name, username and password
|
||||
uri.setConnection(host ,port ,dbname ,user ,password)
|
||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||
uri.setDataSource(schema, tablename, geom)
|
||||
|
||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||
|
||||
con.commit()
|
||||
con.close()
|
||||
|
||||
self.iface.messageBar().pushMessage("Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\"." , level=QgsMessageBar.INFO, duration=10)
|
||||
pass
|
||||
@ -1,42 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
/***************************************************************************
|
||||
CopieDialog
|
||||
A QGIS plugin
|
||||
Permet la copie d'une table dans une base PostGis
|
||||
-------------------
|
||||
begin : 2015-04-13
|
||||
git sha : $Format:%H$
|
||||
copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes
|
||||
email : guillaume.costes@espaces-naturels.fr
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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 QtCore, QtGui, QtGui, uic
|
||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
|
||||
|
||||
FORM_CLASS, _ = uic.loadUiType(os.path.join(
|
||||
os.path.dirname(__file__), 'copie_dialog_base.ui'))
|
||||
|
||||
|
||||
class CopieDialog(QDialog, FORM_CLASS):
|
||||
def __init__(self, parent=None):
|
||||
"""Constructor."""
|
||||
super(CopieDialog, self).__init__(parent)
|
||||
# Set up the user interface from Designer.
|
||||
# After 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,41 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
/***************************************************************************
|
||||
CopieDialog
|
||||
A QGIS plugin
|
||||
Permet la copie d'une table dans une base PostGis
|
||||
-------------------
|
||||
begin : 2015-04-13
|
||||
git sha : $Format:%H$
|
||||
copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes
|
||||
email : guillaume.costes@espaces-naturels.fr
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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 PyQt4 import QtGui, uic
|
||||
|
||||
FORM_CLASS, _ = uic.loadUiType(os.path.join(
|
||||
os.path.dirname(__file__), 'copie_dialog_base.ui'))
|
||||
|
||||
|
||||
class CopieDialog(QtGui.QDialog, FORM_CLASS):
|
||||
def __init__(self, parent=None):
|
||||
"""Constructor."""
|
||||
super(CopieDialog, self).__init__(parent)
|
||||
# Set up the user interface from Designer.
|
||||
# After 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,107 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'copie_dialog_base.ui'
|
||||
#
|
||||
# Created: Tue Apr 14 11:48:04 2015
|
||||
# by: PyQt4 UI code generator 4.10.2
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from builtins import object
|
||||
from qgis.PyQt import QtCore, QtGui
|
||||
|
||||
try:
|
||||
_fromUtf8 = QtCore.QString.fromUtf8
|
||||
except AttributeError:
|
||||
def _fromUtf8(s):
|
||||
return s
|
||||
|
||||
try:
|
||||
_encoding = QtGui.QApplication.UnicodeUTF8
|
||||
def _translate(context, text, disambig):
|
||||
return QtGui.QApplication.translate(context, text, disambig, _encoding)
|
||||
except AttributeError:
|
||||
def _translate(context, text, disambig):
|
||||
return QtGui.QApplication.translate(context, text, disambig)
|
||||
|
||||
class Ui_CopieDialogBase(object):
|
||||
def setupUi(self, CopieDialogBase):
|
||||
CopieDialogBase.setObjectName(_fromUtf8("CopieDialogBase"))
|
||||
CopieDialogBase.resize(386, 290)
|
||||
self.button_box = QtGui.QDialogButtonBox(CopieDialogBase)
|
||||
self.button_box.setGeometry(QtCore.QRect(100, 250, 161, 32))
|
||||
self.button_box.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.button_box.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
|
||||
self.button_box.setObjectName(_fromUtf8("button_box"))
|
||||
self.schema_label = QtGui.QLabel(CopieDialogBase)
|
||||
self.schema_label.setGeometry(QtCore.QRect(20, 100, 121, 29))
|
||||
self.schema_label.setMaximumSize(QtCore.QSize(10000, 16777215))
|
||||
self.schema_label.setObjectName(_fromUtf8("schema_label"))
|
||||
self.label_nom_table = QtGui.QLabel(CopieDialogBase)
|
||||
self.label_nom_table.setGeometry(QtCore.QRect(20, 150, 131, 29))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.label_nom_table.setFont(font)
|
||||
self.label_nom_table.setObjectName(_fromUtf8("label_nom_table"))
|
||||
self.schema = QtGui.QComboBox(CopieDialogBase)
|
||||
self.schema.setGeometry(QtCore.QRect(20, 130, 351, 20))
|
||||
self.schema.setObjectName(_fromUtf8("schema"))
|
||||
self.table_destination = QtGui.QLineEdit(CopieDialogBase)
|
||||
self.table_destination.setGeometry(QtCore.QRect(20, 180, 291, 20))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.table_destination.setFont(font)
|
||||
self.table_destination.setObjectName(_fromUtf8("table_destination"))
|
||||
self.annee = QtGui.QLineEdit(CopieDialogBase)
|
||||
self.annee.setGeometry(QtCore.QRect(320, 180, 50, 20))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.annee.setFont(font)
|
||||
self.annee.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.annee.setObjectName(_fromUtf8("annee"))
|
||||
self.table_vide = QtGui.QCheckBox(CopieDialogBase)
|
||||
self.table_vide.setGeometry(QtCore.QRect(60, 220, 271, 20))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.table_vide.setFont(font)
|
||||
self.table_vide.setObjectName(_fromUtf8("table_vide"))
|
||||
self.table_source = QtGui.QLineEdit(CopieDialogBase)
|
||||
self.table_source.setEnabled(False)
|
||||
self.table_source.setGeometry(QtCore.QRect(20, 60, 351, 20))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.table_source.setFont(font)
|
||||
self.table_source.setObjectName(_fromUtf8("table_source"))
|
||||
self.Titre = QtGui.QLabel(CopieDialogBase)
|
||||
self.Titre.setGeometry(QtCore.QRect(0, 0, 381, 31))
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(14)
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.Titre.setFont(font)
|
||||
self.Titre.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.Titre.setObjectName(_fromUtf8("Titre"))
|
||||
self.table_source_label = QtGui.QLabel(CopieDialogBase)
|
||||
self.table_source_label.setGeometry(QtCore.QRect(20, 30, 75, 29))
|
||||
self.table_source_label.setMaximumSize(QtCore.QSize(75, 16777215))
|
||||
self.table_source_label.setObjectName(_fromUtf8("table_source_label"))
|
||||
|
||||
self.retranslateUi(CopieDialogBase)
|
||||
QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("accepted()")), CopieDialogBase.accept)
|
||||
QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("rejected()")), CopieDialogBase.reject)
|
||||
QtCore.QMetaObject.connectSlotsByName(CopieDialogBase)
|
||||
|
||||
def retranslateUi(self, CopieDialogBase):
|
||||
CopieDialogBase.setWindowTitle(_translate("CopieDialogBase", "Copie", None))
|
||||
self.schema_label.setText(_translate("CopieDialogBase", "Dossier de destination ", None))
|
||||
self.label_nom_table.setText(_translate("CopieDialogBase", "Nom de la nouvelle table", None))
|
||||
self.annee.setText(_translate("CopieDialogBase", "aaaa", None))
|
||||
self.table_vide.setText(_translate("CopieDialogBase", "Cocher cette case pour vider la table de destination", None))
|
||||
self.Titre.setText(_translate("CopieDialogBase", "Copie d\'une table", None))
|
||||
self.table_source_label.setText(_translate("CopieDialogBase", "Table source ", None))
|
||||
|
||||
@ -1,106 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'copie_dialog_base.ui'
|
||||
#
|
||||
# Created: Tue Apr 14 11:48:04 2015
|
||||
# by: PyQt4 UI code generator 4.10.2
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
try:
|
||||
_fromUtf8 = QtCore.QString.fromUtf8
|
||||
except AttributeError:
|
||||
def _fromUtf8(s):
|
||||
return s
|
||||
|
||||
try:
|
||||
_encoding = QtGui.QApplication.UnicodeUTF8
|
||||
def _translate(context, text, disambig):
|
||||
return QtGui.QApplication.translate(context, text, disambig, _encoding)
|
||||
except AttributeError:
|
||||
def _translate(context, text, disambig):
|
||||
return QtGui.QApplication.translate(context, text, disambig)
|
||||
|
||||
class Ui_CopieDialogBase(object):
|
||||
def setupUi(self, CopieDialogBase):
|
||||
CopieDialogBase.setObjectName(_fromUtf8("CopieDialogBase"))
|
||||
CopieDialogBase.resize(386, 290)
|
||||
self.button_box = QtGui.QDialogButtonBox(CopieDialogBase)
|
||||
self.button_box.setGeometry(QtCore.QRect(100, 250, 161, 32))
|
||||
self.button_box.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.button_box.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
|
||||
self.button_box.setObjectName(_fromUtf8("button_box"))
|
||||
self.schema_label = QtGui.QLabel(CopieDialogBase)
|
||||
self.schema_label.setGeometry(QtCore.QRect(20, 100, 121, 29))
|
||||
self.schema_label.setMaximumSize(QtCore.QSize(10000, 16777215))
|
||||
self.schema_label.setObjectName(_fromUtf8("schema_label"))
|
||||
self.label_nom_table = QtGui.QLabel(CopieDialogBase)
|
||||
self.label_nom_table.setGeometry(QtCore.QRect(20, 150, 131, 29))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.label_nom_table.setFont(font)
|
||||
self.label_nom_table.setObjectName(_fromUtf8("label_nom_table"))
|
||||
self.schema = QtGui.QComboBox(CopieDialogBase)
|
||||
self.schema.setGeometry(QtCore.QRect(20, 130, 351, 20))
|
||||
self.schema.setObjectName(_fromUtf8("schema"))
|
||||
self.table_destination = QtGui.QLineEdit(CopieDialogBase)
|
||||
self.table_destination.setGeometry(QtCore.QRect(20, 180, 291, 20))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.table_destination.setFont(font)
|
||||
self.table_destination.setObjectName(_fromUtf8("table_destination"))
|
||||
self.annee = QtGui.QLineEdit(CopieDialogBase)
|
||||
self.annee.setGeometry(QtCore.QRect(320, 180, 50, 20))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.annee.setFont(font)
|
||||
self.annee.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.annee.setObjectName(_fromUtf8("annee"))
|
||||
self.table_vide = QtGui.QCheckBox(CopieDialogBase)
|
||||
self.table_vide.setGeometry(QtCore.QRect(60, 220, 271, 20))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.table_vide.setFont(font)
|
||||
self.table_vide.setObjectName(_fromUtf8("table_vide"))
|
||||
self.table_source = QtGui.QLineEdit(CopieDialogBase)
|
||||
self.table_source.setEnabled(False)
|
||||
self.table_source.setGeometry(QtCore.QRect(20, 60, 351, 20))
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.table_source.setFont(font)
|
||||
self.table_source.setObjectName(_fromUtf8("table_source"))
|
||||
self.Titre = QtGui.QLabel(CopieDialogBase)
|
||||
self.Titre.setGeometry(QtCore.QRect(0, 0, 381, 31))
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(14)
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.Titre.setFont(font)
|
||||
self.Titre.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.Titre.setObjectName(_fromUtf8("Titre"))
|
||||
self.table_source_label = QtGui.QLabel(CopieDialogBase)
|
||||
self.table_source_label.setGeometry(QtCore.QRect(20, 30, 75, 29))
|
||||
self.table_source_label.setMaximumSize(QtCore.QSize(75, 16777215))
|
||||
self.table_source_label.setObjectName(_fromUtf8("table_source_label"))
|
||||
|
||||
self.retranslateUi(CopieDialogBase)
|
||||
QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("accepted()")), CopieDialogBase.accept)
|
||||
QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("rejected()")), CopieDialogBase.reject)
|
||||
QtCore.QMetaObject.connectSlotsByName(CopieDialogBase)
|
||||
|
||||
def retranslateUi(self, CopieDialogBase):
|
||||
CopieDialogBase.setWindowTitle(_translate("CopieDialogBase", "Copie", None))
|
||||
self.schema_label.setText(_translate("CopieDialogBase", "Dossier de destination ", None))
|
||||
self.label_nom_table.setText(_translate("CopieDialogBase", "Nom de la nouvelle table", None))
|
||||
self.annee.setText(_translate("CopieDialogBase", "aaaa", None))
|
||||
self.table_vide.setText(_translate("CopieDialogBase", "Cocher cette case pour vider la table de destination", None))
|
||||
self.Titre.setText(_translate("CopieDialogBase", "Copie d\'une table", None))
|
||||
self.table_source_label.setText(_translate("CopieDialogBase", "Table source ", None))
|
||||
|
||||
@ -1,218 +1,50 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
/***************************************************************************
|
||||
Copie
|
||||
A QGIS plugin
|
||||
Permet la copie d'une table dans une base PostGis
|
||||
-------------------
|
||||
begin : 2015-04-13
|
||||
git sha : $Format:%H$
|
||||
copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes
|
||||
email : guillaume.costes@espaces-naturels.fr
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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 __future__ import absolute_import
|
||||
#from PyQt4.QtCore import *
|
||||
#from PyQt4.QtGui import *
|
||||
# Import the PyQt and QGIS libraries
|
||||
from builtins import next
|
||||
from builtins import str
|
||||
from builtins import object
|
||||
import qgis
|
||||
from qgis.PyQt.QtCore import QSettings
|
||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog, QMessageBox
|
||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
from PyQt5.QtCore import *
|
||||
from PyQt5.QtGui import *
|
||||
from qgis.core import QgsDataSourceUri
|
||||
from builtins import str
|
||||
from builtins import object
|
||||
from PyQt5 import QtGui
|
||||
from qgis.core import *
|
||||
from qgis.gui import *
|
||||
# Initialize Qt resources from file resources.py
|
||||
from . import resources_rc
|
||||
# Import the code for the dialog
|
||||
import qgis
|
||||
from .forms.about_form import CopieAboutDialog
|
||||
from .copie_dialog import CopieDialog
|
||||
import os.path
|
||||
from qgis.core import QgsDataSourceUri
|
||||
|
||||
from .tools.PythonSQL import *
|
||||
from .tools.resources import maj_verif
|
||||
from .tools.resources import (
|
||||
load_ui,
|
||||
resources_path,
|
||||
login_base,
|
||||
send_issues,
|
||||
)
|
||||
from .issues import CenRa_Issues
|
||||
|
||||
from qgis.utils import iface
|
||||
import os.path
|
||||
import webbrowser, os
|
||||
import psycopg2
|
||||
import psycopg2.extras
|
||||
import base64
|
||||
#import socket
|
||||
import os
|
||||
#import sys
|
||||
|
||||
class Copie(object):
|
||||
"""QGIS Plugin Implementation."""
|
||||
EDITOR_CLASS = load_ui('CenRa_Copie_base.ui')
|
||||
|
||||
def __init__(self, iface):
|
||||
"""Constructor.
|
||||
class Copie_Editor(QDialog, EDITOR_CLASS):
|
||||
|
||||
:param iface: An interface instance that will be passed to this class
|
||||
which provides the hook by which you can manipulate the QGIS
|
||||
application at run time.
|
||||
:type iface: QgsInterface
|
||||
"""
|
||||
# Save reference to the QGIS interface
|
||||
def __init__(self, parent=None):
|
||||
_ = parent
|
||||
super().__init__()
|
||||
self.setupUi(self)
|
||||
self.settings = QgsSettings()
|
||||
self.s = QSettings()
|
||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
||||
self.iface = iface
|
||||
# initialize plugin directory
|
||||
self.plugin_dir = os.path.dirname(__file__)
|
||||
# initialize locale
|
||||
locale = QSettings().value('locale/userLocale')[0:2]
|
||||
locale_path = os.path.join(
|
||||
self.plugin_dir,
|
||||
'i18n',
|
||||
'Copie_{}.qm'.format(locale))
|
||||
|
||||
if os.path.exists(locale_path):
|
||||
self.translator = QTranslator()
|
||||
self.translator.load(locale_path)
|
||||
|
||||
if qVersion() > '4.3.3':
|
||||
QCoreApplication.installTranslator(self.translator)
|
||||
|
||||
# Create the dialog (after translation) and keep reference
|
||||
self.dlg = CopieDialog()
|
||||
maj_verif('CenRa_COPIE')
|
||||
|
||||
version = qgis.utils.pluginMetadata('CenRa_COPIE','version')
|
||||
# Display About window on first use
|
||||
s = QSettings()
|
||||
versionUse = s.value("copie/version", 1, type=str)
|
||||
if str(versionUse) != str(version) :
|
||||
s.setValue("copie/version", str(version))
|
||||
self.open_about_dialog()
|
||||
|
||||
# Declare instance attributes
|
||||
self.actions = []
|
||||
self.menu = self.tr(u'&Copie')
|
||||
# TODO: We are going to let the user set this up in a future iteration
|
||||
self.toolbar = self.iface.addToolBar(u'Copie')
|
||||
self.toolbar.setObjectName(u'Copie')
|
||||
|
||||
def open_about_dialog(self):
|
||||
dialog = CopieAboutDialog(self.iface)
|
||||
dialog.exec_()
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
def tr(self, message):
|
||||
"""Get the translation for a string using Qt translation API.
|
||||
|
||||
We implement this ourselves since we do not inherit QObject.
|
||||
|
||||
:param message: String for translation.
|
||||
:type message: str, QString
|
||||
|
||||
:returns: Translated version of message.
|
||||
:rtype: QString
|
||||
"""
|
||||
# noinspection PyTypeChecker,PyArgumentList,PyCallByClass
|
||||
return QCoreApplication.translate('Copie', message)
|
||||
|
||||
|
||||
def add_action(
|
||||
self,
|
||||
icon_path,
|
||||
text,
|
||||
callback,
|
||||
enabled_flag=True,
|
||||
add_to_menu=True,
|
||||
add_to_toolbar=True,
|
||||
status_tip=None,
|
||||
whats_this=None,
|
||||
parent=None):
|
||||
"""Add a toolbar icon to the toolbar.
|
||||
|
||||
:param icon_path: Path to the icon for this action. Can be a resource
|
||||
path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
|
||||
:type icon_path: str
|
||||
|
||||
:param text: Text that should be shown in menu items for this action.
|
||||
:type text: str
|
||||
|
||||
:param callback: Function to be called when the action is triggered.
|
||||
:type callback: function
|
||||
|
||||
:param enabled_flag: A flag indicating if the action should be enabled
|
||||
by default. Defaults to True.
|
||||
:type enabled_flag: bool
|
||||
|
||||
:param add_to_menu: Flag indicating whether the action should also
|
||||
be added to the menu. Defaults to True.
|
||||
:type add_to_menu: bool
|
||||
|
||||
:param add_to_toolbar: Flag indicating whether the action should also
|
||||
be added to the toolbar. Defaults to True.
|
||||
:type add_to_toolbar: bool
|
||||
|
||||
:param status_tip: Optional text to show in a popup when mouse pointer
|
||||
hovers over the action.
|
||||
:type status_tip: str
|
||||
|
||||
:param parent: Parent widget for the new action. Defaults None.
|
||||
:type parent: QWidget
|
||||
|
||||
:param whats_this: Optional text to show in the status bar when the
|
||||
mouse pointer hovers over the action.
|
||||
|
||||
:returns: The action that was created. Note that the action is also
|
||||
added to self.actions list.
|
||||
:rtype: QAction
|
||||
"""
|
||||
|
||||
icon = QIcon(icon_path)
|
||||
action = QAction(icon, text, parent)
|
||||
action.triggered.connect(callback)
|
||||
action.setEnabled(enabled_flag)
|
||||
|
||||
if status_tip is not None:
|
||||
action.setStatusTip(status_tip)
|
||||
|
||||
if whats_this is not None:
|
||||
action.setWhatsThis(whats_this)
|
||||
|
||||
if add_to_toolbar:
|
||||
self.toolbar.addAction(action)
|
||||
|
||||
if add_to_menu:
|
||||
self.iface.addPluginToMenu(
|
||||
self.menu,
|
||||
action)
|
||||
|
||||
self.actions.append(action)
|
||||
|
||||
return action
|
||||
|
||||
def initGui(self):
|
||||
"""Create the menu entries and toolbar icons inside the QGIS GUI."""
|
||||
|
||||
icon_path = ':/plugins/Copie/table_copie.png'
|
||||
self.add_action(
|
||||
icon_path,
|
||||
text=self.tr(u'Copie'),
|
||||
callback=self.run,
|
||||
parent=self.iface.mainWindow())
|
||||
|
||||
|
||||
def unload(self):
|
||||
"""Removes the plugin menu item and icon from QGIS GUI."""
|
||||
for action in self.actions:
|
||||
self.iface.removePluginMenu(
|
||||
self.tr(u'&Copie'),
|
||||
action)
|
||||
self.iface.removeToolBarIcon(action)
|
||||
# remove the toolbar
|
||||
del self.toolbar
|
||||
|
||||
|
||||
def run(self):
|
||||
def raise_(self):
|
||||
"""Run method that performs all the real work"""
|
||||
layer = self.iface.activeLayer()
|
||||
|
||||
@ -268,16 +100,16 @@ class Copie(object):
|
||||
|
||||
con.close()
|
||||
|
||||
self.dlg.schema.clear()
|
||||
self.dlg.schema.addItems(listItems)
|
||||
self.dlg.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema
|
||||
self.schema.clear()
|
||||
self.schema.addItems(listItems)
|
||||
self.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema
|
||||
|
||||
|
||||
self.dlg.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source
|
||||
self.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source
|
||||
# show the dialog
|
||||
self.dlg.show()
|
||||
self.show()
|
||||
# Run the dialog event loop
|
||||
result = self.dlg.exec_()
|
||||
result = self.exec_()
|
||||
# See if OK was pressed
|
||||
if result:
|
||||
#******************************debut script*********************************
|
||||
@ -304,24 +136,24 @@ class Copie(object):
|
||||
# tablename
|
||||
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
||||
|
||||
if self.dlg.schema.currentIndex() == -1 :
|
||||
if self.schema.currentIndex() == -1 :
|
||||
QMessageBox.warning(None, "Oups :", "Veuillez choisir un dossier de destination.")
|
||||
return
|
||||
|
||||
schema = self.dlg.schema.currentText()
|
||||
schema = self.schema.currentText()
|
||||
|
||||
if self.dlg.table_destination.text() == '' :
|
||||
if self.table_destination.text() == '' :
|
||||
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.")
|
||||
return
|
||||
|
||||
if self.dlg.annee.text() == 'aaaa' or self.dlg.annee.text() == '':
|
||||
tablename = schema + "_" + self.dlg.table_destination.text().lower()
|
||||
if self.annee.text() == 'aaaa' or self.annee.text() == '':
|
||||
tablename = schema + "_" + self.table_destination.text().lower()
|
||||
else :
|
||||
tablename = schema + "_" + self.dlg.table_destination.text().lower() + "_" + self.dlg.annee.text()
|
||||
tablename = schema + "_" + self.table_destination.text().lower() + "_" + self.annee.text()
|
||||
|
||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||
|
||||
if self.dlg.table_vide.isChecked() == 1 :
|
||||
if self.table_vide.isChecked() == 1 :
|
||||
SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename + " LIMIT 0;"
|
||||
else :
|
||||
SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename
|
||||
@ -1,130 +0,0 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||
|
||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
clean:
|
||||
-rm -rf $(BUILDDIR)/*
|
||||
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/template_class.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/template_class.qhc"
|
||||
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/template_class"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/template_class"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
make -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
@ -1,155 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set BUILDDIR=build
|
||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source
|
||||
if NOT "%PAPER%" == "" (
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
if "%1" == "help" (
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "clean" (
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "html" (
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "dirhtml" (
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "singlehtml" (
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pickle" (
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "json" (
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "htmlhelp" (
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "qthelp" (
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\template_class.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\template_class.ghc
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "devhelp" (
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "epub" (
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latex" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "text" (
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "man" (
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "changes" (
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "linkcheck" (
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
or in %BUILDDIR%/linkcheck/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "doctest" (
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/doctest/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
:end
|
||||
@ -1,216 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copie documentation build configuration file, created by
|
||||
# sphinx-quickstart on Sun Feb 12 17:11:03 2012.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys, os
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
# -- General configuration -----------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = ['sphinx.ext.todo', 'sphinx.ext.pngmath', 'sphinx.ext.viewcode']
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Copie'
|
||||
copyright = u'2013, Guillaume COSTES - CEN Rhône-Alpes'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.1'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.1'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = []
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all documents.
|
||||
#default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_TemplateModuleNames = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
|
||||
# -- Options for HTML output ---------------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = 'default'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
#html_theme_path = []
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
#html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
#html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'TemplateClassdoc'
|
||||
|
||||
|
||||
# -- Options for LaTeX output --------------------------------------------------
|
||||
|
||||
# The paper size ('letter' or 'a4').
|
||||
#latex_paper_size = 'letter'
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#latex_font_size = '10pt'
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||
latex_documents = [
|
||||
('index', 'Copie.tex', u'Copie Documentation',
|
||||
u'Guillaume COSTES - CEN Rhône-Alpes', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#latex_preamble = ''
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output --------------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('index', 'TemplateClass', u'Copie Documentation',
|
||||
[u'Guillaume COSTES - CEN Rhône-Alpes'], 1)
|
||||
]
|
||||
@ -1,20 +0,0 @@
|
||||
.. Copie documentation master file, created by
|
||||
sphinx-quickstart on Sun Feb 12 17:11:03 2012.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Welcome to Copie's documentation!
|
||||
============================================
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS><TS version="2.0" language="af" sourcelanguage="en">
|
||||
<context>
|
||||
<name>@default</name>
|
||||
<message>
|
||||
<location filename="test_translations.py" line="48"/>
|
||||
<source>Good morning</source>
|
||||
<translation>Goeie more</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
88
CenRa_COPIE/issues.py
Normal file
88
CenRa_COPIE/issues.py
Normal file
@ -0,0 +1,88 @@
|
||||
import os
|
||||
plugin_dir = os.path.dirname(__file__)
|
||||
end_find = plugin_dir.rfind('\\')+1
|
||||
|
||||
NAME = plugin_dir[end_find:]
|
||||
|
||||
from qgis.gui import *
|
||||
|
||||
from qgis.core import (
|
||||
NULL,
|
||||
QgsApplication,
|
||||
QgsDataSourceUri,
|
||||
QgsProject,
|
||||
QgsProviderConnectionException,
|
||||
QgsProviderRegistry,
|
||||
QgsRasterLayer,
|
||||
QgsSettings,
|
||||
QgsVectorLayer,
|
||||
QgsGeometry,
|
||||
)
|
||||
from qgis.PyQt.QtWidgets import (
|
||||
QDialog,
|
||||
QAction,
|
||||
QDockWidget,
|
||||
QFileDialog,
|
||||
QInputDialog,
|
||||
QMenu,
|
||||
QToolButton,
|
||||
QTableWidget,
|
||||
QTableWidgetItem,
|
||||
)
|
||||
from qgis.utils import iface
|
||||
|
||||
|
||||
from .tools.resources import (
|
||||
load_ui,
|
||||
resources_path,
|
||||
send_issues,
|
||||
)
|
||||
|
||||
EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
|
||||
|
||||
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
_ = parent
|
||||
super().__init__()
|
||||
self.setupUi(self)
|
||||
self.settings = QgsSettings()
|
||||
|
||||
#place connect here
|
||||
self.annuler_button.clicked.connect(self.close)
|
||||
self.ok_button.clicked.connect(self.run_sendissues)
|
||||
|
||||
def run_sendissues(self):
|
||||
text_titre = self.titre_line.text()
|
||||
text_message = self.messages_plain.toPlainText()
|
||||
statu_bug = self.check_bug.isChecked()
|
||||
statu_aide = self.check_aide.isChecked()
|
||||
statu_question = self.check_question.isChecked()
|
||||
statu_amelioration = self.check_amelioration.isChecked()
|
||||
statu_autre = self.check_autre.isChecked()
|
||||
|
||||
statu = []
|
||||
if statu_bug == True : statu = statu + [1]
|
||||
if statu_aide == True : statu = statu + [3]
|
||||
if statu_question == True : statu = statu + [5]
|
||||
if statu_amelioration == True : statu = statu + [2]
|
||||
if statu_autre == True : statu = statu + [6]
|
||||
|
||||
if len(statu) >= 1:
|
||||
import qgis
|
||||
url = qgis.utils.pluginMetadata(NAME,'tracker')
|
||||
print(text_message)
|
||||
send_info = send_issues(url,text_titre,text_message,statu)
|
||||
code = send_info.status_code
|
||||
print(code)
|
||||
else:
|
||||
code = 423
|
||||
if code == 201:
|
||||
iface.messageBar().pushMessage("Envoyer :", "Votre messages à bien été envoyer.", level=Qgis.Success, duration=20)
|
||||
self.close()
|
||||
elif code == 422:
|
||||
iface.messageBar().pushMessage("Erreur :", "Erreur dans le contenu du messages.", level=Qgis.Critical, duration=20)
|
||||
elif code == 423:
|
||||
iface.messageBar().pushMessage("Erreur :", "Pas de sujet sélectionné.", level=Qgis.Critical, duration=20)
|
||||
elif code == 404:
|
||||
iface.messageBar().pushMessage("Missing :", "Le serveur de messagerie est injoignable.", level=Qgis.Warning, duration=20)
|
||||
@ -10,7 +10,7 @@
|
||||
name=CenRA_COPIE
|
||||
qgisMinimumVersion=3.0
|
||||
description=Permet la copie d'une table dans une base PostGis
|
||||
version=1.5
|
||||
version=2
|
||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||
email=si_besoin@cen-rhonealpes.fr
|
||||
|
||||
@ -19,7 +19,7 @@ email=si_besoin@cen-rhonealpes.fr
|
||||
# Recommended items:
|
||||
|
||||
# Uncomment the following line and add your changelog:
|
||||
changelog=<h2>CenRa_COPIE:</h2></br><p><h3>13/09/2024 - Version 1.5:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
||||
changelog=<h2>CenRa_COPIE:</h2></br><p><h3>22/10/2024 - Version 2:</h3>- Refonte du code.</p></br><p><h3>13/09/2024 - Version 1.5:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
||||
|
||||
# Tags are comma separated with spaces allowed
|
||||
tags=cenra, database, table
|
||||
|
||||
@ -1,74 +0,0 @@
|
||||
#/***************************************************************************
|
||||
# Copie
|
||||
#
|
||||
# Configuration file for plugin builder tool (pb_tool)
|
||||
# -------------------
|
||||
# begin : 2015-04-13
|
||||
# copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes
|
||||
# email : guillaume.costes@espaces-naturels.fr
|
||||
# ***************************************************************************/
|
||||
#
|
||||
#/***************************************************************************
|
||||
# * *
|
||||
# * 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://spatialgalaxy.net/qgis-plugin-development-with-pb_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: Copie
|
||||
|
||||
[files]
|
||||
# Python files that should be deployed with the plugin
|
||||
python_files: __init__.py copie.py copie_dialog.py
|
||||
|
||||
# The main dialog file that is loaded (not compiled)
|
||||
main_dialog: copie_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: icon.png metadata.txt
|
||||
|
||||
# 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,134 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# coding=utf-8
|
||||
"""This script uploads a plugin package on the server.
|
||||
Authors: A. Pasotti, V. Picavet
|
||||
git sha : $TemplateVCSFormat
|
||||
"""
|
||||
from __future__ import print_function
|
||||
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
from builtins import input
|
||||
import sys
|
||||
import getpass
|
||||
import xmlrpc.client
|
||||
from optparse import OptionParser
|
||||
|
||||
# Configuration
|
||||
PROTOCOL = 'http'
|
||||
SERVER = 'plugins.qgis.org'
|
||||
PORT = '80'
|
||||
ENDPOINT = '/plugins/RPC2/'
|
||||
VERBOSE = False
|
||||
|
||||
|
||||
def main(parameters, arguments):
|
||||
"""Main entry point.
|
||||
|
||||
:param parameters: Command line parameters.
|
||||
:param arguments: Command line arguments.
|
||||
"""
|
||||
address = "%s://%s:%s@%s:%s%s" % (
|
||||
PROTOCOL,
|
||||
parameters.username,
|
||||
parameters.password,
|
||||
parameters.server,
|
||||
parameters.port,
|
||||
ENDPOINT)
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
print("Connecting to: %s" % hide_password(address))
|
||||
|
||||
server = xmlrpc.client.ServerProxy(address, verbose=VERBOSE)
|
||||
|
||||
try:
|
||||
plugin_id, version_id = server.plugin.upload(
|
||||
xmlrpc.client.Binary(open(arguments[0]).read()))
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
print("Plugin ID: %s" % plugin_id)
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
print("Version ID: %s" % version_id)
|
||||
except xmlrpc.client.ProtocolError as err:
|
||||
# fix_print_with_import
|
||||
print("A protocol error occurred")
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
print("URL: %s" % hide_password(err.url, 0))
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
print("HTTP/HTTPS headers: %s" % err.headers)
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
print("Error code: %d" % err.errcode)
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
print("Error message: %s" % err.errmsg)
|
||||
except xmlrpc.client.Fault as err:
|
||||
# fix_print_with_import
|
||||
print("A fault occurred")
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
print("Fault code: %d" % err.faultCode)
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
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:
|
||||
# fix_print_with_import
|
||||
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()
|
||||
# fix_print_with_import
|
||||
# fix_print_with_import
|
||||
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,107 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# coding=utf-8
|
||||
"""This script uploads a plugin package on the server.
|
||||
Authors: A. Pasotti, V. Picavet
|
||||
git sha : $TemplateVCSFormat
|
||||
"""
|
||||
|
||||
import sys
|
||||
import getpass
|
||||
import xmlrpclib
|
||||
from optparse import OptionParser
|
||||
|
||||
# Configuration
|
||||
PROTOCOL = 'http'
|
||||
SERVER = 'plugins.qgis.org'
|
||||
PORT = '80'
|
||||
ENDPOINT = '/plugins/RPC2/'
|
||||
VERBOSE = False
|
||||
|
||||
|
||||
def main(parameters, arguments):
|
||||
"""Main entry point.
|
||||
|
||||
:param parameters: Command line parameters.
|
||||
:param arguments: Command line arguments.
|
||||
"""
|
||||
address = "%s://%s:%s@%s:%s%s" % (
|
||||
PROTOCOL,
|
||||
parameters.username,
|
||||
parameters.password,
|
||||
parameters.server,
|
||||
parameters.port,
|
||||
ENDPOINT)
|
||||
print "Connecting to: %s" % hide_password(address)
|
||||
|
||||
server = xmlrpclib.ServerProxy(address, verbose=VERBOSE)
|
||||
|
||||
try:
|
||||
plugin_id, version_id = server.plugin.upload(
|
||||
xmlrpclib.Binary(open(arguments[0]).read()))
|
||||
print "Plugin ID: %s" % plugin_id
|
||||
print "Version ID: %s" % version_id
|
||||
except xmlrpclib.ProtocolError, 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 xmlrpclib.Fault, 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,
|
||||
res = raw_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,441 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Resource object code
|
||||
#
|
||||
# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore
|
||||
|
||||
qt_resource_data = b"\
|
||||
\x00\x00\x13\x71\
|
||||
\x89\
|
||||
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
|
||||
\x00\x00\x32\x00\x00\x00\x3d\x08\x06\x00\x00\x00\xef\x69\x3a\x64\
|
||||
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\x23\
|
||||
\x01\x78\xa5\x3f\x76\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\
|
||||
\x25\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\
|
||||
\x30\x00\x00\xea\x60\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\
|
||||
\x46\x00\x00\x12\xf7\x49\x44\x41\x54\x78\xda\xbc\x9a\x79\x78\x5d\
|
||||
\x75\x99\xc7\x3f\xbf\xb3\xde\x2d\x37\x49\x93\xb4\x69\x93\x74\x23\
|
||||
\x5d\xd2\x9d\x96\x16\x0a\x94\x82\x0a\xb2\x29\xa8\xa0\x28\xe0\x02\
|
||||
\x8f\x32\xe3\xe8\x30\x8a\x0b\x33\xe3\xf3\x80\x88\x0c\x33\x32\xa2\
|
||||
\xc8\x8c\x3e\x08\x8e\x0f\x08\x82\x6c\xa3\xc8\xbe\x43\x0b\xa4\x14\
|
||||
\xda\xa4\x4d\x4a\x93\xb4\x49\x9b\x7d\xbd\xb9\xb9\xb9\xdb\x59\xe7\
|
||||
\x8f\x7b\xee\xed\xbd\x69\x9a\x05\x75\xde\xe7\x39\xcf\x73\x97\x73\
|
||||
\xce\xef\x7c\x7f\xef\xf6\x7d\xdf\xf7\x88\x3b\x9e\x39\x93\xac\x38\
|
||||
\xae\x8d\x5f\x0d\x73\xfe\xda\x1b\x79\xb6\xf1\x36\x92\xe6\x18\xb2\
|
||||
\xa4\xaa\x40\x0d\x50\x0b\x2c\x06\x96\x00\xf3\x81\x72\x60\x0e\x10\
|
||||
\x02\xfc\x80\x0f\x50\xc8\x13\x17\x57\xd8\xb6\x61\x5d\x71\xda\xdd\
|
||||
\x6e\x2c\x35\x94\x7c\x6a\xcf\x0f\xa2\x9a\x12\x8c\x01\x11\xef\xe8\
|
||||
\x07\xba\x80\x3e\xe0\xa8\xf7\x79\x04\x30\x01\x6c\xc7\xc4\x76\x4d\
|
||||
\xce\x5f\x73\x23\x8b\xca\x36\x31\x9e\x1a\x60\x34\x7e\x14\xc3\x4c\
|
||||
\x20\x84\xc8\x5f\xaa\x70\xe1\xac\xc8\x42\x41\x96\xb5\x6d\x46\x32\
|
||||
\x7e\x99\x2c\xe9\x67\x28\xb2\xbe\x5c\x12\x52\x11\xb3\x14\x81\xc0\
|
||||
\x76\x4d\xc6\x92\x03\xcc\x2f\xa9\x43\x91\x7d\xb8\x38\x08\xa4\xc9\
|
||||
\x4e\x37\x80\xa8\xeb\x3a\x47\x6c\xc7\x3c\x68\xbb\x56\x83\xe3\x98\
|
||||
\x7b\xc1\xdd\x6b\x3b\xe6\xa0\xeb\xba\x53\xae\xa5\x4c\x5c\xd8\x71\
|
||||
\xac\x6a\xd3\x49\xdf\x79\xc9\xc6\xdb\x3e\x35\x30\xd6\x22\x1f\xea\
|
||||
\xdf\x41\xe7\xc8\x5e\x12\xc6\x28\xaa\xec\x43\x96\xd4\xd9\xa1\x71\
|
||||
\x21\x96\xea\xa3\x56\x3f\x13\x5d\x09\x92\xb6\xe2\x4c\xd8\x4c\x1c\
|
||||
\xd7\xc6\xb2\xd3\x9a\x8b\x53\xe1\x53\xc3\x15\x73\x82\x0b\x4f\x29\
|
||||
\x2f\x5a\x7a\x65\x59\x68\x11\x41\xbd\xbc\xaf\xb2\x78\xe5\x6e\x45\
|
||||
\xd6\x9f\x75\x5d\xf7\x61\xd7\xb5\x47\xa6\x07\x22\xa4\x45\xa6\x93\
|
||||
\xfa\xf3\x33\x8d\x3f\x5e\x53\x1e\x5a\xc2\x49\x73\xcf\xe0\xb4\xda\
|
||||
\x2f\x73\x96\x12\xa0\xa5\xef\x35\xf6\x1e\x79\x9c\x68\xb2\x1f\x5d\
|
||||
\x09\x22\x84\x34\x63\x2c\x86\x95\x44\x57\x82\x68\x4a\x80\x94\x19\
|
||||
\x03\x21\x93\x35\x1d\xd3\x4e\x11\xd0\x4a\x58\x5c\xbe\x99\xda\x79\
|
||||
\xdb\xa8\x2e\x5d\x4f\x69\x68\x21\x8a\xa4\x67\x2f\xaf\x04\x2e\x06\
|
||||
\x2e\xd6\xd4\xd0\x75\x89\xf4\xd0\x55\x86\x95\xdc\x27\x26\x18\x53\
|
||||
\xfe\x37\x0d\xb8\x17\xc4\x1a\xcb\x4e\xd1\x15\x69\xe4\xc8\xf0\x6e\
|
||||
\x74\xa5\x88\xc5\x15\x9b\x39\x75\xe9\xd5\xac\xab\xf9\x04\xef\xb4\
|
||||
\xdd\xcf\x9e\x23\x8f\x83\x00\x45\xf2\x65\xb6\x7c\x5a\x13\x03\x21\
|
||||
\x64\x24\x0f\x80\xe3\xda\x18\x56\x82\x62\x7f\x25\xab\xab\x2f\x60\
|
||||
\x4d\xd5\x85\x54\x84\x97\x4d\x7b\x1f\xbf\x56\xb2\x6e\xd9\x82\x73\
|
||||
\x1f\xed\x18\x78\x73\x9b\x65\xa5\x07\xf3\x37\x33\x1f\xc8\xa5\xc0\
|
||||
\xc7\xf0\x16\x55\x65\x19\x55\xf6\xe1\xba\x0e\x2d\x7d\xaf\x73\xa8\
|
||||
\x7f\x27\x6b\xab\x2f\xe2\xec\xba\x6f\xb2\xbc\xf2\x6c\x9e\x6e\xf8\
|
||||
\x21\x63\xc9\x7e\x34\x25\x30\xed\x03\xe8\x6a\x51\x4e\x83\x86\x15\
|
||||
\xc7\xaf\x95\x70\xda\x49\x5f\xe4\x94\xa5\x57\x50\xec\x5f\x70\xdc\
|
||||
\xf9\xa6\x95\x60\x68\xbc\x9d\x48\xbc\x93\xb1\x64\x2f\xe3\xe9\x11\
|
||||
\x1c\xc7\x04\x21\x08\x68\x73\x56\x58\x76\xf2\xfa\xb4\x11\xfd\xc1\
|
||||
\x89\x80\x5c\x3d\xe9\x6e\x0a\x09\x5d\x09\xe2\xba\x0e\xef\x1f\x7d\
|
||||
\x9c\xce\xc8\x5e\x2e\xdb\x7c\x27\x57\x9e\x7e\x0f\x8f\xed\xfa\x16\
|
||||
\x83\xb1\xc3\x68\x4a\xf0\xc4\x9a\x11\x10\xd2\xcb\x71\x5c\x9b\x84\
|
||||
\x11\xa1\x7a\xce\x06\xce\x5d\xf3\x5d\xaa\x4a\xd7\x15\x9c\x96\xb6\
|
||||
\xc6\xe9\x18\xac\xa7\xad\xff\x0d\x7a\x22\x4d\x8c\xa5\xfa\x30\xac\
|
||||
\x04\xae\xeb\xe4\xe9\xd5\xc5\x05\x64\x49\xbd\x5c\x12\xf2\x6d\x40\
|
||||
\x22\xb7\x8c\x17\x7e\x2b\x80\xfd\xc0\xdc\xe9\x8c\x24\xb3\xa3\x61\
|
||||
\x3e\x7f\xda\x2f\x09\xe8\xa5\x3c\xb8\xf3\x3a\x46\x93\xdd\xa8\xb2\
|
||||
\x6f\x12\x3f\x77\x71\x6c\x93\x2b\xb6\xfe\x37\x65\xa1\x45\xec\x6e\
|
||||
\x7f\x98\xad\xb5\xd7\x14\x68\x31\x9e\x1e\xa2\xb1\xf3\x4f\xec\xeb\
|
||||
\x7c\x9a\xe1\xf1\x76\x1c\xd7\x41\x91\x35\x64\xa1\x7a\x21\x56\x9c\
|
||||
\x20\x84\xb8\x67\x01\x3b\xb2\x3f\x64\x75\x73\x92\x97\x17\xa6\x0d\
|
||||
\x41\x9a\x12\x24\x65\x8c\xf1\xd8\xae\x6f\x21\x09\x95\x4f\x9d\x72\
|
||||
\x3b\xaa\xec\xc3\x71\xad\xe3\xcf\x76\x6d\x7c\x5a\x31\x25\xc1\x6a\
|
||||
\x02\x5a\x29\xdb\x57\x7e\x23\x07\xc2\x75\x6d\xde\xef\xf8\x03\xf7\
|
||||
\xef\xf8\x0a\x2f\x37\xff\x9c\x48\xbc\x13\x4d\x09\xe0\x53\x8b\x50\
|
||||
\x24\xdd\x33\x45\x31\x85\xdb\x89\x8d\x9e\xf7\x41\x5e\x40\x5f\x90\
|
||||
\x07\x6a\x5a\x30\xaa\x12\x64\x34\xd9\xcb\x33\x0d\x3f\x64\x5e\xf1\
|
||||
\x4a\xb6\x2d\xff\x1a\x86\x95\x3c\xde\xd6\xed\x34\xa5\xc1\x6a\x8a\
|
||||
\x7c\x15\x08\xcf\xd1\x01\x22\xf1\x4e\x1e\xdd\x75\x3d\xcf\x36\xde\
|
||||
\xc6\x58\xb2\x1f\xbf\x1a\x46\x91\xf5\xa9\x1e\x7c\x32\xa9\xcd\xff\
|
||||
\x92\x7d\xf8\xd0\x6c\x93\x83\xae\x86\x68\xed\x7b\x9d\x0f\x7a\x5e\
|
||||
\x64\xf3\x49\x57\x52\x55\xba\x06\xd3\x4e\xe5\x69\xc3\x41\x12\x12\
|
||||
\x9b\x16\x5f\x5e\x90\x00\x3b\x06\xeb\x79\xe8\xed\xeb\x68\xed\xdf\
|
||||
\x81\x4f\x0d\x79\x00\x3e\x94\x84\x26\x03\xa2\x7f\x98\xac\x2d\x84\
|
||||
\x42\xfd\xa1\xdf\x21\x90\x38\x75\xe9\x17\x71\x72\x8e\x09\x86\x1d\
|
||||
\xe7\xcc\xe5\x5f\x65\x55\xd5\x05\xb9\xdf\x3e\xe8\x79\x91\xc7\x77\
|
||||
\xdf\x40\x2c\x35\x80\x4f\x0d\xcf\x56\x03\xc7\x29\x7c\x32\x20\xee\
|
||||
\x87\xb9\x93\x2a\xfb\xe8\x8d\x36\xd3\x39\xfc\x3e\xcb\xe7\x9f\x43\
|
||||
\x45\xd1\x62\x6c\xc7\x20\x6d\xc5\x59\x5e\x79\x0e\x67\x2c\xff\x6a\
|
||||
\xee\xdc\x43\xfd\x6f\xf2\xd4\xde\x9b\xb0\x1c\x03\x55\x0e\x7c\xd8\
|
||||
\x25\xf3\xa5\x73\x32\x20\xe9\x0f\x73\x27\x21\x04\xb6\x63\xd2\xd2\
|
||||
\xf7\x2a\xb2\xa4\x72\xd2\xdc\x33\x49\x59\xe3\x84\x7d\x73\x39\x77\
|
||||
\xf5\x77\x73\x26\x35\x30\xd6\xc2\x9f\x1b\x6e\xc6\x71\xac\x29\x93\
|
||||
\xa8\x8b\x8b\xe3\xda\xd8\x8e\x81\x65\xa7\x31\xed\x54\xee\xb0\xec\
|
||||
\x34\xb6\x63\xe6\x85\x63\xf6\x14\x64\x76\xcf\xae\xd3\x92\x90\x67\
|
||||
\xcf\xa3\x32\x31\x9d\xae\x48\x23\x00\x8b\xcb\xb7\xf0\x66\xcb\x3d\
|
||||
\x9c\xbe\xec\x5a\x8a\x03\x0b\xbc\x04\x98\xe0\xd9\x86\x5b\x89\xa7\
|
||||
\x23\xe8\x4a\xa8\x00\x84\x8b\x8b\x6d\x1b\xd8\x8e\x89\x10\x02\x45\
|
||||
\xf6\xe1\x53\x42\xe8\x6a\x11\xba\x12\x40\x95\xfd\x48\x92\x82\x65\
|
||||
\xa7\x31\xec\x24\x69\x33\x46\xd2\x1c\xc3\xb4\x53\xdd\x02\xf1\x76\
|
||||
\xbe\x69\x2a\x0b\xcb\x36\x21\x20\x19\x4d\xf6\x11\x4d\xf6\x60\x3b\
|
||||
\x26\x8a\xa4\xcf\x18\x94\x2c\xa9\x44\x93\xbd\x24\xd2\x11\xe6\x84\
|
||||
\x16\xb3\xa2\xf2\x6c\xd6\xd5\x7c\x32\xf7\xff\x5b\xad\xf7\xd2\x39\
|
||||
\xb2\x17\xbf\x56\x9c\x03\x61\x3b\x26\x96\x9d\x46\x55\xfc\xcc\x0d\
|
||||
\xd7\x52\x53\xb6\x89\xf9\x25\x75\x94\x05\x17\x53\xe4\x9f\x8b\x24\
|
||||
\x54\x5c\xd7\xc2\x71\x2d\x32\xac\x57\x20\x49\x2a\x92\x90\x48\x5b\
|
||||
\xe3\x1c\xec\x79\xf9\xa9\xde\xd1\x7d\x23\xb2\xa4\x1d\x03\xf2\xd1\
|
||||
\x55\xff\x04\x60\xe8\x4a\x90\xd1\x44\x0f\x1d\x43\xf5\xb4\xf4\xbf\
|
||||
\xce\x70\xac\x03\x21\x04\xaa\xec\x9f\xc6\xe9\x25\xd2\x66\x8c\xd1\
|
||||
\x44\x27\x73\x8b\x57\xf2\xb1\x55\x37\xe4\x22\x51\x5f\xf4\x00\xbb\
|
||||
\xdb\x1f\x41\x57\x43\x80\xf0\x00\xa4\x28\x0e\xcc\x67\x55\xd5\xc7\
|
||||
\x59\xb5\xe0\x7c\x4a\x83\x55\x24\x8d\x51\x06\xc7\x0e\xd3\xda\xff\
|
||||
\x06\x23\xf1\x23\x8c\xa7\x86\x48\x5b\xe3\x98\x76\x0a\xc7\xb1\x90\
|
||||
\x25\x15\x55\xf6\x27\xfc\x5a\xf1\xc1\x92\x40\xf5\x70\x40\x0d\xdd\
|
||||
\x1d\xd2\xcb\x0a\x82\x85\xf2\x70\xfd\x37\xc0\x75\x8d\x22\x7f\x85\
|
||||
\xbb\xa0\x64\x9d\xa8\x9d\xb7\x8d\xb5\xd5\x17\x33\x18\x6b\xe3\xfd\
|
||||
\x23\x4f\x70\x64\xf8\x5d\x24\xe4\x13\x86\x49\x21\xc0\xb2\x2d\xc6\
|
||||
\x53\xc3\x2c\x28\xd5\x28\x0f\xd7\xe6\x0c\xe7\xad\xd6\x7b\x31\xec\
|
||||
\x44\x26\x89\x5a\x31\xc2\xfa\x5c\xb6\xac\xb8\x8e\xf5\x8b\x3e\x8d\
|
||||
\x65\xa7\x38\xd0\xf3\x12\x2f\x35\xdd\x41\xff\xd8\x41\x52\xc6\x78\
|
||||
\xa6\x56\x11\x12\x92\x90\x11\x48\xd9\xe2\xc9\x00\x7e\xe1\xb8\xce\
|
||||
\x7d\x96\x9d\xea\xb0\x1d\x33\xe9\xd3\xc2\x48\xc8\x85\xec\xd7\xb0\
|
||||
\x12\x00\xc6\x60\xec\xb0\xd3\x37\x7a\x50\x7e\xbf\xe3\x51\xca\x42\
|
||||
\x8b\xa8\xab\xfa\x38\xe7\xae\xbe\x81\x91\xf8\x51\x76\xb4\xdc\x43\
|
||||
\x5f\xf4\x20\xba\x12\x3a\xae\x32\xf3\x92\x06\xb6\x5b\x10\x0d\xe9\
|
||||
\x1a\x69\xa4\xad\x7f\x07\xb2\xa4\x62\xd9\x29\x4e\xae\xf9\x14\xdb\
|
||||
\x57\x7e\x1d\x04\xec\x6c\xf9\x35\xfb\xba\x9e\x26\x9e\x1e\x46\x96\
|
||||
\x54\x64\x49\x43\x57\x83\x93\xed\x53\x1a\xf8\x12\xf0\x88\x84\x8b\
|
||||
\xf0\x4c\x59\x53\x7c\xa8\xaa\x83\x10\xc7\xfc\x4d\xf1\xa8\xb5\x29\
|
||||
\x09\xd9\xcd\xd6\x00\xd1\x64\x2f\x6f\x1c\xfc\x15\x7b\x3a\x1e\x67\
|
||||
\xcb\xd2\x2f\xf0\xd9\x2d\x77\xf1\x5e\xfb\x23\xbc\x73\xf8\x01\x32\
|
||||
\x41\x41\x9b\x36\x7c\x36\x1c\x7d\x92\x84\x31\x4a\x59\x70\x11\xe7\
|
||||
\xad\xbd\x91\x15\xf3\xcf\x66\x77\xfb\x23\xec\x6c\xbd\x8f\xf1\xd4\
|
||||
\x20\xaa\x1c\xf0\x72\xc9\x94\xf2\x33\xe0\x91\x9c\x3f\x2a\x36\x12\
|
||||
\x26\x8e\x23\xd1\xd6\x5c\x8d\x6d\x4b\x08\xef\x39\x94\xbc\x32\xd3\
|
||||
\x3d\xe6\xc0\x1a\x7e\x49\x27\x6d\xc5\x79\xb9\xf9\x67\xb4\x0e\xbc\
|
||||
\xc9\xc5\xeb\x6f\x62\x7e\xe9\x1a\x9e\x6e\xb8\x19\xd3\x4a\xa1\xc8\
|
||||
\x79\x61\x54\x90\xab\x35\x00\x62\xc9\x01\x9a\x7b\x5e\xa0\xaa\x74\
|
||||
\x2d\x9f\x39\xe5\x0e\x02\x7a\x29\x7f\xa8\xbf\x9e\xd6\xbe\xd7\x51\
|
||||
\x95\x00\x3e\xb5\x78\x26\x79\xa4\x17\xf8\xcf\x5c\xce\x52\x4d\x86\
|
||||
\x87\xc2\xec\xab\x5f\x45\x7f\x67\x0d\x23\x83\x61\x1c\x47\xe4\xaa\
|
||||
\xcd\xfc\x3c\xe2\x4c\x8c\xea\xb2\xa4\xe0\xd7\x8a\xe9\x1a\x69\xe0\
|
||||
\xfe\x9d\xd7\x10\xf2\x95\xf1\xb9\x2d\x77\xa3\xab\x21\x2c\x27\x9d\
|
||||
\xcb\xa4\x92\x50\xf0\xe7\xed\xee\x81\xde\xe7\x09\xfb\xe6\x71\xd5\
|
||||
\xe9\xf7\xe2\x02\xbf\x7d\xe3\x8b\xb4\xf6\xbf\x89\x4f\x2b\xf6\xa2\
|
||||
\xe1\x8c\x92\xe1\x53\xc0\x20\x80\xa2\xd8\x0c\xf5\x95\xf3\xf4\xef\
|
||||
\x2e\xa2\xe9\xdd\x75\x8c\x0e\x17\xa1\x6a\x16\xba\xcf\x44\xd3\x33\
|
||||
\x47\x3e\x10\xeb\x84\x85\x91\x12\x22\x65\xc6\x78\xf8\x9d\x6f\xa0\
|
||||
\xc8\x1a\x97\x6d\xfe\x29\x8a\x50\xb1\x5d\x0b\xd7\x75\xd0\xd5\x20\
|
||||
\x61\x2f\x6f\xd8\x8e\xc9\x68\xa2\x9b\xcf\x9d\x7a\x17\x49\x23\xca\
|
||||
\xc3\xef\xfc\x3d\x91\x44\xe7\x4c\xcc\x68\xa2\xbc\x0c\x20\x09\x17\
|
||||
\xc3\x50\x79\xf1\x89\xb3\x88\xc7\x02\xe8\xfe\x34\xb2\x62\x1f\x77\
|
||||
\x72\x3e\x90\xf4\x94\x8c\x57\xf6\x63\xda\x49\x9e\xd8\xfd\x1d\xe6\
|
||||
\x86\x97\x71\xfe\xba\x7f\xc1\xb6\x0d\x2c\xc7\x60\x4e\x70\x11\xc5\
|
||||
\xfe\xf9\x00\x58\x76\x8a\xcd\x4b\xae\x24\xa0\xcf\xe1\x89\xdd\xdf\
|
||||
\xf1\xaa\xc8\xd0\x6c\x29\x49\x0a\xd8\x07\xa0\x6a\x16\xad\xfb\x97\
|
||||
\x10\x19\x0a\xa3\x6a\x56\xb6\x24\x3f\xe9\x44\x40\x52\xd3\xd3\x14\
|
||||
\x17\x55\x0e\x30\x12\xef\xe4\xd9\xc6\x5b\x59\x5d\x7d\x21\x1b\x16\
|
||||
\x5d\x4a\xd2\x18\xa5\x32\xbc\x22\x57\xca\xea\x6a\x11\xa5\xc1\x1a\
|
||||
\x9e\x6f\xbc\x9d\xbe\xe8\xc1\xa9\xab\xc7\x13\x4b\x1f\xd0\x29\x84\
|
||||
\x4b\x32\xa9\xb1\x7f\xf7\x0a\x24\x39\x67\xf9\xff\x0a\xd4\x67\xfa\
|
||||
\x0b\xc7\xc8\x6e\xbe\x46\x92\x33\xa3\xef\x45\x34\x77\xbf\x40\xfb\
|
||||
\xe0\xdb\x9c\x53\x77\x3d\x25\x81\x2a\xe6\x84\x16\x17\x9c\x75\xa8\
|
||||
\x7f\x07\x4d\xdd\xcf\xe0\xd3\x66\xda\x0a\xcb\x94\xb1\x8e\x6b\x65\
|
||||
\x39\x56\x87\x65\xa7\xe3\x42\x8e\x73\xb0\x71\x11\xc3\xfd\xa5\x28\
|
||||
\x19\x73\x0a\x7a\xe1\xb8\x0c\xb8\x16\xf8\xee\x44\x20\x66\x7e\xfd\
|
||||
\x3b\x1d\x7d\xcf\xe4\x82\x7b\xf1\xa9\x61\xce\x58\x76\x2d\x45\xbe\
|
||||
\xb9\x05\x75\x48\xfd\xa1\xfb\x71\x0a\xea\xb6\xc9\x25\xdb\x4d\x49\
|
||||
\x5b\x31\x1c\xc7\x26\xa8\xcd\xa1\x6a\xce\x3a\x96\x94\x6f\xee\xac\
|
||||
\x2a\x5d\xed\x2e\x2c\x5b\x8b\x6c\x2d\xc2\x76\x72\xda\x58\xef\x75\
|
||||
\x3d\xb3\xf2\xed\xec\x77\xc5\xb0\xe2\x78\x8e\x3e\x26\x09\xd9\xe3\
|
||||
\x34\xf2\x34\xf4\xdd\x9f\x69\x17\x0d\xed\xe2\x94\x25\x9f\xc7\xb4\
|
||||
\x8f\xed\x41\xf7\xc8\x5e\x3a\x23\x0d\x68\x53\x50\x1b\xd3\x4e\xe1\
|
||||
\xb8\x16\x45\xbe\x0a\x6a\x2a\xb7\x53\x53\xba\x9e\xb9\xc5\xcb\x71\
|
||||
\x1d\x1b\xdb\xb5\xb0\xed\x54\x87\x84\x4b\x28\x24\xd3\xb2\xab\x07\
|
||||
\xcb\xee\x83\x4c\x26\xdf\x36\xa1\x92\x2d\x05\x2e\x07\x7e\xaa\x6c\
|
||||
\x5c\x74\x19\x42\x08\xdb\x76\xac\x58\x24\xd1\xc5\x60\xec\x10\xf1\
|
||||
\xf4\x30\x02\x09\x55\xf6\x79\x25\xaa\x3b\x69\x2b\x74\x7f\xd7\xd3\
|
||||
\x2c\x2a\xdf\x82\x2c\x15\xe7\xfe\x6b\xed\x7f\x03\xcb\x4e\xa3\xa8\
|
||||
\xda\x71\x00\x2c\x3b\x8d\xe3\x5a\x54\x95\xae\x65\xfd\xc2\x4b\xa9\
|
||||
\x2a\x5d\x4f\xca\x1c\xa3\x7d\xf0\x1d\x76\xb6\xdc\xc7\xf0\x78\x3b\
|
||||
\xf1\xf4\x30\x7e\xb5\xb8\x29\xec\x2f\xc3\x34\x65\x5e\xdd\xb9\x05\
|
||||
\xbf\x4f\xc9\x3e\xc3\xb6\x49\xf6\xe5\x62\xe0\x4e\xa5\x38\x30\x1f\
|
||||
\xd7\x75\xf0\xa9\xc5\x63\x75\x55\xe7\x21\x0b\x95\x58\xb2\x9f\x03\
|
||||
\x7d\x2f\x73\x78\xe0\x2d\x0c\x6b\x1c\x4d\x09\x64\x4c\x2a\x5f\x2b\
|
||||
\x92\x8f\x23\xc3\xef\x91\x32\xa3\x5e\x82\xcb\x98\x55\x77\xa4\x11\
|
||||
\x59\x52\x26\x30\x18\x87\xb4\x15\x67\x6e\x78\x19\xdb\x96\x5f\x47\
|
||||
\x4d\xd9\xc9\x1c\x1e\xd8\xc9\xb3\x8d\xb7\xd2\x33\xba\x1f\xcb\x36\
|
||||
\x90\x25\xc5\xa3\x2b\xaa\x95\xb2\xc6\x5b\x53\xe3\xa3\x18\x69\x95\
|
||||
\x81\xa1\x0d\x48\x19\xc6\x51\x06\x6c\x9a\x04\xc8\x46\xa0\x5a\x79\
|
||||
\xe5\xc0\x2f\xb2\xcb\xf5\x29\x92\x4e\x69\xa0\x9a\xc5\x15\xa7\xb2\
|
||||
\x65\xc9\x95\x6c\x3d\xe9\xcb\xbc\xd7\xf1\x30\x4d\xdd\xcf\x21\x72\
|
||||
\xc4\x31\xa3\x1d\x49\x52\x18\x4b\xf5\xd3\x3b\xda\xc4\x92\x8a\xd3\
|
||||
\x33\xa1\xcf\x1c\x63\x2c\x35\x80\x24\x94\x9c\xee\x6c\xc7\xc0\x75\
|
||||
\x6d\xb6\xd6\x7e\x99\x6d\xcb\xaf\xa3\x2b\xd2\xc0\x23\xf5\xdf\xa4\
|
||||
\x77\xb4\x09\x59\xd2\x50\x64\x7d\x62\xb1\xd5\x2b\x09\xf9\x90\xac\
|
||||
\x08\xc6\x86\x4b\xc1\x55\xb2\xd9\x7b\xbd\xd7\x3e\x9d\x28\xc5\xc0\
|
||||
\x06\x45\x57\x72\x64\xad\x1b\x5c\x22\x89\x2e\x06\x0e\xb7\xb1\xe7\
|
||||
\xc8\x63\xac\xa8\x3c\x87\xad\xcb\xae\x61\x75\xd5\x85\xbc\xb0\xff\
|
||||
\x76\x46\xc6\x3b\x3d\x4a\xee\x35\xbc\x6d\x93\x9e\x48\x73\x01\x10\
|
||||
\xd3\x4a\xe4\x5a\x39\x96\x9d\x42\x95\x7d\x5c\xb0\xfe\x07\xd4\x2d\
|
||||
\x38\x8f\x57\x9b\x7f\x4e\xfd\xe1\x07\x00\x26\x24\xc8\x02\xd3\x6d\
|
||||
\x02\xa2\xaa\x6a\xd2\xd1\x52\x4d\x7c\xdc\x8f\xcf\x9f\x06\xd8\x3a\
|
||||
\x85\xdb\xae\x96\x0a\x6b\x60\x81\x2c\xa9\xf8\xd4\x30\x92\xa4\xd2\
|
||||
\xd4\xfd\x3c\x0f\xec\xbc\x96\xd1\x44\x17\x57\x9d\xfe\x1b\x96\x57\
|
||||
\x6e\x27\x65\x8e\xe5\x16\x16\x42\x62\x30\xd6\x5a\x50\x9b\xe0\x81\
|
||||
\xb0\x9d\x34\xaa\xe2\xe3\xd3\x9b\x7f\x42\xdd\x82\xf3\x78\x7c\xf7\
|
||||
\x0d\xec\x6c\xbd\x17\x45\xd2\xa7\xab\x71\x76\x01\x58\xa6\x42\x62\
|
||||
\xdc\x8f\x24\xe5\x22\xd6\x69\x53\x5c\xb3\x22\x1f\xc8\xbe\x63\x34\
|
||||
\xc5\x45\x20\xd0\xd5\x22\x1c\xc7\xe2\x99\xc6\x5b\xd9\xd9\xfa\x6b\
|
||||
\x2e\xd9\x78\x1b\x1b\x17\x7d\x86\x94\x11\xcb\x9c\x23\x64\xa2\x89\
|
||||
\x5e\x1c\x37\x43\x19\x14\x59\x47\x16\x6a\xa6\x4f\x0b\x7c\xe2\xe4\
|
||||
\x5b\x58\x5c\x7e\x2a\x4f\xbc\xfb\x1d\x0e\x74\xbf\x88\x5f\x2b\x99\
|
||||
\x49\x17\x7f\x87\x24\xb9\x24\x93\x3a\xed\x07\x6b\x50\x54\x0b\x6f\
|
||||
\xa0\xb4\x69\x8a\x6b\x16\xe6\x7b\xe5\x7e\xe0\x0a\xe0\x2e\xaf\x61\
|
||||
\x07\xb8\x48\x92\x82\x5f\x0a\xf3\xee\xe1\x87\x30\xac\x04\x17\x6d\
|
||||
\xb8\x09\x17\x97\x3d\x47\x9e\x40\x95\x7d\xa4\xed\x04\xb6\x6d\x20\
|
||||
\x29\x7e\x6f\x7e\xa2\x61\x58\xe3\x7c\x64\xd5\xb7\x58\x36\xef\x6c\
|
||||
\x5e\x69\xbe\x93\xe6\x9e\x17\xbc\x52\x77\x5a\x39\x0a\xec\x12\xc2\
|
||||
\x25\x11\xf3\xe3\x38\x22\x3f\x7f\xcc\x9f\xe2\xba\x0a\x65\x82\xa1\
|
||||
\x3e\xee\xd9\xe8\x83\x5e\x34\xc8\x19\x8d\x5f\x2b\xa1\xe1\xe8\x1f\
|
||||
\x09\x6a\xa5\x5c\xb8\xfe\x26\x12\xe9\x08\x07\x7a\x5f\xc2\xb4\x92\
|
||||
\x18\x76\x12\x55\xf1\xa3\xc8\x3e\x24\x21\xa8\x9a\xb3\x81\xad\xcb\
|
||||
\xae\xa1\x7d\xf0\x6d\x76\x1d\x7e\x10\x9f\x3a\xe3\x61\xd7\x8b\x40\
|
||||
\x54\xd5\x4c\x3a\x5a\x6a\x88\xc7\x02\x59\xff\x38\x7d\x9a\xeb\x4a\
|
||||
\x25\x5b\x11\xd8\x8a\xc0\x3d\x56\xf9\x7d\x00\x5c\x32\xb1\xdd\x02\
|
||||
\xe0\xd3\xc2\xbc\x7d\xe8\x7e\x9a\xbb\x9f\xe3\x92\x4d\xff\x46\x45\
|
||||
\x51\x2d\x71\x63\xd8\xf3\x9b\x4c\x24\xf3\x6b\xa5\x6c\x5b\xfe\x35\
|
||||
\x04\x82\xd7\x0e\xdc\x0d\x2e\xb3\x19\x0a\xfd\x41\x08\x48\x25\x75\
|
||||
\x8e\xb6\x55\x65\xcd\xea\x44\xf9\x23\x5f\x34\x69\xe5\xde\x11\x56\
|
||||
\x34\x8c\xa0\xa5\x6d\x2c\x35\xb7\x60\x17\xf0\x59\xa0\x63\x62\x22\
|
||||
\x54\x64\x9d\x17\xf7\xff\x84\xa4\x31\xc6\xc5\x1b\x6e\xc6\xb1\x2d\
|
||||
\x62\xc9\x81\x8c\x4a\x1d\x87\x75\x35\x17\xb3\xac\x72\x3b\x4d\xdd\
|
||||
\xcf\xd2\x3b\xda\x84\xaa\xf8\x67\x0a\xe2\x7d\xe0\x35\x59\x76\x88\
|
||||
\x8d\x86\x18\x19\x2c\x46\xce\x10\xc5\xf9\xc0\xe6\xe9\x48\xa0\x54\
|
||||
\x36\x90\xa2\xa2\x37\xc9\xea\xf7\x87\x98\x7f\x34\x8e\x2d\xe7\x34\
|
||||
\xd3\xe6\x11\xb4\x78\x41\x91\x2f\x69\x8c\xa7\x87\x79\xa5\xe9\xa7\
|
||||
\x54\xcf\xd9\xc0\xa6\xc5\x97\x33\x12\xef\xf0\x34\x22\xb1\xae\xe6\
|
||||
\x12\x5c\x37\xe3\x43\x42\x52\x66\xc3\x78\xef\x06\x0c\x21\x1c\xf6\
|
||||
\xef\x5e\x41\x3a\xa5\x65\x6b\xf2\x33\x3d\x67\x9f\x52\x24\x5b\x16\
|
||||
\x58\xaa\x84\x9e\xb4\xa9\x6d\x8e\x50\xd1\x9f\xcc\xd7\xcc\x1b\xc0\
|
||||
\xf5\xc7\x99\x98\x1a\xe4\x83\xbe\x97\xe9\x18\xac\xe7\xcc\x15\x7f\
|
||||
\x87\x2f\x57\x6f\x08\x24\x49\xa1\x2f\xda\x4c\x5f\xf4\x00\xaa\xe4\
|
||||
\x9b\x29\x88\xf7\x80\xdf\x4f\x12\xad\x00\x3e\x3e\x93\x1b\xe4\x9e\
|
||||
\xd8\x91\x04\x8e\x24\xa8\x6a\x8f\xa1\x27\xed\x7c\xcd\xdc\xe7\x45\
|
||||
\xb2\x82\xcb\x5c\xd7\xe5\xad\xb6\xff\xc1\xaf\x15\x53\x5b\xb9\xdd\
|
||||
\x9b\x25\x65\xe4\xc8\xd0\x6e\x2f\x31\xce\xa8\x49\x6d\x03\xdf\x03\
|
||||
\x52\x8a\x6a\xd1\xd5\x3e\x9f\x64\xdc\x97\xd5\x46\x18\x38\x77\x56\
|
||||
\x40\xb2\x60\x82\x63\x16\x75\x7b\x87\xd1\xd2\x4e\x3e\x98\x1b\x81\
|
||||
\xe7\x0b\xb8\x96\xe2\xe7\xe8\xd0\x7b\x1c\x1e\x78\x1b\x4d\x09\x16\
|
||||
\x50\xf6\xee\x48\xe3\x6c\x1c\xfc\x76\xe0\x15\x21\x5c\x6c\x4b\xa2\
|
||||
\xb1\xbe\x0e\xc7\x25\x4b\x4b\x3e\x02\x2c\x9c\x0d\x90\xab\xb2\x09\
|
||||
\xc7\x56\x04\xa1\xa8\x99\x01\x63\x38\x38\x19\x30\x49\x6f\xc6\xb8\
|
||||
\xa7\x60\x26\x8f\x45\x63\xe7\xff\x1e\x57\x7c\xa5\xcc\xd8\x4c\xe7\
|
||||
\x46\x8f\x01\xb7\x64\x1b\x0c\xfb\xdf\x5b\xc1\x40\x77\x39\xaa\x9a\
|
||||
\xab\xc9\xaf\x98\x69\x65\x96\x5d\xed\x0b\x5e\x0c\xbf\x62\x22\x18\
|
||||
\xe5\x18\x98\x41\xe0\x33\x40\x63\x2e\xe6\xc9\x7e\x3a\x86\x76\x11\
|
||||
\x89\x77\x16\xc4\xb6\xb9\xe1\x65\xb8\xae\x35\xdd\xe2\x8f\x02\x5f\
|
||||
\x01\x0c\x55\xb3\x18\x1b\x0d\xb1\xeb\xd5\x93\x91\xe4\x1c\x88\xa5\
|
||||
\xc0\x85\x33\x1d\xe5\x4b\xde\xd6\xcd\xf1\x8a\x94\x07\x3d\x7b\xcd\
|
||||
\x80\x19\x35\x59\x55\x08\xa6\xdd\xbb\xf9\x2b\xd9\x31\x76\x3c\x1d\
|
||||
\xa1\xad\xff\x8d\x82\xbb\x2e\x28\x59\x3d\x55\x75\x98\x06\x7e\x08\
|
||||
\x5c\x09\x8c\x4b\xb2\x43\x3c\x16\xe0\xa5\x27\xb7\x61\x9a\x32\x92\
|
||||
\x94\xf3\xb5\x6b\x81\x99\x66\xd2\x51\xc9\x1b\x82\x2e\xcd\x33\xb5\
|
||||
\x7f\x07\xfe\x39\x1f\xcc\x04\xcd\x74\x03\x9f\xf4\x4c\x22\x2a\x49\
|
||||
\x32\x87\xfa\x77\x14\xdc\xb5\xb2\x64\x15\x3e\xad\xa8\x60\x82\xe5\
|
||||
\x35\x38\x9e\x04\xb6\x03\x37\x67\x27\x4e\x3e\x9f\xc1\xde\xb7\x56\
|
||||
\xd3\xd5\x5e\x99\xad\xcb\xb3\x33\xcd\x6b\x67\x11\xba\x07\x25\x60\
|
||||
\xb9\x57\xb4\xe4\xcb\x6d\xc0\x3f\x64\xc1\x84\x47\x4d\xea\x1a\x32\
|
||||
\x60\xbc\x00\x10\x07\x6e\x02\x4e\x53\x24\xfd\x96\xfe\xb1\x83\xef\
|
||||
\x0e\x8f\x77\x44\x1d\xd7\x76\x1c\xc7\x22\xec\xaf\xa4\x34\xb8\x30\
|
||||
\xe1\x38\x66\x9f\x17\xc2\x7f\x04\x9c\x05\x7c\xda\xeb\x80\x20\x49\
|
||||
\x0e\x81\x60\x8a\x86\xfa\x3a\xf6\xbf\xb7\x0c\x5f\x20\x95\xbf\xfe\
|
||||
\xf7\x80\x79\xb3\x99\x5e\x29\xc0\xaa\x13\x78\xe6\x9d\xde\x2b\x47\
|
||||
\xbf\xb7\x14\x41\x38\x62\xb0\xb2\x71\x84\xb6\xba\x12\x52\x41\x05\
|
||||
\xc9\x76\x01\x3e\x10\x42\xba\x29\x6d\x27\x6f\xe9\x1b\x6d\xaa\xd5\
|
||||
\x15\xff\x3c\xd3\x4a\x15\xdb\x8e\x95\xd2\x95\xe0\x90\x8b\xdb\xe3\
|
||||
\xbd\xca\x74\x2c\xba\x48\x0e\xba\xdf\x60\x2c\x52\xc4\x9b\xcf\x6d\
|
||||
\xa1\x65\xdf\xd2\x5c\x57\xdf\x93\x33\x80\xeb\x66\xd9\x3e\x3a\xa4\
|
||||
\x00\x6b\x4f\xd4\x63\xf0\x7a\x47\xe3\xc0\x53\x96\x22\x51\x34\x6a\
|
||||
\xb0\xe1\x9d\x01\x0e\xd7\x95\xd0\x53\x13\x42\xb6\x9d\x4c\x1e\x74\
|
||||
\x84\x2d\x10\x07\x81\x83\xc7\x66\x51\x6e\xde\xe8\xc1\x45\x51\x6d\
|
||||
\x14\xd5\x22\x3a\x52\xc4\x3b\xaf\x6c\xa4\xaf\xb3\x82\x9e\xa3\xf3\
|
||||
\xd0\x7d\x46\xbe\x5f\x94\x01\xbf\xf4\xde\xfd\x9a\x8d\x34\x2b\xc0\
|
||||
\x54\x6f\xb3\x04\x80\xdf\x79\xa1\xf7\x4f\x8e\x24\x10\x2e\x2c\xf9\
|
||||
\x20\x4a\x78\x24\x4d\xb4\x4c\x27\x5a\xac\x62\xaa\x02\x34\x1d\x21\
|
||||
\x1d\xdf\x7d\xd1\x74\x13\xd3\x50\x38\xb0\xb7\x96\x81\x9e\x32\x86\
|
||||
\xfb\x4b\xe9\x6a\x9f\x8f\xaa\x99\x59\x66\x9b\x23\x0c\x5e\xf2\x5d\
|
||||
\x3b\x4b\x10\x29\xa0\x49\x01\xaa\xa7\x39\x31\x0c\x3c\x04\xfc\x23\
|
||||
\xf0\x1b\xd7\x33\x81\x79\x3d\x09\xca\xfb\x92\xb8\x02\x62\x01\x17\
|
||||
\x3b\xbc\x07\x7b\xf3\x2a\x64\x5f\x08\x27\x15\x45\x51\x1c\xfc\x81\
|
||||
\x14\x6d\x4d\xab\xd9\xf3\xf6\x6a\x06\xba\xcb\x71\x1c\x81\xa2\xd8\
|
||||
\xf8\x0b\xfd\x01\xcf\x1f\x7e\xe5\xb1\xee\xd9\x4a\x1b\x70\x58\x99\
|
||||
\x09\x21\xf3\x3a\x7c\xf7\x01\x6b\xbc\x88\x33\x66\x29\xc7\xdc\xaa\
|
||||
\x78\xdc\x25\xf2\xe4\x5d\x24\x76\xbf\x48\xe5\xb6\x2f\x51\xbc\x72\
|
||||
\x13\xa3\x91\x20\xaf\x3d\xbf\x95\xd6\x86\xb5\x58\xa6\x8c\xaa\x99\
|
||||
\x27\x6a\x31\x7e\xc2\x0b\x2e\xab\x3f\xe4\x98\x7a\x07\x90\x16\xaf\
|
||||
\x7f\xbf\x76\xc0\x7b\xa9\x66\xa6\xb2\xd7\x0b\xd1\x7f\x9c\xd8\x66\
|
||||
\x75\xcc\x14\xba\x64\xd0\x14\xba\x8c\x5f\xec\xde\x48\x72\x34\x8d\
|
||||
\xa6\xdb\x05\x93\x25\xaf\xeb\xb1\xd0\x2b\x96\x2e\x07\x3e\xfa\x17\
|
||||
\xce\xdb\x2f\x05\xfe\xa8\x4c\x35\x4e\x38\x81\x6c\x00\x7e\xef\x01\
|
||||
\xfa\xb3\xb7\x23\x87\x80\x36\x49\xf5\xa1\x2b\x0e\xad\x2d\x83\x44\
|
||||
\xa3\x36\x45\xbe\xdc\xad\x2b\x3d\x3f\x3b\x1b\xa8\xf3\xcc\x59\xe5\
|
||||
\x2f\x97\x0e\xe0\xb5\xec\xc4\xea\xc8\x34\xf5\xf0\x54\x80\x36\x78\
|
||||
\x9f\xff\x03\xf8\xbe\xc0\x25\x6e\xfb\x39\x94\x5c\x8c\x7e\x8c\x2f\
|
||||
\x95\x01\xcf\x79\x75\xf7\x5f\x5b\x1e\x02\xa2\xd9\x4c\xfe\xdb\xbf\
|
||||
\xf0\x66\x0f\x7b\x36\x8e\x2c\x1c\x22\x46\x11\x6d\xe3\x0b\x50\x84\
|
||||
\x95\xef\xc8\x7f\x0b\x10\x11\xe0\x9e\x7c\xf6\x7b\xaf\xb7\xa3\x1f\
|
||||
\xe6\x5d\x90\x6f\x7b\x9c\x29\x9a\x21\x91\x26\xf5\xc3\x75\x8c\x9b\
|
||||
\x7e\xa4\x63\x7e\x71\x08\x78\xfd\x6f\x00\xe4\x0e\xcf\x9a\x72\x40\
|
||||
\x6c\xe0\xfb\xc0\x45\x9e\x09\xc4\xa7\xb8\x38\xe6\x51\x8e\x1b\x80\
|
||||
\x53\xbd\xec\x5f\x40\xa8\x2c\x57\xf6\x06\xc9\x05\x24\xf1\xab\x40\
|
||||
\xf3\x5f\x11\xc4\x6b\xde\xda\xc7\x4a\xf0\xbc\xcf\xcf\x78\xc7\x4a\
|
||||
\xcf\x14\x16\x7a\x39\xc4\xf6\x28\x7c\xa7\xd7\xfb\x6a\x9f\x6a\x04\
|
||||
\x25\x26\xff\xab\x15\x38\xcf\x9b\x36\x5d\xcd\xac\xdf\x0f\x3b\xae\
|
||||
\x2c\xbe\x7a\x62\xc4\x9c\xac\x3b\xf0\x81\x77\xfc\xb5\xa5\x1b\xf8\
|
||||
\x3a\xf0\x5f\xc0\x65\xc0\x05\xc0\x3a\x32\xaf\xa3\xcf\x44\xc6\x81\
|
||||
\x07\x3c\xb2\x3a\x38\xf1\x4f\x85\xff\x7f\x69\xf2\x8e\x1f\x7b\xf4\
|
||||
\x68\xbd\x47\x5c\x17\x93\x79\x39\xb4\xc8\x1b\x78\x1a\x9e\x43\x77\
|
||||
\x7b\xa1\xfe\x35\xe0\xc0\x89\x6e\xfa\x7f\x03\x00\x16\xc1\xec\x18\
|
||||
\x22\x48\x5b\x85\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
|
||||
\
|
||||
\x00\x00\x03\x8e\
|
||||
\x89\
|
||||
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
|
||||
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
|
||||
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
|
||||
\x01\x42\x28\x9b\x78\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\
|
||||
\x25\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\
|
||||
\x30\x00\x00\xea\x60\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\
|
||||
\x46\x00\x00\x03\x14\x49\x44\x41\x54\x78\xda\xb4\x95\x4d\x68\x94\
|
||||
\x57\x14\x86\x9f\x7b\xbf\xef\x1b\x4d\x93\x89\x13\xa6\x64\x66\x12\
|
||||
\x23\xc9\xd4\x62\x54\x34\x25\x85\xfe\x8c\x94\x42\xbb\x28\x52\xa1\
|
||||
\x16\xa4\x52\x4a\x88\x68\xb4\xab\x52\x25\x43\x71\x5b\x37\x86\x36\
|
||||
\xa5\x5d\x95\x82\xd4\x36\xd5\x95\xab\x16\xba\x10\xb4\x52\x08\x95\
|
||||
\x0a\x4a\xb1\x41\xac\x1a\x13\x1d\xcc\x64\x34\xf3\xf3\x25\x33\x75\
|
||||
\x66\xbe\x9f\x7b\xbb\x08\x26\xd4\x9f\x34\x33\x8d\xef\xea\xc0\xe5\
|
||||
\x9e\x73\xcf\xfb\xbe\xe7\x5c\xa1\xb5\xe6\x69\x42\xf2\x94\x61\x3e\
|
||||
\x08\xde\xd8\x33\x98\x71\x5d\x2f\xb2\x12\x49\x2d\xcb\xbc\x7b\xee\
|
||||
\xfb\x2f\xa2\xff\x2a\xe0\xba\x5e\x64\x78\x78\x78\x45\x5e\x9d\x4c\
|
||||
\x26\x23\x8f\x74\x00\x30\x31\x39\xc1\xf1\xe3\xdf\x51\x29\x97\xe7\
|
||||
\x0f\x4d\x8b\x03\x1f\xee\x27\xde\x15\x67\x64\x64\x84\xb1\xb1\xb1\
|
||||
\x25\x13\x6f\xdc\xb4\x89\x7d\x7b\xf7\x2e\xad\x81\xe7\x7a\x8b\xad\
|
||||
\x9a\x8b\xf5\x3d\xdf\xff\x6f\xbe\x0d\xe3\xc9\x1a\x00\xc4\xbb\xe2\
|
||||
\x0c\x0d\x1d\x7d\xec\xe5\x87\x5f\x56\xb3\xc8\x96\x65\xaa\x64\x32\
|
||||
\x29\x57\x48\x64\xf5\x48\x01\xd7\xf5\xe4\xa9\xe1\xc3\x2b\x22\xf2\
|
||||
\x7b\xc9\x21\xf9\x58\x8a\x00\x0e\x7d\x76\x8c\xa9\x7b\x39\x00\xda\
|
||||
\x5b\xc3\x7c\xf9\xc9\x7e\x00\xce\x5f\xfe\x8b\xaf\x4e\xfc\xb8\x64\
|
||||
\xe2\x83\x7d\x3b\x49\xf4\x74\x3f\x59\x03\x60\x21\xe1\xc3\x48\xf4\
|
||||
\x74\x93\xe8\x39\x5c\xbf\x06\xf5\xc0\x55\x2e\xb7\xca\xb7\xa8\xde\
|
||||
\xaf\x12\x14\x41\xa2\xa1\x28\xab\xcc\x55\x00\x1c\xf9\xf4\xc8\xff\
|
||||
\xa3\xc8\x0a\x55\x88\x6d\xd5\x3c\xd7\x1c\x45\x36\x48\x3c\xe5\x51\
|
||||
\x29\xba\xbc\xb3\x79\xc7\xbc\xad\xc5\xbc\xdd\xc5\x83\x65\xf7\xda\
|
||||
\x07\x1f\xeb\xe5\x8a\x9c\x9d\xcb\x72\xe6\xea\x19\x3a\xd7\x75\x32\
|
||||
\x39\x3b\x49\xa1\x50\xc0\xf7\x7d\x1a\x1a\x1a\x28\xce\x16\xb9\xf8\
|
||||
\x4b\x99\x58\x77\x5e\xd4\x4d\xd1\x95\xd4\x15\xda\xd7\xad\xe5\x66\
|
||||
\x7e\x9c\x72\xbe\xc2\xf6\x8d\xdb\x69\x0a\x34\x31\x7a\x6d\x94\x92\
|
||||
\x2a\x61\xae\xf6\x50\x52\xd5\x4e\xd1\xb1\x9f\x4f\x81\x54\x74\xad\
|
||||
\x6f\x26\x91\xd8\x4a\xc1\xb6\xb9\x7c\x69\x9a\xf3\xa3\x27\xa8\xcc\
|
||||
\x05\xf8\xe8\xfd\x77\x89\x75\xc4\xb8\x70\xf6\x57\xa4\x90\xb5\xbb\
|
||||
\x68\xa2\x14\xc7\x6a\xb2\x08\x36\x07\xc9\x96\xb2\xac\x09\xad\xa1\
|
||||
\xf7\x65\x83\x62\xbe\xc8\xc0\xeb\x03\xdc\xc8\xdc\xe0\x6a\xf6\x3a\
|
||||
\x2d\x6d\x15\x84\x16\x42\x48\xa1\x6b\x9a\xdc\xdd\xaf\xec\x46\x57\
|
||||
\x35\x33\xc5\x19\x84\x14\x98\x86\x89\x72\x14\xfd\xdb\xfa\x19\xbf\
|
||||
\x3b\x4e\x5e\x17\x88\x75\x44\xd9\xf2\x52\x14\x69\xc8\xcf\xb5\xd6\
|
||||
\xb2\x66\x17\x09\xa9\x89\xac\x2f\xb3\xe5\xc5\x0e\xd2\x77\x66\xb8\
|
||||
\x7e\xd1\xe7\x8f\x0b\xdf\xb0\xe3\xed\x17\x08\x04\x03\x64\xe7\x72\
|
||||
\x84\xc3\x61\x94\x52\x83\xa9\xdb\xa9\x67\xea\x72\x91\xe3\x39\x9c\
|
||||
\xfe\xf3\x34\xbd\x9d\xbd\xb4\xb5\xb4\x71\xf2\xb7\x93\x18\x86\x41\
|
||||
\xce\xcd\x11\x89\x45\x98\xba\x93\xc1\xb6\x73\x67\xab\x4e\x55\xd6\
|
||||
\xb5\xdc\x1c\xcf\xc1\xd7\x3e\xa9\x5c\x0a\x21\x04\x7d\xdb\xfa\xd8\
|
||||
\x10\xd9\x80\x16\x1a\x29\x25\x99\xe9\x3c\xf9\xbf\xf3\x3b\x3d\xe5\
|
||||
\xbd\xb5\xd0\xc1\x9b\x7b\x06\x33\xce\x32\xbf\x4c\xc3\x54\x74\xbf\
|
||||
\xaa\x78\xb6\xb5\x85\xc9\x6b\x59\x94\xaf\x59\x1b\x0f\xd1\xd6\x1e\
|
||||
\xa5\x54\x2c\x71\xe9\xf7\xdb\xf7\xbd\x48\xa6\x31\xe4\x85\x16\x07\
|
||||
\x6d\x39\xe8\x3f\xda\xbf\x10\xab\x80\xda\xd7\x1a\x6d\xfd\x3a\x1c\
|
||||
\x0e\x07\x02\x81\x00\x00\xb6\x6d\x93\x9e\x4a\x9f\x13\x86\xd8\x65\
|
||||
\x5a\x66\xc1\xa9\x3a\xf5\xef\x22\x21\xc4\xb7\xe9\xe9\xf4\x4d\xbb\
|
||||
\x60\x0f\x98\x96\xf9\xbc\x52\xaa\x58\x29\x57\x7e\xf2\x3c\xef\x87\
|
||||
\xc6\x60\xe3\xac\x40\x00\xf0\xcf\x00\xe0\xe8\x5f\x8e\x9d\x28\xd2\
|
||||
\xfe\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
|
||||
"
|
||||
|
||||
qt_resource_name = b"\
|
||||
\x00\x07\
|
||||
\x07\x3b\xe0\xb3\
|
||||
\x00\x70\
|
||||
\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\
|
||||
\x00\x05\
|
||||
\x00\x4a\x66\xf5\
|
||||
\x00\x43\
|
||||
\x00\x6f\x00\x70\x00\x69\x00\x65\
|
||||
\x00\x09\
|
||||
\x05\x84\x84\xc7\
|
||||
\x00\x63\
|
||||
\x00\x65\x00\x6e\x00\x72\x00\x61\x00\x2e\x00\x70\x00\x6e\x00\x67\
|
||||
\x00\x0f\
|
||||
\x04\xa3\x0a\x67\
|
||||
\x00\x74\
|
||||
\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x5f\x00\x63\x00\x6f\x00\x70\x00\x69\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
|
||||
"
|
||||
|
||||
qt_resource_struct_v1 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x02\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x13\x75\
|
||||
\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
"
|
||||
|
||||
qt_resource_struct_v2 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x02\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x13\x75\
|
||||
\x00\x00\x01\x8d\xac\xb3\xc8\x10\
|
||||
\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x01\x8d\xac\xb4\x4d\x47\
|
||||
"
|
||||
|
||||
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
|
||||
if qt_version < [5, 8, 0]:
|
||||
rcc_version = 1
|
||||
qt_resource_struct = qt_resource_struct_v1
|
||||
else:
|
||||
rcc_version = 2
|
||||
qt_resource_struct = qt_resource_struct_v2
|
||||
|
||||
def qInitResources():
|
||||
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
def qCleanupResources():
|
||||
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
qInitResources()
|
||||
@ -1,102 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Resource object code
|
||||
#
|
||||
# Created: mar. 14. avr. 11:48:28 2015
|
||||
# by: The Resource Compiler for PyQt (Qt v4.8.5)
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt4 import QtCore
|
||||
|
||||
qt_resource_data = "\
|
||||
\x00\x00\x03\x8e\
|
||||
\x89\
|
||||
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
|
||||
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
|
||||
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
|
||||
\x01\x42\x28\x9b\x78\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\
|
||||
\x25\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\
|
||||
\x30\x00\x00\xea\x60\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\
|
||||
\x46\x00\x00\x03\x14\x49\x44\x41\x54\x78\xda\xb4\x95\x4d\x68\x94\
|
||||
\x57\x14\x86\x9f\x7b\xbf\xef\x1b\x4d\x93\x89\x13\xa6\x64\x66\x12\
|
||||
\x23\xc9\xd4\x62\x54\x34\x25\x85\xfe\x8c\x94\x42\xbb\x28\x52\xa1\
|
||||
\x16\xa4\x52\x4a\x88\x68\xb4\xab\x52\x25\x43\x71\x5b\x37\x86\x36\
|
||||
\xa5\x5d\x95\x82\xd4\x36\xd5\x95\xab\x16\xba\x10\xb4\x52\x08\x95\
|
||||
\x0a\x4a\xb1\x41\xac\x1a\x13\x1d\xcc\x64\x34\xf3\xf3\x25\x33\x75\
|
||||
\x66\xbe\x9f\x7b\xbb\x08\x26\xd4\x9f\x34\x33\x8d\xef\xea\xc0\xe5\
|
||||
\x9e\x73\xcf\xfb\xbe\xe7\x5c\xa1\xb5\xe6\x69\x42\xf2\x94\x61\x3e\
|
||||
\x08\xde\xd8\x33\x98\x71\x5d\x2f\xb2\x12\x49\x2d\xcb\xbc\x7b\xee\
|
||||
\xfb\x2f\xa2\xff\x2a\xe0\xba\x5e\x64\x78\x78\x78\x45\x5e\x9d\x4c\
|
||||
\x26\x23\x8f\x74\x00\x30\x31\x39\xc1\xf1\xe3\xdf\x51\x29\x97\xe7\
|
||||
\x0f\x4d\x8b\x03\x1f\xee\x27\xde\x15\x67\x64\x64\x84\xb1\xb1\xb1\
|
||||
\x25\x13\x6f\xdc\xb4\x89\x7d\x7b\xf7\x2e\xad\x81\xe7\x7a\x8b\xad\
|
||||
\x9a\x8b\xf5\x3d\xdf\xff\x6f\xbe\x0d\xe3\xc9\x1a\x00\xc4\xbb\xe2\
|
||||
\x0c\x0d\x1d\x7d\xec\xe5\x87\x5f\x56\xb3\xc8\x96\x65\xaa\x64\x32\
|
||||
\x29\x57\x48\x64\xf5\x48\x01\xd7\xf5\xe4\xa9\xe1\xc3\x2b\x22\xf2\
|
||||
\x7b\xc9\x21\xf9\x58\x8a\x00\x0e\x7d\x76\x8c\xa9\x7b\x39\x00\xda\
|
||||
\x5b\xc3\x7c\xf9\xc9\x7e\x00\xce\x5f\xfe\x8b\xaf\x4e\xfc\xb8\x64\
|
||||
\xe2\x83\x7d\x3b\x49\xf4\x74\x3f\x59\x03\x60\x21\xe1\xc3\x48\xf4\
|
||||
\x74\x93\xe8\x39\x5c\xbf\x06\xf5\xc0\x55\x2e\xb7\xca\xb7\xa8\xde\
|
||||
\xaf\x12\x14\x41\xa2\xa1\x28\xab\xcc\x55\x00\x1c\xf9\xf4\xc8\xff\
|
||||
\xa3\xc8\x0a\x55\x88\x6d\xd5\x3c\xd7\x1c\x45\x36\x48\x3c\xe5\x51\
|
||||
\x29\xba\xbc\xb3\x79\xc7\xbc\xad\xc5\xbc\xdd\xc5\x83\x65\xf7\xda\
|
||||
\x07\x1f\xeb\xe5\x8a\x9c\x9d\xcb\x72\xe6\xea\x19\x3a\xd7\x75\x32\
|
||||
\x39\x3b\x49\xa1\x50\xc0\xf7\x7d\x1a\x1a\x1a\x28\xce\x16\xb9\xf8\
|
||||
\x4b\x99\x58\x77\x5e\xd4\x4d\xd1\x95\xd4\x15\xda\xd7\xad\xe5\x66\
|
||||
\x7e\x9c\x72\xbe\xc2\xf6\x8d\xdb\x69\x0a\x34\x31\x7a\x6d\x94\x92\
|
||||
\x2a\x61\xae\xf6\x50\x52\xd5\x4e\xd1\xb1\x9f\x4f\x81\x54\x74\xad\
|
||||
\x6f\x26\x91\xd8\x4a\xc1\xb6\xb9\x7c\x69\x9a\xf3\xa3\x27\xa8\xcc\
|
||||
\x05\xf8\xe8\xfd\x77\x89\x75\xc4\xb8\x70\xf6\x57\xa4\x90\xb5\xbb\
|
||||
\x68\xa2\x14\xc7\x6a\xb2\x08\x36\x07\xc9\x96\xb2\xac\x09\xad\xa1\
|
||||
\xf7\x65\x83\x62\xbe\xc8\xc0\xeb\x03\xdc\xc8\xdc\xe0\x6a\xf6\x3a\
|
||||
\x2d\x6d\x15\x84\x16\x42\x48\xa1\x6b\x9a\xdc\xdd\xaf\xec\x46\x57\
|
||||
\x35\x33\xc5\x19\x84\x14\x98\x86\x89\x72\x14\xfd\xdb\xfa\x19\xbf\
|
||||
\x3b\x4e\x5e\x17\x88\x75\x44\xd9\xf2\x52\x14\x69\xc8\xcf\xb5\xd6\
|
||||
\xb2\x66\x17\x09\xa9\x89\xac\x2f\xb3\xe5\xc5\x0e\xd2\x77\x66\xb8\
|
||||
\x7e\xd1\xe7\x8f\x0b\xdf\xb0\xe3\xed\x17\x08\x04\x03\x64\xe7\x72\
|
||||
\x84\xc3\x61\x94\x52\x83\xa9\xdb\xa9\x67\xea\x72\x91\xe3\x39\x9c\
|
||||
\xfe\xf3\x34\xbd\x9d\xbd\xb4\xb5\xb4\x71\xf2\xb7\x93\x18\x86\x41\
|
||||
\xce\xcd\x11\x89\x45\x98\xba\x93\xc1\xb6\x73\x67\xab\x4e\x55\xd6\
|
||||
\xb5\xdc\x1c\xcf\xc1\xd7\x3e\xa9\x5c\x0a\x21\x04\x7d\xdb\xfa\xd8\
|
||||
\x10\xd9\x80\x16\x1a\x29\x25\x99\xe9\x3c\xf9\xbf\xf3\x3b\x3d\xe5\
|
||||
\xbd\xb5\xd0\xc1\x9b\x7b\x06\x33\xce\x32\xbf\x4c\xc3\x54\x74\xbf\
|
||||
\xaa\x78\xb6\xb5\x85\xc9\x6b\x59\x94\xaf\x59\x1b\x0f\xd1\xd6\x1e\
|
||||
\xa5\x54\x2c\x71\xe9\xf7\xdb\xf7\xbd\x48\xa6\x31\xe4\x85\x16\x07\
|
||||
\x6d\x39\xe8\x3f\xda\xbf\x10\xab\x80\xda\xd7\x1a\x6d\xfd\x3a\x1c\
|
||||
\x0e\x07\x02\x81\x00\x00\xb6\x6d\x93\x9e\x4a\x9f\x13\x86\xd8\x65\
|
||||
\x5a\x66\xc1\xa9\x3a\xf5\xef\x22\x21\xc4\xb7\xe9\xe9\xf4\x4d\xbb\
|
||||
\x60\x0f\x98\x96\xf9\xbc\x52\xaa\x58\x29\x57\x7e\xf2\x3c\xef\x87\
|
||||
\xc6\x60\xe3\xac\x40\x00\xf0\xcf\x00\xe0\xe8\x5f\x8e\x9d\x28\xd2\
|
||||
\xfe\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
|
||||
"
|
||||
|
||||
qt_resource_name = "\
|
||||
\x00\x07\
|
||||
\x07\x3b\xe0\xb3\
|
||||
\x00\x70\
|
||||
\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\
|
||||
\x00\x05\
|
||||
\x00\x4a\x66\xf5\
|
||||
\x00\x43\
|
||||
\x00\x6f\x00\x70\x00\x69\x00\x65\
|
||||
\x00\x0f\
|
||||
\x04\xa3\x0a\x67\
|
||||
\x00\x74\
|
||||
\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x5f\x00\x63\x00\x6f\x00\x70\x00\x69\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
|
||||
"
|
||||
|
||||
qt_resource_struct = "\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
"
|
||||
|
||||
def qInitResources():
|
||||
QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
def qCleanupResources():
|
||||
QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
qInitResources()
|
||||
@ -1,6 +0,0 @@
|
||||
<RCC>
|
||||
<qresource prefix="/plugins/Copie" >
|
||||
<file>table_copie.png</file>
|
||||
<file>cenra.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
|
||||
print ${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
|
||||
|
Before Width: | Height: | Size: 910 B After Width: | Height: | Size: 910 B |
@ -89,7 +89,7 @@ def resources_path(*args):
|
||||
:return: Absolute path to the resources folder.
|
||||
:rtype: str
|
||||
"""
|
||||
path = abspath(abspath(join(plugin_path(), "CenRa_Metabase\\resources")))
|
||||
path = abspath(abspath(join(plugin_path(), "CenRa_Copie\\tools")))
|
||||
for item in args:
|
||||
path = abspath(join(path, item))
|
||||
return path
|
||||
|
||||
332
CenRa_COPIE/tools/ui/CenRa_IssuesSend.ui
Normal file
332
CenRa_COPIE/tools/ui/CenRa_IssuesSend.ui
Normal file
@ -0,0 +1,332 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CenRa_IssuesSend</class>
|
||||
<widget class="QDialog" name="CenRa_IssuesSend">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>810</width>
|
||||
<height>587</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CEN-RA Metabase</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset>
|
||||
<normaloff>icon.svg</normaloff>icon.svg</iconset>
|
||||
</property>
|
||||
<widget class="QWidget" name="gridLayoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>550</y>
|
||||
<width>811</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="annuler_button">
|
||||
<property name="text">
|
||||
<string>Annuler</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="ok_button">
|
||||
<property name="text">
|
||||
<string>Envoyer</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>791</width>
|
||||
<height>531</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Issues</string>
|
||||
</property>
|
||||
<widget class="QLineEdit" name="titre_line">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>40</y>
|
||||
<width>321</width>
|
||||
<height>41</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPlainTextEdit" name="messages_plain">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>101</y>
|
||||
<width>571</width>
|
||||
<height>421</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>589</x>
|
||||
<y>100</y>
|
||||
<width>191</width>
|
||||
<height>431</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<widget class="QWidget" name="formLayoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>9</x>
|
||||
<y>9</y>
|
||||
<width>341</width>
|
||||
<height>411</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="check_bug">
|
||||
<property name="text">
|
||||
<string>Bug</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="check_aide">
|
||||
<property name="text">
|
||||
<string>Aide</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<spacer name="horizontalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="check_question">
|
||||
<property name="text">
|
||||
<string>Question</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<spacer name="horizontalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QCheckBox" name="check_amelioration">
|
||||
<property name="text">
|
||||
<string>Amélioration</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="check_autre">
|
||||
<property name="text">
|
||||
<string>Autre</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>250</x>
|
||||
<y>20</y>
|
||||
<width>51</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Arial</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Titre:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>70</y>
|
||||
<width>91</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Arial</family>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Messages:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>600</x>
|
||||
<y>70</y>
|
||||
<width>91</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Arial</family>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Sujet:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>ok_button</tabstop>
|
||||
<tabstop>annuler_button</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>COPIE</string>
|
||||
<string>Metabase</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset>
|
||||
@ -1,4 +1,4 @@
|
||||
#Plugin_POSTGIS
|
||||
# Plugin_POSTGIS
|
||||
---
|
||||
## Objectif !
|
||||
Vise faciliter la création de schéma et table dans PostgreSQL,
|
||||
|
||||
@ -1 +1,4 @@
|
||||
Plugin QGIS
|
||||
# Plugin QGIS
|
||||
---
|
||||
Point de départ de tout les plugin du CEN Rhône Alpes,
|
||||
Pour la création et le partage <3
|
||||
25
plugins.xml
25
plugins.xml
@ -1,8 +1,8 @@
|
||||
<?xml version = '1.0' encoding = 'UTF-8'?>
|
||||
<plugins>
|
||||
<pyqgis_plugin name="CenRa_POSTGIS" version="1.8">
|
||||
<pyqgis_plugin name="CenRa_POSTGIS" version="2.0">
|
||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
||||
<version>1.8</version>
|
||||
<version>2.0</version>
|
||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||
<file_name>CenRa_POSTGIS.zip</file_name>
|
||||
@ -11,7 +11,7 @@
|
||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_POSTGIS.zip</download_url>
|
||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||
<create_date>2024-02-06</create_date>
|
||||
<update_date>2024-09-13</update_date>
|
||||
<update_date>2024-10-22</update_date>
|
||||
<experimental>False</experimental>
|
||||
<deprecated>False</deprecated>
|
||||
<tags>cenra,postgis</tags>
|
||||
@ -97,7 +97,7 @@
|
||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||
<create_date>2024-09-25</create_date>
|
||||
<update_date>2024-10-21</update_date>
|
||||
<experimental>False</experimental>
|
||||
<experimental>True</experimental>
|
||||
<deprecated>False</deprecated>
|
||||
<tags>cenra,mise en page,atlas</tags>
|
||||
</pyqgis_plugin>
|
||||
@ -117,5 +117,22 @@
|
||||
<experimental>True</experimental>
|
||||
<deprecated>False</deprecated>
|
||||
<tags>cenra,mise en page,atlas</tags>
|
||||
|
||||
</pyqgis_plugin>
|
||||
<pyqgis_plugin name="CenRa_COMPANIONCUBE" version="1.0">
|
||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
||||
<version>1.0</version>
|
||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||
<file_name>CenRa_COMPANIONCUBE.zip</file_name>
|
||||
<icon>CEN-Rhone-Alpes.png</icon>
|
||||
<author_name>CEN-Rhone-Alpes</author_name>
|
||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_COMPANIONCUBE.zip</download_url>
|
||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||
<create_date>2024-10-21</create_date>
|
||||
<update_date>2024-10-22</update_date>
|
||||
<experimental>True</experimental>
|
||||
<deprecated>False</deprecated>
|
||||
<tags>cenra,ia</tags>
|
||||
</pyqgis_plugin>
|
||||
</plugins>
|
||||
Loading…
x
Reference in New Issue
Block a user