hydroserverpy 0.2.3__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of hydroserverpy might be problematic. Click here for more details.

Files changed (61) hide show
  1. hydroserverpy/__init__.py +6 -15
  2. hydroserverpy/core/endpoints/__init__.py +9 -0
  3. hydroserverpy/core/endpoints/base.py +133 -0
  4. hydroserverpy/core/endpoints/data_loaders.py +92 -0
  5. hydroserverpy/core/endpoints/data_sources.py +92 -0
  6. hydroserverpy/core/endpoints/datastreams.py +188 -0
  7. hydroserverpy/core/endpoints/observed_properties.py +93 -0
  8. hydroserverpy/core/endpoints/processing_levels.py +93 -0
  9. hydroserverpy/core/endpoints/result_qualifiers.py +93 -0
  10. hydroserverpy/core/endpoints/sensors.py +93 -0
  11. hydroserverpy/core/endpoints/things.py +240 -0
  12. hydroserverpy/core/endpoints/units.py +93 -0
  13. hydroserverpy/{components → core/schemas}/__init__.py +1 -2
  14. hydroserverpy/core/schemas/base.py +117 -0
  15. hydroserverpy/core/schemas/data_loaders.py +71 -0
  16. hydroserverpy/core/schemas/data_sources.py +206 -0
  17. hydroserverpy/core/schemas/datastreams.py +299 -0
  18. hydroserverpy/core/schemas/observed_properties.py +35 -0
  19. hydroserverpy/core/schemas/processing_levels.py +27 -0
  20. hydroserverpy/core/schemas/result_qualifiers.py +23 -0
  21. hydroserverpy/core/schemas/sensors.py +53 -0
  22. hydroserverpy/core/schemas/things.py +309 -0
  23. hydroserverpy/core/schemas/units.py +30 -0
  24. hydroserverpy/core/service.py +186 -0
  25. hydroserverpy/etl/__init__.py +0 -0
  26. hydroserverpy/{etl.py → etl/service.py} +32 -47
  27. hydroserverpy/quality/__init__.py +1 -0
  28. hydroserverpy/quality/service.py +391 -0
  29. {hydroserverpy-0.2.3.dist-info → hydroserverpy-0.3.0.dist-info}/METADATA +6 -3
  30. hydroserverpy-0.3.0.dist-info/RECORD +36 -0
  31. {hydroserverpy-0.2.3.dist-info → hydroserverpy-0.3.0.dist-info}/WHEEL +1 -1
  32. hydroserverpy/components/data_loaders.py +0 -67
  33. hydroserverpy/components/data_sources.py +0 -98
  34. hydroserverpy/components/datastreams.py +0 -47
  35. hydroserverpy/components/observed_properties.py +0 -48
  36. hydroserverpy/components/processing_levels.py +0 -48
  37. hydroserverpy/components/result_qualifiers.py +0 -48
  38. hydroserverpy/components/sensors.py +0 -48
  39. hydroserverpy/components/things.py +0 -48
  40. hydroserverpy/components/units.py +0 -48
  41. hydroserverpy/components/users.py +0 -28
  42. hydroserverpy/main.py +0 -62
  43. hydroserverpy/models.py +0 -218
  44. hydroserverpy/schemas/data_loaders.py +0 -27
  45. hydroserverpy/schemas/data_sources.py +0 -58
  46. hydroserverpy/schemas/datastreams.py +0 -56
  47. hydroserverpy/schemas/observed_properties.py +0 -33
  48. hydroserverpy/schemas/processing_levels.py +0 -33
  49. hydroserverpy/schemas/result_qualifiers.py +0 -32
  50. hydroserverpy/schemas/sensors.py +0 -39
  51. hydroserverpy/schemas/things.py +0 -108
  52. hydroserverpy/schemas/units.py +0 -32
  53. hydroserverpy/schemas/users.py +0 -28
  54. hydroserverpy/service.py +0 -170
  55. hydroserverpy/utils.py +0 -37
  56. hydroserverpy-0.2.3.dist-info/RECORD +0 -35
  57. /hydroserverpy/{schemas → core}/__init__.py +0 -0
  58. /hydroserverpy/{exceptions.py → etl/exceptions.py} +0 -0
  59. {hydroserverpy-0.2.3.dist-info → hydroserverpy-0.3.0.dist-info}/LICENSE +0 -0
  60. {hydroserverpy-0.2.3.dist-info → hydroserverpy-0.3.0.dist-info}/top_level.txt +0 -0
  61. {hydroserverpy-0.2.3.dist-info → hydroserverpy-0.3.0.dist-info}/zip-safe +0 -0
