Fix binding printer_id to response callbacks

With the lambda it would capture the variable of printer_id. It wouldn't actually store the value of printer_id in teh created lambda. As a result, it was using the current value of printer_id when the lambda executes, rather than the value of printer_id when the lambda is constructed. A bit weird how that works in Python's lambdas.

With partial functions it works properly.

Contributes to issue CURA-8609.
This commit is contained in:
Ghostkeeper 2021-10-27 14:06:04 +02:00
parent f99fedc58b
commit 116046a8b2
No known key found for this signature in database
GPG Key ID: D2A8871EE34EC59A

View File

@ -2,6 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
import enum
import functools # For partial methods to use as callbacks with information pre-filled.
import json # To serialise metadata for API calls.
import os # To delete the archive when we're done.
from PyQt5.QtCore import QUrl
@ -177,8 +178,8 @@ class UploadMaterialsJob(Job):
http = HttpRequestManager.getInstance()
http.post(
url = self.UPLOAD_CONFIRM_URL.format(cluster_id = cluster_id, cluster_printer_id = printer_id),
callback = lambda reply: self.onUploadConfirmed(printer_id, reply, None),
error_callback = lambda reply, error: self.onUploadConfirmed(printer_id, reply, error), # Let this same function handle the error too.
callback = functools.partial(self.onUploadConfirmed, printer_id),
error_callback = functools.partial(self.onUploadConfirmed, printer_id), # Let this same function handle the error too.
scope = self._scope,
data = json.dumps({"data": {"material_profile_id": self._archive_remote_id}}).encode("UTF-8")
)