Skip to content

Commit be7ff98

Browse files
committed
Parses and stores attribute data
Closes #10
1 parent e274f24 commit be7ff98

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
@@ -18,6 +18,7 @@
1818
from geonode.resource.manager import resource_manager
1919
from geonode.resource.models import ExecutionRequest
2020
from geonode.resource.enumerator import ExecutionRequestAction as exa
21+
from geonode.geoserver.helpers import set_attributes
2122
from geonode.utils import set_resource_default_links
2223

2324
from importer.handlers.common.vector import BaseVectorFileHandler
@@ -26,7 +27,7 @@
2627

2728
from frictionless import Package
2829

29-
from .mapper import SchemaToVrtMapper
30+
from .mapper import TabularDataHelper
3031
from .util import process_rows, validate
3132

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

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

105106
# update base file to be imported by ogr2ogr
@@ -192,6 +193,13 @@ def create_geonode_resource(
192193
set_resource_default_links(saved_dataset.get_real_instance(), saved_dataset)
193194
ResourceBase.objects.filter(alternate=alternate).update(dirty_state=False)
194195

196+
package_file = files.get("package_file")
197+
package = Package(package_file)
198+
199+
mapper = TabularDataHelper(package)
200+
attribute_map = mapper.parse_attribute_map(saved_dataset.name)
201+
set_attributes(saved_dataset, attribute_map, _overwrite)
202+
195203
saved_dataset.refresh_from_db()
196204
return saved_dataset
197205

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)