@@ -1,98 +0,0 @@
1
- import tempfile
2
- from urllib.request import urlopen
3
- from uuid import UUID
4
- from typing import List
5
- from hydroserverpy.schemas.data_sources import DataSourceGetResponse, DataSourcePostBody, DataSourcePatchBody
6
- from hydroserverpy.schemas.datastreams import DatastreamGetResponse
7
- from hydroserverpy.etl import HydroServerETL
8
-
9
-
10
- class DataSource:
11
-
12
- def __init__(self, service):
13
- self._service = service
14
-
15
- def list(self):
16
-
17
- return self._service.get(
18
- 'data-sources',
19
- response_schema=List[DataSourceGetResponse]
20
- )
21
-
22
- def list_datastreams(self, data_source_id: UUID):
23
-
24
- return self._service.get(
25
- f'data-sources/{data_source_id}/datastreams',
26
- response_schema=List[DatastreamGetResponse]
27
- )
28
-
29
- def get(self, data_source_id: UUID):
30
-
31
- return self._service.get(
32
- f'data-sources/{data_source_id}',
33
- response_schema=DataSourceGetResponse
34
- )
35
-
36
- def create(self, data_source_body: DataSourcePostBody):
37
-
38
- return self._service.post(
39
- f'data-sources',
40
- headers={'Content-type': 'application/json'},
41
- data=data_source_body.json(by_alias=True),
42
- response_schema=DataSourceGetResponse
43
- )
44
-
45
- def update(self, data_source_id: UUID, data_source_body: DataSourcePatchBody):
46
- return self._service.patch(
47
- f'data-sources/{str(data_source_id)}',
48
- headers={'Content-type': 'application/json'},
49
- data=data_source_body.json(exclude_unset=True, by_alias=True),
50
- response_schema=DataSourceGetResponse
51
- )
52
-
53
- def delete(self, data_source_id: UUID):
54
-
55
- return self._service.delete(
56
- f'data-sources/{str(data_source_id)}'
57
- )
58
-
59
- def load_data(self, data_source_id: UUID):
60
-
61
- data_source_response = self.get(data_source_id=data_source_id)
62
-
63
- if data_source_response.data:
64
- data_source = data_source_response.data
65
- else:
66
- return None
67
-
68
- datastreams_response = self.list_datastreams(data_source_id=data_source_id)
69
- datastreams = datastreams_response.data
70
-
71
- if data_source.path:
72
- with open(data_source.path) as data_file:
73
- hs_etl = HydroServerETL(
74
- service=self._service,
75
- data_file=data_file,
76
- data_source=data_source,
77
- datastreams=datastreams
78
- )
79
- hs_etl.run()
80
- elif data_source.url:
81
- with tempfile.NamedTemporaryFile(mode='w') as temp_file:
82
- with urlopen(data_source.url) as response:
83
- chunk_size = 1024 * 1024 * 10 # Use a 10mb chunk size.
84
- while True:
85
- chunk = response.read(chunk_size)
86
- if not chunk:
87
- break
88
- temp_file.write(chunk)
89
- temp_file.seek(0)
90
- hs_etl = HydroServerETL(
91
- service=self._service,
92
- data_file=temp_file,
93
- data_source=data_source,
94
- datastreams=datastreams
95
- )
96
- hs_etl.run()
97
- else:
98
- return None
@@ -1,47 +0,0 @@
1
- from uuid import UUID
2
- from typing import List
3
- from hydroserverpy.schemas.datastreams import DatastreamGetResponse, DatastreamPostBody, DatastreamPatchBody
4
-
5
-
6
- class Datastream:
7
-
8
- def __init__(self, service):
9
- self._service = service
10
-
11
- def list(self):
12
-
13
- return self._service.get(
14
- 'datastreams',
15
- response_schema=List[DatastreamGetResponse]
16
- )
17
-
18
- def get(self, datastream_id: str):
19
-
20
- return self._service.get(
21
- f'datastreams/{datastream_id}',
22
- response_schema=DatastreamGetResponse
23
- )
24
-
25
- def create(self, datastream_body: DatastreamPostBody):
26
-
27
- return self._service.post(
28
- f'datastreams',
29
- headers={'Content-type': 'application/json'},
30
- data=datastream_body.json(by_alias=True),
31
- response_schema=DatastreamGetResponse
32
- )
33
-
34
- def update(self, datastream_id: UUID, datastream_body: DatastreamPatchBody):
35
-
36
- return self._service.patch(
37
- f'datastreams/{str(datastream_id)}',
38
- headers={'Content-type': 'application/json'},
39
- data=datastream_body.json(exclude_unset=True, by_alias=True),
40
- response_schema=DatastreamGetResponse
41
- )
42
-
43
- def delete(self, datastream_id: UUID):
44
-
45
- return self._service.delete(
46
- f'datastreams/{str(datastream_id)}'
47
- )
@@ -1,48 +0,0 @@
1
- from typing import List
2
- from uuid import UUID
3
- from hydroserverpy.schemas.observed_properties import ObservedPropertyGetResponse, ObservedPropertyPostBody, \
4
- ObservedPropertyPatchBody
5
-
6
-
7
- class ObservedProperty:
8
-
9
- def __init__(self, service):
10
- self._service = service
11
-
12
- def list(self):
13
-
14
- return self._service.get(
15
- 'observed-properties',
16
- response_schema=List[ObservedPropertyGetResponse]
17
- )
18
-
19
- def get(self, observed_property_id: UUID):
20
-
21
- return self._service.get(
22
- f'observed-properties/{observed_property_id}',
23
- response_schema=ObservedPropertyGetResponse
24
- )
25
-
26
- def create(self, observed_property_body: ObservedPropertyPostBody):
27
-
28
- return self._service.post(
29
- f'observed-properties',
30
- headers={'Content-type': 'application/json'},
31
- data=observed_property_body.json(by_alias=True),
32
- response_schema=ObservedPropertyGetResponse
33
- )
34
-
35
- def update(self, observed_property_id: UUID, observed_property_body: ObservedPropertyPatchBody):
36
-
37
- return self._service.patch(
38
- f'observed-properties/{str(observed_property_id)}',
39
- headers={'Content-type': 'application/json'},
40
- data=observed_property_body.json(exclude_unset=True, by_alias=True),
41
- response_schema=ObservedPropertyGetResponse
42
- )
43
-
44
- def delete(self, observed_property_id: UUID):
45
-
46
- return self._service.delete(
47
- f'observed-properties/{str(observed_property_id)}'
48
- )
@@ -1,48 +0,0 @@
1
- from typing import List
2
- from uuid import UUID
3
- from hydroserverpy.schemas.processing_levels import ProcessingLevelGetResponse, ProcessingLevelPostBody, \
4
- ProcessingLevelPatchBody
5
-
6
-
7
- class ProcessingLevel:
8
-
9
- def __init__(self, service):
10
- self._service = service
11
-
12
- def list(self):
13
-
14
- return self._service.get(
15
- 'processing-levels',
16
- response_schema=List[ProcessingLevelGetResponse]
17
- )
18
-
19
- def get(self, processing_level_id: str):
20
-
21
- return self._service.get(
22
- f'processing-levels/{processing_level_id}',
23
- response_schema=ProcessingLevelGetResponse
24
- )
25
-
26
- def create(self, processing_level_body: ProcessingLevelPostBody):
27
-
28
- return self._service.post(
29
- f'processing-levels',
30
- headers={'Content-type': 'application/json'},
31
- data=processing_level_body.json(by_alias=True),
32
- response_schema=ProcessingLevelGetResponse
33
- )
34
-
35
- def update(self, processing_level_id: UUID, processing_level_body: ProcessingLevelPatchBody):
36
-
37
- return self._service.patch(
38
- f'processing-levels/{str(processing_level_id)}',
39
- headers={'Content-type': 'application/json'},
40
- data=processing_level_body.json(exclude_unset=True, by_alias=True),
41
- response_schema=ProcessingLevelGetResponse
42
- )
43
-
44
- def delete(self, processing_level_id: UUID):
45
-
46
- return self._service.delete(
47
- f'processing-levels/{str(processing_level_id)}'
48
- )
@@ -1,48 +0,0 @@
1
- from typing import List
2
- from uuid import UUID
3
- from hydroserverpy.schemas.result_qualifiers import ResultQualifierGetResponse, ResultQualifierPostBody, \
4
- ResultQualifierPatchBody
5
-
6
-
7
- class ResultQualifier:
8
-
9
- def __init__(self, service):
10
- self._service = service
11
-
12
- def list(self):
13
-
14
- return self._service.get(
15
- 'result-qualifiers',
16
- response_schema=List[ResultQualifierGetResponse]
17
- )
18
-
19
- def get(self, result_qualifier_id: str):
20
-
21
- return self._service.get(
22
- f'result-qualifiers/{result_qualifier_id}',
23
- response_schema=ResultQualifierGetResponse
24
- )
25
-
26
- def create(self, result_qualifier_body: ResultQualifierPostBody):
27
-
28
- return self._service.post(
29
- f'result-qualifiers',
30
- headers={'Content-type': 'application/json'},
31
- data=result_qualifier_body.json(by_alias=True),
32
- response_schema=ResultQualifierGetResponse
33
- )
34
-
35
- def update(self, result_qualifier_id: UUID, result_qualifier_body: ResultQualifierPatchBody):
36
-
37
- return self._service.patch(
38
- f'result-qualifiers/{str(result_qualifier_id)}',
39
- headers={'Content-type': 'application/json'},
40
- data=result_qualifier_body.json(exclude_unset=True, by_alias=True),
41
- response_schema=ResultQualifierGetResponse
42
- )
43
-
44
- def delete(self, result_qualifier_id: UUID):
45
-
46
- return self._service.delete(
47
- f'result-qualifiers/{str(result_qualifier_id)}'
48
- )
@@ -1,48 +0,0 @@
1
- from typing import List
2
- from uuid import UUID
3
- from hydroserverpy.schemas.sensors import SensorGetResponse, SensorPostBody, \
4
- SensorPatchBody
5
-
6
-
7
- class Sensor:
8
-
9
- def __init__(self, service):
10
- self._service = service
11
-
12
- def list(self):
13
-
14
- return self._service.get(
15
- 'sensors',
16
- response_schema=List[SensorGetResponse]
17
- )
18
-
19
- def get(self, sensor_id: str):
20
-
21
- return self._service.get(
22
- f'sensors/{sensor_id}',
23
- response_schema=SensorGetResponse
24
- )
25
-
26
- def create(self, sensor_body: SensorPostBody):
27
-
28
- return self._service.post(
29
- f'sensors',
30
- headers={'Content-type': 'application/json'},
31
- data=sensor_body.json(by_alias=True),
32
- response_schema=SensorGetResponse
33
- )
34
-
35
- def update(self, sensor_id: UUID, sensor_body: SensorPatchBody):
36
-
37
- return self._service.patch(
38
- f'sensors/{str(sensor_id)}',
39
- headers={'Content-type': 'application/json'},
40
- data=sensor_body.json(exclude_unset=True, by_alias=True),
41
- response_schema=SensorGetResponse
42
- )
43
-
44
- def delete(self, sensor_id: UUID):
45
-
46
- return self._service.delete(
47
- f'sensors/{str(sensor_id)}'
48
- )
@@ -1,48 +0,0 @@
1
- from typing import List
2
- from uuid import UUID
3
- from hydroserverpy.schemas.things import ThingGetResponse, ThingPostBody, \
4
- ThingPatchBody
5
-
6
-
7
- class Thing:
8
-
9
- def __init__(self, service):
10
- self._service = service
11
-
12
- def list(self):
13
-
14
- return self._service.get(
15
- 'things',
16
- response_schema=List[ThingGetResponse]
17
- )
18
-
19
- def get(self, thing_id: str):
20
-
21
- return self._service.get(
22
- f'things/{thing_id}',
23
- response_schema=ThingGetResponse
24
- )
25
-
26
- def create(self, thing_body: ThingPostBody):
27
-
28
- return self._service.post(
29
- f'things',
30
- headers={'Content-type': 'application/json'},
31
- data=thing_body.json(by_alias=True),
32
- response_schema=ThingGetResponse
33
- )
34
-
35
- def update(self, thing_id: UUID, thing_body: ThingPatchBody):
36
-
37
- return self._service.patch(
38
- f'things/{str(thing_id)}',
39
- headers={'Content-type': 'application/json'},
40
- data=thing_body.json(exclude_unset=True, by_alias=True),
41
- response_schema=ThingGetResponse
42
- )
43
-
44
- def delete(self, thing_id: UUID):
45
-
46
- return self._service.delete(
47
- f'things/{str(thing_id)}'
48
- )
@@ -1,48 +0,0 @@
1
- from typing import List
2
- from uuid import UUID
3
- from hydroserverpy.schemas.units import UnitGetResponse, UnitPostBody, \
4
- UnitPatchBody
5
-
6
-
7
- class Unit:
8
-
9
- def __init__(self, service):
10
- self._service = service
11
-
12
- def list(self):
13
-
14
- return self._service.get(
15
- 'units',
16
- response_schema=List[UnitGetResponse]
17
- )
18
-
19
- def get(self, unit_id: str):
20
-
21
- return self._service.get(
22
- f'units/{unit_id}',
23
- response_schema=UnitGetResponse
24
- )
25
-
26
- def create(self, unit_body: UnitPostBody):
27
-
28
- return self._service.post(
29
- f'units',
30
- headers={'Content-type': 'application/json'},
31
- data=unit_body.json(by_alias=True),
32
- response_schema=UnitGetResponse
33
- )
34
-
35
- def update(self, unit_id: UUID, unit_body: UnitPatchBody):
36
-
37
- return self._service.patch(
38
- f'units/{str(unit_id)}',
39
- headers={'Content-type': 'application/json'},
40
- data=unit_body.json(exclude_unset=True, by_alias=True),
41
- response_schema=UnitGetResponse
42
- )
43
-
44
- def delete(self, unit_id: UUID):
45
-
46
- return self._service.delete(
47
- f'units/{str(unit_id)}'
48
- )
@@ -1,28 +0,0 @@
1
- from pydantic import BaseModel, Field
2
- from typing import Optional
3
-
4
-
5
- class Organization(BaseModel):
6
- code: str
7
- name: str
8
- description: Optional[str]
9
- type: str
10
- link: Optional[str]
11
-
12
-
13
- class UserResponse(BaseModel):
14
- email: str
15
- first_name: str = Field(..., alias='firstName')
16
- last_name: str = Field(..., alias='lastName')
17
- middle_name: Optional[str] = Field(None, alias='middleName')
18
- phone: Optional[str]
19
- address: Optional[str]
20
- type: str
21
- link: Optional[str]
22
- organization: Optional[Organization]
23
-
24
-
25
- class User:
26
-
27
- def __init__(self, service):
28
- self._service = service
hydroserverpy/main.py DELETED
@@ -1,62 +0,0 @@
1
- from typing import Optional, Union, Tuple
2
- from pydantic import AnyHttpUrl
3
- from hydroserverpy.service import BaseService
4
- from hydroserverpy.components import DataLoader, DataSource, Datastream, ObservedProperty, ProcessingLevel, \
5
- ResultQualifier, Sensor, Thing, Unit, User
6
-
7
-
8
- class HydroServer(BaseService):
9
-
10
- def __init__(
11
- self,
12
- host: Union[AnyHttpUrl, str],
13
- auth: Optional[Tuple[str, str]] = None,
14
- sta_path: str = 'api/sensorthings/v1.1',
15
- api_path: str = 'api/data'
16
- ):
17
- super().__init__(
18
- host=host,
19
- auth=auth,
20
- sta_path=sta_path,
21
- api_path=api_path
22
- )
23
-
24
- @property
25
- def data_loaders(self):
26
- return DataLoader(self)
27
-
28
- @property
29
- def data_sources(self):
30
- return DataSource(self)
31
-
32
- @property
33
- def datastreams(self):
34
- return Datastream(self)
35
-
36
- @property
37
- def observed_properties(self):
38
- return ObservedProperty(self)
39
-
40
- @property
41
- def processing_levels(self):
42
- return ProcessingLevel(self)
43
-
44
- @property
45
- def result_qualifiers(self):
46
- return ResultQualifier(self)
47
-
48
- @property
49
- def sensors(self):
50
- return Sensor(self)
51
-
52
- @property
53
- def things(self):
54
- return Thing(self)
55
-
56
- @property
57
- def units(self):
58
- return Unit(self)
59
-
60
- @property
61
- def users(self):
62
- return User(self)