Coverage for brodata / gmn.py: 95%

43 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-20 14:37 +0000

1import logging 

2from functools import partial 

3 

4import pandas as pd 

5 

6from . import bro 

7 

8logger = logging.getLogger(__name__) 

9 

10 

11class GroundwaterMonitoringNetwork(bro.FileOrUrl): 

12 """Class to represent a Groundwater Monitoring Network (GMN) from the BRO.""" 

13 

14 _rest_url = "https://publiek.broservices.nl/gm/gmn/v1" 

15 _xmlns = "http://www.broservices.nl/xsd/dsgmn/1.0" 

16 

17 def _read_contents(self, tree): 

18 ns = { 

19 "brocom": "http://www.broservices.nl/xsd/brocommon/3.0", 

20 "gml": "http://www.opengis.net/gml/3.2", 

21 "gmncom": "http://www.broservices.nl/xsd/gmncommon/1.0", 

22 "xmlns": self._xmlns, 

23 } 

24 gmn = self._get_main_object(tree, "GMN_PO", ns) 

25 for key in gmn.attrib: 

26 setattr(self, key.split("}", 1)[1], gmn.attrib[key]) 

27 for child in gmn: 

28 key = self._get_tag(child) 

29 if len(child) == 0: 

30 setattr(self, key, child.text) 

31 elif key == "monitoringNetHistory": 

32 for grandchild in child: 

33 key = self._get_tag(grandchild) 

34 if key == "startDateMonitoring": 

35 setattr(self, key, self._read_date(grandchild)) 

36 else: 

37 self._warn_unknown_tag(key) 

38 elif key == "registrationHistory": 

39 self._read_children_of_children(child) 

40 elif key == "measuringPoint": 

41 if not hasattr(self, key): 

42 self.measuringPoint = [] 

43 point = {} 

44 self._read_children_of_children(child, point, to_int="tubeNumber") 

45 self.measuringPoint.append(point) 

46 else: 

47 self._warn_unknown_tag(key) 

48 

49 if hasattr(self, "measuringPoint"): 

50 self.measuringPoint = pd.DataFrame(self.measuringPoint) 

51 if ( 

52 "broId" in self.measuringPoint.columns 

53 and "tubeNumber" in self.measuringPoint.columns 

54 ): 

55 self.measuringPoint = self.measuringPoint.set_index( 

56 ["broId", "tubeNumber"] 

57 ) 

58 if "date" in self.measuringPoint.columns: 

59 self.measuringPoint["date"] = pd.to_datetime( 

60 self.measuringPoint["date"] 

61 ) 

62 

63 

64cl = GroundwaterMonitoringNetwork 

65 

66get_bro_ids_of_bronhouder = partial(bro._get_bro_ids_of_bronhouder, cl) 

67get_bro_ids_of_bronhouder.__doc__ = bro._get_bro_ids_of_bronhouder.__doc__ 

68 

69get_data_for_bro_ids = partial(bro._get_data_for_bro_ids, cl) 

70get_data_for_bro_ids.__doc__ = bro._get_data_for_bro_ids.__doc__