comparison Python/import.c @ 76451:ea46ebba8a0f

Issue #13959: Re-implement imp.source_from_cache() in Lib/imp.py.
author Brett Cannon <brett@python.org>
date Sat, 21 Apr 2012 18:52:52 -0400
parents b773a751c2e7
children 085cf1480cfe
comparison
equal deleted inserted replaced
76450:b773a751c2e7 76451:ea46ebba8a0f
2924 "reload(module) -> module\n\ 2924 "reload(module) -> module\n\
2925 \n\ 2925 \n\
2926 Reload the module. The module must have been successfully imported before."); 2926 Reload the module. The module must have been successfully imported before.");
2927 2927
2928 2928
2929 static PyObject *
2930 imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
2931 {
2932 static char *kwlist[] = {"path", NULL};
2933 PyObject *pathname, *source;
2934
2935 if (!PyArg_ParseTupleAndKeywords(
2936 args, kws, "O&", kwlist,
2937 PyUnicode_FSDecoder, &pathname))
2938 return NULL;
2939
2940 source = make_source_pathname(pathname);
2941 if (source == NULL) {
2942 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
2943 pathname);
2944 Py_DECREF(pathname);
2945 return NULL;
2946 }
2947 Py_DECREF(pathname);
2948 return source;
2949 }
2950
2951 PyDoc_STRVAR(doc_source_from_cache,
2952 "source_from_cache(path) -> path\n\
2953 Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
2954 \n\
2955 The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
2956 the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
2957 does not conform to PEP 3147 format, ValueError will be raised.");
2958
2959 /* Doc strings */ 2929 /* Doc strings */
2960 2930
2961 PyDoc_STRVAR(doc_imp, 2931 PyDoc_STRVAR(doc_imp,
2962 "(Extremely) low-level import machinery bits as used by importlib and imp."); 2932 "(Extremely) low-level import machinery bits as used by importlib and imp.");
2963 2933
3005 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes}, 2975 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3006 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held}, 2976 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3007 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock}, 2977 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3008 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock}, 2978 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3009 {"reload", imp_reload, METH_O, doc_reload}, 2979 {"reload", imp_reload, METH_O, doc_reload},
3010 {"source_from_cache", (PyCFunction)imp_source_from_cache,
3011 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
3012 /* The rest are obsolete */
3013 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS}, 2980 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3014 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS}, 2981 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
3015 {"init_builtin", imp_init_builtin, METH_VARARGS}, 2982 {"init_builtin", imp_init_builtin, METH_VARARGS},
3016 {"init_frozen", imp_init_frozen, METH_VARARGS}, 2983 {"init_frozen", imp_init_frozen, METH_VARARGS},
3017 {"is_builtin", imp_is_builtin, METH_VARARGS}, 2984 {"is_builtin", imp_is_builtin, METH_VARARGS},