mirror of
https://github.com/open-webui/open-webui
synced 2024-11-29 07:21:01 +00:00
fix: python code execution
This commit is contained in:
parent
325fd2b97b
commit
18a7634f5c
@ -21,6 +21,116 @@
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const checkPythonCode = (str) => {
|
||||||
|
// Check if the string contains typical Python keywords, syntax, or functions
|
||||||
|
const pythonKeywords = [
|
||||||
|
'def',
|
||||||
|
'class',
|
||||||
|
'import',
|
||||||
|
'from',
|
||||||
|
'if',
|
||||||
|
'else',
|
||||||
|
'elif',
|
||||||
|
'for',
|
||||||
|
'while',
|
||||||
|
'try',
|
||||||
|
'except',
|
||||||
|
'finally',
|
||||||
|
'return',
|
||||||
|
'yield',
|
||||||
|
'lambda',
|
||||||
|
'assert',
|
||||||
|
'pass',
|
||||||
|
'break',
|
||||||
|
'continue',
|
||||||
|
'global',
|
||||||
|
'nonlocal',
|
||||||
|
'del',
|
||||||
|
'True',
|
||||||
|
'False',
|
||||||
|
'None',
|
||||||
|
'and',
|
||||||
|
'or',
|
||||||
|
'not',
|
||||||
|
'in',
|
||||||
|
'is',
|
||||||
|
'as',
|
||||||
|
'with'
|
||||||
|
];
|
||||||
|
|
||||||
|
for (let keyword of pythonKeywords) {
|
||||||
|
if (str.includes(keyword)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the string contains typical Python syntax characters
|
||||||
|
const pythonSyntax = [
|
||||||
|
'def ',
|
||||||
|
'class ',
|
||||||
|
'import ',
|
||||||
|
'from ',
|
||||||
|
'if ',
|
||||||
|
'else:',
|
||||||
|
'elif ',
|
||||||
|
'for ',
|
||||||
|
'while ',
|
||||||
|
'try:',
|
||||||
|
'except:',
|
||||||
|
'finally:',
|
||||||
|
'return ',
|
||||||
|
'yield ',
|
||||||
|
'lambda ',
|
||||||
|
'assert ',
|
||||||
|
'pass',
|
||||||
|
'break',
|
||||||
|
'continue',
|
||||||
|
'global ',
|
||||||
|
'nonlocal ',
|
||||||
|
'del ',
|
||||||
|
'True',
|
||||||
|
'False',
|
||||||
|
'None',
|
||||||
|
' and ',
|
||||||
|
' or ',
|
||||||
|
' not ',
|
||||||
|
' in ',
|
||||||
|
' is ',
|
||||||
|
' as ',
|
||||||
|
' with ',
|
||||||
|
':',
|
||||||
|
'=',
|
||||||
|
'==',
|
||||||
|
'!=',
|
||||||
|
'>',
|
||||||
|
'<',
|
||||||
|
'>=',
|
||||||
|
'<=',
|
||||||
|
'+',
|
||||||
|
'-',
|
||||||
|
'*',
|
||||||
|
'/',
|
||||||
|
'%',
|
||||||
|
'**',
|
||||||
|
'//',
|
||||||
|
'(',
|
||||||
|
')',
|
||||||
|
'[',
|
||||||
|
']',
|
||||||
|
'{',
|
||||||
|
'}'
|
||||||
|
];
|
||||||
|
|
||||||
|
for (let syntax of pythonSyntax) {
|
||||||
|
if (str.includes(syntax)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If none of the above conditions met, it's probably not Python code
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
const executePython = async (text) => {
|
const executePython = async (text) => {
|
||||||
executed = true;
|
executed = true;
|
||||||
|
|
||||||
@ -31,9 +141,15 @@
|
|||||||
outputDiv.innerText = 'Running...';
|
outputDiv.innerText = 'Running...';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
text = text
|
||||||
|
.split('\n')
|
||||||
|
.map((line, index) => (index === 0 ? line : ' ' + line))
|
||||||
|
.join('\n');
|
||||||
|
|
||||||
// pyscript
|
// pyscript
|
||||||
let div = document.createElement('div');
|
let div = document.createElement('div');
|
||||||
let html = `<py-script type="py" worker>
|
let html = `
|
||||||
|
<py-script type="py" worker>
|
||||||
import js
|
import js
|
||||||
import sys
|
import sys
|
||||||
import io
|
import io
|
||||||
@ -68,7 +184,7 @@ def display_message():
|
|||||||
output_div.innerText = captured_output
|
output_div.innerText = captured_output
|
||||||
|
|
||||||
display_message()
|
display_message()
|
||||||
</py-script>`;
|
</py-script>`;
|
||||||
|
|
||||||
div.innerHTML = html;
|
div.innerHTML = html;
|
||||||
const pyScript = div.firstElementChild;
|
const pyScript = div.firstElementChild;
|
||||||
@ -94,7 +210,7 @@ display_message()
|
|||||||
<div class="p-1">{@html lang}</div>
|
<div class="p-1">{@html lang}</div>
|
||||||
|
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
{#if lang === 'python'}
|
{#if lang === 'python' || checkPythonCode(code)}
|
||||||
<button
|
<button
|
||||||
class="copy-code-button bg-none border-none p-1"
|
class="copy-code-button bg-none border-none p-1"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
|
Loading…
Reference in New Issue
Block a user