Seite 1 von 1

WSGI middleware behält Listeinträge...

Verfasst: Montag 29. Mai 2006, 16:48
von jens
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)

Verfasst: Dienstag 30. Mai 2006, 17:13
von jens
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 ;)