Ich habe einen Bug gefunden, weis aber nicht ob er auch an deinem Problem schuld ist. Probier mal bitte die neueste Version:
http://github.com/defnull/bottle/raw/master/bottle.py
(einfach ins Projekt-Verzeichnis kopieren)
Ein neuer bugfix Release kommt auch bald, aber erst nach einigen Tests.
Bottle: Micro Web Framework
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Bottle: Micro Web Framework + Development Blog
Hat leider nix verändert, aber oben gezeigte lambda-funktion tut ja prima, und damit kann ich erstmal leben. =)Defnull hat geschrieben:Ich habe einen Bug gefunden, weis aber nicht ob er auch an deinem Problem schuld ist. Probier mal bitte die neueste Version:
http://github.com/defnull/bottle/raw/master/bottle.py
(einfach ins Projekt-Verzeichnis kopieren)
Ein neuer bugfix Release kommt auch bald, aber erst nach einigen Tests.
Ich glaube, du hast heir einen logischen Fehler bei If-Modified-Since:
wohl eher so:
Und was ich noch empfehlen würde ist, das reloader-Interval auf 1 zu setzen, 2s ist zu viel.
Code: Alles auswählen
if ims is not None and ims <= stats.st_mtime:
Code: Alles auswählen
if ims is not None and ims >= stats.st_mtime:
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
done
Bottle: Micro Web Framework + Development Blog
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Ich brauch nen bisschen Hilfe mit SimpleTemplate...
Ich hab eine Art umgedrehtes %include implementiert. Es gibt folgenden neuen Befehl:
Dieser Befehl ist im Grunde das exakte Gegenteil von %include. Mit %include fügt man den Text eines anderen Templates im eigenen Template ein. Mit %rebase sorgt man dafür, das der eigene Text von einem anderen Template eingefügt wird.
Ein auf diese Weise aufgerufenes Base-Template kann nun an einer beliebigen Stelle %include ohne Parameter auf rufen, um den Text des aufrufenen Templates einzufügen. Zusätzlich bekommt das Base-Template die im %rebase Befehl angegebenen Argumente als Template-Variablen übergeben, genau wie es bei einem %include der Fall wäre.
Der %rebase Befehl kann überall im Template stehen, auch in if-Blöcken. Kommt er mehr als einmal vor, zählt der jeweils letzte Aufruf. Das ganze funktioniert auch rekursiv. Das erste Template, das keinen %rebase Befehl mehr enthält, gibt sein Ergebnis schließlich zurück.
Hier mal ein einfaches Beispiel:
Man kann %rebase mit den Vererbungs-Features von anderen Template-Engines vergleichen (Mako: %inherit). Auch wenn es etwas anders funktioniert, sollte eigentlich das gleiche damit möglich sein. Nun meine Frage: Gibt es etwas, das man mit der Vererbung von Mako/Cheetah machen kann, aber mit mit SimpleTemplate (noch) unmöglich ist? Ist meine Lösung für dieses Problem unvollständig?
Ausprobieren kann man es mit der aktuellen GitHub Version. Es ist aber noch nicht besonders ausgiebig getestet. Wer Bugs findet, bitte melden!
Ich hab eine Art umgedrehtes %include implementiert. Es gibt folgenden neuen Befehl:
Code: Alles auswählen
%rebase base_template arg1=value1, arg2=value2, ...
Ein auf diese Weise aufgerufenes Base-Template kann nun an einer beliebigen Stelle %include ohne Parameter auf rufen, um den Text des aufrufenen Templates einzufügen. Zusätzlich bekommt das Base-Template die im %rebase Befehl angegebenen Argumente als Template-Variablen übergeben, genau wie es bei einem %include der Fall wäre.
Der %rebase Befehl kann überall im Template stehen, auch in if-Blöcken. Kommt er mehr als einmal vor, zählt der jeweils letzte Aufruf. Das ganze funktioniert auch rekursiv. Das erste Template, das keinen %rebase Befehl mehr enthält, gibt sein Ergebnis schließlich zurück.
Hier mal ein einfaches Beispiel:
Code: Alles auswählen
#start.tpl
%rebase htmlbase title="Hello there"
This is some content.
Code: Alles auswählen
#htmlbase.tpl
<html>
<head>
<title>{{title}}</title>
</head>
<body>
%include
</body>
</html>
<html>
Man kann %rebase mit den Vererbungs-Features von anderen Template-Engines vergleichen (Mako: %inherit). Auch wenn es etwas anders funktioniert, sollte eigentlich das gleiche damit möglich sein. Nun meine Frage: Gibt es etwas, das man mit der Vererbung von Mako/Cheetah machen kann, aber mit mit SimpleTemplate (noch) unmöglich ist? Ist meine Lösung für dieses Problem unvollständig?
Ausprobieren kann man es mit der aktuellen GitHub Version. Es ist aber noch nicht besonders ausgiebig getestet. Wer Bugs findet, bitte melden!
Bottle: Micro Web Framework + Development Blog
Hat da gerade jemand automatische Unittests, TDD, BDD und 100% Code Coverage gesagt? :)Defnull hat geschrieben:Ich werde demnächst deutlich mehr testen müssen, bevor ich einen Release raus schicke... Bottle wird inzwischen von zu vielen Leuten benutzt, als das ich mir sowas wie 0.6.2 noch öfters erlauben könnte. Sorry dafür.
Stefan
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Die neuen Features kommen auch erst nach ausgiebigen Tests in ein Release. Die GitHub Version betrachte ich als unstabil.
Momentan verweigert mein Release-Script den Upload nach PyPi, wenn auch nur ein UnitTest schief geht. TDD betreibe ich ebenfalls schon, allerdings nur für neue Features, nicht für Bugfixes, was ich ändern sollte. Im Idealfall müsste ich jeden gefundenen Bug erst durch einen UnitTest ab bilden, bevor ich ihn löse.
BDD ist mir für ein 1-Mann Projekt zu aufwändig. Ich sehe auch den Nutzen für Bottle nicht direkt.
100% Code Coverage habe ich nicht, aber manche Bereiche (Reloader) lassen sich schlecht durch UnitTests ab decken. Und andere Testmechanismen habe ich noch nicht implementiert. Aber das ist ein Gutes Thema: Gibt es gute Testumgebungen für HTTP Anwendungen in Python?
Momentan verweigert mein Release-Script den Upload nach PyPi, wenn auch nur ein UnitTest schief geht. TDD betreibe ich ebenfalls schon, allerdings nur für neue Features, nicht für Bugfixes, was ich ändern sollte. Im Idealfall müsste ich jeden gefundenen Bug erst durch einen UnitTest ab bilden, bevor ich ihn löse.
BDD ist mir für ein 1-Mann Projekt zu aufwändig. Ich sehe auch den Nutzen für Bottle nicht direkt.
100% Code Coverage habe ich nicht, aber manche Bereiche (Reloader) lassen sich schlecht durch UnitTests ab decken. Und andere Testmechanismen habe ich noch nicht implementiert. Aber das ist ein Gutes Thema: Gibt es gute Testumgebungen für HTTP Anwendungen in Python?
Bottle: Micro Web Framework + Development Blog
Kein Konjunktiv :)Defnull hat geschrieben:Im Idealfall müsste ich jeden gefundenen Bug erst durch einen UnitTest ab bilden, bevor ich ihn löse.
Auch bei 1-Mann-Projekten für das m.E. nach zu besserem API-Design. Das Geheimnis ist, vom Anwendungsfall top->down zu kommen und nicht bottom->up aus dem Gefühl "wäre es nicht gut, wenn ... ginge". YAGNI.Defnull hat geschrieben:BDD ist mir für ein 1-Mann Projekt zu aufwändig. Ich sehe auch den Nutzen für Bottle nicht direkt.
Weiß ich leider nicht. Mocken (ohne da gleich eine extra-Bibliothek zu benutzen) wäre mein erster Gedanke.Defnull hat geschrieben:Gibt es gute Testumgebungen für HTTP Anwendungen in Python?
Stefan
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Hab ich nicht verstanden, soll "rebase" eine Art "super" sein?
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Du brauchst dafür doch keine Klasse, schreib dir einfach ein `render_template` und gib das immer in den Views zurück.
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Jup, hatte noch keiner Lust, eine zu schreibenDasIch hat geschrieben:Ich plane für ein Projekt bottle einzusetzen und musste feststellen dass es keine Template Klasse für Jinja gibt. Hat dass einen speziellen Grund oder hatte bisher nur niemand Lust eine zu schreiben?

