
    Ng/"                         d dl Z d dl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 d dlZd dlmZ d dlmZ d dlmZmZmZ d dlmZ  G d	 d
eee          Z G d de          Z G d dee          ZdS )    N)ABC)datetime)AnyCallableDictIteratorListLiteralOptionalUnionDocumentget_from_dict_or_env)	BaseModelfield_validatormodel_validator)
BaseLoaderc                       e Zd ZU dZeed<   	 eed<   	 dZeed<   	  ed          ede	d	e
fd
                        Zed	e	eef         fd            ZdS )BaseGitHubLoaderz Load `GitHub` repository Issues.repoaccess_tokenzhttps://api.github.comgithub_api_urlbefore)modevaluesreturnc                 .    t          |dd          |d<   |S )z1Validate that access token exists in environment.r   GITHUB_PERSONAL_ACCESS_TOKENr   )clsr   s     g/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/document_loaders/github.pyvalidate_environmentz%BaseGitHubLoader.validate_environment   s'     "6N$B"
 "
~     c                     dd| j          dS )Nzapplication/vnd.github+jsonzBearer )AcceptAuthorization)r   selfs    r!   headerszBaseGitHubLoader.headers!   s$     4:t'8::
 
 	
r#   N)__name__
__module____qualname____doc__str__annotations__r   r   classmethodr   r   r"   propertyr)    r#   r!   r   r      s         **
IIIR2NC222_(###$ 3    [ $# 
c3h 
 
 
 X
 
 
r#   r   c                   T   e Zd ZU dZdZeed<   	 dZee	e
d         df         ed<   	 dZee
d                  ed<   	 dZee         ed	<   	 dZee         ed
<   	 dZee         ed<   	 dZeee                  ed<   	 dZee
d                  ed<   	 dZee
d                  ed<   	 dZee         ed<   	 dZee	         ed<   	 dZee	         ed<   	  ed          edee         dee         fd                        Zdee         fdZdedefdZe defd            Z!e defd            Z"dS )GitHubIssuesLoaderz#Load issues of a GitHub repository.Tinclude_prsN)*none	milestone)openclosedallstateassigneecreator	mentionedlabels)createdupdatedcommentssort)ascdesc	directionsincepageper_pagevr   c                 x    |r7	 t          j        |d           n # t          $ r t          d|           w xY w|S )Nz%Y-%m-%dT%H:%M:%SZz\Invalid value for 'since'. Expected a date string in YYYY-MM-DDTHH:MM:SSZ format. Received: )r   strptime
ValueError)r    rK   s     r!   validate_sincez!GitHubIssuesLoader.validate_sinceL   sq      	!!%9::::    B>?B B  
 s    7c              #     K   | j         }|rt          j        || j                  }|                                 |                                }|D ]0}|                     |          }| j        s|j        d         r,|V  1|j	        r<|j	                            d          r"| j
        s| j        s|j	        d         d         }nd}|dS dS )a  
        Get issues of a GitHub repository.

        Returns:
            A list of Documents with attributes:
                - page_content
                - metadata
                    - url
                    - title
                    - creator
                    - created_at
                    - last_update_time
                    - closed_time
                    - number of comments
                    - state
                    - labels
                    - assignee
                    - assignees
                    - milestone
                    - locked
                    - number
                    - is_pull_request
        r)   is_pull_requestnexturlN)rT   requestsgetr)   raise_for_statusjsonparse_issuer5   metadatalinksrI   rJ   )r(   rT   responseissuesissuedocs         r!   	lazy_loadzGitHubIssuesLoader.lazy_loadY   s     0 "X 	|C>>>H%%''']]__F  &&u--' CL9J,K 				N&&v..  ,0=
 nV,U3!  	 	 	 	 	r#   r^   c                 N   |d         |d         |d         d         |d         |d         |d         d |d	         D             |d
         r|d
         d         nd|d         r|d         d         nd|d         |d         d|v d}|d         |d         nd}t          ||          S )z5Create Document objects from a list of GitHub issues.html_urltitleuserlogin
created_atrC   r<   c                     g | ]
}|d          S )namer2   ).0labels     r!   
<listcomp>z2GitHubIssuesLoader.parse_issue.<locals>.<listcomp>   s    BBBuV}BBBr#   r@   r=   Nr8   lockednumberpull_request)rT   rc   r>   rf   rC   r<   r@   r=   r8   rl   rm   rR   body page_contentrZ   r   )r(   r^   rZ   contents       r!   rY   zGitHubIssuesLoader.parse_issue   s     $7^V}W--j)7^BB%/BBB6;J6GQj)'22T8=k8JT{+G44PTHoHo-6
 
 $)=#<%--"Wx@@@@r#   c                 <   | j         rd                    | j                   n| j         }| j        | j        | j        | j        | j        || j        | j        | j	        | j
        | j        d}d |                                D             }d                    |          }|S )z'Create query parameters for GitHub API.,)r8   r<   r=   r>   r?   r@   rD   rG   rH   rI   rJ   c                 &    g | ]\  }}|| d| S )N=r2   )ri   krK   s      r!   rk   z3GitHubIssuesLoader.query_params.<locals>.<listcomp>   s.     
 
 
