Convert links to a dict

CURA-5676

Easier to process.
This commit is contained in:
Lipu Fei 2018-08-31 13:45:02 +02:00
parent 9433cf7c45
commit c4afbe7a67
2 changed files with 23 additions and 35 deletions

View file

@ -11,26 +11,13 @@ Item
id: base id: base
property var packageData property var packageData
property var technical_data_sheet_url property var technicalDataSheetUrl: {
var link = undefined
function initiazeLinks() if ("Technical Data Sheet" in packageData.links)
{ {
var all_links = packageData.links link = packageData.links["Technical Data Sheet"]
for(var index = 0; index < all_links.length; index++)
{
var temp_link = all_links[index]
var title = temp_link["title"]
if(title === "Technical Data Sheet")
{
base.technical_data_sheet_url = temp_link["url"]
} }
} return link
}
Component.onCompleted:
{
initiazeLinks()
} }
anchors.topMargin: UM.Theme.getSize("default_margin").height anchors.topMargin: UM.Theme.getSize("default_margin").height
@ -157,19 +144,17 @@ Item
} }
} }
Label Label
{ {
id: technical_data_sheet id: technical_data_sheet
anchors.top: table.bottom anchors.top: table.bottom
anchors.topMargin: UM.Theme.getSize("default_margin").height / 2 anchors.topMargin: UM.Theme.getSize("default_margin").height / 2
visible: base.technical_data_sheet_url !== undefined visible: base.technicalDataSheetUrl !== undefined
text: text:
{ {
if (base.technical_data_sheet_url !== undefined) if (base.technicalDataSheetUrl !== undefined)
{ {
return "<a href='%1'>%2</a>".arg(base.technical_data_sheet_url).arg("Technical Data Sheet") return "<a href='%1'>%2</a>".arg(base.technicalDataSheetUrl).arg("Technical Data Sheet")
} }
return "" return ""
} }

View file

@ -5,9 +5,12 @@ import re
from typing import Dict from typing import Dict
from PyQt5.QtCore import Qt, pyqtProperty from PyQt5.QtCore import Qt, pyqtProperty
from UM.Qt.ListModel import ListModel
from .ConfigsModel import ConfigsModel
from UM.Logger import Logger from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
from .ConfigsModel import ConfigsModel
## Model that holds cura packages. By setting the filter property the instances held by this model can be changed. ## Model that holds cura packages. By setting the filter property the instances held by this model can be changed.
class PackagesModel(ListModel): class PackagesModel(ListModel):
@ -48,18 +51,16 @@ class PackagesModel(ListModel):
def _update(self): def _update(self):
items = [] items = []
#If a user has a slow internet connection then the metadata might be None
if self._metadata is None: if self._metadata is None:
Logger.logException("w", "Failed to load packages for Toolbox") Logger.logException("w", "Failed to load packages for Toolbox")
self.setItems(items) self.setItems(items)
return return
for package in self._metadata: for package in self._metadata:
has_configs = False has_configs = False
configs_model = None configs_model = None
data_links = []
links_dict = {}
if "data" in package: if "data" in package:
if "supported_configs" in package["data"]: if "supported_configs" in package["data"]:
if len(package["data"]["supported_configs"]) > 0: if len(package["data"]["supported_configs"]) > 0:
@ -67,7 +68,10 @@ class PackagesModel(ListModel):
configs_model = ConfigsModel() configs_model = ConfigsModel()
configs_model.setConfigs(package["data"]["supported_configs"]) configs_model.setConfigs(package["data"]["supported_configs"])
data_links = package['data']['links'] if 'links' in package['data'] else [] # Links is a list of dictionaries with "title" and "url". Convert this list into a dict so it's easier
# to process.
link_list = package['data']['links'] if 'links' in package['data'] else []
links_dict = {d["title"]: d["url"] for d in link_list}
if "author_id" not in package["author"] or "display_name" not in package["author"]: if "author_id" not in package["author"] or "display_name" not in package["author"]:
package["author"]["author_id"] = "" package["author"]["author_id"] = ""
@ -94,19 +98,18 @@ class PackagesModel(ListModel):
"supported_configs": configs_model, "supported_configs": configs_model,
"download_count": package["download_count"] if "download_count" in package else 0, "download_count": package["download_count"] if "download_count" in package else 0,
"tags": package["tags"] if "tags" in package else [], "tags": package["tags"] if "tags" in package else [],
"links": data_links, "links": links_dict,
"website": package["website"] if "website" in package else None, "website": package["website"] if "website" in package else None,
}) })
# Filter on all the key-word arguments. # Filter on all the key-word arguments.
for key, value in self._filter.items(): for key, value in self._filter.items():
if key is "tags": if key is "tags":
key_filter = lambda item, value = value: value in item["tags"] key_filter = lambda item, v = value: v in item["tags"]
elif "*" in value: elif "*" in value:
key_filter = lambda candidate, key = key, value = value: self._matchRegExp(candidate, key, value) key_filter = lambda candidate, k = key, v = value: self._matchRegExp(candidate, k, v)
else: else:
key_filter = lambda candidate, key = key, value = value: self._matchString(candidate, key, value) key_filter = lambda candidate, k = key, v = value: self._matchString(candidate, k, v)
items = filter(key_filter, items) items = filter(key_filter, items)
# Execute all filters. # Execute all filters.