Skip to content

Commit 3207662

Browse files
Bring deployments helper methods into parity
1 parent 76ca9ca commit 3207662

5 files changed

Lines changed: 169 additions & 27 deletions

File tree

conSys/con_sys_api.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def make_request(self):
2424
print(f'PUT request: {self}')
2525
return put_request(self.url, self.body, self.headers, self.auth)
2626
case 'DELETE':
27+
print(f'DELETE request: {self}')
2728
return delete_request(self.url, self.params, self.headers, self.auth)
2829
case _:
2930
raise ValueError('Invalid request method')

conSys/part_1/deployments.py

Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
from typing import Union
2+
13
from pydantic import HttpUrl
24

35
from conSys.con_sys_api import ConnectedSystemsRequestBuilder
46
from conSys.constants import APITerms
57

68

7-
def list_all_deployments(server_addr: HttpUrl, api_root: str = APITerms.API.value):
9+
def list_all_deployments(server_addr: HttpUrl, api_root: str = APITerms.API.value, headers: dict = None):
810
"""
911
Lists all deployments in the server at the default API endpoint
1012
:return:
@@ -14,11 +16,14 @@ def list_all_deployments(server_addr: HttpUrl, api_root: str = APITerms.API.valu
1416
.with_api_root(api_root)
1517
.for_resource_type(APITerms.DEPLOYMENTS.value)
1618
.build_url_from_base()
19+
.with_headers(headers)
20+
.with_request_method('GET')
1721
.build())
18-
return api_request
22+
return api_request.make_request()
1923

2024

21-
def create_new_deployments(server_addr: HttpUrl, request_body: dict, api_root: str = APITerms.API.value):
25+
def create_new_deployments(server_addr: HttpUrl, request_body: Union[str, dict], api_root: str = APITerms.API.value,
26+
headers: dict = None):
2227
"""
2328
Create a new deployment as defined by the request body
2429
:return:
@@ -29,11 +34,14 @@ def create_new_deployments(server_addr: HttpUrl, request_body: dict, api_root: s
2934
.for_resource_type(APITerms.DEPLOYMENTS.value)
3035
.with_request_body(request_body)
3136
.build_url_from_base()
37+
.with_headers(headers)
38+
.with_request_method('POST')
3239
.build())
33-
return api_request
40+
return api_request.make_request()
3441

3542

36-
def retrieve_deployment_by_id(server_addr: HttpUrl, deployment_id: str, api_root: str = APITerms.API.value):
43+
def retrieve_deployment_by_id(server_addr: HttpUrl, deployment_id: str, api_root: str = APITerms.API.value,
44+
headers: dict = None):
3745
"""
3846
Retrieve a deployment by its ID
3947
:return:
@@ -44,12 +52,14 @@ def retrieve_deployment_by_id(server_addr: HttpUrl, deployment_id: str, api_root
4452
.for_resource_type(APITerms.DEPLOYMENTS.value)
4553
.with_resource_id(deployment_id)
4654
.build_url_from_base()
55+
.with_headers(headers)
56+
.with_request_method('GET')
4757
.build())
48-
return api_request
58+
return api_request.make_request()
4959

5060

51-
def update_deployment_by_id(server_addr: HttpUrl, deployment_id: str, request_body: dict,
52-
api_root: str = APITerms.API.value):
61+
def update_deployment_by_id(server_addr: HttpUrl, deployment_id: str, request_body: Union[str, dict],
62+
api_root: str = APITerms.API.value, headers: dict = None):
5363
"""
5464
Update a deployment by its ID
5565
:return:
@@ -61,11 +71,14 @@ def update_deployment_by_id(server_addr: HttpUrl, deployment_id: str, request_bo
6171
.with_resource_id(deployment_id)
6272
.with_request_body(request_body)
6373
.build_url_from_base()
74+
.with_headers(headers)
75+
.with_request_method('PUT')
6476
.build())
65-
return api_request
77+
return api_request.make_request()
6678

6779

