
    5pj%p                       % S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	  SSK
JrJr  SSKJrJr  SSKrSS	KJrJr  SS
KJrJrJrJr  SSKJrJrJrJrJrJrJ r   SSK!J"r"J#r#J$r$J%r%J&r&  SSK'J(r(  S/r)\(" S5      r*\+" 1 Sk5      r,S\-S'   \+" 1 Sk5      r.S\-S'   \\\4r/S\-S'   \0\1\4   r2\3\4\1\14      r5\\1\1\6-  \7-  \8-  4   S-  r9 " S S5      r:SS jr;g)u  Low-level client for the ModelScope OpenAPI v1 surface.

This module is *internal*: it is consumed by :mod:`modelscope_hub.api` to build
the ergonomic public façade. Direct use is discouraged and not subject to the
SDK's stability guarantees.

Design goals
------------
* A single :meth:`OpenAPIClient._request` chokepoint owns transport concerns —
  URL composition, authentication injection, retry/back-off, error decoding
  and ``data`` envelope unwrapping.
* Each of the 25 OpenAPI endpoints maps to exactly one method, named after the
  resource it manipulates and grouped by section comments.
* Filter-style query parameters (``filter.task=...`` etc.) are accepted as a
  flat ``filters`` mapping and serialised transparently.
    )annotationsN)IterableMapping)Path)AnyBinaryIO)urljoinurlsplit   )	HubConfigget_default_config)API_CONNECT_TIMEOUTAPI_MAX_RETRIESAPI_TIMEOUTOPENAPI_PREFIX)AuthenticationErrorInvalidParameterNetworkErrorRateLimitErrorRequestTimeoutErrorServerErrorraise_for_status)CreateSkillPayloadCreateStudioPayloadDeployMcpServerPayloadUpdateSkillSettingsPayloadUpdateStudioSettingsPayload)
get_loggerOpenAPIClientopenapi>   GETPUTHEADDELETEOPTIONSzfrozenset[str]_IDEMPOTENT_METHODS>   /stop/deploy	/undeploy_RETRYABLE_POST_PATHSztuple[type[BaseException], ...]_RETRYABLE_EXCc                     \ rS rSrSr S;SSSS.         S<S jjjrS=S jrS>S jrS?S jr S@SSSSSSS	S	SS
.	                       SAS jjjr	\
SBS j5       rSCS jrSDS jrSS.SES jjrSFS jrSGS jr\SHS j5       r\ S;     SIS jj5       r S@SSSSSSS	S	SS
.	                       SAS jjjr\SJS j5       rSKS jrSSSSSSS.             SLS jjrSMS jrSSSSSSS.             SLS jjrSMS jrSSSSSSS .               SNS! jjrSSSSS".         SOS# jjrSPS$ jrSQS% jr        SRS& jrSSS' jr SMS( jr! S;       STS) jjr"SMS* jr#SS+SSSS,.                 SUS- jjr$SMS. jr%SVS/ jr&SVS0 jr'SWS1 jr(        SXS2 jr)SSSSSS3.           SYS4 jjr*SKS5 jr+SS6.     SZS7 jjr, S;     S[S8 jjr-S\S9 jr.S:r/g)]r   G   aL  Thin, typed wrapper around the public ``/openapi/v1`` endpoints.

Parameters
----------
config:
    Optional :class:`HubConfig` instance. When omitted the process-wide
    default returned by :func:`get_default_config` is used.
session:
    Optional pre-configured :class:`requests.Session`. Useful for tests
    and for sharing a connection pool across multiple clients.
timeout:
    Per-request read timeout in seconds. When omitted, uses
    ``(API_CONNECT_TIMEOUT, API_TIMEOUT)`` as ``(connect, read)`` tuple.
max_retries:
    Maximum number of retry attempts for transient failures.
