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    
Size: Mime:
ó
ʍEYc@sædZddlZddlZddlZddlZddlZddlZddlm	Z	ddlm
Z
ddlmZddl
Z
ddlmZmZddlmZddlmZejd	ƒZd
efd„ƒYZd„Zd
„Zdefd„ƒYZd„Zd„Zdefd„ƒYZdefd„ƒYZdefd„ƒYZ dej!fd„ƒYZ"dej#fd„ƒYZ$e
j%ej&ƒdefd„ƒYƒZ'd„Z(e)d„Z*d „Z+d!„Z,dS("sCommon internal object modeliÿÿÿÿN(tencodeutils(texcutils(tversionutils(t_t_LE(t	exception(tfieldstobjectt_NotSpecifiedSentinelcBseZRS((t__name__t
__module__(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR%scCsd|S(s>Return the mangled name of the attribute's underlying storage.t_obj_((tname((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt
_get_attrname)scCst|jƒ|_xo|jƒdd!D]Z}t|dƒsAq&nx<|jjƒD]+\}}||jkrQ||j|<qQqQWq&Wx“|jjƒD]‚\}}t|tjƒsÓtj	d|d|j
ƒƒ‚n|d„}||d„}|d„}t||t|||ƒƒq”WdS(	NiiÿÿÿÿRtfieldtobjnamecSs8t|ƒ}t||ƒs+|j|ƒnt||ƒS(N(R
thasattrt
obj_load_attrtgetattr(tselfRtattrname((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytgetter@sc
Ssìt|ƒ}|j|||ƒ}|jrjt||ƒrjt||ƒ|krctjd|ƒ‚qjdSn|jj|ƒyt	|||ƒSWnWt
k
rçtjƒ8d|j
ƒ|f}tjtdƒi|d6ƒWdQXnXdS(NRs%s.%ssError setting %(attr)stattr(R
tcoercet	read_onlyRRRtReadOnlyFieldErrort_changed_fieldstaddtsetattrt	ExceptionRtsave_and_reraise_exceptiontobj_nametLOGR(RtvalueRRRtfield_valueR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytsetterFs

cSs?t|ƒ}t||ƒs.td|ƒ‚nt||ƒdS(NsNo such attribute `%s'(R
RtAttributeErrortdelattr(RRR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytdeleterZs(
tdictRtmroRtitemst
isinstancet
obj_fieldstFieldRtObjectFieldInvalidRRtproperty(tclstsuperclsRRRR#R&((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_make_class_properties.s	tVersionedObjectRegistrycBseeZdZd„Zd„Zd„Zed„ƒZed„ƒZ	ed„ƒZ
ed„ƒZRS(cOsatjs9tjt||Žt_tjtƒtj_ntj|||Ž}tjj|_|S(N(R2t	_registryRt__new__tcollectionstdefaultdicttlistt_obj_classes(R/targstkwargsR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR4fs	cCsdS(N((RR/tindex((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytregistration_hookpscCsÕd„}t|ƒ|jƒ}x¯t|j|ƒD]v\}}|j||ƒ|j|jkrv||j||<Pn||ƒ||ƒkr3|j|j||ƒPq3q3W|j|j|ƒ|j|dƒdS(NcSstj|jƒS(N(tvutilstconvert_version_to_tupletVERSION(tobj((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_vers_tupletsi(R1Rt	enumerateR8R<R?tinserttappend(RR/RARtiR@((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_register_classss	
 cCs|ƒ}|j|ƒ|S(N(RF(R/tobj_clstregistry((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytregisterˆs	
cs‡‡fd†}|S(Ncs&ˆrˆj|ƒ}n
t|ƒ|S(N(RIR1(RG(R/t	condition(sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytwrapss
((R/RJRK((R/RJsO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytregister_ifŽscCs|jtƒ|ƒS(N(RLtFalse(R/RG((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt	objectify˜scCs|ƒ}|jS(N(R8(R/RH((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytobj_classesœs	N(R	R
tNoneR3R4R<RFtclassmethodRIRLRNRO(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR2cs	
		
cs:tjˆƒ‡fd†ƒ}t|_ˆ|_t|ƒS(s%Decorator for remotable classmethods.csÁ|jrt|jƒƒ}y.|jj||jƒˆj|||ƒ}Wq½tk
r‰|jj||jƒˆj|j||ƒ}q½Xn0ˆ||||Ž}t|t	ƒr½||_
n|S(N(tindirection_apitobj_tree_get_versionsRtobject_class_action_versionsR	tNotImplementedErrortobject_class_actionR?R*tVersionedObjectt_context(R/tcontextR9R:tversion_manifesttresult(tfn(sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytwrapperªs		
	(tsixRKtTruet	remotabletoriginal_fnRQ(R\R]((R\sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytremotable_classmethod¨s		cs4tjˆƒ‡fd†ƒ}t|_ˆ|_|S(s'Decorator for remotable object methods.c	s#|j}|dkr9tjdˆjd|jƒƒ‚n|jr|jj||ˆj||ƒ\}}xz|jƒD]l\}}||j	krv|j	|}t
|tƒrÀt|||ƒqât|||j
|||ƒƒqvqvW|jƒt|jdgƒƒ|_|Sˆ|||ŽSdS(Ntmethodtobjtypetobj_what_changed(RXRPRtOrphanedObjectErrorR	RRRt
object_actionR)RR*RWRtfrom_primitivetobj_reset_changestsettgetR(	RR9R:tctxttupdatesR[tkeyR!R(R\(sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR]Ês$			
	
(R^RKR_R`Ra(R\R]((R\sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR`Ès		RWcBspeZdZdZdZdZdZiZgZ	iZ
dd„Zd„Zd„Z
ed„ƒZed„ƒZed	„ƒZeejd
„ƒZed„ƒZed„ƒZedd
„ƒZd„Zd„Zd„Zd„Zd„Zd„Zddd„Zd„Zd„Z d„Z!d„Z"d„Z#de$d„Z%d„Z&e'd„ƒZe'd„ƒZ(RS(s\Base class and object factory.

    This forms the base of all objects that can be remoted or instantiated
    via RPC. Simply defining a class that inherits from this base class
    will make it remotely instantiatable. Objects should implement the
    necessary "get" classmethod routines as well as "save" object methods
    as appropriate.
    s1.0tversioned_objecttversionedobjectscKsDtƒ|_||_x(|jƒD]}t||||ƒq"WdS(N(RjRRXtkeysR(RRYR:Rn((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__init__/s	cCsd|jƒdjgt|jjƒƒD]C\}}d||j|ƒra|jt||ƒƒpddf^q(ƒf}tj	s™t
j|ddƒ}n|S(Ns%s(%s)t,s%s=%ss<?>tincomingsutf-8(RtjointsortedRR)tobj_attr_is_sett	stringifyRR^tPY3Rtsafe_encode(RRRtrepr_str((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__repr__5s		c	cCs*y|j|ƒSWntk
r%tSXdS(N(RwR$RM(RR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__contains__As
cCs@|jƒ}idd6|d6}|jtj|ƒjƒƒ|S(Ns'http://json-schema.org/draft-04/schema#s$schemattitle(RtupdateR+tObjectt
get_schema(R/Rtschema((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytto_json_schemaGs
cCs|jS(s‘Return the object's name

        Return a canonical name for this object which will be used over
        the wire for remote hydration.
        (R	(R/((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRQscCsd|j|fS(Ns%s.%s(tOBJ_SERIAL_NAMESPACE(R/R((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_obj_primitive_keyZscCs:|j|ƒ}|tjkr&||S|j||ƒSdS(N(R…R+tUnspecifiedDefaultRk(R/t	primitiveRtdefaultRn((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_obj_primitive_field^scCsâ|tjƒkrFtjtdƒtd|ƒƒtjd|ƒ‚nd}xPtjƒ|D]>}|j	|krv|S|r]t
j||j	ƒr]|}q]q]W|r©|Stjƒ|dj	}tjd|d|d|ƒ‚dS(s>Returns a class from the registry based on a name and version.s:Unable to instantiate unregistered object type %(objtype)sRdiRtobjvert	supportedN(
R2ROR terrorRR'RtUnsupportedObjectErrorRPR?R=t
is_compatibletIncompatibleObjectVersion(R/RRŠtcompatible_matchtobjclasst
latest_ver((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytobj_class_from_namegs"
c
	CsÉ|ƒ}||_||_|j|dƒ}|j|dgƒ}xO|jjƒD]>\}}||krRt|||j||||ƒƒqRqRWtg|D]}	|	|jkrž|	^qžƒ|_|S(Ntdatatchanges(	RXR?R‰RR)RRhRjR(
R/RYRŠR‡RtobjdataR•RRtx((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_obj_from_primitive…s			1cCs‰|j|dƒ}|j|dƒ}|j|dƒ}||jkrdtjdd||fƒ‚n|j||ƒ}|j|||ƒS(s Object field-by-field hydration.t	namespaceRtversionRds%s.%s(R‰tOBJ_PROJECT_NAMESPACERRR“R˜(R/R‡RYtobjnsRRŠR‘((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytobj_from_primitive“s	cCs|jƒ}||t|ƒ<|j|_xN|jD]C}|j|ƒr2tjt||ƒ|ƒ}t|||ƒq2q2Wt	|j
ƒ|_
|S(s,Efficiently make a deep copy of this object.(t	__class__tidRXRRwtcopytdeepcopyRRRjR(RtmemotnobjRtnval((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__deepcopy__¡s	cCs
tj|ƒS(sCreate a copy.(R R¡(R((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt	obj_clone¸scCs˜t|dƒs|jdkray|j|SWqatk
r]tjdddd|ƒ‚qaXn|j|j}||jkr„dS||j|fgS(Nt_obj_version_manifesttactiontobj_make_compatibletreasonsNo rule for %s(	RR§RPtobj_relationshipstKeyErrorRtObjectActionErrorRR(RRttarget_versionR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_obj_relationship_for¼s
	csaˆjˆ|ƒ}|sdSy#t||‡‡‡fd†ƒWntjk
r\ˆˆ=nXdS(sqBacklevel a sub-object based on our versioning rules.

        This is responsible for backporting objects contained within
        this object's primitive according to a set of rules we
        maintain about version dependencies between objects. This
        requires that the obj_relationships table in this object is
        correct and up-to-date.

        :param:primitive: The primitive version of this object
        :param:target_version: The version string requested for this object
        :param:field: The name of the field in this object containing the
                      sub-object to be backported
        Ncst|ˆˆˆƒS(N(t_do_subobject_backport(tver(RR‡R(sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt<lambda>çs(R¯t_get_subobject_versionRt%TargetBeforeSubobjectExistedException(RR‡R®Rtrelationship_map((RR‡RsO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_obj_make_obj_compatibleÏscCsmxf|jjƒD]U\}}t|tjtjfƒs=qn|j|ƒsRqn|j|||ƒqWdS(s]Make an object representation compatible with a target version.

        This is responsible for taking the primitive representation of
        an object and making it suitable for the given target_version.
        This may mean converting the format of object attributes, removing
        attributes that have been added since the target version, etc. In
        general:

        - If a new version of an object adds a field, this routine
          should remove it for older versions.
        - If a new version changed or restricted the format of a field, this
          should convert it back to something a client knowing only of the
          older version will tolerate.
        - If an object that this object depends on is bumped, then this
          object should also take a version bump. Then, this routine should
          backlevel the dependent object (by calling its obj_make_compatible())
          if the requested version of this object is older than the version
          where the new dependent object was added.

        :param primitive: The result of :meth:`obj_to_primitive`
        :param target_version: The version string requested by the recipient
                               of the object
        :raises: :exc:`oslo_versionedobjects.exception.UnsupportedObjectError`
                 if conversion is not possible for some reason
        N(RR)R*R+tObjectFieldtListOfObjectsFieldRwR¶(RR‡R®RnR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR©íscCs2||_z|j||ƒSWdt|dƒXdS(NR§(R§R©R%(RR‡R®RZ((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt!obj_make_compatible_from_manifests		c	Cs…|dkr|j}ntj|ƒtj|jƒkrNtjd|ƒ‚ntƒ}xQ|jjƒD]@\}}|j	|ƒrg|j
||t||ƒƒ||<qgqgW||jksÀ|rÖ|j|||ƒni|j
ƒ|jdƒ6|j|jdƒ6||jdƒ6||jdƒ6}|jƒr|jƒ}g|D]}||krD|^qD}|r|||jdƒ<qn|S(sbSimple base-case dehydration.

        This calls to_primitive() for each item in fields.
        RšRR™R”R•N(RPR?R=R>RtInvalidTargetVersionR'RR)Rwtto_primitiveRR¹RR…R›Re(	RR®RZR‡RRR@twhat_changedR•((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytobj_to_primitives0		
%cGsÁ|sCg|jjƒD]$\}}|jtjkr|^q}nxw|D]o}tj|j|jƒ}|tjkr—tjdddd|ƒ‚n|j	|ƒsJt
|||ƒqJqJWdS(NR¨tset_defaultsRªsNo default set for field %s(RR)RˆR+R†R R¡RR­RwR(RtattrsRRRRˆ((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytobj_set_defaultsFs!
	cCsttdƒ|ƒ‚dS(s°Load an additional attribute from the real object.

        This should load self.$attrname and cache any data that might
        be useful for future load operations.
        s"Cannot load '%s' in the base classN(RUR(RR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRTscCsttdƒƒ‚dS(s²Save the changed fields back to the store.

        This is optional for subclasses, but is presented here in the base
        class for consistency among those that do.
        s&Cannot save anything in the base classN(RUR(RRY((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytsave]scCs•tg|jD]}||jkr
|^q
ƒ}x]|jD]R}|j|ƒr;tt||ƒtƒr;t||ƒjƒr;|j|ƒq;q;W|S(s0Returns a set of fields that have been modified.(	RjRRRwR*RRWReR(RRR•((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyReescCs4i}x'|jƒD]}t||ƒ||<qW|S(s6Returns a dict of changed fields and their new values.(ReR(RR•Rn((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytobj_get_changespscCs|r×xÎ|jƒD]½}|r1||kr1qn|j|ƒsFqnt||ƒ}|dkrgqnt|j|tjƒr“|jdt	ƒqt|j|tj
ƒrx!|D]}|jdt	ƒq³WqqWn|rõ|jt|ƒ8_n
|jj
ƒdS(säReset the list of fields that have been changed.

        :param fields: List of fields to reset, or "all" if None.
        :param recursive: Call obj_reset_changes(recursive=True) on
                          any sub-objects within the list of fields
                          being reset.

        This is NOT "revert to previous values".

        Specifying fields on recursive resets will only be honored at the top
        level. Everything below the top will reset all.
        t	recursiveN(RÂRwRRPR*RR+R·RiR_R¸RRjtclear(RRRÃRR!tthing((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRiws$


cCsO||jkr<ttdƒi|jƒd6|d6ƒ‚nt|t|ƒƒS(sÞTest object to see if attrname is present.

        Returns True if the named attribute has a value set, or
        False if not. Raises AttributeError if attrname is not
        a valid attribute for this object.
        s2%(objname)s object has no attribute '%(attrname)s'RR(R+R$RRRR
(RR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRw¢s
	!cCst|jjƒƒ|jS(N(R7RRqtobj_extra_fields(R((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR+¯scCs|jS(N(RX(R((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytobj_context³sN()R	R
t__doc__RPRRR?R„R›RRÆR«RrR|R}RQRƒRR…R+R†R‰R“R˜RR¥R¦R¯R¶R©R¹R½RÀRRÁReRÂRMRiRwR.RÇ(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRWésH		
	
					"	(						+	
tComparableVersionedObjectcBs eZdZd„Zd„ZRS(s’Mix-in to provide comparison methods

    When objects are to be compared with each other (in tests for example),
    this mixin can be used.
    cCs)t|dƒr%|jƒ|jƒkStS(NR½(RR½tNotImplemented(RR@((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__eq__¾scCs)t|dƒr%|jƒ|jƒkStS(NR½(RR½RÊ(RR@((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__ne__Ås(R	R
RÈRËRÌ(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRɸs	tVersionedObjectDictCompatcBseZdZd„ZeZd„Zd„ZejrKeZ	eZ
eZnd„Z	d„Z
d„Zd„Zd„Z
ed	„Zd
„ZRS(s<Mix-in to provide dictionary key access compatibility

    If an object needs to support attribute access using
    dictionary items instead of object attributes, inherit
    from this class. This should only be used as a temporary
    measure until all callers are converted to use modern
    attribute access.
    ccs>x7|jD],}|j|ƒs.||jkr
|Vq
q
WdS(N(R+RwRÆ(RR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__iter__Õsccs#x|D]}t||ƒVqWdS(N(R(RR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt
itervaluesÝs
ccs)x"|D]}|t||ƒfVqWdS(N(R(RR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt	iteritemsás
cCst|jƒƒS(N(R7titerkeys(R((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRqíscCst|jƒƒS(N(R7RÏ(R((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pytvaluesðscCst|jƒƒS(N(R7RÐ(R((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR)óscCs
t||ƒS(N(R(RR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__getitem__öscCst|||ƒdS(N(R(RRR!((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__setitem__ùscCs\||jkr+td|j|fƒ‚n|tkrK|j|ƒrK|St||ƒSdS(Ns!'%s' object has no attribute '%s'(R+R$RžRRwR(RRnR!((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRküscCs1x*|jƒD]\}}t|||ƒq
WdS(N(R)R(RRmRnR!((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRs(R	R
RÈRÎRÑRÏRÐR^RyRqRÒR)RÓRÔRRkR(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRÍËs 											tObjectListBasecBsxeZdZiejdƒd6ZiZd„Zd„Zd„Z	ded„Zd„Z
d„Zd	„Zd
„ZRS(s9Mixin class for lists of objects.

    This mixin class can be added as a base class for an object that
    is implementing a list of objects. It adds a single field of 'objects',
    which is the list store, and behaves like a list itself. It supports
    serialization of the list of objects automatically.
    RWtobjectscOsEtt|ƒj||Žd|krAg|_|jjdƒndS(NRÖ(tsuperRÕRrRÖRtdiscard(RR9R:((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRrs	cCs
t|jƒS(sList length.(tlenRÖ(R((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__len__!scCsPt|tƒrE|jƒ}|j||_|jƒ|j|_|S|j|S(sList index access.(R*tsliceRžRÖRiRX(RR;tnew_obj((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRÓ%s
cCs|jjd|d|ƒdS(NRntreverse(RÖtsort(RRnRÝ((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRÞ0scs¬ˆjrˆjjƒ}n3yˆjd|ƒ}Wntjk
rMi}nXy<|rvt||‡‡fd†ƒntdˆdˆƒWntjk
r§ˆd=nXdS(NRÖcst|ˆdˆƒS(NRÖ(R°(R±(R‡R(sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR²Gss1.0(tchild_versionsR)R¯RR­R³R°R´(RR‡R®t
relationships((R‡RsO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR©3s		

	cCsCt|jƒ}x-|jD]"}|jƒr|jdƒqqW|S(NRÖ(RjRRÖReR(RR•tchild((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyReOs
cCs]|j|jkrMt|jjjƒƒdgkrM|jd|j|jƒStdƒ‚dS(NRÖsHList Objects should be of the same type and only have an 'objects' field(RžR7RRqRÖt	TypeError(Rtother((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__add__Vs!cCsR|j|jkrBt|jjjƒƒdgkrBtdƒ‚ntdƒ‚dS(NRÖs8__radd__ is not implemented for objects of the same typesHList Objects should be of the same type and only have an 'objects' field(RžR7RRqRURâ(RRã((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt__radd__as!N(R	R
RÈR+R¸RRßRrRÚRÓRPRMRÞR©ReRäRå(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRÕ
s						tVersionedObjectSerializercBsAeZdZeZd„Zd„Zd„Zd„Zd„Z	RS(sJA VersionedObject-aware Serializer.

    This implements the Oslo Serializer interface and provides the
    ability to serialize and deserialize VersionedObject entities. Any service
    that needs to accept or return VersionedObjects as arguments or result
    values should pass this to its RPCClient and RPCServer objects.
    cCs`t|jƒƒ}|jj}y|j|||ƒSWn$tk
r[|j|||jƒSXdS(N(RSRtOBJ_BASE_CLASSRRtobject_backport_versionsRUtobject_backportR?(RRYtobjprimR‘tobj_versionsRR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_do_backportys
c	
Csy|jj|d|ƒSWnòtjk
rtjdtƒÊ}d|jj}||}|jdƒdkr¡dj	|j
dƒd ƒ||<|j||ƒSd|jj}||}tj
ƒj|gƒ}|jjrü|rü|j|||dƒSt|_WdQXnXdS(NRYtreraises
%s.versiont.is%s.namei(RçRRRRRRMR„tcountRutsplitt_process_objectR2RORkRRRìR_Rí(	RRYRêRltverkeyRŠtnamekeyRR‹((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRñ„s"	
 
	cCs|j}t|tƒrP|g|jƒD]!\}}||||ƒf^q(ƒS|tkret}n|g|D]}|||ƒ^qoƒSdS(spProcess an iterable, taking an action on each value.

        :param:context: Request context
        :param:action_fn: Action to take on each item in values
        :param:values: Iterable container of things to take action on
        :returns: A new container of the same type (except set) with
                  items from values having had action applied.
        N(Ržt
issubclassR'R)RjR7(RRYt	action_fnRÒtiterabletktvR!((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt_process_iterableœs		2	cCsgt|ttttfƒr6|j||j|ƒ}n-t|dƒrct|j	ƒrc|j	ƒ}n|S(NR½(
R*ttupleR7RjR'Rùtserialize_entityRtcallableR½(RRYtentity((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRû³scCszd|jj}t|tƒr@||kr@|j||ƒ}n6t|ttttfƒrv|j||j	|ƒ}n|S(Ns%s.name(
RçR„R*R'RñRúR7RjRùtdeserialize_entity(RRYRýRó((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRþ¼s(
R	R
RÈRWRçRìRñRùRûRþ(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRæms					tVersionedObjectIndirectionAPIcBs5eZd„Zd„Zd„Zd„Zd„ZRS(cCsdS(sÇPerform an action on a VersionedObject instance.

        When indirection_api is set on a VersionedObject (to a class
        implementing this interface), method calls on remotable methods
        will cause this to be executed to actually make the desired
        call. This often involves performing RPC.

        :param context: The context within which to perform the action
        :param objinst: The object instance on which to perform the action
        :param objmethod: The name of the action method to call
        :param args: The positional arguments to the action method
        :param kwargs: The keyword arguments to the action method
        :returns: The result of the action method
        N((RRYtobjinstt	objmethodR9R:((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRgÈscCsdS(sÿ.. deprecated:: 0.10.0

        Use :func:`object_class_action_versions` instead.

        Perform an action on a VersionedObject class.

        When indirection_api is set on a VersionedObject (to a class
        implementing this interface), classmethod calls on
        remotable_classmethod methods will cause this to be executed to
        actually make the desired call. This usually involves performing
        RPC.

        :param context: The context within which to perform the action
        :param objname: The registry name of the object
        :param objmethod: The name of the action method to call
        :param objver: The (remote) version of the object on which the
                       action is being taken
        :param args: The positional arguments to the action method
        :param kwargs: The keyword arguments to the action method
        :returns: The result of the action method, which may (or may not)
                  be an instance of the implementing VersionedObject class.
        N((RRYRRRŠR9R:((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRVÙscCs tjdtƒtdƒ‚dS(sÝPerform an action on a VersionedObject class.

        When indirection_api is set on a VersionedObject (to a class
        implementing this interface), classmethod calls on
        remotable_classmethod methods will cause this to be executed to
        actually make the desired call. This usually involves performing
        RPC.

        This differs from object_class_action() in that it is provided
        with object_versions, a manifest of client-side object versions
        for easier nested backports. The manifest is the result of
        calling obj_tree_get_versions().

        NOTE: This was not in the initial spec for this interface, so the
        base class raises NotImplementedError if you don't implement it.
        For backports, this method will be tried first, and if unimplemented,
        will fall back to object_class_action(). New implementations should
        provide this method instead of object_class_action()

        :param context: The context within which to perform the action
        :param objname: The registry name of the object
        :param objmethod: The name of the action method to call
        :param object_versions: A dict of {objname: version} mappings
        :param args: The positional arguments to the action method
        :param kwargs: The keyword arguments to the action method
        :returns: The result of the action method, which may (or may not)
                  be an instance of the implementing VersionedObject class.
        suobject_class_action() is deprecated in favor of object_class_action_versions() and will be removed in a later releases(Multi-version class action not supportedN(twarningstwarntDeprecationWarningRU(RRYRRtobject_versionsR9R:((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRTós	cCsdS(sT.. deprecated:: 0.10.0

        Use :func:`object_backport_versions` instead.

        Perform a backport of an object instance to a specified version.

        When indirection_api is set on a VersionedObject (to a class
        implementing this interface), the default behavior of the base
        VersionedObjectSerializer, upon receiving an object with a version
        newer than what is in the lcoal registry, is to call this method to
        request a backport of the object. In an environment where there is
        an RPC-able service on the bus which can gracefully downgrade newer
        objects for older services, this method services as a translation
        mechanism for older code when receiving objects from newer code.

        NOTE: This older/original method is soon to be deprecated. When a
        backport is required, the newer object_backport_versions() will be
        tried, and if it raises NotImplementedError, then we will fall back
        to this (less optimal) method.

        :param context: The context within which to perform the backport
        :param objinst: An instance of a VersionedObject to be backported
        :param target_version: The maximum version of the objinst's class
                               that is understood by the requesting host.
        :returns: The downgraded instance of objinst
        N((RRYRR®((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRéscCs tjdtƒtdƒ‚dS(s@Perform a backport of an object instance.

        This method is basically just like object_backport() but instead of
        providing a specific target version for the toplevel object and
        relying on the service-side mapping to handle sub-objects, this sends
        a mapping of all the dependent objects and their client-supported
        versions. The server will backport objects within the tree starting
        at objinst to the versions specified in object_versions, removing
        objects that have no entry. Use obj_tree_get_versions() to generate
        this mapping.

        NOTE: This was not in the initial spec for this interface, so the
        base class raises NotImplementedError if you don't implement it.
        For backports, this method will be tried first, and if unimplemented,
        will fall back to object_backport().

        :param context: The context within which to perform the backport
        :param objinst: An instance of a VersionedObject to be backported
        :param object_versions: A dict of {objname: version} mappings
        smobject_backport() is deprecated in favor of object_backport_versions() and will be removed in a later releases$Multi-version backport not supportedN(RRRRU(RRYRR((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRè3s	(R	R
RgRVRTRéRè(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRÿÆs
			#	cKs\g|_x9|D]1}|j||ƒ||}|jj|ƒqW||_|jƒ|S(sèConstruct an object list from a list of primitives.

    This calls item_cls._from_db_object() on each item of db_list, and
    adds the resulting object to list_obj.

    :param:context: Request context
    :param:list_obj: An ObjectListBase object
    :param:item_cls: The VersionedObject class of the objects within the list
    :param:db_list: The list of primitives to convert to objects
    :param:extra_args: Extra arguments to pass to _from_db_object()
    :returns: list_obj
    (RÖt_from_db_objectRDRXRi(RYtlist_objtitem_clstdb_listt
extra_argstdb_itemtitem((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt
obj_make_listNs
	
		
cCsÆ|dkri}n||kr%|Stjƒ|d}|j||<xy|jD]n}|j|}t|tjƒr„|jj	}n*t|tj
ƒrP|jjjj	}nqPt|d|ƒqPW|S(sBConstruct a mapping of dependent object versions.

    This method builds a list of dependent object versions given a top-
    level object with other objects as fields. It walks the tree recursively
    to determine all the objects (by symbolic name) that could be contained
    within the top-level object, and the maximum versions of each. The result
    is a dict like:

      {'MyObject': '1.23', ... }

    :param objname: The top-level object at which to start
    :param tree: Used internally, pass None here.
    :returns: A dictionary of object names and versions
    ittreeN(
RPR2ROR?RR*R+R·t_typet	_obj_nameR¸t
_element_typeRS(RRR‘t
field_nameRt	child_cls((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyRSes	

cCs²tj|ƒ}xœt|ƒD]Ž\}}|\}}tj|ƒ}||kr|dkrptjd|ƒ‚n||dd}||ƒdS||kr||ƒdSqWdS(s	Get the version to which we need to convert a subobject.

    This uses the relationships between a parent and a subobject,
    along with the target parent version, to decide the version we need
    to convert a subobject to. If the subobject did not exist in the parent at
    the target version, TargetBeforeChildExistedException is raised. If there
    is a need to backport, backport_func is called and the subobject version
    to backport to is passed in.

    :param tgt_version: The version we are converting the parent to
    :param relationships: A list of (parent, subobject) version tuples
    :param backport_func: A backport function that takes in the subobject
                          version
    :returns: The version we need to convert the subobject to
    iR®iN(R=R>RBRR´(ttgt_versionRàt
backport_functtgtR;tversionstparentRá((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR³‡s	

c	Cst||ƒ}t|dƒr'|jp*d}t|tƒr‚|j|j||dƒ|d|ƒ|jdƒ}||||<nzt|t	ƒrüxht
|ƒD]W\}}|j|j|||dƒ|d|ƒ|jdƒ}|||||<qžWndS(NR§R”RZRš(RRR§RPR*RWR¹R‰R…R7RB(	t
to_versionRRR‡R@tmanifesttver_keyREtelement((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyR°­s 

(-RÈtabcR5R tloggingRtoslo_messagingt	messagingt
oslo_utilsRRRR=R^toslo_versionedobjects._i18nRRtoslo_versionedobjectsRRR+t	getLoggerR RRR
R1R2RbR`RWRÉRÍtSequenceRÕtNoOpSerializerRæt
add_metaclasstABCMetaRÿR
RPRSR³R°(((sO/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_versionedobjects/base.pyt<module>s@		5E	 	!ÿÐ?cY‡	"	&