
    3fir                         d dl Z d dlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZ  e j                  e      Z G d de	      Z G d	 d
e	      Z G d de	      Z G d de	      Z G d de	      Zy)    N)parse   )Contact)Storage)NEXT_LINK_KEYWORDApiComponent
Pagination
TrackerSetc                   :     e Zd ZdZi Zddd fd
Zd Zd Z xZS )SharepointListColumnz2 A Sharepoint List column within a SharepointList Nparentconc                   |r|rt        d      |r|j                  n|| _        |j                  dd       xs |rt        |dd       nd }t        |   |r|j                  n|j                  d      |       |j                  | j                  i       }|j                  d      | _	        |j                  | j                  d      d       | _        |j                  | j                  d      d       | _        |j                  | j                  d      d       | _        |j                  | j                  d	      d       | _        |j                  | j                  d
      d       | _        |j                  | j                  d      d       | _        |j                  | j                  d      d       | _        |j                  | j                  d      d       | _        |j                  | j                  d      d       | _        |j                  | j                  d      d       d| _        y |j                  | j                  d      d       d| _        y |j                  | j                  d      d       d| _        y |j                  | j                  d      d       d| _        y |j                  | j                  d      d       d| _        y |j                  | j                  d      d       d| _        y |j                  | j                  d      d       d| _        y |j                  | j                  d      d       d| _        y |j                  | j                  d      d       d| _        y d | _        y )N*Need a parent or a connection but not bothmain_resourceprotocolr   r   idcolumnGroupdescriptiondisplayNameenforceUniqueValueshiddenindexednamereadOnlyrequiredtextchoicenumbercurrencydateTimelookupboolean
calculatedpersonOrGroup)
ValueErrorr   popgetattrsuper__init__r   get_cloud_data_key	object_id_cccolumn_groupr   display_nameenforce_unique_valuesr   r   internal_name	read_onlyr   
field_type)selfr   r   kwargsr   
cloud_data	__class__s         M/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/O365/sharepoint.pyr,   zSharepointListColumn.__init__   s   cIJJ!'6::S 

?D9 H6<GFOT2$ 	 	V&//JAWgtuZZ 4 4b9
 $-&NN488M+BDI%>>$((=*A4H&NN488M+BDI%/^^DHH=R4SUY%Z" nnTXXh%7> "~~dhhy&94@ (^^DHHV,<dC#(<dC"txx
';TB >>$((6*D1=$DO^^DHHX.5A&DO^^DHHX.5A&DO^^DHHZ0$7C(DO^^DHHZ0$7C(DO^^DHHX.5A&DO^^DHHY/6B'DO^^DHH\2D9E*DO^^DHH_5t<H-DO"DO    c                 N    dj                  | j                  | j                        S )NzList Column: {0}-{1})formatr2   r6   r7   s    r;   __repr__zSharepointListColumn.__repr__M   s    %,,T->->PPr<   c                 4    | j                   |j                   k(  S Nr/   r7   others     r;   __eq__zSharepointListColumn.__eq__P       ~~00r<   )	__name__
__module____qualname____doc__
_endpointsr,   r@   rF   __classcell__r:   s   @r;   r   r      s!    <J!%4 :#xQ1r<   r   c                   Z     e Zd ZdddZddd fd
Zd Zd Zd	 Zd
 Zd Z	d Z
d Z xZS )SharepointListItemz/items/{item_id}/fields/items/{item_id})update_list_itemdelete_list_itemNr   c                |   |r|rt        d      |r|j                  n|| _        || _        |j                  dd      xs |rt	        |dd      nd}t
        |   |r|j                  n|j                  d      |       |j                  | j                  i       }t        | j                        | _        |j                  d      | _        |j                  | j                  d      d      }|j                  | j                  d	      d      }| j                  j                  }|rt        |      j!                  |      nd| _        |rt        |      j!                  |      nd| _        |j                  | j                  d
      i       j                  dd      }	|	r.t'        d| j                  | j                  d| j                  |	ind| _        |j                  | j                  d      i       j                  dd      }
