
    KiC                        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y)z'Version checking utilities for FastMCP.    )annotationsN)Path)Version)
get_loggerz"https://pypi.org/pypi/fastmcp/jsoni  g       @c                P    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)include_prereleasesr   suffixs      k/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/fastmcp/utilities/version_check.py_get_cache_pathr      s.    1]rF  ]6(%#@@@    c                   t        |       }|j                         sy	 t        j                  |j	                               }|j                  d      |j                  dd      fS # t        j                  t        f$ r Y y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      sw     !!45Jzz*..01xx()488K+CCC  '* s   AA$ $B ?B c                    t        |      }	 |j                  j                  dd       |j                  t	        j
                  | t        j                         d             y# t        $ r Y y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(   .   sd     !45Jt<JJ.tyy{ST	
  s   AA$ $	A0/A0c                   	 t        j                  t        t              }|j	                          |j                         }|j                  di       }|syg }|D ].  }	 t        |      }| s|j                  r|j                  |       0 |syt        t        |            S # t        $ r t        j                  d|        Y kw xY w# t         j                  t
        j                  t         f$ r Y y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debugstrmax	HTTPErrorr   KeyError)r   responser   r+   versionsversion_strvs          r   _fetch_latest_versionr=   ;   s    99X/FG!!#}}88J+# 		KK(*q"		 3x=!!  @NO OOT118< sN   AC	 C	 B"7C	 8B"	C	 C	 "!CC	 CC	 	(C43C4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_SECONDSr=   r(   )r   cached_versioncache_timestampr   s       r   get_latest_versionrB   b   s[     '22E&F#NO499;8<MM ++>?N ^%89 r   c                 $   ddl } | j                  j                  }|dk(  ry|dk(  }t        |      }|sy	 t	        | j
                        }t	        |      }||kD  r|S 	 y# t        $ r( t        j                  d| j
                  d|       Y yw xY w)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_updatesrB   r   __version__r2   r3   r4   )r   settingr   r   currentlatests         r   check_for_newer_versionrK   |   s     00G%!\1'(;<N

'--.(G!!    
273F3F2I J$')	

 
s   &A .BB)F)r   boolreturnr   )r   rL   rM   ztuple[str | None, float])r   r5   r   rL   rM   None)r   rL   rM   
str | None)rM   rO   )__doc__
__future__r   r   r'   pathlibr   r,   packaging.versionr   fastmcp.utilities.loggingr   __name__r3   r-   r?   r.   r   r   r(   r=   rB   rK    r   r   <module>rW      sX    - "     % 0	H	/   A"
$N4r   