Browse Source

Fail gracefully when libSavitar is not found

By catching the ImportError, this prevents the logs being clogged with exceptions in start and when the plugins preference page is touched.
fieldOfView 8 years ago
parent
commit
2b761b87ac
2 changed files with 46 additions and 19 deletions
  1. 23 10
      plugins/3MFReader/__init__.py
  2. 23 9
      plugins/3MFWriter/__init__.py

+ 23 - 10
plugins/3MFReader/__init__.py

@@ -1,9 +1,16 @@
 # Copyright (c) 2015 Ultimaker B.V.
 # Cura is released under the terms of the AGPLv3 or higher.
 from typing import Dict
+import sys
+
+from UM.Logger import Logger
+try:
+    from . import ThreeMFReader
+except ImportError:
+    Logger.log("w", "Could not import ThreeMFReader; libSavitar may be missing")
 
-from . import ThreeMFReader
 from . import ThreeMFWorkspaceReader
+
 from UM.i18n import i18nCatalog
 from UM.Platform import Platform
 catalog = i18nCatalog("cura")
@@ -14,30 +21,36 @@ def getMetaData() -> Dict:
         workspace_extension = "3mf"
     else:
         workspace_extension = "curaproject.3mf"
-    return {
+
+    metaData = {
         "plugin": {
             "name": catalog.i18nc("@label", "3MF Reader"),
             "author": "Ultimaker",
             "version": "1.0",
             "description": catalog.i18nc("@info:whatsthis", "Provides support for reading 3MF files."),
             "api": 3
-        },
-        "mesh_reader": [
+        }
+    }
+    if "ThreeMFReader" in sys.modules:
+        metaData["mesh_reader"] = [
             {
                 "extension": "3mf",
                 "description": catalog.i18nc("@item:inlistbox", "3MF File")
             }
-        ],
-        "workspace_reader":
-        [
+        ]
+        metaData["workspace_reader"] = [
             {
                 "extension": workspace_extension,
                 "description": catalog.i18nc("@item:inlistbox", "3MF File")
             }
         ]
-    }
+    
+    return metaData
 
 
 def register(app):
-    return {"mesh_reader": ThreeMFReader.ThreeMFReader(),
-            "workspace_reader": ThreeMFWorkspaceReader.ThreeMFWorkspaceReader()}
+    if "ThreeMFReader" in sys.modules:
+        return {"mesh_reader": ThreeMFReader.ThreeMFReader(),
+                "workspace_reader": ThreeMFWorkspaceReader.ThreeMFWorkspaceReader()}
+    else:
+        return {}

+ 23 - 9
plugins/3MFWriter/__init__.py

@@ -1,30 +1,39 @@
 # Copyright (c) 2015 Ultimaker B.V.
 # Uranium is released under the terms of the AGPLv3 or higher.
+import sys
 
-from UM.i18n import i18nCatalog
+from UM.Logger import Logger
+try:
+    from . import ThreeMFWriter
+except ImportError:
+    Logger.log("w", "Could not import ThreeMFWriter; libSavitar may be missing")
 from . import ThreeMFWorkspaceWriter
-from . import ThreeMFWriter
+
+from UM.i18n import i18nCatalog
 
 i18n_catalog = i18nCatalog("uranium")
 
 def getMetaData():
-    return {
+    metaData = {
         "plugin": {
             "name": i18n_catalog.i18nc("@label", "3MF Writer"),
             "author": "Ultimaker",
             "version": "1.0",
             "description": i18n_catalog.i18nc("@info:whatsthis", "Provides support for writing 3MF files."),
             "api": 3
-        },
-        "mesh_writer": {
+        }
+    }
+
+    if "ThreeMFWriter" in sys.modules:
+        metaData["mesh_writer"] = {
             "output": [{
                 "extension": "3mf",
                 "description": i18n_catalog.i18nc("@item:inlistbox", "3MF file"),
                 "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml",
                 "mode": ThreeMFWriter.ThreeMFWriter.OutputMode.BinaryMode
             }]
-        },
-        "workspace_writer": {
+        }
+        metaData["workspace_writer"] = {
             "output": [{
                 "extension": "curaproject.3mf",
                 "description": i18n_catalog.i18nc("@item:inlistbox", "Cura Project 3MF file"),
@@ -32,7 +41,12 @@ def getMetaData():
                 "mode": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter.OutputMode.BinaryMode
             }]
         }
-    }
+
+    return metaData
 
 def register(app):
-    return {"mesh_writer": ThreeMFWriter.ThreeMFWriter(), "workspace_writer": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter()}
+    if "ThreeMFWriter" in sys.modules:
+        return {"mesh_writer": ThreeMFWriter.ThreeMFWriter(), 
+                "workspace_writer": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter()}
+    else:
+        return {}