
    ɯei?/                         d dl Z d dlmZmZmZ e j
                  dk  rd dlmZ nd dlmZ d Zde	de
fdZde	de	fd	Z G d
 de      Zy)    N)AnyDictUnion)   	   )Iterablec                 @    |rt        di |}nt        |  }||_        |S )N )Row_fields)valuesnamed_valuesfieldsrows       X/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/snowpark/row.py_restore_row_from_pickler      s'    !L!6lCKJ    valuereturnc                     | j                         } t        |       dkD  xrJ | j                  d      xr | j                  d      xs$ | j                  d      xr | j                  d      S )N   '")striplen
startswithendswithr   s    r   is_already_quotedr      se    KKMEu:>  	 NN3	 C   NN3	r   c                 B    | j                         } | j                         S N)r   lowerr   s    r   canonicalize_fieldr#   %   s    KKME;;=r   c                        e Zd ZdZ G d d      Z e       ZdedefdZdee	e
ef   f fdZd	 Zd
 Zd Z fdZd Zd Zd Zd ZddedefdZded eeed ef      f   deeee   f   fdZddZdefdZeZ xZS )r   a  Represents a row in :class:`DataFrame`.

    It is immutable and works like a tuple or a named tuple.

    >>> row = Row(1, 2)
    >>> row
    Row(1, 2)
    >>> row[0]
    1
    >>> len(row)
    2
    >>> row[0:1]
    Row(1)
    >>> named_row = Row(name1=1, name2=2)
    >>> named_row
    Row(name1=1, name2=2)
    >>> named_row["name1"]
    1
    >>> named_row.name1
    1
    >>> row == named_row
    True

    A ``Row`` object is callable. You can use it to create other ``Row`` objects:

    >>> Employee = Row("name", "salary")
    >>> emp1 = Employee("John", 10000)
    >>> emp1
    Row(name='John', salary=10000)
    >>> emp2 = Employee("James", 20000)
    >>> emp2
    Row(name='James', salary=20000)

    c                   @    e Zd Zd
dZdededd fdZdedd fdZdd	Zy)Row._RowBuilderr   Nc                      d | _         d | _        y r!   )_values_named_valuesselfs    r   __init__zRow._RowBuilder.__init__O   s    DL!%Dr   r   r   c                 0    || _         || _        d| _        | S NT)r(   r)   _case_sensitive)r+   r   r   s      r   buildzRow._RowBuilder.buildS   s    !DL!-D#'D Kr   case_sensitivec                     || _         | S r!   )r/   )r+   r1   s     r   set_case_sensitivez"Row._RowBuilder.set_case_sensitiveY   s    #1D Kr   c                    | j                   r| j                  st        | j                   j                         D cg c]  }t	        |       c}      rt        d      | j                   j                         D ci c]  \  }}t        |      | c}}| _         | j                  rk| j                  s_t        | j                  D cg c]  }t	        |       c}      rt        d      | j                  D cg c]  }t        |       c}| _        t        | j                  i | j                   }| j                  |j                  d<   |S c c}w c c}}w c c}w c c}w )NzFCase insensitive fields is not supported in presence of quoted columnsr/   )r)   r/   anykeysr   
ValueErroritemsr#   r(   r   __dict__)r+   valkvr   r   s         r   to_rowzRow._RowBuilder.to_row]   s+   !!$*>*>$:L:L:Q:Q:ST3)#.TU$`  :>9K9K9Q9Q9S&15A&q)1,&" ||D$8$8$,,G3)#.GH$`  HL||Te 25 9Tt||:t'9'9:C.2.B.BCLL*+J# U&
 H  Us   E;EE7Er   N)r   r   )	__name__
