Merge remote-tracking branch 'pmp-p/patch-14' into pmpp_test
This commit is contained in:
commit
f6ee6e4330
@ -2,6 +2,9 @@ import sys
|
|||||||
import builtins
|
import builtins
|
||||||
import types
|
import types
|
||||||
|
|
||||||
|
# keep the builtin function accessible in this module and via imp.__import__
|
||||||
|
__import__ = __import__
|
||||||
|
|
||||||
# Deprecated since version 3.4: Use types.ModuleType instead.
|
# Deprecated since version 3.4: Use types.ModuleType instead.
|
||||||
# but micropython aims toward full 3.4
|
# but micropython aims toward full 3.4
|
||||||
|
|
||||||
@ -10,50 +13,16 @@ def new_module(name):
|
|||||||
return types.ModuleType(name)
|
return types.ModuleType(name)
|
||||||
|
|
||||||
|
|
||||||
|
# not spaghetti
|
||||||
def load_module(module, *argv):
|
def importer(name,*argv,**kw):
|
||||||
m = new_module(module)
|
|
||||||
if m:
|
|
||||||
import embed
|
|
||||||
file = '/assets/%s.py' % module
|
|
||||||
mroot = module.split('.')[0]
|
|
||||||
m = sys.modules[mroot]
|
|
||||||
runf(file, module=embed.vars(m), patch='\n\n__file__=%r\n' % file )
|
|
||||||
globals()[mroot] = m
|
|
||||||
return m
|
|
||||||
|
|
||||||
try:
|
|
||||||
vars
|
|
||||||
except:
|
|
||||||
#wasm port
|
|
||||||
import embed
|
|
||||||
builtins.vars = embed.vars
|
|
||||||
|
|
||||||
try:
|
|
||||||
vars
|
|
||||||
except:
|
|
||||||
print(""" This could provide a workaround for :\r
|
|
||||||
https://github.com/pmp-p/micropython-ports-wasm/issues/5\r
|
|
||||||
use imp.load_module(modulename) to load modules from /assets/*.py
|
|
||||||
""")
|
|
||||||
raise ImportError("ERROR: this build has no vars() support at all")
|
|
||||||
|
|
||||||
|
|
||||||
# keep the builtin function accessible in this module and from imp.__import__
|
|
||||||
__import__ = __import__
|
|
||||||
|
|
||||||
def importer(name,*argv):
|
|
||||||
global __import__
|
global __import__
|
||||||
if sys.modules.get(name,None) is None:
|
|
||||||
print("import %s" % name,argv)
|
|
||||||
try:
|
try:
|
||||||
return __import__(name,*argv)
|
return __import__(name,*argv)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
file = ':{0}.py'.format(name)
|
file = ':{0}.py'.format(name)
|
||||||
print("trying to go online for",file)
|
print("INFO: getting online version of",file)
|
||||||
# todo open the file via open() or raise importerror
|
# todo open the file via open() or raise importerror
|
||||||
try:
|
try:
|
||||||
code = open(file,'r').read()
|
code = open(file,'r').read()
|
||||||
@ -73,7 +42,12 @@ def importer(name,*argv):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
# execute it in its own empty namespace.
|
# execute it in its own empty namespace.
|
||||||
|
try:
|
||||||
ns = vars(mod)
|
ns = vars(mod)
|
||||||
|
except:
|
||||||
|
print("WARNING: this python implementation lacks vars()")
|
||||||
|
ns = mod.__dict__
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
exec( code, ns, ns)
|
exec( code, ns, ns)
|
||||||
@ -86,14 +60,6 @@ def importer(name,*argv):
|
|||||||
sys.modules[name] = mod
|
sys.modules[name] = mod
|
||||||
return mod
|
return mod
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def reload(name):
|
|
||||||
if sys.modules.get(name,None):
|
|
||||||
del sys.modules[name]
|
|
||||||
return importError(name)
|
|
||||||
|
|
||||||
|
|
||||||
# install hook
|
# install hook
|
||||||
builtins.__import__ = importer
|
builtins.__import__ = importer
|
||||||
print("__import__ is now", importer)
|
print("__import__ is now", importer)
|
||||||
|
|||||||
@ -0,0 +1 @@
|
|||||||
|
__dict__ = globals()
|
||||||
5
ports/javascript/modules/imp_pivot.py
Normal file
5
ports/javascript/modules/imp_pivot.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
__name__ = imp.pivot_name
|
||||||
|
__file__ = imp.pivot_file
|
||||||
|
print('pivot',__name__,__file__, globals())
|
||||||
|
|
||||||
|
exec( compile( imp.pivot_code, __file__, 'exec') , globals(), globals() )
|
||||||
10
ports/javascript/modules/site.py
Normal file
10
ports/javascript/modules/site.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import sys
|
||||||
|
import builtins
|
||||||
|
|
||||||
|
for name in ("sys", "__main__", "builtins"):
|
||||||
|
sys.modules[name] = __import__(name)
|
||||||
|
|
||||||
|
import imp
|
||||||
|
|
||||||
|
builtins.imp = imp
|
||||||
|
|
||||||
@ -1,4 +1,5 @@
|
|||||||
import sys
|
import sys
|
||||||
|
import imp
|
||||||
|
|
||||||
|
|
||||||
# not thread safe
|
# not thread safe
|
||||||
@ -9,11 +10,13 @@ def ModuleType(name):
|
|||||||
return sys.modules[name]
|
return sys.modules[name]
|
||||||
|
|
||||||
# get a new fresh module
|
# get a new fresh module
|
||||||
import imp_empty_pivot_module as pivot
|
# be sure to use the builtin func
|
||||||
|
pivot = imp.__import__('imp_empty_pivot_module') #
|
||||||
# low risk, who would call his module like that ?
|
# low risk, who would call his module like that ?
|
||||||
del sys.modules['imp_empty_pivot_module']
|
del sys.modules['imp_empty_pivot_module']
|
||||||
|
|
||||||
#still unknown at this time
|
#still unknown at this time
|
||||||
|
if hasattr(pivot,'__file__'):
|
||||||
del pivot.__file__
|
del pivot.__file__
|
||||||
|
|
||||||
pivot.__name__ = name
|
pivot.__name__ = name
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user