|
r.t'        d| j                  | j                  d| j                  |
ind| _        |j                  | j                  d      d      | _        |j                  | j                  d      i       j                  dd      | _        |j                  | j                  d      d      | _        y)a   A Sharepoint ListItem within a SharepointList

        :param parent: parent object
        :type parent: SharepointList
        :param Connection con: connection to use if no parent specified
        :param Protocol protocol: protocol to use if no parent specified
         (kwargs)
        :param str main_resource: use this resource instead of parent resource
         (kwargs)
        r   r   Nr   r   casingr   createdDateTimelastModifiedDateTime	createdByuserr   r   lastModifiedBywebUrlcontentTypefields )r(   r   _parentr)   r*   r+   r,   r   r-   r.   r
   r0   _track_changesr/   timezoner   
astimezonecreatedmodifiedr   
created_bymodified_byweb_urlcontent_type_idr_   )r7   r   r   r8   r   r9   re   rf   local_tzrg   rh   r:   s              r;   r,   zSharepointListItem.__init__X   sk    cIJJ!'6::S 

?D9 H6<GFOT2$ 	 	(.V__FJJz4J' 	 	) ZZ 4 4b9
(9#-..*;!<dC>>$((+A"BDI==))>EuW~00:4@Hh228<d^^DHH[$92>BB64P
 LV " Hdhh H%)%9%9:$FH[_ 	 nnTXX.>%?DHHQUV NY # Jtxx$-- J&*&:&:K%HJ^b 	 "~~dhhx&8$?  *~~dhh}.ErJNNtUYZ !nnTXXh%7>r<   c                 8    dj                  | j                        S )NzList Item: {})r>   ri   r?   s    r;   r@   zSharepointListItem.__repr__   s    %%dll33r<   c                 4    | j                   |j                   k(  S rB   rC   rD   s     r;   rF   zSharepointListItem.__eq__   rG   r<   c                 :    t        | j                        | _        y )NrU   )r
   r0   rb   r?   s    r;   _clear_trackerz!SharepointListItem._clear_tracker   s    (9r<   c                     | j                   r| j                   n1| j                  r$| j                  j                  j                         nd }|r||v S y)NT)r_   ra   column_name_cwvalues)r7   fieldvalid_field_namess      r;   _valid_fieldzSharepointListItem._valid_field   sL    +/;;DKK|| ,,335 	 --- r<   c                     |D ]H  }| j                  |      r| j                  j                  |       0t        dj	                  |             | j
                  r| j
                  j                  |       y|| _        y)z|
        Update the value for a field(s) in the listitem

        :param update: A dict of {'field name': newvalue}
        z'"{}" is not a valid internal field nameN)ru   rb   addr(   r>   r_   update)r7   updatesrs   s      r;   update_fieldsz SharepointListItem.update_fields   sq      	ZE  '##''. !J!Q!QRW!XYY		Z ;;KKw'!DKr<   c                    | j                   sy| j                  | j                  j                  d      j	                  | j
                              }| j                  j                         D ci c]%  \  }}| j                  |      | j                   v r||' }}}| j                  j                  ||      }|sy| j                          yc c}}w )z$Save the updated fields to the cloudTrR   item_idF)rb   	build_urlrL   r-   r>   r/   r_   itemsr0   r   patchro   )r7   urlrs   valuerx   responses         r;   save_updateszSharepointListItem.save_updates   s     ""nnT__001CDKKTXTbTbKcd37;;3D3D3F =<5%XXe_(;(;; , = = 88>>#v.=s   /*Cc                     | j                  | j                  j                  d      j                  | j                              }| j
                  j                  |      }t        |      S )NrS   r|   )r~   rL   r-   r>   r/   r   deletebool)r7   r   r   s      r;   r   zSharepointListItem.delete   sQ    nnT__001CDKKTXTbTbKcd88??3'H~r<   )rH   rI   rJ   rL   r,   r@   rF   ro   ru   rz   r   r   rM   rN   s   @r;   rP   rP   T   s@    &?&8:J "&4 5?n41:
"& r<   rP   c                   t     e Zd ZddddZeZeZddd fd
Zd Z	d	 Z
dddddd
dZddZd Zd Zd Z xZS )SharepointListz/itemsrQ   z/columns)	get_itemsget_item_by_idget_list_columnsNr   c                   |r|rt        d      |r|j                  n|| _        |j                  | j                  i       }|j                  d      | _        |j                  dd      xs |rt        |dd      nd}dj                  | j                        }dj                  ||      }t        | %  |r|j                  n|j                  d      |	       |j                  | j                  d
      d      | _        |j                  | j                  d      d      | _        | j                  s| j                  | _        |j                  | j                  d      d      | _        |j                  | j                  d            | _        |j                  | j                  d      d      }|j                  | j                  d      d      }| j                  j                   }	|rt#        |      j%                  |	      nd| _        |rt#        |      j%                  |	      nd| _        |j                  | j                  d      i       j                  dd      }
