[Python-Dev] Zipping Zope3
Just van Rossum
just@letterror.com
Tue, 17 Dec 2002 20:54:05 +0100
Wiktor Sadowski wrote:
> [Guido van Rossum]
> >The problem is that Zope3 needs *some* way of storing data and config
> >files related to specific packages, and there isn't really any other
> >convenient and conventional way except storing it in a package
> >directory and using the package's __file__ to find it.
>
> __importer__ , the zip specific alternative to __file__ could be
> provided to solve the problem.
Hm, I like this!
> in an __init__.py:
>
> if __file__:
> ............................
> elif __importer__:
> f=___importer__.open()#to speedup and to get direct access to
the binary
> #without ___importer__.open() should work as well
> data1=___importer__.get_data("ModuleName\\index.html")
> data2=___importer__.get_data("ModuleName\\help.html")
> if data1:
> ..........
> f.close()
Or:
try:
__importer__
except NameError:
<deal with __file__>
else:
x = __importer__.get_data(...)
> It would require some minor changes to Just's zipimport.c
> + new function in import.c
> PyImport_ExecCodeModuleEx2(char *name, PyObject *co, char
*pathname,PyObject *importer)
> where instead of setting __file__:
> if (PyDict_SetItemString(d, "__importer__", importer) != 0)
> .........................................................
I'd say it should set __importer__ in *addition* to __file__.
> As for zipimport.c:
> new methods:
> open() for speedup :
> .........
> char* fname=PyString_AsString(self->archive);
> self->arcfile=PyFile_FromString(fname,"rb");
> .......
> return self->arcfile; #PyObject*arcfile new field(zipimporter struct)
> ...................................................................
> get_data(data_path)#modified load_module
> ...................................................................
> in load_module:
> mod = PyImport_ExecCodeModuleEx2(fullname, code, modpath,self);
> instead of
> mod = PyImport_ExecCodeModuleEx(fullname, code, modpath);
>
> Tested;)
Ugh, you should really consider getting a decent diff tool :-/ How can
*I* test if if I have no clue what exactly you've done?
I can see that keeping the file object open could speed things up, but
is it a polite & decent thing to do?
Just