WSGI middleware behält Listeinträge...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 29. Mai 2006, 16:48

Ich hab mir eine kleine WSGI middleware geschrieben, die am Ende eines requests in der erzeugen HTML-Seite Styles/JavaScript einfügen soll. Dabei wird einfach ein Tag ersetzt mit Daten aus einer Liste.

Das funktioniert eigentlich auch. Das Problem ist allerdings das die Daten aus der Liste, einmal gesetzt in der Liste bleiben! Ich dachte eigentlich meine Liste ist für jeden Request leer, dem ist aber nicht so...

Irgendwie weiß ich nicht, wo ich die Liste, wie löschen kann...

Hier mal der relevante Code:

Code: Alles auswählen

add_code_tag        = "<PyLucidInternal:addCode/>"



class Replacer(object):
    def __init__(self, app):
        self.app = app

    def addCode(self, line, environ):
        code = environ['PyLucid.addCode']
        if code==[]:
            # Gibt keinen Add-Code
            return ""

        code = "\n".join(code)
        line = line.replace(add_code_tag, code)

        return line


    def __call__(self, environ, start_response):
        result = iter(self.app(environ, start_response))

        for line in result:
            if add_code_tag in line:
                line = self.addCode(line, environ)
            yield line

        if hasattr(result, 'close'):
            result.close()


class AddCode(list):

    def __init__(self, app):
        list.__init__(self)

        self.tag = add_code_tag
        self.app = app

    def __call__(self, environ, start_response):
        #~ self.__list__ = []
        environ['PyLucid.addCode'] = self
        return self.app(environ, start_response)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 30. Mai 2006, 17:13

Ich hab die Lösung für mein Problem... Ich verpasse der AddCode Klasse einfach die Methode reset:

Code: Alles auswählen

    def reset(self):
        self.__list__ = []
reset rufe ich dann in meiner App im __init__ auf und fertig ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten