Beispiel #1
0
 def getentry(self):
     entry = gopherentry.GopherEntry(self.getselector(), self.config)
     entry.settype('0')
     entry.setname(os.path.basename(self.getselector()))
     entry.setmimetype('text/plain')
     entry.setgopherpsupport(0)
     return entry
Beispiel #2
0
 def getentry(self):
     if not self.entry:
         self.entry = gopherentry.GopherEntry(self.selector, self.config)
         self.entry.populatefromfs(self.getselector(),
                                   self.statresult,
                                   vfs=self.vfs)
     return self.entry
Beispiel #3
0
 def getentry(self):
     if not self.entry:
         self.entry = gopherentry.GopherEntry(self.selector, self.config)
         self.entry.name = self.selector
         self.entry.mimetype = "text/html"
         self.entry.type = "h"
     return self.entry
Beispiel #4
0
 def getentry(self):
     if not self.entry:
         self.entry = gopherentry.GopherEntry(self.selector, self.config)
         if (self.statresult and S_ISREG(self.statresult[ST_MODE]) and \
             self.getselector().endswith(".gophermap")):
             self.entry.populatefromvfs(self.vfs, self.getselector())
         else:
             self.entry.populatefromfs(self.getselector(), self.statresult, vfs = self.vfs)
         
     return self.entry
Beispiel #5
0
 def getentry(self):
     ## Return my own entry.
     if not self.entry:
         self.entry = gopherentry.GopherEntry(self.getselector(),
                                              self.config)
         self.entry.settype('1')
         self.entry.setname(os.path.basename(self.getselector()))
         self.entry.setmimetype('application/gopher-menu')
         self.entry.setgopherpsupport(0)
     return self.entry
Beispiel #6
0
    def prepare(self):
        self.selectorbase = self.selector
        if self.selectorbase == "/":
            self.selectorbase = ""  # Avoid dup slashes

        if (self.getselector().endswith(".gophermap") and self.statresult
                and stat.S_ISREG(self.statresult[stat.ST_MODE])):
            selector = self.getselector()
        else:
            selector = self.selectorbase + "/gophermap"

        self.entries = []

        selectorbase = self.selectorbase

        with self.vfs.open(selector, "rb") as rfile:
            while True:
                line = rfile.readline().decode(errors="surrogateescape")
                if not line:
                    break
                if re.search("\t", line):  # gophermap link
                    args = [arg.strip() for arg in line.split("\t")]

                    if len(args) < 2 or not len(args[1]):
                        args[1] = args[0][
                            1:]  # Copy display string to selector

                    selector = args[1]
                    if selector[0] != "/" and selector[
                            0:4] != "URL:":  # Relative link
                        selector = selectorbase + "/" + selector

                    entry = gopherentry.GopherEntry(selector, self.config)
                    entry.type = args[0][0]
                    entry.name = args[0][1:]

                    if len(args) >= 3 and len(args[2]):
                        entry.host = args[2]

                    if len(args) >= 4 and len(args[3]):
                        entry.port = int(args[3])

                    if entry.gethost() is None and entry.getport() is None:
                        # If we're using links on THIS server, try to fill
                        # it in for gopher+.
                        if self.vfs.exists(selector):
                            entry.populatefromvfs(self.vfs, selector)
                    self.entries.append(entry)
                else:  # Info line
                    line = line.strip()
                    self.entries.append(
                        gopherentry.getinfoentry(line, self.config))
Beispiel #7
0
    def prepare(self):
        self.selectorbase = self.selector
        if self.selectorbase == '/':
            self.selectorbase = ''  # Avoid dup slashes

        if self.getselector().endswith(".gophermap") and \
           self.statresult and S_ISREG(self.statresult[ST_MODE]):
            self.rfile = self.vfs.open(self.getselector(), 'rb')
        else:
            self.rfile = self.vfs.open(self.selectorbase + '/gophermap', 'rb')

        self.entries = []

        selectorbase = self.selectorbase

        while 1:
            line = self.rfile.readline()
            if not line:
                break
            if re.search("\t", line):  # gophermap link
                args = [arg.strip() for arg in line.split("\t")]

                if len(args) < 2 or not len(args[1]):
                    args[1] = args[0][1:]  # Copy display string to selector

                selector = args[1]
                if selector[0] != '/' and selector[
                        0:4] != "URL:":  # Relative link
                    selector = selectorbase + '/' + selector

                entry = gopherentry.GopherEntry(selector, self.config)
                entry.type = args[0][0]
                entry.name = args[0][1:]

                if len(args) >= 3 and len(args[2]):
                    entry.host = args[2]

                if len(args) >= 4 and len(args[3]):
                    entry.port = int(args[3])

                if entry.gethost() == None and entry.getport() == None:
                    # If we're using links on THIS server, try to fill
                    # it in for gopher+.
                    if self.vfs.exists(selector):
                        entry.populatefromvfs(self.vfs, selector)
                self.entries.append(entry)
            else:  # Info line
                line = line.strip()
                self.entries.append(gopherentry.getinfoentry(
                    line, self.config))
Beispiel #8
0
    def getentry(self):
        if not self.entry:
            self.entry = gopherentry.GopherEntry(self.selector, self.config)
            self.entry.populatefromfs(self.getselector(),
                                      self.statresult,
                                      vfs=self.vfs)
            assert self.entry.getencoding() == "tal.TALFileHandler"
            # Remove the TAL encoding and revert to default.
            self.entry.mimetype = self.entry.getencodedmimetype()
            self.entry.encodedmimetype = None
            self.entry.realencoding = self.entry.encoding
            self.entry.encoding = None
            self.entry.type = self.entry.guesstype()

        return self.entry
Beispiel #9
0
    def getentry(self, message=None):
        """Set the message if called from, eg, the dir handler.  Saves
        having to rescan the file.  If not set, will figure it out."""
        if not message:
            message = self.getmessage()

        if not self.entry:
            self.entry = gopherentry.GopherEntry(self.selector, self.config)
            self.entry.settype('0')
            self.entry.setmimetype('text/plain')
            self.entry.setgopherpsupport(0)

            subject = message.getheader('Subject', '<no subject>')
            # Sanitize, esp. for continuations.
            subject = re.sub('\s+', ' ', subject)
            if subject:
                self.entry.setname(subject)
            else:
                self.entry.setname('<no subject>')
        return self.entry
Beispiel #10
0
    def getentry(self, message=None):
        """Set the message if called from, eg, the dir handler.  Saves
        having to rescan the file.  If not set, will figure it out."""
        if not message:
            message = self.getmessage()

        if not self.entry:
            self.entry = gopherentry.GopherEntry(self.selector, self.config)
            self.entry.settype("0")
            self.entry.setmimetype("text/plain")
            self.entry.setgopherpsupport(0)

            subject = message.get("Subject", "<no subject>")
            if isinstance(subject, Header):
                subject = str(subject)

            # Sanitize, esp. for continuations.
            subject = re.sub(r"\s+", " ", subject)
            if subject:
                self.entry.setname(subject)
            else:
                self.entry.setname("<no subject>")
        return self.entry
Beispiel #11
0
 def getentry(self):
     """Returns an entry object for this request."""
     if not self.entry:
         self.entry = gopherentry.GopherEntry(self.selector, self.config)
     return self.entry