def find_matching_location(event: dict, filename): if filename not in _ics_cache: _ics_cache[filename] = list(parse_ics_vevent(filename)) event_list = _ics_cache[filename] a = event gt, ga = Re('(InGe|IrBi|IrCi|IrAr)(\d*)', re.I).search(a['SUMMARY']).groups() LT = [ b for b in event_list for _ in [b['DTSTART;TZID=Europe/Brussels']] for _ in [datetime.strptime(_, '%Y%m%dT%H%M%S')] for _ in [naive_to_utc(_)] for _ in [_.strftime('%Y%m%dT%H%M%S')] if _ == a['DTSTART'][:-1] ] L = [ b for b in LT for ddict in [event_desc_dict(b)] for m in [ Re('(INGE|IRBI|IRAR|IRCI) - (?:groupe |gr.)(\d+)', re.I).search( b['DESCRIPTION']) ] if m for ogt, oga in [m.groups()] if int(ga) == int(oga) and gt.lower() == ogt.lower() ] if gt.lower() != 'irar' else [ b for b in LT for ddict in [event_desc_dict(b)] if Re('irar', re.I).search(b['DESCRIPTION']) and not Re('Théorie', re.I).search(b['DESCRIPTION']) ] # TODO: use event_groups(b) : "B1-IRBI - gr.5" "B1-INGE - groupe 04" "B1-IRAR" # TODO: use event_acti(b) if len(L) == 1: return L[0]['LOCATION'] elif len(L) > 1: return 'Gehol Too Much {}'.format(' '.join(l['LOCATION'] for l in L)) elif len(L) == 0: return 'Gehol Not Found'