Bottle: Micro Web Framework + Development Blog
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Dankesma hat geschrieben:Ich habe meinen Patch für Jinja2-Support an das aktuelle Bottle angepasst und auf meinem github-Account hochgeladen.
Stefan


Edit: Hat hervorragend geklappt. Sogar mit UnitTests

Bottle: Micro Web Framework + Development Blog
Ich verstehe diese Fork-Queue nicht. Ich habe gestern bottle geforkt und dennoch bietet er mit zwei Patches von vor 4 Tagen an (von denen "Remove README" nicht funktioniert). Er bietet mir aber auch meine Patches an, die defnull jetzt übernommen hat und sagt - zurecht - die werden nicht passen. Wie soll ich denn jetzt mit meinem Fork up-to-date bleiben?
Ich möchte ja echt git mögen, aber manchmal ist das schon verdammt kompliziert und unübersichtlich.
Ich möchte ja echt git mögen, aber manchmal ist das schon verdammt kompliziert und unübersichtlich.
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Die ForkQueue von GutHub scheint im Hintergrund 'git cherrypick' zu verwenden. Dadurch werden einzelne Patches (statt alle, wie beim merge) übernommen, aber git erzeugt bei cherrypick neue Patches mit neuen commits, was dazu führt das die Patches doppelt angezeigt werden.sma hat geschrieben:Ich verstehe diese Fork-Queue nicht. Ich habe gestern bottle geforkt und dennoch bietet er mit zwei Patches von vor 4 Tagen an (von denen "Remove README" nicht funktioniert). Er bietet mir aber auch meine Patches an, die defnull jetzt übernommen hat und sagt - zurecht - die werden nicht passen. Wie soll ich denn jetzt mit meinem Fork up-to-date bleiben?
Ich möchte ja echt git mögen, aber manchmal ist das schon verdammt kompliziert und unübersichtlich.
Bei einem 'git merge' würden die commits sauber übernommen, aber dafür müsste ich jeden einzelnen Patch von dir übernehmen, was in diesem Fall geklappt hätte, aber nicht immer geht. Die ForkQueue von GitHub ist zwar schön, aber nicht der Weg, den man mit git normalerweise geht. Ich werds in Zukunft nicht mehr benutzen.
Ich kann ja mal ne Mail zitieren, die ich letzten zu dem Thema geschrieben habe. Ein kleines Git HowTo. Vielleicht hilft das. Aber du hast schon recht, git ist in seinen Einzelheiten sehr gewöhnungsbedürftig und nicht immer intuitiv. Dafür ist es eben sehr mächtig im Vergleich zu anderen Systemen.
First, you create a remote (a shortcut) called 'upstream' that points to my GitHub repository. You only need to do this once:
Code: Alles auswählen
git remote add -f upstream git://github.com/defnull/bottle.git
Code: Alles auswählen
git branch newbranch upstream/master
Before I can pull from your new branch, you have to push it to github. If you followed the GitHub hints, 'origin' should be a remote pointing to your own GitHub fork. So lets push newbranch to origin:
Code: Alles auswählen
git checkout newbranch
git push origin newbranch
If upstream changes, you can update your local copy with this command. Git knows that your branch is tracking my master branch, so you don't have do specify it again.
Code: Alles auswählen
git pull
I hadn't tested what I just wrote, but I thing it should work as said. Hope, that helps

