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__ / relations.cpython-35.pyc
Size: Mime:


«¬šY˜Lã
@sddlmZddlmZddlmZmZddlmZddl	m
Z
ddlmZddl
mZmZmZddlmZdd	lmZdd
lmZmZmZmZddlmZmZmZm Z m!Z!ddl"m#Z#dd
l$m%Z%ddl&m'Z'dd„Z(Gdd„dej)ƒZ*eGdd„de+ƒƒZ,d1Z-Gd"d#„d#eƒZ.Gd$d%„d%e.ƒZ/Gd&d'„d'e.ƒZ0Gd(d)„d)e.ƒZ1Gd*d+„d+e1ƒZ2Gd,d-„d-e.ƒZ3Gd.d/„d/eƒZ4d0S)2é)Úunicode_literals)ÚOrderedDict)ÚImproperlyConfiguredÚObjectDoesNotExist)ÚManager)ÚQuerySet)Úsix)Úpython_2_unicode_compatibleÚ
smart_textÚ
uri_to_iri)Úparse)Ú
ugettext_lazy)ÚNoReverseMatchÚResolver404Úget_script_prefixÚresolve)ÚFieldÚemptyÚ
get_attributeÚis_simple_callableÚiter_options)Úreverse)Úapi_settings)ÚhtmlcCs7t||ƒ}t|d|ƒ}|t||ƒjk	S)z4
    Determine if a method has been overridden.
    Ú__func__)Úgetattrr)Úmethod_nameÚklassÚinstanceÚmethodÚdefault_method©r!úW/Users/carlton/Documents/Django-Stack/django-rest-framework/rest_framework/relations.pyÚmethod_overriddensr#c@sFeZdZdZdd„Zdd„Zedd„ƒZdZd	S)
Ú	HyperlinkzÇ
    A string like object that additionally has an associated name.
    We use this for hyperlinked URLs that may render as a named link
    in some contexts, or render as a plain URL in others.
    cCs"tjj||ƒ}||_|S)N)rÚ	text_typeÚ__new__Úobj)ÚselfÚurlr'Úretr!r!r"r&*s	zHyperlink.__new__cCst|ƒ|jfS)N)ÚstrÚname)r(r!r!r"Ú__getnewargs__/szHyperlink.__getnewargs__cCstj|jƒS)N)rr%r')r(r!r!r"r,2szHyperlink.nameTN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&r-Úpropertyr,Zis_hyperlinkr!r!r!r"r$$s
r$c@s.eZdZdZdd„Zdd„ZdS)ÚPKOnlyObjectzÜ
    This is a mock object, used for when we only need the pk of the object
    instance, but still want to return an object with a .pk attribute,
    in order to keep the same interface as a regular model instance.
    cCs
||_dS)N)Úpk)r(r4r!r!r"Ú__init__CszPKOnlyObject.__init__cCsd|jS)Nz%s)r4)r(r!r!r"Ú__str__FszPKOnlyObject.__str__N)r.r/r0r1r5r6r!r!r!r"r3<sr3Ú	read_onlyÚ
write_onlyÚrequiredÚdefaultÚinitialÚsourceÚlabelÚ	help_textÚstyleÚerror_messagesÚallow_emptyÚhtml_cutoffÚhtml_cutoff_textcsÜeZdZdZdZdZ‡fdd†Z‡fdd†Zedd„ƒZ	e
‡fdd	†Zd
d„Zdd
„Z
dd„Zddd„Zedd„ƒZedd„ƒZdd„Zdd„Z‡S)ÚRelatedFieldNcs|jd|jƒ|_tj}|dk	r9t|ƒ}|jd|ƒ|_|jd|jplttjƒƒ|_t	dt
|ƒs´|jdk	s´|jddƒs´tdƒ‚|jdk	oÒ|jddƒsâtdƒ‚|jddƒ|jd	dƒt
t
|ƒj|dS)
NÚquerysetrBrCÚget_querysetr7zfRelational field must provide a `queryset` argument, override `get_queryset`, or set read_only=`True`.zZRelational fields should not provide a `queryset` argument, when setting read_only=`True`.ÚmanyrA)ÚpoprErÚHTML_SELECT_CUTOFFÚintrBrCÚ_ÚHTML_SELECT_CUTOFF_TEXTr#rDÚgetÚAssertionErrorÚsuperr5)r(ÚkwargsÚcutoff_from_settings)Ú	__class__r!r"r5Xs 	$	%	zRelatedField.__init__cs>|jddƒr"|j||ŽStt|ƒj|||ŽS)NrGF)rHÚ	many_initrOrDr&)ÚclsÚargsrP)rRr!r"r&qszRelatedField.__new__cOsPd|||Ži}x.|jƒD] }|tkr"||||<q"Wt|S)aX
        This method handles creating a parent `ManyRelatedField` instance
        when the `many=True` keyword argument is passed.

        Typically you won't need to override this method.

        Note that we're over-cautious in passing most arguments to both parent
        and child classes in order to try to cover the general case. If you're
        overriding this method you'll probably want something much simpler, eg:

        @classmethod
        def many_init(cls, *args, **kwargs):
            kwargs['child'] = cls()
            return CustomManyRelatedField(*args, **kwargs)
        Úchild_relation)ÚkeysÚMANY_RELATION_KWARGSÚManyRelatedField)rTrUrPÚlist_kwargsÚkeyr!r!r"rSxs
