Addon Manager: Refactor Macro for testing

Pull out the network manager code so it is easier to mock.
This commit is contained in:
Chris Hennes
2022-11-27 18:00:10 -06:00
parent 5419bcb6e4
commit dfef3be2d8

View File

@@ -50,6 +50,9 @@ translate = FreeCAD.Qt.translate
class Macro:
"""This class provides a unified way to handle macros coming from different sources"""
# Use a stored class variable for this so that we can override it during testing
network_manager = None
# pylint: disable=too-many-instance-attributes
def __init__(self, name):
self.name = name
@@ -88,6 +91,14 @@ class Macro:
return self.__dict__
@classmethod
def _get_network_manager(cls):
if cls.network_manager is None:
# Make sure we're initialized:
NetworkManager.InitializeNetworkManager()
cls.network_manager = NetworkManager.AM_NETWORK_MANAGER
return cls.network_manager
@property
def filename(self):
"""The filename of this macro"""
@@ -257,7 +268,8 @@ class Macro:
it. If the macro's code is hosted elsewhere, as specified by a "rawcodeurl" found on
the wiki page, that code is downloaded and used as the source."""
code = ""
p = NetworkManager.AM_NETWORK_MANAGER.blocking_get(url)
nm = Macro._get_network_manager()
p = nm.blocking_get(url)
if not p:
FreeCAD.Console.PrintWarning(
translate(
@@ -319,7 +331,8 @@ class Macro:
self.raw_code_url = re.findall('rawcodeurl.*?href="(http.*?)">', page_data)
if self.raw_code_url:
self.raw_code_url = self.raw_code_url[0]
u2 = NetworkManager.AM_NETWORK_MANAGER.blocking_get(self.raw_code_url)
nm = Macro._get_network_manager()
u2 = nm.blocking_get(self.raw_code_url)
if not u2:
FreeCAD.Console.PrintWarning(
translate(
@@ -350,7 +363,8 @@ class Macro:
FreeCAD.Console.PrintLog(
f"Attempting to fetch macro icon from {self.icon}\n"
)
p = NetworkManager.AM_NETWORK_MANAGER.blocking_get(self.icon)
nm = Macro._get_network_manager()
p = nm.blocking_get(self.icon)
if p:
cache_path = FreeCAD.getUserCachePath()
am_path = os.path.join(cache_path, "AddonManager", "MacroIcons")
@@ -475,7 +489,8 @@ class Macro:
if self.raw_code_url:
fetch_url = self.raw_code_url.rsplit("/", 1)[0] + "/" + other_file
FreeCAD.Console.PrintLog(f"Attempting to fetch {fetch_url}...\n")
p = NetworkManager.AM_NETWORK_MANAGER.blocking_get(fetch_url)
nm = Macro._get_network_manager()
p = nm.blocking_get(fetch_url)
if p:
with open(dst_file, "wb") as f:
f.write(p)
@@ -609,7 +624,8 @@ class Macro:
FreeCAD.Console.PrintLog(
f"Found a File: link for macro {self.name} -- {wiki_icon}\n"
)
p = NetworkManager.AM_NETWORK_MANAGER.blocking_get(wiki_icon)
nm = Macro._get_network_manager()
p = nm.blocking_get(wiki_icon)
if p:
p = p.data().decode("utf8")
f = io.StringIO(p)