Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
djangorestframework / __pycache__ / schemas.cpython-35.pyc
Size: Mime:


«¬šYf`ã
@sAddlZddlmZddlmZddlmZddlmZddl	m
Z
ddlmZddl
mZdd	lmZdd
lmZmZddlmZddlmZmZmZdd
lmZmZmZmZm Z m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-ej.dƒZ/dd„Z0dd„Z1dd„Z2dd„Z3dd„Z4dd „Z5d!d"„Z6d#d$„Z7d%d&„Z8Gd'd(„d(e9ƒZ:Gd)d*„d*e9ƒZ;Gd+d,„d,e-ƒZ<dddddd-de;d.d/„Z=dS)0éN)ÚOrderedDict)Ú
import_module)Úsettings)Úsimplify_regex)ÚPermissionDenied)Úmodels)ÚHttp404)Úsix)Ú
force_textÚ
smart_text)Ú
ugettext_lazy)Ú
exceptionsÚ	renderersÚserializers)ÚRegexURLPatternÚRegexURLResolverÚcoreapiÚ
coreschemaÚuritemplateÚurlparse)Ú
clone_request)ÚResponse)Úapi_settings)Ú
formatting)Ú_get_pk)ÚAPIViewz^[a-zA-Z][0-9A-Za-z_]*:cCsy|jrt|jƒnd}|jr6t|jƒnd}t|tjtjfƒr‚t|jƒ}t	j
d|d|d|ƒSt|tjƒrÌt	jdt
dd„|jjƒDƒƒd|d|ƒSt|tjƒrt	j
dt	jƒd|d|ƒSt|tjƒr(t	jd|d|ƒSt|tjƒrqt	j
dt	jdt|jjƒƒƒd|d|ƒSt|tjƒr®t	jdt|jjƒƒd|d|ƒSt|tjƒrÖt	jd|d|ƒSt|tjtjfƒrt	jd|d|ƒSt|tjƒr/t	jd|d|ƒS|j j!d	ƒd
krct	jd|d|ddƒSt	jd|d|ƒS)
NÚÚitemsÚtitleÚdescriptionÚ
propertiescSs(g|]\}}|t|ƒf‘qS©)Úfield_to_schema)Ú.0ÚkeyÚvaluer!r!úU/Users/carlton/Documents/Django-Stack/django-rest-framework/rest_framework/schemas.pyú
<listcomp>+s	z#field_to_schema.<locals>.<listcomp>ÚenumÚ
base_templatez
textarea.htmlÚformatÚtextarea)"Úlabelr
Ú	help_textÚ
isinstancerÚListSerializerÚ	ListFieldr"ÚchildrÚArrayÚ
SerializerÚObjectrÚfieldsrÚManyRelatedFieldÚStringÚRelatedFieldÚMultipleChoiceFieldÚEnumÚlistÚchoicesÚkeysÚChoiceFieldÚBooleanFieldÚBooleanÚDecimalFieldÚ
FloatFieldÚNumberÚIntegerFieldÚIntegerÚstyleÚget)ÚfieldrrÚchild_schemar!r!r&r"sX					!		r"cCs€dd„|Dƒ}t|ƒ}t|ƒ}|}x;t|ƒD]-\}}|||kr>|d|…}Pq>Wddj|ƒS)NcSs(g|]}|jdƒjdƒ‘qS)ú/)ÚstripÚsplit)r#Úpathr!r!r&r'Ws	zcommon_path.<locals>.<listcomp>rJ)ÚminÚmaxÚ	enumerateÚjoin)ÚpathsÚsplit_pathsÚs1Ús2ÚcommonÚiÚcr!r!r&Úcommon_pathVsrYcCs|jjj}t|ƒjS)N)Ú_metaÚconcrete_modelrÚname)ÚmodelÚmetar!r!r&Úget_pk_namebsr_cCs+t|ddƒ}|dk	o*t|tƒS)zT
    Return `True` if the given view callback is a REST framework view/viewset.
    ÚclsN)ÚgetattrÚ
issubclassr)Úcallbackr`r!r!r&Úis_api_viewgsrdcCsMx8|dd…D]&}||kr-i||<||}qW|||d<dS)zœ
    Nested dictionary insertion.

    >>> example = {}
    >>> insert_into(example, ['a', 'b', 'c'], 123)
    >>> example
    {'a': {'b': {'c': 123}}}
    Nééÿÿÿÿrfr!)Útargetr=r%r$r!r!r&Úinsert_intoos
	
