Show More
Commit Description:
merge latest feature to master branch
Commit Description:
merge latest feature to master branch
References:
File last commit:
Show/Diff file:
Action:
lib/assets/libs/modulefinder.js | 50 lines | 1.6 KiB | application/javascript | JavascriptLexer |
var $module=(function($B){
var _b_=$B.builtins
var _mod = {}
$ModuleFinderDict = {__class__:$B.$type,__name__:'ModuleFinder'}
$ModuleFinderDict.__mro__ = [$ModuleFinderDict,_b_.object.$dict]
$ModuleFinderDict.run_script = function(self, pathname){
// pathname is the url of a Python script
var py_src = _b_.$open(pathname).read()
// transform into internal Brython tree structure
var root = $B.py2js(py_src)
// walk the tree to find occurences of imports
function walk(node){
var modules = []
var ctx = node.context
if(ctx && ctx.type=='node'){ctx = ctx.tree[0]}
if(ctx && ctx.type=="import"){
for(var i=0, _len_i = ctx.tree.length; i < _len_i;i++){
if(modules.indexOf(ctx.tree[i].name)==-1){
modules.push(ctx.tree[i].name)
}
}
}else if(ctx && ctx.type=="from"){
if(modules.indexOf(ctx.module)==-1){
modules.push(ctx.module)
}
}
for(var i=0, _len_i = node.children.length; i < _len_i;i++){
mods = walk(node.children[i])
for(var j=0, _len_j = mods.length; j < _len_j;j++){
if(modules.indexOf(mods[j])==-1){modules.push(mods[j])}
}
}
return modules
}
self.modules = walk(root)
}
_mod.ModuleFinder = function(){return {__class__:$ModuleFinderDict}
}
_mod.ModuleFinder.$dict = $ModuleFinderDict
_mod.ModuleFinder.__class__ = $B.$factory
$ModuleFinderDict.$factory = _mod.ModuleFinder
return _mod
})(__BRYTHON__)