--- 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()