N)sessiontimeoutmax_retriesc               ,   U=(       d
    [        5       U l        U=(       d    [        R                  " 5       U l        Ub  [        U5      O[        [        5      [        [        5      4U l        Ub  [        U5      U l        g [        [        5      U l        g N)r   _configrequestsSession_sessionfloatr   r   _timeoutintr   _max_retries)selfconfigr.   r/   r0   s        S/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/modelscope_hub/_openapi.py__init__OpenAPIClient.__init__Y   sq     5!3!558#3#3#5%1E'N>Q8RTYZeTf7g 	 1<0GC,SQ`Ma    c                8    U R                   R                  5         g)z$Release the underlying HTTP session.N)r6   closer;   s    r=   rB   OpenAPIClient.closek   s    r@   c                    U $ r2    rC   s    r=   	__enter__OpenAPIClient.__enter__o   s    r@   c                $    U R                  5         g r2   )rB   )r;   _excs     r=   __exit__OpenAPIClient.__exit__r   s    

r@   T	urlparams	json_bodydatafilesheadersrequire_tokenunwrapr/   c       	        4    U R                  UUUUUUUUU	U
US9$ )a0  Execute an HTTP request.

When *url* is provided the request targets that absolute URL directly
(useful for endpoints outside ``/openapi/v1``, signed OSS URLs, etc.).
Otherwise the request is routed through ``self._url(path)``.

When *unwrap* is ``False`` the raw :class:`requests.Response` is returned.
rM   _request)r;   methodpathrN   rO   rP   rQ   rR   rS   rT   rU   r/   s               r=   requestOpenAPIClient.requestx   s;    . }}'  
 	
