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__)