
    \j5                    L   d Z ddlm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mZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z% dd	l&m'Z'm(Z(m)Z) dd
l*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD  ejE        dd          ZFeFG                    dd           eFG                    dd           dZH G d d          ZId?d"ZJd@d(ZKdAd,ZLdBd1ZMdCd9ZNdDd=ZOdEd>ZPdS )Fa  
Mypy parallel build worker.

The protocol of communication with the coordinator is as following:
* Read (pickled) build options from command line.
* Populate status file with pid and socket address.
* Receive build sources from coordinator.
* Initialize build manager with the sources, and send ack to coordinator.
* Receive build graph from coordinator, and ack it.
* Receive SCC structure from coordinator, and ack it.
* In a loop:
  - Receive an SCC id from coordinator, and start processing it.
  - SCC is processed in two phases: interface and implementation, send a response after each.
  - When prompted by coordinator (with a scc_ids=[] message), cleanup and shutdown.
    )annotationsN)Final)
ReadBufferread_tag)util)GRAPH_MESSAGESCC_REQUEST_MESSAGESCCS_DATA_MESSAGESOURCES_DATA_MESSAGE
AckMessageBuildManagerGraphGraphMessageModuleResultSccRequestMessageSccResponseMessageSccsDataMessageSourcesDataMessageload_plugins process_stale_scc_implementationprocess_stale_scc_interface)Tagread_int_list	read_json)RECURSION_LIMITWORKER_CONNECTION_TIMEOUTWORKER_IDLE_TIMEOUT)OUTPUT_CHOICES)CompileError	ErrorInfoErrorsreport_internal_error)FileSystemCache)IPCException	IPCServerready_to_readreceivesend)BuildSourceBuildSourceSetcompute_search_paths)FileRawData)Optionsread_py_file)__version__mypy_workerzMypy build worker)progdescriptionz--status-filez)status file to communicate worker details)helpz--options-dataz!file with serialized mypy optionsbuild_workerc                      e Zd ZddZdS )ServerContextoptionsr-   disable_error_code	list[str]enable_error_codeerrorsr!   fscacher#   returnNonec                L    || _         || _        || _        || _        || _        d S N)r8   r9   r;   r<   r=   )selfr8   r9   r;   r<   r=   s         \/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/mypy/build_worker/worker.py__init__zServerContext.__init__E   s-     &);(9#%    N)r8   r-   r9   r:   r;   r:   r<   r!   r=   r#   r>   r?   )__name__
__module____qualname__rD    rE   rC   r7   r7   D   s(        & & & & & &rE   r7   argvr:   r>   r?   c                ,   t          j        t                     t          j                    dk    rt          j        ddd           t                              |           }t          |j
        d          5 }t          |                                          }d d d            n# 1 swxY w Y   t          |          }|                    dg           }|                    dg           }t                                          |          }|j        }t%          t&          t(                    }		 t          |d          5 }t+          j        t/          j                    |	j        d|           |                    d	           d d d            n# 1 swxY w Y   n'# t6          $ r}
t9          d
| d|
            d }
~
ww xY wt;                      }|                    |j                   |j        |j         d ntC          j"        |j                   }tG          |fd|          }tI          |||||          }	 |	5  tK          |	|           d d d            n# 1 swxY w Y   nc# tL          tN          f$ r%}
|j(        dk    rt9          d|
           Y d }
~
n2d }
~
wt6          $ r"}
tS          |
|j*        d||           Y d }
~
nd }
~
ww xY w|	+                                 n# |	+                                 w xY w|j,        rt[          j.        d           d S d S )NCPythoni@    rbr9   r;   w)pidconnection_name
zError writing status file :c                $    t          |           S rA   r.   )pathcached_reads    rC   <lambda>zmain.<locals>.<lambda>w   s    dK!@!@ rE   )read_sourceerror_formatter   z%Error communicating with coordinator:r   )/syssetrecursionlimitr   platformpython_implementationgcset_thresholdparser
parse_argsopenoptions_datar   readr   popr-   apply_changesstatus_filer%   CONNECTION_NAMEr   jsondumposgetpidrQ   write	Exceptionprintr#   set_package_rootpackage_rootoutputr   getr!   r7   serveOSErrorr$   	verbosityr"   filecleanup	fast_exitr   	hard_exit)rJ   argsfbufoptions_dictr9   r;   r8   rh   serverexcr=   rY   r<   ctxrV   s                  @rC   mainr   T   s   /***%''944
R,,,T""D
 