rhcCs"|tddddddgƒkS)NÚretriever;ÚcreateÚupdateÚpartial_updateÚdestroy)Úset)Úactionr!r!r&Úis_custom_actionsrpcCsht|dƒr|jdkS|jƒdkr2dS|jdƒjdƒ}|rdd|d	krddSdS)
zP
    Return True if the given path/method appears to represent a list view.
    ror;rGFrJÚ{reTrf)ÚhasattrroÚlowerrKrL)rMÚmethodÚviewZpath_componentsr!r!r&Úis_list_view…s
rvc
CsI|\}}}ddddddddd	d
ij|dƒ}||fS)NÚGETrÚPOSTreÚPUTéÚPATCHéÚDELETEéé)rG)ÚendpointrMrtrcZmethod_priorityr!r!r&Úendpoint_ordering•srcCspt|tjƒr!tdƒ}n-t|tjƒrBtdƒ}ntdƒ}tdƒjd|d|jjƒS)Nzunique integer valuezUUID stringzunique valuez'A {value_type} identifying this {name}.Ú
value_typer\)r.rÚ	AutoFieldÚ_Ú	UUIDFieldr*rZÚverbose_name)r]Úmodel_fieldr‚r!r!r&Úget_pk_description¡srˆc@s^eZdZdZdddd„Zdddd„Zdd	„Zd
d„Zdd
„ZdS)ÚEndpointInspectorzR
    A class to determine the available API endpoints that a project exposes.
    NcCs^|dkrQ|dkr!tj}t|tjƒrBt|ƒ}n|}|j}||_dS)N)rÚROOT_URLCONFr.r	Ústring_typesrÚurlpatternsÚpatterns)ÚselfrÚurlconfÚurlsr!r!r&Ú__init__³s		zEndpointInspector.__init__rcCsû|dkr|j}g}xÇ|D]¿}||jj}t|tƒrª|j|ƒ}|j}|j||ƒráxm|j|ƒD]"}|||f}	|j	|	ƒqWq"t|t
ƒr"|jd|jd|ƒ}
|j
|
ƒq"Wt|dtƒ}|S)zZ
        Return a list of all available API endpoints by inspecting the URL conf.
        NrÚprefixr$)rÚregexÚpatternr.rÚget_path_from_regexrcÚshould_include_endpointÚget_allowed_methodsÚappendrÚget_api_endpointsÚurl_patternsÚextendÚsortedr)rŽrr’Z
api_endpointsr”Ú
path_regexrMrcrtr€Znested_endpointsr!r!r&r™Âs&	
				z#EndpointInspector.get_api_endpointscCs.t|ƒ}|jddƒjddƒ}|S)zG
        Given a URL conf regex, return a URI template string.
        ú<rqú>Ú})rÚreplace)rŽrrMr!r!r&r•àsz%EndpointInspector.get_path_from_regexcCs6t|ƒsdS|jdƒs.|jdƒr2dSdS)zI
        Return `True` if the given endpoint should be included.
        Fz	.{format}z
.{format}/T)rdÚendswith)rŽrMrcr!r!r&r–ès
z)EndpointInspector.should_include_endpointcCset|dƒrKt|jjƒƒ}t|jjƒ}dd„||@DƒSdd„|jƒjDƒS)zL
        Return a list of the valid HTTP methods for this endpoint.
        ÚactionscSsg|]}|jƒ‘qSr!)Úupper)r#rtr!r!r&r'ûs	z9EndpointInspector.get_allowed_methods.<locals>.<listcomp>cSs"g|]}|dkr|‘qS)ÚOPTIONSÚHEAD)zOPTIONSzHEADr!)r#rtr!r!r&r'þs	)rrrnr£r=r`Úhttp_method_namesÚallowed_methods)rŽrcr£r§r!r!r&r—ôs	z%EndpointInspector.get_allowed_methods)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r‘r™r•r–r—r!r!r!r&r‰¯sr‰c@seZdZddddddddd	d
