"""SubmissionFilter Searches submissions for a key and/or a market """ from optparse import OptionParser import IMS parser = OptionParser(usage="SubmissionFilter.py [options]",version = "%prog 0.1") parser.add_option("-c","--code", action="store",type="string",dest="key", help="Gets submission for the story code",default="All") parser.add_option("-m","--market", action="store",type="string",dest="market", help="Gets the stories that have gone to that market",default="All") parser.add_option("-y","--year", action="store",type="int",dest="year", help="Limits results to given year") parser.add_option("-s","--status", action="store",type="string",dest="status", help="Limits results to given status (InMail,Reject,Sale)") parser.add_option("-t","--usereturn", action="store_true",dest="usereturn",default=False, help="Sorts results by return date [false by default]") parser.add_option("-i","--in-order", action="store_false",dest="reverse", default=False, help="Sorts results by oldest first [default]") parser.add_option("-r","--reverse", action="store_true",dest="reverse", help="Reverses results sorting") subfiler = IMS.SubFiler() def SubmissionFilter(argstring=""): (options,args) = parser.parse_args(argstring.split()) sublist = [subfiler.getSubmission(key) for key in subfiler.keys()] if options.key and options.key.lower() != "all": sublist = filter(lambda s:s.storycode.lower()==options.key.lower(),sublist) if options.market and options.market.lower() !="all": thisfilter = lambda s:s.market.lower()==options.market.lower() sublist = filter(thisfilter,sublist) if options.year: thisfilter = lambda s:IMS.StringToDate(s.datesent).year==options.year sublist = filter(thisfilter,sublist) if options.status: thisfilter = lambda s:s.status.lower()==options.status.lower() sublist = filter(thisfilter,sublist) if options.usereturn: #This isn't as easy, since inmail stories don't have a date sortedresults = [] for sub in sublist: if hasattr(sub,'dateback'): sortedresults.append((IMS.StringToDate(sub.dateback),sub)) else: sortedresults.append((IMS.date.today(),sub)) #sortedresults = [(IMS.StringToDate(sub.dateback),sub) for sub in sublist] else: sortedresults = [(IMS.StringToDate(sub.datesent),sub) for sub in sublist] sortedresults.sort() if options.reverse: sortedresults.reverse() sortedresults = [x[1] for x in sortedresults] return [s.code for s in sortedresults] def SubmissionFilterReport(argstring=""): (options,args) = parser.parse_args(argstring.split()) #print options,args sublist = [subfiler.getSubmission(key) for key in SubmissionFilter(argstring)] if options.key.lower() == "all": allstories = True #print "Searching for all submissions..." elif options.key: allstories = False print "Searching for story code",options.key if options.market and options.market.lower() !="all": print "Searching for submissions to %s " % options.market.title() allstories = False if options.year: print "Searching for submissions in year %d..." % options.year allstories = False if options.status: print "Searching for %s stories..." % options.status.title() allstories = False if allstories: print "Searching for all submissions" if sublist: longestname = max([len(sub.story) for sub in sublist]) longestmarket = max([len(sub.market) for sub in sublist]) sortedresults = [(IMS.StringToDate(sub.datesent),sub) for sub in sublist] sortedresults.sort() if options.reverse: sortedresults.reverse() sortedresults = [x[1] for x in sortedresults] for sub in sublist: if hasattr(sub,"note"): tempnote = sub.note else: tempnote = "" if hasattr(sub,"daysout"): daysout = sub.daysout else: daysout = 0 if hasattr(sub,"dateback"):dateback = sub.dateback else: dateback = "none " print sub.code.ljust(13),sub.datesent,sub.story.ljust(longestname),sub.market.ljust(longestmarket),sub.status,dateback,"%3d" % sub.HowLong(),tempnote print len(sublist),"Submissions found" else: print "No submissions found" if __name__=="__main__": from EasyDialogs import AskString args = AskString('Options and Arguments') SubmissionFilterReport(args) print 'done'