r@   c                p    U R                   R                  =(       d    SR                  S5       [         S3$ )z;Fully-qualified OpenAPI base URL, including trailing slash. /)r3   endpointrstripr   rC   s    r=   base_urlOpenAPIClient.base_url   s1     <<((.B66s;<^<LANNr@   c                L    [        U R                  UR                  S5      5      $ )Nr_   )r	   rb   lstrip)r;   rZ   s     r=   _urlOpenAPIClient._url   s     t}}dkk#&677r@   c                    U R                   R                  nU(       dM  [        U R                   SS5      (       d1  U R                   R                  5       nU(       a  XR                   l        U$ )zDResolve the current API token (from config or persisted credential)._token_overriddenF)r3   tokengetattr
load_tokenr;   rj   s     r=   _resolve_tokenOpenAPIClient._resolve_token   sK    ""WT\\3FNNLL++-E%*"r@   FrT   c               f    U R                  5       nU(       d  U(       a  [        S5      e0 $ SSU 30$ )NzFMissing API token. Call HubApi.login(...) or set MODELSCOPE_API_TOKEN.AuthorizationzBearer )rn   r   )r;   rT   rj   s      r=   _auth_headersOpenAPIClient._auth_headers   s9    ##%)*rssI75'!233r@   c                <    U R                  5       nU(       d  0 $ XS.$ )zBBuild session cookies for /api/v1/ endpoints that use cookie auth.)m_session_idmodelscope_session)rn   rm   s     r=   _auth_cookiesOpenAPIClient._auth_cookies   s!    ##%I %CCr@   c                    [        U5      R                  =(       d    SR                  5       n[        U R                  R
                  =(       d    S5      R                  =(       d    SR                  5       nU(       a  U(       d  gX#:X  a  gUR                  S5      n[        U5      S:  a  SR                  USS 5      OUnUSU 3S	U 31;   $ ! [         a     gf = f)
a  True when *target_url* points at the endpoint host or its LFS sibling.

Credentials (the ``Authorization`` header and session cookies) must only
be attached to our own hosts. Absolute URLs pointing elsewhere -- e.g. the
signed OSS blob-upload URLs on ``*.aliyuncs.com`` -- must never receive
our token, otherwise it leaks to a third-party domain.

The LFS blob endpoints live on a sibling host derived from the endpoint
by swapping the leading label for ``lfs`` / ``pre-lfs`` (e.g. endpoint
``pre.modelscope.cn`` -> ``pre-lfs.modelscope.cn``, ``modelscope.cn`` ->
``lfs.modelscope.cn``). Those hosts DO require our credentials, so they
are trusted here too.
r^   FT.   r   Nzlfs.zpre-lfs.)	r
   hostnamelower
ValueErrorr3   r`   splitlenjoin)r;   
target_urltarget_hostendpoint_hostlabelsbases         r=   _same_host_as_endpoint$OpenAPIClient._same_host_as_endpoint   s    	#J/88>BEEGK "$,,"7"7"=2>GGM2TTV-' $$S)'*6{a'7sxxqr
#]dV}.?@@@  		s   ,C 
CCc                    U (       d  / $ / nU R                  5        H/  u  p#Ub  US:X  a  M  UR                  SU 3[        U5      45        M1     U$ )z:Serialise a flat mapping into ``filter.key=value`` tuples.r^   zfilter.)itemsappendstr)filtersflatkeyvalues       r=   _flatten_filtersOpenAPIClient._flatten_filters   sS     I!--/JC}KK73%#e*56 * r@   c                d  ^ / nU (       ax  U R                  5        Hd  u  mnUc  M  [        U[        [        [        45      (       a  UR                  U4S jU 5       5        MH  UR                  T[        U5      45        Mf     UR                  [        R                  U5      5        U=(       d    S$ )zHCombine plain query params with filter-prefixed ones, dropping ``None``.Nc              3  F   >#    U  H  oc  M  T[        U5      4v   M     g 7fr2   )r   ).0itemr   s     r=   	<genexpr>.OpenAPIClient._merge_params.<locals>.<genexpr>   s     !Yut"23D	"2us   !!)
r   
isinstancelisttuplesetextendr   r   r   r   )rO   r   mergedr   r   s       @r=   _merge_paramsOpenAPIClient._merge_params   s     !$lln
U=edE3%788MM!Yu!YYMM3E
"34 - 	m44W=>~r@   c       	        4  ^ U=(       d    U R                  T5      nU R                  U5      (       a)  [        U R                  U	S95      nU R	                  5       nO0 n0 nU(       a  UR                  U5        UR                  5       n[        SU R                  5      nSn[        SUS-   5       H  n[        R                  SX5         U R                  R                  UUUUUUUUUb  UOU R                  S9	n[        R                  SXUR                  5        UR                  S:  aD  [        R                  SUUUUR                  UR                   (       a  UR                   SS	 OS
5         [#        U5        U
(       d  Us  $ U R%                  USS9s  $    Uc   eUe! [&         a  nUn SnAOSnAff = f! [(        R*                   a  n[-        SU 35      n SnAO\SnAf[(        R.                   a  n[1        SU 35      n SnAO2SnAf[(        R2                   a  n[1        SU 35      n SnAOSnAff = f[5        U[6        5      =(       d>    U[8        ;   =(       d.    US:H  =(       a"    T=(       a    [;        U4S j[<         5       5      nUU:  d  U(       d    GM	  [?        USS5      nUb  [A        U5      nO*[C        SUS-
  -  S5      [D        RF                  " SS5      -   n[        R                  SUUUUU5        [H        RJ                  " U5        GMl  )aI  Execute an HTTP request and return the unwrapped ``data`` payload.

The method centralises authentication, retries on transient errors,
and decoding of the standard ``{"success": ..., "data": ...}`` envelope.

When *url* is given, it is used as-is (absolute URL). Otherwise the
final URL is derived from *path* via :meth:`_url`.
rp   r   Nz%s %s)	rY   rN   rO   jsonrQ   rR   rS   cookiesr/   z%s %s -> %si  z1Request failed: %s %s params=%s status=%s body=%si  r^   T)rU   zRequest timed out: zConnection error: zRequest failed: POSTc              3  F   >#    U  H  nTR                  U5      v   M     g 7fr2   )endswith)r   prZ   s     r=   r   )OpenAPIClient._request.<locals>.<genexpr>U  s      ;lVkQRDMM!<L<LVks   !retry_after      r   g      ?z'Retrying %s %s after %s (attempt %d/%d))&rf   r   dictrs   rx   updateuppermaxr:   range_loggerdebugr6   r[   r8   status_codetextr   _decoder+   r4   Timeoutr   ConnectionErrorr   RequestExceptionr   r   r&   anyr*   rk   r7   minrandomuniformtimesleep)r;   rY   rZ   rN   rO   rP   rQ   rR   rS   rT   rU   r/   	final_urlmerged_headersrequest_cookiesmethod_upperattemptslast_excattemptresponseexcis_retryabler   backoffs     `                     r=   rX   OpenAPIClient._request   s   . *499T?	 &&y11!$"4"4="4"QRN"002ON O!!'*||~q$++,)-Q1-GMM'<;$?==00'!!"*+'.':G 1 
$ m\hFZFZ[''3.MMK$! ,,/7}}ds+"?$X. "'<<<>>M .L ###M & #"H#' ## L.1DSE/JK++ D'*<SE(BC,, B'*:3%(@AB8 8^4 n#66n F*ltl;lVk;l8l 
 (", "(M4@K&!&{!3aGaK0"5q#8NNMM9 JJwsH   0F8.F
F5)F00F58H8GH86H		H8 H33H8c               6   U R                   S:X  d  U R                  (       d  g U R                  5       nU(       a  [        U[        5      (       d  U$ SU;   a  US   $ SU;   a  US   $ U$ ! [         a$    U(       d  U R                  s $ U R                  s $ f = f)z=Decode a successful response, optionally unwrapping ``data``.   NrQ   Data)r   contentr   r   r   r   r   )r   rU   payloads      r=   r   OpenAPIClient._decoden  s     3&h.>.>	EmmoG Z66NW6?"W6?"  	E+18##Dx}}D	Es   A* *B	BBc                &    U R                  SS5      $ )u;   ``GET /users/me`` — fetch the authenticated user profile.r!   z	/users/merW   rC   s    r=   get_current_userOpenAPIClient.get_current_user  s    }}UK00r@   r   
   )searchownersortpage_number	page_sizer   c                   XE-  S:  a  [        SXE-   S35      eU R                  UUUUUS.U5      nU R                  SSUSS9$ )	u   ``GET /models`` — list models with pagination and filters.

Supported filter keys: ``task``, ``library``, ``model_type``,
``custom_tag``, ``license``, ``deploy``.
  -page_number * page_size must be <= 3000 (got ).r   r   r   r   r   r!   z/modelsFrO   rT   r   r   rX   r;   r   r   r   r   r   r   rO   s           r=   list_modelsOpenAPIClient.list_models  sl     "T)"%RS^SjRkkm#noo## *& 	
 }}UIfE}RRr@   c                0    U R                  SSU SU 3SS9$ )uA   ``GET /models/{owner}/{repo_name}`` — fetch a model's metadata.r!   z/models/r_   Frp   rW   r;   r   	repo_names      r=   	get_modelOpenAPIClient.get_model  s%    }}UhugQyk$BRW}XXr@   c                   XE-  S:  a  [        SXE-   S35      eU R                  UUUUUS.U5      nU R                  SSUSS9$ )	uH   ``GET /datasets`` — list datasets. Filter keys: ``task``, ``license``.r   r   r   r   r!   z	/datasetsFr   r   r   s           r=   list_datasetsOpenAPIClient.list_datasets  sl     "T)"%RS^SjRkkm#noo## *& 	
 }}UKe}TTr@   c                0    U R                  SSU SU 3SS9$ )uE   ``GET /datasets/{owner}/{repo_name}`` — fetch a dataset's metadata.r!   z
