This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description
DESCRIPTION: ast2src - reverse compile ast tree back to legal python source code

REQUIRES: LINUX OS AND PYTHON3.1

QUICK TEST: $ python3.1 setup.py build dev --quicktest

SUMMARY:
ast2src is a pure python module.
ast2src is a python ast tree hack.

RECENT CHANGELOG:
20100121 - added ast2src
20091231 - added <<<< and >>>> sugar
20091224 - added pseudomethod interactive console - revamped pseudomethod import hook
20091224 - modularized package - fix install issues - added sdist check
20091209 - improved documentation
20091205 - moved source code to c++
20091116 - package integrated

DEMO USAGE:

PseudoSugar - adding hook <ast2src.pseudosugar object="" at="" 0xb7ba856c=""> to sys.meta_path
>>> from ast2src import *

>>> ## let's use ast2src's source code as example
>>> import ast2src, ast
>>> source_code1 = open(ast2src.__file__).read()
>>> print( '\n' + re.sub('\n+', '\n', source_code1[:1024]) + '...' )

## import ast2src; reload(ast2src); from ast2src import *
import os, sys
if os.name != 'posix': sys.stderr.write('\nast2src requires linux os\n\n'); exit()
if sys.version_info[:2] != (3, 1): sys.stderr.write('\nast2src requires python3.1\n\n'); exit()
if 1: ###### INIT
import ast2src as _MODULE
if '_SETUP' not in globals(): _SETUP = sys.modules.get('ast2src.setup', None)
def closure(*args, **kwds): return lambda fnc: fnc(*args, **kwds)
def identity(aa): return aa
def _import(ss, globals = globals()):
for aa in ss.split(' '): globals[aa] = __import__(aa)
return identity
class Namespace(object):
def __init__(self, **kwds): vars(self).update(kwds)
@_import('ast builtins collections re ' #### pseudosugar compiler
'imp importlib importlib.abc importlib.util ' #### import hook
'locale') ## PYTHON BUG
class PseudoSugar(ast.NodeVisitor, importlib.abc.Finder, importlib.abc.PyLoader):
## convenience function
@staticmethod
def exec(ss, globa...

>>> ## compile source to ast
>>> ast_tree1 = compile(source_code1, '', 'exec', ast.PyCF_ONLY_AST)
>>> print( Ast2Src.debugnode(ast_tree1)[:1024], '...' )
<class '_ast.module'=""> body [<_ast.Import object at 0x9c6ea2c>, <_ast.If object at 0x9c6e7cc>, <_ast.If object at 0x9ab2b0c>, <_ast.If object at 0x9ab2fec>]
<class '_ast.import'=""> col_offset 0 lineno 2 names [<_ast.alias object at 0x9c6e2ec>, <_ast.alias object at 0x9c6e9ac>]
<class '_ast.alias'=""> asname None name 'os'
<class '_ast.alias'=""> asname None name 'sys'
<class '_ast.if'=""> body [<_ast.Expr object at 0x9ccc92c>, <_ast.Expr object at 0x9ab2acc>] col_offset 0 lineno 3 orelse [] test <_ast.Compare object at 0x9c6eccc>
<class '_ast.compare'=""> col_offset 3 comparators [<_ast.Str object at 0x9ccc9ec>] left <_ast.Attribute object at 0x9c948cc> lineno 3 ops [<_ast.NotEq object at 0xb7b3682c>]
<class '_ast.attribute'=""> attr 'name' col_offset 3 ctx <_ast.Load object at 0xb7bb2ccc> lineno 3 value <_ast.Name object at 0x9ccc46c>
<class '_ast.name'=""> col_offset 3 ctx <_ast.Load object at 0xb7bb2ccc> id 'os' lineno 3
<class '_ast.load'="">
<class '_ast.load'="">
<class '_ast.noteq'="">
<class '_ast.="" ...<br="">
>>> ## reverse compile ast back to source
>>> source_code2 = Ast2Src.unparse(ast_tree1)
>>> print( '\n' + re.sub('\n+', '\n', source_code1[:1024]) + '...' )

## import ast2src; reload(ast2src); from ast2src import *
import os, sys
if os.name != 'posix': sys.stderr.write('\nast2src requires linux os\n\n'); exit()
if sys.version_info[:2] != (3, 1): sys.stderr.write('\nast2src requires python3.1\n\n'); exit()
if 1: ###### INIT
import ast2src as _MODULE
if '_SETUP' not in globals(): _SETUP = sys.modules.get('ast2src.setup', None)
def closure(*args, **kwds): return lambda fnc: fnc(*args, **kwds)
def identity(aa): return aa
def _import(ss, globals = globals()):
for aa in ss.split(' '): globals[aa] = __import__(aa)
return identity
class Namespace(object):
def __init__(self, **kwds): vars(self).update(kwds)
@_import('ast builtins collections re ' #### pseudosugar compiler
'imp importlib importlib.abc importlib.util ' #### import hook
'locale') ## PYTHON BUG
class PseudoSugar(ast.NodeVisitor, importlib.abc.Finder, importlib.abc.PyLoader):
## convenience function
@staticmethod
def exec(ss, globa...

>>> ## recompile reverse-compiled source
>>> ast_tree2 = compile(source_code2, '', 'exec', ast.PyCF_ONLY_AST)
>>> print( Ast2Src.debugnode(ast_tree2)[:1024], '...' )
<class '_ast.module'=""> body [<_ast.Import object at 0x9ad7ecc>, <_ast.If object at 0x9b3316c>, <_ast.If object at 0x9b3abcc>, <_ast.If object at 0x9b3ae6c>]
<class '_ast.import'=""> col_offset 0 lineno 2 names [<_ast.alias object at 0x9c2966c>, <_ast.alias object at 0x9c022ec>]
<class '_ast.alias'=""> asname None name 'os'
<class '_ast.alias'=""> asname None name 'sys'
<class '_ast.if'=""> body [<_ast.Expr object at 0x9b3aaac>, <_ast.Expr object at 0x9b3ab6c>] col_offset 0 lineno 3 orelse [] test <_ast.Compare object at 0x9b332ac>
<class '_ast.compare'=""> col_offset 4 comparators [<_ast.Str object at 0x9b3a80c>] left <_ast.Attribute object at 0x9b3490c> lineno 3 ops [<_ast.NotEq object at 0xb7b3682c>]
<class '_ast.attribute'=""> attr 'name' col_offset 4 ctx <_ast.Load object at 0xb7bb2ccc> lineno 3 value <_ast.Name object at 0x9b3a10c>
<class '_ast.name'=""> col_offset 4 ctx <_ast.Load object at 0xb7bb2ccc> id 'os' lineno 3
<class '_ast.load'="">
<class '_ast.load'="">
<class '_ast.noteq'="">
Release History

Release History

2010.01.21.ast2src

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
ast2src-2010.01.21.ast2src.tar.gz (93.5 kB) Copy SHA256 Checksum SHA256 Source Jan 23, 2010

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting