# HG changeset patch # User Sandro Knauß # Date 1327902688 -3600 # Node ID 19b3f383c9cefc394b49e7d58ee4dde798e10794 # Parent 6efcdf7e2d627116b505dfa0ae4158a5cd7d0bdc getting job status form db diff -r 6efcdf7e2d62 -r 19b3f383c9ce iro/controller/viewinterface.py --- a/iro/controller/viewinterface.py Mon Jan 30 06:44:39 2012 +0100 +++ b/iro/controller/viewinterface.py Mon Jan 30 06:51:28 2012 +0100 @@ -9,7 +9,8 @@ @validate(kwd="detailed", func=vBool, need=False) @validate(kwd="id", func=vHash, need=False, maxlength=40) @vUser - def status(self, user, id=None, detailed=False): + @dbdefer + def status(self, session, user, id=None, detailed=False): '''Gibt den aktuellen Status eines Auftrages oder Mehreren zurück. Keywords: @@ -24,12 +25,15 @@ ''' - if id or detailed: - return str(user),id,detailed + user = session.merge(user) + ret={} + if not id: + for job in user.jobs: + ret[job.hash]={"status":job.status} else: - return str(user) - #return user.status(id,detailed) - return "" + ret[id]={"status":user.job(id).status} + + return ret @vUser @validate(kwd="id", func=vHash,maxlength=40) @@ -108,7 +112,7 @@ @validate(kwd="typ", func=vTyp) @vUser @dbdefer - def routes(self, user, typ, session): + def routes(self, session, user, typ): '''Gibt eine Liste aller verfügbaren Provider zurück. Keywords: @@ -127,7 +131,7 @@ @validate(kwd="typ", func=vTyp) @vUser @dbdefer - def defaultRoute(self, user, typ, session): + def defaultRoute(self, session, user, typ): '''Gibt den Standardprovider zurück. Keywords: diff -r 6efcdf7e2d62 -r 19b3f383c9ce iro/error.py --- a/iro/error.py Mon Jan 30 06:44:39 2012 +0100 +++ b/iro/error.py Mon Jan 30 06:51:28 2012 +0100 @@ -15,6 +15,10 @@ def __init__(self): InterfaceException.__init__(self, 901, u"Der API-Key ist ungültig.") +class JobNotFound(InterfaceException): + def __init__(self): + InterfaceException.__init__(self, 902, u"Die Jobid ist ungültig.") + class ExternalException(InterfaceException): def __init__(self): InterfaceException.__init__(self, 950, "Fehler in externer API.") diff -r 6efcdf7e2d62 -r 19b3f383c9ce iro/model/schema.py --- a/iro/model/schema.py Mon Jan 30 06:44:39 2012 +0100 +++ b/iro/model/schema.py Mon Jan 30 06:51:28 2012 +0100 @@ -9,6 +9,8 @@ from sqlalchemy import and_ +from ..error import JobNotFound + Base = declarative_base() __tables__=["User", "Job", "Message", "Offer", "Userright"] @@ -78,3 +80,9 @@ if isDefault is not None: filters.append(Userright.isDefault==isDefault) 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() + if job is None: + raise JobNotFound() + return job diff -r 6efcdf7e2d62 -r 19b3f383c9ce iro/model/user.py --- a/iro/model/user.py Mon Jan 30 06:44:39 2012 +0100 +++ b/iro/model/user.py Mon Jan 30 06:51:28 2012 +0100 @@ -11,7 +11,7 @@ @validate(kwd="apikey", func=vHash, minlength=15, maxlength=15) @dbdefer -def getuser(apikey, session): +def getuser(session, apikey): user = session.query(User).filter_by(apikey=apikey).first() if user is None: raise UserNotFound() diff -r 6efcdf7e2d62 -r 19b3f383c9ce iro/validate.py --- a/iro/validate.py Mon Jan 30 06:44:39 2012 +0100 +++ b/iro/validate.py Mon Jan 30 06:51:28 2012 +0100 @@ -7,6 +7,7 @@ from .error import ValidateException def vBool(value, field): + '''Validator for boolean values''' t=[True, 1, "true", "True", "TRUE"] f=[False, 0, "false", "False", "FALSE"] if value in t: @@ -18,6 +19,7 @@ def vHash(value,field,minlength=None,maxlength=None): + '''Validator for hash values''' if not re.match(r'^[a-f0-9]*$', value.lower()): raise ValidateException(field=field) if minlength and len(value)") - self.failUnlessEqual(self.__rpc2().status('abcdef123456789','abcde'), ["",'abcde',False]) - self.failUnlessEqual(self.__rpc2().status('abcdef123456789','abcde', True), ["",'abcde', True]) - self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 'true'), ["", '', True]) - self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 'false'), "") - self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 0), "") - self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 1), ["", '', True]) + self.failUnlessEqual(self.__rpc2().status('abcdef123456789'), {}) + + with WithSession(md.engine, autocommit=True) as session: + u = session.merge(u) + j = Job(hash="a1", info='info', status="started") + j.user=u + session.add(j) + + status = {'a1':{"status":"started"}} + 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") + exc = fault.exception + unf = IroError.JobNotFound() + self.failUnlessEqual(exc.faultCode, unf.code) + self.failUnlessEqual(exc.faultString, unf.msg) + + #self.failUnlessEqual(self.__rpc2().status('abcdef123456789','abcde', True), ["",'abcde', True]) + #self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 'true'), ["", '', True]) + #self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 1), ["", '', True]) def testNoSuchUser(self): '''a unknown user should raise a UserNotNound Exception