org.python.core.NewCompilerResources Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython-standalone Show documentation
Show all versions of jython-standalone Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
// (C) Copyright 2007 Tobias Ivarsson
package org.python.core;
/**
* This class contains stuff that almost exists in the library already,
* but with interfaces that I found more suitable. If others agree this should
* be migrated into the standard lib.
*
* @author Tobias Ivarsson
*/
public class NewCompilerResources {
// import facilities, stolen from imp
/**
* Called from jython generated code when a statement like "from spam.eggs
* import *" is executed.
*/
public static void importAll(PyObject module, PyFrame frame) {
// System.out.println("importAll(" + mod + ")");
PyObject names;
boolean filter = true;
if (module instanceof PyJavaPackage) {
names = ((PyJavaPackage) module).fillDir();
} else {
PyObject __all__ = module.__findattr__("__all__");
if (__all__ != null) {
names = __all__;
filter = false;
} else {
names = module.__dir__();
}
}
loadNames(names, module, frame.getLocals(), filter);
}
/**
* From a module, load the attributes found in names
into
* locals.
*
* @param filter if true, if the name starts with an underscore '_' do not
* add it to locals
* @param locals the namespace into which names will be loaded
* @param names the names to load from the module
* @param module the fully imported module
*/
private static void loadNames(PyObject names, PyObject module,
PyObject locals, boolean filter) {
PyObject iter = names.__iter__();
for (PyObject name; (name = iter.__iternext__()) != null;) {
String sname = ((PyString) name).internedString();
if (filter && sname.startsWith("_")) {
continue;
} else {
try {
locals.__setitem__(sname, module.__getattr__(sname));
} catch (Exception exc) {
continue;
}
}
}
}
}