__module____qualname__r,   r   r0   boolr3   r=   r
   r   r   _RowBuilderr&   N   s;    	&	 	c 	>O 		T 	>O 		r   rC   r   r   c                    |r|rt        d      |rct        j                  | t        |j                                     }||j                  d<   t        |j                               |j                  d<   n4t        j                  | |      }d |j                  d<   d |j                  d<   d |j                  d<   d|j                  d<   |S )Nz7Either values or named_values is required but not both.r)   r   _has_duplicatesTr/   )r7   tuple__new__r   r9   r6   )clsr   r   r   s       r   rG   zRow.__new__t   s    lVWW --U<+>+>+@%ABC,8CLL)&+L,=,=,?&@CLL#--V,C,0CLL)&*CLL# +/&'*.&'
r   itemc                    t        |t              rt        |   |      S t        |t              rt        t        |   |       S | j                  st        |      }| j                          | j                  r| j                  |   S | j                  r;| j                         r+	 | j                  j                  |      }t        |   |      S t        |      # t        t        f$ r t        |      w xY wr!   )
isinstanceintsuper__getitem__slicer   r/   r#   "_populate_named_values_from_fieldsr)   r   _check_if_having_duplicatesindex
IndexErrorr7   KeyError)r+   rI   rR   	__class__s      r   rN   zRow.__getitem__   s    dC 7&t,,e$+D122'')$/335!!))$// $"B"B"D) LL..t4E 7.u55
 tn$	 #J/ )"4.()s   %)C C5c                     t        d      )Nz+Row object does not support item assignment)	TypeError)r+   keyr   s      r   __setitem__zRow.__setitem__   s    EFFr   c                 z   | j                   st        |      }| j                          | j                  r|| j                  v r| j                  |   S | j                  r1| j                         r!	 | j                  j                  |      }| |   S t        d|       # t        t        f$ r t        d|       w xY w)NzRow object has no attribute )
r/   r#   rP   r)   r   rQ   rR   rS   r7   AttributeError)r+   rI   rR   s      r   __getattr__zRow.__getattr__   s    ##%d+D//1$$*<*<"<%%d++\\d>>@L**40E{" !#?v!FGG 
+ L$'CD6%JKKLs   .B B:c                     |dk7  rt        d      |4| j                  s|D cg c]  }t        |       }}|| j                  d<   y y c c}w )Nr   z!Can't set attribute to Row object)r[   r/   r#   r9   )r+   rX   r   r:   s       r   __setattr__zRow.__setattr__   sT    ) !DEE''<ABS+C0BB',DMM)$ Bs   Ac                     | j                          | j                  r|| j                  v S | j                  r|| j                  v S t        |   |      S r!   )rP   r)   r   rM   __contains__)r+   rI   rU   s     r   r`   zRow.__contains__   sO    //14----\\4<<''7'--r   c                    |r|rt        d      |r.t        |      t        |       k7  rt        t        |        d      | j                          | j                  rj|rt        d      t	        di | j                  }|j                         D ]3  \  }}|| j                  vrt        d| d|        ||j                  |<   5 |S | j                  r| j                         rt        d      |rt        d      t        |      t        |       k7  st        d | D              rt        d	      t	        | }| D cg c]  }| c}|j                  d
<   | j                  |j                  d<   |S c c}w )z"Create a new Row from current row.zKA Row instance should have either values or field-value pairs but not both.z values are expected.z^The Row object can't be called with a list of values because it already has fields and values.zWrong keyword argument z for z>The Row object can't be called because it has duplicate fieldsz_The Row object can't be called with field-value pairs because it doesn't have field-value pairsc              3   >   K   | ]  }t        |t                 y wr!   )rK   str).0r   s     r   	<genexpr>zRow.__call__.<locals>.<genexpr>   s      -/4Juc**-s   z{The called Row object and input values must have the same size and the called Row object shouldn't have any non-str fields.r   r/   r
   )r7   r   rP   r)   r   r8   r   rQ   r5   r9   r/   )r+   argskwargsnew_row	input_keyinput_valuecols          r   __call__zRow.__call__   s   F]  c$i3t9,D	{*?@AA//1 @  /D../G*0,,. ?&	;D$6$66$'>yktf%UVV3>%%i0? N\\d>>@P   @  4yCI% -8<- * ! R  4jG:>*?33*?GY'262F2FG./N +@s   :	E.c                 D    t        | | j                  | j                        S r!   )r   r)   r   r*   s    r   __copy__zRow.__copy__   s    'd.@.@$,,OOr   c           	      t   | j                   r;dj                  dj                  d t        | j                   |       D                    S | j                  r?dj                  dj                  d | j                  j                         D                    S dj                  dj                  d | D                    S )NzRow({})z, c              3   0   K   | ]  \  }}| d |  yw=Nr
   rd   r;   r<   s      r   re   zRow.__repr__.<locals>.<genexpr>   s     K41aQCq,K   c              3   0   K   | ]  \  }}| d |  ywrq   r
   rs   s      r   re   zRow.__repr__.<locals>.<genexpr>   s     N41aQCq,Nrt   c              3   "   K   | ]  }| 	 y wr!   r
   )rd   r<   s     r   re   zRow.__repr__.<locals>.<genexpr>  s     -E1h-Es   )r   formatjoinzipr)   r8   r*   s    r   __repr__zRow.__repr__   s    <<##		K3t||T3JKK   ##		N43E3E3K3K3MNN 
 ##DII-E-E$EFFr   c                 R    t         t        |       | j                  | j                  ffS r!   )r   rF   r)   r   r*   s    r   
