diff options
Diffstat (limited to 'netrender/model.py')
-rw-r--r-- | netrender/model.py | 90 |
1 files changed, 61 insertions, 29 deletions
diff --git a/netrender/model.py b/netrender/model.py index c2331315..c5ee54f0 100644 --- a/netrender/model.py +++ b/netrender/model.py @@ -19,6 +19,11 @@ import netrender.versioning as versioning from netrender.utils import * +TAG_BAKING = "baking" +TAG_RENDER = "render" + +TAG_ALL = set((TAG_BAKING, TAG_RENDER)) + class LogFile: def __init__(self, job_id = 0, slave_id = 0, frames = []): self.job_id = job_id @@ -47,14 +52,22 @@ class LogFile: class RenderSlave: _slave_map = {} - def __init__(self): + def __init__(self, info = None): self.id = "" - self.name = "" - self.address = ("",0) - self.stats = "" self.total_done = 0 self.total_error = 0 self.last_seen = 0.0 + + if info: + self.name = info.name + self.address = info.address + self.stats = info.stats + self.tags = info.tags + else: + self.name = "" + self.address = ("",0) + self.stats = "" + self.tags = set() def serialize(self): return { @@ -64,7 +77,8 @@ class RenderSlave: "stats": self.stats, "total_done": self.total_done, "total_error": self.total_error, - "last_seen": self.last_seen + "last_seen": self.last_seen, + "tags": tuple(self.tags) } @staticmethod @@ -85,6 +99,7 @@ class RenderSlave: slave.total_done = data["total_done"] slave.total_error = data["total_error"] slave.last_seen = data["last_seen"] + slave.tags = set(data["tags"]) if cache: RenderSlave._slave_map[slave_id] = slave @@ -101,6 +116,14 @@ JOB_TYPES = { JOB_VCS: "Versioned", } +JOB_SUB_RENDER = 1 +JOB_SUB_BAKING = 2 + +JOB_SUBTYPES = { + JOB_SUB_RENDER: "Render", + JOB_SUB_BAKING: "Baking", + } + class VersioningInfo: def __init__(self, info = None): self._system = None @@ -186,18 +209,8 @@ class RenderFile: return rfile class RenderJob: - def __init__(self, job_info = None): + def __init__(self, info = None): self.id = "" - self.type = JOB_BLENDER - self.name = "" - self.category = "None" - self.status = JOB_WAITING - self.files = [] - self.chunks = 0 - self.priority = 0 - self.blacklist = [] - self.render = "BLENDER_RENDER" - self.version_info = None self.resolution = None @@ -205,23 +218,38 @@ class RenderJob: self.last_dispatched = 0.0 self.frames = [] - if job_info: - self.type = job_info.type - self.name = job_info.name - self.category = job_info.category - self.status = job_info.status - self.files = job_info.files - self.chunks = job_info.chunks - self.priority = job_info.priority - self.blacklist = job_info.blacklist - self.version_info = job_info.version_info - self.render = job_info.render + if info: + self.type = info.type + self.subtype = info.subtype + self.name = info.name + self.category = info.category + self.tags = info.tags + self.status = info.status + self.files = info.files + self.chunks = info.chunks + self.priority = info.priority + self.blacklist = info.blacklist + self.version_info = info.version_info + self.render = info.render + else: + self.type = JOB_BLENDER + self.subtype = JOB_SUB_RENDER + self.name = "" + self.category = "None" + self.tags = set() + self.status = JOB_WAITING + self.files = [] + self.chunks = 0 + self.priority = 0 + self.blacklist = [] + self.version_info = None + self.render = "BLENDER_RENDER" def hasRenderResult(self): - return self.type in (JOB_BLENDER, JOB_VCS) + return self.subtype == JOB_SUB_RENDER def rendersWithBlender(self): - return self.type in (JOB_BLENDER, JOB_VCS) + return self.subtype == JOB_SUB_RENDER def addFile(self, file_path, start=-1, end=-1, signed=True): def isFileInFrames(): @@ -297,8 +325,10 @@ class RenderJob: return { "id": self.id, "type": self.type, + "subtype": self.subtype, "name": self.name, "category": self.category, + "tags": tuple(self.tags), "status": self.status, "files": [f.serialize() for f in self.files if f.start == -1 or not frames or (f.start <= max_frame and f.end >= min_frame)], "frames": [f.serialize() for f in self.frames if not frames or f in frames], @@ -320,8 +350,10 @@ class RenderJob: job = RenderJob() job.id = data["id"] job.type = data["type"] + job.subtype = data["subtype"] job.name = data["name"] job.category = data["category"] + job.tags = set(data["tags"]) job.status = data["status"] job.files = [RenderFile.materialize(f) for f in data["files"]] job.frames = [RenderFrame.materialize(f) for f in data["frames"]] |