From 6460378f46f567efc87d5235243448aba15f07b9 Mon Sep 17 00:00:00 2001 From: dbr Date: Mon, 2 Jun 2008 11:39:54 +0930 Subject: [PATCH] Simlar to checkTvEps, but verifies films are in the format "The Film Name [2005].avi" --- checkFilms.py | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100755 checkFilms.py diff --git a/checkFilms.py b/checkFilms.py new file mode 100755 index 0000000..87d8c88 --- /dev/null +++ b/checkFilms.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python +#encoding:utf-8 +import os,re,sys + +def colour(text,colour="red"): + nocolour=False + if nocolour: # Colour no supported, return plain text + return text + #end if + + c = {'red':'[31m', + 'green':'[32m', + 'blue':'[34m', + } + CLR=chr(27)+'[0m' + if not colour in c.keys(): + raise ValueError("Invalid colour") + else: + return chr(27)+c[colour] + text + CLR + #end if +#end colour + +def getError(invalid,errorno): + """Gets all invalid files with supplied error number""" + ret = [] + for cur in invalid: + if cur['errorno'] == errorno: + ret.append(cur) + return ret +#end searchError + +################################### +# Name regexs +################################### +# Valid filenames, with episode name +# Should return 2 groups: +# Film name. +# Year. +# +# Ignore filetype extension +# +# The Film [2004] +r_with_year = [ + re.compile("([-\w\d ]+) \[(\d{4})\]"), +] + +################################### +# Valid filenames, but missing year +# +# The Film +r_missing_year = [ + re.compile("([-\w\d ]+)"), +] + +# Valid path names +r_valid_path = [ + re.compile("/.$"), +] + +################################### +# Regex to match valid, but not-to-be-processed files (dot-files, folder.jpg artwork) +################################### +decrappify = [ + re.compile("(?=^[.]{1}.*)"), + re.compile("folder.jpg"), +] + +# Location to process +loc = "." # Runs from the current path + +################################### +# Find all valid files +################################### +allfiles=[] +for (path,dirs,files) in os.walk(loc): + for file in files: + filename = os.path.join(path,file) + allfiles.append( str(filename) ) +#end for f + +files = [x for x in allfiles if os.path.isfile(x)] # only get files, not folders + +# Strip out dotfiles/folder.jpg +for current_file in allfiles: + current_file_path,current_file_name = os.path.split(current_file) + for cur_decrap in decrappify: + if cur_decrap.match(current_file_name): + files.remove(current_file) +#end for file + +files = [os.path.join(loc,x) for x in files] # append path to file name + +# Warn if no files are found, then exit +if files.__len__() == 0: + print colour('No files found','red') + sys.exit(0) + + +errors = { + 1:'malformed name', + 2:'missing year', + 3:'path is incorrect' +} +################################### +# Validate filenames +################################### + +valid = [] +invalid = [] + +for cur in files: + cpath,cfile = os.path.split(cur) + cfile,cext = os.path.splitext(cfile) + + for cur_checker in r_valid_path: + # Check if path is valid + check = cur_checker.findall(cpath) + if check: + break + else: + invalid.append({'errorno':3, 'path':cpath,'filename':cfile, + 'cext':cext}) + #end for cur_checker + + for cur_checker in r_with_year: + # Check if filename is valid (with ep name) + check = cur_checker.findall(cfile) + if check: + # Valid file name + valid.append({'path':cpath,'filename':cfile, + 'cext':cext}) + break # Found valid episode, skip to the next one + #end if + else: + for cur_checker in r_missing_year: + # Check for valid name with missing episode name + check = cur_checker.findall(cfile) + if check: + invalid.append({'errorno':2, 'path':cpath,'filename':cfile, + 'cext':cext}) + break + #end if check + else: + # Doesn't match valid-name or missing-ep-name regexs, it's invalid + invalid.append({'errorno':1, 'path':cpath,'filename':cfile, + 'cext':cext}) + #end for cur_checker + #end for cur_checker +#end for + +################################### +# Show invalid names +################################### +for errorno,errordescr in errors.items(): + errors = getError(invalid,errorno) + if len(errors) == 0: continue + + errmsg = "# %s (error code: %s)" % (errordescr,errorno) + + print + print "#"*len(errmsg) + print errmsg + print "#"*len(errmsg) + + for c in errors: + print c['filename']