| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  |     ast | 
					
						
							|  |  |  |     ~~~ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The `ast` module helps Python applications to process trees of the Python | 
					
						
							|  |  |  |     abstract syntax grammar.  The abstract syntax itself might change with | 
					
						
							|  |  |  |     each Python release; this module helps to find out programmatically what | 
					
						
							|  |  |  |     the current grammar looks like and allows modifications of it. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     An abstract syntax tree can be generated by passing `ast.PyCF_ONLY_AST` as | 
					
						
							|  |  |  |     a flag to the `compile()` builtin function or by using the `parse()` | 
					
						
							|  |  |  |     function from this module.  The result will be a tree of objects whose | 
					
						
							|  |  |  |     classes all inherit from `ast.AST`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     A modified abstract syntax tree can be compiled into a Python code object | 
					
						
							|  |  |  |     using the built-in `compile()` function. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Additionally various helper functions are provided that make working with | 
					
						
							|  |  |  |     the trees simpler.  The main intention of the helper functions and this | 
					
						
							|  |  |  |     module in general is to provide an easy to use interface for libraries | 
					
						
							|  |  |  |     that work tightly with the python syntax (template engines for example). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :copyright: Copyright 2008 by Armin Ronacher. | 
					
						
							|  |  |  |     :license: Python License. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | from _ast import * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-24 21:36:03 +00:00
										 |  |  | def parse(source, filename='<unknown>', mode='exec'): | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2011-01-24 21:36:03 +00:00
										 |  |  |     Parse the source into an AST node. | 
					
						
							|  |  |  |     Equivalent to compile(source, filename, mode, PyCF_ONLY_AST). | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2011-01-24 21:36:03 +00:00
										 |  |  |     return compile(source, filename, mode, PyCF_ONLY_AST) | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def literal_eval(node_or_string): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Safely evaluate an expression node or a string containing a Python | 
					
						
							|  |  |  |     expression.  The string or node provided may only consist of the following | 
					
						
							| 
									
										
										
										
											2011-04-17 19:10:27 +02:00
										 |  |  |     Python literal structures: strings, bytes, numbers, tuples, lists, dicts, | 
					
						
							|  |  |  |     sets, booleans, and None. | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     if isinstance(node_or_string, str): | 
					
						
							|  |  |  |         node_or_string = parse(node_or_string, mode='eval') | 
					
						
							|  |  |  |     if isinstance(node_or_string, Expression): | 
					
						
							|  |  |  |         node_or_string = node_or_string.body | 
					
						
							| 
									
										
										
										
											2018-01-04 11:15:39 +02:00
										 |  |  |     def _convert_num(node): | 
					
						
							|  |  |  |         if isinstance(node, Constant): | 
					
						
							| 
									
										
										
										
											2018-09-27 17:42:37 +03:00
										 |  |  |             if type(node.value) in (int, float, complex): | 
					
						
							| 
									
										
										
										
											2018-01-04 11:15:39 +02:00
										 |  |  |                 return node.value | 
					
						
							|  |  |  |         raise ValueError('malformed node or string: ' + repr(node)) | 
					
						
							|  |  |  |     def _convert_signed_num(node): | 
					
						
							|  |  |  |         if isinstance(node, UnaryOp) and isinstance(node.op, (UAdd, USub)): | 
					
						
							|  |  |  |             operand = _convert_num(node.operand) | 
					
						
							|  |  |  |             if isinstance(node.op, UAdd): | 
					
						
							|  |  |  |                 return + operand | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 return - operand | 
					
						
							|  |  |  |         return _convert_num(node) | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |     def _convert(node): | 
					
						
							| 
									
										
										
										
											2016-01-26 00:40:57 +01:00
										 |  |  |         if isinstance(node, Constant): | 
					
						
							|  |  |  |             return node.value | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |         elif isinstance(node, Tuple): | 
					
						
							|  |  |  |             return tuple(map(_convert, node.elts)) | 
					
						
							|  |  |  |         elif isinstance(node, List): | 
					
						
							|  |  |  |             return list(map(_convert, node.elts)) | 
					
						
							| 
									
										
										
										
											2010-07-11 09:41:21 +00:00
										 |  |  |         elif isinstance(node, Set): | 
					
						
							|  |  |  |             return set(map(_convert, node.elts)) | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |         elif isinstance(node, Dict): | 
					
						
							| 
									
										
										
										
											2018-01-04 11:15:39 +02:00
										 |  |  |             return dict(zip(map(_convert, node.keys), | 
					
						
							|  |  |  |                             map(_convert, node.values))) | 
					
						
							| 
									
										
										
										
											2016-01-26 00:40:57 +01:00
										 |  |  |         elif isinstance(node, BinOp) and isinstance(node.op, (Add, Sub)): | 
					
						
							| 
									
										
										
										
											2018-01-04 11:15:39 +02:00
										 |  |  |             left = _convert_signed_num(node.left) | 
					
						
							|  |  |  |             right = _convert_num(node.right) | 
					
						
							|  |  |  |             if isinstance(left, (int, float)) and isinstance(right, complex): | 
					
						
							| 
									
										
										
										
											2016-01-26 00:40:57 +01:00
										 |  |  |                 if isinstance(node.op, Add): | 
					
						
							|  |  |  |                     return left + right | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     return left - right | 
					
						
							| 
									
										
										
										
											2018-01-04 11:15:39 +02:00
										 |  |  |         return _convert_signed_num(node) | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |     return _convert(node_or_string) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def dump(node, annotate_fields=True, include_attributes=False): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Return a formatted dump of the tree in *node*.  This is mainly useful for | 
					
						
							|  |  |  |     debugging purposes.  The returned string will show the names and the values | 
					
						
							|  |  |  |     for fields.  This makes the code impossible to evaluate, so if evaluation is | 
					
						
							|  |  |  |     wanted *annotate_fields* must be set to False.  Attributes such as line | 
					
						
							| 
									
										
											  
											
												Merged revisions 64434-64435,64440-64443,64445,64447-64448,64450,64452,64455,64461,64464,64466,64468 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r64434 | andrew.kuchling | 2008-06-20 18:13:58 -0500 (Fri, 20 Jun 2008) | 1 line
  Remove request for e-mail; it's unlikely these classes will be saved
