@@ -37,7 +37,12 @@ async def _depaginate_records(self, url, params, offset):
3737 while offset :
3838 params ["offset" ] = offset
3939 response = await self .get (url , params = params )
40- records .extend (response ["records" ])
40+ # Check for error response during pagination
41+ if "error" in response :
42+ error_msg = response ["error" ].get ("message" , "Unknown error" )
43+ logger .error (f"Airtable API error during pagination: { error_msg } " )
44+ break
45+ records .extend (response .get ("records" , []))
4146 offset = response .get ("offset" )
4247
4348 return records
@@ -50,7 +55,7 @@ def table_url(self, table_name, record_id=None):
5055
5156 async def get_name_from_record_id (self , table_name : str , record_id ):
5257 if self .record_id_to_name [table_name ]:
53- return self .record_id_to_name [table_name ][ record_id ]
58+ return self .record_id_to_name [table_name ]. get ( record_id )
5459
5560 url = self .table_url ("Services" )
5661 params = {"fields[]" : "Name" }
@@ -63,10 +68,13 @@ async def get_name_from_record_id(self, table_name: str, record_id):
6368 return None
6469
6570 records = res_json ["records" ]
71+ # Skip records that don't have a Name field (Airtable omits empty fields)
6672 self .record_id_to_name [table_name ] = {
67- record ["id" ]: record ["fields" ]["Name" ] for record in records
73+ record ["id" ]: record ["fields" ]["Name" ]
74+ for record in records
75+ if "Name" in record .get ("fields" , {})
6876 }
69- return self .record_id_to_name [table_name ][ record_id ]
77+ return self .record_id_to_name [table_name ]. get ( record_id )
7078
7179 async def get_row_from_record_id (self , table_name : str , record_id : str ) -> dict :
7280 url = self .table_url (table_name , record_id )
@@ -80,8 +88,8 @@ async def get_row_from_record_id(self, table_name: str, record_id: str) -> dict:
8088 return {}
8189
8290 return res_json ["fields" ]
83- except Exception as ex :
84- logger .exception (f"Couldn't get row from record id { record_id } in { table_name } " , ex )
91+ except Exception :
92+ logger .exception (f"Couldn't get row from record id { record_id } in { table_name } " )
8593 return {}
8694
8795 async def get_all_records (self , table_name , field = None ):
@@ -106,7 +114,12 @@ async def get_all_records(self, table_name, field=None):
106114 )
107115
108116 if field :
109- return [record ["fields" ][field ] for record in res_json ["records" ]]
117+ # Skip records that don't have the field (Airtable omits empty fields)
118+ return [
119+ record ["fields" ][field ]
120+ for record in res_json ["records" ]
121+ if field in record .get ("fields" , {})
122+ ]
110123 else :
111124 return res_json ["records" ]
112125
@@ -141,8 +154,8 @@ async def find_mentors_with_matching_skillsets(self, skillsets):
141154 for skillset in skillsets
142155 ):
143156 partial_match .append (mentor ["fields" ])
144- except Exception as e :
145- logger .exception ("Exception while trying to find filter mentors by skillset" , e )
157+ except Exception :
158+ logger .exception ("Exception while trying to filter mentors by skillset" )
146159 return []
147160
148161 if len (complete_match ) < 5 :
@@ -165,8 +178,8 @@ async def find_records(self, table_name: str, field: str, value: str) -> list:
165178 return []
166179
167180 return response ["records" ]
168- except Exception as ex :
169- logger .exception (f"Exception when attempting to get { field } from { table_name } ." , ex )
181+ except Exception :
182+ logger .exception (f"Exception when attempting to get { field } from { table_name } " )
170183 return []
171184
172185 async def update_request (self , request_record , mentor_id ):
0 commit comments