
    {h                     x    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
  G d d      Z G d d      Zy)    N)Path)GITHUB_BRANCHTOOLS_SUBFOLDERc                   *    e Zd ZddedefdZd Zd Zy)GithubRepoClonerbase_urlbranchc                 b   || _         t        j                         | _        t        j
                  j                  | j                  t        j
                  j                  |      j                  dd            | _	        t        j
                  j                  | j                  t              | _        y )Nz.git )repo_urltempfilemkdtemptemp_dirospathjoinbasenamereplace	repo_pathr   
tools_path)selfr   r	   s      W/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/atomic_assembler/utils.py__init__zGithubRepoCloner.__init__   sk      ((*dmmRWW5E5Eh5O5W5WX^`b5cd'',,t~~G    c                 4   	 t         j                  j                  | j                  | j                  t
              }t        j                  d| j                   dt
                y # t         j                  $ r}t        j                  d|         d }~ww xY w)N)r	   zRepository cloned to z on branch zFailed to clone repository: )
gitRepo
clone_fromr   r   r   logginginfoGitCommandErrorerror)r   _es      r   clonezGithubRepoCloner.clone   sv    	##DMM4>>-#XALL00@M?[\"" 	MM8<=	s   A#A& &B9BBc                 F    t        j                  | j                  d       y )NT)ignore_errors)shutilrmtreer   )r   s    r   cleanupzGithubRepoCloner.cleanup   s    dmm48r   N)main)__name__
__module____qualname__strr   r%   r*    r   r   r   r      s"    H Hc H9r   r   c                       e Zd Zed        Zededee   fd       Zed        Z	ede
defd       Zededefd	       Zy
)AtomicToolManagerc                     t         j                  j                  | d      }	 t        |d      5 }t	        j
                  |      cd d d        S # 1 sw Y   y xY w# t        $ r Y y t        $ r}d| cY d }~S d }~ww xY w)Nzconfig.yamlrzError reading config file: )r   r   r   openyaml	safe_loadFileNotFoundError	Exception)	tool_pathconfig_pathfr$   s       r   read_tool_configz"AtomicToolManager.read_tool_config    so    ggll9m<	5k3' )1~~a() ) )  	 	5044	5s@   A A	A AA A 	A;$A;,A60A;6A;r   returnc                 4   g }t        j                  |       D ]}  }t         j                  j                  | |      }t         j                  j	                  |      sCdj                  d |j                  d      D              }|j                  ||d        |S )a  
        Get a list of atomic tools from the given tools path.

        Args:
            tools_path (str): The path to the directory containing atomic tools.

        Returns:
            list[dict]: A list of dictionaries containing tool information.
         c              3   <   K   | ]  }|j                           y w)N)
capitalize).0words     r   	<genexpr>z5AtomicToolManager.get_atomic_tools.<locals>.<genexpr>;   s     $S4T__%6$Ss   r#   )namer   )r   listdirr   r   isdirsplitappend)r   toolsitem	item_path	tool_names        r   get_atomic_toolsz"AtomicToolManager.get_atomic_tools+   s     JJz* 
	DZ6Iww}}Y'HH$S4::c?$SS	 ) )
	 r   c           
         t        j                  d|  d|        	 t        j                  j	                  |       }t        j                  j                  ||      }t        j                  d|  d|        t        j                  j                  |       s&t        j                  d|         t        d|        t        j                  j                  |      s&t        j                  d|        t        d|       t        j                  | |t        j                  ddd	d
             t        j                  d|        |S # t        $ r6}t        j                  dt        |       d       t        d|       d }~ww xY w)Nz(copy_atomic_tool called with tool_path: z, destination: zCopying tool from z to zSource path does not exist: z!Destination path does not exist: zrequirements.txtzpyproject.tomlz.coveragerczpoetry.lock)ignorezTool successfully copied to zError copying tool: T)exc_info)r   r    r   r   r   r   existsr"   r8   r(   copytreeignore_patternsr9   r/   )r:   destinationrN   local_tool_pathr$   s        r   copy_atomic_toolz"AtomicToolManager.copy_atomic_toolD   sX   ?	{/ZeYfgh	8((3I ggll;	BOLL-i[_<MNO77>>), <YKHI'*Fyk(RSS77>>+. A+OP'*KK=(YZZOO--.@BRTacpq
 LL77HIJ"" 	8MM0Q9DI21#677	8s   D+E	 		F1FF	file_pathc                 8   i }| j                         rzt        | d      5 }|D ]]  }|j                         }|s|j                  d      r(|j	                  dd      \  }}|j                         ||j                         <   _ 	 ddd       |S |S # 1 sw Y   |S xY w)z,Load environment variables from a .env file.r4   #=   N)rS   r5   strip
startswithrI   )rY   env_varsfilelinekeyvalues         r   load_env_filezAtomicToolManager.load_env_file_   s     i% >  >D::<DDOOC$8%)ZZQ%7
U05-	>> x> s   BB
8BBr:   c                    t         j                  j                  | d      }	 t        |dd      5 }|j	                         cddd       S # 1 sw Y   yxY w# t
        $ r Y yt        $ r}dt        |       cY d}~S d}~ww xY w)z
        Read the README.md file from the tool directory.

        Args:
            tool_path (str): The path to the tool directory.

        Returns:
            str: The contents of the README.md file, or an error message if not found.
        z	README.mdr4   zutf-8)encodingNz"README.md not found for this tool.zError reading README.md: )r   r   r   r5   readr8   r9   r/   )r:   readme_pathr<   r$   s       r   read_readmezAtomicToolManager.read_readmel   st     ggll9k:	8k39  Qvvx       	87 	8.s1vh77	8s@   A A
 	A 
AA A 	B!B)A<6B<BN)r,   r-   r.   staticmethodr=   r/   listdictrO   rX   r   re   rj   r0   r   r   r2   r2      s    5 5 S T$Z  0 8 84 
 
$ 
 
 8s 8s 8 8r   r2   )r   r   r(   r   r   r6   pathlibr   atomic_assembler.constantsr   r   r   r2   r0   r   r   <module>rp      s3     	   
   E9 9&_8 _8r   