........
  r64435 | andrew.kuchling | 2008-06-20 18:14:32 -0500 (Fri, 20 Jun 2008) | 1 line
  Grammar fixes
........
  r64440 | andrew.kuchling | 2008-06-21 08:29:12 -0500 (Sat, 21 Jun 2008) | 1 line
  Docstring typo
........
  r64441 | andrew.kuchling | 2008-06-21 08:47:20 -0500 (Sat, 21 Jun 2008) | 1 line
  Use repr() for bad input strings; this makes the empty string or binary characters more visible
........
  r64442 | andrew.kuchling | 2008-06-21 08:48:38 -0500 (Sat, 21 Jun 2008) | 1 line
  Docstring correction
........
  r64443 | georg.brandl | 2008-06-21 09:26:19 -0500 (Sat, 21 Jun 2008) | 2 lines
  Documentation fix.
........
  r64445 | facundo.batista | 2008-06-21 12:30:06 -0500 (Sat, 21 Jun 2008) | 3 lines
  Reviewed and updated the documentation. Fixes #3017.
........
  r64447 | facundo.batista | 2008-06-21 13:58:04 -0500 (Sat, 21 Jun 2008) | 6 lines
  Now a from submitted via POST that also has a query string
  will contain both FieldStorage and MiniFieldStorage items.
  Fixes #1817.
........
  r64448 | facundo.batista | 2008-06-21 14:48:19 -0500 (Sat, 21 Jun 2008) | 5 lines
  In the deprecated functions I added an alert to review
  specially a section of the subprocess documentation
  that helps with the replacing of those functionss.
........
  r64450 | georg.brandl | 2008-06-22 04:05:29 -0500 (Sun, 22 Jun 2008) | 2 lines
  Turn section references into proper cross-references.
