1+ import logging
12import os
2- import requests
33from datetime import datetime , timedelta
44
5+ import requests
6+
7+ logger = logging .getLogger (__name__ )
8+
59# Set up the GitHub and Slack tokens from environment variables
610GH_TOKEN = os .getenv ("GH_TOKEN" )
711SLACK_TOKEN = os .getenv ("SLACK_TOKEN" )
@@ -39,26 +43,30 @@ def get_slack_user_id(slack_email: str) -> int:
3943 headers = {"Authorization" : f"Bearer { SLACK_TOKEN } " }
4044 params = {"email" : slack_email }
4145 response = requests .get (
42- "https://slack.com/api/users.lookupByEmail" , headers = headers , params = params
46+ "https://slack.com/api/users.lookupByEmail" ,
47+ headers = headers ,
48+ params = params ,
49+ timeout = 30 ,
4350 )
4451
4552 if response .status_code != 200 or not response .json ().get ("ok" ):
46- print (f"Error fetching Slack user ID for email { slack_email } : { response .text } " )
53+ logger . info (f"Error fetching Slack user ID for email { slack_email } : { response .text } " )
4754 return None
4855
49- slack_user_id = response .json ().get ("user" , {}).get ("id" )
50- return slack_user_id
56+ return response .json ().get ("user" , {}).get ("id" )
5157
5258
5359# Helper function to fetch pull requests from GitHub
5460def get_pull_requests () -> dict :
5561 headers = {"Authorization" : f"token { GH_TOKEN } " }
5662 response = requests .get (
57- f"https://api.github.com/repos/{ REPO_OWNER } /{ REPO_NAME } /pulls" , headers = headers
63+ f"https://api.github.com/repos/{ REPO_OWNER } /{ REPO_NAME } /pulls" ,
64+ headers = headers ,
65+ timeout = 30 ,
5866 )
5967
6068 if response .status_code != 200 :
61- print (f"Error fetching PRs: { response .text } " )
69+ logger . info (f"Error fetching PRs: { response .text } " )
6270 response .raise_for_status ()
6371
6472 return response .json ()
@@ -69,10 +77,14 @@ def get_pr_reviews(pull_request: dict) -> list[dict]:
6977 pr_number = pull_request ["number" ]
7078 reviews_url = f"https://api.github.com/repos/{ REPO_OWNER } /{ REPO_NAME } /pulls/{ pr_number } /reviews"
7179 headers = {"Authorization" : f"token { GH_TOKEN } " }
72- response = requests .get (reviews_url , headers = headers )
80+ response = requests .get (
81+ reviews_url ,
82+ headers = headers ,
83+ timeout = 30 ,
84+ )
7385
7486 if response .status_code != 200 :
75- print (f"Error fetching reviews for PR { pr_number } : { response .text } " )
87+ logger . info (f"Error fetching reviews for PR { pr_number } : { response .text } " )
7688 return []
7789
7890 reviews = response .json ()
@@ -86,10 +98,8 @@ def get_pr_reviews(pull_request: dict) -> list[dict]:
8698 # Convert the submitted_at timestamp to a datetime object for comparison
8799 review_time = datetime .strptime (submitted_at , "%Y-%m-%dT%H:%M:%SZ" )
88100 # If the user doesn't have a review or the current one is later, update
89- if (
90- user not in latest_reviews
91- or review_time > latest_reviews [user ]["submitted_at" ]
92- and state != "COMMENTED"
101+ if user not in latest_reviews or (
102+ review_time > latest_reviews [user ]["submitted_at" ] and state != "COMMENTED"
93103 ):
94104 latest_reviews [user ] = {
95105 "user" : user ,
@@ -105,7 +115,7 @@ def get_pr_reviews(pull_request: dict) -> list[dict]:
105115 "state" : "PENDING" ,
106116 }
107117 for user_dict in pull_request .get ("requested_reviewers" , [])
108- }
118+ },
109119 )
110120 # Return the latest review state and URL for each user
111121 return latest_reviews .values ()
@@ -119,11 +129,14 @@ def send_slack_message(slack_user_id: int, message: str) -> None:
119129 }
120130 payload = {"channel" : slack_user_id , "text" : message }
121131 response = requests .post (
122- "https://slack.com/api/chat.postMessage" , json = payload , headers = headers
132+ "https://slack.com/api/chat.postMessage" ,
133+ json = payload ,
134+ headers = headers ,
135+ timeout = 30 ,
123136 )
124137
125138 if response .status_code != 200 or not response .json ().get ("ok" ):
126- print (f"Error sending Slack message: { response .text } " )
139+ logger . info (f"Error sending Slack message: { response .text } " )
127140 response .raise_for_status ()
128141
129142
@@ -162,13 +175,13 @@ def notify_reviewers():
162175 slack_email_to_slack_id = {}
163176 pull_requests = get_pull_requests ()
164177 # Logging all fetched PR details
165- print (f"Fetched { len (pull_requests )} PRs from GitHub." )
178+ logger . info (f"Fetched { len (pull_requests )} PRs from GitHub." )
166179 for pull_request in pull_requests :
167180 title = pull_request ["title" ]
168181 pr_number = pull_request ["number" ]
169- print (f"Processing PR: { pr_number } - { title } " )
182+ logger . info (f"Processing PR: { pr_number } - { title } " )
170183 reviews = get_pr_reviews (pull_request )
171- print (f"Found { len (reviews )} reviews for PR { pr_number } ." )
184+ logger . info (f"Found { len (reviews )} reviews for PR { pr_number } ." )
172185 message = format_pr_message (pull_request , reviews )
173186 # Map Slack users to PR messages
174187 for review in reviews :
@@ -191,13 +204,14 @@ def notify_reviewers():
191204 if pr_list :
192205 if slack_email := GITHUB_USER_NAME_TO_SLACK_EMAIL .get (github_username ):
193206 if slack_user_id := slack_email_to_slack_id .get (
194- slack_email , get_slack_user_id (slack_email )
207+ slack_email ,
208+ get_slack_user_id (slack_email ),
195209 ):
196210 message_content = f"Hello { github_username } ! { header_message } \n { pr_list } \n { tips_message } "
197- # print ("\n\n", message_content, "\n\n")
211+ # logger.info ("\n\n", message_content, "\n\n")
198212 send_slack_message (slack_user_id , message_content )
199213 except Exception as e :
200- print (f"Error occurred: { e } " )
214+ logger . info (f"Error occurred: { e } " )
201215 raise
202216
203217
0 commit comments