Ë
    daºikT  ã                   óR   — d dl Z ddlmZ  e j                  e«      Z G d„ de«      Zy)é    Né   )ÚAtlassianRestAPIc                   ó(  ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd&d„Z	 	 	 	 	 	 	 	 	 d'd„Zd„ Z	 	 d(d„Zd„ Zd„ Zd)d„Zd„ Zd(d„Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d „ Z"d*d!„Z#	 	 	 	 	 	 	 d+d"„Z$d#„ Z%d$„ Z&d,d%„Z'ˆ xZ(S )-ÚAssetsCloudzAssets for Jira API wrapper.c                 ó‚   •— d|d<   |j                  d«      r | j                  |i |¤Ž\  }}t        t        | �  |i |¤Ž y)zl
        Initialize Assets()

        :param args:
        :param kwargs:
        :return: Assets()
        zrest/assets/1.0Úapi_rootÚcloudN)ÚgetÚ_AssetsCloud__cloud_initÚsuperr   Ú__init__)ÚselfÚargsÚkwargsÚ	__class__s      €úH/var/www/timesheet/venv/lib/python3.12/site-packages/atlassian/assets.pyr   zAssetsCloud.__init__   sJ   ø€ ð /ˆˆzÑà�:‰:�gÔØ,˜4×,Ñ,¨dÐ=°fÑ=‰LˆD�&ÜŒk˜4Ñ)¨4Ð:°6Ó:ó    c                 ó|   — |d= t        |i |¤Ž}d|j                  «       › d�|d<   d|d<   d|d<   ddd	œ| _        ||fS )
zu
        Creates a Cloud specific version of Assets()

        Returns:
            Assets(AtlassianRestAPI)
        r	   z/jsm/assets/workspace/z/v1/r   zhttps://api.atlassian.comÚurlTzapplication/json)ÚAcceptzContent-Type)r   Ú_AssetsCloud__get_workspace_idÚdefault_headers)r   r   r   Útemps       r   Ú__cloud_initzAssetsCloud.__cloud_init   sb   € ð �7ˆOÜ˜DÐ+ FÑ+ˆà5°d×6MÑ6MÓ6OÐ5PÐPTÐUˆˆzÑà3ˆˆu‰àˆˆw‰à*<ÐN`ÑaˆÔØ�Vˆ|Ðr   c                 óR   — | j                  d| j                  ¬«      }|d   d   d   S )Nú$rest/servicedeskapi/assets/workspace©ÚheadersÚvaluesr   ÚworkspaceId)r
   r   )r   Úresults     r   Ú__get_workspace_idzAssetsCloud.__get_workspace_id2   s8   € Ø—‘Ø2Ø×(Ñ(ð ó 
ˆð �hÑ Ñ" =Ñ1Ð1r   c                 ór   — | j                  d| j                  ¬«      }|d   D �cg c]  }|d   ‘Œ	 c}S c c}w )zI
        Returns all Assets workspace Ids.
        :return: List
        r   r   r   r    )r
   Úexperimental_headers)r   r!   Úis      r   Ú_get_assets_workspace_idsz%AssetsCloud._get_assets_workspace_ids9   sC   € ð
 —‘Ø2Ø×-Ñ-ð ó 
ˆð +1°Ñ*:Ö; Q��-Ó Ò;Ð;ùÒ;s   ¥4c                 óF   — t        t        | j                  «       «      «      S )zM
        Returns the first Assets workspace ID.
        :return: str
        )ÚnextÚiterr&   )r   s    r   Ú_get_assets_workspace_idz$AssetsCloud._get_assets_workspace_idD   s   € ô
 ”D˜×7Ñ7Ó9Ó:Ó;Ð;r   c                 ó†   — | j                   rt        ‚| j                  | j                  d|› �«      }| j	                  |«      S )aT  
        Get Attachment info
        Example output:
        [
            {
                "id": 1,
                "author": "admin",
                "mimeType": "image/png",
                "filename": "astronaut.png",
                "filesize": "490 B",
                "created": "2019-11-27T11:42:22.283Z",
                "comment": "",
                "commentOutput": "",
                "url": "http://jira/rest/assets/1.0/attachments/1"
            }
        ]

        :param object_id Object ID
        :return list of object
            id: required(string)
            author: (string)
            mimeType: (string)
            filename: required(string)
            filesize: (string)
            created: required(datetime)
            comment: (string)
            commentOutput: (string)
            url: required(string)
        zattachments/object/©r	   ÚNotImplementedErrorÚ
