SF.net SVN: jython:[7255] trunk/jython/Lib/pkgutil.py

[email protected] Mon, 21 Mar 2011 05:36:00 +0000
Newsgroups gmane.comp.lang.jython.cvs
Message-ID <[email protected]>
Revision: 7255
          http://jython.svn.sourceforge.net/jython/?rev=7255&view=rev
Author:   pjenvey
Date:     2011-03-21 05:36:00 +0000 (Mon, 21 Mar 2011)

Log Message:
-----------
update pkgutil to 2.6

Modified Paths:
--------------
    trunk/jython/Lib/pkgutil.py

Modified: trunk/jython/Lib/pkgutil.py
===================================================================
--- trunk/jython/Lib/pkgutil.py	2011-03-21 05:01:00 UTC (rev 7254)
+++ trunk/jython/Lib/pkgutil.py	2011-03-21 05:36:00 UTC (rev 7255)
@@ -554,3 +554,40 @@
                     f.close()
 
     return path
+
+def get_data(package, resource):
+    """Get a resource from a package.
+
+    This is a wrapper round the PEP 302 loader get_data API. The package
+    argument should be the name of a package, in standard module format
+    (foo.bar). The resource argument should be in the form of a relative
+    filename, using '/' as the path separator. The parent directory name '..'
+    is not allowed, and nor is a rooted name (starting with a '/').
+
+    The function returns a binary string, which is the contents of the
+    specified resource.
+
+    For packages located in the filesystem, which have already been imported,
+    this is the rough equivalent of
+
+        d = os.path.dirname(sys.modules[package].__file__)
+        data = open(os.path.join(d, resource), 'rb').read()
+
+    If the package cannot be located or loaded, or it uses a PEP 302 loader
+    which does not support get_data(), then None is returned.
+    """
+
+    loader = get_loader(package)
+    if loader is None or not hasattr(loader, 'get_data'):
+        return None
+    mod = sys.modules.get(package) or loader.load_module(package)
+    if mod is None or not hasattr(mod, '__file__'):
+        return None
+
+    # Modify the resource name to be compatible with the loader.get_data
+    # signature - an os.path format "filename" starting with the dirname of
+    # the package's __file__
+    parts = resource.split('/')
+    parts.insert(0, os.path.dirname(mod.__file__))
+    resource_name = os.path.join(*parts)
+    return loader.get_data(resource_name)


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d