zRelatedField.many_initcs(|dkrd}tt|ƒj|ƒS)NÚ)rOrDÚrun_validation)r(Údata)rRr!r"r]szRelatedField.run_validationcCs.|j}t|ttfƒr*|jƒ}|S)N)rEÚ
isinstancerrÚall)r(rEr!r!r"rF•s	zRelatedField.get_querysetcCsdS)NFr!)r(r!r!r"Úuse_pk_only_optimization¡sz%RelatedField.use_pk_only_optimizationcCs•|jƒr…|jr…y[t||jdd…ƒ}|j|jdƒ}t|ƒrb|ƒj}td|ƒSWntk
r„YnXt||jƒS)Nér4éÿÿÿÿrc)raÚsource_attrsrÚserializable_valuerr4r3ÚAttributeError)r(rÚvaluer!r!r"r¤s
zRelatedField.get_attributecsUˆjƒ}|dkriS|dk	r8|d|…}t‡fdd†|DƒƒS)Ncs.g|]$}ˆj|ƒˆj|ƒf‘qSr!)Úto_representationÚ
display_value)Ú.0Úitem)r(r!r"ú
<listcomp>Às	z,RelatedField.get_choices.<locals>.<listcomp>)rFr)r(ÚcutoffrEr!)r(r"Úget_choicesµszRelatedField.get_choicescCs
|jƒS)N)rn)r(r!r!r"ÚchoicesÇszRelatedField.choicescCs|jS)N)ro)r(r!r!r"Úgrouped_choicesËszRelatedField.grouped_choicescCs+t|jd|jƒd|jd|jƒS)NrmÚcutoff_text)rrnrBrC)r(r!r!r"rÏs	zRelatedField.iter_optionscCs
tj|ƒS)N)rr%)r(rr!r!r"riÖszRelatedField.display_value)r.r/r0rErBrCr5r&ÚclassmethodrSrr]rFrarrnr2rorprrir!r!)rRr"rDSsrDcs4eZdZdZ‡fdd†Zdd„Z‡S)ÚStringRelatedFieldzd
    A read only field that represents its targets using their
    plain string representation.
    cs$d|d<tt|ƒj|dS)NTr7)rOrsr5)r(rP)rRr!r"r5às
