# HG changeset patch # User Sandro Knauß # Date 1328707149 -3600 # Node ID ca926774e16cbc51d4e77cfb4331622c20f7ebea # Parent f8640c663e3edc740be07f6c452caad5eb3051aa now using job.id - integer autoincrement diff -r f8640c663e3e -r ca926774e16c iro/controller/viewinterface.py --- 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. diff -r f8640c663e3e -r ca926774e16c iro/model/schema.py --- 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 (init, started, sending, sended oder error). info 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 ""%(self.hash,self.info, self.status, self.user_id) + return ""%(self.id,self.info, self.status, self.user_id) class User(Base): """Die Benutzerdatenbank von Iro. ng_kunde 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 diff -r f8640c663e3e -r ca926774e16c iro/validate.py --- 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()): diff -r f8640c663e3e -r ca926774e16c tests/db.py --- 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) diff -r f8640c663e3e -r ca926774e16c tests/xmlrpc.py --- 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)