|
r.t+        d| j                  | j                  d| j                  |
ind| _        |j                  | j                  d      i       j                  dd      }|r.t+        d| j                  | j                  d| j                  |ind| _        |j                  di       }|j                  | j                  d      d      | _        |j                  | j                  d      d      | _        |j                  | j                  d      d      | _        | j7                         D ci c]%  }|j8                  s|j                  |j:                  ' c}| _        yc c}w )ae   A Sharepoint site List

        :param parent: parent object
        :type parent: Site
        :param Connection con: connection to use if no parent specified
        :param Protocol protocol: protocol to use if no parent specified
         (kwargs)
        :param str main_resource: use this resource instead of parent resource
         (kwargs)
        r   r   r   Nz/lists/{list_id})list_id{}{}r   r   r    r   r   r]   rW   rX   rY   rZ   r[   r\   listcontentTypesEnabledFr   templater`   )r(   r   r-   r.   r/   r)   r*   r>   r+   r,   r   r0   r   r2   r   ri   rc   r   rd   re   rf   r   rg   rh   content_types_enabledr   r   r   r5   r4   rq   )r7   r   r   r8   r9   r   resource_prefixre   rf   rk   rg   rh   lst_infocolr:   s                 r;   r,   zSharepointList.__init__   sV    cIJJ!'6::SZZ 4 4b9
 $- 

?D9 H6<GFOT2$ 	 -33DNN3Km_E(.V__FJJz4J' 	 	)
 NN488F#3R8	&NN488M+BBGyy))DI%>>$((=*A2F!~~dhhx&89..*;!<dC>>$((+A"BDI==))>EuW~00:4 " h22'+ 	  ^^DHH[$92>BB64P
 ) # Itxx$-- I&*&:&:J%GI.2 	 !nnTXX.>%?DHHIMO
  + $ K4== K'+';';[&IK04 	
 >>&"-%-\\HH*+U&4"
 ll488H#5u=
 !TXXj%95A
 '+&;&;&=T"S]]  #//1B1BB T Ts   *Oc                 4    | j                   |j                   k(  S rB   rC   rD   s     r;   rF   zSharepointList.__eq__*  rG   r<   c                 V   |dk(  ryt        |t              rd}|D ]o  }|| j                  j                         v r	||dz   z  }(|| j                  v r|| j                  |   dz   z  }Lt        j                  dj                  |             q |dk7  rd|j                  d      z   dz   S y y )NTr_   r   ,z+"{}" is not a valid field name - check casezfields(select=))
isinstancer   rq   rr   logwarningr>   rstrip)r7   expand_fieldsresultrs   s       r;   build_field_filterz!SharepointList.build_field_filter-  s    D t,F& ]D//6688eck)Fd111d11%83>>FKK M T TUZ [\] |'&--*<<sBB  -r<   )queryorder_bybatchr   c          	         | j                  | j                  j                  d            }||| j                  j                  kD  r| j                  j                  }d|r|n|i}|| j                  |      |d<   |r||d<   |r5t        |t              r||d<   n|j                  |j                                | j                  j                  ||      }|sg S |j                         }	|	j                  t        d      }
|	j                  dg       D cg c]"  } | j                  dd	| i| j                  |i$ }}|r|
rt        | || j                  |
|
      S |S c c}w )a  Returns a collection of Sharepoint Items

        :param int limit: max no. of items to get. Over 999 uses batch.
        :param query: applies a filter to the request.
        :type query: Query or str
        :param order_by: orders the result set based on this condition
        :type order_by: Query or str
        :param int batch: batch size, retrieves items in
         batches allowing to retrieve more items than the limit.
        :param expand_fields: specify user-defined fields to return,
         True will return all fields
        :type expand_fields: list or bool
        :return: list of Sharepoint Items
        :rtype: list[SharepointListItem] or Pagination
        r   Nz$topexpandz$orderbyz$filterparamsr   r   )r   dataconstructor	next_linklimitr`   )r~   rL   r-   r   max_top_valuer   r   strrx   	as_paramsr   jsonr   list_item_constructorr.   r	   )r7   r   r   r   r   r   r   r   r   r   r   itemr   s                r;   r   zSharepointList.get_items<  s^   " nnT__00=>=EDMM$?$??MM//E5%e4$#66}EF8!)F:%%$)y!eoo/088<<F<3I}}HH.5	 "XXgr24 ,++X4XD<P<PRV;WX 4 4 YT4C]C](1@ @ L4s   'Ec                 H   | j                  | j                  j                  d      j                  |            }i }|| j	                  |      |d<   | j
                  j                  ||      }|sg S |j                         } | j                  dd| i| j                  |iS )a>  Returns a sharepoint list item based on id

        :param int item_id: item id to search for
        :param expand_fields: specify user-defined fields to return,
         True will return all fields
        :type expand_fields: list or bool
        :return: Sharepoint Item
        :rtype: SharepointListItem
        r   r|   r   r   r   r`   )	r~   rL   r-   r>   r   r   r   r   r.   )r7   r}   r   r   r   r   r   s          r;   r   zSharepointList.get_item_by_idq  s     nnT__001ABIIRYIZ[$#66}EF888<<F<3I}})t))VV$:N:NPT9UVVr<   c           	      :   | j                  | j                  j                  d            }| j                  j                  |      }|sg S |j	                         }|j                  dg       D cg c]"  } | j
                  dd| i| j                  |i$ c}S c c}w )z% Returns the sharepoint list columns r   r   r   r`   )r~   rL   r-   r   r   list_column_constructorr.   )r7   r   r   r   columns        r;   r   zSharepointList.get_list_columns  s     nnT__001CDE88<<$I}} #hhw35 -,,[D[T=Q=QSY<Z[ 5 	5 5   .'Bc                     | j                  | j                  j                  d            }| j                  j	                  |d|i      }|sy|j                         } | j                  dd| i| j                  |iS )zCreate new list item

        :param new_data: dictionary of {'col_name': col_value}

        :rtype: SharepointListItem
        r   r_   Fr   r`   )r~   rL   r-   r   postr   r   r.   )r7   new_datar   r   r   s        r;   create_list_itemzSharepointList.create_list_item  sr     nnT__00=>88==x&:;}})t))VV$:N:NPT9UVVr<   c                     | j                  | j                  j                  d      j                  |            }| j                  j                  |      }t        |      S )z[ Delete an existing list item

        :param item_id: Id of the item to be delted
        r   r|   )r~   rL   r-   r>   r   r   r   )r7   r}   r   r   s       r;   rS   zSharepointList.delete_list_item  sM     nnT__001ABIIRYIZ[88??3'H~r<   rB   )rH   rI   rJ   rL   rP   r   r   r   r,   rF   r   r   r   r   r   rS   rM   rN   s   @r;   r   r      sc    ,&J
 /2!%4 RTh1C3TD\` 3jW65W$
r<   r   c                   x     e Zd ZdZddddZeZddd fd
Zd	 Zd
 Z	d Z
ddZd Zd Zd Zd Zd Zd Z xZS )Sitez A Sharepoint Site z/sitesz/listsz/lists/{display_name})get_subsites	get_listsget_list_by_nameNr   c                   |r|rt        d      |r|j                  n|| _        |j                  | j                  i       }|j                  d      | _        |j                  dd      xs |rt        |dd      nd}dj                  | j                        }t        |t              r|ndj                  ||      }t        
| -  |r|j                  n|j                  d      |	       d
|v | _        |j                  | j                  d      |j                  dd            | _        |j                  | j                  d      d      | _        | j                  s| j                   | _        |j                  | j                  d      d      | _        |j                  | j                  d            | _        |j                  | j                  d      d      }|j                  | j                  d      d      }| j                  j&                  }	|rt)        |      j+                  |	      nd| _        |rt)        |      j+                  |	      nd| _        t1        | dj                  | j                              | _        y)ak   A Sharepoint site List

        :param parent: parent object
        :type parent: Sharepoint
        :param Connection con: connection to use if no parent specified
        :param Protocol protocol: protocol to use if no parent specified
         (kwargs)
        :param str main_resource: use this resource instead of parent resource
         (kwargs)
        r   r   r   Nzsites/{site_id})site_idr   r   r   rootr   r   r   r   r]   rW   rX   /sites/{id}r   )r   r   )r(   r   r-   r.   r/   r)   r*   r>   r   r   r+   r,   r   r   r0   r   r2   r   ri   rc   r   rd   re   rf   r   site_storage)r7   r   r   r8   r9   r   r   re   rf   rk   r:   s             r;   r,   zSite.__init__  s%    cIJJ!'6::SZZ 4 4b9
 $- 

?D9 H6<GFOT2$ 	 ,224>>2J,6vt,D$mmM?K 	 	(.V__FJJz4J' 	 	)
 j(	 NN488F#3VZZ5KL	&NN488M+BBGyy))DI%>>$((=*A2F!~~dhhx&89..*;!<dC>>$((+A"BDI==))>EuW~00:4 " h22'+ 	
 $42?2F2F+/>> 3G 3;<r<   c                 "    | j                         S rB   r@   r?   s    r;   __str__zSite.__str__      }}r<   c                 8    dj                  | j                        S )NzSite: {})r>   r   r?   s    r;   r@   zSite.__repr__  s      ++r<   c                 4    | j                   |j                   k(  S rB   rC   rD   s     r;   rF   zSite.__eq__  rG   r<   c                 :    | j                   j                  |      S )z Returns the default document library of this site (Drive instance)

        :param request_drive: True will make an api call to retrieve
         the drive data
        :rtype: Drive
        )request_drive)r   get_default_drive)r7   r   s     r;   get_default_document_libraryz!Site.get_default_document_library  s       222OOr<   c                 :    | j                   j                  |      S )z Returns a Document Library (a Drive instance)

        :param drive_id: the drive_id to be retrieved.
        :rtype: Drive
        )drive_id)r   	get_drive)r7   r   s     r;   get_document_libraryzSite.get_document_library  s       **H*==r<   c                 6    | j                   j                         S )z Returns a collection of document libraries for this site
        (a collection of Drive instances)
        :return: list of items in this folder
        :rtype: list[Drive] or Pagination
        )r   
get_drivesr?   s    r;   list_document_librarieszSite.list_document_libraries  s       ++--r<   c           	      n   | j                  | j                  j                  d      j                  | j                              }| j
                  j                  |      }|sg S |j                         }|j                  dg       D cg c]"  } | j                  dd| i| j                  |i$ c}S c c}w )zV Returns a list of subsites defined for this site

        :rtype: list[Site]
        r   r   r   r   r`   )	r~   rL   r-   r>   r/   r   r   r:   r.   )r7   r   r   r   sites        r;   r   zSite.get_subsites$  s    
 nnOO/66$..6IK 88<<$I}} "-/ KdKt/C/CT.JK / 	/ /s   'B2c           	      :   | j                  | j                  j                  d            }| j                  j                  |      }|sg S |j	                         }|j                  dg       D cg c]"  } | j
                  dd| i| j                  |i$ c}S c c}w )z^ Returns a collection of lists within this site

        :rtype: list[SharepointList]
        r   r   r   r`   )r~   rL   r-   r   r   list_constructorr.   )r7   r   r   r   lsts        r;   r   zSite.get_lists6  s    
 nnT__00=>88<<$I}}]a]e]efmoq]rsVY%%%QTQd6J6JC5PQsssr   c                 .   |st        d      | j                  | j                  j                  d      j	                  |            }| j
                  j                  |      }|sg S |j                         } | j                  dd| i| j                  |iS )zQ
        Returns a sharepoint list based on the display name of the list
        z&Must provide a valid list display namer   )r2   r   r`   )	r(   r~   rL   r-   r>   r   r   r   r.   )r7   r2   r   r   r   s        r;   r   zSite.get_list_by_nameE  s    
 EFFnnT__001CDKKYeKfg88<<$I}}$t$$QDQT5I5I44PQQr<   c                     | j                  | j                  j                  d            }| j                  j	                  ||      }|sy|j                         } | j                  dd| i| j                  |iS )z
        Creates a SharePoint list.
        :param list_data: Dict representation of list.
        :type list_data: Dict
        :rtype: list[SharepointList]
        r   )r   Nr   r`   )r~   rL   r-   r   r   r   r   r.   )r7   	list_datar   r   r   s        r;   create_listzSite.create_listW  sn     nnT__00=>88==9=5}}$t$$QDQT5I5I44PQQr<   )F)rH   rI   rJ   rK   rL   r   r   r,   r   r@   rF   r   r   r   r   r   r   r   rM   rN   s   @r;   r   r     sa     !3J
 &!%4 <<|,1P>./$tR$Rr<   r   c                   V     e Zd ZdZdddZeZddd fd
Zd Zd	 Z	d
 Z
d Zd Z xZS )
Sharepointz2 A Sharepoint parent class to group functionality r   z/sites?search={keyword})get_sitesearchNr   c                    |r|rt        d      |r|j                  n|| _        |j                  dd      }t        |   |r|j
                  n|j                  d      |       y)ah   A Sharepoint site List

        :param parent: parent object
        :type parent: Account
        :param Connection con: connection to use if no parent specified
        :param Protocol protocol: protocol to use if no parent specified
         (kwargs)
        :param str main_resource: use this resource instead of parent resource
         (kwargs)
        r   r   r   r   r   N)r(   r   r)   r+   r,   r   r-   )r7   r   r   r8   r   r:   s        r;   r,   zSharepoint.__init__q  sc     cIJJ!'6::S 

?#%'(.V__FJJz4J' 	 	)r<   c                 "    | j                         S rB   r   r?   s    r;   r   zSharepoint.__str__  r   r<   c                      y)Nr   r`   r?   s    r;   r@   zSharepoint.__repr__  s    r<   c           
         |st        d      | j                  | j                  j                  d      j	                  |            }g }|r| j
                  j                  |      }|s	 |S |j                         }||j                  dg       D cg c]"  } | j                  dd| i| j                  |i$ c}z  }|j                  d      }|r|S c c}w )z Search a sharepoint host for sites with the provided keyword

        :param keyword: a keyword to search sites
        :rtype: list[Site]
        zMust provide a valid keywordr   )keywordr   r   z@odata.nextLinkr`   )	r(   r~   rL   r-   r>   r   r   site_constructorr.   )r7   r   r   sitesr   r   r   s          r;   search_sitezSharepoint.search_site  s     ;<<NNOO)000AC	 xx||I.H  ==?D  HHWb1 &%%RTRd6J6JD5QR E
 !23I  s   'Cc                 $    | j                  d      S )z5 Returns the root site

        :rtype: Site
        r   )r   r?   s    r;   get_root_sitezSharepoint.get_root_site  s    
 }}V$$r<   c                    t        |      }|dk(  r|d   }nW|dk(  r0|\  }}|j                  d      sd|z   n|}dj                  ||      }n"|dk(  rdj                  |      }nt	        d      | j                  | j                  j                  d	      j                  |
            }| j                  j                  |      }|sy|j                         } | j                  dd| i| j                  |iS )aX   Returns a sharepoint site

        :param args: It accepts multiple ways of retrieving a site:

         get_site(host_name): the host_name: host_name ej.
         'contoso.sharepoint.com' or 'root'

         get_site(site_id): the site_id: a comma separated string of
         (host_name, site_collection_id, site_id)

         get_site(host_name, path_to_site): host_name ej. 'contoso.
         sharepoint.com', path_to_site: a url path (with a leading slash)

         get_site(host_name, site_collection_id, site_id):
         host_name ej. 'contoso.sharepoint.com'
        :rtype: Site
        r   r      /z{}:{}:   r   zIncorrect number of argumentsr   r   Nr   r`   )len
startswithr>   joinr(   r~   rL   r-   r   r   r   r.   )	r7   argsnum_argsr   	host_namepath_to_siter   r   r   s	            r;   r   zSharepoint.get_site  s    $ t9q=7D]&*#I|5A5L5L63-& ??9l;D]88D>D<==nnT__00<CCtCLM88<<$}}$t$$ ED E(,(<(<d'CE 	Er<   )rH   rI   rJ   rK   rL   r   r   r,   r   r@   r   r   r   rM   rN   s   @r;   r   r   h  sA    < "+J !%4 ),<%(Er<   r   )loggingdateutil.parserr   address_bookr   driver   utilsr   r   r	   r
   	getLoggerrH   r   r   rP   r   r   r   r`   r<   r;   <module>r     sw     ! !  J Jg!E1< E1Pv vrj\ jZkR< kR\rE rEr<   