Addon Manager: Improve error handling for Version
This commit is contained in:
@@ -243,17 +243,11 @@ class TestMetadataAuxiliaryFunctions(unittest.TestCase):
|
||||
v_list = min_version.version_as_list
|
||||
metadata = Metadata()
|
||||
wb1 = Metadata()
|
||||
wb1.freecadmin = Version(
|
||||
from_list=[v_list[0] + 1, v_list[1], v_list[2], v_list[3]]
|
||||
)
|
||||
wb1.freecadmin = Version(from_list=[v_list[0] + 1, v_list[1], v_list[2], v_list[3]])
|
||||
wb2 = Metadata()
|
||||
wb2.freecadmin = Version(
|
||||
from_list=[v_list[0], v_list[1] + 1, v_list[2], v_list[3]]
|
||||
)
|
||||
wb2.freecadmin = Version(from_list=[v_list[0], v_list[1] + 1, v_list[2], v_list[3]])
|
||||
wb3 = Metadata()
|
||||
wb3.freecadmin = Version(
|
||||
from_list=[v_list[0], v_list[1], v_list[2] + 1, v_list[3]]
|
||||
)
|
||||
wb3.freecadmin = Version(from_list=[v_list[0], v_list[1], v_list[2] + 1, v_list[3]])
|
||||
m1 = Metadata()
|
||||
m1.freecadmin = min_version
|
||||
metadata.content = {"workbench": [wb1, wb2, wb3], "macro": [m1]}
|
||||
@@ -351,6 +345,14 @@ class TestMetadataReader(unittest.TestCase):
|
||||
MetadataReader._parse_child_element("", child, mock_metadata)
|
||||
self.assertEqual(Version("1.2.3"), mock_metadata.version)
|
||||
|
||||
def test_parse_child_element_version_bad(self):
|
||||
from addonmanager_metadata import Metadata, Version, MetadataReader
|
||||
|
||||
mock_metadata = Metadata()
|
||||
child = self.given_mock_tree_node("version", "1-2-3")
|
||||
MetadataReader._parse_child_element("", child, mock_metadata)
|
||||
self.assertEqual(Version("0.0.0"), mock_metadata.version)
|
||||
|
||||
def test_parse_child_element_lists_of_strings(self):
|
||||
from addonmanager_metadata import Metadata, MetadataReader
|
||||
|
||||
@@ -413,9 +415,7 @@ class TestMetadataReader(unittest.TestCase):
|
||||
if type == "repository":
|
||||
branch = f"Branch {i} for {tag}"
|
||||
expected_results.append(Url(location=text, type=url_type, branch=branch))
|
||||
child = self.given_mock_tree_node(
|
||||
tag, text, {"type": type, "branch": branch}
|
||||
)
|
||||
child = self.given_mock_tree_node(tag, text, {"type": type, "branch": branch})
|
||||
MetadataReader._parse_child_element("", child, mock_metadata)
|
||||
self.assertEqual(len(mock_metadata.__dict__[tag]), 10)
|
||||
self.assertListEqual(mock_metadata.__dict__[tag], expected_results)
|
||||
@@ -448,9 +448,7 @@ class TestMetadataReader(unittest.TestCase):
|
||||
text = f"Test {i} for {tag}"
|
||||
dependency_type = DependencyType(i % len(DependencyType))
|
||||
dependency_type_str = str(dependency_type)
|
||||
expected = Dependency(
|
||||
package=text, dependency_type=dependency_type
|
||||
)
|
||||
expected = Dependency(package=text, dependency_type=dependency_type)
|
||||
expected.__dict__[attribute] = attr_value
|
||||
expected_results.append(expected)
|
||||
child = self.given_mock_tree_node(
|
||||
@@ -548,9 +546,7 @@ class TestMetadataReaderIntegration(unittest.TestCase):
|
||||
self.assertEqual(Version("1.0.1"), metadata.version)
|
||||
self.assertEqual("2022-01-07", metadata.date)
|
||||
self.assertEqual("Resources/icons/PackageIcon.svg", metadata.icon)
|
||||
self.assertListEqual(
|
||||
[License(name="LGPLv2.1", file="LICENSE")], metadata.license
|
||||
)
|
||||
self.assertListEqual([License(name="LGPLv2.1", file="LICENSE")], metadata.license)
|
||||
self.assertListEqual(
|
||||
[Contact(name="FreeCAD Developer", email="developer@freecad.org")],
|
||||
metadata.maintainer,
|
||||
|
||||
@@ -273,7 +273,13 @@ class MetadataReader:
|
||||
# Text-only elements
|
||||
metadata.__dict__[tag] = child.text
|
||||
elif tag in ["version", "freecadmin", "freecadmax", "pythonmin"]:
|
||||
metadata.__dict__[tag] = Version(from_string=child.text)
|
||||
try:
|
||||
metadata.__dict__[tag] = Version(from_string=child.text)
|
||||
except ValueError:
|
||||
print(
|
||||
f"Invalid version specified for tag {tag} in Addon {metadata.name}: {child.text}"
|
||||
)
|
||||
metadata.__dict__[tag] = Version(from_list=[0, 0, 0])
|
||||
elif tag in ["tag", "file"]:
|
||||
# Lists of strings
|
||||
if child.text:
|
||||
@@ -321,9 +327,7 @@ class MetadataReader:
|
||||
v_gte = child.attrib["version_gte"] if "version_gte" in child.attrib else ""
|
||||
v_gt = child.attrib["version_gt"] if "version_gt" in child.attrib else ""
|
||||
condition = child.attrib["condition"] if "condition" in child.attrib else ""
|
||||
optional = (
|
||||
"optional" in child.attrib and child.attrib["optional"].lower() == "true"
|
||||
)
|
||||
optional = "optional" in child.attrib and child.attrib["optional"].lower() == "true"
|
||||
dependency_type = DependencyType.automatic
|
||||
if "type" in child.attrib and child.attrib["type"] in DependencyType.__dict__:
|
||||
dependency_type = DependencyType[child.attrib["type"]]
|
||||
@@ -349,17 +353,13 @@ class MetadataReader:
|
||||
if content_type in known_content_types:
|
||||
if content_type not in metadata.content:
|
||||
metadata.content[content_type] = []
|
||||
metadata.content[content_type].append(
|
||||
MetadataReader._create_node(namespace, child)
|
||||
)
|
||||
metadata.content[content_type].append(MetadataReader._create_node(namespace, child))
|
||||
|
||||
@staticmethod
|
||||
def _create_node(namespace, child) -> Metadata:
|
||||
new_content_item = Metadata()
|
||||
for content_child in child:
|
||||
MetadataReader._parse_child_element(
|
||||
namespace, content_child, new_content_item
|
||||
)
|
||||
MetadataReader._parse_child_element(namespace, content_child, new_content_item)
|
||||
return new_content_item
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user