def queryEpisodeInfo(self): self.scraper = Fernsehserien_de_Scraper(self.show) if self.lang == 'us': (d, s, e, t) = self.scraper.getEpisodeGuide(lang='us') if self.lang == 'de': (d, s, e, t, time_list) = self.scraper.getTimeTable(self.sender) # Find match in Date if not (d[:]): idx = False else: idx = self.searchDate(self.epdate, d) # Found match: if str(idx).isdigit(): if self.lang == 'de': idx = self.checkFollowingDateEntry( self.epdate, self.eptime, d, time_list, idx - 1 if idx > 0 else idx) #Search for closest eptime on the date date, season, episode, title = d[idx], s[idx], e[idx], t[idx] else: # No match date, season, episode, title = None, None, None, None return date, season, episode, title
def queryEpisodeInfo(self): global IsSerie self.show=self.show.replace(" ", " ") #rb 2019-04-30 wegen __ in Show self.show=self.show.replace(" ", " ") #rb 2019-04-30 wegen __ in Show self.scraper = Fernsehserien_de_Scraper(self.show, self.SendeZeit) if self.lang == 'us': (d,s,e,t) = self.scraper.getEpisodeGuide(lang='us') conf.SZaehler = 1; while conf.SZaehler > 0: if self.lang == 'de': (d,s,e,t,time_list) = self.scraper.getTimeTable(self.sender) # Find match in Date if not(d[:]): idx = False IsSerie = False conf.SZaehler = -2 # Suche erfolglos else: IsSerie = True idx = self.searchDate(self.epdate, d) if str(idx).isdigit(): # Found match: conf.SZaehler = -1 if self.lang == 'de': idx = self.checkFollowingDateEntry(self.epdate, self.eptime, d, time_list, idx-1 if idx>0 else idx) #Search for closest eptime on the date date, season, episode, title = d[idx], s[idx], e[idx], t[idx] if len(season) == 1: season = "0" + season #rb Season 2-stellig if len(episode) == 1: episode = "0" + episode #rb episode 2-stellig else: # No match date, season, episode, title = None, None, None, None #SZaehler += 1 if conf.LetzteSeite: conf.SZaehler = -1 else: if IsSerie: self._d= d[len(d)-1] self._t = time_list[len(time_list)-1] self.test = self._d[8:10] + self._d[2:6] + self._d[0:2] + self._t[0:2] + '-' + self._t[3:5] if (self.SendeZeit > self.test): #unnötig, in älteren Webseiteneinträgen zu suchen conf.SZaehler = -1 else: conf.SZaehler += 1 return date, season, episode, title
def queryEpisodeInfo(self): self.scraper = Fernsehserien_de_Scraper(self.show) if self.lang == 'us': (d,s,e,t) = self.scraper.getEpisodeGuide(lang='us') if self.lang == 'de': (d,s,e,t,time_list) = self.scraper.getTimeTable(self.sender) # Find match in Date if not(d[:]): idx = False else: idx = self.searchDate(self.epdate, d) # Found match: if str(idx).isdigit(): if self.lang == 'de': idx = self.checkFollowingDateEntry(self.epdate, self.eptime, d, time_list, idx-1 if idx>0 else idx) #Search for closest eptime on the date date, season, episode, title = d[idx], s[idx], e[idx], t[idx] else: # No match date, season, episode, title = None, None, None, None return date, season, episode, title
class OTR_Rename(object): def __init__(self, filename): path,file = os.path.split(filename) self.file = file self.path = path self.parseFileInfo() def parseFileInfo(self): # Get Title, date and so on from filename self.extension = os.path.splitext(self.file)[1] m = re.search("(.*)_([0-9]{2}\.[0-9]{2}\.[0-9]{2})_([0-9]{2}\-[0-9]{2})_([A-Za-z0-9]+)", self.file) title = m.group(1) # Check for SxxExx in filename: m2=re.search("(S[0-9]{2}E[0-9]{2})",title) if type(m2) is not NoneType: title = title.split('_'+m2.group(1))[0] title = title.split('__')[0] # for US series SeriesName__EpisodeTitle (problems with shows like CSI__NY) self.show = title.replace("_",' ') self.epdate = m.group(2) self.eptime = m.group(3) self.sender = m.group(4) if self.sender[:2] != 'us': self.lang='de' else: self.lang='us' logging.info(self.show + ' (' + self.lang + ') : ' + self.epdate + ' ' + self.eptime) def queryEpisodeInfo(self): self.scraper = Fernsehserien_de_Scraper(self.show) if self.lang == 'us': (d,s,e,t) = self.scraper.getEpisodeGuide(lang='us') if self.lang == 'de': (d,s,e,t,time_list) = self.scraper.getTimeTable(self.sender) # Find match in Date if not(d[:]): idx = False else: idx = self.searchDate(self.epdate, d) # Found match: if str(idx).isdigit(): if self.lang == 'de': idx = self.checkFollowingDateEntry(self.epdate, self.eptime, d, time_list, idx-1 if idx>0 else idx) #Search for closest eptime on the date date, season, episode, title = d[idx], s[idx], e[idx], t[idx] else: # No match date, season, episode, title = None, None, None, None return date, season, episode, title def buildNewFilename(self): # Get filename from the scraped webpage date, season, episode, title = self.queryEpisodeInfo() if None in (date, season, episode, title): newfilename = False else: newfilename = self.show + '.' + 'S' + season + 'E' + episode + '.' + title + self.extension return newfilename def copy_and_sort(self): if not(os.path.isdir(os.path.join(self.path,self.show))): os.mkdir(os.path.join(self.path,self.show)) log = open('log.txt','a') lt = localtime() jahr, monat, tag, stunde, minute = lt[0:5] log.write(str(jahr)+'-'+ str(monat) +'-'+ str(tag) +' '+ str(stunde) +':'+ str(minute) +' : ') #log.write(strftime("%Y-%m-%d %H:%I")) log.write("input " + self.file + "\n") newfilename = self.buildNewFilename() if newfilename != False: newfilename = "".join(i for i in newfilename if i not in r'\/:*?"<>|') newpath = os.path.join(self.path,self.show + '/' + newfilename) logging.debug('Encoding ist %s' % sys.stdin.encoding) newpath = u''.join(newpath).encode('utf-8').strip() if not(os.path.isfile(newpath)): move(os.path.join(self.path,self.file), newpath) log.write(str(jahr)+'-'+ str(monat) +'-'+ str(tag) +' '+ str(stunde) +':'+ str(minute) +' : ') log.write("output " + newpath + "\n\n") logging.info(self.file + ' moved to: \n' + newpath +'\n') else: logging.info('File exists already in the target directory \n ==> Skip file') else: logging.info('No match found \n ==> skip file') newpath = os.path.join(self.path,self.file) log.close() @staticmethod def searchDate(date, date_list): date=datetime.strptime(date.strip(),"%y.%m.%d") for index, item in enumerate(date_list): item = item.strip() #remove potential white spaces if item != u'\xa0' and item != '': actualdate = datetime.strptime(item,"%d.%m.%Y") if actualdate.date() == date.date(): return index @staticmethod def checkFollowingDateEntry(date,stime,date_list,time_list,idx): tc = time.strptime(date+' '+stime,"%y.%m.%d %H-%M") #Time from filename actual=time.strptime(date_list[idx]+' '+time_list[idx],"%d.%m.%Y %H:%M") if idx <= len(date_list)-2: after=time.strptime(date_list[idx+1]+' '+time_list[idx+1],"%d.%m.%Y %H:%M") else: return idx trynext = True while trynext: diffactual= abs(time.mktime(actual)-time.mktime(tc)) diffnext= abs(time.mktime(after)-time.mktime(tc)) if diffactual > diffnext and idx < len(date_list)-2: idx=idx+1 actual = time.strptime(date_list[idx]+' '+time_list[idx],"%d.%m.%Y %H:%M") after = time.strptime(date_list[idx+1]+' '+time_list[idx+1],"%d.%m.%Y %H:%M") elif diffactual > diffnext and idx == len(date_list)-2: idx=idx+1 trynext = False else: trynext = False return idx
class OTR_Rename(object): def __init__(self, filename): self.file = filename self.parseFileInfo() def parseFileInfo(self): # Get Title, date and so on from filename self.extension = os.path.splitext(self.file)[1] m = re.search("(.*)_([0-9]{2}\.[0-9]{2}\.[0-9]{2})_([0-9]{2}\-[0-9]{2})_([A-Za-z0-9]+)", self.file) title = m.group(1) title = title.replace("__", '_') title = title.split('__')[0] # for US series SeriesName__EpisodeTitle (problems with shows like CSI__NY) self.show = title.replace("_",' ') self.epdate = m.group(2) self.eptime = m.group(3) self.sender = m.group(4) if self.sender[:2] != 'us': self.lang='de' else: self.lang='us' print self.lang def queryEpisodeInfo(self): self.scraper = Fernsehserien_de_Scraper(self.show) if self.lang == 'us': (d,s,e,t) = self.scraper.getEpisodeGuide(lang='us') if self.lang == 'de': (d,s,e,t,time_list) = self.scraper.getTimeTable(self.sender) # Find match in Date if not(d[:]): idx = False else: idx = self.searchDate(self.epdate, d) # Found match: if str(idx).isdigit(): if self.lang == 'de': idx = self.checkFollowingDateEntry(self.epdate, self.eptime, d, time_list, idx-1 if idx>0 else idx) #Search for closest eptime on the date date, season, episode, title = d[idx], s[idx], e[idx], t[idx] else: # No match date, season, episode, title = None, None, None, None return date, season, episode, title def buildNewFilename(self): # Get filename from the scraped webpage date, season, episode, title = self.queryEpisodeInfo() if None in (date, season, episode, title): newfilename = False else: newfilename = self.show + '.' + 'S' + season + 'E' + episode + '.' + title + self.extension return newfilename def copy_and_sort(self): if not(os.path.isdir(self.show)): os.mkdir(self.show) log = open('log.txt','a') lt = localtime() jahr, monat, tag, stunde, minute = lt[0:5] log.write(str(jahr)+'-'+ str(monat) +'-'+ str(tag) +' '+ str(stunde) +':'+ str(minute) +' : ') #log.write(strftime("%Y-%m-%d %H:%I")) log.write("input " + self.file + "\n") newfilename = self.buildNewFilename() if newfilename != False: newfilename = "".join(i for i in newfilename if i not in r'\/:*?"<>|') newpath = self.show + '/' + self.epdate + '_' + self.eptime + '_' + newfilename else: newpath = self.show + '/' + self.epdate + '_' + self.eptime + '_' + self.file log.write("path " + newpath + "\n") if not(os.path.isfile(newpath)): move(self.file, newpath) log.write(str(jahr)+'-'+ str(monat) +'-'+ str(tag) +' '+ str(stunde) +':'+ str(minute) +' : ') log.write("output " + newpath + "\n\n") print self.file + ' moved to ' + newpath #log.write(filename + ' was copied to ' + newpath + '\n') log.close() @staticmethod def searchDate(date, date_list): date=datetime.strptime(date,"%y.%m.%d") for index, item in enumerate(date_list): if item != u'\xa0' and item != '': actualdate = datetime.strptime(item,"%d.%m.%Y") if actualdate.date() == date.date(): return index @staticmethod def checkFollowingDateEntry(date,stime,date_list,time_list,idx): tc = time.strptime(date+' '+stime,"%y.%m.%d %H-%M") #Time from filename actual=time.strptime(date_list[idx]+' '+time_list[idx],"%d.%m.%Y %H:%M") if idx <= len(date_list)-2: after=time.strptime(date_list[idx+1]+' '+time_list[idx+1],"%d.%m.%Y %H:%M") else: return idx trynext = True while trynext: diffactual= abs(time.mktime(actual)-time.mktime(tc)) diffnext= abs(time.mktime(after)-time.mktime(tc)) if diffactual > diffnext and idx < len(date_list)-2: idx=idx+1 actual = time.strptime(date_list[idx]+' '+time_list[idx],"%d.%m.%Y %H:%M") after = time.strptime(date_list[idx+1]+' '+time_list[idx+1],"%d.%m.%Y %H:%M") elif diffactual > diffnext and idx == len(date_list)-2: idx=idx+1 trynext = False else: trynext = False return idx
class OTR_Rename(object): def __init__(self, filename): path,file = os.path.split(filename) self.file = file self.path = path self.parseFileInfo() def parseFileInfo(self): # Get Title, date and so on from filename self.extension = os.path.splitext(self.file)[1] m = re.search("(.*)_([0-9]{2}\.[0-9]{2}\.[0-9]{2})_([0-9]{2}\-[0-9]{2})_([A-Za-z0-9]+)", self.file) title = m.group(1) # Check for SxxExx in filename: m2=re.search("(S[0-9]{2}E[0-9]{2})",title) if type(m2) is not NoneType: title = title.split('_'+m2.group(1))[0] self.show = title.replace("_",' ').strip() self.epdate = m.group(2) self.eptime = m.group(3) self.SendeZeit = self.epdate + self.eptime self.sender = m.group(4) if 'us' in self.sender: title = title.split('__')[0] # for US series SeriesName__EpisodeTitle (problems with shows like CSI__NY) if 'HQ' in self.file: self.Format = 'HQ' elif 'HD' in self.file: self.Format = 'HD' else: self.Format = 'DivX' if self.sender[:2] != 'us': self.lang='de' else: self.lang='us' logging.info(self.show + ' (' + self.lang + ') : ' + self.epdate + ' ' + self.eptime) def queryEpisodeInfo(self): global IsSerie self.show=self.show.replace(" ", " ") #rb 2019-04-30 wegen __ in Show self.show=self.show.replace(" ", " ") #rb 2019-04-30 wegen __ in Show self.scraper = Fernsehserien_de_Scraper(self.show, self.SendeZeit) if self.lang == 'us': (d,s,e,t) = self.scraper.getEpisodeGuide(lang='us') conf.SZaehler = 1; while conf.SZaehler > 0: if self.lang == 'de': (d,s,e,t,time_list) = self.scraper.getTimeTable(self.sender) # Find match in Date if not(d[:]): idx = False IsSerie = False conf.SZaehler = -2 # Suche erfolglos else: IsSerie = True idx = self.searchDate(self.epdate, d) if str(idx).isdigit(): # Found match: conf.SZaehler = -1 if self.lang == 'de': idx = self.checkFollowingDateEntry(self.epdate, self.eptime, d, time_list, idx-1 if idx>0 else idx) #Search for closest eptime on the date date, season, episode, title = d[idx], s[idx], e[idx], t[idx] if len(season) == 1: season = "0" + season #rb Season 2-stellig if len(episode) == 1: episode = "0" + episode #rb episode 2-stellig else: # No match date, season, episode, title = None, None, None, None #SZaehler += 1 if conf.LetzteSeite: conf.SZaehler = -1 else: if IsSerie: self._d= d[len(d)-1] self._t = time_list[len(time_list)-1] self.test = self._d[8:10] + self._d[2:6] + self._d[0:2] + self._t[0:2] + '-' + self._t[3:5] if (self.SendeZeit > self.test): #unnötig, in älteren Webseiteneinträgen zu suchen conf.SZaehler = -1 else: conf.SZaehler += 1 return date, season, episode, title def buildNewFilename(self): # Get filename from the scraped webpage date, season, episode, title = self.queryEpisodeInfo() if None in (date, season, episode, title): if IsSerie: newfilename = '' #rb logging.info('Falsche Angaben im Dateinamen?') else: if senderlinks.has_key(self.sender): #rb 03.02.2021 senderlink = senderlinks[self.sender] #rb 03.02.2021 DName = '.cache\\' + self.show.replace(' ','-') + '1_' + senderlink +'_ttlist.html' #rb 2021-01-06 #03.02.2021 DName = DName.replace('---','-') #rb 2022-02-06 nur 1 Bindestrich! if (os.path.isfile(DName)): #rb 2021-01-06 os.remove(DName) #rb 2021-01-06 newfilename = self.show \ +' [20' + self.epdate.replace('.','-') \ +' ' + self.eptime.replace(':','-') + '] ' + self.sender + ' ' + self.Format + self.extension #rb else: newfilename = self.show + ' ' + season + 'x' + episode + ' ' \ + title +' [20' + self.epdate.replace('.','-') \ +' ' + self.eptime.replace(':','-') + '] ' + self.sender + ' ' + self.Format +self.extension #rb #newfilename = self.show + '.' + 'S' + season + 'E' + episode + '.' + title + self.extension return newfilename def copy_and_sort(self): global IsSerie log = open('log.txt','a') lt = localtime() jahr, monat, tag, stunde, minute = lt[0:5] log.write(str(jahr)+'-'+ str(monat).zfill(2) +'-'+ str(tag).zfill(2) +' '+ str(stunde).zfill(2) +':'+ str(minute).zfill(2) +' : ') log.write("input " + self.file + "\n") newfilename = self.buildNewFilename() if not(os.path.isdir(os.path.join(self.path,self.show))): if IsSerie: os.mkdir(os.path.join(self.path,self.show)) chars = {'ö':'oe','ä':'ae','ü':'ue','ß':'ss', '`':"'", '´':"'", \ 'Ö':'Oe','Ä':'Ae','Ü':'Ue', 'à':'a', 'ê':'e', 'é':'e', 'è':'e', \ 'À':'A', 'Ê':'E', 'É':'E', 'È':'E', ':':'.'} # rb Umlaute und Vokale mit Akzenten konvertieren if newfilename != False: #newfilename = "´`*~'#,;-" rb test for char in chars: #rb newfilename = newfilename.replace(char,chars[char]) # newfilename = "".join(i for i in newfilename if i not in r'\/:*?"<>|´`') newfilename = "".join(i for i in newfilename if (ord(i) < 128) and (i not in r'\/:*?"<>|´`')) if IsSerie: newpath = os.path.join(self.path,self.show + '/' + newfilename) else: newpath = '_NichtSerien/' + newfilename if not(os.path.isdir(os.path.join(self.path,'_NichtSerien'))): os.mkdir(os.path.join(self.path,'_NichtSerien')) logging.debug('Encoding ist %s' % sys.stdin.encoding) logging.debug("newpath: " + newpath) #rb zum testen newpath = u''.join(newpath).encode('utf-8').strip() if not(os.path.isfile(newpath)): if not(len(newfilename)==0): move(os.path.join(self.path,self.file), newpath) log.write(str(jahr)+'-'+ str(monat).zfill(2) +'-'+ str(tag).zfill(2) +' '+ str(stunde).zfill(2) +':'+ str(minute).zfill(2) +' : ') log.write("output " + newpath + "\n\n") logging.info(self.file + ' moved to: \n' + newpath +'\n') else: logging.info('Filename hat 0 Bytes ==> Skip file') else: logging.info('File exists already in the target directory \n ==> Skip file') else: logging.info('No match found \n ==> skip file') newpath = os.path.join(self.path,self.file) log.close() @staticmethod def searchDate(date, date_list): date=datetime.strptime(date.strip(),"%y.%m.%d") for index, item in enumerate(date_list): item = item.strip() #remove potential white spaces if item != u'\xa0' and item != '': actualdate = datetime.strptime(item,"%d.%m.%Y") if actualdate.date() == date.date(): return index @staticmethod def checkFollowingDateEntry(date,stime,date_list,time_list,idx): tc = time.strptime(date+' '+stime,"%y.%m.%d %H-%M") #Time from filename actual=time.strptime(date_list[idx]+' '+time_list[idx],"%d.%m.%Y %H:%M") if idx <= len(date_list)-2: after=time.strptime(date_list[idx+1]+' '+time_list[idx+1],"%d.%m.%Y %H:%M") else: return idx trynext = True while trynext: diffactual= abs(time.mktime(actual)-time.mktime(tc)) diffnext= abs(time.mktime(after)-time.mktime(tc)) if diffactual > diffnext and idx < len(date_list)-2: idx=idx+1 actual = time.strptime(date_list[idx]+' '+time_list[idx],"%d.%m.%Y %H:%M") after = time.strptime(date_list[idx+1]+' '+time_list[idx+1],"%d.%m.%Y %H:%M") elif diffactual > diffnext and idx == len(date_list)-2: idx=idx+1 trynext = False else: trynext = False return idx
class OTR_Rename(object): def __init__(self, filename): path, file = os.path.split(filename) self.file = file self.path = path self.logger = logging.getLogger('pyOTR.OtrRename') self.parseFileInfo() def parseFileInfo(self): # Get Title, date and so on from filename self.extension = os.path.splitext(self.file)[1] m = re.search( "(.*)_([0-9]{2}\.[0-9]{2}\.[0-9]{2})_([0-9]{2}\-[0-9]{2})_([A-Za-z0-9]+)", self.file) title = m.group(1) # Check for SxxExx in filename: m2 = re.search("(S[0-9]{2}E[0-9]{2})", title) if type(m2) is not NoneType: title = title.split('_' + m2.group(1))[0] title = title.split( '__' )[0] # for US series SeriesName__EpisodeTitle (problems with shows like CSI__NY) self.show = title.replace("_", ' ') self.epdate = m.group(2) self.eptime = m.group(3) self.sender = m.group(4) if self.sender[:2] != 'us': self.lang = 'de' else: self.lang = 'us' self.logger.info(self.show + ' (' + self.lang + ') : ' + self.epdate + ' ' + self.eptime) def queryEpisodeInfo(self): self.scraper = Fernsehserien_de_Scraper(self.show) if self.lang == 'us': (d, s, e, t) = self.scraper.getEpisodeGuide(lang='us') if self.lang == 'de': (d, s, e, t, time_list) = self.scraper.getTimeTable(self.sender) # Find match in Date if not (d[:]): idx = False else: idx = self.searchDate(self.epdate, d) # Found match: if str(idx).isdigit(): if self.lang == 'de': idx = self.checkFollowingDateEntry( self.epdate, self.eptime, d, time_list, idx - 1 if idx > 0 else idx) #Search for closest eptime on the date date, season, episode, title = d[idx], s[idx], e[idx], t[idx] else: # No match date, season, episode, title = None, None, None, None return date, season, episode, title def buildNewFilename(self): # Get filename from the scraped webpage date, season, episode, title = self.queryEpisodeInfo() if None in (date, season, episode, title): newfilename = False else: newfilename = self.show + '.' + 'S' + season + 'E' + episode + '.' + title + self.extension return newfilename def copy_and_sort(self): if not (os.path.isdir(os.path.join(self.path, self.show))): os.mkdir(os.path.join(self.path, self.show)) log = open('log.txt', 'a') lt = localtime() jahr, monat, tag, stunde, minute = lt[0:5] log.write( str(jahr) + '-' + str(monat) + '-' + str(tag) + ' ' + str(stunde) + ':' + str(minute) + ' : ') #log.write(strftime("%Y-%m-%d %H:%I")) log.write("input " + self.file + "\n") newfilename = self.buildNewFilename() if newfilename != False: newfilename = "".join(i for i in newfilename if i not in r'\/:*?"<>|') newpath = os.path.join(self.path, self.show + '/' + newfilename) logging.debug('Encoding ist %s' % sys.stdin.encoding) newpath = u''.join(newpath).encode('utf-8').strip() if not (os.path.isfile(newpath)): move(os.path.join(self.path, self.file), newpath) log.write( str(jahr) + '-' + str(monat) + '-' + str(tag) + ' ' + str(stunde) + ':' + str(minute) + ' : ') log.write("output " + newpath + "\n\n") self.logger.info(self.file + ' moved to: \n' + newpath + '\n') else: self.logger.info( 'File exists already in the target directory \n ==> Skip file' ) else: self.logger.info('No match found \n ==> skip file') newpath = os.path.join(self.path, self.file) log.close() @staticmethod def searchDate(date, date_list): date = datetime.strptime(date.strip(), "%y.%m.%d") for index, item in enumerate(date_list): item = item.strip() #remove potential white spaces if item != u'\xa0' and item != '': actualdate = datetime.strptime(item, "%d.%m.%Y") if actualdate.date() == date.date(): return index @staticmethod def checkFollowingDateEntry(date, stime, date_list, time_list, idx): tc = time.strptime(date + ' ' + stime, "%y.%m.%d %H-%M") #Time from filename actual = time.strptime(date_list[idx] + ' ' + time_list[idx], "%d.%m.%Y %H:%M") if idx <= len(date_list) - 2: after = time.strptime( date_list[idx + 1] + ' ' + time_list[idx + 1], "%d.%m.%Y %H:%M") else: return idx trynext = True while trynext: diffactual = abs(time.mktime(actual) - time.mktime(tc)) diffnext = abs(time.mktime(after) - time.mktime(tc)) if diffactual > diffnext and idx < len(date_list) - 2: idx = idx + 1 actual = time.strptime(date_list[idx] + ' ' + time_list[idx], "%d.%m.%Y %H:%M") after = time.strptime( date_list[idx + 1] + ' ' + time_list[idx + 1], "%d.%m.%Y %H:%M") elif diffactual > diffnext and idx == len(date_list) - 2: idx = idx + 1 trynext = False else: trynext = False return idx