iZeZdZdZddddddd
„Zdddd„Z	ddd„Z
dd„Zddd„Zdd„Z
dd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„ZdS)+ÚSchemaGeneratorrGriÚpostrjÚputrkÚpatchrlÚdeletermNcCs–tstdƒ‚ts$tdƒ‚|rD|jdƒrD|d7}tj|_tj|_||_	||_
||_||_||_
d|_dS)Nz/`coreapi` must be installed for schema support.z2`coreschema` must be installed for schema support.rJ)rÚAssertionErrorrr¢rÚSCHEMA_COERCE_METHOD_NAMESÚcoerce_method_namesÚSCHEMA_COERCE_PATH_PKÚcoerce_path_pkrrrrÚurlÚ	endpoints)rŽrr·rrrr!r!r&r‘s
					zSchemaGenerator.__init__Fc	Cs«|jdkr6|j|j|jƒ}|jƒ|_|j|rHdn|ƒ}|s[dS|j}|rƒ|dk	rƒ|jƒ}tj	d|j
d|jd|d|ƒS)zL
        Generate a `coreapi.Document` representing the API schema.
        Nrrr·Úcontent)r¸Úendpoint_inspector_clsrrr™Ú	get_linksr·Úbuild_absolute_urirÚDocumentrr)rŽÚrequestÚpublicZ	inspectorÚlinksr·r!r!r&Ú
get_schema)s		zSchemaGenerator.get_schemac
Cs3tƒ}g}g}x||jD]q\}}}|j|||ƒ}t|ddƒrXq|j|||ƒ}|j|ƒ|j|||fƒqW|sždS|j|ƒ}	x|D]w\}}}|j|||ƒsÛq´|j|||ƒ}
|t	|	ƒd…}|j
|||ƒ}t|||
ƒq´W|S)zq
        Return a dictionary containing all the links that should be
        included in the API schema.
        Úexclude_from_schemaFN)rr¸Úcreate_viewraÚcoerce_pathr˜Údetermine_path_prefixÚhas_view_permissionsÚget_linkÚlenÚget_keysrh)
rŽr¾rÀrRZview_endpointsrMrtrcrur’ÚlinkÚsubpathr=r!r!r&r»>s*	
zSchemaGenerator.get_linkscCs¢g}x|D]‡}|jdƒjdƒ}g}x(|D] }d|krKP|j|ƒq8Wdj|dd…ƒ}|sdS|jd|dƒq
Wt|ƒS)aš
        Given a list of all paths, return the common prefix which should be
        discounted when generating a schema structure.

        This will be the longest common string that does not include that last
        component of the URL, or the last component before a path parameter.

        For example:

        /api/v1/users/
        /api/v1/users/{pk}/

        The path prefix is '/api/v1/'
        rJrqNrerf)rKrLr˜rQrY)rŽrRÚprefixesrMÚ
componentsZinitial_componentsÚ	componentr’r!r!r&rÅ`s

z%SchemaGenerator.determine_path_prefixcCsî|jƒ}x6t|diƒjƒD]\}}t|||ƒq%Wf|_i|_d|_d|_t|ddƒ|_t|ddƒ}|dk	rÌ|dkr´d|_	n|j
|jƒƒ|_	|dk	rêt||ƒ|_|S)zC
        Given a callback, return an actual view instance.
        Ú
initkwargsNr£r¥Úmetadata)
r`rarÚsetattrÚargsÚkwargsÚformat_kwargr¾Ú
action_maprorGrsr)rŽrcrtr¾ruÚattrÚvalr£r!r!r&rÃs %				zSchemaGenerator.create_viewc
CsP|jdkrdSy|j|jƒWn"tjttfk
rKdSYnXdS)zY
        Return `True` if the incoming request has the correct view permissions.
        NTF)r¾Úcheck_permissionsr
ÚAPIExceptionrr)rŽrMrtrur!r!r&rƘs	z$SchemaGenerator.has_view_permissionscCsg|jsd|kr|Stt|ddƒddƒ}|rMt|ƒ}nd}|jdd|ƒS)zâ
        Coerce {pk} path arguments into the name of the model field,
        where possible. This is cleaner for an external representation.
        (Ie. "this is an identifier", not "this is a database primary key")
        z{pk}ÚquerysetNr]Úidz{%s})r¶rar_r¡)rŽrMrtrur]Ú
