Greatly decrease the bloat / complexity of the toolbox

There was a lot of stuff going on that didn't need to happen, so I cut those parts out in order
to improve the overview.
This commit is contained in:
Jaime van Kessel 2018-12-05 13:42:13 +01:00
parent b1440737e6
commit 07d210483c
3 changed files with 32 additions and 32 deletions

View File

@ -29,8 +29,9 @@ class AuthorsModel(ListModel):
self._filter = {} # type: Dict[str, str] self._filter = {} # type: Dict[str, str]
def setMetadata(self, data: List[Dict[str, Union[str, List[str], int]]]): def setMetadata(self, data: List[Dict[str, Union[str, List[str], int]]]):
self._metadata = data if self._metadata != data:
self._update() self._metadata = data
self._update()
def _update(self) -> None: def _update(self) -> None:
items = [] # type: List[Dict[str, Union[str, List[str], int, None]]] items = [] # type: List[Dict[str, Union[str, List[str], int, None]]]

View File

@ -45,8 +45,9 @@ class PackagesModel(ListModel):
self._filter = {} # type: Dict[str, str] self._filter = {} # type: Dict[str, str]
def setMetadata(self, data): def setMetadata(self, data):
self._metadata = data if self._metadata != data:
self._update() self._metadata = data
self._update()
def _update(self): def _update(self):
items = [] items = []

View File

