Skip to content

Commit

Permalink
Implemented from ... import *, issue #615
Browse files Browse the repository at this point in the history
  • Loading branch information
DanielKluev committed Jun 12, 2011
1 parent f2e7568 commit b3424c5
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 6 deletions.
10 changes: 10 additions & 0 deletions pyjs/src/pyjs/builtin/pyjslib.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -952,6 +952,16 @@ def __dynamic_load__(importName):
__nondynamic_modules__[importName] = 1.0 __nondynamic_modules__[importName] = 1.0
return module return module


def __import_all__(path, context, namespace, module_name=None, get_base=True):
module = ___import___(path, context, module_name, get_base)
if JS("""typeof @{{module}}['__all__'] == 'undefined'"""):
for name in dir(module):
if not name.startswith('_'):
JS("""@{{namespace}}[@{{name}}] = @{{module}}[@{{name}}];""")
else:
for name in module.__all__:
JS("""@{{namespace}}[@{{name}}] = @{{module}}[@{{name}}];""")

class BaseException: class BaseException:


def __init__(self, *args): def __init__(self, *args):
Expand Down
26 changes: 20 additions & 6 deletions pyjs/src/pyjs/translator.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@
"slice", "slice",
"__delslice", "__delslice",
"___import___", "___import___",
"__import_all__",
"_handle_exception", "_handle_exception",
)) ))


Expand Down Expand Up @@ -1970,7 +1971,8 @@ def _import(self, node, current_klass, root_level = False):
# object to check our scope # object to check our scope
self._doImport(node.names, current_klass, root_level, True) self._doImport(node.names, current_klass, root_level, True)


def _doImport(self, names, current_klass, root_level, assignBase, absPath=False): def _doImport(self, names, current_klass, root_level, assignBase,
absPath=False, all=False):
if root_level: if root_level:
modtype = 'root-module' modtype = 'root-module'
else: else:
Expand Down Expand Up @@ -2013,12 +2015,20 @@ def _doImport(self, names, current_klass, root_level, assignBase, absPath=False)
context = 'null' context = 'null'
else: else:
context = self.import_context context = self.import_context
import_stmt = "@{{___import___}}('%s', %s" % ( if not all:
importName, import_stmt = "@{{___import___}}('%s', %s" % (
context, importName,
) context,
)
else:
import_stmt = "@{{__import_all__}}('%s', %s, %s" %(
importName,
context,
self.modpfx()[:-1],
)

if not assignBase: if not assignBase:
self.w( self.spacing() + import_stmt + 'null, false);') self.w( self.spacing() + import_stmt + ', null, false);')
self._lhsFromName(importName, current_klass, modtype) self._lhsFromName(importName, current_klass, modtype)
self.add_imported_module(importName) self.add_imported_module(importName)
if assignBase: if assignBase:
Expand Down Expand Up @@ -2104,6 +2114,10 @@ def _from(self, node, current_klass, root_level = False):
if modname[0] == '.': if modname[0] == '.':
modname = modname[1:] modname = modname[1:]
for name in node.names: for name in node.names:
if name[0] == "*":
self._doImport(((modname, name[0]),), current_klass,
root_level, False, absPath, True)
continue
sub = modname + '.' + name[0] sub = modname + '.' + name[0]
ass_name = name[1] or name[0] ass_name = name[1] or name[0]
self._doImport(((sub, ass_name),), current_klass, root_level, True, absPath) self._doImport(((sub, ass_name),), current_klass, root_level, True, absPath)
Expand Down

0 comments on commit b3424c5

Please sign in to comment.