Wurstmaschine

Du hast eine Idee für ein Projekt?
Antworten
1-1-1
User
Beiträge: 12
Registriert: Freitag 9. September 2005, 08:42
Wohnort: München

Der Titel erschließt sich erst, wenn ihr das Ergebnis betrachtet. Ich wollte auch nicht die nächste Variante einer Template-Sprache sondern nur Python und HTML mischen.

Vorbedingungen:
  • Muß auf 2.4.x funzen (1)
  • Vorerst keine OO in Quelltext (2)
  • Quelltexte landen mal in Datenbank
  • Kapselung (Import würde auf Anwendungen beschränkt)(3)
Nun ein "Template"

Code: Alles auswählen

titel="Wurstmaschine"; variante="0.1"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" \
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
   <head>
      <title>%s</title>
      <meta name="generator" content="%s %s">
   </head>
club='"<b><u>A</u></b>nonyme <b><u>A</u></b>normale"'
mitglieder =\
   (("Anton","Tirol","Ist in seine Ziege verliebt"),\
    ("Emma","M&uuml;nchen","Pr&uuml;gelt gerne ihren Mann"),\
    ("Guido","Bad Honnef","W&uuml;rde immer noch FDP w&auml;hlen ;-)"))
   <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" alink="#00FF00" vlink="#FF00FF">
      <p>Der erste Versuch mit der <b>%s</b></p>
      <p>\
         Willkommen bei %s\
      </p>
      <ul>
~ % (titel,titel,variante,titel,club)
for x in mitglieder :
         <li>Mitglied: %s aus: %s - %s</li>
   ~ % x
      </ul>
   </body>
</html>
  • Jede HTML-Zeile beginnt mit "<", was nebenbei ordentlicher Stil wäre.
  • Diese können auch (Python-Like) mit "\" verlängert werden.
  • Python und HTML behalten ihre eigene Einrückung.
  • Mit "~" oder anderen beliebigen Zeichen wird die HTML-Ausgabe angeregt.
  • "~" muß syntaktisch richtig eingerückt sein.
  • Parameter werden entspr. PRINT angehängt (RE-Fans aufgepaßt).
Hier das Progrämmchen. Das ist nur ein Beispiel, die Idee ist die Quelltextvermischung!

Code: Alles auswählen

# 11 Leere Liste - Puffer
t=[]; puffer=''

# 12 Zeilen rein - gleich verbinden
f=open('template.html','r')
try:
   for z in f:
      while z.rstrip().endswith('\\') : z=z[:z.rfind('\\')]+f.next().lstrip()
      t.append(z) # schoen Zeile fuer Zeile
finally:
   f.close()
   t.append('') # Notbremse

# 13 Und raus damit
f=open('ergebnis.py','w')
for z in t:
   h=z.lstrip()[:1]
   if   h=='<' : puffer=puffer+z
   else :
      if (z=='' or h=='~') and puffer :
         p=z.find('~')
         while puffer.endswith('\r') or puffer.endswith('\n') : puffer=puffer[:-1]
         z=z[:p]+'print """'+puffer+'"""'+z[p+1:]
         puffer=''
      f.write(z)
f.close()
Und das kommt dann raus, wenn ergebnis.py ausgeführt wurde:
Der erste Versuch mit der Wurstmaschine

Willkommen bei "Anonyme Anormale"
  • Mitglied: Anton aus: Tirol - Ist in seine Ziege verliebt
  • Mitglied: Emma aus: München - Prügelt gerne ihren Mann
  • Mitglied: Guido aus: Bad Honnef - Würde immer noch FDP wählen ;-)
Nur mal zur Diskussion (4)
Ideen zur Template-Gestaltung sind gefragt!

(1) Wegen Webspace bei Kunden und den richtigen Umstieg mache ich eh später auf 3.x
(2) siehe (1) und die Trennung der "Templates" ist noch offen
(3) Alle notwendigen/erlaubten Importe werden von der Umgebung geliefert!
(4) Funzt z.Zt. schon in einem Webshop mit Anbindung mySQL
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

1-1-1 hat geschrieben:Hier das Progrämmchen. Das ist nur ein Beispiel, die Idee ist die Quelltextvermischung!
Mir ist nicht ganz klar, warum du etwas implementieren möchtest von dem man froh ist, dass man es nicht hat.
1-1-1
User
Beiträge: 12
Registriert: Freitag 9. September 2005, 08:42
Wohnort: München