url_joinerr   r
   ©r   Ú	object_idr   s      r   Úget_attachments_of_objectsz&AssetsCloud.get_attachments_of_objectsL   s@   € ð< �:Š:Ü%Ð%Ø�o‰oØ�M‰MØ! ) Ð-ó
ˆð �x‰x˜‹}Ðr   c                 óâ   — | j                   rt        ‚t        j                  d«       d|› �}t	        |d«      5 }d|i}| j                  || j                  |¬«      cddd«       S # 1 sw Y   yxY w)zž
        Add attachment to Object
        :param object_id: int
        :param filename: str, name, if file in current directory or full path to file
        zAdding attachment...z#rest/assets/1.0/attachments/object/ÚrbÚfile)r   ÚfilesN)r	   r-   ÚlogÚinfoÚopenÚpostÚno_check_headers)r   r0   Úfilenamer   Ú
attachmentr5   s         r   Úupload_attachment_to_objectz'AssetsCloud.upload_attachment_to_objectr   sq   € ð �:Š:Ü%Ð%Ü�‰Ð'Ô(Ø3°I°;Ð?ˆÜ�(˜DÓ!ð 	N ZØ˜ZÐ(ˆEØ—9‘9˜S¨$×*?Ñ*?Àu�9ÓM÷	N÷ 	Nò 	Nús   ¹"A%Á%A.c                 ó|   — | j                   rt        ‚t        j                  d«       d|› �}| j	                  |«      S )zL
        Add attachment to Object
        :param attachment_id: int
        zDeleting attachment...zrest/assets/1.0/attachments/)r	   r-   r6   r7   Údelete)r   Úattachment_idr   s      r   Údelete_attachmentzAssetsCloud.delete_attachment€   s9   € ð
 �:Š:Ü%Ð%Ü�‰Ð)Ô*Ø,¨]¨OÐ<ˆØ�{‰{˜3ÓÐr   c                 ó\   — | j                   rt        ‚|||dœ}d}| j                  ||¬«      S )aþ  
        Add comment to Object

        :param comment: str
        :param object_id: int - Object ID
        :param role: int - Role ID
            0	Assets Users
            1	Assets Managers
            2	Assets Administrators
            3	Assets Developers
        :return:
        {
            "created": "2019-11-27T12:37:41.492Z",
            "updated": "2019-11-27T12:37:41.492Z",
            "id": 1,
            "actor": {
                "avatarUrl": "https://www.gravatar.com/avatar/64e1b8d34f425d19e1ee2ea7236d3028?d=mm&s=48",
                "displayName": "admin",
                "name": "admin",
                "key": "admin",
                "renderedLink": "<a href="/jira/secure/ViewProfile.jspa?name=admin">admin</a>",
                "isDeleted": false
            },
            "role": 0,
            "comment": "A comment to be added",
            "commentOutput": "A comment to be added",
            "objectId": 1,
            "canEdit": true,
            "canDelete": true
        }
        )ÚcommentÚobjectIdÚrolezrest/assets/1.0/comment/create©Úparams)r	   r-   r9   )r   rC   r0   rE   rG   r   s         r   Úadd_comment_to_objectz!AssetsCloud.add_comment_to_object�   s6   € ð@ �:Š:Ü%Ð%Ø$°)ÀTÑJˆØ.ˆØ�y‰y˜ VˆyÓ,Ð,r   c                 óR   — | j                   rt        ‚d|› �}| j                  |«      S )zb
        The object id to fetch comments from

        :param object_id:
        :return:
        zrest/assets/1.0/comment/object/)r	   r-   r
   r/   s      r   Úget_comment_of_objectz!AssetsCloud.get_comment_of_object³   s+   € ð �:Š:Ü%Ð%Ø/°	¨{Ð;ˆØ�x‰x˜‹}Ðr   c                 ób   — | j                  | j                  d|› �«      }| j                  |«      S )a2  
        Load a single icon by id

        :param icon_id:
        :return:
        {
            "id": 1,
            "name": "Delete",
            "url16": "http://jira/rest/assets/1.0/icon/1/icon.png?size=16",
            "url48": "http://jira/rest/assets/1.0/icon/1/icon.png?size=48"
        }
        zicon/©r.   r   r
   )r   Úicon_idr   s      r   Úget_icon_by_idzAssetsCloud.get_icon_by_idÁ   s-   € ð �o‰o˜dŸm™m¨u°W°IÐ->Ó?ˆØ�x‰x˜‹}Ðr   c                 ó\   — | j                  | j                  d«      }| j                  |«      S )z=
        All existing global icons

        :return:
        zicon/globalrL   ©r   r   s     r   Úget_all_global_iconsz AssetsCloud.get_all_global_iconsÑ   s&   € ð �o‰o˜dŸm™m¨]Ó;ˆØ�x‰x˜‹}Ðr   c                 ób   — | j                  | j                  d|› �«      }| j                  |«      S )zw
        The id of the import configuration that should be started

        :param import_id:
        :return:
        zimport/start/©r.   r   r9   ©r   Ú	import_idr   s      r   Ústart_import_configurationz&AssetsCloud.start_import_configurationÜ   s3   € ð �o‰oØ�M‰MØ˜I˜;Ð'ó
