diff --git a/bt5/erp5_notebook/SkinTemplateItem/portal_skins/erp5_notebook/Notebook_view/my_text_content.xml b/bt5/erp5_notebook/SkinTemplateItem/portal_skins/erp5_notebook/Notebook_view/my_text_content.xml
index 9e9ebbe75b3b006d0d2268be2af9226f3de3bb1f..3da5e6df0c0654d28092149a43075f12adc643bf 100644
--- a/bt5/erp5_notebook/SkinTemplateItem/portal_skins/erp5_notebook/Notebook_view/my_text_content.xml
+++ b/bt5/erp5_notebook/SkinTemplateItem/portal_skins/erp5_notebook/Notebook_view/my_text_content.xml
@@ -139,7 +139,7 @@
-
_text
- python: [(\'editor\', \'notebook_editor\'), (\'portal_type\', context.getPortalType()), (\'maximize\', \'listbox\' not in field.id)]
+ python: [(\'editor\', \'jsmd_editor\'), (\'portal_type\', context.getPortalType()), (\'maximize\', \'listbox\' not in field.id)]
diff --git a/bt5/erp5_notebook/SkinTemplateItem/portal_skins/erp5_notebook/gadget_jsmd_eval.js.js b/bt5/erp5_notebook/SkinTemplateItem/portal_skins/erp5_notebook/gadget_jsmd_eval.js.js
index 3e8228b9d1718d508ba82f2b612c0a68a1b76f7b..8fe814bbca8a30c10d65f7bd6a84e90d5d9ca403 100644
--- a/bt5/erp5_notebook/SkinTemplateItem/portal_skins/erp5_notebook/gadget_jsmd_eval.js.js
+++ b/bt5/erp5_notebook/SkinTemplateItem/portal_skins/erp5_notebook/gadget_jsmd_eval.js.js
@@ -1,18 +1,59 @@
-/*global window, console, RSVP, document, URL, eval, XMLHttpRequest, marked */
+/*global window, console, RSVP, document, URL, eval, XMLHttpRequest, marked, pyodide, WebAssembly, fetch*/
/*jslint nomen: true, indent: 2, maxerr: 3 */
(function (window) {
"use strict";
+ function sideEffectDiv(sideEffectClass, reportSideEffect) {
+ // appends a side effect div to the side effect area
+ var div = document.createElement("div");
+ div.setAttribute("class", sideEffectClass);
+ if (reportSideEffect === undefined) {
+ div.setAttribute("style", "display:");
+ }
+ document.body.appendChild(div);
+ return div;
+ }
+
var IODide = function createIODide() {
- return;
+ var iodide = {
+ output: {
+ text: function (s, reportSideEffect) {
+ var i, div, line_list;
+ console.log("Inside output.text");
+ console.log(s);
+ line_list = s.toString().split("\n");
+ for (i = 0; i < line_list.length; i += 1) {
+ div = sideEffectDiv("side-effect-print", reportSideEffect);
+ div.innerText = line_list[i];
+ }
+ },
+ element: function (nodeType, reportSideEffect) {
+ var div, node;
+ div = sideEffectDiv("side-effect-element", reportSideEffect);
+ node = document.createElement(nodeType);
+ div.append(node);
+ return node;
+ }
+ }
+ };
+ return iodide;
},
JSMDCell = function createJSMDCell(type, line_list) {
this._type = type;
this._line_list = line_list;
},
split_line_regex = /[\r\n|\n|\r]/,
- cell_type_regexp = /^\%\% (\w+)$/;
+ cell_type_regexp = /^\%\% (\w+)\b/,
+ language_type_regexp = /\{[\S\s]+\}/,
+ is_pyodide_loaded = false,
+ Module = {},
+ packages,
+ loadedPackages = [],
+ // Regexp for validating package name and URI
+ package_name_regexp = '[a-z0-9_][a-z0-9_\-]*',
+ package_uri_regexp = new RegExp('^https?://.*?(' + package_name_regexp + ').js$', 'i');
+ package_name_regexp = new RegExp('^' + package_name_regexp + '$', 'i');
window.iodide = new IODide();
IODide.prototype.addOutputHandler = function () {
@@ -62,6 +103,108 @@
});
}
+ // Pyodide package loading
+ function _uri_to_package_name(package_uri) {
+ // Generate a unique package name from URI
+ if (package_name_regexp.test(package_uri)) {
+ return package_uri;
+ }
+
+ if (package_uri_regexp.test(package_uri)) {
+ var match = package_uri_regexp.exec(package_uri);
+ // Get the regexp group corresponding to the package name
+ return match[1];
+ }
+
+ return null;
+ }
+
+ function pyodideLoadPackage(names) {
+ // DFS to find all dependencies of the requested packages
+ var queue, toLoad, package_uri, package_name, k,
+ subpackage, promise, packageList, script;
+ packages = window.pyodide.packages.dependencies;
+ queue = new Array(names);
+ toLoad = [];
+ while (queue.length) {
+ package_uri = queue.pop();
+ package_name = _uri_to_package_name(package_uri);
+
+ if (package_name === null) {
+ throw new Error("Invalid package name or URI " + package_uri);
+ }
+
+ if (package_name === package_uri) {
+ package_uri = 'default channel';
+ }
+
+ console.log("Loading " + package_name + " from " + package_uri);
+ console.log("Loaded packages");
+ console.log(loadedPackages);
+ if (package_name in loadedPackages) {
+ if (package_uri !== loadedPackages[package_name]) {
+ throw new Error(
+ "URI mismatch, attempting to load package " +
+ package_name + " from " + package_uri + " while it is already " +
+ "loaded from " + loadedPackages[package_name] + " ! "
+ );
+ }
+ } else {
+ toLoad[package_name] = package_uri;
+ if (packages.hasOwnProperty(package_name)) {
+ for (k in packages[package_name]) {
+ subpackage = packages[package_name][k];
+ if (!(subpackage in loadedPackages) && !(subpackage in toLoad)) {
+ queue.push(subpackage);
+ }
+ }
+ } else {
+ console.log("Unknown package " + package_name);
+ }
+ }
+ }
+
+ promise = new RSVP.Promise(function (resolve, reject) {
+ if (Object.keys(toLoad).length === 0) {
+ resolve('No new packages to load');
+ }
+
+ pyodide.monitorRunDependencies = function (n) {
+ if (n === 0) {
+ for (package_name in toLoad) {
+ loadedPackages[package_name] = toLoad[package_name];
+ }
+ delete pyodide.monitorRunDependencies;
+ packageList = Array.from(Object.keys(toLoad)).join(', ');
+ resolve("Loaded " + packageList);
+ }
+ };
+
+ function script_reject(e) {
+ reject(e);
+ }
+
+ for (package_name in toLoad) {
+ script = document.createElement('script');
+ package_uri = toLoad[package_name];
+ if (package_uri === 'default channel') {
+ script.src = package_name + ".js";
+ } else {
+ script.src = package_uri;
+ }
+ script.onerror = script_reject;
+ document.body.appendChild(script);
+ }
+
+ // We have to invalidate Python's import caches, or it won't
+ // see the new files. This is done here so it happens in parallel
+ // with the fetching over the network.
+ window.pyodide.runPython('import importlib as _importlib\n' +
+ '_importlib.invalidate_caches()\n');
+ });
+ return promise;
+ }
+
function parseJSMDCellList(jsmd) {
// Split the text into a list of Iodide cells
var line_list = jsmd.split(split_line_regex),
@@ -69,6 +212,7 @@
len = line_list.length,
current_line,
current_type,
+ language_type,
current_text_list,
next_type,
cell_list = [];
@@ -85,6 +229,11 @@
next_type = current_line.match(cell_type_regexp);
if (next_type) {
// New type detexted
+ if (next_type[1] === 'code') {
+ // language detected
+ language_type = JSON.parse(current_line.match(language_type_regexp)).language;
+ next_type[1] = next_type[1] + '_' + language_type;
+ }
pushNewCell();
current_type = next_type;
current_text_list = [];
@@ -106,9 +255,13 @@
var text = line_list.join('\n'),
pre,
br,
- code;
+ code,
+ result;
+
try {
- return eval.call(window, text);
+ result = eval.call(window, text);
+ renderCodeblock(result);
+ return result;
} catch (e) {
console.error(e);
pre = document.createElement('pre');
@@ -253,12 +406,91 @@
});
}
+ function loadPyodide(info, receiveInstance) {
+ var queue = new RSVP.Queue();
+ queue.push(function () {
+ return WebAssembly.compileStreaming(fetch("pyodide.asm.wasm"));
+ })
+ .push(function (module) {
+ return WebAssembly.instantiate(module, info);
+ })
+ .push(function (instance) {
+ return receiveInstance(instance);
+ });
+ return queue;
+ }
+
+ function renderCodeblock(result_text) {
+ var div = document.createElement('div'),
+ pre = document.createElement('pre'),
+ result = document.createElement('code');
+ div.style.border = '1px solid #C3CCD0';
+ div.style.margin = '40px 10px';
+ div.style.paddingLeft = '10px';
+
+ if (result_text !== undefined) {
+ result.innerHTML = result_text;
+ pre.appendChild(result);
+ div.appendChild(pre);
+ document.body.appendChild(div);
+ }
+ }
+
+ function executePyCell(line_list) {
+ var result, code_text = line_list.join('\n');
+ result = pyodide.runPython(code_text);
+ renderCodeblock(result);
+ }
+
+ function pyodideSetting() {
+ window.pyodide = pyodide(Module);
+ window.pyodide.loadPackage = pyodideLoadPackage;
+
+ var defer = RSVP.defer(), promise = defer.promise;
+
+ Module.postRun = defer.resolve;
+ promise.then(function () {
+ console.log("postRun get called");
+ delete window.Module;
+ });
+
+ return defer.promise;
+ }
+
+ function initPyodide() {
+ var queue = new RSVP.Queue();
+ queue.push(function () {
+ Module.instantiateWasm = loadPyodide;
+ window.Module = Module;
+ })
+ .push(function () {
+ return loadJSResource('pyodide.asm.data.js');
+ })
+ .push(function () {
+ return loadJSResource('pyodide.asm.js');
+ })
+ .push(function () {
+ return pyodideSetting();
+ })
+ .push(function () {
+ return fetch('packages.json');
+ })
+ .push(function (response) {
+ return response.json();
+ })
+ .push(function (json) {
+ window.pyodide.packages = json;
+ return;
+ });
+ return queue;
+ }
+
function executeCell(cell) {
- if (cell._type === 'raw') {
+ if (['raw', 'meta', 'plugin'].indexOf(cell._type) !== -1) {
// Do nothing...
return;
}
- if (cell._type === 'js') {
+ if (cell._type === 'js' || cell._type === 'code_js') {
return executeJSCell(cell._line_list);
}
if (cell._type === 'resource') {
@@ -273,6 +505,29 @@
if (cell._type === 'css') {
return executeCssCell(cell._line_list);
}
+ if (cell._type === 'code_py') {
+ if (cell._line_list.length === 0) {
+ // empty block, do nothing.
+ return;
+ }
+
+ var queue = new RSVP.Queue();
+
+ if (!is_pyodide_loaded) {
+ console.log("Loading pyodide");
+ queue.push(function () {
+ return initPyodide();
+ })
+ .push(function () {
+ return pyodideLoadPackage('matplotlib');
+ });
+ is_pyodide_loaded = true;
+ }
+ queue.push(function () {
+ return executePyCell(cell._line_list);
+ });
+ return queue;
+ }
return executeUnknownCellType(cell);
}
diff --git a/bt5/erp5_notebook_test/ModuleTemplateItem/notebook_module.xml b/bt5/erp5_notebook_test/ModuleTemplateItem/notebook_module.xml
new file mode 100644
index 0000000000000000000000000000000000000000..25fda14b587565aee07bc999218348fda3ff9a7f
--- /dev/null
+++ b/bt5/erp5_notebook_test/ModuleTemplateItem/notebook_module.xml
@@ -0,0 +1,96 @@
+
+ notebook_module
+
+
+ Access Transient Objects
+ Assignee
+ Assignor
+ Associate
+ Auditor
+ Author
+ Manager
+
+
+ Access contents information
+ Assignee
+ Assignor
+ Associate
+ Auditor
+ Author
+ Manager
+
+
+ Access session data
+ Assignee
+ Assignor
+ Associate
+ Auditor
+ Author
+ Manager
+
+
+ Add portal content
+ Assignor
+ Author
+ Manager
+
+
+ Add portal folders
+ Assignor
+ Author
+ Manager
+
+
+ Change local roles
+ Assignor
+ Manager
+
+
+ Copy or Move
+ Assignee
+ Assignor
+ Associate
+ Auditor
+ Author
+ Manager
+
+
+ Delete objects
+ Assignor
+ Manager
+
+
+ List folder contents
+ Assignee
+ Assignor
+ Associate
+ Auditor
+ Author
+ Manager
+
+
+ Modify portal content
+ Assignor
+ Manager
+
+
+ View
+ Assignee
+ Assignor
+ Associate
+ Auditor
+ Manager
+
+
+ View History
+ Assignee
+ Assignor
+ Associate
+ Auditor
+ Author
+ Manager
+
+
+ Notebook Module
+ Notebooks
+
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/PathTemplateItem/notebook_module/notebook_test_purejs.xml b/bt5/erp5_notebook_test/PathTemplateItem/notebook_module/notebook_test_purejs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..24f78a87552135656c9787a0f8fca922c658119c
--- /dev/null
+++ b/bt5/erp5_notebook_test/PathTemplateItem/notebook_module/notebook_test_purejs.xml
@@ -0,0 +1,4259 @@
+
+
+
+
+
+
+
+
+ -
+
_Access_contents_information_Permission
+
+
+ Assignee
+ Assignor
+ Manager
+ Owner
+
+
+
+ -
+
_Add_portal_content_Permission
+
+
+ Assignee
+ Assignor
+ Manager
+ Owner
+
+
+
+ -
+
_Change_local_roles_Permission
+
+
+ Assignor
+ Manager
+
+
+
+ -
+
_Modify_portal_content_Permission
+
+
+ Assignee
+ Assignor
+ Manager
+ Owner
+
+
+
+ -
+
_View_Permission
+
+
+ Assignee
+ Assignor
+ Manager
+ Owner
+
+
+
+ -
+
content_md5
+
+
+
+
+ -
+
description
+
+
+
+
+ -
+
id
+ notebook_test_purejs
+
+ -
+
language
+
+
+
+
+ -
+
portal_type
+ Notebook
+
+ -
+
short_title
+
+
+
+
+ -
+
text_content
+ %% meta\n
+{\n
+ "title": "Lecture-3-Matplotlib",\n
+ "lastSaved": "2018-10-16T13:50:00.550Z",\n
+ "languages": {\n
+ "js": {\n
+ "pluginType": "language",\n
+ "languageId": "js",\n
+ "displayName": "Javascript",\n
+ "codeMirrorMode": "javascript",\n
+ "module": "window",\n
+ "evaluator": "eval",\n
+ "keybinding": "j",\n
+ "url": ""\n
+ },\n
+ "py": {\n
+ "languageId": "py",\n
+ "displayName": "python",\n
+ "codeMirrorMode": "python",\n
+ "keybinding": "p",\n
+ "url": "https://iodide.io/pyodide-demo/pyodide.js",\n
+ "module": "pyodide",\n
+ "evaluator": "runPython",\n
+ "pluginType": "language"\n
+ }\n
+ },\n
+ "lastExport": "2018-10-16T13:50:03.563Z"\n
+}\n
+\n
+%% plugin\n
+{\n
+ "languageId": "py",\n
+ "displayName": "python",\n
+ "codeMirrorMode": "python",\n
+ "keybinding": "p",\n
+ "url": "https://iodide.io/pyodide-demo/pyodide.js",\n
+ "module": "pyodide",\n
+ "evaluator": "runPython",\n
+ "pluginType": "language"\n
+}\n
+\n
+%% md\n
+# Notebook JSMD Viewer Test\n
+\n
+%% md\n
+This is a sample content for check the JS section can be executed in JSMD viewer.\n
+\n
+%% code {"language":"js"}\n
+2 + 40
+
+ -
+
title
+ Notebook test pure js
+
+ -
+
workflow_history
+
+ AAAAAAAAAAI=
+
+
+
+
+
+
+
+
+
+
+
+ -
+
data
+
+
+ -
+
document_publication_workflow
+
+ AAAAAAAAAAM=
+
+
+ -
+
edit_workflow
+
+ AAAAAAAAAAQ=
+
+
+ -
+
processing_status_workflow
+
+ AAAAAAAAAAU=
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
action
+
+
+
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+ -
+
error_message
+
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1553080507.54
+ UTC
+
+
+
+
+
+ -
+
validation_state
+ draft
+
+
+
+
+
+
+
+
+
+
+
+
+ AAAAAAAAAAY=
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.60196.14387.38229
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1554822032.22
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.60196.35205.3072
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554824357.4
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.60235.19016.55125
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554826187.44
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.60265.51822.50397
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554826250.94
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.60266.55641.60484
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554889170.96
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.61315.33837.443
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554890435.53
+ UTC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
action
+
+
+
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+ -
+
error_message
+
+
+ -
+
external_processing_state
+ empty
+
+ -
+
serial
+ 0.0.0.0
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1553080507.54
+ UTC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAAAAAAAAAc=
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52956.4237.9130
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1554387762.17
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52958.46070.16913
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554388391.17
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52969.12207.42649
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554388559.48
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52971.64975.5358
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554388781.87
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52975.45746.18261
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554389037.3
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52979.62593.45516
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554389249.62
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52983.32366.23552
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554390497.1
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.53004.18684.580
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554391112.35
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.53014.35345.938
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554393353.95
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.53051.58933.38161
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554466990.66
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.54279.11663.6621
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554467179.88
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.54282.21727.17561
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554468740.69
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.54308.22605.14353
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554813987.53
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.60062.30080.54647
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554814697.78
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.60074.19432.44219
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554814986.26
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.60079.6845.57497
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554822013.16
+ UTC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAAAAAAAAAg=
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51517.25137.34372
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1554303060.66
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51547.734.55756
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554303110.45
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51547.55108.45465
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554303223.38
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51549.47393.12134
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554305708.5
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51591.9296.60910
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554367890.94
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52627.33813.60262
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554368098.37
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52630.63766.31675
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554368213.08
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52632.57987.13960
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554369119.21
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52647.64685.5137
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554369611.8
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52656.12893.22971
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554382924.31
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52878.4726.35635
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554384925.54
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52911.27901.64819
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554387126.14
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52948.6712.2901
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554387150.54
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52948.33364.58385
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554387338.4
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52951.41956.59750
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554387469.27
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.52953.53827.5205
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554387603.87
+ UTC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAAAAAAAAAk=
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.41487.26138.25070
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1553703300.43
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.41551.475.256
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553783326.31
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.42884.50596.30890
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554196262.44
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.49767.2688.38041
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554196382.25
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.49769.2463.30941
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554197839.84
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.49793.21680.62003
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554198037.96
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.49796.41475.65177
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554198045.67
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.49796.49892.18244
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554198119.94
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.49797.65478.33262
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554198235.28
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.49799.60394.53299
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554299426.39
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51486.28840.41472
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554299473.06
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51487.14272.57463
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554299809.37
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51492.53928.64529
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554300000.16
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51496.181.31470
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554300193.04
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51499.14256.44185
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554300276.8
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.51500.40207.9233
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1554301283.01
+ UTC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAAAAAAAAAo=
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34395.33880.1553
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1553273991.55
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34395.56311.22818
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553274262.45
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34400.24532.40021
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553534203.82
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.38732.47879.58999
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553608905.52
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.39977.49740.55825
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553611437.78
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.40019.63118.34662
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553611990.16
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.40029.11103.51746
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553612109.23
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.40031.10090.51404
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553612183.18
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.40032.25333.18739
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553620627.86
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.40173.8602.30771
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553621219.72
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.40182.65235.53674
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553677726.38
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.41124.50677.26692
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553678215.85
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.41132.61014.47581
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553695443.02
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.41420.3317.27255
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553695448.59
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.41420.9391.64256
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553699234.6
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.41483.15961.12817
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553699483.92
+ UTC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 0.0.0.0
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1553080507.53
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.31171.8249.43946
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553081203.89
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.31182.47955.6673
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553096428.56
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.31436.31199.49783
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553096538.85
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.31438.20595.38963
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553270409.83
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34336.10750.64000
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553270453.21
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34336.58123.38451
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553270551.83
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34338.34771.55534
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553270606.2
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34339.28631.2184
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553271689.77
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34357.32524.64614
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553271813.27
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34359.36343.49510
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553271972.57
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34362.13743.11212
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553272280.78
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34367.22703.60330
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553272455.28
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34370.16700.29883
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553272532.75
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34371.35785.48742
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553273645.47
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 974.34390.5982.58794
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1553273971.01
+ UTC
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bt5/erp5_notebook_test/PathTemplateItem/notebook_module/notebook_test_python_basic.xml b/bt5/erp5_notebook_test/PathTemplateItem/notebook_module/notebook_test_python_basic.xml
new file mode 100644
index 0000000000000000000000000000000000000000..51f39fed6b72d2e09e61fe078fe3f59d97f87984
--- /dev/null
+++ b/bt5/erp5_notebook_test/PathTemplateItem/notebook_module/notebook_test_python_basic.xml
@@ -0,0 +1,707 @@
+
+
+
+
+
+
+
+
+ -
+
_Access_contents_information_Permission
+
+
+ Assignee
+ Assignor
+ Manager
+ Owner
+
+
+
+ -
+
_Add_portal_content_Permission
+
+
+ Assignee
+ Assignor
+ Manager
+ Owner
+
+
+
+ -
+
_Change_local_roles_Permission
+
+
+ Assignor
+ Manager
+
+
+
+ -
+
_Modify_portal_content_Permission
+
+
+ Assignee
+ Assignor
+ Manager
+ Owner
+
+
+
+ -
+
_View_Permission
+
+
+ Assignee
+ Assignor
+ Manager
+ Owner
+
+
+
+ -
+
content_md5
+
+
+
+
+ -
+
description
+
+
+
+
+ -
+
id
+ notebook_test_python_basic
+
+ -
+
language
+
+
+
+
+ -
+
portal_type
+ Notebook
+
+ -
+
short_title
+
+
+
+
+ -
+
text_content
+ %% meta\n
+{\n
+ "title": "Lecture-3-Matplotlib",\n
+ "lastSaved": "2018-10-16T13:50:00.550Z",\n
+ "languages": {\n
+ "js": {\n
+ "pluginType": "language",\n
+ "languageId": "js",\n
+ "displayName": "Javascript",\n
+ "codeMirrorMode": "javascript",\n
+ "module": "window",\n
+ "evaluator": "eval",\n
+ "keybinding": "j",\n
+ "url": ""\n
+ },\n
+ "py": {\n
+ "languageId": "py",\n
+ "displayName": "python",\n
+ "codeMirrorMode": "python",\n
+ "keybinding": "p",\n
+ "url": "https://iodide.io/pyodide-demo/pyodide.js",\n
+ "module": "pyodide",\n
+ "evaluator": "runPython",\n
+ "pluginType": "language"\n
+ }\n
+ },\n
+ "lastExport": "2018-10-16T13:50:03.563Z"\n
+}\n
+\n
+%% plugin\n
+{\n
+ "languageId": "py",\n
+ "displayName": "python",\n
+ "codeMirrorMode": "python",\n
+ "keybinding": "p",\n
+ "url": "https://iodide.io/pyodide-demo/pyodide.js",\n
+ "module": "pyodide",\n
+ "evaluator": "runPython",\n
+ "pluginType": "language"\n
+}\n
+\n
+%% md\n
+# Notebook JSMD Viewer Basic Python Test\n
+\n
+%% md\n
+This is a sample content for check the Python section can be executed in JSMD viewer.\n
+\n
+%% code {"language":"py"}\n
+2 + 40
+
+ -
+
title
+ Notebook test python basic
+
+ -
+
workflow_history
+
+ AAAAAAAAAAI=
+
+
+
+
+
+
+
+
+
+
+
+ -
+
data
+
+
+ -
+
document_publication_workflow
+
+ AAAAAAAAAAM=
+
+
+ -
+
edit_workflow
+
+ AAAAAAAAAAQ=
+
+
+ -
+
processing_status_workflow
+
+ AAAAAAAAAAU=
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
action
+
+
+
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+ -
+
error_message
+
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1555491600.85
+ UTC
+
+
+
+
+
+ -
+
validation_state
+ draft
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 0.0.0.0
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1555491600.83
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+ AAAAAAAAAAY=
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 0.0.0.0
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1555491600.86
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 975.5820.943.6348
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1555491625.73
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 975.5820.28117.55671
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1555491680.35
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 975.5821.22240.44305
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1555505646.03
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ edit
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+
+
+ -
+
error_message
+
+
+ -
+
serial
+ 975.6054.6589.45414
+
+ -
+
state
+ current
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1555505830.04
+ UTC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
action
+
+
+
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+ -
+
error_message
+
+
+ -
+
external_processing_state
+ empty
+
+ -
+
serial
+ 0.0.0.0
+
+ -
+
time
+
+
+
+
+
+
+
+
+
+
+ 1555491600.84
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ detect_uploaded_file
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+ -
+
error_message
+
+
+ -
+
external_processing_state
+ uploaded
+
+ -
+
serial
+ 0.0.0.0
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1555491600.84
+ UTC
+
+
+
+
+
+
+
+ -
+
action
+ detect_converted_file
+
+ -
+
actor
+ zope
+
+ -
+
comment
+
+
+ -
+
error_message
+
+
+ -
+
external_processing_state
+ converted
+
+ -
+
serial
+ 0.0.0.0
+
+ -
+
time
+
+
+
+
+
+
+
+
+ 1555491600.85
+ UTC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
default
+ Object copied from ${source_item}
+
+ -
+
domain
+ erp5_ui
+
+ -
+
mapping
+
+
+ -
+
source_item
+ /erp5/notebook_module/notebook_test_purejs
+
+
+
+
+ -
+
message
+ Object copied from ${source_item}
+
+
+
+
+
diff --git a/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite.xml b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ca0045e0cf6ec97779a7fd8528f2c7538e534a35
--- /dev/null
+++ b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+ -
+
_objects
+
+
+
+
+ -
+
id
+ renderjs_ui_notebook_zuite
+
+ -
+
title
+
+
+
+
+
+
diff --git a/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerJS.xml b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerJS.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e01386ddb28ea23740ecb0fddb8278c3e4a65275
--- /dev/null
+++ b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerJS.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+ -
+
_bind_names
+
+
+
+
+
+
+
+
+ -
+
_asgns
+
+
+ -
+
name_subpath
+ traverse_subpath
+
+
+
+
+
+
+
+
+
+ -
+
content_type
+ text/html
+
+ -
+
expand
+ 0
+
+ -
+
id
+ testNotebookJSMDViewerJS
+
+ -
+
output_encoding
+ utf-8
+
+ -
+
title
+
+
+
+
+
+
diff --git a/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerJS.zpt b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerJS.zpt
new file mode 100644
index 0000000000000000000000000000000000000000..cd8700cbc5158203627c0a591948b9670b3f658e
--- /dev/null
+++ b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerJS.zpt
@@ -0,0 +1,57 @@
+
+
+
+Test Notebook JSMD RenderJS UI
+
+
+
+
+Test Notebook JSMD RenderJS UI
+
+
+
+
+
+ open
+ ${base_url}/web_site_module/renderjs_runner/#/notebook_module/notebook_test_purejs
+
+
+
+ waitForElementPresent
+ //iframe
+
+
+
+ waitForElementPresent
+ //iframe[contains(@src, 'gadget_jsmd_viewer.html')]
+
+
+
+ selectFrame
+ index=0
+
+
+
+ waitForElementPresent
+ //body//iframe
+
+
+
+ selectFrame
+ index=0
+
+
+
+ waitForElementPresent
+ //h1[contains(text(),'Notebook JSMD Viewer Test')]
+
+
+
+ waitForElementPresent
+ //code[contains(text(),'42')]
+
+
+
+
+
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerPyBasic.xml b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerPyBasic.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dbaf41ee727b228587d60d19b84873b4ddadfbff
--- /dev/null
+++ b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerPyBasic.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+ -
+
_bind_names
+
+
+
+
+
+
+
+
+ -
+
_asgns
+
+
+ -
+
name_subpath
+ traverse_subpath
+
+
+
+
+
+
+
+
+
+ -
+
content_type
+ text/html
+
+ -
+
expand
+ 0
+
+ -
+
id
+ testNotebookJSMDViewerPyBasic
+
+ -
+
output_encoding
+ utf-8
+
+ -
+
title
+
+
+
+
+
+
diff --git a/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerPyBasic.zpt b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerPyBasic.zpt
new file mode 100644
index 0000000000000000000000000000000000000000..58475d6d272e271c303bef7571415495803b3379
--- /dev/null
+++ b/bt5/erp5_notebook_test/PathTemplateItem/portal_tests/renderjs_ui_notebook_zuite/testNotebookJSMDViewerPyBasic.zpt
@@ -0,0 +1,57 @@
+
+
+
+Test Notebook JSMD RenderJS UI
+
+
+
+
+Test Notebook JSMD RenderJS UI
+
+
+
+
+
+ open
+ ${base_url}/web_site_module/renderjs_runner/#/notebook_module/notebook_test_python_basic
+
+
+
+ waitForElementPresent
+ //iframe
+
+
+
+ waitForElementPresent
+ //iframe[contains(@src, 'gadget_jsmd_viewer.html')]
+
+
+
+ selectFrame
+ index=0
+
+
+
+ waitForElementPresent
+ //body//iframe
+
+
+
+ selectFrame
+ index=0
+
+
+
+ waitForElementPresent
+ //h1[contains(text(),'Notebook JSMD Viewer Basic Python Test')]
+
+
+
+ waitForElementPresent
+ //code[contains(text(),'42')]
+
+
+
+
+
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/TestTemplateItem/portal_components/test.erp5.testNotebookRJS.py b/bt5/erp5_notebook_test/TestTemplateItem/portal_components/test.erp5.testNotebookRJS.py
new file mode 100644
index 0000000000000000000000000000000000000000..291963fb1349b24e6b11319a7221d7ef7ac95135
--- /dev/null
+++ b/bt5/erp5_notebook_test/TestTemplateItem/portal_components/test.erp5.testNotebookRJS.py
@@ -0,0 +1,48 @@
+##############################################################################
+#
+# Copyright (c) 2019 Nexedi SARL and Contributors. All Rights Reserved.
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+import unittest
+
+from Products.ERP5Type.tests.ERP5TypeFunctionalTestCase import ERP5TypeFunctionalTestCase
+
+class TestNotebookRJSUI(ERP5TypeFunctionalTestCase):
+ foreground = 0
+ run_only = "renderjs_ui_notebook_zuite"
+
+ def getBusinessTemplateList(self):
+ return (
+ 'erp5_web_renderjs_ui',
+ 'erp5_notebook',
+ 'erp5_notebook_test',
+ 'erp5_ui_test_core',
+ 'erp5_accounting',
+ 'erp5_test_result',
+ )
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestNotebookRJSUI))
+ return suite
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/TestTemplateItem/portal_components/test.erp5.testNotebookRJS.xml b/bt5/erp5_notebook_test/TestTemplateItem/portal_components/test.erp5.testNotebookRJS.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f9a255e27fcc7384a23f89019943662978276b94
--- /dev/null
+++ b/bt5/erp5_notebook_test/TestTemplateItem/portal_components/test.erp5.testNotebookRJS.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+ -
+
_recorded_property_dict
+
+ AAAAAAAAAAI=
+
+
+ -
+
default_reference
+ testNotebookRJS
+
+ -
+
description
+
+
+
+
+ -
+
id
+ test.erp5.testNotebookRJS
+
+ -
+
portal_type
+ Test Component
+
+ -
+
sid
+
+
+
+
+ -
+
text_content_error_message
+
+
+
+
+ -
+
text_content_warning_message
+
+
+
+
+ -
+
version
+ erp5
+
+ -
+
workflow_history
+
+ AAAAAAAAAAM=
+
+
+
+
+
+
+
+
+
+
+
+ -
+
data
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
data
+
+
+ -
+
component_validation_workflow
+
+ AAAAAAAAAAQ=
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
action
+ validate
+
+ -
+
validation_state
+ validated
+
+
+
+
+
+
+
diff --git a/bt5/erp5_notebook_test/bt/dependency_list b/bt5/erp5_notebook_test/bt/dependency_list
new file mode 100644
index 0000000000000000000000000000000000000000..1c3aa5509a5177059ebfaad6e24805fd705b505f
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/dependency_list
@@ -0,0 +1,7 @@
+erp5_notebook
+erp5_ui_test_core
+erp5_ui_test
+erp5_web_renderjs_ui
+erp5_gadget_interface_validator
+erp5_accounting
+erp5_test_result
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/bt/description b/bt5/erp5_notebook_test/bt/description
new file mode 100644
index 0000000000000000000000000000000000000000..85fbc2c7d5e4dd9c1f2125db1d0ab59e51b9f89f
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/description
@@ -0,0 +1 @@
+Notebook renderjs test suite
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/bt/template_format_version b/bt5/erp5_notebook_test/bt/template_format_version
new file mode 100644
index 0000000000000000000000000000000000000000..56a6051ca2b02b04ef92d5150c9ef600403cb1de
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/template_format_version
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/bt/template_keep_workflow_path_list b/bt5/erp5_notebook_test/bt/template_keep_workflow_path_list
new file mode 100644
index 0000000000000000000000000000000000000000..ec7c14c07a4d716a406cca9942b960df19dbdf20
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/template_keep_workflow_path_list
@@ -0,0 +1,2 @@
+notebook_module/notebook_test_purejs
+notebook_module/notebook_test_python_basic
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/bt/template_module_id_list b/bt5/erp5_notebook_test/bt/template_module_id_list
new file mode 100644
index 0000000000000000000000000000000000000000..3cc2430b48d9a8400e5e18d599db7863e4a32c3f
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/template_module_id_list
@@ -0,0 +1 @@
+notebook_module
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/bt/template_path_list b/bt5/erp5_notebook_test/bt/template_path_list
new file mode 100644
index 0000000000000000000000000000000000000000..7f2e7660c8c638f5ad1a33e557ebd2ae1889a029
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/template_path_list
@@ -0,0 +1,4 @@
+notebook_module/notebook_test_purejs
+notebook_module/notebook_test_python_basic
+portal_tests/renderjs_ui_notebook_zuite
+portal_tests/renderjs_ui_notebook_zuite/**
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/bt/template_test_id_list b/bt5/erp5_notebook_test/bt/template_test_id_list
new file mode 100644
index 0000000000000000000000000000000000000000..fa12ef60df99b7ee7c31827c2f62f18a966e582e
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/template_test_id_list
@@ -0,0 +1 @@
+test.erp5.testNotebookRJS
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/bt/test_dependency_list b/bt5/erp5_notebook_test/bt/test_dependency_list
new file mode 100644
index 0000000000000000000000000000000000000000..bff77e32d84989312efdf3b2caed2e39f9a513ed
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/test_dependency_list
@@ -0,0 +1 @@
+erp5_full_text_mroonga_catalog
\ No newline at end of file
diff --git a/bt5/erp5_notebook_test/bt/title b/bt5/erp5_notebook_test/bt/title
new file mode 100644
index 0000000000000000000000000000000000000000..dfb2157da14751bfef42ef9ec0dc86ca7b89561b
--- /dev/null
+++ b/bt5/erp5_notebook_test/bt/title
@@ -0,0 +1 @@
+erp5_notebook_test
\ No newline at end of file
diff --git a/tests/__init__.py b/tests/__init__.py
index 580935d622e98b70ce2b2f976a2339adbca29f28..5c5da1aaf8c706c7e18c225b545ed7c1fe792c30 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -35,9 +35,7 @@ class _ERP5(ERP5TypeTestSuite):
component_re = re.compile(".*/([^/]+)/TestTemplateItem/portal_components"
"/test\.[^.]+\.([^.]+).py$")
for test_path in (
- glob('%s/product/*/tests/test*.py' % path) +
- glob('%s/bt5/*/TestTemplateItem/test*.py' % path) +
- glob('%s/bt5/*/TestTemplateItem/portal_components/test.*.test*.py' % path)):
+ glob('%s/bt5/erp5_notebook_test/TestTemplateItem/portal_components/test.*.test*.py' % path)):
component_re_match = component_re.match(test_path)
if component_re_match is not None:
test_case = "%s:%s" % (component_re_match.group(1),