Mir ist nicht ganz klar, warum du etwas implementieren möchtest von dem man froh ist, dass man es nicht hat.
* Damit nich' sowas passiert wie jetzt! Ich kann kein "Quote" in aktuelles PHP-Forum eintragen.
* Damit jeder, der keine Lust auf Installationsorgien hat, mal schnell "Rapid-Styling" bzw. "Prototyping" betreiben darf.
* Damit jeder, der mag, seinen "Indianer" schnell davon überzeugen kann, Python-Scripts so einfach wie PHP auszuführen (mein "Indianer" kann das schon).
* Weil ich einfach keinen Bock habe, mich extra mit einer Template-Sprache zu beschäftigen; ich muß meine Kohle verdienen.
* Damit meine produzierten "Suites" nicht so Sch... ausschauen wie Deine.
* Weil ich viel Zeit im CCC und anderweitig verschwende und nebenbei meine Brötchen verdienen muß, meine "Suites" in ein paar Minuten entstehen.

Wenn Du meine geistigen Ergüsse nicht benötigst, einfach nicht kommentieren; ich will Deine Zeit nicht verschwenden, die Du im Web 2.0 verbringst!

Meine Anfrage war:
Wie kann ich die Integration des "~" besser implementieren. Die ständige Verfolgung der syntaktischen Einrückung war mir zu stressig.
Ggf. hättest Du da einen Vorschlag!

Gute Nacht

Michael
Zuletzt geändert von Leonidas am Donnerstag 25. November 2010, 08:39, insgesamt 1-mal geändert.
Grund: BBCode eingeschaltet, dann geht auch "quote"
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

1-1-1 hat geschrieben:Meine Anfrage war:
Wie kann ich die Integration des "~" besser implementieren. Die ständige Verfolgung der syntaktischen Einrückung war mir zu stressig.
Wenn das deine Frage war, dann hättest du sie stellen sollen. Ich habe da ein "Nur mal zur Diskussion" gelesen.

Aber keine Sorge, ich werde mich da nicht mehr einmischen. Ein Diskussionsstil der Art "Ich bin aber im CCC" und "Du bist ja nur im Web 2.0 unterwegs (und hast deshalb keine Ahnung)" wird definitiv nicht zu produktiven Ergebnissen führen.

BTW, ich bin ebenfalls im CCC und du wirst mich im "Web 2.0" nirgends finden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

1-1-1 hat geschrieben:* Damit nich' sowas passiert wie jetzt! Ich kann kein "Quote" in aktuelles PHP-Forum eintragen.
Uhm, vielleicht mal BBCode einschalten?
1-1-1 hat geschrieben:* Damit jeder, der keine Lust auf Installationsorgien hat, mal schnell "Rapid-Styling" bzw. "Prototyping" betreiben darf.
Also Jinja2 und Co sind bei vielen Distributionen dabei, von Installationsorgien ist wohl kaum zu sprechen, finde ich zumindest.
1-1-1 hat geschrieben:* Damit jeder, der mag, seinen "Indianer" schnell davon überzeugen kann, Python-Scripts so einfach wie PHP auszuführen (mein "Indianer" kann das schon).
Du weißt dass es viele solche Ansätze für Python gab, etwa Spyce, Karrigell oder auch mod_python PSP? Sind letztendlich alle gescheitert. Ich habe selbst so mal angefangen und festgestellt dass mir der PHP-Ansatz gar nicht passt.
1-1-1 hat geschrieben:* Weil ich einfach keinen Bock habe, mich extra mit einer Template-Sprache zu beschäftigen; ich muß meine Kohle verdienen.
Ich verdiene auch Geld. Effizienter sogar, weil ich die Template-Engine nicht erstmal selbst schreiben muss... zudem kann ich die Templates dann an "Designer" weiterreichen die dann ihren Kram damit machen.
1-1-1 hat geschrieben:* Damit meine produzierten "Suites" nicht so Sch... ausschauen wie Deine.
Also persönlicher Angriff... warum so gereizt?
1-1-1 hat geschrieben:* Weil ich viel Zeit im CCC und anderweitig verschwende und nebenbei meine Brötchen verdienen muß, meine "Suites" in ein paar Minuten entstehen.
Ich verschwende auch viel Zeit in Münchner CCC, das heißt ja aber nicht dass ich das Rad neu erfinde.

