You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2019/07/25 16:06:13 UTC

[sling-whiteboard] 01/02: Basic dynamic Openwhisk action dispatching works

This is an automated email from the ASF dual-hosted git repository.

bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit 39dfeed111142303676bbd34054fcc5152779cf8
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Thu Jul 25 17:57:41 2019 +0200

    Basic dynamic Openwhisk action dispatching works
---
 serverless-microsling/lib/openwhisk-renderer.js      | 20 +++++++++++++++++---
 serverless-microsling/lib/render.js                  | 14 +++++++++-----
 .../rendering-actions/somedoc-html.js                |  1 -
 3 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/serverless-microsling/lib/openwhisk-renderer.js b/serverless-microsling/lib/openwhisk-renderer.js
index e5544f7..21ba43d 100644
--- a/serverless-microsling/lib/openwhisk-renderer.js
+++ b/serverless-microsling/lib/openwhisk-renderer.js
@@ -39,19 +39,33 @@ const getAction = async (resourceType, extension) => {
   })
 };
 
+const render = (resource, action) => {
+  const name = action.name;
+  const blocking = true, result = true
+  const params = {
+    resource: resource
+  }
+  var ow = openwhisk();
+  return ow.actions.invoke({name, blocking, result, params});
+};
+
  const renderer = {
   contentType: 'text/html',
   appliesTo : async (resourceType, extension) => { 
     return getAction(resourceType, extension)
   },
   render : (resource, action) => {
-    return `TODO: render using ${action ? action.name : null}`;
+    return render(resource, action);
   },
 }
 
 function main () {
-  return new Promise(resolve => {
-    resolve(getAction('microsling/somedoc', 'html'));
+  return new Promise(async resolve => {
+    const resource = {
+      title: 'cmdline title test',
+      body: 'cmdline body test',
+    }
+    resolve(render(resource, getAction('microsling/somedoc', 'html')));
   });
 }
 
diff --git a/serverless-microsling/lib/render.js b/serverless-microsling/lib/render.js
index b78b3c5..eee7098 100644
--- a/serverless-microsling/lib/render.js
+++ b/serverless-microsling/lib/render.js
@@ -26,7 +26,7 @@ const defaultTextRenderer = {
     return extension == 'txt';
   },
   render : (resource) => {
-    return `${resource.title}\n${resource.body}\n`;
+    return { output: `${resource.title}\n${resource.body}\n` };
   },
 }
 
@@ -36,7 +36,7 @@ const defaultJsonRenderer = {
     return extension == 'json';
   },
   render : (resource) => {
-    return JSON.stringify(resource, 2, null);
+    return { output: JSON.stringify(resource, 2, null) };
   },
 }
 
@@ -46,7 +46,7 @@ const defaultHtmlRenderer = {
     return extension == 'html';
   },
   render : (resource) => {
-    return `
+    return { output: `
     <html>
     <head>
     <title>${resource.title}</title>
@@ -58,7 +58,7 @@ const defaultHtmlRenderer = {
     <div>${resource.body}</div>
     </body>
     </html>
-  `;
+  `};
   },
 }
 
@@ -104,7 +104,11 @@ async function render(context) {
   if(!rendererInfo) {
     throw Error(`Renderer not found for ${resourceType} extension ${extension}`);
   }
-  context.response.body = rendererInfo.renderer.render(resource, rendererInfo.applyContext);
+  const rendered = await rendererInfo.renderer.render(resource, rendererInfo.applyContext);
+  if(!rendered.output) {
+    throw Error('Renderer generated no output');
+  }
+  context.response.body = rendered.output;
   context.response.headers = {
     'Content-Type': rendererInfo.renderer.contentType
   };
diff --git a/serverless-microsling/rendering-actions/somedoc-html.js b/serverless-microsling/rendering-actions/somedoc-html.js
index ff29573..831e00f 100644
--- a/serverless-microsling/rendering-actions/somedoc-html.js
+++ b/serverless-microsling/rendering-actions/somedoc-html.js
@@ -21,7 +21,6 @@ function main (params) {
   const markup = `<html>
   <head>
   <title>${resource.title}</title>
-  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/>
   </head>
   <body>
   <h1>