17 self.status = Status.todo |
12 self.status = Status.todo |
18 self.job = job |
13 self.job = job |
19 self.offer = None #the offer over that this job was done |
14 self.offer = None #the offer over that this job was done |
20 self.errtext = None #the error text |
15 self.errtext = None #the error text |
21 |
16 |
22 class Job: |
17 class ExJob: |
23 '''One Job is a class that handles one job has multiple tasks''' |
18 '''One Job is a class that handles one job has multiple tasks''' |
24 def __init__(self, user, recipients, message, offers, info=None): |
19 def __init__(self, dbjob, recipients, message, offers): |
25 self.dbjob = None #Connection to mysql job element |
20 self.dbjob = dbjob #Connection to mysql job element (id) |
26 self.message = message |
21 self.message = message |
27 self.recipients = recipients |
22 self.recipients = recipients |
28 self.offers = offers |
23 self.offers = offers |
29 self.info = info |
|
30 self.tasks={} |
24 self.tasks={} |
31 self.user = user |
25 |
|
26 def addTask(self,task): |
|
27 self.tasks[task.recipient] = task |
32 |
28 |
33 def setStatus(task,status): |
29 def setStatus(task,status): |
34 pass |
30 pass |
35 |
31 |
36 def setError(task,err): |
32 def setError(task,err): |
37 pass |
33 pass |
38 |
34 |
|
35 class ExJobs(dict, MutableMapping): |
|
36 |
39 @dbdefer |
37 @dbdefer |
40 def registerJob(self, session, id): |
38 def create(self, session, user, recipients, message, offers, info=None): |
41 self.id = id |
39 user = session.merge(user) |
42 u = session.merge(self.user) |
40 job = schema.Job(info=info, status="started") |
43 self.dbjob=DBJob(hash=self.id, info=self.info, status="started") |
41 user.jobs.append(job) |
44 u.jobs.append(self.dbjob) |
|
45 session.commit() |
42 session.commit() |
46 |
43 |
47 @classmethod |
44 self[job.id] = ExJob(job.id, recipients, message, offers) |
48 @dbdefer |
45 return self[job.id] |
49 def fromDB(cls, session, id): |
|
50 j = session.query(DBJob).filter_by(hash=id).first() |
|
51 if not j: |
|
52 raise JobNotFound |
|
53 job = cls(j.user, [], None, None, j.info) |
|
54 job.dbjob = j |
|
55 job.id = j.hash |
|
56 return job |
|
57 |
46 |
58 |
47 exJobs = ExJobs() |
59 class Jobs(dict, MutableMapping): |
|
60 |
|
61 synchronized = ['getNewId'] |
|
62 |
|
63 def create(self, user, recipients, message, offers, info=None): |
|
64 job = Job(user, recipients, message, offers, info) |
|
65 job.registerJob(id = self.getNewId()) |
|
66 self[job.id] = job |
|
67 return job |
|
68 |
|
69 @dbdefer |
|
70 def getNewId(self, session): |
|
71 while True: |
|
72 id = ''.join([random.choice('0123456789abcdef') for i in range(40)]) |
|
73 if id not in self.keys(): |
|
74 self[id]=None |
|
75 if not session.query(DBJob.hash).filter_by(hash=id).first(): |
|
76 return id |
|
77 |
|
78 def __getitem__(self, key): |
|
79 try: |
|
80 return dict.__getitem__(self, key) |
|
81 except KeyError as e: |
|
82 pass |
|
83 |
|
84 try: |
|
85 self[key]=Job.fromDB(key) |
|
86 return self[key] |
|
87 except JobNotFound: |
|
88 raise e |
|
89 |
|
90 threadable.synchronize(Jobs) |
|
91 |
|
92 jobs = Jobs() |
|