--- a/iro/controller/viewinterface.py Tue Feb 07 01:56:59 2012 +0100
+++ b/iro/controller/viewinterface.py Wed Feb 08 14:19:09 2012 +0100
@@ -2,7 +2,7 @@
from ..model.decorators import vUser, vRoute, dbdefer, vTyp
from ..model.message import SMS, Fax, Mail
-from ..validate import validate, vBool, vHash, vTel, vEmail
+from ..validate import validate, vBool, vTel, vEmail, vInteger
from .task import createJob
@@ -11,7 +11,7 @@
'''
@validate(kwd="detailed", func=vBool, need=False)
- @validate(kwd="id", func=vHash, need=False, maxlength=40)
+ @validate(kwd="id", func=vInteger, minv=0, need=False, none_allowed=True)
@vUser
@dbdefer
def status(self, session, user, id=None, detailed=False):
@@ -33,14 +33,14 @@
ret={}
if not id:
for job in user.jobs:
- ret[job.hash]={"status":job.status}
+ ret[str(job.id)]={"status":job.status}
else:
- ret[id]={"status":user.job(id).status}
-
+ ret[str(id)]={"status":user.job(id).status}
+
return ret
@vUser
- @validate(kwd="id", func=vHash,maxlength=40)
+ @validate(kwd="id", func=vInteger, minv=0)
def stop(self, user, id):
'''Stoppt den angegeben Auftrag.
--- a/iro/model/schema.py Tue Feb 07 01:56:59 2012 +0100
+++ b/iro/model/schema.py Wed Feb 08 14:19:09 2012 +0100
@@ -40,7 +40,7 @@
filters = [ Message.isBilled==False, # only unbilled messages
Job.user==self.user, # only jobs connected to user
Message.offer==self.offer, # only messages in the right offer
- Message.job_hash==Job.hash, # join Message and Job
+ Message.job_id==Job.id, # join Message and Job
]
return object_session(self).query(*query).filter(and_(*filters)).group_by(Job.info)
@@ -61,7 +61,7 @@
isBilled = Column(Boolean)
date = Column(DateTime)
price = Column(Numeric(8,4))
- job_hash = Column("job", String(40), ForeignKey('job.hash'))
+ job_id = Column("job", String(40), ForeignKey('job.id'))
job = relationship("Job", backref=backref('messages'))
offer_id = Column("offer",String(100), ForeignKey('offer.name'))
offer = relationship("Offer", backref=backref('messages'))
@@ -70,14 +70,14 @@
class Job(Base):
"""Ein kompletter Auftrag, der an Iro zum verschicken übergeben wird. Status zeigt den generellen Status des Auftrages an (<em>init</em>, <em>started</em>, <em>sending</em>, <em>sended</em> oder <em>error</em>). <em>info</em> wird verwendet um dem Benutzer eine Möglickeit zu geben verschiede Auftragsgruppen zu erstellen."""
__tablename__ = "job"
- hash = Column(String(40), primary_key=True)
+ id = Column(Integer, Sequence('job_id_seq'), primary_key=True)
info = Column(String(100))
status = Column(Enum("init","started","sending","sended","error"))
user_id = Column("user", String(100), ForeignKey('apiuser.name'))
user = relationship("User", backref=backref('jobs'))
def __repr__(self):
- return "<Job('%s','%s','%s','%s')>"%(self.hash,self.info, self.status, self.user_id)
+ return "<Job('%s','%s','%s','%s')>"%(self.id,self.info, self.status, self.user_id)
class User(Base):
"""Die Benutzerdatenbank von Iro. <em>ng_kunde</em> ist der verknüpfte netzguerilla.net Benutzer, der die Rechnung zahlt."""
@@ -102,7 +102,7 @@
return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters))
def job(self, id):
- job = object_session(self).query(Job).join(User).filter(and_(User.name == self.name, Job.hash==id)).first()
+ job = object_session(self).query(Job).join(User).filter(and_(User.name == self.name, Job.id==id)).first()
if job is None:
raise JobNotFound()
return job
--- a/iro/validate.py Tue Feb 07 01:56:59 2012 +0100
+++ b/iro/validate.py Wed Feb 08 14:19:09 2012 +0100
@@ -19,6 +19,26 @@
raise ValidateException(field=field, msg='%s is not boolean' % field)
+def vInteger(value, field, minv=None, maxv=None, none_allowed=False):
+
+ if none_allowed and value in [None,'']:
+ return None
+
+ try:
+ ret = int(value)
+ except ValueError:
+ raise ValidateException(field=field)
+ except TypeError:
+ raise ValidateException(field=field)
+
+ if minv and ret < minv:
+ raise ValidateException(field=field)
+
+ if maxv and ret > maxv:
+ raise ValidateException(field=field)
+
+ return ret
+
def vHash(value,field,minlength=None,maxlength=None):
'''Validator for hash values'''
if not re.match(r'^[a-f0-9]*$', value.lower()):
--- a/tests/db.py Tue Feb 07 01:56:59 2012 +0100
+++ b/tests/db.py Wed Feb 08 14:19:09 2012 +0100
@@ -50,7 +50,7 @@
u=User(name='test',apikey=apikey)
session.add(u)
o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
- j = Job(hash='a1',info='i',status='sended')
+ j = Job(info='i',status='sended')
m = Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.30, offer=o, job=j)
u.rights.append(Userright(o))
u.jobs.append(j)
@@ -66,7 +66,7 @@
u=User(name='test',apikey=apikey)
session.add(u)
o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
- j = Job(hash='a1',info='i',status='sended')
+ j = Job(info='i',status='sended')
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.30, offer=o))
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.4, offer=o))
u.rights.append(Userright(o))
@@ -82,7 +82,7 @@
u=User(name='test',apikey=apikey)
session.add(u)
o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
- j = Job(hash='a1',info='i',status='sended')
+ j = Job(info='i',status='sended')
j.messages.append(Message(recipient='0123456789', isBilled=True, date=datetime.now() , price=0.30, offer=o))
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.4, offer=o))
u.rights.append(Userright(o))
@@ -100,11 +100,11 @@
o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
u.rights.append(Userright(o))
- j = Job(hash='a1',info='i',status='sended')
+ j = Job(info='i',status='sended')
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.4, offer=o))
u.jobs.append(j)
- j = Job(hash='a2',info='a',status='sended')
+ j = Job(info='a',status='sended')
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now(), price=0.4, offer=o))
u.jobs.append(j)
@@ -123,14 +123,14 @@
o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
u.rights.append(Userright(o))
- j = Job(hash='a2',info='a',status='sended')
+ j = Job(info='a',status='sended')
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now(), price=0.4, offer=o))
u.jobs.append(j)
o = Offer(name='sipgate_gold',provider="sipgate",route="gold",typ="sms")
u.rights.append(Userright(offer=o))
- j = Job(hash='a3',info='a',status='sended')
+ j = Job(info='a',status='sended')
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now(), price=0.5, offer=o))
u.jobs.append(j)
--- a/tests/xmlrpc.py Tue Feb 07 01:56:59 2012 +0100
+++ b/tests/xmlrpc.py Wed Feb 08 14:19:09 2012 +0100
@@ -63,19 +63,20 @@
with self.session() as session:
u = session.merge(u)
- j = Job(hash="a1", info='info', status="started")
+ j = Job(info='info', status="started")
j.user=u
session.add(j)
-
- status = {'a1':{"status":"started"}}
+ session.commit()
+ jid=j.id
+ status = {str(jid):{"status":"started"}}
+ self.failUnlessEqual(self.__rpc2().status('abcdef123456789',jid), status)
self.failUnlessEqual(self.__rpc2().status('abcdef123456789'), status)
- self.failUnlessEqual(self.__rpc2().status('abcdef123456789',"a1"), status)
self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 'false'), status)
self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 0), status)
#JobNotFound
with self.assertRaises(Fault) as fault:
- self.__rpc2().status('abcdef123456789',"b")
+ self.__rpc2().status('abcdef123456789',jid+1)
exc = fault.exception
unf = IroError.JobNotFound()
self.failUnlessEqual(exc.faultCode, unf.code)
@@ -194,11 +195,11 @@
u = session.merge(u)
o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
u.rights.append(Userright(o))
- j = Job(hash='a1',info='i',status='sended')
+ j = Job(info='i',status='sended')
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.4, offer=o))
u.jobs.append(j)
- j = Job(hash='a2',info='a',status='sended')
+ j = Job(info='a',status='sended')
j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now(), price=0.4, offer=o))
u.jobs.append(j)