/datasets/r_   Frp   rW   r   s      r=   get_datasetOpenAPIClient.get_dataset  s%    }}Ujq$DTY}ZZr@   )path_in_reporepo_id	repo_typerevisioncommit_messageextra_fieldsc                  / nUb  UR                  SSU445        Ub  UR                  SSU445        Ub  UR                  SSU445        U(       a  UR                  SSU445        U(       a  UR                  SSU445        U(       a<  UR                  5        H(  u  pU
c  M
  UR                  U	S[        U
5      445        M*     Sn [        U[        [        45      (       a=  [	        U5      nUR                  S5      nUR                  SUR                  US	445        OUR                  SS
US	445        U R                  SSUS9Ub  UR                  5         $ $ ! Ub  UR                  5         f f = f)u3  ``POST /files/upload`` — upload a single file (≤ 5 MiB).

When called with ``repo_id`` / ``path_in_repo`` / ``repo_type``,
the file is committed to the given repository.  When called with
only ``file``, a generic upload is performed and the response
contains the file ID (used by skill creation, etc.).
NrZ   r   r   r   r   rbfilezapplication/octet-streamz
upload.binr   z/files/upload)rR   )	r   r   r   r   r   opennamerX   rB   )r;   r   r   r   r   r   r   r   formr   r   opened	file_paths                r=   upload_fileOpenAPIClient.upload_file  sn   $ ')#KK$!567KKT7O45 KKtY&789KKdH%567KK)D.+ABC*002
=S4U"456 3
 #'
	$d,, J	"-Vinnf>X%YZ[VlD:T%UVW===E! "v! "s   	A>E E2)r   r   r   r   c                   X#-  S:  a  [        SX#-   S35      eU R                  UUUS.U5      nU R                  SSUSS9$ )	ut   ``GET /skills`` — list skills.

Filter keys: ``developer``, ``category``, ``license``, ``custom_tag``,
``owner``.
r   r   r   r   r   r   r!   /skillsFr   r   )r;   r   r   r   r   rO   s         r=   list_skillsOpenAPIClient.list_skills  sf     "T)"%RS^SjRkkm#noo## *&
 
 }}UIfE}RRr@   c                6    U R                  SS[        U5      S9$ )u(   ``POST /skills`` — create a new skill.r   r  rP   rX   r   r;   r   s     r=   create_skillOpenAPIClient.create_skill  s    }}VY$w-}HHr@   c                *    U R                  SSU 3SS9$ )u-   ``GET /skills/{id}`` — fetch a skill by id.r!   /skills/Frp   rW   )r;   skill_ids     r=   	get_skillOpenAPIClient.get_skill  s    }}Uhxj$9}OOr@   c                D    U R                  SSU SU S3[        U5      S9$ )uJ   ``PATCH /skills/{owner}/{skill_name}/settings`` — update skill settings.PATCHr  r_   	/settingsr  r  )r;   r   
