PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 131
 ec @sdZddlZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z dd lm Z dd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm!Z!dd!lm"Z"d"d#lm#Z#d"dlmZd"d$lm$Z$d"d%lm%Z%d"d&l&mZ'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,e/fd-YZ0e0d.Z1e$j2d/ej3ej4ej5e)j6e(j7e(j8e'j9e'j:fd0YZ;d1Z<e%j=rAdd2l>m?Z?m@Z@e?d3ZAe@eAZBneCd4fiZBd5e;eBfd6YZDd7eDfd8YZEd9e,fd:YZFd;ZGe%jHd<ZIe%jHd=ZJe%jHd>ZKe%jHd?ZLe%jHd@ZMdAeNfdBYZOeOZPdCeNfdDYZQdEeQfdFYZRdGeRfdHYZSdIeQfdJYZTdKZUe%jHdLZVeWeXeeXegZYdMe%jZdMdNdOdPgfdQYZ[e[e\e\e\Z]edRZ^edSZ_e`dTZadUZbe`e\e`e\e\dVZce\e\e\dWZddXZedYZfdZZgd[Zhe\d\Zid]Zjd^Zkd_Zld`ZmdS(asDefines instrumentation for class attributes and their interaction with instances. This module is usually not directly visible to user applications, but defines a large part of the ORM's interactivity. iNi(t collections(texc(t interfaces(t ATTR_EMPTY(t ATTR_WAS_SET(t CALLABLES_OK(tDEFERRED_HISTORY_LOAD(tINIT_OK(t instance_dict(tinstance_state(t instance_str(tLOAD_AGAINST_COMMITTED(tmanager_of_class(t NEVER_SET(t NO_AUTOFLUSH(t NO_CHANGE(tNO_RAISE(tNO_VALUE(tNON_PERSISTENT_OK(tPASSIVE_CLASS_MISMATCH(tPASSIVE_NO_FETCH(tPASSIVE_NO_FETCH_RELATED(tPASSIVE_NO_INITIALIZE(tPASSIVE_NO_RESULT(t PASSIVE_OFF(tPASSIVE_ONLY_PERSISTENT(tPASSIVE_RETURN_NO_VALUE(tRELATED_OBJECT_OK(tSQL_OK(t state_stri(tevent(t inspection(tutil(tbase(troles(t traversals(tvisitors(t HasCacheKey(tInternalTraversaltNoKeycBseZRS((t__name__t __module__(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR'=ssno nametQueryableAttributecBseZdZeZdZdddddZdej j fdej j fdej j fdej j fgZdZejdZed Zed Zejd Zejd Zejd ZedZedZdZedZdZdZdZ dZ!dZ"dZ#dZ$dZ%e&dZ'dZ(dZ)ejdZRS( sBase class for :term:`descriptor` objects that intercept attribute events on behalf of a :class:`.MapperProperty` object. The actual :class:`.MapperProperty` is accessible via the :attr:`.QueryableAttribute.property` attribute. .. seealso:: :class:`.InstrumentedAttribute` :class:`.MapperProperty` :attr:`_orm.Mapper.all_orm_descriptors` :attr:`_orm.Mapper.attrs` torm_instrumented_attributec Cs||_||_||_||_||_||_||_t|}|rxY|jD]K} || kr[|j j | |j | |j j rt |j _ qq[q[WndS(N( tclass_tkeyt _parententitytimplt comparatort_of_typet_extra_criteriaR t_basestdispatcht_updatet_active_historytTrue( tselfR,R-t parententityR/R0tof_typetextra_criteriatmanagerR!((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt__init__gs         R-R.R1R2cCs+t|j|jjj|j|jjffS(N(t_queryable_attribute_unreduceR-R.tmapperR,tentity(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt __reduce__s  cCs |jjS(N(R/tsupports_population(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt_supports_populationscCs |jjS(N(R/t uses_objects(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt_impl_uses_objectsscCs"|jjt|t||S(N(R/t get_historyR R(R8tinstancetpassive((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRFs cCs |jjS(sReturn the 'info' dictionary for the underlying SQL element. The behavior here is as follows: * If the attribute is a column-mapped property, i.e. :class:`.ColumnProperty`, which is mapped directly to a schema-level :class:`_schema.Column` object, this attribute will return the :attr:`.SchemaItem.info` dictionary associated with the core-level :class:`_schema.Column` object. * If the attribute is a :class:`.ColumnProperty` but is mapped to any other kind of SQL expression other than a :class:`_schema.Column`, the attribute will refer to the :attr:`.MapperProperty.info` dictionary associated directly with the :class:`.ColumnProperty`, assuming the SQL expression itself does not have its own ``.info`` attribute (which should be the case, unless a user-defined SQL construct has defined one). * If the attribute refers to any other kind of :class:`.MapperProperty`, including :class:`.RelationshipProperty`, the attribute will refer to the :attr:`.MapperProperty.info` dictionary associated with that :class:`.MapperProperty`. * To access the :attr:`.MapperProperty.info` dictionary of the :class:`.MapperProperty` unconditionally, including for a :class:`.ColumnProperty` that's associated directly with a :class:`_schema.Column`, the attribute can be referred to using :attr:`.QueryableAttribute.property` attribute, as ``MyClass.someattribute.property.info``. .. seealso:: :attr:`.SchemaItem.info` :attr:`.MapperProperty.info` (R0tinfo(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRIs(cCstj|jS(s Return an inspection instance representing the parent. This will be either an instance of :class:`_orm.Mapper` or :class:`.AliasedInsp`, depending upon the nature of the parent entity which this attribute is associated with. (RtinspectR.(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytparents cCs|j}t|tst|jtkr=i|d6}n!i|jd6|jd6|d6}|jj}y |j }Wn9t k r}t j t jd||fd|n X||SdS(sThe SQL expression object represented by this :class:`.QueryableAttribute`. This will typically be an instance of a :class:`_sql.ColumnElement` subclass representing a column expression. tentity_namespacet proxy_keyt proxy_owners}When interpreting attribute "%s" as a SQL expression, expected __clause_element__() to return a ClauseElement object, got: %rtfrom_N(t_entity_namespacet isinstanceR%tAssertionErrorR-tNO_KEYR.R0t__clause_element__t _annotatetAttributeErrorR traise_RtInvalidRequestError(R8RLt annotationstcetannotae((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt expressions$      cCs|jS(N(R.(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRPscCs |jjS(N(RTt _annotations(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR^scCs|jS(N(R](R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRTscCs |jjS(N(R]t _from_objects(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR_ scCs|jj|S(s'Return setter tuples for a bulk UPDATE.(R0t_bulk_update_tuples(R8tvalue((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR`sc CsG|j st|j|j|jd|jd|jj|d|S(NR/R0R9(R1RRt __class__R@R-R/R0tadapt_to_entity(R8Rc((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRcs  c CsLt|j|j|jd|jd|jj|dtj|d|j S(NR/R0R:R;( R*R,R-R.R/R0R:RRJR2(R8R@((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR:s  c GsJt|j|j|jd|jd|jj|d|jd|j|S(NR/R0R:R;( R*R,R-R.R/R0tand_R1R2(R8tother((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRd(s   c Ks=t|j|j|jd|jd|jd|jd|jS(NR/R0R:R;(R*R,R-R.R/R0R1R2(R8tkw((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt_clone3s    cCs|jj|S(N(RTtlabel(R8tname((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRh>scOs||j||S(N(R0(R8topRetkwargs((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytoperateAscKs|||j|S(N(R0(R8RjReRk((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytreverse_operateDscCs|jj|d|tk S(Nt optimistic(R/t hasparenttFalse(R8tstateRn((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRoGscCslyt|j|SWnQtk rg}tjtdt|jt|jj||fd|nXdS(NsFNeither %r object nor %r object associated with %s has an attribute %rtreplace_context(tgetattrR0RVR RWttypeR((R8R-terr((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt __getattr__Js  cCsd|jj|jfS(Ns%s.%s(R,R(R-(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt__str__\scCs |jjS(sReturn the :class:`.MapperProperty` associated with this :class:`.QueryableAttribute`. Return values here will commonly be instances of :class:`.ColumnProperty` or :class:`.RelationshipProperty`. (R0tproperty(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRx_s N((*R(R)t__doc__R7t is_attributet__visit_name__tNoneR=R$tExtendedInternalTraversalt dp_stringtdp_multiR&tdp_clauseelement_listt_cache_key_traversalRAR tmemoized_propertyRCRxRERRFRIRKR]RPR^RTR_R`RcR:RdRgRhRlRmRpRoRvRw(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR*DsD   * $        cCs-|jr|j|||St||SdS(N(tis_aliased_classt_get_from_serializedRs(R-t mapped_classR9R@((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR>ms (tTypeVartGenerict_Tt _Generic_TtMappedcBs)eZdZdZdZdZRS(s Represent an ORM mapped :term:`descriptor` attribute for typing purposes. This class represents the complete descriptor interface for any class attribute that will have been :term:`instrumented` by the ORM :class:`_orm.Mapper` class. When used with typing stubs, it is the final type that would be used by a type checker such as mypy to provide the full behavioral contract for the attribute. .. tip:: The :class:`_orm.Mapped` class represents attributes that are handled directly by the :class:`_orm.Mapper` class. It does not include other Python descriptor classes that are provided as extensions, including :ref:`hybrids_toplevel` and the :ref:`associationproxy_toplevel`. While these systems still make use of ORM-specific superclasses and structures, they are not :term:`instrumented` by the :class:`_orm.Mapper` and instead provide their own functionality when they are accessed on a class. When using the :ref:`SQLAlchemy Mypy plugin `, the :class:`_orm.Mapped` construct is used in typing annotations to indicate to the plugin those attributes that are expected to be mapped; the plugin also applies :class:`_orm.Mapped` as an annotation automatically when it scans through declarative mappings in :ref:`orm_declarative_table` style. For more indirect mapping styles such as :ref:`imperative table ` it is typically applied explicitly to class level attributes that expect to be mapped based on a given :class:`_schema.Table` configuration. :class:`_orm.Mapped` is defined in the `sqlalchemy2-stubs `_ project as a :pep:`484` generic class which may subscribe to any arbitrary Python type, which represents the Python type handled by the attribute:: class MyMappedClass(Base): __table_ = Table( "some_table", Base.metadata, Column("id", Integer, primary_key=True), Column("data", String(50)), Column("created_at", DateTime) ) id : Mapped[int] data: Mapped[str] created_at: Mapped[datetime] For complete background on how to use :class:`_orm.Mapped` with pep-484 tools like Mypy, see the link below for background on SQLAlchemy's Mypy plugin. .. versionadded:: 1.4 .. seealso:: :ref:`mypy_toplevel` - complete background on Mypy integration cCs tdS(N(tNotImplementedError(R8RGtowner((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt__get__scCs tdS(N(R(R8RGRa((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt__set__scCs tdS(N(R(R8RG((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt __delete__s(R(R)RyRRR(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs:  tInstrumentedAttributecBs/eZdZeZdZdZdZRS(sClass bound instrumented attribute which adds basic :term:`descriptor` methods. See :class:`.QueryableAttribute` for a description of most features. cCs)|jjt|t||ddS(N(R/tsetR RR|(R8RGRa((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs cCs#|jjt|t|dS(N(R/tdeleteR R(R8RG((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRscCs|dkr|St|}|jr?|j|kr?||jSyt|}Wn/tk r}tjtj |d|nX|j j ||SdS(NRr( R|RRCR-R RVR RWtorm_exctUnmappedInstanceErrorR/tget(R8RGRtdict_RqRu((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs    (R(R)RyR7t inherit_cacheRRR(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs   tHasEntityNamespacecBsDeZdZeZeZdejfgZdZ e dZ RS(RPcCs ||_dS(N(RP(R8tent((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR=scCs |jjS(N(RPRL(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRLs(RP( R(R)t __slots__Rpt is_mapperRR&tdp_has_cache_keyt_traverse_internalsR=RxRL(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs  csXdtffdY}tjd|_tj|tddd|S(sCreate an QueryableAttribute / user descriptor hybrid. Returns a new QueryableAttribute type that delegates descriptor behavior and getattr() to the given descriptor. tProxycseZdZdZddddZeZdej j fdej j fgZ e dZe dZe dZe dZ ejdZd Zd Zd Zd Zfd ZRS(sPresents the :class:`.QueryableAttribute` interface as a proxy on top of a Python descriptor / :class:`.PropComparator` combination. cSsC||_||_||_||_||_||_||_dS(N(R,R-t descriptortoriginal_propertyt _comparatort_adapt_to_entityRy(R8R,R-RR0RctdocR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR=s      R-R.cSs(|jdk o't|j|jjjS(N(RR|RsR,R-R/RD(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRE(scSstj|jdtS(Ntraiseerr(RRJR,Rp(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR./scSs-t|jdr|jjSt|jSdS(NR.(thasattrRR.R(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRP3s cSs |jjS(N(R0Rx(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRx<scSsLt|jr!|j|_n|jrE|jj|j|_n|jS(N(tcallableRRRc(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR0@s   cSs%|j|j|j|j|j|S(N(RbR@R-RR(R8Rc((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRcJs c [s4|j|j|j|j|jd|jd|jS(NRcR(RbR,R-RRRR(R8Rf((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRgSs  cSs<|jj||}||jkr4|dkr4|S|SdS(N(RRR|(R8RGRtretval((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR]scSsd|jj|jfS(Ns%s.%s(R,R(R-(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRwgscsyt|SWntk r}|dkrKtjtdd|ny |j}WnBtk r}tjtdtj||fd|qXyt||SWqtk r}tjtdtjt|j||fd|qXnXdS(sNDelegate __getattr__ to the original descriptor and/or comparator.R0Rrs[Neither %r object nor unconfigured comparator object associated with %s has an attribute %rsFNeither %r object nor %r object associated with %s has an attribute %rN(RsRVR RWR0RtR((R8t attributeRuR0terr2terr3(R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRvjs2      (N(R(R)RyR2R|R=R7t_is_internal_proxyR$R}R~RRRxRER.RPR RR0RcRgRRwRv((R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs$   RiRt from_instance(R*RtR(R tmonkeypatch_proxied_specials(RR((RsL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytcreate_proxied_attributes tREMOVEtAPPENDtREPLACEt BULK_REPLACEtMODIFIEDtAttributeEventcBs>eZdZdZdZdZedZdZRS( sA token propagated throughout the course of a chain of attribute events. Serves as an indicator of the source of the event and also provides a means of controlling propagation across a chain of attribute operations. The :class:`.Event` object is sent as the ``initiator`` argument when dealing with events such as :meth:`.AttributeEvents.append`, :meth:`.AttributeEvents.set`, and :meth:`.AttributeEvents.remove`. The :class:`.Event` object is currently interpreted by the backref event handlers, and is used to control the propagation of operations across two mutually-dependent attributes. .. versionadded:: 0.9.0 :attribute impl: The :class:`.AttributeImpl` which is the current event initiator. :attribute op: The symbol :attr:`.OP_APPEND`, :attr:`.OP_REMOVE`, :attr:`.OP_REPLACE`, or :attr:`.OP_BULK_REPLACE`, indicating the source operation. R/Rjt parent_tokencCs%||_||_|jj|_dS(N(R/RjR(R8tattribute_implRj((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR=s  cCs1t|to0|j|jko0|j|jkS(N(RQRR/Rj(R8Re((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt__eq__scCs |jjS(N(R/R-(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR-scCs|jj|S(N(R/Ro(R8Rq((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRos(R/RjR( R(R)RyRR=RRxR-Ro(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs   t AttributeImplc BseZdZededeeddZdZdZdZ dZ e e e Z edZ dZedZedZdZedZdZedZedZedZededZedZdZRS( s4internal implementation for instrumented attributes.c Ks||_||_||_||_||_|p6||_| |_|dkr`tj |_ n ||_ | dk r| |_ n |j |_ | j dt} | |_|rt|j_n| |_t|t|_dS(sConstruct an AttributeImpl. :param \class_: associated class :param key: string name of the attribute :param \callable_: optional function which generates a callable based on a parent instance, which produces the "default" values for a scalar or collection attribute when it's first accessed, if not present already. :param trackparent: if True, attempt to track if an instance has a parent attached to it via this attribute. :param compare_function: a function that compares two values which are normally assignable to this attribute. :param active_history: indicates that get_history() should always return the "old" value, even if it means executing a lazy callable upon attribute change. :param parent_token: Usually references the MapperProperty, used as a key for the hasparent() function to identify an "owning" attribute. Allows multiple AttributeImpls to all match a single owner attribute. :param load_on_unexpire: if False, don't include this attribute in a load-on-expired operation, i.e. the "expired_attribute_loader" process. The attribute can still be in the "expired" list and be considered to be "expired". Previously, this flag was called "expire_missing" and is only used by a deferred column attribute. :param send_modified_events: if False, the InstanceState._modified_event method will have no effect; this means the attribute will never show up as changed in a history entry. t_deferred_historyN(R,R-t callable_R4t trackparentRtsend_modified_eventsR|toperatorteqtis_equaltaccepts_scalar_loadertdefault_accepts_scalar_loadertpopRpRR7R6tload_on_unexpiretEventt OP_MODIFIEDt_modified_token(R8R,R-RR4Rtcompare_functiontactive_historyRRRRRkR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR=s&;             R,R-RR4RRRRRRRRcCsd|jj|jfS(Ns%s.%s(R,R(R-(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRw=scCs |jjS(s(Backwards compat for impl.active_history(R4R6(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt_get_active_history@scCs||j_dS(N(R4R6(R8Ra((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt_set_active_historyEscCs=d}|jst||jjt|j|tk S(s4Return the boolean value of a `hasparent` flag attached to the given state. The `optimistic` flag determines what the default return value should be if no `hasparent` flag can be located. As this function is used to determine if an instance is an *orphan*, instances that were loaded from storage should be assumed to not be orphans, until a True/False value for this flag is set. An instance attribute that is loaded by a callable function will also not have a `hasparent` flag. s6This AttributeImpl is not configured to track parents.(RRRtparentsRtidRRp(R8RqRntmsg((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRoJscCsd}|jst|t|j}|r@||j|W|j||t t dS(N( RR|RR RpR4RRRRR7(R8RqRRaRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs cCsV|j|krdS|j||tt|j||j}|j||j=dS(N(R-RRR7tget_collectionRtclear_with_event(R8RqRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs  cCsa|j|kstd|j|jkr;|j|jS|j|\}}|j||S(s;Produce an empty collection for an un-initialized attributesO_default_value should only be invoked for an uninitialized or expired attribute(R-RRt_empty_collectionst_initialize_collectiont _set_empty(R8RqRtadaptert user_data((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs  cCsD|jj|j||j\}}|jj|||||fS(N(R<tinitialize_collectionR-RR4R(R8RqR+R((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR)s cCs|j||d|}|tkrs|j||||}|j|ksWtd|j|jj|n|j||dS(NRHs,Collection was loaded during event handling.(R&RR"R-RRt_get_pending_mutationRtappend_with_event(R8RqRRaRRHR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs  cCs|j||jd|}|tkrt|j|||||j|ksXtd|j|jj|n|j||dS(NRHs,Collection was loaded during event handling.( R&RRRR-RRR.Rtremove_with_event(R8RqRRaRRHR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs  cCsAy |j||||d|Wntttfk r<nXdS(NRH(RRRt IndexError(R8RqRRaRRH((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs c Cs|} } |j|\} } |r| jdk rF| j| } qtj| } |j}| |k r| dkr|dp| jj}|jj}td||fnt | dr| j } q| t kr tj r| j } qt| d| j } qt| } nt| }|j}|jj||||j||dt|t@A}|tkr|j||}n|| krdS|j|||t|j}| ||j|dkr7|j||d|}|tkr7|Sn|jS(sRetrieve the CollectionAdapter associated with the given state. if user_data is None, retrieves it from the state using normal "get()" rules, which will fire lazy callables or return the "empty" collection value. RHN(R|RRR(R8RqRR,RH((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR&s  (RRRRRRN(!R(R)RyRpRR7RDRBRRRR|R=RRRFRRR"R$R%RRRR)RRRRR;RIRR&(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR-sL   "   (    H  csjjjfdfd}fd}fd}rtjd|dtdtntjd|dtdttjd |dtdtd S( s6Apply listeners to synchronize a two-way relationship.cs2tdt||j|jjjfdS(NsBidirectional attribute conflict detected: Passing object %s to attribute "%s" triggers a modify event on attribute "%s" via the backref "%s".(RRRR/(t child_stateRt child_impl(R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt_acceptable_key_errs  c s||kr|S|dk r|tk r|tk rt|t|}}|jj}|j r}|j r}|j }n |j }||k r|j |||j j dtqn|dk rt|t|}} |jj} |jk r&|j| jk r&||| n| j } | jrA| jnd} || k r|| k r| j|| |j |dtqn|S(NRH(R|RRR RR<R/RRRRRRRRRRR( RqtchildtoldchildRt old_statetold_dictR/tcheck_recursive_tokenRSt child_dictRTtcheck_append_tokentcheck_bulk_replace_token(RUR-t parent_implR(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt"emit_backref_from_scalar_set_eventsJ                  cs|dkrdSt|t|}}|jj}|jk rm|j|jk rm|||n|j}|jr|jnd}||k r||k r|j |||j |dt n|S(NRH( R|R RR<R/RRRRRRR(RqRVRRSR[RTR\R](RUR-R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt)emit_backref_from_collection_append_events$      c s|dk r|tk r|tk rt|t|}}|jj}|j r|j r|j }|j }oj }n'|j }|jr|j nd}t }||k r||k r| st j|jj| r|j|||j|dtqqndS(NRH(R|RRR RR<R/RRRRRRpR t has_dupesRR-RRR( RqRVRRSR[RTtcheck_remove_tokentcheck_replace_tokentcheck_for_dupes_on_remove(R-R^tuselist(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt)emit_backref_from_collection_remove_events2             RRtrawRRN(R/RRtlistenR7(RR-ReR_R`Rf((RURR-R^RResL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytbackref_listenerss2  A - t NO_HISTORYRRQt unchangedtdeletedcBseZdZdZeZdZdZdZdZdZ dZ e dZ e e d Ze d ZRS( sA 3-tuple of added, unchanged and deleted values, representing the changes which have occurred on an instrumented attribute. The easiest way to get a :class:`.History` object for a particular attribute on an object is to use the :func:`_sa.inspect` function:: from sqlalchemy import inspect hist = inspect(myobject).attrs.myattribute.history Each tuple member is an iterable sequence: * ``added`` - the collection of items added to the attribute (the first tuple element). * ``unchanged`` - the collection of items that have not changed on the attribute (the second tuple element). * ``deleted`` - the collection of items that have been removed from the attribute (the third tuple element). cCs |tkS(N(R(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt__bool__}scCs t|jp|jp|j S(shReturn True if this :class:`.History` has no changes and no existing, unchanged state. (tboolRQRlRk(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytemptyscCs'|jp g|jpg|jp%gS(s3Return a collection of added + unchanged + deleted.(RQRkRl(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytsumscCs|jp g|jpgS(s)Return a collection of added + unchanged.(RQRk(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt non_deletedscCs|jp g|jpgS(s+Return a collection of unchanged + deleted.(RkRl(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt non_addedscCst|jp|jS(s2Return True if this :class:`.History` has changes.(RnRQRl(R8((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt has_changesscCstg|jD]$}|dk r+t|p.d^q g|jD]$}|dk r\t|p_d^q>g|jD]$}|dk rt|pd^qoS(N(RRQR|R RkRl(R8R((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytas_states..cCs|jj|jt}|tkrV|tkr@|dddS|d|gdSn|tk r|j||tkr|d|gdSt|tkrd}t|tkrd}qn |g}|tkr|d d |S||gd |SdS( N(((((((((((( RRR-RRRR7Rt_NO_STATE_SYMBOLSR|(tclsRRqRRRl((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs       cCs|tkr'|jj|jt}n|tkre|tkrO|dddS|d|gdSn||kr|tk r|d|gdSt|tks|dkrd}t|tkrd}qn |g}|tkr|d d |S||gd |SdS( N((((((((((((RRRR-RRRuR|(RvRRqRRRl((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs       c Cs|jj|jt}|tkr4|dddSt|d}|tkre|t|ddS|tkr|dt|dSg|D]*}|dk rt|pd|f^q}g|D]*}|dk rt|pd|f^q}t |}t |} |g|D]\} } | | kr| ^qg|D]\} } | | kr?| ^q?g|D]\} } | |krg| ^qgSdS( NR(((((((( RRR-RRRsR9R|R R( RvRRqRRRRRRRR R!((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs$   44  (((R(R)RyRmt __nonzero__RoRpRqRrRsRtt classmethodRRRR(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRds       "cCstt|||S(s Return a :class:`.History` record for the given object and attribute key. This is the **pre-flush** history for a given attribute, which is reset each time the :class:`.Session` flushes changes to the current database transaction. .. note:: Prefer to use the :attr:`.AttributeState.history` and :meth:`.AttributeState.load_history` accessors to retrieve the :class:`.History` for instance attributes. :param obj: an object whose class is instrumented by the attributes package. :param key: string attribute name. :param passive: indicates loading behavior for the attribute if the value is not already present. This is a bitflag attribute, which defaults to the symbol :attr:`.PASSIVE_OFF` indicating all necessary SQL should be emitted. .. seealso:: :attr:`.AttributeState.history` :meth:`.AttributeState.load_history` - retrieve history using loader callables if the value is not locally present. (tget_state_historyR (RR-RH((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRFs#cCs|j||S(N(RF(RqR-RH((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRy<scCs+t|}t|}|j|||S(tTODO(R R t has_parent(RvRR-RnR<Rq((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR{@s  cKse|jdd}|jdd}|jdd}t||||d|}t||||S(NR0R9R(RR|tregister_descriptortregister_attribute_impl(R,R-RfR0R9Rtdesc((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytregister_attributeGs c Kst|}|r?|jdd} |j|| p6t} n|jdd} ||j} |r|||| | |} n`|rt|||| d| |} n9|rt|||| |} nt|||| |} | ||_ |r t ||||n|j |||S(NR( R RR|tinstrument_collection_classR9R4RRRR/Ritpost_configure_attribute( R,R-ReRt useobjectt impl_classtbackrefRfR<tfactoryRR4R/((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR}Ps*    cCsDt|}t||d|d|}||_|j|||S(NR0R9(R RRytinstrument_attribute(R,R-R0R9RR<R((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyR||s   cCst|j|dS(N(R tuninstrument_attribute(R,R-((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pytunregister_attributescCs%t|}|j}t|||S(s4Initialize a collection attribute and return the collection adapter. This function is used to provide direct access to collection internals for a previously unloaded attribute. e.g.:: collection_adapter = init_collection(someobject, 'elements') for elem in values: collection_adapter.append_without_event(elem) For an easier way to do the above, see :func:`~sqlalchemy.orm.attributes.set_committed_value`. :param obj: a mapped object :param key: string attribute name where the collection is located. (R Rtinit_state_collection(RR-RqR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs  cCs|j|j}|j|d}|dk rP|j}|j|||tn|j||}|j|||}|j |S(sInitialize a collection attribute and return the collection adapter. Discards any existing collection which may be there. N( R<R/RR|RR;RpRR&t _reset_empty(RqRR-tattrRRFR,R+((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRs   cCs:t|t|}}|j|jj|||dS(s[Set the value of an attribute with no history events. Cancels any previous history present. The value should be a scalar value for scalar-holding attributes, or an iterable for any collection-holding attribute. This is the same underlying method used when a lazy loader fires off and loads additional data from the database. In particular, this method can be used by application code which has loaded additional attributes or collections through separate queries, which can then be attached to an instance as though it were part of its original loaded state. N(R RR<R/R(RGR-RaRqR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyRscCs=t|t|}}|j|jj||||dS(ssSet the value of an attribute, firing history events. This function may be used regardless of instrumentation applied directly to the class, i.e. no descriptors are required. Custom attribute management schemes will need to make usage of this method to establish attribute state as understood by SQLAlchemy. :param instance: the object that will be modified :param key: string name of the attribute :param value: value to assign :param initiator: an instance of :class:`.Event` that would have been propagated from a previous event listener. This argument is used when the :func:`.set_attribute` function is being used within an existing event listening function where an :class:`.Event` object is being supplied; the object may be used to track the origin of the chain of events. .. versionadded:: 1.2.3 N(R RR<R/R(RGR-RaRRqR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt set_attributescCs3t|t|}}|j|jj||S(sZGet the value of an attribute, firing any callables required. This function may be used regardless of instrumentation applied directly to the class, i.e. no descriptors are required. Custom attribute management schemes will need to make usage of this method to make usage of attribute state as understood by SQLAlchemy. (R RR<R/R(RGR-RqR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt get_attributes cCs7t|t|}}|j|jj||dS(sQDelete the value of an attribute, firing history events. This function may be used regardless of instrumentation applied directly to the class, i.e. no descriptors are required. Custom attribute management schemes will need to make usage of this method to establish attribute state as understood by SQLAlchemy. N(R RR<R/R(RGR-RqR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt del_attributes cCs\t|t|}}|j|j}|jj||j|j||tdt dS(sMark an attribute on an instance as 'modified'. This sets the 'modified' flag on the instance and establishes an unconditional change event for the given attribute. The attribute must have a value present, else an :class:`.InvalidRequestError` is raised. To mark an object "dirty" without referring to any specific attribute so that it is considered within a flush, use the :func:`.attributes.flag_dirty` call. .. seealso:: :func:`.attributes.flag_dirty` t is_userlandN( R RR<R/R4tmodifiedRRRR7(RGR-RqRR/((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt flag_modified scCs6t|t|}}|j|dtdtdS(sMark an instance as 'dirty' without any specific attribute mentioned. This is a special operation that will allow the object to travel through the flush process for interception by events such as :meth:`.SessionEvents.before_flush`. Note that no SQL will be emitted in the flush process for an object that has no changes, even if marked dirty via this method. However, a :meth:`.SessionEvents.before_flush` handler will be able to see the object in the :attr:`.Session.dirty` collection and may establish changes on it, which will then be included in the SQL emitted. .. versionadded:: 1.2 .. seealso:: :func:`.attributes.flag_modified` RN(R RRR|RR7(RGRqR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyt flag_dirty s(nRyRtRRRRR!RRRRRRR R R R R RRRRRRRRRRRRRRRRRRR tsqltsql_baseR"R#R$tsql.traversalsR%t sql.visitorsR&tstrR'RSt_self_inspectst_MappedAttributetInspectionAttrtPropComparatortHasCopyInternalstJoinTargetRolet OnClauseRolet ImmutabletMemoizedHasCacheKeyR*R>R6ttypingRRRRRtRRRRtsymbolRRRRRtobjectRRRRRRRiRt frozensetRRut namedtupleRR|RRFRyRpR{RR}R|RRRRRRRRR(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/attributes.pyts   !   F% 2EWp + &    &