diff --git a/SAS/MoM/MoMQueryService/momprojectdetailsquery.py b/SAS/MoM/MoMQueryService/momprojectdetailsquery.py index 6251f8460a0476d8c014aa1c6601f3fee7b93839..6f9964e892ad2eb38d91b224cf914d06696c96c6 100755 --- a/SAS/MoM/MoMQueryService/momprojectdetailsquery.py +++ b/SAS/MoM/MoMQueryService/momprojectdetailsquery.py @@ -21,7 +21,7 @@ def getProjectDetails(ids, busname='momqueryservice'): ids = [str(x) for x in ids] ids_string = ', '.join(ids) - with RPC(busname, 'GetProjectDetails', timeout=10) as getProjectDetails: + with RPC('GetProjectDetails', busname=busname, timeout=10) as getProjectDetails: res, status = getProjectDetails(ids_string) if status != 'OK': diff --git a/SAS/MoM/MoMQueryService/momqueryservice.py b/SAS/MoM/MoMQueryService/momqueryservice.py index f91b7963063fce42c958145beef6890c4a421b55..ecf50b72ad054472d9285862be96095d66ddfb28 100755 --- a/SAS/MoM/MoMQueryService/momqueryservice.py +++ b/SAS/MoM/MoMQueryService/momqueryservice.py @@ -23,6 +23,8 @@ import sys import logging from mysql import connector from lofar.messaging import Service +from lofar.messaging.Service import MessageHandlerInterface +from lofar.common.util import waitForInterrupt logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO) logger=logging.getLogger("momqueryservice") @@ -56,14 +58,19 @@ class MoMDatabaseWrapper: return cursor.fetchall() -class ProjectDetailsQueryHandler: +class ProjectDetailsQueryHandler(MessageHandlerInterface): '''handler class for details query in mom db :param MoMDatabaseWrapper momdb inject database access via wrapper ''' - def __init__(self, momdb): - self.momdb = momdb + def __init__(self, **kwargs): + MessageHandlerInterface.__init__(self, **kwargs) + self.momreadonly_passwd = kwargs.pop("momreadonly_passwd", '') + self.kwargs = kwargs - def __call__(self, text): + def prepare_loop(self): + self.momdb = MoMDatabaseWrapper(self.momreadonly_passwd) + + def handle_message(self, text): '''The actual handler function. Parses the message text, converts it to csv id string, looks up the project(s) details via the momdb wrapper @@ -96,23 +103,22 @@ class ProjectDetailsQueryHandler: def createService(busname='momqueryservice', momreadonly_passwd='', - momdb=None): + handler=None): '''create the GetProjectDetails on given busname :param string busname: name of the bus on which this service listens :param string momreadonly_passwd: the momreadonly passwd. - :param MoMDatabaseWrapper momdb: a MoM db wrapper like object which can do - the actual query. If None provide, the default MoMDatabaseWrapper is created. + :param ProjectDetailsQueryHandler handler: ProjectDetailsQueryHandler class Type, or mock like type :rtype: lofar.messaging.Service''' - if not momdb: - momdb = MoMDatabaseWrapper(momreadonly_passwd) + if not handler: + handler = ProjectDetailsQueryHandler - handler = ProjectDetailsQueryHandler(momdb) - return Service(busname, - 'GetProjectDetails', + return Service('GetProjectDetails', handler, + busname=busname, startonwith=True, - numthreads=1) + numthreads=1, + handler_args={'momreadonly_passwd':momreadonly_passwd}) def main(): @@ -127,8 +133,8 @@ def main(): from lofar.mom.momqueryservice.config import momreadonly_passwd # start the service and listen. - with createService('momqueryservice', momreadonly_passwd) as service: - service.WaitForInterrupt() + with createService('momqueryservice', momreadonly_passwd): + waitForInterrupt() if __name__ == '__main__': main() diff --git a/SAS/MoM/MoMQueryService/test/test_momqueryservice.py b/SAS/MoM/MoMQueryService/test/test_momqueryservice.py index 9094a5db13ce13e07a8825459e4c91cf3edaae7d..36d468451c9deff34c0fcfe68ad2c40aa0b6a6cf 100755 --- a/SAS/MoM/MoMQueryService/test/test_momqueryservice.py +++ b/SAS/MoM/MoMQueryService/test/test_momqueryservice.py @@ -21,7 +21,8 @@ import unittest import uuid -from lofar.mom.momqueryservice import momqueryservice +from lofar.mom.momqueryservice.momqueryservice import createService +from lofar.mom.momqueryservice.momqueryservice import ProjectDetailsQueryHandler from lofar.mom.momqueryservice import momprojectdetailsquery from qpid.messaging import Connection from qpidtoollibs import BrokerAgent @@ -44,9 +45,12 @@ try: def getProjectDetails(self, mom_ids_str): return [{'project_mom2id': '4567', 'project_name': 'foo', 'project_description': 'bar', 'object_mom2id': testid}] + class MockProjectDetailsQueryHandler(ProjectDetailsQueryHandler): + def prepare_loop(self): + self.momdb = MockMoMDatabaseWrapper() + # inject the mock into the service - mock_momdb=MockMoMDatabaseWrapper() - with momqueryservice.createService(busname, momdb=mock_momdb): + with createService(busname, handler=MockProjectDetailsQueryHandler): class TestLTAStorageDb(unittest.TestCase): def testProjectDetailsQuery(self):