field_namer!r!r&rÄ¥szSchemaGenerator.coerce_pathcCs|j|||ƒ}||j|||ƒ7}||j|||ƒ7}||j|||ƒ7}|r—tdd„|Dƒƒr—|j|||ƒ}nd}|j|||ƒ}|jrÚ|jdƒrÚ|dd…}t	j
dtj|j|ƒd|j
ƒd|d	|d
|ƒS)zJ
        Return a `coreapi.Link` instance for the given endpoint.
        cSsg|]}|jdk‘qS)ÚformÚbody)zformzbody)Úlocation)r#rHr!r!r&r'¿s	z,SchemaGenerator.get_link.<locals>.<listcomp>NrJrer·roÚencodingr5r)Úget_path_fieldsÚget_serializer_fieldsÚget_pagination_fieldsÚget_filter_fieldsÚanyÚget_encodingÚget_descriptionr·Ú
startswithrÚLinkrÚurljoinrs)rŽrMrtrur5ràrr!r!r&rǶs 	zSchemaGenerator.get_linkcCsQt|d|jƒƒ}t||dƒj}|rFtjt|ƒƒS|jƒ}dd„|jƒDƒ}d}ddi}	xZ|D]R}
tj	|
ƒrÄ|
j
dƒ\}}}|jƒ|	|<q„|	|d|
7<q„Wt|d|jƒƒ}
|
|	kr|	|
jƒS|
|jkrC|j|
|	krC|	|j|
jƒS|	djƒS)z—
        Determine a link description.

        This will be based on the method docstring if one exists,
        or else the class docstring.
        roNcSsg|]}|jƒ‘qSr!)rK)r#Úliner!r!r&r'ßs	z3SchemaGenerator.get_description.<locals>.<listcomp>rú:Ú
)
rarsr¬rÚdedentrÚget_view_descriptionÚ
splitlinesÚheader_regexÚmatchÚ	partitionrKr´)rŽrMrtruÚmethod_nameZmethod_docstringrÚlinesZcurrent_sectionÚsectionsrëZ	seperatorÚleadÚheaderr!r!r&rçÑs(
zSchemaGenerator.get_descriptioncCsetd	ƒ}t|dgƒ}x@|D]8}t|ddƒ}||krM|S|dkr%dSq%WdS)
zN
        Return the 'encoding' parameter to use for a given endpoint.
        úapplication/jsonú!application/x-www-form-urlencodedúmultipart/form-dataÚparser_classesÚ
