Skip to content

Commit 7a9583e

Browse files
committed
feat: download progress reporting
1 parent d665a65 commit 7a9583e

13 files changed

+51
-31
lines changed

ORStools/common/client.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class Client(QObject):
4848
"""Performs requests to the ORS API services."""
4949

5050
overQueryLimit = pyqtSignal(int)
51-
downloadProgress = pyqtSignal(int, int)
51+
downloadProgress = pyqtSignal(int)
5252

5353

5454
def __init__(self, provider: Optional[dict] = None, agent: Optional[str] = None) -> None:
@@ -120,9 +120,7 @@ def fetch_with_retry(
120120

121121
blocking_request = QgsBlockingNetworkRequest()
122122

123-
blocking_request.downloadProgress.connect(
124-
lambda r, t: self.downloadProgress.emit(r, t)
125-
)
123+
blocking_request.downloadProgress.connect(lambda r, t: self.downloadProgress.emit(r/t))
126124

127125
logger.log(f"url: {self.url}\nParameters: {json.dumps(post_json, indent=2)}", 0)
128126

@@ -146,7 +144,7 @@ def fetch_with_retry(
146144
loop = QEventLoop()
147145
QTimer.singleShot(delay_seconds * 1000, loop.quit) # milliseconds
148146
loop.exec_()
149-
147+
150148
except exceptions.ApiError as e:
151149
if post_json:
152150
logger.log(

ORStools/proc/base_processing_algorithm.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,17 @@ def parseOptions(self, parameters: dict, context: QgsProcessingContext) -> dict:
232232

233233
return options
234234

235+
def get_client(
236+
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
237+
) -> client.Client:
238+
"""
239+
Returns a client instance for requests to the ors API
240+
"""
241+
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
242+
ors_client.downloadProgress.connect(feedback.setProgress)
243+
244+
return ors_client
245+
235246
# noinspection PyUnusedLocal
236247
def initAlgorithm(self, configuration: Dict) -> None:
237248
"""

ORStools/proc/directions_lines_proc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def __init__(self):
128128
def processAlgorithm(
129129
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
130130
) -> Dict[str, str]:
131-
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
131+
ors_client = self.get_client(parameters, context, feedback)
132132

133133
profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]]
134134

ORStools/proc/directions_points_layer_proc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def __init__(self):
135135
def processAlgorithm(
136136
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
137137
) -> Dict[str, str]:
138-
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
138+
ors_client = self.get_client(parameters, context, feedback)
139139

140140
profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]]
141141

ORStools/proc/directions_points_layers_proc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def __init__(self):
149149
def processAlgorithm(
150150
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
151151
) -> Dict[str, str]:
152-
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
152+
ors_client = self.get_client(parameters, context, feedback)
153153

154154
profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]]
155155

ORStools/proc/export_proc.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def __init__(self):
7777
def processAlgorithm(
7878
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
7979
) -> Dict[str, str]:
80-
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
80+
ors_client = self.get_client(parameters, context, feedback)
8181

8282
# Get profile value
8383
profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]]
@@ -113,7 +113,9 @@ def processAlgorithm(
113113
# Make request and catch ApiError
114114
try:
115115
endpoint = self.get_endpoint_names_from_provider(parameters[self.IN_PROVIDER])["export"]
116-
response = ors_client.fetch_with_retry(f"/v2/{endpoint}/{profile}", {}, post_json=params)
116+
response = ors_client.fetch_with_retry(
117+
f"/v2/{endpoint}/{profile}", {}, post_json=params
118+
)
117119
nodes_dict = {item["nodeId"]: item["location"] for item in response["nodes"]}
118120
edges = response["edges"]
119121
for edge in edges:

ORStools/proc/isochrones_layer_proc.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def __init__(self):
123123
def processAlgorithm(
124124
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
125125
) -> Dict[str, str]:
126-
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
126+
ors_client = self.get_client(parameters, context, feedback)
127127

128128
profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]]
129129
dimension = dict(enumerate(DIMENSIONS))[parameters[self.IN_METRIC]]
@@ -200,7 +200,9 @@ def processAlgorithm(
200200
endpoint = self.get_endpoint_names_from_provider(parameters[self.IN_PROVIDER])[
201201
"isochrones"
202202
]
203-
response = ors_client.fetch_with_retry(f"/v2/{endpoint}/{profile}", {}, post_json=params)
203+
response = ors_client.fetch_with_retry(
204+
f"/v2/{endpoint}/{profile}", {}, post_json=params
205+
)
204206

205207
for isochrone in self.isochrones.get_features(response, params["id"]):
206208
sink.addFeature(isochrone)

ORStools/proc/isochrones_point_proc.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def __init__(self):
109109
def processAlgorithm(
110110
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
111111
) -> Dict[str, str]:
112-
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
112+
ors_client = self.get_client(parameters, context, feedback)
113113

114114
profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]]
115115
dimension = dict(enumerate(DIMENSIONS))[parameters[self.IN_METRIC]]
@@ -157,7 +157,9 @@ def processAlgorithm(
157157
endpoint = self.get_endpoint_names_from_provider(parameters[self.IN_PROVIDER])[
158158
"isochrones"
159159
]
160-
response = ors_client.fetch_with_retry(f"/v2/{endpoint}/{profile}", {}, post_json=params)
160+
response = ors_client.fetch_with_retry(
161+
f"/v2/{endpoint}/{profile}", {}, post_json=params
162+
)
161163

162164
# Populate features from response
163165
for isochrone in self.isochrones.get_features(response, params["id"]):

ORStools/proc/matrix_proc.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def __init__(self):
9393
def processAlgorithm(
9494
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
9595
) -> Dict[str, str]:
96-
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
96+
ors_client = self.get_client(parameters, context, feedback)
9797

9898
# Get profile value
9999
profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]]
@@ -180,7 +180,9 @@ def processAlgorithm(
180180
# Make request and catch ApiError
181181
try:
182182
endpoint = self.get_endpoint_names_from_provider(parameters[self.IN_PROVIDER])["matrix"]
183-
response = ors_client.fetch_with_retry(f"/v2/{endpoint}/{profile}", {}, post_json=params)
183+
response = ors_client.fetch_with_retry(
184+
f"/v2/{endpoint}/{profile}", {}, post_json=params
185+
)
184186

185187
except (exceptions.ApiError, exceptions.InvalidKey, exceptions.GenericServerError) as e:
186188
msg = f"{e.__class__.__name__}: {str(e)}"

ORStools/proc/snap_layer_proc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def __init__(self) -> None:
7676
def processAlgorithm(
7777
self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback
7878
) -> Dict[str, str]:
79-
ors_client = self._get_ors_client_from_provider(parameters[self.IN_PROVIDER], feedback)
79+
ors_client = self.get_client(parameters, context, feedback)
8080

8181
# Get profile value
8282
profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]]

0 commit comments

Comments
 (0)