d	&	& #!""# # # # # # # # # # # # # # #S>>L%))*>CC$(()<bAAii%%l33G"K(ABBF+s## 	qIbikkf>TUUWXYYYGGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	    9;9993??? GW1222,K%n4dd.:LW^:\:\O@@@@'  F !35FPW
X
XC	 	 	&#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	\" @ @ @!!93??? D D Dc6;67CCCCCCCCD 	 q s   7"B%%B),B).F >AFF FF FF 
F>$F99F>;I& =II& II& !I"I& %K &K7JK K$K<K KK K4r~   r   expected_tagr   boolc                    t          |           }|t          k    rt          |           rJ dS ||k    sJ d|             dS )z+Check if the message is a shutdown request.TzUnexpected tag: F)r   r	   r   )r~   r   tags      rC   should_shutdownr      sY    
3--C
!!! %%%%%t, 83 8 85rE   r   r%   r   c                4
   t          |           }t          |t                    rdS t          j        |          j        }t          ||          dS t          | t                                 t          |           }t          |t                    rdS t          j                    dk    rt          j                     t          j        |          }xj        |j        z  c_        |j        }|D ]}||         j        j        |<   j                            j                   t          | t                                 t          |           }t          |t,                    rdS t/          j        |          j        }d |D             _        d |D             _        t          j                    dk    r&t          j                     t          j                     t          | t                                 	 t;          j                    }t=          | gt>                     t;          j                    }	t          |           }tA          |          tB          k    sJ tE          j        |          }
#                    |	|z
  t;          j                    |	z
             |
j$        }|set          j%                    }#                    |d         d         |d	         d         |d
         d                    &                                 dS fd|D             }g }|D ]}|'                    |j(                   t;          j                    }	 tS          |||
j*        |
j+                   g }|D ]C}tY          |||j-                  }|'                    |           .                                 D	 i }g }g }|D ]5\  }}}|/                    |           |||<   |/                    |           6ta          |d|          }tc          | |           	 i }te          ||          D ]\  }}|tg          ||g|g          z  }.                                 ta          |d|          }n)# th          $ r}ta          |d|          }Y d}~nd}~ww xY wtc          | |           n:# th          $ r-}ta          |d|          }tc          | |           Y d}~nd}~ww xY w#                    t;          j                    |z
  d	           )zMain server loop of the worker.

    Receive initial state from the coordinator, then process each
    SCC checking request and reply to client (coordinator). See module
    docstring for more details on the protocol.
    NrL   c                    i | ]
}|j         |S rI   id.0sccs     rC   
<dictcomp>zserve.<locals>.<dictcomp>   s    555555rE   c                    g | ]	}|j         
S rI   r   r   s     rC   
<listcomp>zserve.<locals>.<listcomp>   s    000C000rE   T)scc_wait_timescc_receive_timer   collectionsrZ      )gc_collections_gen0gc_collections_gen1gc_collections_gen2c                *    g | ]}j         |         S rI   )	scc_by_id)r   scc_idmanagers     rC   r   zserve.<locals>.<listcomp>   s!    @@@f!&)@@@rE   )
from_cache)scc_idsis_interfaceresultF)r   r   blocker)total_process_stale_timestale_sccs_processed)5r'   r   r   r   re   sourcessetup_worker_managerr(   r   r   r]   r^   r_   disabler   missing_modulesgraphdependencies_set
import_mappluginset_modulesmodulesr
   r   sccsr   	top_orderfreezeenabletimer&   r   r   r	   r   	add_statsr   	get_stats
dump_statsextendmod_idsload_statesimport_errorsmod_datar   r   commitappendr   
timed_sendzipr   r   )r   r   r~   r   
graph_datar   r   r   t0t1scc_messager   gc_statsr   r   results
scc_resultmod_resultsstale
meta_files
mod_result	meta_filemessager   r   r   s                            @rC   ru   ru      sx    &//Cs011  %c**2G"7C00G 	
&//CsM**  %''944

