def registercheck(self, register): """ register (or check) the given files """ pgr, pcom, pdir, psize = "", "", "", 0 # previous group, comment, directory and size tstart = time.time() ii = 0 failfiles = [] dbFilesToStore = [] with self.dbConnection.getSessionContext() as session: for ff in self.files: ii = ii + 1 fileMightBeRegistered = False cdir = os.path.dirname(ff) # directory sff = os.path.basename(ff) # short filename try: if cdir != pdir: print("Directory [{}]".format(cdir)) pdir = cdir dbf = DBFile(fileName = sff) if register: # group and comment gr, com = self.getgroupcomment(ff) if gr != pgr or com != pcom: print("Using group:'{}' comment:'{}'".format(gr, com)) pgr, pcom = gr, com dbf.group, dbf.comment = gr, com self.printstatus(ii, sff, "Quick") # stage 1 - silent ms = MySum(ff) ms.upgrade(1) dbf.fileSize = ms.fileSize dbf.md1 = ms.md1 fileMightBeRegistered = self._determineFileMightBeRegistered( session = session, fileSize = dbf.fileSize, md1 = dbf.md1, ) if ((not register) and (not fileMightBeRegistered)): self.printstatus(ii, sff, "FAILED") failfiles.append(ff) print() continue tt = threading.Thread(target=ms.upgrade,args=[2]) tt.start() while tt.is_alive(): try: self.printstatus(ii, sff, self.msgpgs(ms,psize,tstart,fileMightBeRegistered)) time.sleep(0.25) except KeyboardInterrupt: ms.requestStop() tt.join() raise tt.join() psize = psize + ms.fileSize dbf.md5 = ms.md5 dbf.ed2k = ms.ed2k matchingDBFile = self._determineMatchingDBFile( session = session, fileSize = dbf.fileSize, md1 = dbf.md1, md5 = dbf.md5, ed2k = dbf.ed2k, ) fullMatch = ( (matchingDBFile is not None) and (dbf.fileName == matchingDBFile.fileName) and (dbf.group == matchingDBFile.group) and (dbf.comment == matchingDBFile.comment) ) if register: if (matchingDBFile is None): DBFileRegister.insert(session, dbf, commit=False) self.printstatus(ii, sff, "New entry " + str(dbf.fileId)) dbFilesToStore.append(dbf) else: if (fullMatch): self.printstatus(ii, sff, "Already registered (full match) as " + str(matchingDBFile.fileId)) else: self.printstatus(ii, sff, "Already registered (data match) as " + str(matchingDBFile.fileId)) failfiles.append(ff) else: if (matchingDBFile is None): self.printstatus(ii, sff, "FAILED") failfiles.append(ff) else: stat = "OK" if (dbf.fileName != matchingDBFile.fileName): stat = "(as " + matchingDBFile.fileName + ") OK" stat = "id:" + str(matchingDBFile.fileId) + " " + stat self.printstatus(ii, sff, stat) print() except KeyboardInterrupt: self.printstatus(ii, sff, "Interrupted") failfiles.append(ff + " (Interrupted)") print() break print(self.RULER) if register: print("About to register {} files out of {}".format(ii-len(failfiles),ii)) else: print("Passed {} files out of {}.{}".format(ii-len(failfiles), ii, "ALL OK" if not len(failfiles) else "" )) if len(failfiles) > 0: print("A list of files that failed:") for ff in failfiles: print(" " + ff) if register: if len(failfiles) == ii: print("No files were registered!") elif self.docommit(failfiles): session.commit() for storedDBFile in dbFilesToStore: self.log(Register.LOGADD + self._formatDBFileForLog(storedDBFile)) print("Done.") else: print("Aborted!")