zStringRelatedField.__init__cCs
tj|ƒS)N)rr%)r(rgr!r!r"rhäsz$StringRelatedField.to_representation)r.r/r0r1r5rhr!r!)rRr"rsÚsrsc	speZdZdedƒdedƒdedƒiZ‡fdd†Zd	d
„Zdd„Zd
d„Z‡S)ÚPrimaryKeyRelatedFieldr9zThis field is required.Údoes_not_existz0Invalid pk "{pk_value}" - object does not exist.Úincorrect_typez8Incorrect type. Expected pk value, received {data_type}.cs/|jddƒ|_tt|ƒj|dS)NÚpk_field)rHrwrOrtr5)r(rP)rRr!r"r5ïszPrimaryKeyRelatedField.__init__cCsdS)NTr!)r(r!r!r"raósz/PrimaryKeyRelatedField.use_pk_only_optimizationcCsš|jdk	r!|jj|ƒ}y|jƒjd|ƒSWnXtk
rb|jdd|ƒYn4ttfk
r•|jddt|ƒj	ƒYnXdS)Nr4ruÚpk_valuervÚ	data_type)
rwÚto_internal_valuerFrMrÚfailÚ	TypeErrorÚ
ValueErrorÚtyper.)r(r^r!r!r"rzös
z(PrimaryKeyRelatedField.to_internal_valuecCs)|jdk	r"|jj|jƒS|jS)N)rwrhr4)r(rgr!r!r"rhsz(PrimaryKeyRelatedField.to_representation)	r.r/r0rKÚdefault_error_messagesr5rarzrhr!r!)rRr"rtès
rtcs¯eZdZdZdZdedƒdedƒdedƒd	ed
ƒdedƒiZd‡fd
d†Zdd„Zdd„Z	dd„Z
dd„Zdd„Z‡S)ÚHyperlinkedRelatedFieldr4Nr9zThis field is required.Úno_matchz!Invalid hyperlink - No URL match.Úincorrect_matchz(Invalid hyperlink - Incorrect URL match.ruz*Invalid hyperlink - Object does not exist.rvz:Incorrect type. Expected URL string, received {data_type}.cs˜|dk	r||_|jdk	s0tdƒ‚|jd|jƒ|_|jd|jƒ|_|jddƒ|_t|_tt|ƒj	|dS)Nz%The `view_name` argument is required.Úlookup_fieldÚlookup_url_kwargÚformat)
Ú	view_namerNrHrƒr„r…rrOr€r5)r(r†rP)rRr!r"r5s		z HyperlinkedRelatedField.__init__cCs
|jdkS)Nr4)rƒ)r(r!r!r"ra!sz0HyperlinkedRelatedField.use_pk_only_optimizationcCs/||j}|j|i}|jƒj|S)zÌ
        Return the object corresponding to a matched URL.

        Takes the matched URL conf arguments, and should return an
        object instance, or raise an `ObjectDoesNotExist` exception.
        )r„rƒrFrM)r(r†Z	view_argsZview_kwargsÚlookup_valueÚ
lookup_kwargsr!r!r"Ú
get_object$s
z"HyperlinkedRelatedField.get_objectc
Csbt|dƒr"|jdkr"dSt||jƒ}|j|i}|j|d|d|d|ƒS)zã
        Given an object, return the URL that hyperlinks to the object.

        May raise a `NoReverseMatch` if the `view_name` and `lookup_field`
        attributes are not configured to correctly match the URL conf.
        r4Nr\rPÚrequestr…)Nr\)Úhasattrr4rrƒr„r)r(r'r†rŠr…r‡rPr!r!r"Úget_url/s
zHyperlinkedRelatedField.get_urlc%Cs†|jjddƒ}y|jd
ƒ}Wn.tk
rX|jddt|ƒjƒYnX|r£tj|ƒj}t	ƒ}|j|ƒr£d|t
|ƒd…}t|ƒ}yt|ƒ}Wnt
k
rà|jdƒYnXy|jj|j|ƒ}Wntk
r|j}YnX|j|kr7|jdƒy |j|j|j|jƒSWn(tttfk
r|jd	ƒYnXdS)NrŠúhttp:úhttps:rvryú/rr‚ru)rrŽ)ÚcontextrMÚ
startswithrfr{r~r.ÚurlparseÚpathrÚlenrrrZversioning_schemeZget_versioned_viewnamer†r‰rUrPrr|r})r(r^rŠZhttp_prefixÚprefixÚmatchZexpected_viewnamer!r!r"rz>s4
!	
	

 z)HyperlinkedRelatedField.to_internal_valuec
Csd|jks%td|jjƒ‚|jd}|jjddƒ}|rn|jrn|j|krn|j}y|j||j||ƒ}Wn[tk
rêd}|d	krÓddddi|}|d|7}t	||jƒ‚YnX|dkrûdSt
||ƒS)
NrŠzz`%s` requires the request in the serializer context. Add `context={'request': request}` when instantiating the serializer.r…zÌCould not resolve URL for hyperlinked relationship using view name "%s". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.r\zthe empty stringÚNonez} WARNING: The value of the field on the model instance was %s, which may be why it didn't match any entries in your URL conf.)r\N)rrNrRr.rMr…rŒr†rrr$)r(rgrŠr…r)ÚmsgZvalue_stringr!r!r"rhbs(
	
z)HyperlinkedRelatedField.to_representation)
r.r/r0rƒr†rKrr5rar‰rŒrzrhr!r!)rRr"r€s$r€cs7eZdZdZd‡fdd†Zdd„Z‡S)ÚHyperlinkedIdentityFieldzÉ
    A read-only field that represents the identity URL for an object, itself.

    This is in contrast to `HyperlinkedRelatedField` which represents the
    URL of relationships to other objects.
    NcsI|dk	stdƒ‚d|d<d|d<tt|ƒj||dS)Nz%The `view_name` argument is required.Tr7Ú*r<)rNrOr™r5)r(r†rP)rRr!r"r5™s

z!HyperlinkedIdentityField.__init__cCsdS)NFr!)r(r!r!r"raŸsz1HyperlinkedIdentityField.use_pk_only_optimization)r.r/r0r1r5rar!r!)rRr"r™‘sr™csaeZdZdZdedƒdedƒiZd‡fdd†Zd	d
„Zdd„Z‡S)
ÚSlugRelatedFieldzm
    A read-write field that represents the target of the relationship
    by a unique 'slug' attribute.
    ruz/Object with {slug_name}={value} does not exist.ÚinvalidzInvalid value.Ncs;|dk	stdƒ‚||_tt|ƒj|dS)Nz&The `slug_field` argument is required.)rNÚ
