§
    öÛg3?  ã            	       ó²  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m	Z
 ddlmZ ddlmZ  G d„ de¦  «        Z G d„ d	e¦  «        Zd
„ Zd„ ZdeefZdeefZded„ fZeefZ ee¦  «        Zefd„Zd„ Zd„ Z ej        dd e
d¦  «        dded¬¦  «        Z ej        d e
d¦  «        dded¬¦  «        Z ee _!         ej        d e
d¦  «        dded¬¦  «        Z"ee"_!        ee e"gZ# G d„ d ej$        ¦  «        Z%ej&        d!„ ¦   «         Z' G d"„ d#e¦  «        Z(ej)        fd$„Z*ej)        fd%„Z"e+d&k    r ej,         e"¦   «         ¦  «         dS dS )'a…  
Create and Execute Python Commands
==================================

The purpose of this module is to simplify the creation of a Python command
interface. Normally, one would want to do this if there is a *common* need
for a certain Python environment that may be, at least, partially initialized
via command line options. A notable case would be a Python environment with a
database connection whose connection parameters came from the command line. That
is, Python + command line driven configuration.

The module also provides an extended interactive console that provides backslash
commands for editing and executing temporary files. Use ``python -m
pythoncommand`` to try it out.

Simple usage::

	import sys
	import os
	import optparse
	import pythoncommand as pycmd

	op = optparse.OptionParser(
		"%prog [options] [script] [script arguments]",
		version = '1.0',
	)
	op.disable_interspersed_args()

	# Basically, the standard -m and -c. (Some additional ones for fun)
	op.add_options(pycmd.default_optparse_options)

	co, ca = op.parse_args(args[1:])

	# This initializes an execution instance which gathers all the information
	# about the code to be ran when ``pyexe`` is called.
	pyexe = pycmd.Execution(ca,
		context = getattr(co, 'python_context', ()),
		loader = getattr(co, 'python_main', None),
	)

	# And run it. Any exceptions will be printed via print_exception.
	rv = pyexe()
	sys.exit(rv)
é    N)Úgettext)Úprint_exception)Ú
get_loaderc                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )Úsingle_loaderz/
	used for "loading" string modules(think -c)
	c                 ó   — || _         d S ©N©Úsource)Úselfr   s     úO/granary/edev/quantum/lib/python3.11/site-packages/postgresql/python/command.pyÚ__init__zsingle_loader.__init__B   s   € Ø€$„+€+€+ó    c                 ó    — || j         k    rdS d S )Nú	<command>r
   ©r   Úfullpaths     r   Úget_filenamezsingle_loader.get_filenameE   s   € Ø�”ÒÐØ
ˆ+ð Ðr   c                 óH   — || j         k    rt          | j         dd¦  «        S d S )Nr   Úexec)r   Úcompiler   s     r   Úget_codezsingle_loader.get_codeI   s+   € Ø�”ÒÐÝ
�$”+˜{¨FÑ
3Ô
3Ð3ð Ðr   c                 ó*   — || j         k    r| j         S d S r	   r
   r   s     r   Ú
get_sourcezsingle_loader.get_sourceM   s   € Ø�”ÒÐØ
Œ+Ðð Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   © r   r   r   r   >   sZ   € € € € € ðð ðð ð ðð ð ð4ð 4ð 4ðð ð ð ð r   r   c                   ó2   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ ZdS )	Úfile_loaderz
	used for "loading" scripts
	Nc                 óN   — || _         |�|                     ¦   «         | _        d S d S r	   )ÚfilepathÚreadÚ_source)r   r#   Úfileobjs      r   r   zfile_loader.__init__U   s*   € Ø€$„-ØÐØ—,’,‘.”.€4„<€<€<ð Ðr   c                 ó*   — || j         k    r| j         S d S r	   )r#   r   s     r   r   zfile_loader.get_filenameZ   s   € Ø�”ÒÐØ