........
  r64452 | facundo.batista | 2008-06-22 08:36:20 -0500 (Sun, 22 Jun 2008) | 5 lines
  Issue #2722. Now the char buffer to support the path string has
  not fixed length, it mallocs memory if needed. As a result, we
  don't have a maximum for the getcwd() method.
........
  r64455 | facundo.batista | 2008-06-22 10:27:10 -0500 (Sun, 22 Jun 2008) | 4 lines
  Issue 3164. Small fix to don't repeat a comparation
  without necessity.
........
  r64461 | georg.brandl | 2008-06-22 13:11:52 -0500 (Sun, 22 Jun 2008) | 2 lines
  #3085: Fix syntax error.
........
  r64464 | georg.brandl | 2008-06-22 13:31:54 -0500 (Sun, 22 Jun 2008) | 2 lines
  Expand docstrings of sqlite3 functions.
........
  r64466 | georg.brandl | 2008-06-22 14:07:59 -0500 (Sun, 22 Jun 2008) | 2 lines
  Write out "phi" consistently.
........
  r64468 | facundo.batista | 2008-06-22 14:35:24 -0500 (Sun, 22 Jun 2008) | 4 lines
  Just returning nothing instead of rising TestSkipped, because
  it makes the test fail in the trunk.loewis-sun buildbot.
