diff --git a/README.rst b/README.rst index a123004..2ea4090 100644 --- a/README.rst +++ b/README.rst @@ -1,9 +1,13 @@ -astviewer -========= +AstToolBox +========== -Python Abstract Syntax Tree Tool built on PySide -It can show a GUI tree representation of an AST. Any tree or node can be -used to produce a new tree by the application of ast.NodeTransformer +The AstToolBox allows a developer to start from a python source file and +see how a series of ast.NodeTransformers change it, and how a CodeGenerator +will render the AST at any given point. + +Files and transforms can be reloaded at any time which facilitates development. +If a tree does not look right after some transformation, the transform can be +edited and reloaded and reapplied. This tool was derived from `AstViewer `_ @@ -13,7 +17,7 @@ Usage: ====== * Command line example: - %> pyastviewer myprog.py + %> ast_tool_box myprog.py * Examples to use from within Python: @@ -35,5 +39,5 @@ Installation: 2. Run the installer: - %> sudo python setup.py install + %> python setup.py install diff --git a/ast_tool_box b/ast_tool_box index 3162e26..531b0db 100755 --- a/ast_tool_box +++ b/ast_tool_box @@ -19,6 +19,7 @@ logger = logging.getLogger(__name__) def main(): """ Main program to test stand alone """ + sys.argv[0] = "AstToolBox" app = QtGui.QApplication(sys.argv) # to allow for Qt command line arguments remaining_argv = app.arguments() diff --git a/ast_viewer/ast_tool_box.py b/ast_viewer/ast_tool_box.py index 226380a..2530cb2 100644 --- a/ast_viewer/ast_tool_box.py +++ b/ast_viewer/ast_tool_box.py @@ -20,7 +20,7 @@ DEBUGGING = False -PROGRAM_NAME = 'AST Toolkit' +PROGRAM_NAME = 'AstToolBox' PROGRAM_VERSION = '1.0.0' ABOUT_MESSAGE = u""" %(prog)s version %(version)s @@ -48,7 +48,9 @@ def get_qapplication_instance(): """ app = QtGui.QApplication.instance() if app is None: - app = QtGui.QApplication(sys.argv) + # sys.argv[0] = PROGRAM_NAME + print("here I am") + app = QtGui.QApplication(sys.argv[1:]) app.setStyle(QtGui.QMacStyle) QtGui.QApplication.setStyle(QtGui.QMacStyle()) check_class(app, QtGui.QApplication) @@ -186,10 +188,6 @@ def _setup_menu(self): #file_menu.addAction("C&lose", self.close_window, "Ctrl+W") file_menu.addAction("E&xit", AstToolBox.quit_application, "Ctrl+Q") - if DEBUGGING is True: - file_menu.addSeparator() - file_menu.addAction("&Test", self.my_test, "Ctrl+T") - view_menu = self.menuBar().addMenu("&View") self.auto_expand_ast = QtGui.QAction("Expand AST trees on create", self, checkable=True, checked=True) @@ -206,24 +204,25 @@ def new_file(self): """ Clears the widgets """ self.ast_tree.make_tree_from() - def open_file(self, file_name=None): """ Opens a new file. Show the open file dialog if file_name is None. """ if not file_name: file_name = self._get_file_name_from_dialog() - self._update_widgets(file_name) - + self.code_presenter.new_file(file_name) def _get_file_name_from_dialog(self): """ Opens a file dialog and returns the file name selected by the user """ - file_name, _ = QtGui.QFileDialog.getOpenFileName(self, "Open File", - '', "Python Files (*.py);;All Files (*)") + file_name, _ = QtGui.QFileDialog.getOpenFileName( + self, + "Open File", + '', + "Python Files (*.py);;All Files (*)" + ) return file_name - def _update_widgets(self, file_name): """ Reads source from a file and updates the tree and editor widgets.. """ diff --git a/ast_viewer/controllers/code_presenter.py b/ast_viewer/controllers/code_presenter.py index 3d068c7..80da8fb 100644 --- a/ast_viewer/controllers/code_presenter.py +++ b/ast_viewer/controllers/code_presenter.py @@ -19,12 +19,17 @@ def __init__(self, tree_transform_controller=None): self.code_pane = CodePane(code_presenter=self) + def new_file(self, file_name): + self.clear() + self.new_item_from_file(file_name) + def set_transform_presenter(self, transform_presenter): assert isinstance(transform_presenter, transform_controllers.TransformPresenter) self.transform_presenter = transform_presenter def clear(self): - self.code_items = [] + while len(self.code_items) > 0: + self.delete_last_item() self.code_pane.clear() def delete_last(self): diff --git a/ast_viewer/views/code_views/code_pane.py b/ast_viewer/views/code_views/code_pane.py index bc2269a..cba1539 100644 --- a/ast_viewer/views/code_views/code_pane.py +++ b/ast_viewer/views/code_views/code_pane.py @@ -103,7 +103,7 @@ def expand_all_asts(self): pass def clear(self): - for index in range(self.code_splitter.count()-1, 0, -1): + for index in range(self.code_splitter.count()-1, -1, -1): self.tab_bar.removeTab(index) self.code_splitter.widget(index).deleteLater() diff --git a/ast_viewer/views/transform_views/transform_pane.py b/ast_viewer/views/transform_views/transform_pane.py index 1f4eb99..a1faeb9 100644 --- a/ast_viewer/views/transform_views/transform_pane.py +++ b/ast_viewer/views/transform_views/transform_pane.py @@ -84,7 +84,7 @@ def load(self): self, caption="Select a file containing Node Transformers", dir=self.last_used_directory, - # filter="Python Files (*.py);;All Files (*);;" + filter="Python Files (*.py);;All Files (*);;" ) if file_name: settings = QtCore.QSettings() diff --git a/screen_shot.png b/screen_shot.png index 799a8c0..934f771 100644 Binary files a/screen_shot.png and b/screen_shot.png differ