def readOptions(optionList, optionsInput=sys.argv[1:], optionSet=None): options_given = [] try: current_option = None for entry in optionsInput: if entry == "--help": #should be standard for all print optionList.usage() sys.exit() elif entry[0] == "-": #check to see if it is a valid option if not optionList.isOptionValid(entry): raise InvalidOptionError(entry) #if we got here, option is valid current_option = entry.strip("-") #hmm, okay, we'll overwrite what's there if current_option in options_given: optionList[current_option].reset() else: options_given.append(current_option) optionList[current_option].setFound() else: try: optionList[current_option].addValue(entry) except KeyError: raise InvalidOptionError(entry) #at the vary last now, go through all the options given #and if any options required values, but were not given any #throw an exception for option in options_given: if not optionList[option].hasMandatoryValue(): raise InvalidValueError(option, value=None, error="No value given, but option requires value.") for option in optionList: if not option.hasDefault() or option.isFound(options_given): continue options_given.append(option.getName()) option.chooseDefault() for option in optionList: if option.isBound(): option.bindValue(optionSet) #return all the options that were specified opts = OptionValueIterator(options_given, optionList) for opt in opts: #loop through to process anything pass return opts except InvalidOptionError, error: print traceback(error) print error #here, the usage should be printed so the person knows what are valid options print optionList.usage() sys.exit()
def profile(self, num = None): volumes = load(self.pickle_path()) if not volumes: volumes = {} keys = volumes.keys() ; keys.sort() x = None if num: volume = Volume(num) x = num elif keys: num = keys[-1] volume = volumes[num] else: volume = Volume(num) try: while num == x: volumes[num] = volume nfound = self.profile_volume(volume) if not nfound: #no more break save(volumes, pickle) #move to next num += 1 volume = Volume(num) except Exception, error: save(volumes, pickle) sys.stderr.write(traceback(error) + "\n") raise error
def run(self): comm = Communicator(self.port) try: comm.bind() self.response = comm.acceptObject() except SocketOpenError, error: sys.stderr.write("%d\n%s\n%s\n" % (self.port, traceback(error), error))
def close_answer(self, answer): try: comm = Communicator(answer.port) comm.open() comm.sendObject("die!") comm.close() except Exception, error: sys.stderr.write("%d\n%s\n%s\n" % (self.request_port, traceback(error), error))
def process_article(self, link): try: id = re.compile("isickref[=]\d+").search(link).group() self.run("go_to_list_entry", id) article = self.store_article() self.run("go_back") except ISIError, error: sys.stderr.write("ERROR: %s\n%s\n" % (error, traceback(error)))
def run_allrefs(self): try: void = self.run("isi_search", self.search) self.run_getrefs() except Exception, error: self.archive.commit() sys.stderr.write("ERROR: %s\n%s\n" % (traceback(error), error)) raise error
def open_article(self, title): try: linktitle = title.strip()[1:-1] link = "link=*%s*" % linktitle self.lasturl = self.selenium.browserURL self.selenium.click(link) self.selenium.wait_for_page_to_load("30000") except Exception, error: sys.stderr.write("ERROR: Error on title %s:\n%s\n" % (readable(title), readable(self.selenium.get_body_text()))) raise ISIError("%s\nCould not find title" % traceback(error))
def process(self, obj): ret = ISIVoid() #default nothing try: method = getattr(self, obj.method) println("Running %s\n" % obj.method) if obj.args: ret = method(obj.args) else: ret = method() except Exception, error: sys.stderr.write("ERROR: %s\n%s\n" % (traceback(error), error))
def run(self, obj): answer = self.answer_t() comm = Communicator(self.request_port) try: comm.open() answer.start() time.sleep(1) comm.sendObject(obj) except SocketOpenError, error: sys.stderr.write("%d\n%s\n%s\n" % (self.request_port, traceback(error), error)) self.close_answer(answer) return #thread is already dead
def run(self): while 1: ret = "" try: obj = self.server.acceptObject() if isinstance(obj, ServerStop): #end self.stop() return ret = self.process(obj) except SocketDie: return except Exception, error: sys.stderr.write("%s\n%s\n" % (traceback(error), error)) try: if self.answer_port: comm = Communicator(self.answer_port) comm.open() comm.sendObject(ret) comm.close() except SocketOpenError, error: sys.stderr.write("%d\n%s\n%s\n" % (self.answer_port, traceback(error), error))
def get_authors(x, inter_delim = ",", intra_delim = " "): try: #first check to see if we have parentheses regexp = "[\(](.*?)[\)]" matches = re.compile(regexp, re.DOTALL).findall(x) entries = [] if matches: entries = map(lambda y: y.strip().split(","), matches) else: entries = map(lambda y: y.strip().split(intra_delim), x.split(inter_delim)) return process_authors(entries) except ValueError, error: sys.stderr.write("ERROR: %s\n%s not properly split by intra='%s' inter='%s'\n" % (error, x, intra_delim, inter_delim)) sys.stderr.write(traceback(error) + "\n") raise ISIError("Author list not formatted properly")
def run_getrefs(self): try: articles = self.run("get_articles") if not articles: raise ISIError("no articles found") for article in articles: try: self.run("open_article", article.title) article = self.store_article() if not article: continue except ISIError, error: #don't stop because of one error sys.stderr.write("ERROR: %s\nFailed on block:\n%s\n" % (error, error.block)) except Exception, error: sys.stderr.write("Unknown error:\n%s\n%s\n" % (traceback(error), error))
def accept(self): print "accepting on", self.socketPort message = "" try: connection, address = self.socketObj.accept() while True: data = connection.recv(self.ONE_KB) if not data: break message += data connection.send(self.RECEIVED) connection.close() print "received on", self.socketPort return message except Exception, error: #always close the connection sys.stderr.write("%s\n%s\n" % (traceback(error), error)) print "Cleaning up connection" self.close() raise SocketDie
if not articles: raise ISIError("no articles found") for article in articles: try: self.run("open_article", article.title) article = self.store_article() if not article: continue except ISIError, error: #don't stop because of one error sys.stderr.write("ERROR: %s\nFailed on block:\n%s\n" % (error, error.block)) except Exception, error: sys.stderr.write("Unknown error:\n%s\n%s\n" % (traceback(error), error)) self.run("go_back") except Exception, error: self.archive.commit() sys.stderr.write("ERROR: %s\n%s\n" % (traceback(error), error)) raise error def run_allrefs(self): try: void = self.run("isi_search", self.search) self.run_getrefs() except Exception, error: self.archive.commit() sys.stderr.write("ERROR: %s\n%s\n" % (traceback(error), error)) raise error def walk_references(self): import time url_list = URLLister() text = self.run("get_html")
def bind(self): if self.socketPort == 50000: print traceback() #print "binding socket on", self.hostName, self.socketPort self.socketObj.bind(('', self.socketPort)) #'' = local host self.socketObj.listen(self.numRequests) #only listen for one request at a time
raise DuplicateLabelError("duplicate label %s\n%s" % (label,kwargs)) title = kwargs["title"] if not citekey and not label: sys.stderr.write("no citekey or label for %s\n" % kwargs) elif rec.__class__ == JournalArticle and not re.compile("\d+").search(citekey): sys.stderr.write("Journal article cite key %s does not contain numbers\n%s\n" % (kwargs, citekey)) else: #all good self.records[citekey] = rec except RecordTypeError, error: sys.stderr.write("%s\nfor record\n%s\n" % (error, kwargs)) except BibformatUnspecifiedError, error: sys.stderr.write("error building record for\n%s\n" % kwargs) raise error except Exception, error: #sys.stderr.write("%s\n" % error) sys.stderr.write("%s\n" % traceback(error)) raise error #if optional_errors: # raise MissingDataError(str(kwargs), *optional_errors) def addEntry(self, reftype, attr, recnode, kwargs): req = self.getXMLRequest(attr) mapname = topname = req.topname if reftype.mapnames.has_key(topname): mapname = reftype.mapnames[topname] if kwargs.has_key(mapname) and kwargs[mapname]: return #already have this from different field try:
sys.stderr.write("%d\n%s\n%s\n" % (self.request_port, traceback(error), error)) def run(self, obj): answer = self.answer_t() comm = Communicator(self.request_port) try: comm.open() answer.start() time.sleep(1) comm.sendObject(obj) except SocketOpenError, error: sys.stderr.write("%d\n%s\n%s\n" % (self.request_port, traceback(error), error)) self.close_answer(answer) return #thread is already dead except Exception, error: sys.stderr.write("%d\n%s\n%s\n" % (self.request_port, traceback(error), error)) self.close_answer(answer) comm.close() answer.join() return answer.response class ServerAnswer(threading.Thread): def __init__(self, port): threading.Thread.__init__(self) self.response = None self.port = port def run(self): comm = Communicator(self.port) try: