Cheetah-Compile aus Python heraus

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo zusammen,
ich bin schon seit ner Weile auf der Suche nach einer Möglichkeit Cheetah Templates nicht per Kommandozeile sondern aus Python heraus zu kompilieren.
Damit meine ich ein entsprechendes Pythonmodul zu erstellen, so wie es bei folgendem Befehl der Fall ist:

Code: Alles auswählen

cheetah.py compile -R common.tmpl specific.tmpl
Leider habe ich bisher in der Doku nicht gefunden wie ich das aus einem Pythonskript heraus umsetzen kann.
Würde das zum Beispiel gerne so einsetzen das beim starten eines Servers alle Templates in einem Verzeichnis vorbereitend kompiliert werden.

Hat vielleicht einer von euch eine Idee?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Zap hat geschrieben:Hat vielleicht einer von euch eine Idee?
Du kannst mal in den Code schauen. Am einfachsten ist wenn du ``sys.argv`` modifizierst und dann ``Cheetah.CheetahWrapper().compile()`` aufrufst. Die ganze kranke Logik da zu entwirren wäre mir zu aufwendig.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Danke für den Tipp mit dem Wrapper, der hat mich zumindest auf eine funktionierende Lösung gebracht.
Wenn jemand ne sauberere Lösung weiß, immer her damit ;)

Code: Alles auswählen

In [5]: from Cheetah.CheetahWrapper import CheetahWrapper

In [6]: CheetahWrapper().main(["no_app", "compile", "-R", "common.tmpl", "specific.tmpl"])
Compiling common.tmpl -> common.py
Compiling specific.tmpl -> specific.py
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Zap hat geschrieben:Danke für den Tipp mit dem Wrapper, der hat mich zumindest auf eine funktionierende Lösung gebracht.
Wenn jemand ne sauberere Lösung weiß, immer her damit ;)
So wie der Code ausschaut scheint es in Cheetah selbst keine saubere Lösung zu geben, du müsstest also mehr oder weniger genau das nochmal implementieren, was die da machen um Templates zu kompilieren.

Also Templates zu Bytecode kompilieren kommt mir sowieso wie eine dumme Idee vor, hat ja Kid schon mal bewiesen. Signifikant schneller ist es auch nicht, wie Mako zeigt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mir gehts an der Stelle nicht um die Geschwindigkeit sondern um die Vorlagenvererbung die ohne Module leider nicht möglich ist.
Welche Template-Engine würdest du denn Cheetah vorziehen?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

Ich finde die Lösung geil! :-)

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Zap hat geschrieben:Mir gehts an der Stelle nicht um die Geschwindigkeit sondern um die Vorlagenvererbung die ohne Module leider nicht möglich ist.
Welche Template-Engine würdest du denn Cheetah vorziehen?
Jinja oder Mako. Unterstützen beide Vorlagenvererbung und sind von Leuten geschrieben, bei denen ich vertrauen habe dass es brauchbar implementiert ist. Tendenziell wohl eher zu Jinja, weil Mako mehr dazu verleitet, Logik in die Templates zu verlagern, die da nichts zu suchen hat. Außerdem finde ich die Syntax von Mako nicht so toll, aber gut, die von Cheetah gefällt mir auch nicht sonderlich.

Kannst es dir mal ansehen, wenn dir Cheetah aber gut gefällt dann bleib dabei (oder wenn du schon viele Templates hast und die nicht alle umstellen magst). Ich finde jedenfalls das ``CheetahWrapper`` auf eine seltsame Weise implementiert ist. Kann ja sein, dass der Rest weniger komisch ausschaut, aber... eigentlich mag ich gar nicht reinschauen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten