Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #123 from MauriceManning/develop

Add service skeleton for DataProductManagement service and unit test
  • Loading branch information...
commit 98d365fc3fef2974c29f2a379252206f254cb372 2 parents 8e183c5 + f09c690
@sunetos sunetos authored
View
2  ion/services/sa/data_product_management/__init__.py
@@ -0,0 +1,2 @@
+__author__ = 'mauricemanning'
+
View
105 ion/services/sa/data_product_management/data_product_management.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+
+"""
+@file ion/services/sa/data_product_management.py
+@author
+@brief Services related to the activation and registry of data products
+"""
+
+import ion.util.ionlog
+log = ion.util.ionlog.getLogger(__name__)
+from twisted.internet import defer
+from twisted.python import reflect
+
+from ion.core.messaging import message_client
+from ion.core.exception import ReceivedError, ApplicationError
+
+from ion.core.process.process import ProcessFactory
+from ion.core.process.service_process import ServiceProcess, ServiceClient
+from ion.services.coi.resource_registry.resource_client import ResourceClient
+from ion.core.messaging.message_client import MessageClient
+from ion.services.dm.inventory.association_service import AssociationServiceClient
+
+class DataProductManagementService(ServiceProcess):
+
+ # Declaration of service
+ declare = ServiceProcess.service_declare(name='data_product_mgmt',
+ version='0.1.0',
+ dependencies=[])
+
+
+ def __init__(self, *args, **kwargs):
+
+ ServiceProcess.__init__(self, *args, **kwargs)
+
+ log.debug('DataProductManagementService.__init__()')
+
+
+ @defer.inlineCallbacks
+ def op_define_data_product(self, request, headers, msg):
+
+ assert(isinstance(request, dict))
+ response = self.define_data_product(**request) # Unpack dict to kwargs
+ yield self.reply_ok(msg, response)
+
+ @defer.inlineCallbacks
+ def op_find_data_product(self, request, headers, msg):
+ response = self.find_data_product(**request) # Unpack dict to kwargs
+ yield self.reply_ok(msg, response)
+
+
+ def define_data_product(self, owner='default', source='default', description='default desc'):
+
+ # DefineDataProduct will validate and register a new data product within the system
+
+ # Validate - TBD by the work that Karen Stocks is driving with John Graybeal
+
+ # Register - create and store a new DataProduct resource using provided metadata
+
+ # Create necessary associations to owner, instrument, etc
+
+ # Call Data Aquisition Mgmt Svc:define_data_producer to coordinate creation of topic and connection to source
+
+ # Return a resource ref
+
+ return
+
+ def find_data_product(self, filter='default'):
+
+ # Validate the input filter and augment context as required
+
+ # Call DM DiscoveryService to query the catalog for matches
+
+ # Organize and return the list of matches
+
+
+ return
+
+
+
+
+class DataProductManagementServiceClient(ServiceClient):
+
+ """
+ This is a service client for DataProductManagementServices.
+ """
+
+ def __init__(self, proc=None, **kwargs):
+ if not 'targetname' in kwargs:
+ kwargs['targetname'] = "data_product_mgmt"
+ ServiceClient.__init__(self, proc, **kwargs)
+
+ @defer.inlineCallbacks
+ def define_data_product(self, owner='owner', source='source', description='description'):
+ (content, headers, msg) = yield self.rpc_send('define_data_product', {'owner':owner, 'source':source, 'description':description})
+ defer.returnValue(content)
+
+ @defer.inlineCallbacks
+ def find_data_product(self, filter='default'):
+ (content, headers, msg) = yield self.rpc_send('find_data_product', {'filter':filter})
+ defer.returnValue(content)
+
+
+# Spawn of the process using the module name
+factory = ProcessFactory(DataProductManagementService)
+
View
2  ion/services/sa/data_product_management/test/__init__.py
@@ -0,0 +1,2 @@
+__author__ = 'mauricemanning'
+
View
67 ion/services/sa/data_product_management/test/test_data_product_management.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+
+"""
+@file ion/services/sa/test/test_data_product_management.py
+@test ion.services.sa.data_product_management
+@author
+"""
+
+import ion.util.ionlog
+log = ion.util.ionlog.getLogger(__name__)
+from twisted.internet import defer
+
+from ion.core.process.process import Process
+from ion.services.sa.data_product_management.data_product_management import DataProductManagementServiceClient
+from ion.test.iontest import IonTestCase
+
+
+class DataProductManagementTest(IonTestCase):
+ """
+ Testing data product management service
+ """
+
+ @defer.inlineCallbacks
+ def setUp(self):
+ yield self._start_container()
+
+ services = [
+ {
+ 'name':'dataprodmgmt',
+ 'module':'ion.services.sa.data_product_management.data_product_management',
+ 'class':'DataProductManagementServiceClient'
+ }
+ ]
+
+ log.debug('AppIntegrationTest.setUp(): spawning processes')
+ sup = yield self._spawn_processes(services)
+ log.debug('AppIntegrationTest.setUp(): spawned processes')
+ self.sup = sup
+
+ self.dpmc = DataProductManagementServiceClient(proc=sup)
+ self._proc = Process()
+
+
+ @defer.inlineCallbacks
+ def tearDown(self):
+ yield self._shutdown_processes()
+ yield self._stop_container()
+
+
+ @defer.inlineCallbacks
+ def test_define_data_product(self):
+ """
+ Accepts a dictionary containing metadata about a data product.
+ Updates are made to the registries.
+ """
+
+ log.info("test_define_data_product Now testing: Create sample data product")
+
+ result = yield self.dpmc.define_data_product(owner='Instrument1Owner', source='Instrument1', description='SeaBird')
+
+ log.info("define_data_product Finished testing: Create sample data product")
+
+
+
+
+
+
Please sign in to comment.
Something went wrong with that request. Please try again.