68-
def delete_deployment_by_id(server_addr: HttpUrl, deployment_id: str, api_root: str = APITerms.API.value):
80+
def delete_deployment_by_id(server_addr: HttpUrl, deployment_id: str, api_root: str = APITerms.API.value,
81+
headers: dict = None):
6982
"""
7083
Delete a deployment by its ID
7184
:return:
@@ -76,11 +89,14 @@ def delete_deployment_by_id(server_addr: HttpUrl, deployment_id: str, api_root:
7689
.for_resource_type(APITerms.DEPLOYMENTS.value)
7790
.with_resource_id(deployment_id)
7891
.build_url_from_base()
92+
.with_headers(headers)
93+
.with_request_method('DELETE')
7994
.build())
8095
return api_request
8196

8297

83-
def list_deployed_systems(server_addr: HttpUrl, deployment_id, api_root: str = APITerms.API.value):
98+
def list_deployed_systems(server_addr: HttpUrl, deployment_id, api_root: str = APITerms.API.value,
99+
headers: dict = None):
84100
"""
85101
Lists all deployed systems in the server at the default API endpoint
86102
:return:
@@ -92,12 +108,14 @@ def list_deployed_systems(server_addr: HttpUrl, deployment_id, api_root: str = A
92108
.with_resource_id(deployment_id)
93109
.for_sub_resource_type(APITerms.SYSTEMS.value)
94110
.build_url_from_base()
111+
.with_headers(headers)
112+
.with_request_method('GET')
95113
.build())
96-
return api_request
114+
return api_request.make_request()
97115

98116

99117
def add_systems_to_deployment(server_addr: HttpUrl, deployment_id: str, uri_list: str,
100-
api_root: str = APITerms.API.value):
118+
api_root: str = APITerms.API.value, headers: dict = None):
101119
"""
102120
Lists all systems in the server at the default API endpoint
103121
:return:
@@ -110,12 +128,14 @@ def add_systems_to_deployment(server_addr: HttpUrl, deployment_id: str, uri_list
110128
.for_sub_resource_type(APITerms.SYSTEMS.value)
111129
.with_request_body(uri_list)
112130
.build_url_from_base()
131+
.with_headers(headers)
132+
.with_request_method('POST')
113133
.build())
114-
return api_request
134+
return api_request.make_request()
115135

116136

117137
def retrieve_deployed_system_by_id(server_addr: HttpUrl, deployment_id: str, system_id: str,
118-
api_root: str = APITerms.API.value):
138+
api_root: str = APITerms.API.value, headers: dict = None):
119139
"""
120140
Retrieves a system by its id
121141
:return:
@@ -130,12 +150,14 @@ def retrieve_deployed_system_by_id(server_addr: HttpUrl, deployment_id: str, sys
130150
.for_sub_resource_type(APITerms.SYSTEMS.value)
131151
.with_secondary_resource_id(system_id)
132152
.build_url_from_base()
153+
.with_headers(headers)
154+
.with_request_method('GET')
133155
.build())
134-
return api_request
156+
return api_request.make_request()
135157

136158

137159
def update_deployed_system_by_id(server_addr: HttpUrl, deployment_id: str, system_id: str, request_body: dict,
138-
api_root: str = APITerms.API.value):
160+
api_root: str = APITerms.API.value, headers: dict = None):
139161
"""
140162
Update a system by its ID
141163
:return:
@@ -149,13 +171,15 @@ def update_deployed_system_by_id(server_addr: HttpUrl, deployment_id: str, syste
149171
.with_secondary_resource_id(system_id)
150172
.with_request_body(request_body)
151173
.build_url_from_base()
174+
.with_headers(headers)
175+
.with_request_method('PUT')
152176
.build())
153177

154178
return api_request
155179

156180

157181
def delete_deployed_system_by_id(server_addr: HttpUrl, deployment_id: str, system_id: str,
158-
api_root: str = APITerms.API.value):
182+
api_root: str = APITerms.API.value, headers: dict = None):
159183
"""
160184
Delete a system by its ID
161185
:return:
@@ -168,11 +192,14 @@ def delete_deployed_system_by_id(server_addr: HttpUrl, deployment_id: str, syste
168192
.for_sub_resource_type(APITerms.SYSTEMS.value)
169193
.with_secondary_resource_id(system_id)
170194
.build_url_from_base()
195+
.with_headers(headers)
196+
.with_request_method('DELETE')
171197
.build())
172-
return api_request
198+
return api_request.make_request()
173199

174200

