diff --git a/args.py b/args.py index a2a64e8..4e04cda 100644 --- a/args.py +++ b/args.py @@ -64,7 +64,12 @@ (msg, b) = self.parse_type(self.folder) if msg is not None: return (msg, None) - ret["base"] = b + ret["base_dir"] = b + elif arg == "--out" or arg == "-o": + (msg, o) = self.parse_type(self.folder) + if msg is not None: + return (msg, None) + ret["out_dir"] = o elif arg == "--debug" or arg == "-d": ret["debug"] = True else: diff --git a/args.py b/args.py index a2a64e8..4e04cda 100644 --- a/args.py +++ b/args.py @@ -64,7 +64,12 @@ (msg, b) = self.parse_type(self.folder) if msg is not None: return (msg, None) - ret["base"] = b + ret["base_dir"] = b + elif arg == "--out" or arg == "-o": + (msg, o) = self.parse_type(self.folder) + if msg is not None: + return (msg, None) + ret["out_dir"] = o elif arg == "--debug" or arg == "-d": ret["debug"] = True else: diff --git a/exporter.py b/exporter.py index d67d1f4..64836e4 100755 --- a/exporter.py +++ b/exporter.py @@ -85,9 +85,10 @@ return sent_all_jobs and not len(jobs) if not from_stdin: - for i in args["input"]: + input = args.pop("input") + for i in input: try: - job = Job(in_file = i) + job = Job(in_file = i, **args) jobs[job.id] = job except Exception, e: print e @@ -118,9 +119,10 @@ if a in line_args: print "Top level args may not be passed in stdin: " + top_level_args return True - for i in line_args["input"]: + input = line_args.pop("input") + for i in input: try: - job = Job(in_file = i) + job = Job(in_file = i, **line_args) jobs[job.id] = job send_job(job) except Exception, e: @@ -140,7 +142,11 @@ if cmd == "done" and "id" in msg: id = int(msg["id"]) if id in jobs: + job = jobs[id] jobs.pop(id) + + job.write_results({} if "data" not in msg else msg["data"], [] if "resources" not in msg else msg["resources"]) + if check_jobs_done(): return False return True diff --git a/args.py b/args.py index a2a64e8..4e04cda 100644 --- a/args.py +++ b/args.py @@ -64,7 +64,12 @@ (msg, b) = self.parse_type(self.folder) if msg is not None: return (msg, None) - ret["base"] = b + ret["base_dir"] = b + elif arg == "--out" or arg == "-o": + (msg, o) = self.parse_type(self.folder) + if msg is not None: + return (msg, None) + ret["out_dir"] = o elif arg == "--debug" or arg == "-d": ret["debug"] = True else: diff --git a/exporter.py b/exporter.py index d67d1f4..64836e4 100755 --- a/exporter.py +++ b/exporter.py @@ -85,9 +85,10 @@ return sent_all_jobs and not len(jobs) if not from_stdin: - for i in args["input"]: + input = args.pop("input") + for i in input: try: - job = Job(in_file = i) + job = Job(in_file = i, **args) jobs[job.id] = job except Exception, e: print e @@ -118,9 +119,10 @@ if a in line_args: print "Top level args may not be passed in stdin: " + top_level_args return True - for i in line_args["input"]: + input = line_args.pop("input") + for i in input: try: - job = Job(in_file = i) + job = Job(in_file = i, **line_args) jobs[job.id] = job send_job(job) except Exception, e: @@ -140,7 +142,11 @@ if cmd == "done" and "id" in msg: id = int(msg["id"]) if id in jobs: + job = jobs[id] jobs.pop(id) + + job.write_results({} if "data" not in msg else msg["data"], [] if "resources" not in msg else msg["resources"]) + if check_jobs_done(): return False return True diff --git a/job.py b/job.py index 4896c51..d769756 100644 --- a/job.py +++ b/job.py @@ -25,19 +25,25 @@ class Job: next_id = 0 - def __init__(self, in_file, base_dir = None, out_dir = None): + def __init__(self, in_file, base_dir = None, out_dir = None, **kwargs): if not os.path.isfile(in_file): raise Exception("Failed: couldn't open " + in_file) self.id = Job.next_id Job.next_id += 1 self.in_file = abspath(in_file) split = os.path.split(self.in_file) - self.base_dir = base_dir if base_dir is not None else split[0] + self.base_dir = abspath(base_dir) if base_dir is not None else split[0] if not file_in_path(self.in_file, self.base_dir): raise Exception("Failed: " + in_file + " is not in base dir " + self.base_dir) + self.rel_path = os.path.split(self.in_file[len(self.base_dir) + 1:])[0] + self.out_dir = abspath(out_dir) if out_dir is not None else self.base_dir self.name = os.path.splitext(split[1])[0] self.done = False self.graphics = [] + #print self.in_file + #print self.base_dir + #print self.rel_path + #print self.out_dir with open(self.in_file, mode="r") as f: graphics = [] file_json = {} @@ -57,6 +63,19 @@ def get_cmd(self): return {"graphics":[g.get_cmd() for g in self.graphics], "id":self.id} + def write_results(self, data, resources): + for i,r in enumerate(resources): + path = os.path.join(self.out_dir, self.rel_path, "%s_%04d.png" % (self.name, i)) + with open(path, "wb") as f: + f.write(base64.b64decode(r)) + print "resource file: " + path + for name,details in data.iteritems(): + if len(data) == 1: + pass + else: + pass + + class Graphic: def __init__(self, folder, json): self.json = json