diff --git a/netrender/client.py b/netrender/client.py index 069d5bdb8b92fece76f590c7e52afe65f432b624..f246dcd8cc9c8a12e63c902df58433b57d2e4b0e 100644 --- a/netrender/client.py +++ b/netrender/client.py @@ -443,9 +443,7 @@ class NetworkRenderEngine(bpy.types.RenderEngine): result_path = os.path.join(bpy.path.abspath(netsettings.path), "output.exr") folder = os.path.split(result_path)[0] - - if not os.path.exists(folder): - os.mkdir(folder) + verifyCreateDir(folder) f = open(result_path, "wb") diff --git a/netrender/master.py b/netrender/master.py index d5989f8c3f5d9f01323228e1cb5b0950aebcc754..69a185b1de5a316abf1cb47828ca7d5bf97c5402 100644 --- a/netrender/master.py +++ b/netrender/master.py @@ -979,8 +979,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer): else: self.path = path - if not os.path.exists(self.path): - os.mkdir(self.path) + verifyCreateDir(self.path) self.slave_timeout = 5 # 5 mins: need a parameter for that @@ -1105,8 +1104,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer): # create job directory job.save_path = os.path.join(self.path, "job_" + job.id) - if not os.path.exists(job.save_path): - os.mkdir(job.save_path) + verifyCreateDir(job.save_path) job.save() diff --git a/netrender/slave.py b/netrender/slave.py index fe3979a7272bbcf4c7fd448ffe33e67af4275c5f..d8d82e8dd5ab3d9fa4225a0cdb8531696f2d767f 100644 --- a/netrender/slave.py +++ b/netrender/slave.py @@ -144,8 +144,7 @@ def render_slave(engine, netsettings, threads): slave_id = response.getheader("slave-id") NODE_PREFIX = os.path.join(slave_path, "slave_" + slave_id) - if not os.path.exists(NODE_PREFIX): - os.mkdir(NODE_PREFIX) + verifyCreateDir(NODE_PREFIX) engine.update_stats("", "Network render connected to master, waiting for jobs") @@ -161,8 +160,7 @@ def render_slave(engine, netsettings, threads): engine.update_stats("", "Network render processing job from master") JOB_PREFIX = os.path.join(NODE_PREFIX, "job_" + job.id) - if not os.path.exists(JOB_PREFIX): - os.mkdir(JOB_PREFIX) + verifyCreateDir(JOB_PREFIX) # set tempdir for fsaa temp files # have to set environ var because render is done in a subprocess and that's the easiest way to propagate the setting diff --git a/netrender/utils.py b/netrender/utils.py index c173e02dbbc04c61ce19b75936dd287866ed033c..7a2abb6beaac12385af199e710d8ae7db6728bfe 100644 --- a/netrender/utils.py +++ b/netrender/utils.py @@ -269,6 +269,23 @@ def hashData(data): m.update(data) return m.hexdigest() +def verifyCreateDir(directory_path): + original_path = directory_path + directory_path = os.path.expanduser(directory_path) + directory_path = os.path.expandvars(directory_path) + if not os.path.exists(directory_path): + try: + os.makedirs(directory_path) + print("Created directory:", directory_path) + if original_path != directory_path: + print("Expanded from the following path:", original_path) + except: + print("Couldn't create directory:", directory_path) + if original_path != directory_path: + print("Expanded from the following path:", original_path) + raise + + def cacheName(ob, point_cache): name = point_cache.name if name == "": @@ -332,9 +349,7 @@ def createLocalPath(rfile, prefixdirectory, prefixpath, forcelocal): suffix = os.path.join(last, suffix) directory = os.path.join(prefixdirectory, suffix) - - if not os.path.exists(directory): - os.mkdir(directory) + verifyCreateDir(directory) finalpath = os.path.join(directory, name) else: @@ -350,8 +365,7 @@ def createLocalPath(rfile, prefixdirectory, prefixpath, forcelocal): directory = directory.replace("../") directory = os.path.join(prefixdirectory, directory) - if not os.path.exists(directory): - os.mkdir(directory) + verifyCreateDir(directory) finalpath = os.path.join(directory, name)