In deinem Fall ist es etwas komplizierter. Du hast zwei Patches, die du nicht mehr brauchst, da ich sie übernommen habe (auch wen github sie als unterschiedliche commits erkennt, dank des blöden cherrypick). Du kannst sie mit 'git reset --hard HEAD^^' wirft die letzten zwei commits einfach weg. Dann kannst du ein 'git pull' machen um dich auf den neuesten Stand bringe und mit einem 'git push -f' GitHub zwingen, die Änderungen zu übernehmen. Das '-f' ist nötig, da 'git reset' die History verändert, was eigentlich etwas ist, das man vermeiden sollte. Daher ja auch die vielen unterschiedlichen Branches, die man normalerweise nach Herzenslust weg schmeißen und um modeln kann.
Bottle: Micro Web Framework + Development Blog
Hi, gibt es eigentlich eine Dokumentation für die Standard Templateengine?
was "%include", "%if" und "%for" etc, tun ist ja relativ offensichtlich, aber wie bottle %def interpretiert ist mir noch nicht ganz schlüssig.. ist das sowas wie ein Block, der HTML enthalten kann?
zb, sowas:
Oder tut %def etwas völlig anderes?
Ab welcher Version ist eigentlich jinja2 mit Bottle nativ verwendbar? in der jetzigen Version (0.6.3) scheint keine entsprechende Funktion / klasse zu existieren... =/
EDIT:
Mir ist beim testen auch aufgefallen, dass mit der standard templateengine zeichen wie "%" oder "{{" nicht ausgegeben werden kann.
Escapen (zb durch "\%") funktioniert zwar an sich, allerdings hat man dan eben genau das, nämlich "\%" (mit backslash). =(
was "%include", "%if" und "%for" etc, tun ist ja relativ offensichtlich, aber wie bottle %def interpretiert ist mir noch nicht ganz schlüssig.. ist das sowas wie ein Block, der HTML enthalten kann?
zb, sowas:
Code: Alles auswählen
%def youtube(id):
<object width="425" height="344">
<param name="movie"
value="http://www.youtube.com/v/{{id}}&hl=en&" />
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" />
<embed
src="http://www.youtube.com/v/{{id}}&hl=en&fs=1&"
type="application/x-shockwave-flash"
allowscriptaccess="always"
allowfullscreen="true"
width="425" height="344" />
</object>
%end
Ab welcher Version ist eigentlich jinja2 mit Bottle nativ verwendbar? in der jetzigen Version (0.6.3) scheint keine entsprechende Funktion / klasse zu existieren... =/
EDIT:
Mir ist beim testen auch aufgefallen, dass mit der standard templateengine zeichen wie "%" oder "{{" nicht ausgegeben werden kann.
Escapen (zb durch "\%") funktioniert zwar an sich, allerdings hat man dan eben genau das, nämlich "\%" (mit backslash). =(
``%def`` Ist also wie in Python eine Funktionsdefinition%... starts a line of python code. You don't have to worry about indentions. Bottle handles that for you.
Schon versucht die Zeichen mit {{'%'}} und {{'{'}} auszugeben?
Ah, ja, die gute alte dokumentationice2k3 hat geschrieben:``%def`` Ist also wie in Python eine Funktionsdefinition%... starts a line of python code. You don't have to worry about indentions. Bottle handles that for you.


Noch nicht, aber grad eben schon. Dass ich da nicht eher drauf kam.Schon versucht die Zeichen mit {{'%'}} und {{'{'}} auszugeben?