"300Jz99E < <!&r!;2Nw/// 	
&//Cs-.. $$)D55555G004000G%''944
	
	 	;]Y[[vh 3444Y[[foo}} 33333',S11R$)++PRBRSSS% 		|~~H$,QK$>$,QK$>$,QK$>    
    E@@@@@@@ 	( 	(CNN3;''''Y[["	11JKL`aaaG ! !83J4I  
 z***    ! KEJ-4 - -)J	R   ",B!!),,,,(tT_```Gw000
a24%(
%;%; b bMB	>urdGV_U`aaaFF    -W5Y_```   c c c,W5Zabbbc w00001  	1 	1 	1(tU\]]]Gw00000000	12 	49;;3CZ[\\\w;]s2   A%R3 "AQ8 8
RRR3
S*=#S%%S*r   r   r   r   c                    t          j                     }t          ||           |                     t          j                     |z
             d S )N)scc_send_time)r   r(   r   )r   r   r   r   s       rC   r   r     sE    	BDIKK"$455555rE   r   r   r   r   dict[str, list[ErrorInfo]]r   +dict[str, tuple[bytes, FileRawData | None]]c                l   t          j                    dk    r&t          j                     t          j                     g }| D ]n}||         }|j                            |j                  |_        ||         \  }}	|	|                    |	           n|	                    |           ||_
        o|r|                    |d           | D ]}||         }|j        J d |j        j        D             fd|j        j                                        D             |_        ||v rK|j                            |j        ||j                   ||         D ]}
|j                            |
           t          j                    dk    r(t          j                     t          j                     dS dS )zDRe-create full state of an SCC as it would have been in coordinator.rL   N)raw_dataF)
post_parsec                    h | ]	}|j         
S rI   )line)r   imps     rC   	<setcomp>zload_states.<locals>.<setcomp>,  s    ???S???rE   c                $    i | ]\  }}|v 	||S rI   rI   )r   r   codesimport_liness      rC   r   zload_states.<locals>.<dictcomp>-  s1     !
 !
 !
'D%tWcOcOcD%OcOcOcrE   )r]   r^   r_   collectr   r8   clone_for_moduler   
parse_filer   known_suppressed_deps_opts	parse_alltreeimportsignored_linesitemsimports_ignoredr<   set_filexpathadd_error_infor   r   )r   r   r   r   r   needs_parser   statesuppressed_deps_optsr   err_infor   s              @rC   r   r     s    %''944 	


K 
@ 
@b	66ux@@)1"&hh////u%%%+?(( 9+%888 8 8b	z%%%??EJ,>???!
 !
 !
 !
+0:+C+I+I+K+K!
 !
 !
 N##EKU]CCC)"- 8 8--h7777%''944
	
	 54rE   r   list[BuildSource]BuildManager | Nonec                   t           j                            t           j                            t                              }t           j                            d          }t          | |j        ||          }t          |           }	 t          |j        |j
        t          j        g           \  }}n# t          $ r Y d S w xY w|j        }|j        |_        |j        |_        |                    d            dd}		 t#          ||t          j                    |d |t&          |||j
        |j        d nt+          j        |j                  |	|j        t          j        t          j        d          S # t          $ r Y d S w xY w)NMYPY_ALT_LIB_PATHc                    d S rA   rI   )msgs    rC   rW   z&setup_worker_manager.<locals>.<lambda>K  s    4 rE   )error_callbackfilename
str | Nonenew_messagesr:   
is_seriousr   r>   r?   c                    d S rA   rI   )r   r   r   s      rC   flush_errorsz*setup_worker_manager.<locals>.flush_errorsM  s    rE   T)ignore_prefix
source_setreportsr8   
version_idr   plugins_snapshotr<   rY   r   r=   stdoutstderrparallel_worker)r   r   r   r:   r   r   r>   r?   )rl   rU   dirname__file__environrt   r+   r8   r*   r   r<   r[   r   r   r9   r;   process_error_codesr   getcwdr0   rs   r   r=   r   )
r   r   data_diralt_lib_pathsearch_pathsr   r   snapshotr8   r   s
             rC   r   r   :  s   wrwx8899H:>>"566L'hUUL((J'SZRPP   tt
 kG!$!7G # 5G/?/?@@@   )++!"%:$+N$:DD@RSZSa@b@b%K:: !
 
 
 	
$    tts%   )B2 2
C ?C >A2E1 1
E?>E?c                 H    t          t          j        dd                     d S )NrZ   )r   r[   rJ   rI   rE   rC   console_entryr  h  s     !""rE   )rJ   r:   r>   r?   )r~   r   r   r   r>   r   )r   r%   r   r7   r>   r?   )r   r   r   r%   r   r   r>   r?   )r   r:   r   r   r   r   r   r   r   r   r>   r?   )r   r   r   r7   r>   r   )r>   r?   )Q__doc__
__future__r   argparser_   rj   rl   r]   r[   r   typingr   librt.internalr   r   mypyr   
mypy.buildr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   
mypy.cacher   r   r   mypy.defaultsr   r   r   mypy.error_formatterr   mypy.errorsr   r    r!   r"   mypy.fscacher#   mypy.ipcr$   r%   r&   r'   r(   mypy.modulefinderr)   r*   r+   
mypy.nodesr,   mypy.optionsr-   	mypy.utilr/   mypy.versionr0   ArgumentParserra   add_argumentri   r7   r   r   ru   r   r   r   r  rI   rE   rC   <module>r      s     # " " " " "  				  				  



        / / / / / / / /                                         $ 5 4 4 4 4 4 4 4 4 4 Y Y Y Y Y Y Y Y Y Y / / / / / / N N N N N N N N N N N N ( ( ( ( ( ( J J J J J J J J J J J J J J O O O O O O O O O O " " " " " "             " " " " " " $ $ $ $ $ $	 	 mAT	U	U	U   O*U  V V V   $+N  O O O & & & & & & & & 5 5 5 5p   m] m] m] m]`6 6 6 6+ + + +\+ + + +\     rE   