........
											
										 
											2008-07-02 17:30:14 +00:00
										 |  |  |     numbers and column offsets are not dumped by default.  If this is wanted, | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |     *include_attributes* can be set to True. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     def _format(node): | 
					
						
							|  |  |  |         if isinstance(node, AST): | 
					
						
							|  |  |  |             fields = [(a, _format(b)) for a, b in iter_fields(node)] | 
					
						
							|  |  |  |             rv = '%s(%s' % (node.__class__.__name__, ', '.join( | 
					
						
							|  |  |  |                 ('%s=%s' % field for field in fields) | 
					
						
							|  |  |  |                 if annotate_fields else | 
					
						
							|  |  |  |                 (b for a, b in fields) | 
					
						
							|  |  |  |             )) | 
					
						
							|  |  |  |             if include_attributes and node._attributes: | 
					
						
							|  |  |  |                 rv += fields and ', ' or ' ' | 
					
						
							|  |  |  |                 rv += ', '.join('%s=%s' % (a, _format(getattr(node, a))) | 
					
						
							|  |  |  |                                 for a in node._attributes) | 
					
						
							|  |  |  |             return rv + ')' | 
					
						
							|  |  |  |         elif isinstance(node, list): | 
					
						
							|  |  |  |             return '[%s]' % ', '.join(_format(x) for x in node) | 
					
						
							|  |  |  |         return repr(node) | 
					
						
							|  |  |  |     if not isinstance(node, AST): | 
					
						
							|  |  |  |         raise TypeError('expected AST, got %r' % node.__class__.__name__) | 
					
						
							|  |  |  |     return _format(node) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def copy_location(new_node, old_node): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Copy source location (`lineno` and `col_offset` attributes) from | 
					
						
							|  |  |  |     *old_node* to *new_node* if possible, and return *new_node*. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     for attr in 'lineno', 'col_offset': | 
					
						
							|  |  |  |         if attr in old_node._attributes and attr in new_node._attributes \ | 
					
						
							|  |  |  |            and hasattr(old_node, attr): | 
					
						
							|  |  |  |             setattr(new_node, attr, getattr(old_node, attr)) | 
					
						
							|  |  |  |     return new_node | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def fix_missing_locations(node): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     When you compile a node tree with compile(), the compiler expects lineno and | 
					
						
							|  |  |  |     col_offset attributes for every node that supports them.  This is rather | 
					
						
							|  |  |  |     tedious to fill in for generated nodes, so this helper adds these attributes | 
					
						
							|  |  |  |     recursively where not already set, by setting them to the values of the | 
					
						
							|  |  |  |     parent node.  It works recursively starting at *node*. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     def _fix(node, lineno, col_offset): | 
					
						
							|  |  |  |         if 'lineno' in node._attributes: | 
					
						
							|  |  |  |             if not hasattr(node, 'lineno'): | 
					
						
							|  |  |  |                 node.lineno = lineno | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 lineno = node.lineno | 
					
						
							|  |  |  |         if 'col_offset' in node._attributes: | 
					
						
							|  |  |  |             if not hasattr(node, 'col_offset'): | 
					
						
							|  |  |  |                 node.col_offset = col_offset | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 col_offset = node.col_offset | 
					
						
							|  |  |  |         for child in iter_child_nodes(node): | 
					
						
							|  |  |  |             _fix(child, lineno, col_offset) | 
					
						
							|  |  |  |     _fix(node, 1, 0) | 
					
						
							|  |  |  |     return node | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def increment_lineno(node, n=1): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Increment the line number of each node in the tree starting at *node* by *n*. | 
					
						
							|  |  |  |     This is useful to "move code" to a different location in a file. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     for child in walk(node): | 
					
						
							|  |  |  |         if 'lineno' in child._attributes: | 
					
						
							|  |  |  |             child.lineno = getattr(child, 'lineno', 0) + n | 
					
						
							|  |  |  |     return node | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def iter_fields(node): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Yield a tuple of ``(fieldname, value)`` for each field in ``node._fields`` | 
					
						
							|  |  |  |     that is present on *node*. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     for field in node._fields: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             yield field, getattr(node, field) | 
					
						
							|  |  |  |         except AttributeError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def iter_child_nodes(node): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Yield all direct child nodes of *node*, that is, all fields that are nodes | 
					
						
							|  |  |  |     and all items of fields that are lists of nodes. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     for name, field in iter_fields(node): | 
					
						
							|  |  |  |         if isinstance(field, AST): | 
					
						
							|  |  |  |             yield field | 
					
						
							|  |  |  |         elif isinstance(field, list): | 
					
						
							|  |  |  |             for item in field: | 
					
						
							|  |  |  |                 if isinstance(item, AST): | 
					
						
							|  |  |  |                     yield item | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_docstring(node, clean=True): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Return the docstring for the given node or None if no docstring can | 
					
						
							|  |  |  |     be found.  If the node provided does not have docstrings a TypeError | 
					
						
							|  |  |  |     will be raised. | 
					
						
							| 
									
										
										
										
											2017-02-23 22:44:19 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     If *clean* is `True`, all tabs are expanded to spaces and any whitespace | 
					
						
							|  |  |  |     that can be uniformly removed from the second line onwards is removed. | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2015-07-23 08:54:35 +03:00
										 |  |  |     if not isinstance(node, (AsyncFunctionDef, FunctionDef, ClassDef, Module)): | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |         raise TypeError("%r can't have docstrings" % node.__class__.__name__) | 
					
						
							| 
									
										
										
										
											2018-06-15 11:05:15 +03:00
										 |  |  |     if not(node.body and isinstance(node.body[0], Expr)): | 
					
						
							| 
									
										
										
										
											2018-05-29 12:04:55 +03:00
										 |  |  |         return None | 
					
						
							|  |  |  |     node = node.body[0].value | 
					
						
							|  |  |  |     if isinstance(node, Str): | 
					
						
							|  |  |  |         text = node.s | 
					
						
							|  |  |  |     elif isinstance(node, Constant) and isinstance(node.value, str): | 
					
						
							|  |  |  |         text = node.value | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         return None | 
					
						
							| 
									
										
										
										
											2018-06-15 11:05:15 +03:00
										 |  |  |     if clean: | 
					
						
							| 
									
										
										
										
											2016-01-26 00:40:57 +01:00
										 |  |  |         import inspect | 
					
						
							|  |  |  |         text = inspect.cleandoc(text) | 
					
						
							|  |  |  |     return text | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def walk(node): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2011-01-09 07:38:51 +00:00
										 |  |  |     Recursively yield all descendant nodes in the tree starting at *node* | 
					
						
							|  |  |  |     (including *node* itself), in no specified order.  This is useful if you | 
					
						
							|  |  |  |     only want to modify nodes in place and don't care about the context. | 
					
						
							| 
									
										
											  
											
												Merged revisions 63829-63831,63858,63865,63879,63882,63948,63970-63972,63976,63989,64014-64015,64021-64022,64063-64065,64067 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r63829 | mark.summerfield | 2008-05-31 15:05:34 +0200 (Sat, 31 May 2008) | 4 lines
  Added a note to [] that special forms & special chars lose their meaning
  and backrefs can't be used inside []
