]> granicus.if.org Git - python/commitdiff
Accept keyword arguments for __import__ and doc the addition of the level param from...
authorNeal Norwitz <nnorwitz@gmail.com>
Mon, 3 Apr 2006 04:48:37 +0000 (04:48 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Mon, 3 Apr 2006 04:48:37 +0000 (04:48 +0000)
Doc/lib/libfuncs.tex
Misc/NEWS
Python/bltinmodule.c

index ec9bd7b22154e27f8ed2b23e3cd0cf2c3172b377..686db3957abb322dc2fa6ebf6db499a628c65c35 100644 (file)
@@ -6,7 +6,7 @@ are always available.  They are listed here in alphabetical order.
 
 \setindexsubitem{(built-in function)}
 
-\begin{funcdesc}{__import__}{name\optional{, globals\optional{, locals\optional{, fromlist}}}}
+\begin{funcdesc}{__import__}{name\optional{, globals\optional{, locals\optional{, fromlist\optional{, level}}}}}
   This function is invoked by the \keyword{import}\stindex{import}
   statement.  It mainly exists so that you can replace it with another
   function that has a compatible interface, in order to change the
@@ -20,9 +20,9 @@ are always available.  They are listed here in alphabetical order.
 
   For example, the statement \samp{import spam} results in the
   following call: \code{__import__('spam',} \code{globals(),}
-  \code{locals(), [])}; the statement \samp{from spam.ham import eggs}
+  \code{locals(), [], -1)}; the statement \samp{from spam.ham import eggs}
   results in \samp{__import__('spam.ham', globals(), locals(),
-  ['eggs'])}.  Note that even though \code{locals()} and
+  ['eggs'], -1)}.  Note that even though \code{locals()} and
   \code{['eggs']} are passed in as arguments, the
   \function{__import__()} function does not set the local variable
   named \code{eggs}; this is done by subsequent code that is generated
@@ -52,6 +52,15 @@ def my_import(name):
         mod = getattr(mod, comp)
     return mod
 \end{verbatim}
+
+  \var{level} specifies whether to use absolute or relative imports.
+  The default is \code{-1} which indicates both absolute and relative
+  imports will be attempted.  \code{0} means only perform absolute imports.
+  Positive values for \var{level} indicate the number of parent directories
+  to search relative to the directory of the module calling
+  \function{__import__}.
+\versionchanged[The level parameter was added]{2.5}
+\versionchanged[Keyword support for parameters was added]{2.5}
 \end{funcdesc}
 
 \begin{funcdesc}{abs}{x}
index 4bd42835e39cb8db089eb78382ec619e0f2b4ebf..fa162f59c7ad5789f54f4b8e1a16bf86675a55a8 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 2.5 alpha 1?
 Core and builtins
 -----------------
 
+- __import__ accepts keyword arguments.
+
 - Patch #1460496: round() now accepts keyword arguments.
 
 - Fixed bug #1459029 - unicode reprs were double-escaped.
index b675c26f2c5906eb50921b97ea89001835250b95..fe923ac387f87f68c7baa21d628e93c19d7cd3d8 100644 (file)
@@ -31,23 +31,25 @@ static PyObject *filterunicode(PyObject *, PyObject *);
 static PyObject *filtertuple (PyObject *, PyObject *);
 
 static PyObject *
-builtin___import__(PyObject *self, PyObject *args)
+builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
 {
+       static char *kwlist[] = {"name", "globals", "locals", "fromlist",
+                                "level", 0};
        char *name;
        PyObject *globals = NULL;
        PyObject *locals = NULL;
        PyObject *fromlist = NULL;
        int level = -1;
 
-       if (!PyArg_ParseTuple(args, "s|OOOi:__import__",
-                       &name, &globals, &locals, &fromlist, &level))
+       if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
+                       kwlist, &name, &globals, &locals, &fromlist, &level))
                return NULL;
        return PyImport_ImportModuleLevel(name, globals, locals,
                                          fromlist, level);
 }
 
 PyDoc_STRVAR(import_doc,
-"__import__(name, globals, locals, fromlist) -> module\n\
+"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
 \n\
 Import a module.  The globals are only used to determine the context;\n\
 they are not modified.  The locals are currently unused.  The fromlist\n\
@@ -55,7 +57,10 @@ should be a list of names to emulate ``from name import ...'', or an\n\
 empty list to emulate ``import name''.\n\
 When importing a module from a package, note that __import__('A.B', ...)\n\
 returns package A when fromlist is empty, but its submodule B when\n\
-fromlist is not empty.");
+fromlist is not empty.  Level is used to determine whether to perform \n\
+absolute or relative imports.  -1 is the original strategy of attempting\n\
+both absolute and relative imports, 0 is absolute, a positive number\n\
+is the number of parent directories to search relative to the current module.");
 
 
 static PyObject *
@@ -2210,7 +2215,7 @@ in length to the length of the shortest argument sequence.");
 
 
 static PyMethodDef builtin_methods[] = {
-       {"__import__",  builtin___import__, METH_VARARGS, import_doc},
+       {"__import__",  (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
        {"abs",         builtin_abs,        METH_O, abs_doc},
        {"all",         builtin_all,        METH_O, all_doc},
        {"any",         builtin_any,        METH_O, any_doc},