skill_namesettingss       r=   update_skill_settings#OpenAPIClient.update_skill_settings"  s6     }}ugQzl)48n  
 	
r@   c                6    U R                  SS[        U5      S9$ )u0   ``POST /studios`` — create a new Studio space.r   z/studiosr  r  r  s     r=   create_studioOpenAPIClient.create_studio2  s    }}VZ4=}IIr@   c                2    U R                  SSU SU 35      $ )u?   ``GET /studios/{owner}/{repo_name}`` — fetch Studio metadata.r!   	/studios/r_   rW   r   s      r=   
get_studioOpenAPIClient.get_studio6  s     }}Uiwa	{$CDDr@   c                Z    U R                  SSU SU S3U(       a  [        U5      S9$ SS9$ )uF   ``POST /studios/{owner}/{repo_name}/deploy`` — trigger a deployment.r   r  r_   r(   Nr  r  )r;   r   r   r   s       r=   deploy_studioOpenAPIClient.deploy_studio:  sL     }}wa	{'2'.d7m  
 	
 59  
 	
r@   c                2    U R                  SSU SU S3SS9$ )uE   ``POST /studios/{owner}/{repo_name}/stop`` — stop a running Studio.r   r  r_   r'   Nr  rW   r   s      r=   stop_studioOpenAPIClient.stop_studioG  s'    }}Vyq5%IUY}ZZr@   d   page_numr   keywordstart_timestampend_timestampc          	     d    U R                  UUUUUS.5      n	U R                  SSU SU SU 3U	S9$ )uH   ``GET /studios/{owner}/{repo_name}/logs/{log_type}`` — paginated logs.r%  r!   r  r_   z/logs/)rO   r   rX   )
r;   r   r   log_typer&  r   r'  r(  r)  rO   s
             r=   get_studio_logsOpenAPIClient.get_studio_logsK  s\     ##$&"#2!.
 }}wa	{&
;  
 	
r@   c                4    U R                  SSU SU S35      $ )uI   ``GET /studios/{owner}/{repo_name}/secrets`` — list configured secrets.r!   r  r_   /secretsrW   r   s      r=   list_studio_secrets!OpenAPIClient.list_studio_secretsg  s"    }}Uiwa	{($KLLr@   c                6    U R                  SSU SU S3X4S.S9$ )uC   ``POST /studios/{owner}/{repo_name}/secrets`` — add a new secret.r   r  r_   r0  r   r   r  rW   r;   r   r   r   r   s        r=   add_studio_secretOpenAPIClient.add_studio_secretk  s3    }}wa	{(3!2  
 	
