
    $jC                        d Z ddlmZ ddlZddlZddlmZ ddlZddlm	Z	 ddl
mZ  ee          ZdZdZd	ZdddZdddZdddZdddZdddZddZdS ) z'Version checking utilities for FastMCP.    )annotationsN)Path)Version)
get_loggerz"https://pypi.org/pypi/fastmcp/jsoni  g       @Finclude_prereleasesboolreturnr   c                <    ddl }| rdnd}|j        j        d| dz  S )z'Get the path to the version cache file.r   N_prerelease version_cachez.json)fastmcpsettingshome)r   r   suffixs      g/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fastmcp/utilities/version_check.py_get_cache_pathr      s6    NNN19]]rF #@6#@#@#@@@    tuple[str | None, float]c                *   t          |           }|                                sdS 	 t          j        |                                          }|                    d          |                    dd          fS # t          j        t          f$ r Y dS w xY w)zyRead cached version info.

    Returns:
        Tuple of (cached_version, cache_timestamp) or (None, 0) if no cache.
    )Nr   latest_version	timestampr   )r   existsjsonloads	read_textgetJSONDecodeErrorOSError)r   
cache_pathdatas      r   _read_cacher"      s     !!455J wz*..0011xx())488K+C+CCC '*   wws   AA8 8BBr   strNonec                    t          |          }	 |j                            dd           |                    t	          j        | t          j                    d                     dS # t          $ r Y dS w xY w)zWrite version info to cache.T)parentsexist_ok)r   r   N)r   parentmkdir
write_textr   dumpstimer   )r   r   r    s      r   _write_cacher-   .   s     !455Jt<<<J.ty{{SSTT	
 	
 	
 	
 	
    s   AA* *
A87A8
str | Nonec                   	 t          j        t          t                    }|                                 |                                }|                    di           }|sdS g }|D ]^}	 t          |          }| s|j        r|                    |           2# t          $ r  t                              d|            Y [w xY w|sdS t          t          |                    S # t           j        t
          j        t           f$ r Y dS w xY w)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!   r1   versionsversion_strvs          r   _fetch_latest_versionrB   ;   s6   9X/FGGG!!###}}88J++ 	4# 		 		KK((* q """"   NNNOOO  	43x==!!!OT18<   ttsN   A C' $C' +BC' BC' 'CC' CC' C' '!DDc                    t          |           \  }}|r!t          j                    |z
  t          k     r|S t          |           }|rt	          ||            |S |S )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"   r,   CACHE_TTL_SECONDSrB   r-   )r   cached_versioncache_timestampr   s       r   get_latest_versionrG   b   st     '22E&F&F#NO 49;;8<MMM ++>??N  ^%8999 r   c                 ,   ddl } | j        j        }|dk    rdS |dk    }t          |          }|sdS 	 t	          | j                  }t	          |          }||k    r|S n5# t          $ r( t                              d| j        d|           Y nw xY wdS )zCheck if a newer version of FastMCP is available.

    Returns:
        The latest version string if newer than current, None otherwise.
    r   Noff
prereleasez$Could not compare versions: current=z	, latest=)	r   r   check_for_updatesrG   r   __version__r8   r9   r:   )r   settingr   r   currentlatests         r   check_for_newer_versionrP   |   s     NNN0G%t!\1'(;<<N t

'-..((G!!  
 
 
)73F ) )$) )	
 	
 	
 	
 	

 4s   *A /BB)F)r   r   r	   r   )r   r   r	   r   )r   r#   r   r   r	   r$   )r   r   r	   r.   )r	   r.   )__doc__
__future__r   r   r,   pathlibr   r2   packaging.versionr   fastmcp.utilities.loggingr   __name__r9   r3   rD   r4   r   r"   r-   rB   rG   rP    r   r   <module>rX      s/   - - " " " " " "          % % % % % % 0 0 0 0 0 0	H		/   A A A A A    "
 
 
 
 
$ $ $ $ $N    4     r   