Œ-Ðð Ðr   c                 óD   — || j         k    r|                      ¦   «         S d S r	   )r#   Ú_readr   s     r   r   zfile_loader.get_source^   s%   € Ø�”ÒÐØ
�*Š*‰,Œ,Ðð Ðr   c                 óÜ   — t          | d¦  «        r| j        S t          | j        ¦  «        }	 |                     ¦   «         |                     ¦   «          S # |                     ¦   «          w xY w)Nr%   )Úhasattrr%   Úopenr#   r$   Úclose)r   Úfs     r   r)   zfile_loader._readb   s\   € ÝˆT�9ÑÔð Ø
Œ,ÐÝ
ˆ4Œ=ÑÔ€!ðØ
�&Š&‰(Œ(à‡7‚7�9„9€9€9ø€1‡7‚7�9„9€9€9øøøs   ­A ÁA+c                 ól   — || j         k    rd S t          |                      ¦   «         | j         d¦  «        S ©Nr   )r#   r   r)   r   s     r   r   zfile_loader.get_codek   s0   € Ø�”ÒÐØ	€6Ý	�—’‘”˜tœ}¨fÑ	5Ô	5Ð5r   r	   )	r   r   r   r   r   r   r   r)   r   r   r   r   r!   r!   Q   sn   € € € € € ðð ð!ð !ð !ð !ð
ð ð ðð ð ðð ð ð6ð 6ð 6ð 6ð 6r   r!   c                 óD   — |                       d¦  «        r
| dd …         S d S )Nzfile://é   ©Ú
startswith©Úxs    r   Úextract_filepathr7   p   ó(   € Ø‡L‚L�ÑÔð Ø	
ˆ1ˆ2ˆ2Œ€,Øˆr   c                 óD   — |                       d¦  «        r
| dd …         S d S )Nzmodule:r2   r3   r5   s    r   Úextract_moduler:   u   r8   r   zPython modulezPython scriptzPython commandc                 ó   — | S r	   r   r5   s    r   ú<lambda>r<   �   s   € ¨A€ r   c                 ó>   — |D ]} |d         | ¦  «        }|�|c S Œd S )Né   r   )ÚidentÚdirr6   Úxids       r   Úfind_loaderrB   Š   s?   € Ø
ð ð €QØˆˆ!ŒˆU‰Œ€#Ø€_Ø
€8€8€8ð ðð r   c                 óØ   — t          |j        | j        d¦  «        pg }|st          |j        | j        |¦  «         t	          |¦  «        }|€t
          }|                     ||f¦  «         dS )z±
	Add some context to the execution of the Python code using
	loader module's directory list of loader descriptions.

	If no loader can be found, assume it's a Python command.
	N)ÚgetattrÚvaluesÚdestÚsetattrrB   Úsingle_loader_descriptorÚappend)ÚoptionÚopt_strÚvalueÚparserÚpcÚldescs         r   Úappend_contextrP   ”   so   € õ ˆfŒm˜Vœ[¨$Ñ/Ô/Ð5°2€Ø
ð *Ý	ˆ&Œ-˜œ bÑ)Ô)Ð)Ý	�UÑ	Ô	€Ø	€MÝ
"€%Ø‡‚ˆE�5ˆ>ÑÔÐÐÐr   c                 ó–   — || j         f}t          |j        | j        |¦  «         |j        s|j                             dd¦  «         dS dS )zJ
	Set the main Python code; after contexts are initialized, main is ran.
	r   z--N)Úpython_loaderrG   rE   rF   Úallow_interspersed_argsÚrargsÚinsert)rJ   rK   rL   rM   Úmains        r   Úset_python_mainrW   £   sZ   € ð 
�Ô$Ð%€ÝˆŒ˜œ TÑ*Ô*Ð*àÔ&ð Ø„,×Ò�a˜ÑÔÐÐÐðð r   z-Cz	--contextz2Python context code to run[file://,module:,<code>]Úpython_contextÚcallbackÚstr)ÚhelprF   ÚactionrY   Útypez-mz(Python module to run as script(__main__)Úpython_mainz-cz"Python expression to run(__main__)c                   óx   ‡ — e Zd ZdZd„ Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚExtendedConsolezB
	Console subclass providing some convenient backslash commands.
	c                 óô  — dd l }|j        | _        dd l}|j        | _        t	          j        j        | g|¢R i |¤Ž i | _        i | _        g | _	        |  
                    d| j        d¦  «         |  
                    d| j        d¦  «         |  
                    d| j        d¦  «         |  
                    d| j        d	¦  «         |  
                    d
| j        d¦  «         |  
                    d| j        d¦  «         d S )Nr   z\?zShow this help message.z\setzCConfigure environment variables. \set without arguments to show allz\Ez"Edit a file or a temporary script.z\iz9Execute a Python script within the interpreter's context.z\ez2Edit and Execute the file directly in the context.ú\xz/Execute the Python command within this process.)ÚtempfileÚmktempÚshlexÚsplitÚcodeÚInteractiveConsoler   Úbsc_mapÚ