Wenn Du meine geistigen Ergüsse nicht benötigst, einfach nicht kommentieren; ich will Deine Zeit nicht verschwenden, die Du im Web 2.0 verbringst!
1-1-1 hat geschrieben:Meine Anfrage war:
Wie kann ich die Integration des "~" besser implementieren. Die ständige Verfolgung der syntaktischen Einrückung war mir zu stressig.
Ggf. hättest Du da einen Vorschlag!
Eine Möglichkeit wäre die Einführung von Blockmarkern wie { und }, das hat etwa Spyce gemacht, wenn ich mich richtig erinnere.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
1-1-1
User
Beiträge: 12
Registriert: Freitag 9. September 2005, 08:42
Wohnort: München

Habe Wurstmaschine bereits zu 50% mit web.py "verwurstet"!

Jetzt schauen "Templates" so richtig geil aus; ggf. laufe ich jetzt Gefahr, von Template-Gurus geteert und gefedert zu werden - is' wurscht ;-)
(Python in HTML-Templates bzw HTML im Python-Code und alles ohne "$", sogar PHP und JS lassen sich unterjubeln)

Ergebnis nenne ich dann WebWurst.PY oder so ...

PS: Jetzt muß ich nur noch "~" loswerden; aber bis jetzt bessere Lösung als Leerzeichen zählen, wie im originalen web.py

[edith]
@Leonidas
  • Uhm, vielleicht mal BBCode einschalten? Ging bei mir nicht wg. Scriptschutz (momentan aus), Danke für Deinen Eingriff
  • Jinja2 und Co sind auf einigen Webspaces der Kunden nicht verfügbar
  • Spyce, Karrigell oder auch mod_python PSP Habe ich mir angeschaut, nix für mein Vater seinen Sohn. Ich lasse die Interpreter lieber als Daemon laufen.
  • Template-Engine nicht erstmal selbst schreiben muss Mein Aufwand hat sich schon rentiert (Teile PHP-Webshop und WaWi umgestrickt)
  • warum so gereizt? Wenn ich warum du etwas implementieren möchtest von dem man froh ist, dass man es nicht hat zur Antwort bekomme ... Aus Jux und Tollerei werde ich bestimmt nicht das Rad neu erfinden!
  • Ich verschwende auch viel Zeit in Münchner CCC Mein Hinweis auf CCC u.a. bezog sich auf die Selbstdarstellung von "it's /me"; sehenswert ;-)
  • Einführung von Blockmarkern wie { und } ist mir zu heftig, dann müßte ich noch auf andere Konstrukte Rücksicht nehmen
  • an "Designer" weiterreichen Will ich dann mit IMPORT erschlagen ...
@me
  • Wenn das deine Frage war Werde zukünftig [Frage] ... [/Frage] schreiben.
  • "Nur mal zur Diskussion" Ich pflege Beiträge vollständig zu lesen und weniger zu schreiben. nicht die nächste Variante einer Template-Sprache war doch eindeutig Das ist nur ein Beispiel bezog sich auf den Quelltextausschnitt, nur die nötigsten Zeilen für Funtionstest Ideen zur Template-Gestaltung sind gefragt! weil es bestimmt besser geht und "~" muß syntaktisch richtig eingerückt sein mir einfach nicht gefällt
  • "Ich bin aber im CCC" und "Du bist ja nur im Web 2.0 ... Ergebnis einer zweiminütigen Recherche (das "nur" stammt von Dir)
[/edith]
Zuletzt geändert von 1-1-1 am Donnerstag 25. November 2010, 16:59, insgesamt 1-mal geändert.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

@Leonidas: Was meinst du mit "dabei"?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

jbs: "in den Repos", vermute ich.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

@derdon: Ich erinnere mich da noch an eine Diskussion :D

@1-1-1:
Wie willst du denn noch PHP reinwurschteln?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@jbs: Jo, ich musste auch an `Tkinter` denken. :-D
1-1-1
User
Beiträge: 12
Registriert: Freitag 9. September 2005, 08:42
Wohnort: München