media_typeNz*/*zapplication/octet-stream)rùrúrû)rnra)rŽrMrtruZsupported_media_typesrüÚparser_classrýr!r!r&ræòs	
zSchemaGenerator.get_encodingc
Cs‹tt|ddƒddƒ}g}x`tj|ƒD]O}d}d}tj}	i}
|dk	r@y|jj|ƒ}Wnd}YnX|dk	r¬|jr¬t|jƒ}|dk	rÓ|j	rÓt|j	ƒ}n$|dk	r÷|j
r÷t||ƒ}t|dƒr%|j
|kr%|j|
d<nt|tjƒr@tj}	tjd|dd	d
dd|	d
|d||
ƒ}|j|ƒq4W|S)zs
        Return a list of `coreapi.Field` instances corresponding to any
        templated path variables.
        rÚNr]rÚlookup_value_regexr”r\rßrMÚrequiredTÚschemarr)rarÚ	variablesrr7rZÚ	get_fieldr†r
r-Úprimary_keyrˆrrÚlookup_fieldrÿr.rrƒrErÚFieldr˜)
rŽrMrtrur]r5ÚvariablerrÚ
schema_clsrÓr‡rHr!r!r&rás:			zSchemaGenerator.get_path_fieldscCs|d
krgSt|dƒs#gS|jƒ}t|tjƒrltjddddd	d
dtjƒƒgSt|tj	ƒs‚gSg}x„|j
jƒD]s}|js˜t|tj
ƒr¼q˜|joÎ|dk}tjd|jddd	|dt|ƒƒ}|j|ƒq˜W|S)z”
        Return a list of `coreapi.Field` instances corresponding to any
        request body input, as determined by the serializer class.
        ryr{rxÚget_serializerr\ÚdatarßrÞrTrrÝ)zPUTzPATCHzPOST)rrr	r.rr/rrrr2r3r5ÚvaluesÚ	read_onlyÚHiddenFieldrrÜr"r˜)rŽrMrtruÚ
serializerr5rHrr!r!r&râ2s2			z%SchemaGenerator.get_serializer_fieldscCsKt|||ƒsgSt|ddƒ}|s2gS|jƒ}|j|ƒS)NÚpagination_class)rvrarÚget_schema_fields)rŽrMrtruZ
paginationÚ	paginatorr!r!r&rã\sz%SchemaGenerator.get_pagination_fieldscCs`t|||ƒsgSt|ddƒs,gSg}x'|jD]}||ƒj|ƒ7}q<W|S)NÚfilter_backends)rvrarr)rŽrMrtrur5Zfilter_backendr!r!r&rägsz!SchemaGenerator.get_filter_fieldscCst|dƒr|j}n.t|||ƒr6d}n|j|jƒ}dd„|jdƒjdƒDƒ}t|ƒrÞt|j	ƒdkrÉ|j|jƒ}||j
kr¾|j
|}||gS|dd…|gS||j
krú|j
|}||gS)	a
        Return a list of keys that should be used to layout a link within
        the schema document.

        /users/                   ("users", "list"), ("users", "create")
        /users/{pk}/              ("users", "read"), ("users", "update"), ("users", "delete")
        /users/enabled/           ("users", "enabled")  # custom viewset list action
        /users/{pk}/star/         ("users", "star")     # custom viewset detail action
        /users/{pk}/groups/       ("users", "groups", "list"), ("users", "groups", "create")
        /users/{pk}/groups/{pk}/  ("users", "groups", "read"), ("users", "groups", "update"), ("users", "groups", "delete")
        ror;cSs"g|]}d|kr|‘qS)rqr!)r#rÎr!r!r&r'Œs	z,SchemaGenerator.get_keys.<locals>.<listcomp>rJreNrf)rrrorvÚdefault_mappingrsrKrLrprÈrÕr´)rŽrËrtruroZnamed_path_componentsr!r!r&rÉus"		

zSchemaGenerator.get_keys)r©rªr«rr‰rºr´r¶r‘rÁr»rÅrÃrÆrÄrÇrçrærárârãrärÉr!r!r!r&r­s."
!+*r­csLeZdZdZdZdZdZdZ‡fdd†Zdd„Z	‡S)Ú
SchemaViewTNFcsett|ƒj||Ž|jdkratjtjkrRtjtjg|_ntjg|_dS)N)	Úsuperrr‘Úrenderer_classesrÚBrowsableAPIRendererrÚDEFAULT_RENDERER_CLASSESÚCoreJSONRenderer)rŽrÒrÓ)Ú	__class__r!r&r‘©szSchemaView.__init__cOs:|jj||jƒ}|dkr0tjƒ‚t|ƒS)N)Úschema_generatorrÁr¿r
rr)rŽr¾rÒrÓrr!r!r&rG´szSchemaView.get)
r©rªr«Ú_ignore_model_permissionsrÂrrr¿r‘rGr!r!)rr&r¢srFc	CsC|d|d|d|d|d|ƒ}tjd|d|d|ƒS)	z
    Return a schema view.
    rr·rrrrrr¿)rÚas_view)	rr·rrrr¿rZgenerator_classÚ	generatorr!r!r&Úget_schema_view»s	r)>ÚreÚcollectionsrÚ	importlibrÚdjango.confrZdjango.contrib.admindocs.viewsrÚdjango.core.exceptionsrÚ	django.dbrÚdjango.httprÚdjango.utilsr	Údjango.utils.encodingr
rÚdjango.utils.translationrr„Úrest_frameworkr
rrÚrest_framework.compatrrrrrrÚrest_framework.requestrÚrest_framework.responserÚrest_framework.settingsrZrest_framework.utilsrZrest_framework.utils.model_metarÚrest_framework.viewsrÚcompilerñr"rYr_rdrhrprvrrˆÚobjectr‰r­rrr!r!r!r&Ú<module>sD.9Tÿ