temp_filesÚpast_buffersÚregister_backslashÚshowhelpÚbs_setÚbs_EÚbs_iÚbs_eÚbs_x)r   ÚargsÚkwrc   re   s        r   r   zExtendedConsole.__init__Ò   s0  € Ø€/€/€/Ø”€$„+Ø€,€,€,ØŒ{€$„*ÝÔÔ" 4Ð5¨$Ð5Ð5Ð5°"Ð5Ð5Ð5à€$„,Ø€$„/Ø€$Ôà×Ò˜% ¤Ð0IÑJÔJÐJØ×Ò˜' 4¤;ØHñJô Jð Jà×Ò˜% ¤Ø'ñ)ô )ð )à×Ò˜% ¤Ø>ñ@ô @ð @à×Ò˜% ¤Ø7ñ9ô 9ð 9à×Ò˜% ¤Ø4ñ6ô 6ð 6ð 6ð 6r   c                 ób   •— |                       d d ¦  «          t          ¦   «         j        |i |¤ŽS r	   )rm   ÚsuperÚinteract)r   rs   rt   Ú	__class__s      €r   rw   zExtendedConsole.interacté   s3   ø€ Ø‡-‚-��dÑÔÐØ	�‰ŒÔ	˜4Ð	% "Ð	%Ð	%Ð%r   c                 ó®   — t          j        ¦   «         \  }}}|||ct           _        t           _        t           _        t          |||j        p|¦  «         d S r	   )ÚsysÚexc_infoÚ	last_typeÚ
last_valueÚlast_tracebackr   Útb_next)r   ÚeÚvÚtbs       r   ÚshowtracebackzExtendedConsole.showtracebackí   sI   € ÝŒ\‰^Œ^�(€!€QˆØ67¸¸BÐ3…#„-•”¥Ô!3Ý�!�Q˜œ
Ð( bÑ)Ô)Ð)Ð)Ð)r   c                 ó   — ||f| j         |<   d S r	   )ri   )r   ÚbscmdÚmethÚdocs       r   rl   z"ExtendedConsole.register_backslashò   s   € Ø˜s˜€$„,ˆuÑÐÐr   c                 ó$  — |                      dd¦  «        }|                     d¦  «         | j                             |d         ¦  «        }|€&|                      d|›t
          j        ›�¦  «         dS  |d         |d         |d         ¦  «        S )z{
		If push() gets a line that starts with a backslash, execute
		the command that the backslash sequence corresponds to.
		Né   Ú r   z"ERROR: unknown backslash command: )rf   rI   ri   ÚgetÚwriteÚosÚlinesep)r   ÚlineÚcmdÚbscs       r   Ú	execslashzExtendedConsole.execslashõ   s‡   € ð
 	�
Š
�4˜ÑÔ€#Ø‡*‚*ˆR�.„.€.ØŒ×Ò˜˜QœÑ Ô €#Ø€[Ø‡:‚:€:¸¸½R¼Z¸ZÐHÑIÔIÐIÐIÐIà
ˆ#ˆaŒ&��Q”˜˜QœÑ
 Ô
 Ð r   c                 ó>  — t          | j                             ¦   «         ¦  «        }|                     d„ ¬¦  «         t          j                             d„ |D ¦   «         ¦  «        }|                      dt          j        dz  ›|›t          j        dz  ›�¦  «         d S )Nc                 ó   — | d         S )Nr   r   r5   s    r   r<   z*ExtendedConsole.showhelp.<locals>.<lambda>  s
   € ˜˜1œ€ r   )Úkeyc           
      óv   — g | ]6}d |d         ›ddt          |d         ¦  «        z
  z  ›|d         d         ›�‘Œ7S )z  r   ú é   r‰   )Úlen)Ú.0r6   s     r   ú
<listcomp>z,ExtendedConsole.showhelp.<locals>.<listcomp>  s[   € ð ð ð ð 
ˆð €a„D€Dˆ#�•S˜˜1œ‘Y”Y‘Ñ
Ð
  1¤ a¤ ððð ð r   zBackslash Commands:r>   )Úlistri   ÚitemsÚsortr�   rŽ   ÚjoinrŒ   )r   r�   ÚargÚiÚ	helpliness        r   rm   zExtendedConsole.showhelp  s¨   € Ý
ˆ4Œ<×ÒÑÔÑ Ô €!Ø‡&‚&ˆ~ˆ~€&ÑÔÐÝŒj�oŠoð ð ð ðñ ô ñ ô €)ð
 ‡*‚*€*Ý„:ˆa�<€<���BœJ q™L˜Lðñ ô ð ð ð r   c           	      ó  — |r³|                       |¦  «        D ]›}d|v rO|                      dd¦  «        \  }}|t          j        |<   |                      |›d|›t          j        ›�¦  «         ŒU|rD|                      |›dt          j                             |d¦  «        ›t          j        ›�¦  «         ŒœdS t          j                             ¦   «         D ]+\  }}|                      |›d|›t          j        ›�¦  «         Œ,dS )z3
		Set a value in the interpreter's environment.
		ú=r‰   rŠ   N)rf   r�   ÚenvironrŒ   rŽ   r‹   r�   )r   r�   r    r6   Úkr�   s         r   rn   zExtendedConsole.bs_set  s  € ð 	ð 