r@   c                6    U R                  SSU SU S3X4S.S9$ )uN   ``PUT /studios/{owner}/{repo_name}/secrets`` — overwrite an existing secret.r"   r  r_   r0  r4  r  rW   r5  s        r=   update_studio_secret"OpenAPIClient.update_studio_secrets  s3    }}wa	{(3!2  
 	
r@   c                6    U R                  SSU SU S3SU0S9$ )uK   ``DELETE /studios/{owner}/{repo_name}/secrets`` — remove a secret by key.r$   r  r_   r0  r   r  rW   )r;   r   r   r   s       r=   delete_studio_secret"OpenAPIClient.delete_studio_secret{  s4    }}wa	{(3cl  
 	
r@   c                D    U R                  SSU SU S3[        U5      S9$ )uK   ``PATCH /studios/{owner}/{repo_name}/settings`` — update Studio settings.r  r  r_   r  r  r  )r;   r   r   r  s       r=   update_studio_settings$OpenAPIClient.update_studio_settings  s6     }}wa	{)48n  
 	
r@   )r   r   r   filterextrac                  X#-  S:  a  [        SX#-   S35      eUUUS.nU(       a  [        U5      US'   U(       a  UR                  U5        UR                  5        VVs0 s H  u  pxUc  M
  Xx_M     nnnU R	                  SSUSS	9$ s  snnf )
u   ``PUT /mcp/servers`` — discover MCP servers (JSON body, not query).

Parameters
----------
filter : dict, optional
    Nested filter object. Supported keys: ``category``, ``is_hosted``.
r$  z<page_number * page_size must be <= 100 for MCP servers (got r   r  rA  r"   z/mcp/serversF)rP   rT   )r   r   r   r   rX   )	r;   r   r   r   rA  rB  bodykvs	            r=   list_mcp_serversOpenAPIClient.list_mcp_servers  s      "S("N{OfNggij  &" 

 !&\DNKK!%??}}UNdRW}XX @s    	B-Bc                &    U R                  SS5      $ )uI   ``GET /mcp/servers/operational`` — list servers deployed by the caller.r!   z/mcp/servers/operationalrW   rC   s    r=   list_operational_mcp_servers*OpenAPIClient.list_operational_mcp_servers  s    }}U$>??r@   )get_operational_urlc               R    U R                  SU05      nU R                  SSU 3USS9$ )uC   ``GET /mcp/servers/{id}`` — fetch a single MCP server's manifest.rL  r!   /mcp/servers/Fr   r+  )r;   	server_idrL  rO   s       r=   get_mcp_serverOpenAPIClient.get_mcp_server  s:     ##%:<O$PQ}}UmI;$?^c}ddr@   c                    [        U=(       d    0 5      R                  5        VVs0 s H  u  p4Uc  M
  X4_M     nnnUR                  SS5        U R                  SSU S3US9$ s  snnf )uJ   ``POST /mcp/servers/{id}/deploy`` — deploy an MCP server for the caller.transport_typesser   rN  r(   r  )r   r   
setdefaultrX   )r;   rO  r   rE  rF  rD  s         r=   deploy_mcp_serverOpenAPIClient.deploy_mcp_server  sq     "&gm!4!:!:!<N!<!<N(%0}}I;g.  
 	
 Os
   	A#A#c                .    U R                  SSU S35      $ )uJ   ``DELETE /mcp/servers/{id}/undeploy`` — tear down a deployed MCP server.r$   rN  r)   rW   )r;   rO  s     r=   undeploy_mcp_server!OpenAPIClient.undeploy_mcp_server  s    }}Xyk'KLLr@   )r3   r:   r6   r8   r2   )