175-
def list_deployments_of_specific_system(server_addr: HttpUrl, system_id: str, api_root: str = APITerms.API.value):
201+
def list_deployments_of_specific_system(server_addr: HttpUrl, system_id: str, api_root: str = APITerms.API.value,
202+
headers: dict = None):
176203
"""
177204
Lists all deployments of a specific system in the server at the default API endpoint
178205
:return:
@@ -184,4 +211,7 @@ def list_deployments_of_specific_system(server_addr: HttpUrl, system_id: str, ap
184211
.with_resource_id(system_id)
185212
.for_sub_resource_type(APITerms.DEPLOYMENTS.value)
186213
.build_url_from_base()
214+
.with_headers(headers)
215+
.with_request_method('GET')
187216
.build())
217+
return api_request.make_request()

conSys/part_1/systems.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def update_system_description(server_addr: HttpUrl, system_id: str, request_body
123123
return resp
124124

125125

126-
def delete_system_by_id(server_addr: HttpUrl, system_id: str, api_root: str = APITerms.API.value):
126+
def delete_system_by_id(server_addr: HttpUrl, system_id: str, api_root: str = APITerms.API.value, headers: dict = None):
127127
"""
128128
Deletes a system by its id
129129
:return:
@@ -134,9 +134,10 @@ def delete_system_by_id(server_addr: HttpUrl, system_id: str, api_root: str = AP
134134
.for_resource_type(APITerms.SYSTEMS.value)
135135
.with_resource_id(system_id)
136136
.build_url_from_base()
137+
.with_headers(headers)
138+
.with_request_method('DELETE')
137139
.build())
138-
resp = requests.delete(api_request.url, params=api_request.body, headers=api_request.headers)
139-
return resp
140+
return api_request.make_request()
140141

141142

142143
def list_system_components(server_addr: HttpUrl, system_id: str, api_root: str = APITerms.API.value):

conSys/request_bodies.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from pydantic import BaseModel, HttpUrl, Field, model_serializer, RootModel, SerializeAsAny
44

5+
from conSys import Geometry
56
from conSys.datamodels.datastreams import DatastreamSchema
67
from conSys.sensor_ml.sml import TypeOf
78
from conSys.constants import DatastreamResultTypes
@@ -14,7 +15,7 @@ class GeoJSONBody(BaseModel):
1415
type: str
1516
id: str
1617
properties: dict = None
17-
geometry: dict = None
18+
geometry: Geometry = None
1819
bbox: list = None
1920
links: list = None
2021

tests/test_script_full_suite.py

Lines changed: 112 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import random
22

33
from conSys import Systems, SamplingFeatures, Datastreams, SmlJSONBody, GeoJSONBody, model_utils, \
4-
DatastreamBodyJSON, ObservationFormat, URI
4+
DatastreamBodyJSON, ObservationFormat, URI, Procedures, Geometry, Deployments
55
from conSys.datamodels.datastreams import SWEDatastreamSchema
66
from conSys.datamodels.encoding import JSONEncoding
77
from conSys.datamodels.swe_components import BooleanSchema, TimeSchema, DataRecordSchema
@@ -107,6 +107,63 @@ def test_update_systems():
107107
headers=sml_json_headers)
108108

109109