.Ø�JŠJ�s‰OŒOð Cð C€qØ
ˆa€x€xØ�GŠG�C˜‰OŒO�T€QˆØ…R„Z��]Ø	‡Z‚Z˜A˜A˜A˜q˜q¥"¤* *Ð-Ñ.Ô.Ð.Ð.Ø	
ð CØ	‡Z‚Z˜A˜A˜A�rœzŸ~š~¨a°Ñ4Ô4Ð4µb´j°jÐAÑBÔBÐBøðCð Cõ Œj×ÒÑ Ô ð .ð .�s€qˆØ‡J‚J˜1˜1˜1˜a˜a¥¤ Ð,Ñ-Ô-Ð-Ð-ð.ð .r   Fc                 óJ  — t           j                             |¦  «        sƒt           j        j        |vrp|                     ¦   «                              ¦   «         }| j                             |¦  «        }|€,|du r&|                      dd|›d�¬¦  «        }|| j        |<   n|S |S |S )zŽ
		Get the path of the given string; if the path is not
		absolute and does not contain path separators, identify
		it as a temporary file.
		NFz.pyÚ	_console_Ú_)ÚsuffixÚprefix)	r�   ÚpathÚisabsÚsepÚstripÚlowerrj   r‹   rd   )r   r¬   Údont_createÚtmppaths       r   Úresolve_pathzExtendedConsole.resolve_path  s­   € õ 