__reduce__zRow.__reduce__  s'    $4[$,,dll;
 	
r   	recursiver   c                     | j                          | j                  st        d      |st        | j                        S | j	                  | j                        S )a  Convert to a dict if this row object has both keys and values.

        Args:
            recursive: Recursively convert child :class:`Row` objects to dicts. Default is False.

        >>> row = Row(name1=1, name2=2, name3=Row(childname=3))
        >>> row.as_dict()
        {'name1': 1, 'name2': 2, 'name3': Row(childname=3)}
        >>> row.as_dict(True)
        {'name1': 1, 'name2': 2, 'name3': {'childname': 3}}
        zECannot convert a Row without key values or duplicated keys to a dict.)rP   r)   rW   dict_convert_dict)r+   r}   s     r   as_dictzRow.as_dict
  sV     	//1!!W  **++!!$"4"455r   objc                 f   t        |t              r|j                  d      S t        |t              r0i }|j	                         D ]  \  }}| j                  |      ||<    |S t        |t              r:t        |t        t        t        f      s|D cg c]  }| j                  |       c}S |S c c}w r.   )
rK   r   r   r   r8   r   r   rc   bytes	bytearray)r+   r   
child_dictr;   r<   xs         r   r   zRow._convert_dict  s     c3;;t$$T"J		 61 $ 2 21 5
16X&z#UI?V/W367aD&&q)77
 8s   B.c                     | j                   V| j                  rI| j                         s8t        | j                  |       D ci c]  \  }}||
 c}}| j                  d<   y y y y c c}}w )Nr)   )r)   r   rQ   ry   r9   )r+   r;   r<   s      r   rP   z&Row._populate_named_values_from_fields.  se     &446?B4<<QU?V-Wtq!ad-WDMM/* 7  ' .Xs   A$c                     | j                   Jt        t        t        | j                              t        | j                        k7        | j
                  d<   | j                   S )NrE   )rE   rB   r   setr   r9   r*   s    r   rQ   zRow._check_if_having_duplicates7  sO    '/3C%&#dll*;;0DMM+, ###r   )Fr>   )r?   r@   rA   __doc__rC   _builderr   rG   r   rL   rc   rO   rN   rY   r\   r^   r`   rl   rn   rz   r|   rB   r   r   r   r   rP   rQ   asDict__classcell__)rU   s   @r   r   r   *   s    !F" "H }Hc 3 0%c3o 6 %0GH-.)VPG
6 6$ 6*huUD[/A&BBC	tXd^#	$X$T $ Fr   r   )systypingr   r   r   version_infor   collections.abcr   rc   rB   r   r#   rF   r   r
   r   r   <module>r      s_     # #
 v(S T c c 
V% Vr   