On Jan 29, 2:36 pm, Steve Holden <[EMAIL PROTECTED]> wrote: > [EMAIL PROTECTED] wrote: > > I need to extend the import mechanism to support another file type. > > I've already written the necessary C library to read the file and > > return a python code object. > > > I found one example which just sub-classed imputil.ImportManager like > > this: > > > from myLib import pye_code as pye_code > > class MyImporter(imputil.ImportManager): > > def __init__(self): > > imputil.ImportManager.__init__(self) > > self.add_suffix('.pye', self.import_pye) > > self.install() > > > def import_pye(self, filepath, fileinfo, filename): > > data = pye_code(filepath) > > return 0, data, {} > > > This actually works fine if the module is just a few lines of code, > > but it won't chain to the "built-in" importers; if the module that I'm > > importing does something as simple as 'import re', it fails. > > > It may be that my confusion here is because (even after reading the > > code), I'm not clear on the purposes of imputil.ImportManager vs. > > imputil.Importer :-( > > > What is the "preferred" way to do this type of extension? One other > > note; at this time, I just need to import individual module files with > > this extension; I don't need to import packages. > > Here's an importer I wrote some time ago to bring modules in from a > relational database. I won't trouble you with the code to compile the > modules/packages and add them into the database, but perhaps the > attached code will be enough to show you what you are doing that's not > working. > > regards > Steve > -- > Steve Holden +1 571 484 6266 +1 800 494 3119 > Holden Web LLC http://www.holdenweb.com/ > > [dbimp.py]# > # Import modules from a database > # > # NOTE: could use sys version info to select appropriate module version > # - could ask whether to install if absent ... heh, heh :-) > # > import sys, db, marshal > VER = sys.hexversion -----------------------------------> > def install(): > sys.path_hooks.append(dbimporter) > sys.path_importer_cache.clear() # probably not necessary > sys.path.insert(0, "*db*") # probably not needed with a metea-path hook?
Steve - Thanks! Got this to work with one interesting problem . . . if I use sys.path.insert(0....) and insert my hook at the head of the path, then I can't import anything EXCEPT my special modules . . . If I use sys.path.append("*pye*") then I'm OK. One thing I changed was that my load_module function raises ImportError if it fails; my understanding from reading PEP302 is that that's what's SUPPOSED to happen . . . At any rate, I can now import my custom modules . . . thanks! Dan -- http://mail.python.org/mailman/listinfo/python-list