Œ�Š�tÑ	Ô	ð ¥R¤W¤[°DÐ%8Ð%8à
�*Š*‰,Œ,×
Ò
Ñ
Ô
€4ØŒ_× Ò  Ñ&Ô&€7Ø€oØ�eÐÐØ�{Š{ØˆuØ $  Ð&ð ñ ô €Wð %€T„_�TÑÐà€[Ø
€>Ø	€+r   c                 óÒ  — t          |¦  «        }	 	 t          |                     ¦   «         |d¦  «        }n,# t          $ r d }t	          t          j        ¦   «         Ž  Y nw xY w|                     ¦   «          n# |                     ¦   «          w xY w|�U	 t          || j	        | j	        ¦  «         d S #  t          j        ¦   «         \  }}}t	          |||j
        p|¦  «         Y d S xY wd S r0   )r,   r   r$   ÚSyntaxErrorr   rz   r{   r-   r   Úlocalsr   )r   r#   ÚsrcÚcor€   r�   r‚   s          r   ÚexecfilezExtendedConsole.execfile4  sõ   € ÝˆX‰Œ€#ðð%Ý	�—’‘”˜X vÑ	.Ô	.€B€BøÝ
ð %ð %ð %Ø	€BÝ•S”\‘^”^Ð$Ð$Ð$Ð$ð%øøøð ‡9‚9�;„;€;€;ø€3‡9‚9�;„;€;€;øøøØ€^ð,ÝˆˆTŒ[˜$œ+Ñ&Ô&Ð&Ð&Ð&øð,ÝŒ|‰~Œ~�H€A€qˆ"Ý�A�q˜"œ*Ð*¨Ñ+Ô+Ð+Ð+Ð+Ð+øøøð €^s2   ’#6 µA7 ¶&AÁA7 ÁAÁA7 Á7BÂB0 Â01C$c                 ó°   — t          |¦  «        }|                     dt          j                             dd¦  «        ¦  «         t          j        |¦  «        S )Nr   ÚEDITORÚvi)rœ   rU   r�   r¥   r‹   Ú
subprocessÚcall)r   Ú	filepathsÚsps      r   Ú	editfileszExtendedConsole.editfilesE  sA   € ÝˆI�„€"à‡)‚)ˆA�rŒz�~Š~˜h¨Ñ-Ô-Ñ.Ô.Ð.Ý	Œ˜Ñ	Ô	Ðr   c                 ó’   — |                       |¦  «        pdD ].}|                      |d¬¦  «        }|                      |¦  «         Œ/dS )zexecute the files©rŠ   T)r±   N)rf   r³   r¹   )r   r�   r    r6   Úps        r   rp   zExtendedConsole.bs_iK  sW   € à�:Š:�c‰?Œ?Ð#˜eð ð €aØ×Ò˜¨$ÐÑ/Ô/€1Ø‡=‚=�ÑÔÐÐðð r   c                 ót   ‡ — ‰                       ˆ fd„‰                      |¦  «        pdD ¦   «         ¦  «         dS )z$edit the files, but *only* edit themc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ©r³   ©rš   r6   r   s     €r   r›   z(ExtendedConsole.bs_E.<locals>.<listcomp>S  s'   ø€ ÐIÐIÐI¨1�$×#Ò# AÑ&Ô&ÐIÐIÐIr   rÃ   N)rÁ   rf   )r   r�   r    s   `  r   ro   zExtendedConsole.bs_EQ  s?   ø€ à‡.‚.ÐIÐIÐIÐI°·
²
¸3±´Ð0HÀ5ÐIÑIÔIÑJÔJÐJÐJÐJr   c                 ó¬   ‡ — ˆ fd„‰                       |¦  «        pdD ¦   «         }‰                      |¦  «         |D ]}‰                      |¦  «         ŒdS )zedit *and* execute the filesc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   rÇ   rÈ   s     €r   r›   z(ExtendedConsole.bs_e.<locals>.<listcomp>W  s'   ø€ ÐFÐFÐF¨ˆt× Ò  Ñ#Ô#ÐFÐFÐFr   rÃ   N)rf   rÁ   r¹   )r   r�   r    r¿   r6   s   `    r   rq   zExtendedConsole.bs_eU  sk   ø€ àFÐFÐFÐF¨T¯ZªZ¸©_¬_Ð-EÀÐFÑFÔF€)Ø‡.‚.�ÑÔÐØð ð €aØ‡=‚=�ÑÔÐÐðð r   c                 ó2  — d}t          |¦  «        dk    r�|                      |¦  «        }|                     dd¦  «         	 t          |¬¦  «        }n# t          $ r}|j        }Y d }~nd }~ww xY w|                      d|t          j        fz  ¦  «         d S d S )Néÿÿÿÿr‰   r   rb   ©Úargvz[Return Value: %d]%s)	r™   rf   rU   ÚcommandÚ
SystemExitrg   rŒ   r�   rŽ   )r   r�   r    ÚrvÚaÚses         r   rr   zExtendedConsole.bs_x\  s¬   € Ø	€"Ýˆ�X„X�‚\€\Ø‡z‚z�#�„€1Ø‡8‚8ˆAˆuÑÔÐðÝ	˜Ð	Ñ	Ô	€B€BøÝ
ð ð ð Ø	Œ€B€B€B€B€B€Bøøøøðøøøà‡:‚:Ð$ r­2¬:Ð&6Ñ6Ñ7Ô7Ð7Ð7Ð7ð €\s   ÁA Á
A.ÁA)Á)A.c                 ó  — | j         sd|                     d¦  «        rO	 |                      |¦  «         d S #  t          j        ¦   «         \  }}}t          |||j        p|¦  «         Y d S xY wt          j         	                    | |¦  «        S )Nú\)
Úbufferr4   r’   rz   r{   r   r   rg   rh   Úpush)r   r�   r€   r�   r‚   s        r   r×   zExtendedConsole.pushg  s‘   € à	Œð 3˜Ÿš¨Ñ.Ô.ð 3ð,Ø‡N‚N�4ÑÔÐÐÐøð,åŒ|‰~Œ~�H€A€qˆ"Ý�A�q˜"œ*Ð*¨Ñ+Ô+Ð+Ð+Ð+Ð+øøøå
Ô
!×
&Ò
& t¨TÑ
2Ô
2Ð2s	   ž5 µ1A))F)r   r   r   r   r   rw   rƒ   rl   r’   rm   rn   r³   r¹   rÁ   rp   ro   rq   rr   r×   Ú__classcell__)rx   s   @r   r`   r`   Î   s  ø€ € € € € ðð ð6ð 6ð 6ð.&ð &ð &ð &ð &ð*ð *ð *ð
$ð $ð $ð!ð !ð !ð
ð 
ð 
ð.ð .ð .ð ð ð ð ð,,ð ,ð ,ð"ð ð ðð ð ðKð Kð Kðð ð ð	8ð 	8ð 	8ð
3ð 
3ð 
3ð 
3ð 
3ð 
3ð 
3r   r`   c              #   ó¬  K  — | sd V — d S |                       d¦  «        }|                     d¦  «        }d                     |¦  «        }	 t          ||¬¦  «        }t	          ||d ¦  «        }nM# t
          $ r@ d }t          j                             t          j
        ›d| ›dt          j
        ›�¦  «         Y nw xY w	 d V — d S #  	 t          j        ¦   «         \  t          _        t          _        t          _         |¦   «          nM#  t          j                             dt          j
        z   ¦  «         t          t          j        ¦   «         Ž  Y nxY w‚ xY w)Nú.rÌ   )ÚfromlistzERROR: no object at z for postmortemz [Exception raised by Postmortem])rf   ÚpoprŸ   Ú
__import__rD   Ú
ValueErrorrz   ÚstderrrŒ   r�   rŽ   r{   r|   r}   r~   r   )ÚfuncpathÚpmÚattrÚmodpathÚmÚpmobjects         r   Ú
postmortemræ   s  sa  è è € àð 	Ø€*€*€*€*€*à‡~‚~�cÑÔ€"Ø	�Š�‰Œ€$Ø�HŠH�R‰LŒL€'ð
Ý�' gÐ.Ñ.Ô.€1Ý�a˜˜tÑ$Ô$€8€8øÝ	ð ð ð Ø€8å„:×Òå„Z€Z€Z����2œ:˜:ðñô ð ð ð ðøøøð	Ø	€:€:€:€:€:øð		ð%Ý8;¼¹¼Ñ5…C„M•3”>¥3Ô#5Ø€H�J„J€J€Jøð%Ý„J×ÒØ'­"¬*Ñ4ñô ð õ •S”\‘^”^Ð$Ð$Ð$Ð$øøøØøøøs8   Á"A. Á.AB8Â7B8Â<C ÃEÃ?DÄEÄAEÅEc                   óJ   — e Zd ZdZdddej        fd„Zd„ Zedfd„Z	d„ Z
d„ ZdS )	Ú	Executiona™  
	Given argv and context make an execution instance that, when called, will
	execute the configured Python code.

	This class provides the ability to identify what the main part of the
	execution of the configured Python code. For instance, shall it execute a
	console, the file that the first argument points to, a -m option module
	appended to the python_context option value, or the code given within -c?
	r   Nc                 ól  — || _         |rt          |¦  «        pd| _        |�|| _        nö|�7|\  }}|\  }}	}
 |	|¦  «        }|€t	          |›d|›d�¦  «        ‚||f| _        n½|r…| j         d         }t          |¦  «        }	 t          ||¬¦  «        }|                     ¦   «          n# |                     ¦   «          w xY w| j         d         |f| _        | j         dd…         | _         n6|                     ¦   «         st          d|¬¦  «        }d|f| _        nd	| _        |  	                    ¦   «          dS )
a‡  
		args
			The arguments passed to the script; usually sys.argv after being
			processed by optparse(ca).
		context
			A list of loader descriptors that will be used to establish the
			context of __main__ module.
		main
			Overload to explicitly state what main is. None will cause the
			class to attempt to fill in the attribute using 'args' and other
			system objects like sys.stdin.
		r   Nr—   ú! does not exist or cannot be readr   )r&   r‰   z<stdin>©NN)
rs   rœ   ÚcontextrV   ÚImportErrorr,   r!   r-   ÚisattyÚreset_module__main__)r   rs   rì   rV   ÚloaderÚstdinr¬   rO   ÚltitleÚrloaderÚxpathÚlÚfpr.   s                 r   r   zExecution.__init__�  s^  € ð$ €$„)ØÐ*�T '™]œ]Ð0¨b€$„,à	ÐØ€4„9€9ØÐà�;€4ˆØ!Ñ€6ˆ7�EØ€wˆt�}„}€1Ø€iÝ
à€f€fˆdˆdˆdðñô ð ð
 �aˆy€4„9€9àð ØŒ	�!Œ€2ÝˆB�x„x€1ðÝ�B !Ð$Ñ$Ô$€Aà‡G‚G�I„I€I€Iø€A‡G‚G�I„I€I€IøøøØ”	˜!”˜aÐ €4„9ØŒy˜˜˜Œ}€4„9€9ð �<Š<‰>Œ>ð Ý�9¨Ð.Ñ.Ô.€1Ø˜1ˆ~€4„9€9ð €4„9Ø×ÒÑÔÐÐÐs   ÂB( Â(B>c                 ó  — t          j        d¦  «        }t          |_        d |_        || _        t          | j        d         dd ¦  «        }|�7d                     |                     d¦  «        d d…         ¦  «        |_        d S d S )NÚ__main__r‰   ÚfullnamerÚ   rÌ   )	ÚtypesÚ
ModuleTypeÚ__builtins__Ú__package__Úmodule__main__rD   rV   rŸ   rf   )r   Úmodr¬   s      r   rï   zExecution.reset_module__main__Õ  sx   € ÝÔ˜Ñ$Ô$€#Ý!€#ÔØ€#„/Ø€$ÔÝ	�”˜1”˜z¨4Ñ	0Ô	0€$Ø	ÐØ—X’X˜dŸjšj¨™oœo¨c¨r¨cÔ2Ñ3Ô3€3„?€?€?ð Ðr   c                 óø  — | j         t          j        d<   | j         j        }| j        D �]\  }}|\  }}} ||¦  «        }	 ||	¦  «        }
|
€4t          j                             |›d|	›dt          j        ›�¦  «          dS 	 |
 	                    |	¦  «        }n##  t          t          j        ¦   «         Ž  Y  dS xY w t          |
dd„ ¦  «        |	¦  «        | j         _        |
| j         _        	 t          |||¦  «         ŒÖ#  t          j        ¦   «         \  }}}t          |||j        p|¦  «         Y  dS xY w| j        dk    rl| j        pd	gt          _        	 d
dl}n# t*          $ r Y nw xY w ||¬¦  «        }	 |                     ¦   «          n# t.          $ r}|j        cY d}~S d}~ww xY wd
S | j        \  }} t          |dd„ ¦  «        |¦  «        | j         _        t3          | j        ¦  «        t          _        t          j                             d
| j         j        ¦  «         	 | 	                    |¦  «        }n"#  t          t          j        ¦   «         Ž  Y dS xY wd
}d}	 |�7|5  	 t          |||¦  «         n#  d}‚ xY w	 ddd¦  «         n# 1 swxY w Y   n	 t          |||¦  «         n#  d}‚ xY wnÃ# t.          $ rS}|j        }t          j        ¦   «         \  }}}|t          _        |t          _        |j        p|t          _        Y d}~nkd}~w |du r‚ d}t          j        ¦   «         \  }}}t          |||j        p|¦  «         |t          _        |t          _        |j        p|t          _        Y nxY w|S )zŽ
		Initialize the context and run main in the given locals
		(Note: tramples on sys.argv, __main__ in sys.modules)
		(Use __call__ instead)
		rø   Nr—   rê   r‰   r   c                 ó   — | S r	   r   r5   s    r   r<   z!Execution._call.<locals>.<lambda>ý  s   €  !€ r   rë   z	<console>r   )r¶   c                 ó   — | S r	   r   r5   s    r   r<   z!Execution._call.<locals>.<lambda>  s   €  a€ r   FT)rþ   rz   ÚmodulesÚ__dict__rì   rß   rŒ   r�   rŽ   r   r   r{   rD   Ú__file__Ú
__loader__r   r   rV   rs   rÎ   Úreadlinerí   rw   rÐ   rg   rœ   rU   r|   r}   r~   )r   Úconsolerì   Úmdr¬   rO   rò   rð   rô   ÚrpathÚlirg   r€   r�   r‚   r  ÚicrÑ   Úexe_exceptions                      r   Ú_callzExecution._callÞ  sK  € ð !Ô/…#„+ˆjÑØÔÔ#€"ð ”\ð ñ �k€dˆEØ Ñ€6ˆ6�5Øˆ5�‰;Œ;€5Øˆˆu‰Œ€2Ø€jÝ„J×Òà€f€fˆeˆeˆe•R”Z�Zðñô ð ð
 ˆ1ˆ1ðØ�;Š;�uÑÔ€D€DøðÝ•S”\‘^”^Ð$Ð$Øˆ1ˆ1ˆ1øøøð#¥'Øˆ˜˜ñ#ô #à
ñ#ô #€4ÔÔð %'€4ÔÔ!ðÝˆˆr�2ÑÔÐÐøðÝŒ|‰~Œ~�H€A€qˆ"Ý�A�q˜"œ*Ð*¨Ñ+Ô+Ð+Øˆ1ˆ1ˆ1øøøà	„Y�,ÒÐàŒiÐ(˜K˜=…3„8ð	Ø€O€O€O€OøÝ
ð 	ð 	ð 	Ø€Dð	øøøð 	ˆ˜ÐÑÔ€2ðØ‡K‚K�M„M€M€MøÝ
ð ð ð ØŒ6€M€M€M€M€M€Møøøøðøøøà
ˆ!ð ”)�<€4ˆð#¥'Ø
ˆN˜K˜Kñ#ô #à	ñ#ô #€4ÔÔõ �4”9‰oŒo…3„8Ý„8‡?‚?�1�dÔ)Ô2Ñ3Ô3Ð3ðØ�?Š?˜4Ñ Ô €D€DøðÝ•S”\‘^”^Ð$Ð$Øˆ1ˆ1øøøà	€2Ø€=ð,ØÐØ
ð ð ðÝˆD�"�bÑÔÐÐøðØ€}Øøøøð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øðÝ
ˆ4��RÑÔÐÐøðØ€mØøøøøøå
ð ,ð ,ð ,ð 
Œ€BÝŒ|‰~Œ~�H€A€qˆ"Ø…C„MØ…C„NØœ*Ð*¨…CÔÐÐÐÐÐøøøøð,Ø˜ÐÐØ
Ø	
€BÝŒ|‰~Œ~�H€A€qˆ"Ý�A�q˜"œ*Ð*¨Ñ+Ô+Ð+Ø…C„MØ…C„NØœ*Ð*¨…CÔÐÐøøøà
€9sÂ   ÂBÂB7Ã,C>Ã>1D3ÅE Å
E(Å'E(Å8F Æ
F(ÆF#ÆF(Æ#F(È%H; È;IÉ"J7 É&JÉ(I:É9JÉ:I?É?JÊJ7 ÊJÊJ7 ÊJÊJ7 ÊJ. Ê-J7 Ê.J3Ê3J7 Ê7
M7ËA	LÌA&M7c                 óÈ  — t           j                             d¦  «        t           j                             d¦  «        t           j        t          j                             ¦   «         f}	  | j        |i |¤Ž|\  t           j        d<   t           j        d<   t           _        t          _        S # |\  t           j        d<   t           j        d<   t           _        t          _        w xY w)NÚ__context__rø   )rz   r  r‹   rÎ   r�   r¥   Úcopyr  )r   rs   rt   Ústorages       r   Ú__call__zExecution.__call__J  s¸   € å„;‡?‚?�=Ñ!Ô!Ý„;‡?‚?�:ÑÔÝ„8Ý„:‡?‚?ÑÔð	€'ð"Ø
ˆ$Œ*�dÐ
!˜bÐ
!Ð
!ð "ñ…3„;ˆ}ÑÝ„;ˆzÑÝ„8�RŒZˆZø˜'ñ…3„;ˆ}ÑÝ„;ˆzÑÝ„8�RŒZð"ð "ð "ð "s   Á(B* Â*7C!c                 óH   — | j         \  }}|�|                     |¦  «        S dS )zw
		Get the execution's "__main__" source. Useful for configuring
		environmental options derived from "magic" lines.
		N)rV   r   )r   r¬   rð   s      r   Úget_main_sourcezExecution.get_main_sourceX  s1   € ð
 ”�,€$ˆØ	ÐØ
×
Ò
˜DÑ
!Ô
!Ð!ð Ðr   )r   r   r   r   rz   rñ   r   rï   r`   r  r  r  r   r   r   rè   rè   “  s‘   € € € € € ðð ð Ø	ØØ
Œ)ð	6ð 6ð 6ð 6ðp4ð 4ð 4ð Øðjð jð jð jðX"ð "ð "ð"ð "ð "ð "ð "r   rè   c           	      ó†  — dt           j        vr t           j                             dd¦  «         t          j        dd¬¦  «        }|                     ¦   «          |                     t          ¦  «         |                     | dd…         ¦  «        \  }}t          |t          |dd	¦  «        t          |d
d¦  «        ¬¦  «        S )z(create an execution using the given argvrŠ   r   z+%prog [options] [script] [script arguments]z1.0)Úversionr‰   NrX   r   r^   )rì   rð   )rz   r¬   rU   ÚoptparseÚOptionParserÚdisable_interspersed_argsÚadd_optionsÚdefault_optparse_optionsÚ
parse_argsrè   rD   )rÎ   Úopr¸   Úcas       r   Úcommand_executionr   a  sÀ   € ð �cŒhÐÐÝ„(‡/‚/�!�RÑÔÐåÔØ/Øðñ ô €ð ×ÒÑÔÐØ‡‚Õ(Ñ)Ô)Ð)Ø
�-Š-˜˜Q˜R˜RœÑ
!Ô
!�€€Rå�"Ý�BÐ(¨"Ñ-Ô-Ý�2�} dÑ+Ô+ð	ñ 	ô 	ð r   c                 óŠ   —  t          | ¬¦  «        t          t          j                             d¦  «        ¦  «        ¬¦  «        S )NrÍ   ÚPYTHON_POSTMORTEM)rì   )r   ræ   r�   r¥   r‹   rÍ   s    r   rÏ   rÏ   u  sA   € Ø&Õ Ð&Ñ&Ô&Ý•r”z—~’~Ð&9Ñ:Ô:Ñ;Ô;ð	ñ 	ô 	ð r   rø   )-r   r�   rz   Úrerg   rú   r  r½   Ú
contextlibr   r©   Ú	tracebackr   Úpkgutilr   Úmodule_loaderÚobjectr   r!   r7   r:   Úmodule_loader_descriptorÚfile_loader_descriptorrH   Ú
_directoryrœ   Ú	directoryrB   rP   rW   Úmake_optionrì   ÚmodulerR   rÏ   r  rh   r`   Úcontextmanagerræ   rè   rÎ   r   r   Úexitr   r   r   ú<module>r1     sQ  ðð+ð +ðX 
€	€	€	Ø 
€
€
€
Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø %Ð %Ð %Ð %Ð %Ð %à /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð �Fñ ô ð ð&6ð 6ð 6ð 6ð 6�&ñ 6ô 6ð 6ð>ð ð ð
ð ð ð �- ðÐ ð �+Ð/ðÐ ð �= + +ðÐ ð
 Øð€
ð ˆD�ÑÔ€	à&ð ð ð ð ðð ð ðð ð ð ˆ(Ô
Ø€{Ø	ˆÐ
>Ñ?Ô?ØØ
ØØðñ ô €ð 
ˆÔ	ØØ	ˆÐ
4Ñ5Ô5ØØ
ØØð
ñ 
ô 
€ð 0€Ô à
ˆ(Ô
ØØ	ˆÐ
.Ñ/Ô/ØØ
ØØðñ ô €ð 1€Ô ð 	ˆ&�'ðÐ ðc3ð c3ð c3ð c3ð c3�dÔ-ñ c3ô c3ð c3ðJ Ôð	ð 	ñ Ôð	ð>L"ð L"ð L"ð L"ð L"�ñ L"ô L"ð L"ð\ !œXð ð ð ð ð( ”8ð ð ð ð ð
 ˆzÒÐØ	€„ˆ'ˆ'‰)Œ)ÑÔÐÐÐð Ðr   