diff --git a/services/capability/capability/server.py b/services/capability/capability/server.py index 2df97798e1e7e3dcc0d022180644c3d594d70b19..25c02e3f3c0eeb35aed7aa83f531785fea35bb47 100644 --- a/services/capability/capability/server.py +++ b/services/capability/capability/server.py @@ -4,8 +4,8 @@ from pyramid.events import NewRequest from pyramid.renderers import JSONP from pyramid.request import Request from pyramid.response import Response -from pyramid.view import view_config, view_defaults -from pyramid_beaker import session_factory_from_settings +from pyramid_beaker import BeakerSessionFactoryConfig, session_factory_from_settings +from transaction import TransactionManager from workspaces.capability.services.capability_info import CapabilityInfo from workspaces.capability.services.capability_service import CapabilityService @@ -51,29 +51,39 @@ def add_cors_headers_response_callback(event: NewRequest): # --------------------------------------------------------- -def lookup_request(request): - return request.capability_info.lookup_capability_request(request.matchdict["request_id"]) - - -@view_defaults(route_name="capability_request", renderer="json") -class CapabilityRestService: - def __init__(self, request: Request): - self.request = request +def add_services(config: Configurator, session_factory: BeakerSessionFactoryConfig) -> Configurator: + """ + Add capability info, capability service, and workflow service to Pyramid request configuration - @view_config(request_method="POST", renderer="json") - def create(self): - # create a capability request for this ... request - req = self.request.json_body - request = self.request.capabilities.create_request(req["capability"], req["args"]) - return request + :param config: Pyramid Configurator object + :param session_factory: Pyramid Beaker session factory + :return: Updated Configurator + """ + # make capability_info available for use in Pyramid + config.add_request_method( + # r.tm is the transaction manager used by pyramid_tm + lambda request: CapabilityInfo(get_tm_session(session_factory, request.tm)), + "capability_info", + reify=True, + ) + # make workflow_info available for use in Pyramid + config.add_request_method( + # r.tm is the transaction manager used by pyramid_tm + lambda request: WorkflowServiceRESTClient(), + "workflow_service", + reify=True, + ) + # make capability_service available for use in Pyramid + config.add_request_method( + lambda request: CapabilityService(request.capability_info, request.workflow_service), + "capability_service", + reify=True, + ) + return config - @view_config(request_method="POST", route_name="submit_capability_request", renderer="json") - def submit(self): - # 1. Submit the request to the service - execution = self.request.capabilities.run_capability(self.request.context) - # 2. Return something we can listen for - return execution +def lookup_request(request): + return request.capability_info.lookup_capability_request(request.matchdict["request_id"]) # --------------------------------------------------------- @@ -83,7 +93,9 @@ class CapabilityRestService: # --------------------------------------------------------- -def get_tm_session(session_factory, transaction_manager): +def get_tm_session( + session_factory: BeakerSessionFactoryConfig, transaction_manager: TransactionManager +): """ Enable Zope's transaction manager on our session :param session_factory: @@ -122,34 +134,8 @@ def main(global_config, **settings): session_factory = get_session_factory(get_engine()) config.registry["dbsession_factory"] = session_factory - # make capability_info available for use in Pyramid - config.add_request_method( - # r.tm is the transaction manager used by pyramid_tm - lambda request: CapabilityInfo(get_tm_session(session_factory, request.tm)), - "capability_info", - reify=True, - ) - # make workflow_info available for use in Pyramid - config.add_request_method( - # r.tm is the transaction manager used by pyramid_tm - lambda request: WorkflowServiceRESTClient(), - "workflow_service", - reify=True, - ) - # make capability_service available for use in Pyramid - config.add_request_method( - lambda r: CapabilityService(r.capability_info, r.workflow_service), - "capabilities", - reify=True, - ) - - # add some routes - config.add_route("capability_request", "/capability/request") - config.add_route( - "submit_capability_request", - "/capability/request/{request_id}/submit", - factory=lookup_request, - ) + # Add services to config + config = add_services(config, session_factory) config.include("pyramid_beaker") # Include routes from routes file diff --git a/shared/workspaces/setup.py b/shared/workspaces/setup.py index 2e566c8eabfcf5fe11d75d01248d07f4d044eb3c..f052090f99e8e6fdb19dc944e9cb292b9fa4f34d 100644 --- a/shared/workspaces/setup.py +++ b/shared/workspaces/setup.py @@ -16,6 +16,7 @@ requires = [ "cx-Oracle", "chevron", "requests", + "transaction", ] setup(