1aqJJ1JJr#   &)r@   joinr8   r<   r=   r>   r?   rD   rG   rH   rI   rJ   items)r(   r@   query_params_dictquery_params_listquery_paramss        r!   r~   zGitHubIssuesLoader.query_params   s     +/+F$+&&&4;Z|IZI
 

 
#4#:#:#<#<
 
 
 xx 122r#   c                 4    | j          d| j         d| j         S )zCreate URL for GitHub API./repos/z/issues?)r   r   r~   r'   s    r!   rT   zGitHubIssuesLoader.url   s(     %TTdiTTARTTTr#   )#r*   r+   r,   r-   r5   boolr/   r8   r   intr
   r<   r   r=   r.   r>   r?   r@   r	   rD   rG   rH   rI   rJ   r   r0   rO   r   r   r`   dictrY   r1   r~   rT   r2   r#   r!   r4   r4   )   sH        --KJ8<IuS'+.45<<< 9=E8G345<<<H"Hhsm"""P!GXc]!!!4#Ix}###9"&FHT#Y&&&;@DD(7;<
=DDD!26Ix./666ME8C=ID(3-,"Hhsm"""- _W	x} 	# 	 	 	 [ 	)8H- ) ) ) )VA A( A A A A& c    X, US U U U XU U Ur#   r4   c                       e Zd ZU dZdZeed<   eeege	f                  ed<   de
e         fdZdedefdZdee         fd	Zd
S )GithubFileLoaderzLoad GitHub Filemainbranchfile_filterr   c                       j          d j         d j         d}t          j        | j                  }|                                 |                                d         }	  fd|D             S )Nr   z/git/trees/z?recursive=1rQ   treec                 X    g | ]&}j         r                     |d                    $|'S )path)r   )ri   fr(   s     r!   rk   z3GithubFileLoader.get_file_paths.<locals>.<listcomp>   sN     
 
 
$
 .2-=-=ai-H-H

 
 
r#   )r   r   r   rU   rV   r)   rW   rX   )r(   base_urlr\   	all_filess   `   r!   get_file_pathszGithubFileLoader.get_file_paths   s    " ) )49 ) ){) ) ) 	 <$,???!!###MMOOF+		
 
 
 

 
 
 	
r#   r   c                    | j         r
d| j          nd}| j         d| j         d| | }t          j        || j                  }|                                 t          |                                t                    rA|                                d         }t          j        |                              d          S dS )Nz?ref=rp   r   z
/contents/rQ   rs   zutf-8)r   r   r   rU   rV   r)   rW   
isinstancerX   r   base64	b64decodedecode)r(   r   queryparamsr   r\   content_encodeds         r!   get_file_content_by_pathz)GithubFileLoader.get_file_content_by_path   s    /3{B+dk+++"SS49SSSkSS 	 <$,???!!###hmmoot,, 	E&mmooi8O#O44;;GDDDrr#   c              #     K   |                                  }|D ]r}|                     |d                   }|dk    r$|d         |d         | j         d| j         d|d          d| j         d|d          	d}t          ||          V  sd S )Nr   rp   sha/type)r   r   sourcerq   )r   r   r   r   r   r   )r(   filesfilers   rZ   s        r!   r`   zGithubFileLoader.lazy_load   s      ##%% 	D 	DD33DLAAG"}} VE{!0 0 049 0 0tF| 0 0;0 0!%f0 0 H (CCCCCCC	D 	Dr#   N)r*   r+   r,   r-   r   r.   r/   r   r   r   r	   r   r   r   r   r   r`   r2   r#   r!   r   r      s         FC(C5$;/0000
T
 
 
 
 
.S S    D8H- D D D D D Dr#   r   )r   abcr   r   typingr   r   r   r   r	   r
   r   r   rU   langchain_core.documentsr   langchain_core.utilsr   pydanticr   r   r   )langchain_community.document_loaders.baser   r   r4   r   r2   r#   r!   <module>r      sv                P P P P P P P P P P P P P P P P P P P P  - - - - - - 5 5 5 5 5 5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
 
 
 
 
z9c 
 
 
6HU HU HU HU HU) HU HU HUV9D 9D 9D 9D 9D' 9D 9D 9D 9D 9Dr#   