110+
"""
111+
Deployments Section
112+
"""
113+
114+
115+
def test_create_deployments():
116+
deployment = GeoJSONBody(type='Feature', id=str(random.randint(1000, 9999)), properties={
117+
"featureType": "http://www.w3.org/ns/ssn/Deployment",
118+
"uid": "urn:test:client:geo-deployment",
119+
"name": "Test Deployment - GeoJSON",
120+
"description": "A Test Deployment inserted from the Python CSAPI Client",
121+
"validTime": ["2024-01-01T00:00:00Z", "2024-12-31T23:59:59Z"]
122+
}, geometry=Geometry(type="Point", coordinates=[-80.0, 35.0]))
123+
resp = Deployments.create_new_deployments(server_url, deployment.model_dump_json(exclude_none=True, by_alias=True),
124+
headers=geo_json_headers)
125+
print(resp)
126+
127+
128+
def test_list_all_deployments():
129+
deployments = Deployments.list_all_deployments(server_url)
130+
print(deployments.json())
131+
132+
133+
def test_retrieve_deployment_by_id():
134+
deployments = Deployments.list_all_deployments(server_url)
135+
136+
deployment = Deployments.retrieve_deployment_by_id(server_url, deployments.json()['items'][0]['id'])
137+
print(deployment.json())
138+
assert deployment.json()['id'] == deployments.json()['items'][0]['id']
139+
140+
141+
def test_update_deployment_by_id():
142+
deployments = Deployments.list_all_deployments(server_url)
143+
144+
deployment = GeoJSONBody(type='Feature', id=str(random.randint(1000, 9999)), properties={
145+
"featureType": "http://www.w3.org/ns/ssn/Deployment",
146+
"uid": "urn:test:client:geo-deployment",
147+
"name": "Test Deployment - GeoJSON (Updated)",
148+
"description": "A Test Deployment updated from the Python CSAPI Client",
149+
"validTime": ["2024-01-01T00:00:00Z", "2024-12-31T23:59:59Z"]
150+
}, geometry=Geometry(type="Point", coordinates=[-80.0, 35.0]))
151+
resp = Deployments.update_deployment_by_id(server_url, deployments.json()['items'][0]['id'],
152+
deployment.model_dump_json(exclude_none=True, by_alias=True),
153+
headers=geo_json_headers)
154+
print(resp)
155+
156+
157+
def test_add_systems_to_deployment():
158+
deployments = Deployments.list_all_deployments(server_url)
159+
systems = Systems.list_all_systems(server_url, headers=json_headers)
160+
system_link = {'href': f"{server_url}/api/systems/{systems['items'][0]['id']}"}
161+
# uri_list = str(system_links).replace("'", "\"")
162+
resp = Deployments.add_systems_to_deployment(server_url, deployments.json()['items'][0]['id'], str(system_link),
163+
headers=geo_json_headers)
164+
print(resp)
165+
166+
110167
"""
111168
Procedure Tests
112169
"""
@@ -224,17 +281,69 @@ def test_create_datastreams():
224281
headers=json_headers)
225282
print(resp)
226283

284+
"""
285+
Command and Control Channel Section
286+
"""
287+
def test_create_control_channel():
288+
geo_json_body = GeoJSONBody(type='Feature', id=str(random.randint(1000, 9999)),
289+
description="Test Insertion of Control Channel via GEOJSON",
290+
properties={
291+
"featureType": "http://www.w3.org/ns/ssn/ControlChannel",
292+
"name": f'Test Control Channel - GeoJSON',
293+
"uid": f'urn:test:client:geo-cc',
294+
"description": "A Test Control Channel inserted from the Python CSAPI Client",
295+
})
296+
resp = ControlChannels.create_new_control_channels(server_url, geo_json_body.model_dump_json(exclude_none=True, by_alias=True),
297+
headers=geo_json_headers)
298+
227299

228300
"""
229301
Teardown Section
230302
"""
231303

304+
# def test_delete_all_collections():
305+
# pass
306+
#
307+
#
308+
# def test_delete_all_sampling_features():
309+
# sf_list = SamplingFeatures.list_all_sampling_features(server_url).json()
310+
# print(sf_list)
311+
#
312+
# for sf in sf_list["items"]:
313+
# print(sf)
314+
#
315+
# SamplingFeatures.delete_sampling_feature_by_id(server_url, sf["id"])
316+
# print(f"Deleted sampling feature {sf['id']}")
317+
#
318+
#
319+
# def test_delete_all_datastreams():
320+
# ds_list = Datastreams.list_all_datastreams(server_url).json()
321+
# print(ds_list)
322+
#
323+
# for ds in ds_list["items"]:
324+
# print(ds)
325+
#
326+
# Datastreams.delete_datastream_by_id(server_url, ds["id"])
327+
# print(f"Deleted datastream {ds['id']}")
328+
#
329+
#
330+
# def test_delete_all_procedures():
331+
# proc_list = Procedures.list_all_procedures(server_url).json()
332+
# print(proc_list)
333+
#
334+
# for proc in proc_list["items"]:
335+
# print(proc)
336+
#
337+
# Procedures.delete_procedure_by_id(server_url, proc["id"])
338+
# print(f"Deleted procedure {proc['id']}")
339+
#
340+
#
232341
# def test_delete_all_systems():
233-
# sys_list = Systems.list_all_systems("http://localhost:8181/sensorhub")["items"]
342+
# sys_list = Systems.list_all_systems(server_url)["items"]
234343
# print(sys_list)
235344
#
236345
# for system in sys_list:
237346
# print(system)
238347
#
239-
# Systems.delete_system_by_id("http://localhost:8181/sensorhub", system["id"])
348+
# Systems.delete_system_by_id(server_url, system["id"])
240349
# print(f"Deleted system {system['id']}")

0 commit comments

Comments
 (0)