# HG changeset patch -- Bitbucket.org
# Project py-trunk
# URL http://bitbucket.org/hpk42/py-trunk/overview
# User Benjamin Peterson <benja...@python.org>
# Date 1272073180 18000
# Node ID 7fa0f8cbb3c754d43937d176e3a2f1b64e4b0d92
# Parent  ee52e1cb604f03bba06bcdd137f458b01dba3532
add a helper to get a function's code

--- a/py/_builtin.py
+++ b/py/_builtin.py
@@ -111,6 +111,9 @@ if sys.version_info >= (3, 0):
     def _getfuncdict(function):
         return getattr(function, "__dict__", None)
 
+    def _getcode(function):
+        return getattr(function, "__code__", None)
+
     def execfile(fn, globs=None, locs=None):
         if globs is None:
             back = sys._getframe(1)
@@ -147,6 +150,9 @@ else:
     def _getfuncdict(function):
         return getattr(function, "__dict__", None)
 
+    def _getcode(function):
+        return getattr(function, "func_code", None)
+
     def print_(*args, **kwargs):
         """ minimal backport of py3k print statement. """ 
         sep = ' '

--- a/testing/root/test_builtin.py
+++ b/testing/root/test_builtin.py
@@ -1,4 +1,5 @@
 import sys
+import types
 import py
 from py.builtin import set, frozenset, reversed, sorted
 
@@ -146,3 +147,8 @@ def test_tryimport():
     assert x == py
     x = py.builtin._tryimport('asldkajsdl', 'py.path')
     assert x == py.path
+
+def test_getcode():
+    code = py.builtin._getcode(test_getcode)
+    assert isinstance(code, types.CodeType)
+    assert py.builtin._getcode(4) is None

--- a/py/__init__.py
+++ b/py/__init__.py
@@ -125,6 +125,7 @@ py.apipkg.initpkg(__name__, dict(
         '_istext'        : '._builtin:_istext',
         '_getimself'     : '._builtin:_getimself',
         '_getfuncdict'   : '._builtin:_getfuncdict',
+        '_getcode'       : '._builtin:_getcode',
         'builtins'       : '._builtin:builtins',
         'execfile'       : '._builtin:execfile',
         'callable'       : '._builtin:callable',
_______________________________________________
py-svn mailing list
py-svn@codespeak.net
http://codespeak.net/mailman/listinfo/py-svn

Reply via email to