@ -66,8 +66,8 @@ class Toolbox(QObject, Extension):
self._old_plugin_ids = set() # type: Set[str] self._old_plugin_ids = set() # type: Set[str]
self._old_plugin_metadata = dict() # type: Dict[str, Dict[str, Any]] self._old_plugin_metadata = dict() # type: Dict[str, Dict[str, Any]]
# Data: # The responses as given by the server parsed to a list.
self._metadata = { self._server_response_data = {
"authors": [], "authors": [],
"packages": [], "packages": [],
} # type: Dict[str, List[Any]] } # type: Dict[str, List[Any]]
@ -301,13 +301,13 @@ class Toolbox(QObject, Extension):
if plugin_id not in all_plugin_package_ids) if plugin_id not in all_plugin_package_ids)
self._old_plugin_metadata = {k: v for k, v in self._old_plugin_metadata.items() if k in self._old_plugin_ids} self._old_plugin_metadata = {k: v for k, v in self._old_plugin_metadata.items() if k in self._old_plugin_ids}
self._metadata["plugins_installed"] = all_packages["plugin"] + list(self._old_plugin_metadata.values()) self._server_response_data["plugins_installed"] = all_packages["plugin"] + list(self._old_plugin_metadata.values())
self._models["plugins_installed"].setMetadata(self._metadata["plugins_installed"]) self._models["plugins_installed"].setMetadata(self._server_response_data["plugins_installed"])
self.metadataChanged.emit() self.metadataChanged.emit()
if "material" in all_packages: if "material" in all_packages:
self._metadata["materials_installed"] = all_packages["material"] self._server_response_data["materials_installed"] = all_packages["material"]
# TODO: ADD MATERIALS HERE ONCE MATERIALS PORTION OF TOOLBOX IS LIVE # TODO: ADD MATERIALS HERE ONCE MATERIALS PORTION OF TOOLBOX IS LIVE
self._models["materials_installed"].setMetadata(self._metadata["materials_installed"]) self._models["materials_installed"].setMetadata(self._server_response_data["materials_installed"])
self.metadataChanged.emit() self.metadataChanged.emit()
@pyqtSlot(str) @pyqtSlot(str)
@ -461,7 +461,7 @@ class Toolbox(QObject, Extension):
def getRemotePackage(self, package_id: str) -> Optional[Dict]: def getRemotePackage(self, package_id: str) -> Optional[Dict]:
# TODO: make the lookup in a dict, not a loop. canUpdate is called for every item. # TODO: make the lookup in a dict, not a loop. canUpdate is called for every item.
remote_package = None remote_package = None
for package in self._metadata["packages"]: for package in self._server_response_data["packages"]:
if package["package_id"] == package_id: if package["package_id"] == package_id:
remote_package = package remote_package = package
break break
@ -524,7 +524,7 @@ class Toolbox(QObject, Extension):
@pyqtSlot(str, result = int) @pyqtSlot(str, result = int)
def getNumberOfInstalledPackagesByAuthor(self, author_id: str) -> int: def getNumberOfInstalledPackagesByAuthor(self, author_id: str) -> int:
count = 0 count = 0
for package in self._metadata["materials_installed"]: for package in self._server_response_data["materials_installed"]:
if package["author"]["author_id"] == author_id: if package["author"]["author_id"] == author_id:
count += 1 count += 1
return count return count
@ -533,7 +533,7 @@ class Toolbox(QObject, Extension):
@pyqtSlot(str, result = int) @pyqtSlot(str, result = int)
def getTotalNumberOfMaterialPackagesByAuthor(self, author_id: str) -> int: def getTotalNumberOfMaterialPackagesByAuthor(self, author_id: str) -> int:
count = 0 count = 0
for package in self._metadata["packages"]: for package in self._server_response_data["packages"]:
if package["package_type"] == "material": if package["package_type"] == "material":
if package["author"]["author_id"] == author_id: if package["author"]["author_id"] == author_id:
count += 1 count += 1
@ -554,10 +554,10 @@ class Toolbox(QObject, Extension):
def isLoadingComplete(self) -> bool: def isLoadingComplete(self) -> bool:
populated = 0 populated = 0
for metadata_list in self._metadata.items(): for metadata_list in self._server_response_data.items():
if metadata_list: if metadata_list:
populated += 1 populated += 1
return populated == len(self._metadata.items()) return populated == len(self._server_response_data.items())
# Make API Calls # Make API Calls
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
@ -639,15 +639,13 @@ class Toolbox(QObject, Extension):
Logger.log("e", "Could not find the %s model.", response_type) Logger.log("e", "Could not find the %s model.", response_type)
break break
self._metadata[response_type] = json_data["data"] self._server_response_data[response_type] = json_data["data"]
self._models[response_type].setMetadata(self._metadata[response_type]) self._models[response_type].setMetadata(self._server_response_data[response_type])
# Do some auto filtering
# TODO: Make multiple API calls in the future to handle this
if response_type is "packages": if response_type is "packages":
self._models[response_type].setFilter({"type": "plugin"}) self._models[response_type].setFilter({"type": "plugin"})
self.reBuildMaterialsModels() self.reBuildMaterialsModels()
self.buildPluginsModels() self.reBuildPluginsModels()
elif response_type is "authors": elif response_type is "authors":
self._models[response_type].setFilter({"package_types": "material"}) self._models[response_type].setFilter({"package_types": "material"})
self._models[response_type].setFilter({"tags": "generic"}) self._models[response_type].setFilter({"tags": "generic"})
@ -743,39 +741,39 @@ class Toolbox(QObject, Extension):
# Exposed Models: # Exposed Models:
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
@pyqtProperty(QObject, notify = metadataChanged) @pyqtProperty(QObject, constant=True)
def authorsModel(self) -> AuthorsModel: def authorsModel(self) -> AuthorsModel:
return cast(AuthorsModel, self._models["authors"]) return cast(AuthorsModel, self._models["authors"])
@pyqtProperty(QObject, notify = metadataChanged) @pyqtProperty(QObject, constant=True)
def packagesModel(self) -> PackagesModel: def packagesModel(self) -> PackagesModel:
return cast(PackagesModel, self._models["packages"]) return cast(PackagesModel, self._models["packages"])
@pyqtProperty(QObject, notify = metadataChanged) @pyqtProperty(QObject, constant=True)
def pluginsShowcaseModel(self) -> PackagesModel: def pluginsShowcaseModel(self) -> PackagesModel:
return cast(PackagesModel, self._models["plugins_showcase"]) return cast(PackagesModel, self._models["plugins_showcase"])
@pyqtProperty(QObject, notify = metadataChanged) @pyqtProperty(QObject, constant=True)
def pluginsAvailableModel(self) -> PackagesModel: def pluginsAvailableModel(self) -> PackagesModel:
return cast(PackagesModel, self._models["plugins_available"]) return cast(PackagesModel, self._models["plugins_available"])
@pyqtProperty(QObject, notify = metadataChanged) @pyqtProperty(QObject, constant=True)
def pluginsInstalledModel(self) -> PackagesModel: def pluginsInstalledModel(self) -> PackagesModel:
return cast(PackagesModel, self._models["plugins_installed"]) return cast(PackagesModel, self._models["plugins_installed"])
@pyqtProperty(QObject, notify = metadataChanged) @pyqtProperty(QObject, constant=True)
def materialsShowcaseModel(self) -> AuthorsModel: def materialsShowcaseModel(self) -> AuthorsModel:
return cast(AuthorsModel, self._models["materials_showcase"]) return cast(AuthorsModel, self._models["materials_showcase"])
@pyqtProperty(QObject, notify = metadataChanged) @pyqtProperty(QObject, constant=True)
def materialsAvailableModel(self) -> AuthorsModel: def materialsAvailableModel(self) -> AuthorsModel:
return cast(AuthorsModel, self._models["materials_available"]) return cast(AuthorsModel, self._models["materials_available"])
@pyqtProperty(QObject, notify = metadataChanged) @pyqtProperty(QObject, constant=True)
def materialsInstalledModel(self) -> PackagesModel: def materialsInstalledModel(self) -> PackagesModel:
return cast(PackagesModel, self._models["materials_installed"]) return cast(PackagesModel, self._models["materials_installed"])
@pyqtProperty(QObject, notify=metadataChanged) @pyqtProperty(QObject, constant=True)
def materialsGenericModel(self) -> PackagesModel: def materialsGenericModel(self) -> PackagesModel:
return cast(PackagesModel, self._models["materials_generic"]) return cast(PackagesModel, self._models["materials_generic"])
@ -814,7 +812,7 @@ class Toolbox(QObject, Extension):
processed_authors = [] # type: List[str] processed_authors = [] # type: List[str]
for item in self._metadata["packages"]: for item in self._server_response_data["packages"]:
if item["package_type"] == "material": if item["package_type"] == "material":
author = item["author"] author = item["author"]
@ -836,11 +834,11 @@ class Toolbox(QObject, Extension):
self._models["materials_available"].setMetadata(materials_available_metadata) self._models["materials_available"].setMetadata(materials_available_metadata)
self._models["materials_generic"].setMetadata(materials_generic_metadata) self._models["materials_generic"].setMetadata(materials_generic_metadata)
def buildPluginsModels(self) -> None: def reBuildPluginsModels(self) -> None:
plugins_showcase_metadata = [] plugins_showcase_metadata = []
plugins_available_metadata = [] plugins_available_metadata = []
for item in self._metadata["packages"]: for item in self._server_response_data["packages"]:
if item["package_type"] == "plugin": if item["package_type"] == "plugin":
if "showcase" in item["tags"]: if "showcase" in item["tags"]:
plugins_showcase_metadata.append(item) plugins_showcase_metadata.append(item)