diff options
Diffstat (limited to 'Modules')
| -rw-r--r-- | Modules/clinic/zipimport.c.h | 33 | ||||
| -rw-r--r-- | Modules/zipimport.c | 30 |
2 files changed, 62 insertions, 1 deletions
diff --git a/Modules/clinic/zipimport.c.h b/Modules/clinic/zipimport.c.h index 548aade..565b065 100644 --- a/Modules/clinic/zipimport.c.h +++ b/Modules/clinic/zipimport.c.h @@ -291,4 +291,35 @@ zipimport_zipimporter_get_source(ZipImporter *self, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=93cb62a3a9752b9f input=a9049054013a1b77]*/ + +PyDoc_STRVAR(zipimport_zipimporter_get_resource_reader__doc__, +"get_resource_reader($self, fullname, /)\n" +"--\n" +"\n" +"Return the ResourceReader for a package in a zip file.\n" +"\n" +"If \'fullname\' is a package within the zip file, return the \'ResourceReader\'\n" +"object for the package. Otherwise return None."); + +#define ZIPIMPORT_ZIPIMPORTER_GET_RESOURCE_READER_METHODDEF \ + {"get_resource_reader", (PyCFunction)zipimport_zipimporter_get_resource_reader, METH_O, zipimport_zipimporter_get_resource_reader__doc__}, + +static PyObject * +zipimport_zipimporter_get_resource_reader_impl(ZipImporter *self, + PyObject *fullname); + +static PyObject * +zipimport_zipimporter_get_resource_reader(ZipImporter *self, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *fullname; + + if (!PyArg_Parse(arg, "U:get_resource_reader", &fullname)) { + goto exit; + } + return_value = zipimport_zipimporter_get_resource_reader_impl(self, fullname); + +exit: + return return_value; +} +/*[clinic end generated code: output=0b57adfe21373512 input=a9049054013a1b77]*/ diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 1d0e0ba..8501366 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -784,6 +784,35 @@ zipimport_zipimporter_get_source_impl(ZipImporter *self, PyObject *fullname) Py_RETURN_NONE; } +/*[clinic input] +zipimport.zipimporter.get_resource_reader + + fullname: unicode + / + +Return the ResourceReader for a package in a zip file. + +If 'fullname' is a package within the zip file, return the 'ResourceReader' +object for the package. Otherwise return None. + +[clinic start generated code]*/ + +static PyObject * +zipimport_zipimporter_get_resource_reader_impl(ZipImporter *self, + PyObject *fullname) +/*[clinic end generated code: output=5e367d431f830726 input=bfab94d736e99151]*/ +{ + PyObject *module = PyImport_ImportModule("importlib.resources"); + if (module == NULL) { + return NULL; + } + PyObject *retval = PyObject_CallMethod( + module, "_zipimport_get_resource_reader", + "OO", (PyObject *)self, fullname); + Py_DECREF(module); + return retval; +} + static PyMethodDef zipimporter_methods[] = { ZIPIMPORT_ZIPIMPORTER_FIND_MODULE_METHODDEF @@ -794,6 +823,7 @@ static PyMethodDef zipimporter_methods[] = { ZIPIMPORT_ZIPIMPORTER_GET_DATA_METHODDEF ZIPIMPORT_ZIPIMPORTER_GET_CODE_METHODDEF ZIPIMPORT_ZIPIMPORTER_GET_SOURCE_METHODDEF + ZIPIMPORT_ZIPIMPORTER_GET_RESOURCE_READER_METHODDEF {NULL, NULL} /* sentinel */ }; |
