Skip to content

Commit 43f113d

Browse files
authored
Merge pull request #11 from GeoNodeUserGroup-DE/support-for-attribute_set-for-detailed-description-of-the-dataset
[#10] Support for attribute set for detailed description of the dataset
2 parents 2243f2e + 1f88676 commit 43f113d

File tree

5 files changed

+39
-6
lines changed

5 files changed

+39
-6
lines changed

importer_datapackage/handlers/datapackage/data/datapackage.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@
2929
"fields": [
3030
{
3131
"name": "PointID",
32+
"title": "Point ID",
3233
"type": "integer",
3334
"description": "Sampling point identifier"
3435
},
3536
{
3637
"name": "HorizontID",
38+
"title": "Horizont ID",
3739
"type": "integer",
3840
"description": "Horizon number of each individual soil profile"
3941
},
@@ -104,6 +106,7 @@
104106
"fields": [
105107
{
106108
"name": "PointID",
109+
"title": "Point ID",
107110
"description": "Sampling point identifier",
108111
"type": "integer"
109112
},
@@ -188,59 +191,69 @@
188191
},
189192
{
190193
"name": "pH_H2O",
194+
"title": "pH of H2O",
191195
"description": "pH-value in water [mol l-1] (DIN ISO 10390, modified)",
192196
"type": "number",
193197
"decimalChar": ","
194198
},
195199
{
196200
"name": "EC_H2O",
201+
"title": "EC of H2O",
197202
"description": "Electric conductivity in water [µS cm-1] (DIN EN ISO 27888)",
198203
"type": "number",
199204
"decimalChar": ","
200205
},
201206
{
202207
"name": "pH_CaCl2",
208+
"title": "pH of CaCl2",
203209
"description": "pH-vlaue in Claciumchlorid [mol l-1] (DIN ISO 10390)",
204210
"type": "number",
205211
"decimalChar": ","
206212
},
207213
{
208214
"name": "TC",
215+
"title": "Total Carbon",
209216
"description": "Total carbon[g kg-1] (DIN ISO 10694:1995)",
210217
"type": "number",
211218
"decimalChar": ","
212219
},
213220
{
214221
"name": "TOC",
222+
"title": "Organic Carbon",
215223
"description": "Organic carbon [g kg-1] (DIN ISO 10694:1995)",
216224
"type": "number",
217225
"decimalChar": ","
218226
},
219227
{
220228
"name": "TIC",
229+
"title": "Inorganic Carbon",
221230
"description": "Inorganic carbon [g kg-1] (DIN 19539, modified)",
222231
"type": "number",
223232
"decimalChar": ","
224233
},
225234
{
226235
"name": "TN",
236+
"title": "Total Nitrogen",
227237
"description": "Total nitrogen [g kg-1] (DIN EN 16168:2012)",
228238
"type": "number",
229239
"decimalChar": ","
230240
},
231241
{
232242
"name": "TS",
243+
"title": "Total Sulphur",
233244
"description": "Total sulphur [g kg-1] (DIN ISO 15178:02-2001)",
234245
"type": "string"
235246
},
236247
{
237248
"name": "BD_FS",
249+
"title": "Buld Density of Fine Soil",
238250
"description": "Bulk density of the fine soil [g cm-3] (HFA A2.8, verändert)",
239251
"type": "number",
240252
"decimalChar": ","
241253
},
242254
{
243255
"name": "FSS",
256+
"title": "Fine Soil Stock",
244257
"description": "Fine soil stock [Mg ha-1]",
245258
"type": "number",
246259
"decimalChar": ","
79 Bytes
Binary file not shown.

importer_datapackage/handlers/datapackage/handler.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from geonode.layers.models import Dataset
1818
from geonode.resource.manager import resource_manager
1919
from geonode.resource.enumerator import ExecutionRequestAction as exa
20+
from geonode.geoserver.helpers import set_attributes
2021
from geonode.utils import set_resource_default_links
2122

2223
from importer.handlers.common.vector import BaseVectorFileHandler
@@ -25,7 +26,7 @@
2526

2627
from frictionless import Package
2728

28-
from .mapper import SchemaToVrtMapper
29+
from .mapper import TabularDataHelper
2930
from .util import process_rows, validate
3031

3132
logger = logging.getLogger(__name__)
@@ -98,7 +99,7 @@ def prepare_import(self, files, execution_id, **kwargs):
9899
process_rows(resource)
99100

100101
folder = Path(_file).parent
101-
mapper = SchemaToVrtMapper(package)
102+
mapper = TabularDataHelper(package)
102103
vrt_file = mapper.write_vrt_file(f"{package.name}.vrt", folder)
103104

104105
# update base file to be imported by ogr2ogr
@@ -189,6 +190,13 @@ def create_geonode_resource(
189190
set_resource_default_links(saved_dataset.get_real_instance(), saved_dataset)
190191
ResourceBase.objects.filter(alternate=alternate).update(dirty_state=False)
191192

193+
package_file = files.get("package_file")
194+
package = Package(package_file)
195+
196+
mapper = TabularDataHelper(package)
197+
attribute_map = mapper.parse_attribute_map(saved_dataset.name)
198+
set_attributes(saved_dataset, attribute_map, _overwrite)
199+
192200
saved_dataset.refresh_from_db()
193201
return saved_dataset
194202

importer_datapackage/handlers/datapackage/mapper.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,24 @@
33

44
import xml.etree.cElementTree as ET
55

6-
class SchemaToVrtMapper():
6+
class TabularDataHelper():
77

88
def __init__(self, package):
99
self.package = package
1010
self.resources = package.resources or []
1111

12+
13+
def parse_attribute_map(self, resource_name: str) -> list:
14+
""" Of type: [ [field, ftype, description, label, display_oder], ... ]"""
15+
16+
resource = self.package.get_resource(resource_name)
17+
schema = resource.schema
18+
attribute_map = [
19+
[field.name, _parse_field_type(field)[0], field.description, field.title or field.name, None]
20+
for field in schema.fields
21+
]
22+
return attribute_map
23+
1224
def write_vrt_file(self, filename: str, folder: Path):
1325

1426
if not filename:
@@ -23,7 +35,7 @@ def write_vrt_file(self, filename: str, folder: Path):
2335
for field in schema.fields:
2436
(type, subtype) = _parse_field_type(field)
2537
normalized_fieldname = normalize(field.name).lower()
26-
ET.SubElement(layer, "Field", src=field.name, name=normalized_fieldname, type=type, subtype=subtype)
38+
ET.SubElement(layer, "Field", src=field.name, name=normalized_fieldname, type=type, subtype=subtype,)
2739

2840
# write VRT file
2941
vrt_filename = Path(folder, filename) if folder else filename

importer_datapackage/handlers/datapackage/tests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from geonode.storage.manager import StorageManager
1313

1414
from importer_datapackage.handlers.datapackage.handler import DataPackageFileHandler
15-
from importer_datapackage.handlers.datapackage.mapper import SchemaToVrtMapper
15+
from importer_datapackage.handlers.datapackage.mapper import TabularDataHelper
1616
from importer_datapackage.handlers.datapackage.exceptions import InvalidDataPackageFileException
1717

1818
def _absolute_path(filename: str):
@@ -37,7 +37,7 @@ class TestSchemaToVrtMapper(TestCase):
3737
def setUpClass(cls) -> None:
3838
super().setUpClass()
3939
cls.package = Package(_absolute_path("data/datapackage.json"))
40-
cls.mapper = SchemaToVrtMapper(cls.package)
40+
cls.mapper = TabularDataHelper(cls.package)
4141

4242
def test_write_vrt_file(self):
4343
with TemporaryDirectory() as tmp_dir:

0 commit comments

Comments
 (0)