slug_fieldrOr›r5)r(rrP)rRr!r"r5¯s	zSlugRelatedField.__init__c
Csy |jƒj|j|iSWnXtk
rV|jdd|jdt|ƒƒYn%ttfk
rz|jdƒYnXdS)NruZ	slug_namergrœ)rFrMrrr{r
r|r})r(r^r!r!r"rz´s 
&z"SlugRelatedField.to_internal_valuecCst||jƒS)N)rr)r(r'r!r!r"rh¼sz"SlugRelatedField.to_representation)	r.r/r0r1rKrr5rzrhr!r!)rRr"r›¥sr›csÐeZdZdZgZgZdedƒdedƒiZdZdZ	d‡fdd†Z
d	d
„Zdd„Zd
d„Z
dd„Zddd„Zedd„ƒZedd„ƒZdd„Z‡S)rYaÏ
    Relationships with `many=True` transparently get coerced into instead being
    a ManyRelatedField with a child relationship.

    The `ManyRelatedField` class is responsible for handling iterating through
    the values and passing each one to the child relationship.

    This class is treated as private API.
    You shouldn't generally need to be using this class directly yourself,
    and should instead simply set 'many=True' on the relationship.
    Ú
not_a_listz5Expected a list of items but got type "{input_type}".rzThis list may not be empty.NcsÉ||_|jddƒ|_tj}|dk	r?t|ƒ}|jd|ƒ|_|jd|jprttj	ƒƒ|_|dk	s“t
dƒ‚tt|ƒj
||Ž|jjddd|ƒdS)	NrATrBrCz(`child_relation` is a required argument.Ú
field_namer\Úparent)rVrHrArrIrJrBrCrKrLrNrOrYr5Úbind)r(rVrUrPrQ)rRr!r"r5Õs		zManyRelatedField.__init__cCsZtj|ƒrG|j|kr7t|jddƒr7tS|j|jƒS|j|jtƒS)NÚpartialF)rÚ
is_html_inputrŸrÚrootrÚgetlistrM)r(Ú
dictionaryr!r!r"Ú	get_valueæszManyRelatedField.get_valuecst|tdƒƒs%t|dƒrAˆjddt|ƒjƒˆjrjt|ƒdkrjˆjdƒ‡fdd†|DƒS)	Nr\Ú__iter__ržÚ
input_typerrcs"g|]}ˆjj|ƒ‘qSr!)rVrz)rjrk)r(r!r"rlùs	z6ManyRelatedField.to_internal_value.<locals>.<listcomp>)r_r~r‹r{r.rAr”)r(r^r!)r(r"rzòs%
z"ManyRelatedField.to_internal_valuecCsQt|dƒr"|jdkr"gSt||jƒ}t|dƒrM|jƒS|S)Nr4r`)r‹r4rrdr`)r(rZrelationshipr!r!r"rýszManyRelatedField.get_attributecs‡fdd†|DƒS)Ncs"g|]}ˆjj|ƒ‘qSr!)rVrh)rjrg)r(r!r"rls	z6ManyRelatedField.to_representation.<locals>.<listcomp>r!)r(Úiterabler!)r(r"rhsz"ManyRelatedField.to_representationcCs|jj|ƒS)N)rVrn)r(rmr!r!r"rnszManyRelatedField.get_choicescCs
|jƒS)N)rn)r(r!r!r"roszManyRelatedField.choicescCs|jS)N)ro)r(r!r!r"rpsz ManyRelatedField.grouped_choicescCs+t|jd|jƒd|jd|jƒS)Nrmrq)rrnrBrC)r(r!r!r"rs	zManyRelatedField.iter_options)r.r/r0r1r;Údefault_empty_htmlrKrrBrCr5r§rzrrhrnr2rorprr!r!)rRr"rYÀs rYN)
z	read_onlyz
write_onlyzrequiredzdefaultzinitialzsourcezlabelz	help_textzstylezerror_messageszallow_emptyzhtml_cutoffzhtml_cutoff_text)5Ú
__future__rÚcollectionsrÚdjango.core.exceptionsrrÚdjango.db.modelsrÚdjango.db.models.queryrÚdjango.utilsrÚdjango.utils.encodingr	r
rZdjango.utils.six.moves.urllibrr’Údjango.utils.translationr
rKÚrest_framework.compatrrrrÚrest_framework.fieldsrrrrrZrest_framework.reverserÚrest_framework.settingsrÚrest_framework.utilsrr#r%r$Úobjectr3rXrDrsrtr€r™r›rYr!r!r!r"Ú<module>s6"(	‡‹