<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    ÍAÒ[Ñ  ã               @   s‚   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z
mZ e
e_	ee_dgZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZdS )é    )Úabsolute_importÚdivisionÚunicode_literals)Ústr)Úurllib)ÚparseÚrequestÚRobotFileParserc               @   sZ   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r	   zs This class provides a set of methods to read, parse and answer
    questions about a single robots.txt file.

    Ú c             C   s,   g | _ d | _d| _d| _|  |¡ d| _d S )NFr   )ÚentriesÚdefault_entryÚdisallow_allÚ	allow_allÚset_urlÚlast_checked)ÚselfÚurl© r   úT/opt/alt/python37/lib/python3.7/site-packages/future/backports/urllib/robotparser.pyÚ__init__   s    
zRobotFileParser.__init__c             C   s   | j S )z·Returns the time the robots.txt file was last fetched.

        This is useful for long-running web spiders that need to
        check for new robots.txt files periodically.

        )r   )r   r   r   r   Úmtime&   s    zRobotFileParser.mtimec             C   s   ddl }|  ¡ | _dS )zYSets the time the robots.txt file was last fetched to the
        current time.

        r   N)Útimer   )r   r   r   r   r   Úmodified/   s    zRobotFileParser.modifiedc             C   s&   || _ tj |¡dd… \| _| _dS )z,Sets the URL referring to a robots.txt file.é   é   N)r   r   r   ÚurlparseÚhostÚpath)r   r   r   r   r   r   7   s    zRobotFileParser.set_urlc          
   C   s|   yt j | j¡}W nH t jjk
rZ } z&|jdkr:d| _n|jdkrJd| _W dd}~X Y nX | 	¡ }|  
| d¡ ¡ ¡ dS )z4Reads the robots.txt URL and feeds it to the parser.)i‘  i“  Ti  Nzutf-8)r   r   Zurlopenr   ÚerrorZ	HTTPErrorÚcoder   r   Úreadr   ÚdecodeÚ
splitlines)r   ÚfÚerrÚrawr   r   r   r    <   s    

zRobotFileParser.readc             C   s,   d|j kr| jd kr(|| _n| j |¡ d S )NÚ*)Ú
useragentsr   r   Úappend)r   Úentryr   r   r   Ú
_add_entryI   s    

zRobotFileParser._add_entryc             C   st  d}t ƒ }xN|D ]D}|sL|dkr0t ƒ }d}n|dkrL|  |¡ t ƒ }d}| d¡}|dkrj|d|… }| ¡ }|sxq| dd¡}t|ƒdkr|d  ¡  ¡ |d< tj 	|d  ¡ ¡|d< |d dkrö|dkrà|  |¡ t ƒ }|j
 |d ¡ d}q|d dkr*|dkrX|j t|d d	ƒ¡ d}q|d d
kr|dkr|j t|d dƒ¡ d}qW |dkrp|  |¡ dS )z”Parse the input lines from a robots.txt file.

        We allow that a user-agent: line is not preceded by
        one or more blank lines.
        r   r   é   ú#Nú:z
user-agentZdisallowFZallowT)ÚEntryr*   ÚfindÚstripÚsplitÚlenÚlowerr   r   Úunquoter'   r(   Ú	rulelinesÚRuleLine)r   ÚlinesÚstater)   ÚlineÚir   r   r   r   R   sJ    





zRobotFileParser.parsec             C   s–   | j r
dS | jrdS tj tj |¡¡}tj dd|j|j|j	|j
f¡}tj |¡}|s\d}x"| jD ]}| |¡rd| |¡S qdW | jr’| j |¡S dS )z=using the parsed robots.txt decide if useragent can fetch urlFTr
   ú/)r   r   r   r   r   r4   Ú
urlunparser   ÚparamsÚqueryÚfragmentÚquoter   Ú
applies_toÚ	allowancer   )r   Ú	useragentr   Ú
parsed_urlr)   r   r   r   Ú	can_fetch…   s     
zRobotFileParser.can_fetchc             C   s   d  dd„ | jD ƒ¡S )Nr
   c             S   s   g | ]}t |ƒd  ‘qS )Ú
)r   )Ú.0r)   r   r   r   ú
<listcomp>   s    z+RobotFileParser.__str__.<locals>.<listcomp>)Újoinr   )r   r   r   r   Ú__str__œ   s    zRobotFileParser.__str__N)r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r    r*   r   rE   rJ   r   r   r   r   r	      s   
		3c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r6   zoA rule line is a single "Allow:" (allowance==True) or "Disallow:"
       (allowance==False) followed by a path.c             C   s(   |dkr|sd}t j |¡| _|| _d S )Nr
   T)r   r   r@   r   rB   )r   r   rB   r   r   r   r   £   s    zRuleLine.__init__c             C   s   | j dkp| | j ¡S )Nr&   )r   Ú
startswith)r   Úfilenamer   r   r   rA   ª   s    zRuleLine.applies_toc             C   s   | j r
dpdd | j S )NZAllowZDisallowz: )rB   r   )r   r   r   r   rJ   ­   s    zRuleLine.__str__N)rK   rL   rM   rN   r   rA   rJ   r   r   r   r   r6       s   r6   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )r.   z?An entry has one or more user-agents and zero or more rulelinesc             C   s   g | _ g | _d S )N)r'   r5   )r   r   r   r   r   ³   s    zEntry.__init__c             C   sP   g }x| j D ]}| d|dg¡ qW x | jD ]}| t|ƒdg¡ q,W d |¡S )NzUser-agent: rF   r
   )r'   Úextendr5   r   rI   )r   ÚretÚagentr9   r   r   r   rJ   ·   s    zEntry.__str__c             C   sF   |  d¡d  ¡ }x.| jD ]$}|dkr*dS | ¡ }||krdS qW dS )z2check if this entry applies to the specified agentr;   r   r&   TF)r1   r3   r'   )r   rC   rS   r   r   r   rA   ¿   s    zEntry.applies_toc             C   s$   x| j D ]}| |¡r|jS qW dS )zZPreconditions:
        - our agent applies to this entry
        - filename is URL decodedT)r5   rA   rB   )r   rP   r9   r   r   r   rB   Ì   s    

zEntry.allowanceN)rK   rL   rM   rN   r   rJ   rA   rB   r   r   r   r   r.   ±   s
   r.   N)Ú
__future__r   r   r   Zfuture.builtinsr   Zfuture.backportsr   Zfuture.backports.urllibr   Ú_parser   Z_requestÚ__all__Úobjectr	   r6   r.   r   r   r   r   Ú<module>   s    	