Re: retrieve source code from code object as returned by compile()

2014-04-25 Thread Amirouche Boubekki
in python3, I do inspect.getsource(object)
[dochttps://docs.python.org/3/library/inspect.html#inspect.getsource],
I don't know the limitations.

On Python 2, there is meta https://pypi.python.org/pypi/meta.

My interest is different, I use to retrieve the definition of function to
submit it to a database, instead of stored procedures, but I have the
source of the code. It can also be used to retrieve the ast.


2014-04-25 4:50 GMT+02:00 Justin Ezequiel justin.ezequ...@gmail.com:

 On Thursday, April 24, 2014 1:53:38 PM UTC+8, Gregory Ewing wrote:
  Alternatively you could create a .pyc file out of the code
  object and then use Easy Python Decompiler on that. The
  following snippet of code should do that:
 
  (Taken from:
 
  http://stackoverflow.com/questions/8627835/generate-pyc-from-python-ast)

 Woohoo! Success! Thank you Greg!
 --
 https://mail.python.org/mailman/listinfo/python-list

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: retrieve source code from code object as returned by compile()

2014-04-25 Thread Gregory Ewing

Amirouche Boubekki wrote:
in python3, I do inspect.getsource(object) [doc 
https://docs.python.org/3/library/inspect.html#inspect.getsource], I 
don't know the limitations.


The limitation relevant here is that it requires the
original source file to be present. :-)

--
Greg
--
https://mail.python.org/mailman/listinfo/python-list


Re: retrieve source code from code object as returned by compile()

2014-04-24 Thread Justin Ezequiel
On Thursday, April 24, 2014 1:53:38 PM UTC+8, Gregory Ewing wrote:
 Alternatively you could create a .pyc file out of the code
 object and then use Easy Python Decompiler on that. The
 following snippet of code should do that:
 
 (Taken from: 
 
 http://stackoverflow.com/questions/8627835/generate-pyc-from-python-ast)

Woohoo! Success! Thank you Greg!
-- 
https://mail.python.org/mailman/listinfo/python-list


retrieve source code from code object as returned by compile()

2014-04-23 Thread Justin Ezequiel
Is there a way to get the original source?
I am trying to retrieve the main script from a py2exe'd old program.
The programmer neglected to commit to SVN before leaving.

Using Easy Python Decompiler I am able to get the source for the imported 
modules.
Using Resources Viewer from PlexData and some code I am able to retrieve the 
code object. I am however stumped as to how to retrieve the source from this 
code object. 

PythonWin 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] 
on win32.
Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for 
further copyright information.
 s = 'import time\nprint time.time()\n'
 c = compile(s, 'foo.py', 'exec')
 exec(c)
1398299623.77
 c
code object module at 01E5C5C0, file foo.py, line 1
 for n in dir(c):
... if n.startswith('_'): continue
... print n
... a = getattr(c, n)
... print type(a)
... print `a`
... print
... 
co_argcount
type 'int'
0

co_cellvars
type 'tuple'
()

co_code
type 'str'
'd\x00\x00d\x01\x00k\x00\x00Z\x00\x00e\x00\x00i\x00\x00\x83\x00\x00GHd\x01\x00S'

co_consts
type 'tuple'
(-1, None)

co_filename
type 'str'
'foo.py'

co_firstlineno
type 'int'
1

co_flags
type 'int'
64

co_freevars
type 'tuple'
()

co_lnotab
type 'str'
'\x0c\x01'

co_name
type 'str'
'module'

co_names
type 'tuple'
('time',)

co_nlocals
type 'int'
0

co_stacksize
type 'int'
2

co_varnames
type 'tuple'
()
 len(s)
30
 len(c.co_code)
27
 
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: retrieve source code from code object as returned by compile()

2014-04-23 Thread Gregory Ewing

Justin Ezequiel wrote:

Using Easy Python Decompiler I am able to get the source for the imported
modules. Using Resources Viewer from PlexData and some code I am able to
retrieve the code object. I am however stumped as to how to retrieve the
source from this code object.


Easy Python Decompiler should be able to do that, but you
may need to delve into its innards a bit to find an entry
point where you can feed in a code object.

Alternatively you could create a .pyc file out of the code
object and then use Easy Python Decompiler on that. The
following snippet of code should do that:

import marshal
import py_compile
import time

with open('output.pyc', 'wb') as fc:
fc.write('\0\0\0\0')
py_compile.wr_long(fc, long(time.time()))
marshal.dump(codeobject, fc)
fc.flush()
fc.seek(0, 0)
fc.write(py_compile.MAGIC)

(Taken from: 
http://stackoverflow.com/questions/8627835/generate-pyc-from-python-ast)


--
Greg
--
https://mail.python.org/mailman/listinfo/python-list