Coverage for brodata / gpd.py: 83%
111 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-20 14:37 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-20 14:37 +0000
1import logging
2from functools import partial
3import pandas as pd
5from . import bro, util
7logger = logging.getLogger(__name__)
10class GroundwaterProductionDossier(bro.FileOrUrl):
11 """Class to represent a Groundwater Production Dossier (GPD) from the BRO."""
13 _rest_url = "https://publiek.broservices.nl/gu/gpd/v1"
14 _xmlns = "http://www.broservices.nl/xsd/dsgpd/1.0"
16 def _read_contents(self, tree):
17 ns = {
18 "brocom": "http://www.broservices.nl/xsd/brocommon/3.0",
19 "xmlns": self._xmlns,
20 }
22 gpd = self._get_main_object(tree, "GPD_O", ns)
24 for key in gpd.attrib:
25 setattr(self, key.split("}", 1)[1], gpd.attrib[key])
26 for child in gpd:
27 key = self._get_tag(child)
28 if len(child) == 0:
29 setattr(self, key, child.text)
30 elif key in ["registrationHistory", "lifespan"]:
31 self._read_children_of_children(child)
32 elif key == "report":
33 if not hasattr(self, "report"):
34 self.report = []
35 for grandchild in child:
36 key = self._get_tag(grandchild)
37 if key == "Report":
38 self.report.append(self._read_report(grandchild))
39 else:
40 self._warn_unknown_tag(key)
41 else:
42 self._warn_unknown_tag(key)
44 if hasattr(self, "report"):
45 self.report = pd.DataFrame(self.report)
46 if "reportId" in self.report.columns:
47 self.report = self.report.set_index("reportId")
48 if hasattr(self, "volumeSeries"):
49 self.volumeSeries = pd.DataFrame(self.volumeSeries)
50 for column in ["beginDate", "endDate"]:
51 if column in self.volumeSeries.columns:
52 self.volumeSeries[column] = pd.to_datetime(
53 self.volumeSeries[column]
54 )
55 if "volume" in self.volumeSeries.columns:
56 self.volumeSeries["volume"] = pd.to_numeric(self.volumeSeries["volume"])
58 def _read_report(self, node):
59 d = {}
60 for child in node:
61 key = self._get_tag(child)
62 if len(child) == 0:
63 d[key] = child.text
64 elif key == "reportPeriod":
65 for grandchild in child:
66 key = self._get_tag(grandchild)
67 if key in ["beginDate", "endDate"]:
68 d[key] = grandchild.text
69 else:
70 self._warn_unknown_tag(key)
71 elif key == "volumeSeries":
72 if not hasattr(self, "volumeSeries"):
73 self.volumeSeries = []
74 vs = self._read_volume_series(child)
75 vs["reportId"] = d["reportId"]
76 self.volumeSeries.append(vs)
78 elif key == "installationOrFacility":
79 for grandchild in child:
80 key = self._get_tag(grandchild)
81 if key == "InstallationOrFacility":
82 self._read_installation_facility(grandchild)
83 else:
84 self._warn_unknown_tag(key)
85 else:
86 self._warn_unknown_tag(key)
88 if "volumeSeries" in d:
89 d["volumeSeries"] = pd.DataFrame(d["volumeSeries"])
90 return d
92 def _read_volume_series(self, node):
93 d = {}
94 for child in node:
95 key = self._get_tag(child)
96 if len(child) == 0:
97 d[key] = child.text
98 elif key == "period":
99 for grandchild in child:
100 key = self._get_tag(grandchild)
101 if key in ["beginDate", "endDate"]:
102 d[key] = grandchild.text
103 else:
104 self._warn_unknown_tag(key)
105 return d
107 def _read_installation_facility(self, node):
108 for child in node:
109 key = child.tag.split("}", 1)[1]
110 if key == "relatedGroundwaterUsageFacility":
111 for grandchild in child:
112 key = self._get_tag(grandchild)
113 if key == "GroundwaterUsageFacility":
114 for greatgrandchild in grandchild:
115 key2 = greatgrandchild.tag.split("}", 1)[1]
116 if key2 == "broId":
117 setattr(self, key, greatgrandchild.text)
118 else:
119 util._warn_unknown_key(key2, self)
120 else:
121 self._warn_unknown_tag(key)
122 elif key == "relatedRealisedInstallation":
123 for grandchild in child:
124 key = self._get_tag(grandchild)
125 if key == "RealisedInstallation":
126 for greatgrandchild in grandchild:
127 key2 = greatgrandchild.tag.split("}", 1)[1]
128 if key2 == "broId":
129 setattr(self, key, greatgrandchild.text)
130 elif key2 == "realisedInstallationId":
131 setattr(self, key2, greatgrandchild.text)
132 else:
133 util._warn_unknown_key(key2, self)
134 else:
135 self._warn_unknown_tag(key)
136 else:
137 self._warn_unknown_tag(key)
140cl = GroundwaterProductionDossier
142get_bro_ids_of_bronhouder = partial(bro._get_bro_ids_of_bronhouder, cl)
143get_bro_ids_of_bronhouder.__doc__ = bro._get_bro_ids_of_bronhouder.__doc__
145get_data_for_bro_ids = partial(bro._get_data_for_bro_ids, cl)
146get_data_for_bro_ids.__doc__ = bro._get_data_for_bro_ids.__doc__