mirror of https://github.com/pyodide/pyodide.git
Validate package URI
This commit is contained in:
parent
f50275335d
commit
4f665e0a3a
|
@ -2,6 +2,13 @@
|
||||||
* The main bootstrap script for loading pyodide.
|
* The main bootstrap script for loading pyodide.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Regexp for validating package name and URI
|
||||||
|
var package_name_regexp = '[a-zA-Z0-9_\-]+'
|
||||||
|
var package_uri_regexp = new RegExp(
|
||||||
|
'^(?:https?|file)://.*?(' + package_name_regexp + ').js$');
|
||||||
|
var package_name_regexp = new RegExp('^' + package_name_regexp + '$');
|
||||||
|
|
||||||
|
|
||||||
var languagePluginLoader = new Promise((resolve, reject) => {
|
var languagePluginLoader = new Promise((resolve, reject) => {
|
||||||
// This is filled in by the Makefile to be either a local file or the
|
// This is filled in by the Makefile to be either a local file or the
|
||||||
// deployed location. TODO: This should be done in a less hacky
|
// deployed location. TODO: This should be done in a less hacky
|
||||||
|
@ -13,20 +20,38 @@ var languagePluginLoader = new Promise((resolve, reject) => {
|
||||||
var packages = undefined;
|
var packages = undefined;
|
||||||
let loadedPackages = new Set();
|
let loadedPackages = new Set();
|
||||||
|
|
||||||
|
let _uri_to_package_name = (package_uri) => {
|
||||||
|
// Generate a unique package name from URI
|
||||||
|
|
||||||
|
if (package_name_regexp.test(package_uri)) {
|
||||||
|
return package_uri;
|
||||||
|
} else 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];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
let loadPackage = (names) => {
|
let loadPackage = (names) => {
|
||||||
// DFS to find all dependencies of the requested packages
|
// DFS to find all dependencies of the requested packages
|
||||||
let packages = window.pyodide.packages.dependencies;
|
let packages = window.pyodide.packages.dependencies;
|
||||||
let queue = new Array(names);
|
let queue = new Array(names);
|
||||||
let toLoad = new Set();
|
let toLoad = new Set();
|
||||||
while (queue.length) {
|
while (queue.length) {
|
||||||
const package = queue.pop();
|
const package_uri = queue.pop();
|
||||||
var valid_package_name_regexp = new RegExp('^[a-zA-Z0-9_\-]+$');
|
|
||||||
console.log(package + valid_package_name_regexp.test(package));
|
const package = _uri_to_package_name(package_uri);
|
||||||
if (!valid_package_name_regexp.test(package)) {
|
|
||||||
console.log(`Invalid package name '${package}'`);
|
if (package == null) {
|
||||||
|
console.log(`Invalid package name or URI '${package_uri}'`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(`Loading ${package} from ${package_uri}`);
|
||||||
|
|
||||||
if (!loadedPackages.has(package)) {
|
if (!loadedPackages.has(package)) {
|
||||||
toLoad.add(package);
|
toLoad.add(package);
|
||||||
if (packages.hasOwnProperty(package)) {
|
if (packages.hasOwnProperty(package)) {
|
||||||
|
|
|
@ -53,6 +53,9 @@ class SeleniumWrapper:
|
||||||
logs = self.driver.execute_script("return window.logs")
|
logs = self.driver.execute_script("return window.logs")
|
||||||
return '\n'.join(str(x) for x in logs)
|
return '\n'.join(str(x) for x in logs)
|
||||||
|
|
||||||
|
def clean_logs(self):
|
||||||
|
self.driver.execute_script("window.logs = []")
|
||||||
|
|
||||||
def run(self, code):
|
def run(self, code):
|
||||||
return self.run_js(
|
return self.run_js(
|
||||||
'return pyodide.runPython({!r})'.format(code))
|
'return pyodide.runPython({!r})'.format(code))
|
||||||
|
@ -145,11 +148,10 @@ if pytest is not None:
|
||||||
def selenium(_selenium_cached):
|
def selenium(_selenium_cached):
|
||||||
# selenium instance cached at the module level
|
# selenium instance cached at the module level
|
||||||
try:
|
try:
|
||||||
# clean selenium logs for each test run
|
_selenium_cached.clean_logs()
|
||||||
_selenium_cached.driver.execute_script("window.logs = []")
|
|
||||||
yield _selenium_cached
|
yield _selenium_cached
|
||||||
finally:
|
finally:
|
||||||
print('\n'.join(str(x) for x in _selenium_cached.logs))
|
print(_selenium_cached.logs)
|
||||||
|
|
||||||
|
|
||||||
PORT = 0
|
PORT = 0
|
||||||
|
|
Loading…
Reference in New Issue