From b67a983a02363bd17a4e6a96e650e65aa2d4eb7a Mon Sep 17 00:00:00 2001 From: Elrond Date: Tue, 14 Jun 2011 20:39:14 +0200 Subject: [PATCH] Move destroy_workbench to Workbench class And add a lot of warnings, as the checks for "being part of the main Manager" are all gone. --- mediagoblin/process_media/__init__.py | 2 +- mediagoblin/tests/test_workbench.py | 15 +++------ mediagoblin/workbench.py | 45 ++++++++++++--------------- 3 files changed, 25 insertions(+), 37 deletions(-) diff --git a/mediagoblin/process_media/__init__.py b/mediagoblin/process_media/__init__.py index bd067e39..f37bf080 100644 --- a/mediagoblin/process_media/__init__.py +++ b/mediagoblin/process_media/__init__.py @@ -75,4 +75,4 @@ def process_media_initial(media_id): entry.save() # clean up workbench - mgg.workbench_manager.destroy_workbench(workbench) + workbench.destroy_self() diff --git a/mediagoblin/tests/test_workbench.py b/mediagoblin/tests/test_workbench.py index db27dfc6..953835a1 100644 --- a/mediagoblin/tests/test_workbench.py +++ b/mediagoblin/tests/test_workbench.py @@ -37,7 +37,7 @@ class TestWorkbench(object): this_workbench = self.workbench_manager.create_workbench() tmpname = this_workbench.joinpath('temp.txt') assert tmpname == os.path.join(this_workbench.dir, 'temp.txt') - self.workbench_manager.destroy_workbench(this_workbench) + this_workbench.destroy_self() def test_destroy_workbench(self): # kill a workbench @@ -49,17 +49,10 @@ class TestWorkbench(object): assert os.path.exists(tmpfile_name) - self.workbench_manager.destroy_workbench(this_workbench) + wb_dir = this_workbench.dir + this_workbench.destroy_self() assert not os.path.exists(tmpfile_name) - assert not os.path.exists(this_workbench.dir) - - # make sure we can't kill other stuff though - dont_kill_this = workbench.Workbench(tempfile.mkdtemp()) - - assert_raises( - workbench.WorkbenchOutsideScope, - self.workbench_manager.destroy_workbench, - dont_kill_this) + assert not os.path.exists(wb_dir) def test_localized_file(self): tmpdir, this_storage = get_tmp_filestorage() diff --git a/mediagoblin/workbench.py b/mediagoblin/workbench.py index 32229d2e..f83c4fa0 100644 --- a/mediagoblin/workbench.py +++ b/mediagoblin/workbench.py @@ -23,24 +23,21 @@ DEFAULT_WORKBENCH_DIR = os.path.join( tempfile.gettempdir(), u'mgoblin_workbench') -# Exception(s) -# ------------ - -class WorkbenchOutsideScope(Exception): - """ - Raised when a workbench is outside a WorkbenchManager scope. - """ - pass - - # Actual workbench stuff # ---------------------- class Workbench(object): """ Represent the directory for the workbench + + WARNING: DO NOT create Workbench objects on your own, + let the WorkbenchManager do that for you! """ def __init__(self, dir): + """ + WARNING: DO NOT create Workbench objects on your own, + let the WorkbenchManager do that for you! + """ self.dir = dir def __unicode__(self): @@ -117,6 +114,19 @@ class Workbench(object): return full_dest_filename + def destroy_self(self): + """ + Destroy this workbench! Deletes the directory and all its contents! + + WARNING: Does no checks for a sane value in self.dir! + """ + # just in case + workbench = os.path.abspath(self.dir) + + shutil.rmtree(workbench) + + del self.dir + class WorkbenchManager(object): """ @@ -136,18 +146,3 @@ class WorkbenchManager(object): Create and return the path to a new workbench (directory). """ return Workbench(tempfile.mkdtemp(dir=self.base_workbench_dir)) - - def destroy_workbench(self, workbench): - """ - Destroy this workbench! Deletes the directory and all its contents! - - Makes sure the workbench actually belongs to this manager though. - """ - # just in case - workbench = os.path.abspath(workbench.dir) - - if not workbench.startswith(self.base_workbench_dir): - raise WorkbenchOutsideScope( - "Can't destroy workbench outside the base workbench dir") - - shutil.rmtree(workbench) -- 2.25.1