Ë
    ³„éi|
  ã                  ó    — U d Z ddlmZ ddlZddlZddlmZ ddlmZ  ej                  e
«      Zi Zded<   dZd	ed
<   dd„Zdd„Zdd„Zddd„Zy)uœ  robots.txt ì •ì±… ì¤€ìˆ˜ ìœ í‹¸ë¦¬í‹°.

ì›¹ í¬ë¡¤ë§/ìŠ¤í¬ëž˜í•‘ ì „ ëŒ€ìƒ ì‚¬ì´íŠ¸ì˜ robots.txtë¥¼ ìžë™ìœ¼ë¡œ í™•ì¸í•œë‹¤.
ê²°ê³¼ëŠ” ë„ë©”ì¸(scheme://netloc) ë‹¨ìœ„ë¡œ TTL 1ì‹œê°„ ìºì‹œì— ë³´ê´€í•˜ì—¬
ë°˜ë³µ ë„¤íŠ¸ì›Œí¬ ìš”ì²­ì„ ë°©ì§€í•œë‹¤.

Usage:
    from utils.robots_policy import check_robots_txt

    if check_robots_txt("https://example.com/page"):
        # í¬ë¡¤ë§ ì§„í–‰
        ...
é    )ÚannotationsN)Úurlparse)ÚRobotFileParserz(dict[str, tuple[RobotFileParser, float]]Ú_robots_cacheg      ¬@ÚfloatÚ
_CACHE_TTLc                ó€   — t        | «      }|j                  r|j                  sy|j                  › d|j                  › S )u?   URLì—ì„œ scheme://netloc í˜•ì‹ì˜ ìºì‹œ í‚¤ë¥¼ ì¶”ì¶œí•œë‹¤.Nz://)r   ÚschemeÚnetloc)ÚurlÚparseds     úD/home/jay/workspace/.worktrees/task-2116-dev1/utils/robots_policy.pyÚ
_cache_keyr      s4   € äc‹]€FØ=Š= §¢ØØm‰mˆ_˜C §¡˜Ð/Ð/ó    c                ób   — t        «       }|j                  | › d«       |j                  «        |S )up   robots.txtë¥¼ fetchí•˜ì—¬ íŒŒì„œë¥¼ ë°˜í™˜í•œë‹¤.

    ë„¤íŠ¸ì›Œí¬ ì—ëŸ¬ëŠ” í˜¸ì¶œë¶€ì—ì„œ ì²˜ë¦¬í•œë‹¤.
    z/robots.txt)r   Úset_urlÚread)Úbase_urlÚparsers     r   Ú_fetch_robots_parserr   %   s-   € ô
 Ó€FØ
‡NNhZ˜{Ð+Ô,Ø
‡KK„MØ€Mr   c                ó~   — t         j                  | «      }|€y|\  }}t        j                  «       |z
  t        kD  ry|S )uJ   ìºì‹œì—ì„œ ìœ íš¨í•œ(TTL ì´ë‚´) íŒŒì„œë¥¼ ë°˜í™˜í•œë‹¤. ì—†ìœ¼ë©´ None.N)r   ÚgetÚtimeÚ	monotonicr   )r   Úentryr   Útss       r   Ú_get_cached_parserr   0   s?   € ä×Ñ˜hÓ'€EØ€}ØØJ€FˆBÜ‡~~Ó˜"ÑœzÒ)ØØ€Mr   c                ó4  — t        | «      }|€t        j                  d| «       yt        |«      }|€)	 t	        |«      }|t        j                  «       ft        |<   |j                  || «      S # t
        $ r!}t        j                  d||«       Y d}~yd}~ww xY w)u‹  robots.txt ì •ì±…ì— ë”°ë¼ URL í¬ë¡¤ë§ í—ˆìš© ì—¬ë¶€ë¥¼ ë°˜í™˜í•œë‹¤.

    Args:
        url:        í¬ë¡¤ë§ ëŒ€ìƒ URL (scheme í¬í•¨ í•„ìˆ˜).
        user_agent: í¬ë¡¤ëŸ¬ User-Agent ë¬¸ìžì—´. ê¸°ë³¸ê°’ '*' (ëª¨ë“  ë´‡).

    Returns:
        True  â€” í¬ë¡¤ë§ í—ˆìš© ë˜ëŠ” ì •ì±… í™•ì¸ ë¶ˆê°€(fail-open).
        False â€” robots.txtê°€ ëª…ì‹œì ìœ¼ë¡œ í•´ë‹¹ ê²½ë¡œë¥¼ ì°¨ë‹¨.
    Nu3   robots_policy: URL íŒŒì‹± ì‹¤íŒ¨, í—ˆìš© ì²˜ë¦¬: %sTu6   robots_policy: fetch ì‹¤íŒ¨ (í—ˆìš© ì²˜ë¦¬): %s â€” %s)r   ÚloggerÚdebugr   r   Ú	ExceptionÚwarningr   r   r   Ú	can_fetch)r   Ú
user_agentr   r   Úexcs        r   Úcheck_robots_txtr&   ;   s–   € ô ˜#‹€HØÐÜ‰ÐJÈCÔPØä Ó)€FØ€~ð	Ü)¨(Ó3ˆFð $*¬4¯>©>Ó+;Ð"<ŒhÑà×Ñ˜J¨Ó,Ð,øô ò 	ÜN‰NÐSÐU]Ð_bÔcÜûð	ús   ³A- Á-	BÁ6BÂB)r   ÚstrÚreturnz
str | None)r   r'   r(   r   )r   r'   r(   zRobotFileParser | None)Ú*)r   r'   r$   r'   r(   Úbool)Ú__doc__Ú
__future__r   Úloggingr   Úurllib.parser   Úurllib.robotparserr   Ú	getLoggerÚ__name__r   r   Ú__annotations__r   r   r   r   r&   © r   r   ú<module>r4      sX   ðòõ #ã Û Ý !Ý .à	ˆ×	Ñ	˜8Ó	$€ð ;=€Ð7Ó <Ø€
ˆEÓ ó0óóõ-r   