| author | Sandro Knauß <knauss@netzguerilla.net> |
| Sat, 10 Mar 2012 19:01:31 +0100 | |
| branch | devel |
| changeset 220 | 602720314930 |
| parent 218 | 91f87ad13540 |
| child 245 | 4526747a42ca |
| permissions | -rw-r--r-- |
|
175
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
1 |
from twisted.python import log |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
2 |
from twisted.python import threadable |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
3 |
|
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
4 |
from datetime import datetime |
| 135 | 5 |
from collections import MutableMapping |
6 |
||
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
7 |
import schema |
|
156
a4ad521b127b
moving Status to own file
Sandro Knauß <knauss@netzguerilla.net>
parents:
152
diff
changeset
|
8 |
import offer |
| 135 | 9 |
from .dbdefer import dbdefer |
10 |
||
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
11 |
class ExJob: |
|
175
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
12 |
'''One Job is a class that handles one job. One Job has multiple tasks.''' |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
13 |
|
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
14 |
synchronized = ["incStatus", "_status"] |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
15 |
|
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
16 |
def __init__(self, dbjob, recipients, message, offers): |
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
17 |
self.dbjob = dbjob #Connection to mysql job element (id) |
| 135 | 18 |
self.message = message |
19 |
self.recipients = recipients |
|
20 |
self.offers = offers |
|
21 |
self.tasks={} |
|
|
175
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
22 |
self.c = 0 |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
23 |
self.status = "started" |
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
24 |
|
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
25 |
def addTask(self,task): |
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
26 |
self.tasks[task.recipient] = task |
| 135 | 27 |
|
|
175
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
28 |
def incStatus(self): |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
29 |
self.c += 1 |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
30 |
return self.c |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
31 |
|
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
32 |
def _status(self, session, status): |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
33 |
job = schema.Job.get(session, self.dbjob) |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
34 |
if self.status == "error": |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
35 |
return |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
36 |
elif self.status == "sended" and status != "error": |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
37 |
return |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
38 |
job.status = status |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
39 |
self.status = status |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
40 |
session.commit() |
| 135 | 41 |
|
|
175
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
42 |
@dbdefer |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
43 |
def setStatus(self, session, task, status): |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
44 |
c = self.incStatus() |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
45 |
job = schema.Job.get(session, self.dbjob) |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
46 |
|
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
47 |
if job.status in ["started","init"]: |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
48 |
self._status(session,"sending") |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
49 |
if c == len(self.recipients): |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
50 |
self._status(session,"sended") |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
51 |
|
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
52 |
if status.costs > 0: |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
53 |
o = schema.Offer.get(session, status.provider.name, status.route, self.message.typ) |
|
215
5bacdb7e94d1
smstrade.StatusCode update
Sandro Knauß <knauss@netzguerilla.net>
parents:
175
diff
changeset
|
54 |
job.messages.append(schema.Message(price=status.costs, isBilled=False, recipient=str(task.recipient), count=status.count, exID=status.exID, date=datetime.today(), offer=o)) |
|
175
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
55 |
session.commit() |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
56 |
|
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
57 |
log.msg("Job(%s) to '%s' ended sucecessfully via %s:%s."%(self.dbjob, task.recipient, status.provider.name,status.route)) |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
58 |
|
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
59 |
@dbdefer |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
60 |
def setError(self, session, task, err): |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
61 |
self.incStatus() |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
62 |
if self.status != "error": |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
63 |
self._status(session,"error") |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
64 |
log.err(_why="Error: Job(%s) to '%s' failed."%(self.dbjob, task.recipient),_stuff=err) |
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
65 |
|
|
c29acd5fb841
splitting tests.job -> test.job, tests.tasks
Sandro Knauß <knauss@netzguerilla.net>
parents:
156
diff
changeset
|
66 |
threadable.synchronize(ExJob) |
| 135 | 67 |
|
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
68 |
class ExJobs(dict, MutableMapping): |
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
69 |
|
| 135 | 70 |
@dbdefer |
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
71 |
def create(self, session, user, recipients, message, offers, info=None): |
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
72 |
user = session.merge(user) |
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
73 |
job = schema.Job(info=info, status="started") |
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
74 |
user.jobs.append(job) |
| 135 | 75 |
session.commit() |
|
152
14c99c89edf4
using extendProvide in Job.create
Sandro Knauß <knauss@netzguerilla.net>
parents:
142
diff
changeset
|
76 |
|
|
156
a4ad521b127b
moving Status to own file
Sandro Knauß <knauss@netzguerilla.net>
parents:
152
diff
changeset
|
77 |
o = offer.extendProvider(user, message.typ, offers, session=session) |
|
152
14c99c89edf4
using extendProvide in Job.create
Sandro Knauß <knauss@netzguerilla.net>
parents:
142
diff
changeset
|
78 |
self[job.id] = ExJob(job.id, recipients, message, o) |
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
79 |
return self[job.id] |
| 135 | 80 |
|
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
81 |
exJobs = ExJobs() |