@jbs
Vorab, danke für Ti{p|pp} auf "PEP 8"; ich muß nachsitzen!

Ein "Template" erzeugt eine PY und eine PHP (Webshop braucht noch teilweise die index.php). Die vollständige "Wurstmaschine" ist etwas komplexer.

In einem Fall ergibt "Template" eine PY, die wiederum die Wurstmaschine aufruft und dann bei Bedarf temporär eine PHP erzeugt; ist aber nur für die Übergangszeit erforderlich.

@ALLE
Hat jemand 'ne Idee, wie ich das leidige "~" loswerden kann?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jbs hat geschrieben:@derdon: Ich erinnere mich da noch an eine Diskussion :D
Ok, ich hätte näher spezifizieren sollen: in den Repositories verfügbar. Ansonsten auch trivial über pip und virtualenv beschaffbar, ohne Notwendigkeit Development-Header zu installieren (vielleicht python-dev, Distributionsabhängig).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
1-1-1
User
Beiträge: 12
Registriert: Freitag 9. September 2005, 08:42
Wohnort: München

Obiges Beispiel der Wurstmaschine darf von jedem geschlachtet werden! Also frei.
WebWurst ist fertig und funzt wunderbar mit Durus. Quelltexte, "Templates", Versionsverwaltung, precompilierte Programme und sogar die Anwenderdaten alles drin.
Wegen obigen Erfahrungen (Zeitersparnis) nicht mehr Open Source.

[edith]
Von web.py blieb leider nichts mehr übrig
[/edith]
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi 1-1-1,

auch wenn Du das nicht verstehen und mich gleich so wie /me belegen solltest:
/me hat geschrieben:
1-1-1 hat geschrieben:Hier das Progrämmchen. Das ist nur ein Beispiel, die Idee ist die Quelltextvermischung!
Mir ist nicht ganz klar, warum du etwas implementieren möchtest von dem man froh ist, dass man es nicht hat.
Also ich halte das für eine ganz normale Frage und keinen persönlichen Angriff auf Dich. Es gibt eine ganze Menge Leute, zu denen auch ich gehöre, die den Mix aus fixem HTML und Programmlogik in einer Datei (wie bei PHP) für unübersichtlich und alles andere als wünschenswert halten. Es gibt viele Ansätze, um diese Mischung zu verhindern, von daher kann ich mich der Frage von /me nur anschließen.

Mag sein, dass Dein Beispiel das Ergebnis bringt, das Du Dir erhoffst. Aber als außen stehender wirkt der Mischmasch auf mich einfach nur verwirrend. Ich kann mir kaum vorstellen, dass man solchen Mix-Code effizient an Andere weitergeben kann, folglich steht der Vorteil des "schnellen Geldverdienens" spätestens beim use und re-use (insbesonderer Zweiter und Dritter) in Frage. Das ist nichts persönliches, aber wenn mein Python-Quellcode irgendwann so "zugemüllt" und unübersichtlich aussieht, ist das für mich das Signal, nochmal from scratch zu beginnen und beim nächsten mal auf mehr Struktur und Ordnung zu achten (mein Python Code, bei Dir geht das wohl nicht anders).

Ein Vorschlag zu den Blöcken, auch wenn Du schon fertig bist: ich fand die Lösung von web2py nicht schlecht, wo ein Block durch den Doppelpunkt der einleitenden Anweisung beginnt und durch ein explizites "pass" beendet wird. Dadurch wird die Einrückung auch überflüssig.

Gruß
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Ich glaub der Typ ist ein Troll.
1-1-1
User
Beiträge: 12
Registriert: Freitag 9. September 2005, 08:42
Wohnort: München

@ Michael Schneider
Etwas verspätet: Danke für den Hinweis
> ... "pass"
Manchmal sieht man den Wald ...
Läuft auch schön mit DURUS und (nicht kranklachen) die letzte Version kann auch mit strikter Trennung umgehen. Wahlweise getrennte Dateien oder in einer Datei (mußte irgendwie sein) ;-)
Hat einer von euch Erfahrung mit PyPy? Insbesondere der "Standard Interpreter" (Subset) interessiert mich. Den würde ich gerne "härten" bevor ich Skripte auf Nginx loslasse.

Schönes WE
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ... und Deinen Rechner!
Antworten