ˆð �y‰y˜‹~Ðr   c                 ó€   — | j                   rt        ‚| j                  | j                  d«      }| j	                  |«      S )ú_
        Should the reindex clean the index before doing the reindex

        :return:
        zindex/reindex/start©r	   r-   r.   r   r9   rP   s     r   Úreindex_assetszAssetsCloud.reindex_assetsë   s4   € ð �:Š:Ü%Ð%Ø�o‰o˜dŸm™mÐ-BÓCˆØ�y‰y˜‹~Ðr   c                 ó€   — | j                   rt        ‚| j                  | j                  d«      }| j	                  |«      S )rX   zindex/reindex/currentnoderY   rP   s     r   Úreindex_current_node_assetsz'AssetsCloud.reindex_current_node_assetsö   s4   € ð �:Š:Ü%Ð%Ø�o‰o˜dŸm™mÐ-HÓIˆØ�y‰y˜‹~Ðr   c                 óš   — | j                   st        ‚|||dœ}d|i}| j                  | j                  d«      }| j	                  |||¬«      S )zÝ
        Resource dedicated to finding objects based on the Assets Query Language (AQL)

        :param query:
        :param start:
        :param max_results:
        :param include_attributes:
        :return:
        )ÚstartAtÚ
maxResultsÚincludeAttributesÚqlQueryz
object/aql)rG   ÚdatarY   )r   ÚqueryÚstartÚmax_resultsÚinclude_attributesrG   rb   r   s           r   ÚaqlzAssetsCloud.aql  sQ   € ð �zŠzÜ%Ð%Ø"°+ÐTfÑgˆØ˜5Ð!ˆØ�o‰o˜dŸm™m¨\Ó:ˆØ�y‰y˜ V°$ˆyÓ7Ð7r   c           
      ó¸   — | j                   rt        ‚||||||||	|
