diff -r 65117fd28400 -r 75d0eaaa871d iro/model/job.py --- 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()