From 7280e5043c649d5ad2dc285dc3671a9f907199b1 Mon Sep 17 00:00:00 2001 From: Nathaniel Kofalt <nathaniel@kofalt.com> Date: Thu, 18 Aug 2016 11:27:20 -0500 Subject: [PATCH] Add route to return a gear's invocation schema --- api/api.py | 3 ++- api/jobs/gears.py | 5 +++++ api/jobs/handlers.py | 10 +++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/api.py b/api/api.py index a8f368bf..dee8d8e5 100644 --- a/api/api.py +++ b/api/api.py @@ -123,7 +123,8 @@ routes = [ ]), webapp2.Route(r'/api/gears', GearsHandler), webapp2_extras.routes.PathPrefixRoute(r'/api/gears', [ - webapp2.Route(r'/<:[^/]+>', GearHandler, name='job'), + webapp2.Route(r'/<:[^/]+>', GearHandler), + webapp2.Route(r'/<:[^/]+>/invocation', GearHandler, handler_method='get_invocation'), ]), webapp2.Route(r'/api/rules', RulesHandler), webapp2.Route(r'/api/groups', grouphandler.GroupHandler, handler_method='get_all', methods=['GET']), diff --git a/api/jobs/gears.py b/api/jobs/gears.py index 7091286a..f236370b 100644 --- a/api/jobs/gears.py +++ b/api/jobs/gears.py @@ -5,6 +5,8 @@ Gears from .. import config from .jobs import Job +import gear_tools + log = config.log # For now, gears are in a singleton, prefixed by a key @@ -49,6 +51,9 @@ def get_gear_by_name(name): # Mongo returns the full document: { '_id' : 'gears', 'gear_list' : [ { .. } ] }, so strip that out return gear_doc[SINGLETON_KEY][0] +def get_invocation(gear): + return gear_tools.derive_invocation_schema(gear['manifest']) + def insert_gear(doc): config.db.singletons.update( {"_id" : "gears"}, diff --git a/api/jobs/handlers.py b/api/jobs/handlers.py index f61ec822..b7a52de9 100644 --- a/api/jobs/handlers.py +++ b/api/jobs/handlers.py @@ -9,7 +9,7 @@ from ..dao.containerutil import create_filereference_from_dictionary, create_con from .. import base from .. import config -from .gears import get_gears, get_gear_by_name, remove_gear, upsert_gear +from .gears import get_gears, get_gear_by_name, get_invocation, remove_gear, upsert_gear from .jobs import Job from .queue import Queue @@ -41,6 +41,14 @@ class GearHandler(base.RequestHandler): return get_gear_by_name(_id) + def get_invocation(self, _id): + + if self.public_request: + self.abort(403, 'Request requires login') + + gear = get_gear_by_name(_id) + return get_invocation(gear) + def post(self, _id): """Upsert an entire gear document.""" -- GitLab