........
  r63830 | georg.brandl | 2008-05-31 16:40:09 +0200 (Sat, 31 May 2008) | 2 lines
  #3010: clarification about stdin/use_rawinput.
........
  r63831 | georg.brandl | 2008-05-31 16:45:55 +0200 (Sat, 31 May 2008) | 2 lines
  #3005: add explaining sentence to easydialogs docs.
........
  r63858 | georg.brandl | 2008-06-01 18:41:31 +0200 (Sun, 01 Jun 2008) | 2 lines
  Add plain text make target.
........
  r63865 | georg.brandl | 2008-06-01 21:24:36 +0200 (Sun, 01 Jun 2008) | 2 lines
  Spaces vs. tabs.
........
  r63879 | gregory.p.smith | 2008-06-02 00:57:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Make the _H #define's match the header file names.  Fix comments to
  mention the correct type names.
........
  r63882 | gregory.p.smith | 2008-06-02 01:48:47 +0200 (Mon, 02 Jun 2008) | 3 lines
  Adds a Thread.getIdent() method to provide the _get_ident() value for
  any given threading.Thread object.  feature request issue 2871.
........
  r63948 | alexandre.vassalotti | 2008-06-04 22:41:44 +0200 (Wed, 04 Jun 2008) | 2 lines
  Fixed complex.__getnewargs__() to not emit another complex object.
........
  r63970 | andrew.kuchling | 2008-06-06 01:33:54 +0200 (Fri, 06 Jun 2008) | 1 line
  Document 'utc' parameter
........
  r63971 | andrew.kuchling | 2008-06-06 01:35:31 +0200 (Fri, 06 Jun 2008) | 1 line
  Add various items
........
  r63972 | andrew.kuchling | 2008-06-06 01:35:48 +0200 (Fri, 06 Jun 2008) | 1 line
  Grammar fix
........
  r63976 | georg.brandl | 2008-06-06 09:34:50 +0200 (Fri, 06 Jun 2008) | 2 lines
  Markup fix.
........
  r63989 | thomas.heller | 2008-06-06 20:42:11 +0200 (Fri, 06 Jun 2008) | 2 lines
  Add a reminder for the maintainer of whatsnew.
........
  r64014 | georg.brandl | 2008-06-07 17:59:10 +0200 (Sat, 07 Jun 2008) | 3 lines
  Factor out docstring dedenting from inspect.getdoc() into inspect.cleandoc()
  to ease standalone use of the algorithm.
........
  r64015 | georg.brandl | 2008-06-07 18:04:01 +0200 (Sat, 07 Jun 2008) | 2 lines
  Revert unwanted changes.
........
  r64021 | georg.brandl | 2008-06-07 20:16:12 +0200 (Sat, 07 Jun 2008) | 2 lines
  X-ref to numbers module.
........
  r64022 | georg.brandl | 2008-06-07 20:17:37 +0200 (Sat, 07 Jun 2008) | 3 lines
  Document the "st" API, to avoid confusion with the "new" AST.
  Add a note about using the new AST module.
........
  r64063 | martin.v.loewis | 2008-06-10 07:03:35 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add Gregor Lingl.
........
  r64064 | georg.brandl | 2008-06-10 09:45:28 +0200 (Tue, 10 Jun 2008) | 2 lines
  Add the "ast" module, containing helpers to ease use of the "_ast" classes.
........
  r64065 | raymond.hettinger | 2008-06-10 09:57:15 +0200 (Tue, 10 Jun 2008) | 1 line
  Add Arnaud for his efforts on multi-arg set operations.
