o
    h\                     @  sz   d Z ddlmZ ddlZddlmZmZmZ ddlZG dd dZ	e
dkr;e	 ZdgZd	Zd
ZdZeeeee dS dS )u#   Pigeon Cloud API クライアント    )annotationsN)AnyDictOptionalc                   @  s\   e Zd ZdZd#d$ddZd%ddZd&ddZd'ddZd(ddZd)ddZ	e
d*d!d"ZdS )+PigeonCloudServiceuC   Pigeon Cloud へのレコード検索と更新を扱うサービスNsessionOptional[requests.Session]returnNonec                 C  s*   |pt  | _td| _td| _d S )NPIGEON_CLOUD_API_URLPIGEON_CLOUD_AUTH_TOKEN)requestsSessionr   osgetenvapi_url
auth_token)selfr    r   @/var/www/html/openai_agents/src/services/pigeon_cloud_service.py__init__
   s   zPigeonCloudService.__init__job_idOptional[str]	full_namestrinterview_dayinterview_startc                   sf   |s	t d dS | ||}t | | |}|sdS |d d d d }| ||| t d dS )	u;   求人IDと候補者リストを元に面接日程を更新uT   PigeonCloudService: job_id が指定されていないためスキップします。Fdatar   raw_dataidu6   エントリーデータの更新が完了しましたT)print_get_job_entry_data_is_single_entry_update_interview_date)r   r   r   r   r   
entry_datasingle_entryentry_idr   r   r   update_interview_dates   s   
z)PigeonCloudService.update_interview_datesDict[str, str]c                 C  s    | j r| j }ntd |ddS )u   API ヘッダーを生成u!   AuthTokenが見つかりませんzapplication/json)zx-pigeon-authorizationzContent-Type)r   r    )r   r   r   r   r   _headers,   s   zPigeonCloudService._headersr&   r   c              
   C  s   d|| d| dgd}z| j j| j d||  d}|  W d	S  tyA } ztd| d|  W Y d	}~d	S d	}~ww )
u*   対象レコードの面接日程を更新dataset__20 )r   field__1177)tabler   z/api/v1/recordjsonheadersuC   PigeonCloudService: 面接日程の更新に失敗しました (id=) - N)r   putr   r)   raise_for_status	Exceptionr    )r   r&   r   r   payloadresponseexcr   r   r   r#   7   s"   

"z)PigeonCloudService._update_interview_datec              
   C  s   dddd|dddd|ddddd	d
gdgdd}z| j j| j d||  d}|  | W S  tyO } ztd| d|  W Y d}~dS d}~ww )u+   対象レコードの存在/個数を確認20and
field__766eq)and_orfield	conditionvalue	field__66inc
field__918u   2027卒u   2028卒   )table_idr>   limitz/api/v1/get_recordr.   uN   PigeonCloudService:エントリーデータの取得に失敗しました (id=r1   N)r   postr   r)   r3   r/   r4   r    )r   r   r   r5   r6   r7   r   r   r   r!   N   s>   

"z&PigeonCloudService._get_job_entry_dataresponse_jsonDict[str, Any]boolc                 C  s    |d }|dkr
dS t d dS )uz   データの個数が1か、1以外(0or2以上)かをチェックし、エントリーデータが更新対象かを確認count   Tui   名前重複、もしくは該当者なしでエントリーリストが0 or 2件以上発生しましたF)r    )r   rG   
list_countr   r   r   r"   w   s
   z#PigeonCloudService._is_single_entryr6   requests.Responsec                 C  s"   z|   W S  ty   i  Y S w )u9   空レスポンスを考慮しつつ JSON を取り出す)r/   
ValueError)r6   r   r   r   
_safe_json   s
   
zPigeonCloudService._safe_json)N)r   r   r	   r
   )
r   r   r   r   r   r   r   r   r	   r
   )r	   r(   )r&   r   r   r   r   r   r	   r
   )r   r   r   r   )rG   rH   r	   rI   )r6   rM   r	   rH   )__name__
__module____qualname____doc__r   r'   r)   r#   r!   r"   staticmethodrO   r   r   r   r   r      s    




)r   __main__i>  u   吉田太海z
2025-10-15z14:00:00+09:00)rS   
__future__r   r   typingr   r   r   r   r   rP   servicer   r   r   r   r'   r   r   r   r   <module>   s     