+
    Q(iC                        R t ^ RIHt ^ RIt^ RIt^ RIHt ^ RIt^ RIH	t	 ^ RI
Ht ]! ]4      tRtRtRtRR R	 lltRR
 R lltRR R lltRR R lltRR R lltR R ltR# )z'Version checking utilities for FastMCP.)annotationsN)Path)Version)
get_loggerz"https://pypi.org/pypi/fastmcp/jsong       @c                    V ^8  d   QhRRRR/# )   include_prereleasesboolreturnr    )formats   "e/Users/agent/.openclaw/workspace/venv/lib/python3.14/site-packages/fastmcp/utilities/version_check.py__annotate__r      s     A A A$ A    c                d    ^ RI pV '       d   RMRpVP                  P                  RV R2,          # )z'Get the path to the version cache file.N_prerelease version_cachez.json)fastmcpsettingshome)r   r   suffixs   &  r   _get_cache_pathr      s.    1]rF  ]6(%#@@@r   c                    V ^8  d   QhRRRR/# )r   r   r	   r
   ztuple[str | None, float]r   )r   s   "r   r   r      s      T 6N r   c                   \        V 4      pVP                  4       '       g   R#  \        P                  ! VP	                  4       4      pVP                  R4      VP                  R^ 4      3#   \        P                  \        3 d    Ru # i ; i)zmRead cached version info.

Returns:
    Tuple of (cached_version, cache_timestamp) or (None, 0) if no cache.
latest_version	timestamp)N    )r   existsjsonloads	read_textgetJSONDecodeErrorOSError)r   
cache_pathdatas   &  r   _read_cacher'      s~     !!45Jzz*..01xx()488K+CCC  '* s   AA, ,BBc               $    V ^8  d   QhRRRRRR/# )r   r   strr   r	   r
   Noner   )r   s   "r   r   r   .   s!     
 
 
4 
D 
r   c           	         \        V4      p VP                  P                  RRR7       VP                  \        P
                  ! RV R\        P                  ! 4       /4      4       R#   \         d     R# i ; i)zWrite version info to cache.T)parentsexist_okr   r   N)r   parentmkdir
write_textr   dumpstimer$   )r   r   r%   s   && r   _write_cacher3   .   si     !45Jt<JJ(.+tyy{ST	
  s   AA( (A76A7c                    V ^8  d   QhRRRR/# r   r   r	   r
   
str | Noner   )r   s   "r   r   r   ;   s     $ $t $
 $r   c                6    \         P                  ! \        \        R7      pVP	                  4        VP                  4       pVP                  R/ 4      pV'       g   R# . pV F<  p \        V4      pV '       g   VP                  '       d   K+  VP                  V4       K>  	  V'       g   R# \        \        V4      4      #   \         d    \        P                  RT 24        K  i ; i  \         P                  \
        P                  \         3 d     R# i ; i)zFetch the latest version from PyPI.

Args:
    include_prereleases: If True, include pre-release versions (alpha, beta, rc).

Returns:
    The latest version string, or None if the fetch failed.
)timeoutreleasesNz!Skipping invalid version string: )httpxr"   PYPI_URLREQUEST_TIMEOUT_SECONDSraise_for_statusr   r   is_prereleaseappend
ValueErrorloggerdebugr)   max	HTTPErrorr#   KeyError)r   responser&   r9   versionsversion_strvs   &      r   _fetch_latest_versionrJ   ;   s    99X/FG!!#}}88J+#KK(*q" $ 3x=!!  @NO OOT118< sN   AC* C* &$C C* C C* ,C*  #C'#C* &C''C* **DDc                    V ^8  d   QhRRRR/# r5   r   )r   s   "r   r   r   b   s      D Z r   c                    \        V 4      w  rV'       d(   \        P                  ! 4       V,
          \        8  d   V# \        V 4      pV'       d   \	        W04       V# V# )zGet the latest version of FastMCP from PyPI, using cache when available.

Args:
    include_prereleases: If True, include pre-release versions.

Returns:
    The latest version string, or None if unavailable.
)r'   r2   CACHE_TTL_SECONDSrJ   r3   )r   cached_versioncache_timestampr   s   &   r   get_latest_versionrP   b   sV     '22E&F#N499;8<MM ++>?N ^9 r   c                   V ^8  d   QhRR/# )r   r
   r6   r   )r   s   "r   r   r   |   s       r   c                 F   ^ RI p V P                  P                  pVR8X  d   R# VR8H  p\        V4      pV'       g   R#  \	        V P
                  4      p\	        V4      pWT8  d   V#  R#   \         d,    \        P                  RT P
                  : RT: 24        R# i ; i)zCheck if a newer version of FastMCP is available.

Returns:
    The latest version string if newer than current, None otherwise.
Noff
prereleasez$Could not compare versions: current=z	, latest=)	r   r   check_for_updatesrP   r   __version__r@   rA   rB   )r   settingr   r   currentlatests         r   check_for_newer_versionrZ   |   s     00G%!\1'(;<N

'--.(!!    
273F3F2I J$')	

 
s   'A* *2B B i  )F)__doc__
__future__r   r   r2   pathlibr   r:   packaging.versionr   fastmcp.utilities.loggingr   __name__rA   r;   rM   r<   r   r'   r3   rJ   rP   rZ   r   r   r   <module>ra      sX    - "     % 0	H	/   A"
$N4r   