now using job.id - integer autoincrement devel
authorSandro Knauß <knauss@netzguerilla.net>
Wed, 08 Feb 2012 14:19:09 +0100
branchdevel
changeset 136 ca926774e16c
parent 135 f8640c663e3e
child 137 e0073c462563
now using job.id - integer autoincrement
iro/controller/viewinterface.py
iro/model/schema.py
iro/validate.py
tests/db.py
tests/xmlrpc.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.
 
--- 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)