示例#1
0
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()
示例#2
0
    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
示例#3
0
 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))
示例#4
0
 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))
示例#5
0
文件: isi.py 项目: jjwilke/PySkyNet
 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)))
示例#6
0
文件: isi.py 项目: jjwilke/PySkyNet
 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
示例#7
0
文件: isi.py 项目: jjwilke/PySkyNet
 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))
示例#8
0
文件: isi.py 项目: jjwilke/PySkyNet
 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))
示例#9
0
 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
示例#10
0
    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))
示例#11
0
文件: isi.py 项目: jjwilke/PySkyNet
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")
示例#12
0
文件: isi.py 项目: jjwilke/PySkyNet
 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))
示例#13
0
 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
示例#14
0
文件: isi.py 项目: jjwilke/PySkyNet
            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")
示例#15
0
 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
示例#16
0
文件: pybib.py 项目: jjwilke/PySkyNet
                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:
示例#17
0
            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: