
    Vwg{                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d	d
lmZ d	dlmZ d	dlmZmZ  G d de      Zy)    N)get_user_model)ImproperlyConfigured)BaseCommand)import_string)api_settings)APIRequestFactoryforce_authenticate)APIView   )openapi)swagger_settings)OpenAPICodecJsonOpenAPICodecYamlc                   6    e Zd ZdZd Zd Zd	dZd Zd Zd Z	y)
Commandz8Write the Swagger schema to disk in JSON or YAML format.c           	         |j                  ddddt        d       |j                  ddd	d
d       |j                  ddddddgt        d       |j                  ddddt        d       |j                  dddd	d
d       |j                  dd t        d!"       |j                  d#d$d%&       |j                  d'd(d	d
d)       |j                  d*d+d,dd-.       y )/Noutput_filezoutput-file?-z>Output path for generated swagger document, or "-" for stdout.)metavarnargsdefaulttypehelpz-oz--overwriteF
store_truezfOverwrite the output file if it already exists. Default behavior is to stop if the output file exists.)r   actionr   z-fz--formatformat jsonyamlz_Output format. If not given, it is guessed from the output file extension and defaults to json.)destr   choicesr   r   z-uz--urlapi_urlzMBase API URL - sets the host and scheme attributes of the generated document.)r!   r   r   r   z-mz--mock-requestmockzUse a mock request when generating the swagger schema. This is useful if your views or serializers depend on context from a request in order to function.)r!   r   r   r   z--api-versionapi_versionzFVersion to use to generate schema. This option implies --mock-request.)r!   r   r   z--useruserzbUsername of an existing user to use for mocked authentication. This option implies --mock-request.)r!   r   z-pz	--privatea  Hides endpoints not accessible to the target user. If --user is not given, only shows endpoints that are accessible to unauthenticated users.
This has the same effect as passing public=False to get_schema_view() or OpenAPISchemaGenerator.get_schema().
This option implies --mock-request.z-gz--generator-classgenerator_class_namezZImport string pointing to an OpenAPISchemaGenerator subclass to use for schema generation.)r!   r   r   )add_argumentstr)selfparsers     d/var/www/horilla/myenv/lib/python3.12/site-packages/drf_yasg/management/commands/generate_swagger.pyadd_argumentszCommand.add_arguments   sI   =Q 	 	
 	-,J 	 	
 	*8 0r	 	 	
 	'	`	 	 	
 	",J 	 	
 	-Y 	 	

 	6u 	 	
 	+,7 	 	
 	%,Bm 	 	
    c                 ,   |dk(  r?t        g d      }|j                  |      j                  d      }|j                  |       y |dk(  r>t	        g       }|j                  |      j                  d      }|j                  |       y t        d|z        )Nr   T)
validatorsprettyzutf-8r    )r0   zunknown format %s)r   encodedecodewriter   
ValueError)r*   schemastreamr   codecswagger_jsonswagger_yamls          r,   write_schemazCommand.write_schemaL   s    V$4@E <</66w?LLL&v$3E <</66w?LLL&069::r.   Nc                     t               }|j                  |dz   |z         }|t        ||       t               j	                  |      }|S )Nz	/swagger.)r&   )r   getr	   r
   initialize_request)r*   urlr   r&   factoryrequests         r,   get_mock_requestzCommand.get_mock_requestY   sI    #%++cK/&89wT2)..w7r.   c                 R    t         j                  }|rt        |      } ||||      S )N)infoversionr?   )r   DEFAULT_GENERATOR_CLASSr   )r*   r'   api_infor%   r#   generator_classs         r,   get_schema_generatorzCommand.get_schema_generatorb   s1    *BB+,@AO
 	
r.   c                 (    |j                  ||      S )N)rA   public)
get_schema)r*   	generatorrA   rK   s       r,   rL   zCommand.get_schemam   s    ##GF#CCr.   c
                 f   t        j                  t         j                         t        t        dd       }t        |t        j                        st        d      |s&t        j                  j                  |      d   dv rd}|xs d}|xs t        j                  }|r8 t               j                  j                  di t               j                   |i}|xs |xs
 |d uxs |d u}|r|st        d      d }|r| j#                  |||      }|xs t$        j&                  }|r	|r||_        | j+                  |	|||      }| j-                  |||       }|dk(  r| j/                  || j0                  |       y |rd	nd
}t3        ||      5 }| j/                  |||       d d d        y # 1 sw Y   y xY w)NDEFAULT_INFOzgsettings.SWAGGER_SETTINGS["DEFAULT_INFO"] should be an import string pointing to an openapi.Info object   )z.ymlz.yamlr    r   zh--mock-request requires an API url; either provide the --url argument or set the DEFAULT_API_URL settingr   wx )loggingdisableWARNINGgetattrr   
isinstancer   Infor   ospathsplitextDEFAULT_API_URLr   objectsr=   USERNAME_FIELDrB   r   DEFAULT_VERSIONrE   rI   rL   r;   stdoutopen)r*   r   	overwriter   r#   r$   r%   r&   privater'   argskwargsrD   rA   rM   r6   flagsr7   s                     r,   handlezCommand.handlep   s    	('>$-&C 
 ww,Q/3DD!6=-== 0>#++//Z>3C3R3RTX2YZDQwQ4t#3QD9P&H 
 ++GVTBG!A\%A%A{)GO--.BD+W^_	G[A#fdkk6:$C#Ek5) :V!!&&&9: : :s   
F''F0)N)
__name__
__module____qualname__r   r-   r;   rB   rI   rL   rh   rS   r.   r,   r   r      s'    ED6
p;	
D/:r.   r   )rT   rZ   django.contrib.authr   django.core.exceptionsr   django.core.management.baser   django.utils.module_loadingr   rest_framework.settingsr   rest_framework.testr   r	   rest_framework.viewsr
   r   r   app_settingsr   codecsr   r   r   rS   r.   r,   <module>ru      s7     	 . 7 3 5 0 E (  , 8N:k N:r.   