dœ	}|r||d<   |r||d<   | j                  | j                  d«      }| j	                  ||¬«      S )aÑ  
        Resource dedicated to finding objects based on the Insight Query Language (IQL)

        :param query:
        :param object_schema_id:
        :param page:
        :param order_by_attribute_id:
        :param order_asc:
        :param result_per_page:
        :param include_attributes:
        :param include_attributes_deep:
        :param include_type_attributes:
        :param include_extended_info:
        :param extended:
        :return:
        )	ra   ÚobjectSchemaIdÚpageÚorderAscÚresultPerPager`   ÚincludeAttributesDeepÚincludeTypeAttributesÚincludeExtendedInfoÚorderByAttributeIdÚextendedzobject/navlist/aql©rb   r,   )r   rc   Úobject_schema_idrj   Úorder_by_attribute_idÚ	order_ascÚresult_per_pagerf   Úinclude_attributes_deepÚinclude_type_attributesÚinclude_extended_inforq   rb   r   s                 r   Únavlist_aqlzAssetsCloud.navlist_aql  sx   € ð< �:Š:Ü%Ð%àØ.ØØ!Ø,Ø!3Ø%<Ø%<Ø#8ñ

ˆñ !Ø)>ˆDÐ%Ñ&ÙØ'ˆD�ÑØ�o‰o˜dŸm™mÐ-AÓBˆØ�x‰x˜ $ˆxÓ'Ð'r   c                 ób   — | j                  | j                  d|› �«      }| j                  |«      S )zM
        Load one object

        :param object_id:
        :return:
        úobject/rL   r/   s      r   Ú
get_objectzAssetsCloud.get_objectM  s-   € ð �o‰o˜dŸm™m¨w°y°kÐ-BÓCˆØ�x‰x˜‹}Ðr   c                 ót   — ||||dœ}| j                  | j                  d|› �«      }| j                  ||¬«      S )zÒ
        Update an existing object in Assets

        :param object_id:
        :param object_type_id:
        :param attributes:
        :param has_avatar:
        :param avatar_uuid:
        :return:
        ©Ú
attributesÚobjectTypeIdÚ
avatarUUIDÚ	hasAvatarr|   rr   )r.   r   Úput)r   r0   Úobject_type_idr€   Ú
has_avatarÚavatar_uuidÚbodyr   s           r   Úupdate_objectzAssetsCloud.update_objectW  sG   € ð& %Ø*Ø%Ø#ñ	
ˆð �o‰o˜dŸm™m¨w°y°kÐ-BÓCˆØ�x‰x˜ $ˆxÓ'Ð'r   c                 ób   — | j                  | j                  d|› �«      }| j                  |«      S )zZ
        Delete the referenced object

        :param object_id:
        :return:
        r|   )r.   r   r?   r/   s      r   Údelete_objectzAssetsCloud.delete_objectr  s.   € ð �o‰o˜dŸm™m¨w°y°kÐ-BÓCˆØ�{‰{˜3ÓÐr   c                 ód   — | j                  | j                  d|› d�«      }| j                  |«      S )zf
        List all attributes for the given object

        :param object_id:
        :return:
        r|   ú/attributesrL   r/   s      r   Úget_object_attributesz!AssetsCloud.get_object_attributes|  s/   € ð �o‰o˜dŸm™m¨w°y°kÀÐ-MÓNˆØ�x‰x˜‹}Ðr   c                 ór   — ||dœ}| j                  | j                  d|› d�«      }| j                  ||¬«      S )z™
        Retrieve the history entries for this object

        :param object_id:
        :param asc:
        :param abbreviate:
        :return:
        )ÚascÚ
abbreviater|   z/historyrF   rL   )r   r0   r�   r‘   rG   r   s         r   Úget_object_historyzAssetsCloud.get_object_history†  s>   € ð ¨JÑ7ˆØ�o‰o˜dŸm™m¨w°y°kÀÐ-JÓKˆØ�x‰x˜ FˆxÓ+Ð+r   c                 ód   — | j                  | j                  d|› d�«      }| j                  |«      S )z_
        Find all references for an object

        :param object_id:
        :return:
        r|   z/referenceinforL   r/   s      r   Úget_object_reference_infoz%AssetsCloud.get_object_reference_info“  s/   € ð �o‰o˜dŸm™m¨w°y°kÀÐ-PÓQˆØ�x‰x˜‹}Ðr   c                 ón   — ||||dœ}| j                  | j                  d«      }| j                  ||¬«      S )zÃ
        Create a new object in Assets

        :param object_type_id:
        :param attributes:
        :param has_avatar:
        :param avatar_uuid:
        :return:
        :return:
        r   zobject/createrr   rS   )r   r…   r€   r†   r‡   rb   r   s          r   Úcreate_objectzAssetsCloud.create_object�  s@   € ð %Ø*Ø%Ø#ñ	
ˆð �o‰o˜dŸm™m¨_Ó=ˆØ�y‰y˜ 4ˆyÓ(Ð(r   c                 ód   — | j                  | j                  d|› d�«      }| j                  |«      S )zm
        Relation between Jira issues and Assets objects

        :param object_id:
        :return:
        zobjectconnectedtickets/z/ticketsrL   r/   s      r   Úget_object_connected_ticketsz(AssetsCloud.get_object_connected_tickets²  s5   € ð �o‰oØ�M‰MØ% i [°Ð9ó
ˆð �x‰x˜‹}Ðr   c                 ó\   — | j                  | j                  d«      }| j                  |«      S )aâ  
        Resource to find object schemas in Assets
        :return:
        {
            "objectschemas": [
            {
                "id": 1,
                "name": "Test",
                "objectSchemaKey": "TEST",
                "status": "Ok",
                "created": "2019-11-26T08:05:46.894Z",
                "updated": "2019-11-26T08:05:46.894Z",
                "objectCount": 2,
                "objectTypeCount": 3
            }
            ]
        }
        zobjectschema/listrL   rP   s     r   Úlist_object_schemazAssetsCloud.list_object_schema¿  s'   € ð& �o‰o˜dŸm™mÐ-@ÓAˆØ�x‰x˜‹}Ðr   c                 ó   — t         ‚)N©r-   )r   Úobject_schema_keyÚdescriptions      r   Úcreate_object_schemaz AssetsCloud.create_object_schemaÕ  s   € Ü!Ð!r   c                 ób   — | j                  | j                  d|› �«      }| j                  |«      S )z?
        Find a schema by id
        :param schema_id:
        zobjectschema/rL   )r   Ú	schema_idr   s      r   Úget_object_schemazAssetsCloud.get_object_schemaØ  s-   € ð
 �o‰o˜dŸm™m¨}¸Y¸KÐ-HÓIˆØ�x‰x˜‹}Ðr   c                 ó   — t         ‚)z)
        Update an object schema
        rœ   ©r   r¡   s     r   Úupdate_object_schemaz AssetsCloud.update_object_schemaà  ó
   € ô "Ð!r   c                 ó   — t         ‚)z!
        Delete a schema
        rœ   r¤   s     r   Údelete_object_schemaz AssetsCloud.delete_object_schemaæ  r¦   r   c                 ó   — t         ‚)zH
        Find all object type attributes for this object schema
        rœ   r¤   s     r   Úget_object_schema_attributesz(AssetsCloud.get_object_schema_attributesì  r¦   r   c                 ó  — t        t        «       j                  «       «      }t        «       }|j	                  |D ��ci c]  \  }}|€Œ	|dvsŒ||“Œ c}}«       | j                  | j                  › d|› d�|¬«      S c c}}w )aV  
        Find all object types for this object schema
        https://developer.atlassian.com/cloud/assets/rest/api-group-objectschema/#api-objectschema-id-objecttypes-flat-get
        Args:
            schema_id (str): id of the object schema
            query (bool, optional): Object Type Names to search for, defaults to None (Use API default)
            exclude (str, optional): Exclude objects with this name, defaults to None (Use API default)
            includeObjectCounts (bool, optional): Populate objectCount attribute for each object type, defaults to None (Use API default)
        r¤   z/objectschema/z/objecttypes/flatrF   )ÚlistÚlocalsÚitemsÚdictÚupdater
   r   )	r   r¡   rc   ÚexcludeÚincludeObjectCountsr   rG   ÚkÚvs	            r   Ú#get_object_schema_object_types_flatz/AssetsCloud.get_object_schema_object_types_flatò  s}   € ô ”f“h—n‘nÓ&Ó'ˆÜ“ˆØ�‰¨×c¡  1°!±-ÀAÐMbÒDb�q˜!‘tÓcÔdØ�x‰xØ�}‰}ˆo˜^¨I¨;Ð6GÐHØð ó 
ð 	
ùó ds   ¼
A<
ÁA<
ÁA<
c	                 ó  — t        t        «       j                  «       «      }	t        «       }
|
j	                  |	D ��ci c]  \  }}|€Œ	|dvsŒ||“Œ c}}«       | j                  | j                  › d|› d�| j                  |
¬«      S c c}}w )aÞ  
        Find all attributes for this object type
        https://developer.atlassian.com/cloud/assets/rest/api-group-objecttype/#api-objecttype-id-attributes-get
        Args:
            type_id (str): id of the object type
            only_value_editable (bool, optional): only return editable values, defaults to None (Use API default)
            order_by_name (bool, optional): values, defaults to None (Use API default)
            query (str, optional): Not documented in API, defaults to None (Use API default)
            include_values_exist (bool, optional): Include only where values exist, defaults to None (Use API default)
            exclude_parent_attributes (bool, optional): Exclude parent attributes, defaults to None (Use API default)
            include_children (bool, optional): include attributes from children, defaults to None (Use API default)
            order_by_required (bool, optional): Order by required fields, defaults to None (Use API default)
        )r   Útype_idz/objecttype/r�   )r   rG   )r¬   r­   r®   r¯   r°   r
   r   r$   )r   r·   Úonly_value_editableÚorder_by_namerc   Úinclude_values_existÚexclude_parent_attributesÚinclude_childrenÚorder_by_requiredr   rG   r³   r´   s                r   Úget_object_type_attributesz&AssetsCloud.get_object_type_attributes  s…   € ô2 ”f“h—n‘nÓ&Ó'ˆÜ“ˆØ�‰¨×a¡  1°!±-ÀAÐM`ÒD`�q˜!‘tÓaÔbà�x‰xØ�}‰}ˆo˜\¨'¨°+Ð>Ø×-Ñ-Øð ó 
ð 	
ùó bs   ¼
B
ÁB
ÁB
c                 ó€   — | j                   rt        ‚| j                  | j                  d«      }| j	                  |«      S )z@
        Show ongoing assets processes
        :return:
        z)progress/category/insight-reindex/reindexr,   rP   s     r   Úget_progress_of_reindexz#AssetsCloud.get_progress_of_reindex8  s6   € ð
 �:Š:Ü%Ð%ð �o‰o˜dŸm™mÐ-XÓYˆØ�x‰x˜‹}Ðr   c                 ó†   — | j                   rt        ‚| j                  | j                  d|› �«      }| j	                  |«      S )zÎ
        Show ongoing assets processes
        :type import_id: int: The id of the import source configuration
                              that the progress should be fetched for
        :return:
        zprogress/category/imports/r,   rT   s      r   Úget_progress_of_importz"AssetsCloud.get_progress_of_importD  s;   € ð �:Š:Ü%Ð%Ø�o‰o˜dŸm™mÐ/IÈ)ÈÐ-UÓVˆØ�x‰x˜‹}Ðr   c                 óÒ   — | j                  d«      }|rdnd}d|||D �cg c]  }d|i‘Œ c}igii}d||D �cg c]  }d|i‘Œ c}ii}| j                  |› d|› �|¬«      S c c}w c c}w )	aT  
        Set the value of an Assets field.
        Args:
            key (str): Jira issue key, eg. SFT-446
            field_id (str): The internal Jira name of the Assets field, e.g. customfield_10200
            assets_keys (list): List of Assets objects to associate with the field. Limited
                to 20 objects. If the field only takes a single object pass a single value list.
            add (bool, optional): Add to the existing field rather than setting the field value.
                Defaults to False.
        Returns:
            [type]: The assets object updated.
        ÚissueÚaddÚsetr°   ÚkeyÚfieldsú/rr   )Úresource_urlr„   )	r   rÇ   Úfield_idÚassets_keysrÅ   Úbase_urlÚactionr%   rb   s	            r   Úupdate_issue_assets_fieldz%AssetsCloud.update_issue_assets_field]  s’   € ð ×$Ñ$ WÓ-ˆÙ‘ 5ˆàØ˜F¸Ö$E°A e¨Q¢ZÒ$EÐFÐGðð
ˆð
 ˜8¸+Ö%F°Q u¨a¢jÒ%FÐGÐHˆØ�x‰x˜8˜* A c UÐ+°$ˆxÓ7Ð7ùò	 %Fùò &Gs
   ŸA
·A$)r   é   T)	r   NTrÐ   Tr   FFN)FÚ )FT)NNN)NNNNNNN)F))Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r&   r*   r1   r=   rA   rH   rJ   rN   rQ   rV   rZ   r\   rg   rz   r}   r‰   r‹   rŽ   r’   r”   r–   r˜   rš   rŸ   r¢   r¥   r¨   rª   rµ   r¾   rÀ   rÂ   rÏ   Ú__classcell__)r   s   @r   r   r      sû   ø„ Ù&ô;òò(2ò	<ò<ò$òLNò	 ò$-òL
òò òò	ò	ó8ð2 Ø"ØØØØ !Ø %Ø#Øó0(òfð Øó(ò6 òó,òó)ò*òò,"òò"ò"ò"ó
ð* !ØØØ!Ø"&ØØó!
òh
ò
÷28r   r   )ÚloggingÚrest_clientr   Ú	getLoggerrÒ   r6   r   © r   r   ú<module>rÛ      s.   ðã å )ð €g×Ñ˜Ó!€ôg	8Ð"õ g	8r   