r<   zHubConfig | Noner.   zrequests.Session | Noner/   float | Noner0   
int | NonereturnNone)r]  r^  )r]  r   )rJ   objectr]  r^  )r^   )rY   r   rZ   r   rN   
str | NonerO   z&Mapping[str, Any] | QueryParams | NonerP   
Any | NonerQ   ra  rR   ra  rS   zMapping[str, str] | NonerT   boolrU   rb  r/   r[  r]  r   )r]  r   )rZ   r   r]  r   )r]  r`  )rT   rb  r]  dict[str, str])r]  rc  )r   r   r]  rb  )r   Filtersr]  QueryParams)rO   Mapping[str, Any] | Noner   rd  r]  zQueryParams | None)r   zrequests.ResponserU   rb  r]  r   )r]  JSON)r   r`  r   r`  r   r`  r   r9   r   r9   r   rd  r]  rg  )r   r   r   r   r]  rg  )r   zstr | Path | BinaryIOr   r`  r   r`  r   r`  r   r`  r   r`  r   rf  r]  rg  )
r   r`  r   r9   r   r9   r   rd  r]  rg  )r   z&CreateSkillPayload | Mapping[str, Any]r]  rg  )r  	str | intr]  rg  )r   r   r  r   r  z.UpdateSkillSettingsPayload | Mapping[str, Any]r]  rg  )r   z'CreateStudioPayload | Mapping[str, Any]r]  rg  )r   r   r   r   r   rf  r]  rg  )r   r   r   r   r,  r   r&  r9   r   r9   r'  r`  r(  r\  r)  r\  r]  rg  )
r   r   r   r   r   r   r   r   r]  rg  )r   r   r   r   r   r   r]  rg  )r   r   r   r   r  z/UpdateStudioSettingsPayload | Mapping[str, Any]r]  rg  )r   r`  r   r9   r   r9   rA  rf  rB  rf  r]  rg  )rO  rh  rL  zbool | Noner]  rg  )rO  rh  r   z1DeployMcpServerPayload | Mapping[str, Any] | Noner]  rg  )rO  rh  r]  rg  )0__name__
__module____qualname____firstlineno____doc__r>   rB   rG   rK   r[   propertyrb   rf   rn   rs   rx   r   staticmethodr   r   rX   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r"  r-  r1  r6  r9  r<  r?  rG  rJ  rP  rV  rY  __static_attributes__rF   r@   r=   r   r   G   s   & $(b ,0 $"&b b )	b
 b  b 
b$ #

 9= $ ,0" $#
#
 #

 #
 7#
 #
 #
 #
 *#
 #
 #
 #
 
#
P O O8
 6; 4DA: 	 	   ( 
 ( o
 9= $ ,0" $oo o
 o 7o o o o *o o o o 
ob  (1 " S S 	S
 S S S S 
S:Y " U U 	U
 U U U U 
U2[ $(" $#%)15. $. !	.
 . . . #. /. 
.l "S S 	S
 S S 
S2IP

 
 A	

 

 JE -1	

 
 *	

 

[ "&*$(

 
 	
 
 
 
 $
 "
 

8M




 
 B	

 

& "+/*.Y Y 	Y
 Y )Y (Y 
Y@@ ,0	ee )	e
 
e FJ

 C
 
	
 Mr@   c                <    [        [        [        U 5      5      5      $ r2   )r   sortedr   )keyss    r=   _coerce_keysrt    s    D	"##r@   )rs  zIterable[str]r]  ztuple[str, ...])<rm  
__future__r   r   r   collections.abcr   r   pathlibr   typingr   r   urllib.parser	   r
   r4   r<   r   r   	constantsr   r   r   r   errorsr   r   r   r   r   r   r   typesr   r   r   r   r   utils.loggerr   __all__r   	frozensetr&   __annotations__r*   r+   r   r   rg  r   r   re  r9   r7   rb  rd  r   rt  rF   r@   r=   <module>r     s   " #   -    *  1 X X    %

Y
 '00[&\ ^ \ )22S(T ~ T 3/  CH~5c?#
#sSy5(4//
04
7L
M L
Mb$r@   