Skip to content

Commit d05448d

Browse files
committed
various
1 parent 3d0af54 commit d05448d

File tree

94 files changed

+74611
-1038
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+74611
-1038
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ test/testtempfiles/
1010
test/datas/lamia_*
1111
sandbox/*/
1212
frontend/
13+
secrets/
1314

1415
arteliasite/node_modules
1516
arteliasite/lamiacarto/static/lamiacarto/bundle
+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
5+
"""
6+
This file is part of LAMIA.
7+
8+
LAMIA is free software: you can redistribute it and/or modify
9+
it under the terms of the GNU General Public License as published by
10+
the Free Software Foundation, either version 3 of the License, or
11+
(at your option) any later version.
12+
13+
LAMIA is distributed in the hope that it will be useful,
14+
but WITHOUT ANY WARRANTY; without even the implied warranty of
15+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16+
GNU General Public License for more details.
17+
18+
You should have received a copy of the GNU General Public License
19+
along with Foobar. If not, see <https://www.gnu.org/licenses/>.
20+
21+
"""
22+
"""
23+
* Copyright (c) 2017-2020 ARTELIA Commit <[email protected]>
24+
*
25+
* SPDX-License-Identifier: GPL-3.0-or-later
26+
* License-Filename: LICENSING.md
27+
"""
28+
29+
import os
30+
import Lamia
31+
32+
33+
class ConfigResourcefinder:
34+
def __init__(self, dbaseparser):
35+
self.dbaseparser = dbaseparser
36+
37+
def findResource(self, resourcecategory, resourcename):
38+
"""find a resource in different config dirs :
39+
* first is project config dir
40+
* second is lamia worktype config dir
41+
* last is lamia base config dir
42+
43+
:param resourcecategory: Directory of particulary module
44+
:type resourcecategory: string
45+
:param resourcename: filename of particulary module
46+
:type resourcename: string
47+
:return: complete filepath
48+
:rtype: string
49+
"""
50+
dirs = [
51+
os.path.join(
52+
self.dbaseparser.completePathOfFile(
53+
self.dbaseparser.dbaseressourcesdirectory
54+
),
55+
"config",
56+
),
57+
os.path.join(
58+
os.path.dirname(Lamia.config.__file__), self.dbaseparser.worktype
59+
),
60+
os.path.join(
61+
os.path.dirname(Lamia.config.__file__),
62+
self.dbaseparser.worktype.split("_")[0],
63+
),
64+
]
65+
66+
for dirpath in dirs:
67+
tempath = os.path.join(dirpath, resourcecategory, resourcename)
68+
print("tempath", tempath)
69+
if os.path.isfile(tempath):
70+
return tempath
71+
72+
return None
73+

api/dbasemanager/dbaseparserabstract.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from Lamia.api.libslamia.lamiareg.updatereg import updateWinReg
4141
from .dbconfigreader import DBconfigReader
4242
from .dbaseofflinemanager import DBaseOfflineManager
43+
from .configresourcefinder import ConfigResourcefinder
4344
from Lamia.qgisiface.iface.ifaceabstractconnector import LamiaIFaceAbstractConnectors
4445
from . import dbaseutils
4546

@@ -57,7 +58,14 @@
5758
"BYTEA": "BLOB",
5859
}
5960

60-
PROJECTCONFIGDIRS = ["dbase", "rapporttools", "styles", "importtools"]
61+
PROJECTCONFIGDIRS = [
62+
"dbase",
63+
"lamiareport",
64+
"qgsstyles",
65+
"lamiaimport",
66+
"assets",
67+
"lamiaexportshp",
68+
]
6169
# PROJECTCONFIGDIRS = ["dbase", "qgswidgets", "qgsstyles", "lamiacost", "lamiaexportshp"]
6270
THUMBNAIL_SIZE = 256
6371

@@ -102,6 +110,9 @@ def __init__(self, parserfactory=None, messageinstance=None):
102110
#:the offline manager instance
103111
self.dbaseofflinemanager = DBaseOfflineManager(self)
104112

113+
# config resourcefinder
114+
self.configresourcefinder = ConfigResourcefinder(self)
115+
105116
#:for debug purpose
106117
self.printsql = False
107118

@@ -307,6 +318,7 @@ def loadDBase(self, **kwargs):
307318
else:
308319
sql = "SELECT metier, repertoireressources,crs, version, workversion, variante FROM Basedonnees"
309320
query = self.query(sql)
321+
310322
worktype, resdir, crs, version, workversion, variante = [
311323
row[0:6] for row in query
312324
][0]

api/libs/odsreader/ODSReader.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@
1414

1515
# Thanks to grt for the fixes
1616
import os, sys
17-
import Lamia.api
1817

19-
lamiaapipath = os.path.join(os.path.dirname(Lamia.api.__file__))
20-
libspath = os.path.join(lamiaapipath, "libs")
18+
libspath = os.path.normpath(os.path.join(os.path.dirname(__file__), ".."))
2119
sys.path.append(libspath)
2220

2321
import odf.opendocument

api/libslamia/lamiaimport/lamiaimport.py

+52-41
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,33 @@
3030
from pprint import pprint
3131

3232

33-
class ImportCore():
33+
class ImportCore:
3434

35-
POSTPROTOOLNAME = 'importtools'
35+
POSTPROTOOLNAME = "lamiaimport"
3636

37-
38-
def __init__(self, dbaseparser,messageinstance=None):
39-
#super(ExportShapefileTool, self).__init__(dbase, dialog, linkedtreewidget, gpsutil, parentwidget, parent=parent)
37+
def __init__(self, dbaseparser, messageinstance=None):
38+
# super(ExportShapefileTool, self).__init__(dbase, dialog, linkedtreewidget, gpsutil, parentwidget, parent=parent)
4039
self.dbase = dbaseparser
4140
self.messageinstance = messageinstance
42-
self.tooldir = os.path.join(os.path.dirname(__file__), self.dbase.worktype.lower())
43-
44-
self.confdataplugin = os.path.join(os.path.dirname(__file__), self.dbase.worktype.lower())
45-
self.confdataproject = os.path.join(self.dbase.dbaseressourcesdirectory, 'config', self.POSTPROTOOLNAME)
46-
47-
48-
def importCleanedDatas(self, rawtablename=None, table_field_list=None, values=None, geoms=None, returnfield=None):
41+
self.tooldir = os.path.join(
42+
os.path.dirname(__file__), self.dbase.worktype.lower()
43+
)
44+
45+
self.confdataplugin = os.path.join(
46+
os.path.dirname(__file__), self.dbase.worktype.lower()
47+
)
48+
self.confdataproject = os.path.join(
49+
self.dbase.dbaseressourcesdirectory, "config", self.POSTPROTOOLNAME
50+
)
51+
52+
def importCleanedDatas(
53+
self,
54+
rawtablename=None,
55+
table_field_list=None,
56+
values=None,
57+
geoms=None,
58+
returnfield=None,
59+
):
4960

5061
"""
5162
@@ -59,84 +70,84 @@ def importCleanedDatas(self, rawtablename=None, table_field_list=None, values=No
5970

6071
debug = False
6172

62-
tablesnames = np.array([result.split('.')[0] for result in table_field_list])
63-
fieldsnames = np.array([result.split('.')[1] for result in table_field_list])
73+
tablesnames = np.array([result.split(".")[0] for result in table_field_list])
74+
fieldsnames = np.array([result.split(".")[1] for result in table_field_list])
6475

6576
parenttables = [rawtablename] + self.dbase.getParentTable(rawtablename)
66-
self.messageinstance.createProgressBar(inittext="import ...", maxvalue=len(values))
77+
self.messageinstance.createProgressBar(
78+
inittext="import ...", maxvalue=len(values)
79+
)
6780

6881
self.dbase.beginTransaction()
6982

7083
# cas des couches enfant de descriptionsystem
7184
for i, valueline in enumerate(values):
7285
valueline = np.array(valueline)
73-
#self.setLoadingProgressBar(progress, i)
74-
if i%50 == 0:
86+
# self.setLoadingProgressBar(progress, i)
87+
if i % 50 == 0:
7588
self.messageinstance.updateProgressBar(i)
7689

7790
pktablename = self.dbase.createNewFeature(rawtablename)
7891

7992
for tablename in parenttables:
80-
pktable = self.dbase.getValuesFromPk(rawtablename + '_qgis',
81-
'pk_' + tablename.lower(),
82-
pktablename )
93+
pktable = self.dbase.getValuesFromPk(
94+
rawtablename + "_qgis", "pk_" + tablename.lower(), pktablename
95+
)
8396
indexobjectvalues = np.where(np.array(tablesnames) == tablename)
8497
lisfield = fieldsnames[indexobjectvalues]
8598
listvalues = valueline[indexobjectvalues]
86-
self.updateTable( tablename, lisfield, listvalues, pktable)
99+
self.updateTable(tablename, lisfield, listvalues, pktable)
87100

88-
if 'geom' in self.dbase.dbasetables[tablename].keys():
89-
if self.dbase.__class__.TYPE == 'spatialite':
101+
if "geom" in self.dbase.dbasetables[tablename].keys():
102+
if self.dbase.__class__.TYPE == "spatialite":
90103
geomsql = "CastToSingle(CastToXY(ST_GeomFromText('"
91104
geomsql += geoms[i]
92105
geomsql += "', " + str(self.dbase.crsnumber) + ")))"
93-
elif self.dbase.__class__.TYPE == 'postgis':
106+
elif self.dbase.__class__.TYPE == "postgis":
94107
geomsql = "ST_GeometryN(ST_Force2D(ST_GeomFromText('"
95108
geomsql += geoms[i]
96109
geomsql += "', " + str(self.dbase.crsnumber) + ")),0)"
97110

98-
self.updateTable( tablename, ['geom'], [geomsql], pktable)
99-
100-
111+
self.updateTable(tablename, ["geom"], [geomsql], pktable)
101112

102113
self.dbase.commitTransaction()
103114

104115
self.messageinstance.closeProgressBar()
105116

106-
def updateTable(self, tablename, listfield, listvalues, pkvalue):
117+
def updateTable(self, tablename, listfield, listvalues, pkvalue):
107118

108119
sql = "UPDATE " + tablename + " SET "
109120
for i, fieldname in enumerate(listfield):
110-
if listvalues[i] != '':
121+
if listvalues[i] != "":
111122
sql += fieldname + " = "
112-
sql += self.convertDataType(tablename, fieldname, listvalues[i]) + ', '
123+
sql += self.convertDataType(tablename, fieldname, listvalues[i]) + ", "
113124

114-
if sql[-2:] == ', ':
125+
if sql[-2:] == ", ":
115126
sql = sql[:-2]
116-
sql += " WHERE pk_" + tablename.lower() +" = " + str(pkvalue)
127+
sql += " WHERE pk_" + tablename.lower() + " = " + str(pkvalue)
117128
query = self.dbase.query(sql, docommit=False)
118129

119-
def convertDataType(self, table,field, value):
120-
if field == 'geom':
130+
def convertDataType(self, table, field, value):
131+
if field == "geom":
121132
return str(value)
122133

123134
if self.dbase.utils.isAttributeNull(value):
124-
return 'NULL'
135+
return "NULL"
125136

126-
typevalue = self.dbase.dbasetables[table]['fields'][field]['PGtype']
127-
#getConstraintRawValueFromText(self, table, field, txt):
137+
typevalue = self.dbase.dbasetables[table]["fields"][field]["PGtype"]
138+
# getConstraintRawValueFromText(self, table, field, txt):
128139
rawvalue = self.dbase.getConstraintRawValueFromText(table, field, value)
129140

130-
if 'VARCHAR' in typevalue:
141+
if "VARCHAR" in typevalue:
131142
returnvalue = "'" + str(rawvalue) + "'"
132-
elif 'TIMESTAMP' in typevalue:
143+
elif "TIMESTAMP" in typevalue:
133144
returnvalue = "'" + str(rawvalue) + "'"
134-
elif 'TEXT' in typevalue:
145+
elif "TEXT" in typevalue:
135146
returnvalue = "'" + str(rawvalue) + "'"
136147
else:
137148
returnvalue = str(rawvalue)
138149

139150
return returnvalue
140151

141-
def postImport(self,layerfeat, pkobjet=None, pkdessys=None, pksubdessys=None):
152+
def postImport(self, layerfeat, pkobjet=None, pkdessys=None, pksubdessys=None):
142153
pass

api/libslamia/lamiareport/lamiareport.py

+39-10
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
class ReportCore:
4141

42-
POSTPROTOOLNAME = "reporttools"
42+
POSTPROTOOLNAME = "lamiareport"
4343
if qgis.utils.iface is None:
4444
LAUNCHINQTHREAD = False
4545
else:
@@ -948,14 +948,18 @@ def processImages(self, newComposition, atlas, atlasfeat):
948948
imageresult = self.getNumberedResource(atlasfeat, table, ressourcenum)
949949

950950
elif self.atlasconfData["images"][imageitemname][0:4] == "logo":
951-
imagepath = os.path.join(
952-
os.path.dirname(__file__),
953-
"..",
954-
"..",
955-
"DBASE",
956-
"utils",
957-
self.atlasconfData["images"][imageitemname] + ".png",
951+
imagepath = self.dbase.configresourcefinder.findResource(
952+
"assets", self.atlasconfData["images"][imageitemname] + ".png"
958953
)
954+
955+
# imagepath = os.path.join(
956+
# os.path.dirname(__file__),
957+
# "..",
958+
# "..",
959+
# "DBASE",
960+
# "utils",
961+
# self.atlasconfData["images"][imageitemname] + ".png",
962+
# )
959963
imageresult = os.path.join(imagepath)
960964

961965
else:
@@ -1413,7 +1417,10 @@ def fillComposerMapsWihLayers(self, newComposition, coveragelayer):
14131417
"ogr",
14141418
)
14151419
if qgis.utils.iface is not None:
1416-
rlayer.renderer().setOpacity(0.5)
1420+
try: # if raster layer
1421+
rlayer.renderer().setOpacity(0.5)
1422+
except:
1423+
pass
14171424
# qgis.core.QgsProject.instance().addMapLayer(
14181425
self.project.addMapLayer(rlayer, False)
14191426
layersformapcomposer.append(rlayer)
@@ -1486,7 +1493,8 @@ def getOrderedPksForAtlas(self, coveragelayer):
14861493
orderedpks = self.orderPksAlongPath(coveragelayer, self.pkzonegeolist)
14871494
else:
14881495
# orderedpks[0] = [feat[self.atlasconfData['atlaslayerid']] for feat in coveragelayer.getFeatures()]
1489-
orderedpks[0] = [feat.id() for feat in coveragelayer.getFeatures()]
1496+
# orderedpks[0] = [feat.id() for feat in coveragelayer.getFeatures()]
1497+
orderedpks = self.getPksByzoneGeo(coveragelayer, self.pkzonegeolist)
14901498

14911499
if len(orderedpks) == 0:
14921500
orderedpks[0] = [feat.id() for feat in coveragelayer.getFeatures()]
@@ -1631,6 +1639,27 @@ def orderPksAlongPath(self, coveragelayer, zonegeopks=[]):
16311639
self.logger.debug("orderedpks %s", str(orderedpks))
16321640
return orderedpks
16331641

1642+
def getPksByzoneGeo(self, coveragelayer, zonegeopks=[]):
1643+
if len(zonegeopks) == 0:
1644+
sql = "SELECT pk_geoarea, ST_AsText(geom) FROM geoarea "
1645+
query = self.dbase.query(sql)
1646+
zonegeopks = [row[0] for row in query]
1647+
# zonegeogeoms = [row[1] for row in query]
1648+
1649+
zonegeopksstr = [str(elem) for elem in zonegeopks]
1650+
sql = f"SELECT pk_geoarea, ST_AsText(geom) FROM geoarea WHERE pk_geoarea in ({','.join(zonegeopksstr)})"
1651+
query = self.dbase.query(sql)
1652+
1653+
orderedpks = {}
1654+
for zonegeopk, zonegeogeom in query:
1655+
orderedpks[zonegeopk] = []
1656+
for feat in coveragelayer.getFeatures():
1657+
if feat.geometry().intersects(
1658+
qgis.core.QgsGeometry.fromWkt(zonegeogeom)
1659+
):
1660+
orderedpks[zonegeopk].append(feat.id())
1661+
return orderedpks
1662+
16341663
def initPrinterAndPainter(self, newComposition):
16351664
"""
16361665
initialise le self.priner et le self.painter pour accuilir l'impression

api/libslamia/sirsconverter/09_test_APn_base2.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
from qgis.core import QgsGeometry
99

10-
from Lamia.Lamia.api.libs.cloudant.client import Cloudant
11-
from Lamia.Lamia.api.libs.cloudant.error import CloudantException
12-
from Lamia.Lamia.api.libs.cloudant.result import Result, ResultByKey, QueryResult
13-
from Lamia.Lamia.api.libs.cloudant.query import Query
14-
from Lamia.Lamia.main.DBaseParser import DBaseParser
10+
from Lamia.api.libs.cloudant.client import Cloudant
11+
from Lamia.api.libs.cloudant.error import CloudantException
12+
from Lamia.api.libs.cloudant.result import Result, ResultByKey, QueryResult
13+
from Lamia.api.libs.cloudant.query import Query
14+
from Lamia.main.DBaseParser import DBaseParser
1515

1616
try:
1717
from pyspatialite import dbapi2 as db

0 commit comments

Comments
 (0)