
    Zjw                     8    d dl mZ  G d d      Z G d d      Zy)    )deepcopyc                        e Zd ZdZdZdZdZdZg ZddZ	d Z
 fdZ fdZd Zed        Zedd       Zed	        Zed
        Zedd       Zd Zd Zed        Zd Zed        Zed        Zed        Zed        Zed        Zd Z xZS )	APIObjectNc                 h    |xs i | j                   d<   i | j                   d<   | j                          y Nfieldsfields_to_update)__dict__	_init_api)selfr   argskwargss       ,./modules/git/gitflic_client/objects/base.py__init__zAPIObject.__init__   s-    "(,Bh,.()    c                     t        t        |             D ]A  }t        | |      }t        |t              s t	        |t
              s1| j                  |_        C y N)varstypegetattr
isinstance
issubclassr   api)r   	fieldnamefields      r   r   zAPIObject._init_api   sD    d4j) 	%ID),E%&:eY+G HH			%r   c                 t    t         |   |      }t        |t              rt	        |t
              r| |_        |S r   )super__getattribute__r   r   r   r   parent)r   namer   	__class__s      r   r   zAPIObject.__getattribute__   s1    (.eT"z%'CELr   c                 h   || j                   d   v r| j                   d   |   S || j                   d   v rot        | j                   d   |   t              r=t        | j                   d   |         | j                   d   |<   | j                   d   |   S | j                   d   |   S t        |   |      S )Nr	   r   )r
   r   dictr   r   r   )r   r    r!   s     r   __getattr__zAPIObject.__getattr__!   s    4==!344==!34T::4==**$--1$7>:B4==QYCZ[_C`:a01$7}}%78>>==*400w'--r   c                 (    || j                   d   |<   y )Nr	   )r
   )r   r    values      r   __setattr__zAPIObject.__setattr__.   s    27()$/r   c                 x     | j                   |i |} | j                  j                  |fi |}|y  | |      S )Nr   )_create_get_urlr   get)clsr   r   pathress        r   r+   zAPIObject.get1   sD    "s""D3F3cggkk$)&);#r   c                      | j                   di |}|rt        | j                  | |||fi |S |r!t        t        | j                  | |fi |      S y )N )_create_list_urlAPIObjectListr   list)r,   pagesizelazyallr   r-   s          r   r3   zAPIObject.list;   s[    #s##-f- #tT4J6JJcggsDCFCDD r   c                      | j                   di |}|j                  di       } | j                  j                  |||fi |}|y  | |      S )Nqueryr)   r0   )_create_create_urlr+   r   post)r,   datar   r-   r9   r.   s         r   createzAPIObject.createE   sV    %s%%//

7B'cggll477;#r   c                      | j                   dd|i|}|j                  di       } | j                  j                  |||fi |}|y  | |      S )Nidr9   r)   r0   )_create_update_urlr+   r   r;   )r,   _idr<   r   r-   r9   r.   s          r   updatezAPIObject.updateQ   s[    %s%%777

7B'cggll477;#r   c                     |rE | j                   dd|i|}|j                  di       } | j                  j                  ||fi | y y )Nr?   r9   r0   )_create_delete_urlr+   r   r;   )r,   r?   r   r-   r9   s        r   	delete_byzAPIObject.delete_by]   sM    )3)):R:6:DJJw+ECGGLLu//	 r   c                 h    | j                   t        d      | j                  | j                          y )Nz&Unable to delete, attribute id is None)r?   AttributeErrorrE   )r   r   s     r   deletezAPIObject.deletee   s'    77? !IJJtwwr   c                    | j                   t        d      | j                  d   j                         D ci c]   \  }}|| j                  v s|t        |      " }}}|j                  t        | j                  d                | j                  | j                   |       | j                  d   j                  | j                  d          i | j                  d<   y c c}}w )Nz$Unable to save, attribute id is Noner   r	   )r?   rG   r
   items_update_required_fieldsr   rB   )r   r   kvrequired_datas        r   savezAPIObject.savek   s    77? !GHH48MM(4K4Q4Q4SyDAqWX\`\x\xWxHQKyyXdmm4F&GHIDGG]+h&&t}}5G'HI,.() zs   CCc                     t        | j                  d         }|j                  t        | j                  d                |S r   )r   r
   rB   )r   r   s     r   _current_fieldszAPIObject._current_fieldsw   s5    $--12ht}}-?@ABr   c                     | j                   S r   )rQ   r   s    r   as_dictzAPIObject.as_dict}   s    ###r   c                     t         r   NotImplementedErrorr,   r   r   s      r   r*   zAPIObject._create_get_url       !!r   c                     t         r   rV   rX   s      r   r1   zAPIObject._create_list_url   rY   r   c                     t         r   rV   rX   s      r   r:   zAPIObject._create_create_url   rY   r   c                     t         r   rV   rX   s      r   r@   zAPIObject._create_update_url   rY   r   c                     t         r   rV   rX   s      r   rD   zAPIObject._create_delete_url   rY   r   c                 ,    t        | j                        S r   )strrQ   rS   s    r   __repr__zAPIObject.__repr__   s    4''((r   r   )r   
   FT) __name__
__module____qualname__r-   path_pluralr   r   _list_key_namerK   r   r   r   r$   r'   classmethodr+   r3   r=   rB   rE   rH   rO   propertyrQ   rT   r*   r1   r:   r@   rD   r`   __classcell__)r!   s   @r   r   r      s-   DK
CFN %.8   E E 	 	 	 	 0 0 
/  
$ " " " " " " " " " ")r   r   c                   2    e Zd ZddZd Zd Zd Zd Zd Zy)	r2   c                     || _         || _        || _        g | _        d| _        || _        || _        d | _        || _        | j                          y )Nr   )
r   r-   _cls_objects_current
_next_page_size_total_pages_query_kwargs	_get_data)r   r   rl   r-   r4   r5   r   s          r   r   zAPIObjectList.__init__   sM    		
 #r   c                    | j                   | j                  d} | j                  j                  | j                  |fi | j
                  }|y | xj                   dz  c_         | j                  |d   d   | _        d|v rS| j                  j                  |d   | j                  j                     D cg c]  }| j                  |       c}       y y c c}w )N)r4   r5      r4   
totalPages	_embedded)ro   rp   r   r+   r-   rr   rq   rm   extendrl   rf   )r   r9   resultr<   s       r   rs   zAPIObjectList._get_data   s    OOJJ
 diiE$2D2DE>1$ &v| <D& MM  f[>QRVR[R[RjRj>k!ld$))D/!lm !!ls   4Cc                     | S r   r0   rS   s    r   __iter__zAPIObjectList.__iter__   s    r   c                 ,    t        | j                        S r   )lenrm   rS   s    r   __len__zAPIObjectList.__len__   s    4==!!r   c                 "    | j                         S r   )_nextrS   s    r   __next__zAPIObjectList.__next__   s    zz|r   c                 N   | j                   t        | j                        k  r0| j                  | j                      }| xj                   dz  c_         |S | j                  t        | j
                  | j                  dz
  kD  rt        | j                          | j                         S )Nru   )rn   r}   rm   rq   StopIterationro   rs   r   )r   r.   s     r   r   zAPIObjectList._next   s    ==3t}}----.CMMQMJ$??T..22zz|r   N)r   ra   )	rb   rc   rd   r   rs   r{   r~   r   r   r0   r   r   r2   r2      s!     n$"r   r2   N)copyr   r   r2   r0   r   r   <module>r      s    Q) Q)h9 9r   