Skip to content
Snippets Groups Projects

WS-31: Submit capability request view

Merged Nathan Hertz requested to merge WS-31-submit-capability-request-view into main
All threads resolved!
2 files
+ 38
51
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -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
Loading