Skip to content

Commit df132f1

Browse files
committed
refactor: remove legacy "method" query parameter to path parameter
1 parent 130ffbd commit df132f1

File tree

7 files changed

+48
-53
lines changed

7 files changed

+48
-53
lines changed

src/onc/modules/_DataProductFile.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,13 @@ def __init__(self, dpRunId: int, index: str, baseUrl: str, token: str):
2323
self._retries = 0
2424
self._status = 202
2525
self._downloaded = False
26-
self._baseUrl = f"{baseUrl}api/dataProductDelivery"
26+
self._baseUrl = f"{baseUrl}api/dataProductDelivery/download"
2727
self._filePath = ""
2828
self._fileSize = 0
2929
self._runningTime = 0
3030
self._downloadingTime = 0
3131

3232
self._filters = {
33-
"method": "download",
3433
"token": token,
3534
"dpRunId": dpRunId,
3635
"index": index,

src/onc/modules/_MultiPage.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def getAllPages(self, service: str, url: str, filters: dict):
2323
"""
2424
# pop archivefiles extension
2525
extension = None
26-
if service == "archivefiles" and "extension" in filters:
26+
if service.startswith("archivefile") and "extension" in filters:
2727
extension = filters["extension"]
2828
del filters["extension"]
2929

@@ -84,7 +84,7 @@ def _doPageRequest(
8484
@param extension: Only provide for archivefiles filtering
8585
Returns a tuple (jsonResponse, duration)
8686
"""
87-
if service == "archivefiles":
87+
if service.startswith("archivefile"):
8888
response, duration = self.parent()._doRequest(url, filters, getTime=True)
8989
response = self.parent()._filterByExtension(response, extension)
9090
else:
@@ -97,7 +97,7 @@ def _catenateData(self, response: object, nextResponse: object, service: str):
9797
Concatenates the data results from nextResponse into response
9898
Compatible with the row structure of different services
9999
"""
100-
if service == "scalardata":
100+
if service.startswith("scalardata"):
101101
keys = response["sensorData"][0]["data"].keys()
102102

103103
for sensorData in response["sensorData"]:
@@ -111,11 +111,11 @@ def _catenateData(self, response: object, nextResponse: object, service: str):
111111
for key in keys:
112112
sensorData["data"][key] += nextSensor["data"][key]
113113

114-
elif service == "rawdata":
114+
elif service.startswith("rawdata"):
115115
for key in response["data"]:
116116
response["data"][key] += nextResponse["data"][key]
117117

118-
elif service == "archivefiles":
118+
elif service.startswith("archivefile"):
119119
response["files"] += nextResponse["files"]
120120

121121
def _estimatePages(self, response: object, service: str):
@@ -154,13 +154,13 @@ def _rowCount(self, response, service: str):
154154
"""
155155
Returns the number of records in the response
156156
"""
157-
if service == "scalardata":
157+
if service.startswith("scalardata"):
158158
return len(response["sensorData"][0]["data"]["sampleTimes"])
159159

160-
elif service == "rawdata":
160+
elif service.startswith("rawdata"):
161161
return len(response["data"]["times"])
162162

163-
elif service == "archivefiles":
163+
elif service.startswith("archivefile"):
164164
return len(response["files"])
165165

166166
return 0
@@ -171,15 +171,16 @@ def _responseTimespan(self, response, service: str):
171171
Returns a timedelta object
172172
"""
173173
# grab the first and last sample times
174-
if service in ["scalardata", "rawdata"]:
175-
if service == "scalardata":
176-
first = response["sensorData"][0]["data"]["sampleTimes"][0]
177-
last = response["sensorData"][0]["data"]["sampleTimes"][-1]
178-
elif service == "rawdata":
179-
first = response["data"]["times"][0]
180-
last = response["data"]["times"][-1]
181-
182-
elif service == "archivefiles":
174+
175+
if service.startswith("scalardata"):
176+
first = response["sensorData"][0]["data"]["sampleTimes"][0]
177+
last = response["sensorData"][0]["data"]["sampleTimes"][-1]
178+
179+
elif service.startswith("rawdata"):
180+
first = response["data"]["times"][0]
181+
last = response["data"]["times"][-1]
182+
183+
elif service.startswith("archivefile"):
183184
row0 = response["files"][0]
184185
if isinstance(row0, str):
185186
regExp = r"\d{8}T\d{6}\.\d{3}Z"
@@ -198,7 +199,6 @@ def _responseTimespan(self, response, service: str):
198199
last = response["files"][-1]["dateFrom"]
199200

200201
# compute the timedelta
201-
# print(first, last)
202202
dateFirst = dateutil.parser.parse(first)
203203
dateLast = dateutil.parser.parse(last)
204204
return dateLast - dateFirst

src/onc/modules/_OncArchive.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ def getArchivefileByLocation(self, filters: dict, allPages: bool):
2323
2424
The filenames obtained can be used to download files using the ``downloadArchivefile`` method.
2525
""" # noqa: E501
26-
return self._getList(filters, by="location", allPages=allPages)
26+
return self._getList(filters, service="archivefile/location", allPages=allPages)
2727

2828
def getArchivefileByDevice(self, filters: dict, allPages: bool):
2929
"""
3030
Return a list of archived files from a specific device.
3131
3232
The filenames obtained can be used to download files using the ``downloadArchivefile`` method.
3333
""" # noqa: E501
34-
return self._getList(filters, by="device", allPages=allPages)
34+
return self._getList(filters, service="archivefile/device", allPages=allPages)
3535

3636
def getArchivefile(self, filters: dict, allPages: bool):
3737
return self._delegateByFilters(
@@ -49,16 +49,15 @@ def getArchivefileUrl(self, filename: str) -> str:
4949
"""
5050
Return an archivefile absolute download URL for a filename
5151
"""
52-
url = self._serviceUrl("archivefile")
52+
url = self._serviceUrl("archivefile/download")
5353
token = self._config("token")
54-
return f"{url}/download?filename={filename}&token={token}"
54+
return f"{url}?filename={filename}&token={token}"
5555

5656
def downloadArchivefile(self, filename: str = "", overwrite: bool = False):
57-
url = self._serviceUrl("archivefiles")
57+
url = self._serviceUrl("archivefile/download")
5858

5959
filters = {
6060
"token": self._config("token"),
61-
"method": "getFile",
6261
"filename": filename,
6362
}
6463

@@ -151,15 +150,12 @@ def downloadDirectArchivefile(
151150
"stats": {"totalSize": size, "downloadTime": time, "fileCount": successes},
152151
}
153152

154-
def _getList(self, filters: dict, by: str = "location", allPages: bool = False):
153+
def _getList(self, filters: dict, service: str = "location", allPages: bool = False):
155154
"""
156155
Wraps archivefiles getArchivefileByLocation and getArchivefileByDevice methods
157156
"""
158-
url = self._serviceUrl("archivefiles")
157+
url = self._serviceUrl(service)
159158
filters["token"] = self._config("token")
160-
filters["method"] = (
161-
"getListByLocation" if by == "location" else "getListByDevice"
162-
)
163159

164160
# parse and remove the artificial parameter extension
165161
extension = None
@@ -169,7 +165,7 @@ def _getList(self, filters: dict, by: str = "location", allPages: bool = False):
169165

170166
if allPages:
171167
mp = _MultiPage(self)
172-
result = mp.getAllPages("archivefiles", url, filters2)
168+
result = mp.getAllPages(service, url, filters2)
173169
else:
174170
if "extension" in filters2:
175171
del filters2["extension"]

src/onc/modules/_OncDelivery.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,8 @@ def requestDataProduct(self, filters: dict):
6565
"""
6666
Data product request
6767
"""
68-
filters["method"] = "request"
6968
filters["token"] = self._config("token")
70-
url = "{:s}api/dataProductDelivery".format(self._config("baseUrl"))
69+
url = f"{self._config('baseUrl')}api/dataProductDelivery/request"
7170
response = self._doRequest(url, filters)
7271

7372
self._estimatePollPeriod(response)
@@ -93,15 +92,14 @@ def runDataProduct(self, dpRequestId: int, waitComplete: bool):
9392
print(
9493
f"To cancel the running data product, run 'onc.cancelDataProduct({dpRequestId})'" # noqa: E501
9594
)
96-
url = f"{self._config('baseUrl')}api/dataProductDelivery"
95+
url = f"{self._config('baseUrl')}api/dataProductDelivery/run"
9796
runResult = {"runIds": [], "fileCount": 0, "runTime": 0, "requestCount": 0}
9897

9998
start = time()
10099
while status != "complete":
101100
response = requests.get(
102101
url,
103102
{
104-
"method": "run",
105103
"token": self._config("token"),
106104
"dpRequestId": dpRequestId,
107105
},
@@ -283,9 +281,8 @@ def _countFilesInProduct(self, runId: int):
283281
Given a runId, polls the "download" method to count files.
284282
Uses HTTP HEAD to avoid downloading the files.
285283
"""
286-
url = f"{self._config('baseUrl')}api/dataProductDelivery"
284+
url = f"{self._config('baseUrl')}api/dataProductDelivery/download"
287285
filters = {
288-
"method": "download",
289286
"token": self._config("token"),
290287
"dpRunId": runId,
291288
"index": 1,

src/onc/modules/_OncDiscovery.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ class _OncDiscovery(_OncService):
1010
def __init__(self, parent: object):
1111
super().__init__(parent)
1212

13-
def _discoveryRequest(self, filters: dict, service: str, method: str = "get"):
13+
def _discoveryRequest(self, filters: dict, service: str):
1414
url = self._serviceUrl(service)
15-
filters["method"] = method
1615
filters["token"] = self._config("token")
1716

1817
result = self._doRequest(url, filters)
@@ -25,7 +24,7 @@ def getLocations(self, filters: dict):
2524

2625
def getLocationHierarchy(self, filters: dict):
2726
filters = filters or {}
28-
return self._discoveryRequest(filters, service="locations", method="getTree")
27+
return self._discoveryRequest(filters, service="locations/tree")
2928

3029
def getDeployments(self, filters: dict):
3130
filters = filters or {}

src/onc/modules/_OncRealTime.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def getScalardataByLocation(self, filters: dict, allPages: bool):
1919
See https://wiki.oceannetworks.ca/display/O2A/scalardata+service
2020
for usage and available filters
2121
"""
22-
return self._getDirectAllPages(filters, "scalardata", "getByLocation", allPages)
22+
return self._getDirectAllPages(filters, "scalardata/location", allPages)
2323

2424
def getScalardataByDevice(self, filters: dict, allPages: bool):
2525
"""
@@ -28,7 +28,7 @@ def getScalardataByDevice(self, filters: dict, allPages: bool):
2828
See https://wiki.oceannetworks.ca/display/O2A/scalardata+service
2929
for usage and available filters.
3030
"""
31-
return self._getDirectAllPages(filters, "scalardata", "getByDevice", allPages)
31+
return self._getDirectAllPages(filters, "scalardata/device", allPages)
3232

3333
def getScalardata(self, filters: dict, allPages: bool):
3434
return self._delegateByFilters(
@@ -45,7 +45,7 @@ def getRawdataByLocation(self, filters: dict, allPages: bool):
4545
See https://wiki.oceannetworks.ca/display/O2A/rawdata+service
4646
for usage and available filters.
4747
"""
48-
return self._getDirectAllPages(filters, "rawdata", "getByLocation", allPages)
48+
return self._getDirectAllPages(filters, "rawdata/location", allPages)
4949

5050
def getRawdataByDevice(self, filters: dict, allPages: bool):
5151
"""
@@ -54,7 +54,7 @@ def getRawdataByDevice(self, filters: dict, allPages: bool):
5454
See https://wiki.oceannetworks.ca/display/O2A/rawdata+service
5555
for usage and available filters.
5656
"""
57-
return self._getDirectAllPages(filters, "rawdata", "getByDevice", allPages)
57+
return self._getDirectAllPages(filters, "rawdata/device", allPages)
5858

5959
def getRawdata(self, filters: dict, allPages: bool):
6060
return self._delegateByFilters(
@@ -68,9 +68,7 @@ def getSensorCategoryCodes(self, filters: dict):
6868
updated_filters = filters | {"returnOptions": "excludeScalarData"}
6969
return self.getScalardata(updated_filters, False)["sensorData"]
7070

71-
def _getDirectAllPages(
72-
self, filters: dict, service: str, method: str, allPages: bool
73-
) -> Any:
71+
def _getDirectAllPages(self, filters: dict, service: str, allPages: bool) -> Any:
7472
"""
7573
Keeps downloading all scalar or raw data pages until finished.
7674
@@ -83,7 +81,6 @@ def _getDirectAllPages(
8381
# prepare filters for first page request
8482
filters = filters or {}
8583
url = self._serviceUrl(service)
86-
filters["method"] = method
8784
filters["token"] = self._config("token")
8885

8986
# if sensorCategoryCodes is an array, join it into a comma-separated string

src/onc/modules/_OncService.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,16 +95,23 @@ def _serviceUrl(self, service: str):
9595
"""
9696
if service in [
9797
"locations",
98+
"locations/tree",
9899
"deployments",
99100
"devices",
100101
"deviceCategories",
101102
"properties",
102103
"dataProducts",
103-
"archivefiles",
104-
"archivefile",
105-
"scalardata",
106-
"rawdata",
107104
"dataAvailability/dataproducts",
105+
"archivefile/device",
106+
"archivefile/location",
107+
"archivefile/download",
108+
"scalardata/location",
109+
"scalardata/device",
110+
"rawdata/location",
111+
"rawdata/device",
112+
"dataProductDelivery/request",
113+
"dataProductDelivery/run",
114+
"dataProductDelivery/download",
108115
]:
109116
return f"{self._config('baseUrl')}api/{service}"
110117

0 commit comments

Comments
 (0)