o
    _:ofi                     @   s   d dl Zd dlm  m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Zd dlZdd Zdd Zdd Zd	d
 ZedkrIe Zee dS dS )    N)datetimec           
      C   s   t | ddd}| }W d    n1 sw   Y  t| }tdd | D }t|}tdd |jD }tt	
d|}tt	d|}dd	 t|D }	||||||	fS )
Nrutf-8)encodingc                 s   s"    | ]}|  d rdV  qdS )#   N)strip
startswith).0line r   A/workspaces/Masterarbeit/4_is_valid_variable_name/measure_data.py	<genexpr>        z'extract_code_metrics.<locals>.<genexpr>c                 s   s"    | ]}t |tjtjfV  qd S )N)
isinstanceastImport
ImportFromr
   noder   r   r   r      r   z\bdef\s+test_c                 S   s   g | ]}t |tjr|jqS r   )r   r   FunctionDefnamer   r   r   r   
<listcomp>   s    z(extract_code_metrics.<locals>.<listcomp>)openreadlen
splitlinessumr   parsebodyboolresearchfindallwalk)
	file_pathfilecodecode_lengthcomment_counttreeimport_countunwanted_test_casestest_case_countfunction_defsr   r   r   extract_code_metrics	   s   

r/   c                 C   sT   t jd| gddd}|j}ttd|}ttd|}td|tj}|||fS )NpytestT)capture_outputtextz(\d+) passedz(\d+) failedzERROR.*?\n(.*?)\n)
subprocessrunstdoutr   r!   r#   DOTALL)r%   resultoutputpassed_testsfailed_testserror_messagesr   r   r   
run_pytest    s   
r<   c                 C   sJ   t   }tjd| gtjtjd}| \}}t   }|| }||dfS )Npython)r5   stderrr   )timer3   PopenPIPEcommunicatedecode)r%   Z
start_timeprocessr5   r>   end_timeexecution_timer   r   r   measure_performance(   s   rG   c                 C   sn  g }t | D ]\}}}|D ]}|drt j||}td|  z[t|\}}}	}
}}t|\}}}t|\}}|	i d|dt
 dddddd	d
dd
d|d|d|	d|d|d|d|d|
d|dddd|d
d W q ty } ztd| d|  W Y d }~qd }~ww qq|rt|}|jddd td d S td d S )Nz.pyzProcessing file: zTestlauf-IDz
Datum/Zeitz%Y-%m-%d %H:%M:%SzPrompting-TechnikZUnknownZProgrammieraufgabeZAntworttext Z
Codeauszugu   Länge des CodeszKommentare im Codez$Anzahl der importierten Bibliothekenu   Bestanden Testfälleu   Nicht bestandene TestfälleZFehlermeldungenu   Ausführungszeitu"   Unerwünschte Testfälle vorhandenu    Anzahl unerwünschter TestfälleZ
LesbarkeitZStrukturiertheit)zBesondere BeobachtungenzManuelle AnpassungenzError processing file z: zcode_metrics.csvF)indexz;Data extraction complete. Results saved to code_metrics.csvzNo data to save.)osr$   endswithpathjoinprintr/   r<   rG   appendr   nowstrftime	ExceptionpdZ	DataFrameZto_csv)	directorydatarootdirsfilesr&   r%   r(   r)   r+   r,   r-   r.   r9   r:   r;   rF   Zruntime_errorseZdfr   r   r   main0   sv   
	
 !
rZ   __main__)builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arrJ   r!   r?   r3   r   ZpandasrS   r   r/   r<   rG   rZ   __name__getcwdZcurrent_directoryr   r   r   r   <module>   s   " +