........
  r64067 | georg.brandl | 2008-06-10 14:46:39 +0200 (Tue, 10 Jun 2008) | 2 lines
  #2536: fix itertools.permutations and itertools.combinations docstrings.
........
											
										 
											2008-06-10 16:37:50 +00:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     from collections import deque | 
					
						
							|  |  |  |     todo = deque([node]) | 
					
						
							|  |  |  |     while todo: | 
					
						
							|  |  |  |         node = todo.popleft() | 
					
						
							|  |  |  |         todo.extend(iter_child_nodes(node)) | 
					
						
							|  |  |  |         yield node | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NodeVisitor(object): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     A node visitor base class that walks the abstract syntax tree and calls a | 
					
						
							|  |  |  |     visitor function for every node found.  This function may return a value | 
					
						
							|  |  |  |     which is forwarded by the `visit` method. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This class is meant to be subclassed, with the subclass adding visitor | 
					
						
							|  |  |  |     methods. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Per default the visitor functions for the nodes are ``'visit_'`` + | 
					
						
							|  |  |  |     class name of the node.  So a `TryFinally` node visit function would | 
					
						
							|  |  |  |     be `visit_TryFinally`.  This behavior can be changed by overriding | 
					
						
							|  |  |  |     the `visit` method.  If no visitor function exists for a node | 
					
						
							|  |  |  |     (return value `None`) the `generic_visit` visitor is used instead. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Don't use the `NodeVisitor` if you want to apply changes to nodes during | 
					
						
							|  |  |  |     traversing.  For this a special visitor exists (`NodeTransformer`) that | 
					
						
							|  |  |  |     allows modifications. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def visit(self, node): | 
					
						
							|  |  |  |         """Visit a node.""" | 
					
						
							|  |  |  |         method = 'visit_' + node.__class__.__name__ | 
					
						
							|  |  |  |         visitor = getattr(self, method, self.generic_visit) | 
					
						
							|  |  |  |         return visitor(node) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def generic_visit(self, node): | 
					
						
							|  |  |  |         """Called if no explicit visitor function exists for a node.""" | 
					
						
							|  |  |  |         for field, value in iter_fields(node): | 
					
						
							|  |  |  |             if isinstance(value, list): | 
					
						
							|  |  |  |                 for item in value: | 
					
						
							|  |  |  |                     if isinstance(item, AST): | 
					
						
							|  |  |  |                         self.visit(item) | 
					
						
							|  |  |  |             elif isinstance(value, AST): | 
					
						
							|  |  |  |                 self.visit(value) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NodeTransformer(NodeVisitor): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     A :class:`NodeVisitor` subclass that walks the abstract syntax tree and | 
					
						
							|  |  |  |     allows modification of nodes. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The `NodeTransformer` will walk the AST and use the return value of the | 
					
						
							|  |  |  |     visitor methods to replace or remove the old node.  If the return value of | 
					
						
							|  |  |  |     the visitor method is ``None``, the node will be removed from its location, | 
					
						
							|  |  |  |     otherwise it is replaced with the return value.  The return value may be the | 
					
						
							|  |  |  |     original node in which case no replacement takes place. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Here is an example transformer that rewrites all occurrences of name lookups | 
					
						
							|  |  |  |     (``foo``) to ``data['foo']``:: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        class RewriteName(NodeTransformer): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |            def visit_Name(self, node): | 
					
						
							|  |  |  |                return copy_location(Subscript( | 
					
						
							|  |  |  |                    value=Name(id='data', ctx=Load()), | 
					
						
							|  |  |  |                    slice=Index(value=Str(s=node.id)), | 
					
						
							|  |  |  |                    ctx=node.ctx | 
					
						
							|  |  |  |                ), node) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Keep in mind that if the node you're operating on has child nodes you must | 
					
						
							|  |  |  |     either transform the child nodes yourself or call the :meth:`generic_visit` | 
					
						
							|  |  |  |     method for the node first. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     For nodes that were part of a collection of statements (that applies to all | 
					
						
							|  |  |  |     statement nodes), the visitor may also return a list of nodes rather than | 
					
						
							|  |  |  |     just a single node. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Usually you use the transformer like this:: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        node = YourTransformer().visit(node) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def generic_visit(self, node): | 
					
						
							|  |  |  |         for field, old_value in iter_fields(node): | 
					
						
							|  |  |  |             if isinstance(old_value, list): | 
					
						
							|  |  |  |                 new_values = [] | 
					
						
							|  |  |  |                 for value in old_value: | 
					
						
							|  |  |  |                     if isinstance(value, AST): | 
					
						
							|  |  |  |                         value = self.visit(value) | 
					
						
							|  |  |  |                         if value is None: | 
					
						
							|  |  |  |                             continue | 
					
						
							|  |  |  |                         elif not isinstance(value, AST): | 
					
						
							|  |  |  |                             new_values.extend(value) | 
					
						
							|  |  |  |                             continue | 
					
						
							|  |  |  |                     new_values.append(value) | 
					
						
							|  |  |  |                 old_value[:] = new_values | 
					
						
							|  |  |  |             elif isinstance(old_value, AST): | 
					
						
							|  |  |  |                 new_node = self.visit(old_value) | 
					
						
							|  |  |  |                 if new_node is None: | 
					
						
							|  |  |  |                     delattr(node, field) | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     setattr(node, field, new_node) | 
					
						
							|  |  |  |         return node | 
					
						
							| 
									
										
										
										
											2018-09-27 17:42:37 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # The following code is for backward compatibility. | 
					
						
							|  |  |  | # It will be removed in future. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _getter(self): | 
					
						
							|  |  |  |     return self.value | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _setter(self, value): | 
					
						
							|  |  |  |     self.value = value | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Constant.n = property(_getter, _setter) | 
					
						
							|  |  |  | Constant.s = property(_getter, _setter) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _ABC(type): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __instancecheck__(cls, inst): | 
					
						
							|  |  |  |         if not isinstance(inst, Constant): | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  |         if cls in _const_types: | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 value = inst.value | 
					
						
							|  |  |  |             except AttributeError: | 
					
						
							|  |  |  |                 return False | 
					
						
							|  |  |  |             else: | 
					
						
							| 
									
										
										
										
											2018-10-28 13:43:03 +02:00
										 |  |  |                 return isinstance(value, _const_types[cls]) | 
					
						
							| 
									
										
										
										
											2018-09-27 17:42:37 +03:00
										 |  |  |         return type.__instancecheck__(cls, inst) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _new(cls, *args, **kwargs): | 
					
						
							|  |  |  |     if cls in _const_types: | 
					
						
							|  |  |  |         return Constant(*args, **kwargs) | 
					
						
							|  |  |  |     return Constant.__new__(cls, *args, **kwargs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Num(Constant, metaclass=_ABC): | 
					
						
							|  |  |  |     _fields = ('n',) | 
					
						
							|  |  |  |     __new__ = _new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Str(Constant, metaclass=_ABC): | 
					
						
							|  |  |  |     _fields = ('s',) | 
					
						
							|  |  |  |     __new__ = _new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Bytes(Constant, metaclass=_ABC): | 
					
						
							|  |  |  |     _fields = ('s',) | 
					
						
							|  |  |  |     __new__ = _new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NameConstant(Constant, metaclass=_ABC): | 
					
						
							|  |  |  |     __new__ = _new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Ellipsis(Constant, metaclass=_ABC): | 
					
						
							|  |  |  |     _fields = () | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __new__(cls, *args, **kwargs): | 
					
						
							|  |  |  |         if cls is Ellipsis: | 
					
						
							|  |  |  |             return Constant(..., *args, **kwargs) | 
					
						
							|  |  |  |         return Constant.__new__(cls, *args, **kwargs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _const_types = { | 
					
						
							|  |  |  |     Num: (int, float, complex), | 
					
						
							|  |  |  |     Str: (str,), | 
					
						
							|  |  |  |     Bytes: (bytes,), | 
					
						
							|  |  |  |     NameConstant: (type(None), bool), | 
					
						
							|  |  |  |     Ellipsis: (type(...),), | 
					
						
							|  |  |  | } |