diff --git a/src/blenderbim/blenderbim/bim/module/debug/__init__.py b/src/blenderbim/blenderbim/bim/module/debug/__init__.py index 74bfcc9b07..c7acae629d 100644 --- a/src/blenderbim/blenderbim/bim/module/debug/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/debug/__init__.py @@ -28,6 +28,7 @@ classes = ( operator.PrintIfcFile, operator.PrintObjectPlacement, operator.ProfileImportIFC, + operator.PurgeHdf5Cache, operator.PurgeIfcLinks, operator.RewindInspector, operator.SelectExpressFile, diff --git a/src/blenderbim/blenderbim/bim/module/debug/operator.py b/src/blenderbim/blenderbim/bim/module/debug/operator.py index d564943e72..bdf852b568 100644 --- a/src/blenderbim/blenderbim/bim/module/debug/operator.py +++ b/src/blenderbim/blenderbim/bim/module/debug/operator.py @@ -328,3 +328,12 @@ class SelectExpressFile(bpy.types.Operator): def invoke(self, context, event): context.window_manager.fileselect_add(self) return {"RUNNING_MODAL"} + + +class PurgeHdf5Cache(bpy.types.Operator): + bl_idname = "bim.purge_hdf5_cache" + bl_label = "Purge HDF5 Cache" + + def execute(self, context): + core.purge_hdf5_cache(tool.Debug) + return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/debug/ui.py b/src/blenderbim/blenderbim/bim/module/debug/ui.py index 22030d3e37..43cdb39dac 100644 --- a/src/blenderbim/blenderbim/bim/module/debug/ui.py +++ b/src/blenderbim/blenderbim/bim/module/debug/ui.py @@ -46,6 +46,9 @@ class BIM_PT_debug(Panel): row = layout.row() row.operator("bim.print_ifc_file") + row = layout.row() + row.operator("bim.purge_hdf5_cache") + row = layout.row() row.operator("bim.purge_ifc_links") diff --git a/src/blenderbim/blenderbim/core/debug.py b/src/blenderbim/blenderbim/core/debug.py index 6e3970499b..65e7ac0607 100644 --- a/src/blenderbim/blenderbim/core/debug.py +++ b/src/blenderbim/blenderbim/core/debug.py @@ -19,3 +19,7 @@ def parse_express(debug, filename): debug.add_schema_identifier(debug.load_express(filename)) + + +def purge_hdf5_cache(debug): + debug.purge_hdf5_cache() diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 477ea3a095..65b75af91f 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -89,6 +89,7 @@ class Context: class Debug: def add_schema_identifier(cls, schema): pass def load_express(cls, filename): pass + def purge_hdf5_cache(cls): pass @interface diff --git a/src/blenderbim/blenderbim/tool/debug.py b/src/blenderbim/blenderbim/tool/debug.py index 17d0a7ee41..bc02fd6a1b 100644 --- a/src/blenderbim/blenderbim/tool/debug.py +++ b/src/blenderbim/blenderbim/tool/debug.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with BlenderBIM Add-on. If not, see . +import os import bpy import ifcopenshell.express import blenderbim.core.tool @@ -32,3 +33,10 @@ class Debug(blenderbim.core.tool.Debug): schema = ifcopenshell.express.parse(filename) ifcopenshell.register_schema(schema) return schema + + @classmethod + def purge_hdf5_cache(cls): + cache_dir = os.path.join(bpy.context.scene.BIMProperties.data_dir, "cache") + filelist = [f for f in os.listdir(cache_dir) if f.endswith(".h5")] + for f in filelist: + os.remove(os.path.join(cache_dir, f)) diff --git a/src/blenderbim/test/core/test_debug.py b/src/blenderbim/test/core/test_debug.py index 6a0278b840..04a6895c90 100644 --- a/src/blenderbim/test/core/test_debug.py +++ b/src/blenderbim/test/core/test_debug.py @@ -25,3 +25,9 @@ class TestParseExpress: debug.load_express("filename").should_be_called().will_return("schema") debug.add_schema_identifier("schema").should_be_called() subject.parse_express(debug, "filename") + + +class TestPurgeHdf5Cache: + def test_run(self, debug): + debug.purge_hdf5_cache().should_be_called() + subject.purge_hdf5_cache(debug) diff --git a/src/blenderbim/test/tool/test_debug.py b/src/blenderbim/test/tool/test_debug.py index 1ada44ad5f..31e69d4bea 100644 --- a/src/blenderbim/test/tool/test_debug.py +++ b/src/blenderbim/test/tool/test_debug.py @@ -43,3 +43,14 @@ class TestLoadExpress(NewFile): schema = subject.load_express(os.path.join(cwd, "..", "files", "test.exp")) assert schema.schema_name == "IFCROGUE" return schema + + +class TestPurgeHdf5Cache(NewFile): + def test_run(self): + cache_dir = os.path.join(bpy.context.scene.BIMProperties.data_dir, "cache") + test_file = os.path.join(cache_dir, "test.h5") + if not os.path.isfile(test_file): + fp = open(test_file, "x") + fp.close() + subject.purge_hdf5_cache() + assert not [f for f in os.listdir(cache_dir) if f.endswith(".h5")]