@@ -36,12 +36,12 @@ def load_yml():
3636 return pd .concat (
3737 [schema , pd .DataFrame .from_dict (data ), pd .DataFrame .from_dict (archive )],
3838 ignore_index = True ,
39- ).set_index ("title " , drop = False )
39+ ).set_index ("conference " , drop = False )
4040
4141
4242def map_columns (df , reverse = False ):
4343 cols = {
44- "Subject" : "title " ,
44+ "Subject" : "conference " ,
4545 "Start Date" : "start" ,
4646 "End Date" : "end" ,
4747 "Tutorial Deadline" : "tutorial_deadline" ,
@@ -61,28 +61,30 @@ def map_columns(df, reverse=False):
6161
6262def fuzzy_match (df_yml , df_remote ):
6363 # Make Title the index
64- df_remote = df_remote .set_index ("title " , drop = False )
64+ df_remote = df_remote .set_index ("conference " , drop = False )
6565 df_remote .index .rename ("title_match" , inplace = True )
6666 known_mappings = {"SciPy US" : "SciPy" }
6767
6868 df = df_yml .copy ()
6969
7070 # Get closest match for titles
71- df ["title_match" ] = df ["title " ].apply (lambda x : process .extract (x , df_remote ["title " ], limit = 1 ))
71+ df ["title_match" ] = df ["conference " ].apply (lambda x : process .extract (x , df_remote ["conference " ], limit = 1 ))
7272
7373 for key , value in known_mappings .items ():
74- if key in df ["title " ].values :
75- df .loc [df ["title " ] == key , "title_match" ] = value
74+ if key in df ["conference " ].values :
75+ df .loc [df ["conference " ] == key , "title_match" ] = value
7676
7777 # Get first match if it's over 90
7878 for i , row in df .copy ().iterrows ():
7979 if isinstance (row ["title_match" ], str ):
8080 continue
81+ if len (row ["title_match" ]) == 0 :
82+ continue
8183 title , prob , _ = row ["title_match" ][0 ]
8284 if prob == 100 :
8385 title = title
8486 elif prob >= 70 :
85- if not query_yes_no (f"Do '{ row ['title ' ]} ' and '{ title } ' match? (y/n): " ):
87+ if not query_yes_no (f"Do '{ row ['conference ' ]} ' and '{ title } ' match? (y/n): " ):
8688 # Code for non-matching case
8789 title = i
8890 else :
@@ -106,11 +108,11 @@ def interactive_merge(df_yml, df_remote):
106108 columns = df_new .columns .tolist ()
107109
108110 try :
109- df_yml = df_yml .drop (["title " ], axis = 1 )
111+ df_yml = df_yml .drop (["conference " ], axis = 1 )
110112 except :
111113 pass
112114 try :
113- df_remote = df_remote .drop (["title " ], axis = 1 )
115+ df_remote = df_remote .drop (["conference " ], axis = 1 )
114116 except :
115117 pass
116118
@@ -124,7 +126,7 @@ def interactive_merge(df_yml, df_remote):
124126
125127 df_merge = pd .merge (left = df_yml , right = df_remote , how = "outer" , on = "title_match" , validate = "one_to_one" )
126128 for i , row in df_merge .iterrows ():
127- df_new .loc [i , "title " ] = i
129+ df_new .loc [i , "conference " ] = i
128130 for column in columns :
129131 cx , cy = column + "_x" , column + "_y"
130132 # print(i,cx,cy,cx in df_merge.columns and cy in df_merge.columns,column in df_merge.columns,)
@@ -197,7 +199,16 @@ def interactive_merge(df_yml, df_remote):
197199 ):
198200 df_new .loc [i , column ] = rx + cfp_time_x
199201 else :
200- df_new .loc [i , column ] = ry + cfp_time_y
202+ if query_yes_no (f"Is this an extension?" ):
203+ rrx , rry = int (rx .replace ("-" , "" ).split (" " )[0 ]), int (ry .replace ("-" , "" ).split (" " )[0 ])
204+ if rrx < rry :
205+ df_new .loc [i , "cfp" ] = rx + cfp_time_x
206+ df_new .loc [i , "cfp_ext" ] = ry + cfp_time_y
207+ else :
208+ df_new .loc [i , "cfp" ] = ry + cfp_time_y
209+ df_new .loc [i , "cfp_ext" ] = rx + cfp_time_x
210+ else :
211+ df_new .loc [i , column ] = ry + cfp_time_y
201212 else :
202213 # For everything else give a choice
203214 if query_yes_no (f"For { i } in column '{ column } ' would you prefer '{ rx } ' or keep '{ ry } '?" ):
@@ -213,7 +224,7 @@ def interactive_merge(df_yml, df_remote):
213224
214225def fill_missing_required (df ):
215226 required = [
216- "title " ,
227+ "conference " ,
217228 "year" ,
218229 "link" ,
219230 "cfp" ,
@@ -228,7 +239,7 @@ def fill_missing_required(df):
228239 for keyword in required :
229240 if pd .isna (row [keyword ]):
230241 user_input = input (
231- f"What's the value of '{ keyword } ' for conference '{ row ['title ' ]} ' check { row ['link' ]} ?: "
242+ f"What's the value of '{ keyword } ' for conference '{ row ['conference ' ]} ' check { row ['link' ]} ?: "
232243 )
233244 if user_input != "" :
234245 df .loc [i , keyword ] = user_input
@@ -251,7 +262,7 @@ def write_yaml(df, out_url):
251262 default_flow_style = False ,
252263 explicit_start = True ,
253264 ).splitlines ():
254- outfile .write (line .replace ("- title :" , "\n - title :" ))
265+ outfile .write (line .replace ("- conference :" , "\n - conference :" ))
255266 outfile .write ("\n " )
256267
257268
@@ -296,15 +307,18 @@ def main(year=None, base=""):
296307 except urllib .error .HTTPError :
297308 break
298309
299- df_merged , df_remote = fuzzy_match (df_yml [df_yml ["year" ] == y ], df )
300- df_merged ["year" ] = y
301- df_merged = df_merged .drop (["title" ], axis = 1 )
302- df_merged = interactive_merge (df_merged , df_remote )
310+ if df_yml [df_yml ["year" ] == y ].empty :
311+ df_csv = pd .concat ([df_new , df ], ignore_index = True )
312+ else :
313+ df_merged , df_remote = fuzzy_match (df_yml [df_yml ["year" ] == y ], df )
314+ df_merged ["year" ] = y
315+ df_merged = df_merged .drop (["conference" ], axis = 1 )
316+ df_merged = interactive_merge (df_merged , df_remote )
303317
304- df_new = pd .concat ([df_new , df_merged ], ignore_index = True )
318+ df_new = pd .concat ([df_new , df_merged ], ignore_index = True )
305319
306- merged , _ = fuzzy_match (df , df_yml [df_yml ["year" ] == y ])
307- df_csv = pd .concat ([df_csv , merged ], ignore_index = True )
320+ merged , _ = fuzzy_match (df , df_yml [df_yml ["year" ] == y ])
321+ df_csv = pd .concat ([df_csv , merged ], ignore_index = True )
308322
309323 df_new = fill_missing_required (df_new )
310324 write_yaml (df_new , target_file )
0 commit comments