iro/model/job.py
branchdevel
changeset 140 75d0eaaa871d
parent 135 f8640c663e3e
child 142 7d0c1fa97123
--- a/iro/model/job.py	Thu Feb 09 17:35:23 2012 +0100
+++ b/iro/model/job.py	Thu Feb 09 17:36:31 2012 +0100
@@ -1,13 +1,8 @@
-import random
 from collections import MutableMapping
 
-from twisted.python import threadable
-
-from .schema import Job as DBJob
+import schema
 from .dbdefer import dbdefer
 
-from iro.error import JobNotFound
-
 class Status:
     '''status for one recipient'''
     todo = 1
@@ -19,16 +14,17 @@
         self.offer = None           #the offer over that this job was done
         self.errtext = None         #the error text
 
-class Job:
+class ExJob:
     '''One Job is a class that handles one job has multiple tasks'''
-    def __init__(self, user, recipients, message, offers, info=None):
-        self.dbjob = None       #Connection to mysql job element
+    def __init__(self, dbjob, recipients, message, offers):
+        self.dbjob = dbjob       #Connection to mysql job element (id)
         self.message = message
         self.recipients = recipients
         self.offers = offers
-        self.info = info
         self.tasks={}
-        self.user = user
+
+    def addTask(self,task):
+        self.tasks[task.recipient] = task
 
     def setStatus(task,status):
         pass
@@ -36,57 +32,16 @@
     def setError(task,err):
         pass
 
+class ExJobs(dict, MutableMapping):
+
     @dbdefer
-    def registerJob(self, session, id):
-        self.id = id
-        u = session.merge(self.user)
-        self.dbjob=DBJob(hash=self.id, info=self.info, status="started")
-        u.jobs.append(self.dbjob)
+    def create(self, session, user, recipients, message, offers, info=None):
+        user = session.merge(user)
+        job = schema.Job(info=info, status="started")
+        user.jobs.append(job)
         session.commit()
 
-    @classmethod
-    @dbdefer
-    def fromDB(cls, session, id):
-        j = session.query(DBJob).filter_by(hash=id).first()
-        if not j:
-            raise JobNotFound
-        job = cls(j.user, [], None, None, j.info)
-        job.dbjob = j
-        job.id = j.hash
-        return job
-
-
-class Jobs(dict, MutableMapping):
-
-    synchronized = ['getNewId']
-
-    def create(self, user, recipients, message, offers, info=None):
-        job = Job(user, recipients, message, offers, info)
-        job.registerJob(id = self.getNewId())
-        self[job.id] = job
-        return job
+        self[job.id] = ExJob(job.id, recipients, message, offers)
+        return self[job.id]
 
-    @dbdefer
-    def getNewId(self, session):
-        while True:
-            id = ''.join([random.choice('0123456789abcdef') for i in range(40)])
-            if id not in self.keys():
-                self[id]=None
-                if not session.query(DBJob.hash).filter_by(hash=id).first():
-                    return id
-
-    def __getitem__(self, key):
-        try:
-            return dict.__getitem__(self, key)
-        except KeyError as e:
-            pass
-       
-        try:
-            self[key]=Job.fromDB(key)
-            return self[key]
-        except JobNotFound:
-            raise e
-
-threadable.synchronize(Jobs)
-
-jobs = Jobs()
+exJobs = ExJobs()