mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-20 18:55:29 -05:00
Add REPL plugin hooks; Add output, output-mode, stderr attributes (#1106)
* Add before, after REPL hooks * Re-introduce 'output-mode' attribute for py-repl * Add plugin execution tests * Documentation * Changelog --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: mariana <marianameireles@protonmail.com>
This commit is contained in:
@@ -55,7 +55,7 @@ export class Plugin {
|
||||
/** The source of a <py-script>> tag has been fetched, and we're about
|
||||
* to evaluate that source using the provided interpreter.
|
||||
*
|
||||
* @param options.interpreter The Interpreter object that will be used to evaluated the Python source code
|
||||
* @param options.interpreter The Interpreter object that will be used to evaluate the Python source code
|
||||
* @param options.src {string} The Python source code to be evaluated
|
||||
* @param options.pyScriptTag The <py-script> HTML tag that originated the evaluation
|
||||
*/
|
||||
@@ -66,7 +66,7 @@ export class Plugin {
|
||||
/** The Python in a <py-script> has just been evaluated, but control
|
||||
* has not been ceded back to the JavaScript event loop yet
|
||||
*
|
||||
* @param options.interpreter The Interpreter object that will be used to evaluated the Python source code
|
||||
* @param options.interpreter The Interpreter object that will be used to evaluate the Python source code
|
||||
* @param options.src {string} The Python source code to be evaluated
|
||||
* @param options.pyScriptTag The <py-script> HTML tag that originated the evaluation
|
||||
* @param options.result The returned result of evaluating the Python (if any)
|
||||
@@ -80,6 +80,36 @@ export class Plugin {
|
||||
/* empty */
|
||||
}
|
||||
|
||||
/** The source of the <py-repl> tag has been fetched and its output-element determined;
|
||||
* we're about to evaluate the source using the provided interpreter
|
||||
*
|
||||
* @param options.interpreter The interpreter object that will be used to evaluated the Python source code
|
||||
* @param options.src {string} The Python source code to be evaluated
|
||||
* @param options.outEl The element that the result of the REPL evaluation will be output to.
|
||||
* @param options.pyReplTag The <py-repl> HTML tag the originated the evaluation
|
||||
*/
|
||||
beforePyReplExec(options: { interpreter: InterpreterClient; src: string; outEl: HTMLElement; pyReplTag: any }) {
|
||||
/* empty */
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param options.interpreter The interpreter object that will be used to evaluated the Python source code
|
||||
* @param options.src {string} The Python source code to be evaluated
|
||||
* @param options.outEl The element that the result of the REPL evaluation will be output to.
|
||||
* @param options.pyReplTag The <py-repl> HTML tag the originated the evaluation
|
||||
* @param options.result The result of evaluating the Python (if any)
|
||||
*/
|
||||
afterPyReplExec(options: {
|
||||
interpreter: InterpreterClient;
|
||||
src: string;
|
||||
outEl: HTMLElement;
|
||||
pyReplTag: HTMLElement;
|
||||
result: any;
|
||||
}) {
|
||||
/* empty */
|
||||
}
|
||||
|
||||
/** Startup complete. The interpreter is initialized and ready, user
|
||||
* scripts have been executed: the main initialization logic ends here and
|
||||
* the page is ready to accept user interactions.
|
||||
@@ -158,6 +188,18 @@ export class PluginManager {
|
||||
for (const p of this._pythonPlugins) p.afterPyScriptExec?.callKwargs(options);
|
||||
}
|
||||
|
||||
beforePyReplExec(options: { interpreter: InterpreterClient; src: string; outEl: HTMLElement; pyReplTag: any }) {
|
||||
for (const p of this._plugins) p.beforePyReplExec(options);
|
||||
|
||||
for (const p of this._pythonPlugins) p.beforePyReplExec?.callKwargs(options);
|
||||
}
|
||||
|
||||
afterPyReplExec(options: { interpreter: InterpreterClient; src: string; outEl; pyReplTag; result }) {
|
||||
for (const p of this._plugins) p.afterPyReplExec(options);
|
||||
|
||||
for (const p of this._pythonPlugins) p.afterPyReplExec?.callKwargs(options);
|
||||
}
|
||||
|
||||
onUserError(error: UserError) {
|
||||
for (const p of this._plugins) p.onUserError?.(error);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user