id summary reporter owner description type status priority milestone component resolution keywords cc parents 565 Make workbench easier to use spaetz "Currently, you have to get a Workbench from the workbench manager and must not forget to destroy (delete) it yourself after processing. How hard this is? 2 of our current media_type processors (ascii and video) NEVER called workbench.destroy_workbench() which means tons of temporary files and directories were kept around. NONE of our current media_type processors destroy the workbench in case of an exception in the processing function, e.g. on invalid images and stuff. Nice DOS attacks are to be expected, filling up our temp space :-). Finally, we need the same boilerplate for all processing functions, getting a workbench, destroying a workbench, even in the face of exceptions etc. So I propose: 1) to make Workbench() a context manager so that we can do {{{ with Workbench() as bench: bench.do_stuff.... }}} which nicely cleans up after itself. 2) A decorator ""get_workbench"" which will create a Workbench, pass it to the processing function and cleans up when processing finished (even in the face of exceptions). This saves us lots of boilerplate and at least one level of indention. Fortunately, I happen to coincidentally have a branch lying around doing just the above things." defect closed major 0.3.3 programming fixed review