From e2f82bad8ce6ccef291515c0c525852e3e4d1145 Mon Sep 17 00:00:00 2001 From: CorentinPeutin Date: Tue, 11 Apr 2023 15:33:42 +0200 Subject: [PATCH 1/6] =?UTF-8?q?kwargs=20au=20lieu=20param=C3=A8tres=20opti?= =?UTF-8?q?onnels=20+=20lecture=20CSV=20avec=20ogr=20+=20utilisation=20de?= =?UTF-8?q?=20get=5Fosgeo=5Fpath?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 - src/rok4/Vector.py | 211 +++++++++++++++++++++++-------------- tests/fixtures/vector.csv | 4 + tests/fixtures/vector2.csv | 2 + tests/test_Vector.py | 77 +++++--------- 5 files changed, 168 insertions(+), 129 deletions(-) create mode 100644 tests/fixtures/vector.csv create mode 100644 tests/fixtures/vector2.csv diff --git a/README.md b/README.md index 191feab..6069c83 100644 --- a/README.md +++ b/README.md @@ -29,9 +29,6 @@ from rok4.Vector import Vector try: tms = TileMatrixSet("file:///path/to/tms.json") - vector = Vector("file:///path/to/vector.shp") - vector_csv1 = Vector("file:///path/to/vector.csv", delimiter, column_x, column_y) - vector_csv1 = Vector("file:///path/to/vector.csv", delimiter, column_WKT) except Exception as exc: print(exc) ``` diff --git a/src/rok4/Vector.py b/src/rok4/Vector.py index 131a0e0..1c712dd 100644 --- a/src/rok4/Vector.py +++ b/src/rok4/Vector.py @@ -7,7 +7,7 @@ """ from osgeo import ogr -from rok4.Storage import get_data_str, copy +from rok4.Storage import get_osgeo_path, copy from rok4.Exceptions import * import os import tempfile @@ -24,15 +24,29 @@ class Vector : layers (List[Tuple[str, int, List[Tuple[str, str]]]]) : Vector layers with their name, their number of objects and their attributes """ - def __init__(self, path: str, delimiter: str = ";", column_x : str = "x" , column_y : str = "y", column_WKT : str = None) -> None : - """Constructor method for Shapefile, Geopackage, CSV and GeoJSON + @classmethod + def from_file(cls, path: str, **kwargs) -> 'Vector' : + """Constructor method of a Vector from a file (Shapefile, Geopackage, CSV and GeoJSON) Args: - path: path to the file/object - delimiter (only for CSV) : delimiter between fields - column_x (only for CSV) : field of the x coordinate - column_y (only for CSV) : field of the y coordinate - column_WKT (only for CSV if geometry in WKT) : field of the WKT of the geometry + path (str): path to the file/object + **CSV (Dict[str : str]) : dictionnary of CSV parameters : + -srs (str) ("EPSG:2154" if not provided) : spatial reference system of the geometry + -column_x (str) ("x" if not provided) : field of the x coordinate + -column_y (str) ("y" if not provided) : field of the y coordinate + -column_WKT (str) (None if not provided) : field of the WKT of the geometry if WKT use to define coordinate + + Examples: + + from rok4.Vector import Vector + + try: + vector = Vector.from_file("file://tests/fixtures/ARRONDISSEMENT.shp") + vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , CSV={"delimiter":";", "column_x":"x", "column_y":"y"}) + vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , CSV={"delimiter":";", "column_WKT":"WKT"}) + + except Exception as e: + print(f"Vector creation raises an exception: {exc}") Raises: MissingEnvironmentError: Missing object storage informations @@ -44,55 +58,13 @@ def __init__(self, path: str, delimiter: str = ";", column_x : str = "x" , colum """ + self = cls() + self.path = path path_split = path.split("/") - if path.endswith(".csv") : - - data = get_data_str(path) - data = data.split("\n") - for i in range (len(data)) : - data[i] = data[i].split(delimiter) - - attributes = [] - for i in range (len(data[0])) : - attributes += [(data[0][i] , "String")] - layers = [(path_split[-1][:-4], len(data)-1, attributes)] - self.layers = layers - - geomcol = ogr.Geometry(ogr.wkbGeometryCollection) - if column_WKT == None : - try : - data_x = data[0].index(column_x) - except : - raise Exception(f"{column_x} is not a column of the CSV") - - try : - data_y = data[0].index(column_y) - except : - raise Exception(f"{column_y} is not a column of the CSV") - - for i in range (1, len(data)) : - point = ogr.Geometry(ogr.wkbPoint) - try : - point.AddPoint(float(data[i][data_x]), float(data[i][data_y])) - except : - raise Exception(f"{column_x} or {column_y} contains data which are not coordinates") - geomcol.AddGeometry(point) - - else : - data_WKT = data[0].index(column_WKT) - for i in range (1, len(data)) : - try : - geom = ogr.CreateGeometryFromWkt(data[i][data_WKT]) - except : - raise Exception(f"{column_WKT} contains data which are not WKT") - geomcol.AddGeometry(geom) - - self.bbox = geomcol.GetEnvelope() - - else : + if path_split[0] == "ceph:" or path.endswith(".csv"): if path.endswith(".shp") : with tempfile.TemporaryDirectory() as tmp : @@ -122,32 +94,115 @@ def __init__(self, path: str, delimiter: str = ";", column_x : str = "x" , colum dataSource = ogr.Open(tmp_path + ".geojson", 0) + elif path.endswith(".csv") : + # Récupération des informations optionnelles + if "CSV" in kwargs : + csv = kwargs["CSV"] + else : + csv = {} + + if "srs" in csv and csv["srs"] is not None : + srs = csv["srs"] + else : + srs = "EPSG:2154" + + if "column_x" in csv and csv["column_x"] is not None : + column_x = csv["column_x"] + else : + column_x = "x" + + if "column_y" in csv and csv["column_y"] is not None : + column_y = csv["column_y"] + else : + column_y = "y" + + if "column_WKT" in csv : + column_WKT = csv["column_WKT"] + else : + column_WKT = None + + with tempfile.TemporaryDirectory() as tmp : + tmp_path = tmp + "/" + path_split[-1][:-4] + name_fich = path_split[-1][:-4] + + copy(path, "file://" + tmp_path + ".csv") + + with tempfile.NamedTemporaryFile(mode='w', suffix=".vrt", dir=tmp, delete=False) as tmp2 : + vrt_file = "\n" + vrt_file += '\n' + vrt_file += "" + tmp_path + ".csv\n" + vrt_file += "" + name_fich + "\n" + vrt_file += "" + srs + "\n" + if column_WKT == None : + vrt_file += '\n' + else : + vrt_file += '\n' + vrt_file += "\n" + vrt_file += "" + tmp2.write(vrt_file) + copy("file://"+tmp2.name, "/home/CPeutin/Workplace/test.vrt") + dataSourceVRT = ogr.Open(tmp2.name, 0) + os.remove(tmp2.name) + dataSource=ogr.GetDriverByName("ESRI Shapefile").CopyDataSource(dataSourceVRT, tmp_path + "shp") + else : raise Exception("This format of file cannot be loaded") - multipolygon = ogr.Geometry(ogr.wkbGeometryCollection) + else : + dataSource = ogr.Open(get_osgeo_path(path), 0) + + multipolygon = ogr.Geometry(ogr.wkbGeometryCollection) + try : + layer = dataSource.GetLayer() + except AttributeError : + raise Exception(f"The content of {self.path} cannot be read") + + layers = [] + for i in range (dataSource.GetLayerCount()) : + layer = dataSource.GetLayer(i) + name = layer.GetName() + count = layer.GetFeatureCount() + layerDefinition = layer.GetLayerDefn() + attributes = [] + for j in range(layerDefinition.GetFieldCount()): + fieldName = layerDefinition.GetFieldDefn(j).GetName() + fieldTypeCode = layerDefinition.GetFieldDefn(j).GetType() + fieldType = layerDefinition.GetFieldDefn(j).GetFieldTypeName(fieldTypeCode) + attributes += [(fieldName, fieldType)] + for feature in layer : + geom = feature.GetGeometryRef() + if geom != None : + multipolygon.AddGeometry(geom) + layers += [(name, count, attributes)] + + self.layers = layers + self.bbox = multipolygon.GetEnvelope() + + return self + + @classmethod + def from_parameters(cls, path: str, bbox : tuple, layers : list) -> 'Vector' : + """Constructor method of a Vector from a parameters + + Args: + path (str): path to the file/object + bbox (Tuple[float, float, float, float]): bounding rectange in the data projection + layers (List[Tuple[str, int, List[Tuple[str, str]]]]) : Vector layers with their name, their number of objects and their attributes + + Examples: + try : - layer = dataSource.GetLayer() - except AttributeError : - raise Exception(f"The content of {self.path} cannot be read") - - layers = [] - for i in range (dataSource.GetLayerCount()) : - layer = dataSource.GetLayer(i) - name = layer.GetName() - count = layer.GetFeatureCount() - layerDefinition = layer.GetLayerDefn() - attributes = [] - for i in range(layerDefinition.GetFieldCount()): - fieldName = layerDefinition.GetFieldDefn(i).GetName() - fieldTypeCode = layerDefinition.GetFieldDefn(i).GetType() - fieldType = layerDefinition.GetFieldDefn(i).GetFieldTypeName(fieldTypeCode) - attributes += [(fieldName, fieldType)] - for feature in layer : - geom = feature.GetGeometryRef() - if geom != None : - multipolygon.AddGeometry(geom) - layers += [(name, count, attributes)] - - self.layers = layers - self.bbox = multipolygon.GetEnvelope() + vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) + + except Exception as e: + print(f"Vector creation raises an exception: {exc}") + + """ + + self = cls() + + self.path = path + self.bbox = bbox + self.layers = layers + + return self diff --git a/tests/fixtures/vector.csv b/tests/fixtures/vector.csv new file mode 100644 index 0000000..e4747c6 --- /dev/null +++ b/tests/fixtures/vector.csv @@ -0,0 +1,4 @@ +id;x;y +1;20000;50000 +2;1000;2 +3;500000;5 diff --git a/tests/fixtures/vector2.csv b/tests/fixtures/vector2.csv new file mode 100644 index 0000000..0efe2fd --- /dev/null +++ b/tests/fixtures/vector2.csv @@ -0,0 +1,2 @@ +id;WKT +1;POINT(1 1) diff --git a/tests/test_Vector.py b/tests/test_Vector.py index a83f429..b7dd8c7 100644 --- a/tests/test_Vector.py +++ b/tests/test_Vector.py @@ -5,7 +5,7 @@ @author: cpeutin """ -from rok4.Vector import Vector +from rok4.Vector import * from rok4.Exceptions import * from rok4.Storage import disconnect_ceph_clients @@ -19,88 +19,69 @@ def test_missing_env(): disconnect_ceph_clients() with pytest.raises(MissingEnvironmentError): - vector = Vector("ceph:///ign_std/vector.shp") + vector = Vector.from_file("ceph:///ign_std/vector.shp") -@mock.patch('rok4.Vector.copy', side_effect=StorageError('FILE', 'Not found')) +@mock.patch('rok4.Vector.copy', side_effect=StorageError('CEPH', 'Not found')) def test_wrong_file(mocked_copy): with pytest.raises(StorageError): - vector = Vector("file:///vector.shp") - -@mock.patch('rok4.Vector.get_data_str', return_value="x1;y1\n no_coor;no_coor") -def test_wrong_column_point1(mocked_get_data_str): - with pytest.raises(Exception) as exc: - vector = Vector("file:///vector.csv" , ";", "x", "y") - assert str(exc.value) == "x is not a column of the CSV" - mocked_get_data_str.assert_called_once_with("file:///vector.csv") - -@mock.patch('rok4.Vector.get_data_str', return_value="x;y1\n no_coor;no_coor") -def test_wrong_column_point2(mocked_get_data_str): - with pytest.raises(Exception) as exc: - vector = Vector("file:///vector.csv" , ";", "x", "y") - assert str(exc.value) == "y is not a column of the CSV" - mocked_get_data_str.assert_called_once_with("file:///vector.csv") - -@mock.patch('rok4.Vector.get_data_str', return_value="x;y\n no_coor;no_coor") -def test_wrong_data_column_point(mocked_get_data_str): - with pytest.raises(Exception) as exc: - vector = Vector("file:///vector.csv" , ";", "x", "y") - assert str(exc.value) == "x or y contains data which are not coordinates" - mocked_get_data_str.assert_called_once_with("file:///vector.csv") - -@mock.patch('rok4.Vector.get_data_str', return_value="WKT\n no_coor") -def test_wrong_data_column_WKT(mocked_get_data_str): - with pytest.raises(Exception) as exc: - vector = Vector("file:///vector.csv" , ";", column_WKT="WKT") - assert str(exc.value) == "WKT contains data which are not WKT" - mocked_get_data_str.assert_called_once_with("file:///vector.csv") + vector = Vector.from_file("ceph:///vector.geojson") def test_wrong_format(): with pytest.raises(Exception) as exc: - vector = Vector("file:///vector.tif") + vector = Vector.from_file("ceph:///vector.tif") assert str(exc.value) == "This format of file cannot be loaded" +@mock.patch('rok4.Vector.ogr.Open', return_value="not a shape") +def test_wrong_content(mocked_copy): + with pytest.raises(Exception) as exc: + vector = Vector.from_file("file:///vector.shp") + assert str(exc.value) == "The content of file:///vector.shp cannot be read" + @mock.patch('rok4.Vector.copy') @mock.patch('rok4.Vector.ogr.Open', return_value="not a shape") -def test_wrong_content(mocked_open, mocked_copy): +def test_wrong_content_ceph(mocked_open, mocked_copy): with pytest.raises(Exception) as exc: - vector = Vector("file:///vector.shp") + vector = Vector.from_file("file:///vector.shp") assert str(exc.value) == "The content of file:///vector.shp cannot be read" -@mock.patch('rok4.Vector.get_data_str', return_value="id;x;y\n 1;20000;50000") -def test_ok_csv1(mocked_get_data_str) : +def test_ok_csv1() : try : - vector_csv1 = Vector("file:///vector.csv" , ";", "x", "y") - assert str(vector_csv1.layers) == "[('vector', 1, [('id', 'String'), ('x', 'String'), ('y', 'String')])]" - mocked_get_data_str.assert_called_once_with("file:///vector.csv") + vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , CSV={"delimiter":";", "column_x":"x", "column_y":"y"}) + assert str(vector_csv1.layers) == "[('vector', 3, [('id', 'String'), ('x', 'String'), ('y', 'String')])]" except Exception as exc: assert False, f"Vector creation raises an exception: {exc}" -@mock.patch('rok4.Vector.get_data_str', return_value="id;WKT\n 1;POINT(1 1)") -def test_ok_csv2(mocked_get_data_str) : +def test_ok_csv2() : try : - vector_csv2 = Vector("file:///vector.csv" , ";", column_WKT="WKT") - assert str(vector_csv2.layers) == "[('vector', 1, [('id', 'String'), ('WKT', 'String')])]" - mocked_get_data_str.assert_called_once_with("file:///vector.csv") + vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , CSV={"delimiter":";", "column_WKT":"WKT"}) + assert str(vector_csv2.layers) == "[('vector2', 1, [('id', 'String'), ('WKT', 'String')])]" except Exception as exc: assert False, f"Vector creation raises an exception: {exc}" def test_ok_geojson() : try : - vector = Vector("file://tests/fixtures/vector.geojson") + vector = Vector.from_file("file://tests/fixtures/vector.geojson") assert str(vector.layers) == "[('vector', 1, [('id', 'String'), ('id_fantoir', 'String'), ('numero', 'Integer'), ('rep', 'String'), ('nom_voie', 'String'), ('code_postal', 'Integer'), ('code_insee', 'Integer'), ('nom_commune', 'String'), ('code_insee_ancienne_commune', 'String'), ('nom_ancienne_commune', 'String'), ('x', 'Real'), ('y', 'Real'), ('lon', 'Real'), ('lat', 'Real'), ('type_position', 'String'), ('alias', 'String'), ('nom_ld', 'String'), ('libelle_acheminement', 'String'), ('nom_afnor', 'String'), ('source_position', 'String'), ('source_nom_voie', 'String'), ('certification_commune', 'Integer'), ('cad_parcelles', 'String')])]" except Exception as exc: assert False, f"Vector creation raises an exception: {exc}" def test_ok_gpkg() : try : - vector = Vector("file://tests/fixtures/vector.gpkg") + vector = Vector.from_file("file://tests/fixtures/vector.gpkg") assert str(vector.layers) == "[('Table1', 2, [('id', 'String')]), ('Table2', 2, [('id', 'Integer'), ('nom', 'String')])]" except Exception as exc: assert False, f"Vector creation raises an exception: {exc}" def test_ok_shp() : try : - vector = Vector("file://tests/fixtures/ARRONDISSEMENT.shp") + vector = Vector.from_file("file://tests/fixtures/ARRONDISSEMENT.shp") assert str(vector.layers) == "[('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]" except Exception as exc: assert False, f"Vector creation raises an exception: {exc}" + +def test_ok_parameters() : + try : + vector = Vector.from_parameters("file://tests/fixtures/ARRONDISSEMENT.shp", (1,2,3,4), [('ARRONDISSEMENT', 14, [('ID', 'String'), ('NOM', 'String'), ('INSEE_ARR', 'String'), ('INSEE_DEP', 'String'), ('INSEE_REG', 'String'), ('ID_AUT_ADM', 'String'), ('DATE_CREAT', 'String'), ('DATE_MAJ', 'String'), ('DATE_APP', 'Date'), ('DATE_CONF', 'Date')])]) + assert str(vector.path) == "file://tests/fixtures/ARRONDISSEMENT.shp" + except Exception as exc: + assert False, f"Vector creation raises an exception: {exc}" From 0bd4ade987b29769368513ab02d588f6e88c613b Mon Sep 17 00:00:00 2001 From: CorentinPeutin Date: Tue, 11 Apr 2023 15:37:06 +0200 Subject: [PATCH 2/6] Suppression messages inutiles --- tests/test_Vector.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/test_Vector.py b/tests/test_Vector.py index b7dd8c7..495b32e 100644 --- a/tests/test_Vector.py +++ b/tests/test_Vector.py @@ -1,10 +1,5 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -""" -Created on Wed Jan 18 12:04:07 2023 - -@author: cpeutin -""" from rok4.Vector import * from rok4.Exceptions import * from rok4.Storage import disconnect_ceph_clients From d696ebde12584561221ae68f8bb3d717d8c0ae1c Mon Sep 17 00:00:00 2001 From: CorentinPeutin Date: Tue, 11 Apr 2023 16:03:24 +0200 Subject: [PATCH 3/6] =?UTF-8?q?Mise=20=C3=A0=20jour=20Changelog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a24c5b..0e87fa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Summary Lecture facilitée de la liste d'une pyramide. +Modification de la gestion des vecteurs ## Changelog @@ -11,6 +12,15 @@ Lecture facilitée de la liste d'une pyramide. * Taille du header d'une dalle stockée dans la variable `ROK4_IMAGE_HEADER_SIZE` * La proriété `tile_extension` : retourne l'extension d'une tuile de la pyramide en fonction du format * Des exemples d'utilisation des fonctions principales + +### [Changed] + +* Vector + * Utilisation de kwargs pour les paramètres du csv + * Gestion des CSV par OGR + * Passage par get_osgeo_path pour la lecture virtuelle + * 2 constructeurs pour les vecteurs : from_file et from_parameters + ### [Fixed] * Storage From c6b0d97dbfb2590e55b685b9a4086317397a9986 Mon Sep 17 00:00:00 2001 From: CorentinPeutin Date: Mon, 17 Apr 2023 14:27:40 +0200 Subject: [PATCH 4/6] Suppression ligne de tests --- src/rok4/Vector.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/rok4/Vector.py b/src/rok4/Vector.py index 1c712dd..524f3dc 100644 --- a/src/rok4/Vector.py +++ b/src/rok4/Vector.py @@ -140,7 +140,6 @@ def from_file(cls, path: str, **kwargs) -> 'Vector' : vrt_file += "\n" vrt_file += "" tmp2.write(vrt_file) - copy("file://"+tmp2.name, "/home/CPeutin/Workplace/test.vrt") dataSourceVRT = ogr.Open(tmp2.name, 0) os.remove(tmp2.name) dataSource=ogr.GetDriverByName("ESRI Shapefile").CopyDataSource(dataSourceVRT, tmp_path + "shp") From 8f33d9dc3c699b421060c9f5c7335c9e5a0e7a3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Satabin?= Date: Thu, 4 May 2023 11:47:48 +0200 Subject: [PATCH 5/6] =?UTF-8?q?Passage=20en=20minuscule=20des=20noms=20des?= =?UTF-8?q?=20param=C3=A8tres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rok4/Vector.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/rok4/Vector.py b/src/rok4/Vector.py index 524f3dc..9cb8c00 100644 --- a/src/rok4/Vector.py +++ b/src/rok4/Vector.py @@ -30,11 +30,11 @@ def from_file(cls, path: str, **kwargs) -> 'Vector' : Args: path (str): path to the file/object - **CSV (Dict[str : str]) : dictionnary of CSV parameters : + **csv (Dict[str : str]) : dictionnary of CSV parameters : -srs (str) ("EPSG:2154" if not provided) : spatial reference system of the geometry -column_x (str) ("x" if not provided) : field of the x coordinate -column_y (str) ("y" if not provided) : field of the y coordinate - -column_WKT (str) (None if not provided) : field of the WKT of the geometry if WKT use to define coordinate + -column_wkt (str) (None if not provided) : field of the WKT of the geometry if WKT use to define coordinate Examples: @@ -42,8 +42,8 @@ def from_file(cls, path: str, **kwargs) -> 'Vector' : try: vector = Vector.from_file("file://tests/fixtures/ARRONDISSEMENT.shp") - vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , CSV={"delimiter":";", "column_x":"x", "column_y":"y"}) - vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , CSV={"delimiter":";", "column_WKT":"WKT"}) + vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) + vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) except Exception as e: print(f"Vector creation raises an exception: {exc}") @@ -96,8 +96,8 @@ def from_file(cls, path: str, **kwargs) -> 'Vector' : elif path.endswith(".csv") : # Récupération des informations optionnelles - if "CSV" in kwargs : - csv = kwargs["CSV"] + if "csv" in kwargs : + csv = kwargs["csv"] else : csv = {} @@ -116,10 +116,10 @@ def from_file(cls, path: str, **kwargs) -> 'Vector' : else : column_y = "y" - if "column_WKT" in csv : - column_WKT = csv["column_WKT"] + if "column_wkt" in csv : + column_wkt = csv["column_wkt"] else : - column_WKT = None + column_wkt = None with tempfile.TemporaryDirectory() as tmp : tmp_path = tmp + "/" + path_split[-1][:-4] @@ -133,10 +133,10 @@ def from_file(cls, path: str, **kwargs) -> 'Vector' : vrt_file += "" + tmp_path + ".csv\n" vrt_file += "" + name_fich + "\n" vrt_file += "" + srs + "\n" - if column_WKT == None : + if column_wkt == None : vrt_file += '\n' else : - vrt_file += '\n' + vrt_file += '\n' vrt_file += "\n" vrt_file += "" tmp2.write(vrt_file) From a32d0ba75ca4fafdc764e7821edd6bd46176ff03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Satabin?= Date: Thu, 4 May 2023 11:48:59 +0200 Subject: [PATCH 6/6] =?UTF-8?q?Passage=20en=20minuscule=20des=20param?= =?UTF-8?q?=C3=A8tres=20CSV?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_Vector.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_Vector.py b/tests/test_Vector.py index 495b32e..c7eb2e4 100644 --- a/tests/test_Vector.py +++ b/tests/test_Vector.py @@ -41,14 +41,14 @@ def test_wrong_content_ceph(mocked_open, mocked_copy): def test_ok_csv1() : try : - vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , CSV={"delimiter":";", "column_x":"x", "column_y":"y"}) + vector_csv1 = Vector.from_file("file://tests/fixtures/vector.csv" , csv={"delimiter":";", "column_x":"x", "column_y":"y"}) assert str(vector_csv1.layers) == "[('vector', 3, [('id', 'String'), ('x', 'String'), ('y', 'String')])]" except Exception as exc: assert False, f"Vector creation raises an exception: {exc}" def test_ok_csv2() : try : - vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , CSV={"delimiter":";", "column_WKT":"WKT"}) + vector_csv2 = Vector.from_file("file://tests/fixtures/vector2.csv" , csv={"delimiter":";", "column_wkt":"WKT"}) assert str(vector_csv2.layers) == "[('vector2', 1, [('id', 'String'), ('WKT', 'String')])]" except Exception as exc: assert False, f"Vector creation raises an exception: {exc}"