Bottle: Micro Web Framework

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Schreib doch deine Erfahrungen auf. Defnull wird sich bestimmt freuen und die Dokumentation erweitern. Ansonsten finde ich, dass der Quelltext von Bottle noch klein genug ist, dass man dort nachgucken kann, wenn etwas unklar ist. Mehr Tipps und Beispiele wären aber immer gut.

Stefan
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

So, da dass mit bottle und meinem Hoster leider nicht funktioniert, würde ich gerne zu r GoogleAppEngine umsteigen, ich möchte jetzt nur sichgehen dass bottle auf der GoogleAppEngine läuft, bevor ich mich anmelde

ich hoffe ihr könnts mir sagen ;)

mfg
the more they change the more they stay the same
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

[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]
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Defnull, ich wollte ein paar Änderungen pushen in meinem Bottle-Fork, aber das hat nicht geklappt, git mag mich nicht ("remote end hung up").

Hier der Diff, der den Fehler mit den Fehlern unter Fapws repariert.

http://paste.pocoo.org/show/142305/
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Dauerbaustelle hat geschrieben:Defnull, ich wollte ein paar Änderungen pushen in meinem Bottle-Fork, aber das hat nicht geklappt, git mag mich nicht ("remote end hung up").
Hier der Diff, der den Fehler mit den Fehlern unter Fapws repariert.
http://paste.pocoo.org/show/142305/
Github zieht gerade auf einen neuen server um und hat noch ein paar Probleme. Das sollte in ein paar Tagen wieder gehen.

Danke für deinen Diff. Aber eigentlich sollte handler (is app is default_app is Bottle.__call__) IMMER eine Liste oder ein Iterable zurück liefern und niemals Strings (Zeile 274-276). Allerdings habe ich aufgrund deiner Beobachtung einen anderen Bug gefunden: Bei einer Exception wird die Fehler-Seite fälschlicher Weise als String zurück gegeben. Das hab ich korrigiert.

Kann es sein, das dein Fehler nur bei Exceptions auf tritt oder durch eine Middelware verursacht wird? Ansonsten kann ich mir nicht erklären, wie der Handler-Callable einen String zurück geben kann.

Sicherheitshalber baue ich deinen Patch trotzdem ein. Wär aber toll, wenn du das noch mal kontrollieren könntest.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Dav1d hat geschrieben:So, da dass mit bottle und meinem Hoster leider nicht funktioniert, würde ich gerne zu r GoogleAppEngine umsteigen, ich möchte jetzt nur sichgehen dass bottle auf der GoogleAppEngine läuft, bevor ich mich anmelde

ich hoffe ihr könnts mir sagen ;)
Bottle kann AppEngine theoretisch. Ich selbst habe es noch nicht getestet. Allerdings gab es schon zwei Anfragen diesbezüglich und keiner hat sich im Nachhinein beschwert, also gehe ich davon aus, das es wie erwartet funktioniert.
Bottle: Micro Web Framework + Development Blog
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

@Defnull: und was ist mit meinem Bug? Ich weiß nicht, was du verändert hast, aber bei mir unter Mac geht der Reloader in Kombination mit send_file nicht mehr - es stürzt ab.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

danke, hätt ich selber draufkommen können
the more they change the more they stay the same
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

SchneiderWeisse hat geschrieben:@Defnull: und was ist mit meinem Bug? Ich weiß nicht, was du verändert hast, aber bei mir unter Mac geht der Reloader in Kombination mit send_file nicht mehr - es stürzt ab.
-Fehler irgendwie bei "send_file"- ist leider keine sehr präzise Fehlermeldung. Ich habe neben dem Reloader auch einen Patch für If-Modifies-Since Support in send_file ein gebaut. Da der Reloader sonst überhaupt nix mit send_file zu tun hat, denke ich, das der Fehler dort liegt. Allerdings kann ich ihn nicht reproduzieren. Der folgende Code funktioniert wie erwartet, selbst wenn ich ihn mit 400 Anfragen/Sekunde bombardiere.

Code: Alles auswählen

import bottle
@bottle.route('/')
def index():
  bottle.send_file('sendtest.py', './')
bottle.run(reloader=True)
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Auf http://blog.curiasolutions.com/2009/09/ ... -shootout/ findet man eine nette Übersicht über verschiedene Web Development Plattformen inklusive Benchmarks. Bottle ist auch dabei und schneidet ziemlich gut ab :D
As you can see, Bottle is very close to bare WSGI as far as speed goes. On a side note, adding a sample template using Bottle’s default templating package didn’t seem to change these numbers at all.
[...]
What was exciting to me about this test was that I found myself looking at a minimal Python framework equipped with a full templating system and ORM [SQLAlchemy] which all performed faster than the PHP+mysqli() test.
Ich freu mich immer noch wie ein Schneekönig über dieses positive Feedback :) It made my day :D
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
snafu
User
Beiträge: 6831
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich find's ehrlich gesagt beeindruckend, wie schnell dein Projekt bekannt und beliebt geworden ist. Wenn man bedenkt, dass du ursprünglich nur ein bißchen was zum Thema Mikro-Frameworks beitragen wolltest. ;)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Du könntest aber den Code mal aufräumen :P Die run-Funktion ist imho viel zu voll. Und zB. sehen deine Docstrings nicht immer gleich aus, ...
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

Hallo, ich fang grad damit an, webseiten mithilfe von Bottle zu schreiben (und bin begeistert wie schnell und einfach das ist =D), hab nur leider ein kleines Problem: Beim parsen folgendem skriptes erhalte ich einen typeError:

Code: Alles auswählen

import sys
import os
import time
import bottle
from bottle import route, request, template


@route('/')
def index():
    return template('index')


application = bottle.default_app()
Der fehler:

Code: Alles auswählen

Unhandled Exception: TypeError('not all arguments converted during string formatting',) 
Und nochmal dasselbe aus Apache's error.log:

Code: Alles auswählen

[Thu Oct 01 13:48:15 2009] [error] [client 127.0.0.1] Unhandled Exception: TypeError('not all arguments converted during string formatting',)
Ich tipp hier einfach mal auf einen Fehler im skript. =/
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Ja Dauerbaustelle, zu viel Lob ist ungesund, ich weis ;) Ich bin ja schon ruhig

Momentan liegt meine Priorität bei den Reloader- und Mako-Bugs und mehr Test Cases. Bevor die Testabdeckung nicht besser wird, möchte ich auch ungern den Code säubern oder umstrukturieren, weil sich da immer gerne neue Bugs ein schleichen. Mit den Docstrins hast du allerdings recht.

Ich hab mir inzwischen auch einen persönlichen Release Cycle überlegt: Nach der Feature Runde von 0.6 kommt jetzt erst mal eine Bug Smashing Phase. Wenn Bottle 0.6 stabil läuft und genügend Tests da sind, wird fleißig auf geräumt und eventuell neue Features vorbereitet, die dann ins nächste Release kommen (0.7). Gleichzeitig kommt ein Update der Dokumentation. So zwinge ich mich selbst, neue Features erst ein zu bauen, wenn die Alten funktionieren und ausreichend getestet und dokumentiert sind.

Wer übrigens Code bei steuern will, hilft mir am meisten mit GitHub Forks, da ich diese sehr einfach einpflegen und beobachten kann. Patches per Mail sind aber auch OK. Bitte versteht aber, wenn ich neue Features erst einmal hinten an stelle, solange noch Bugs zu zermatschen sind. Test Cases für eure Patches sind übrigens sehr gerne gesehen ;)
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Jup, da war noch ein Bug in template(), der eine veraltete SimpleTemplate API verwendet hat. Ich sag ja, Bottle hat zu wenig UnitTests >.<

Mach in 10 Minuten mal ein "easy_install -U bottle"
Bottle: Micro Web Framework + Development Blog
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

Defnull hat geschrieben:Jup, da war noch ein Bug in template(), der eine veraltete SimpleTemplate API verwendet hat. Ich sag ja, Bottle hat zu wenig UnitTests >.<

Mach in 10 Minuten mal ein "easy_install -U bottle"
Update durchgeführt, aber leider derselbe fehler =/

OT: ich find in der gesamten Doku keine möglichkeit eigene HTTP-Header abzusenden, sprich, sowas wie "Location: http://foo.bar/baz.html?p=moo" - Ist das einfach nur gut versteckt, oder gibts das (noch) garnicht? ^^
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Ich hätte Lust, nur: Was gibts zu tun? Für Testschreiben reicht meine Kenntnis nicht.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

stuhlbein hat geschrieben:Update durchgeführt, aber leider derselbe fehler =/
Versuch mal bitte bottle.debug(True) um komplette Stack Traces zu bekommen. Das grenzt den Fehler besser ein. Kann es sein, das in deinem Template ein Fehler ist? Kannst du mit dein Template mal schicken?
stuhlbein hat geschrieben:Ich find in der gesamten Doku keine möglichkeit eigene HTTP-Header abzusenden, sprich, sowas wie "Location: http://foo.bar/baz.html?p=moo" - Ist das einfach nur gut versteckt, oder gibts das (noch) garnicht? ^^
Stimmt, das ist noch undokumentiert. Aber es geht:

Code: Alles auswählen

  bottle.response.header['Location'] = "http://foo.bar/"
  bottle.response.status = 307
  # oder besser:
  bottle.redirect("http://foo.bar/")
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Dauerbaustelle hat geschrieben:Ich hätte Lust, nur: Was gibts zu tun? Für Testschreiben reicht meine Kenntnis nicht.
Du könntest dich zum Beispiel an den docstrings vergreifen ;) Oder was zur Dokumentation (http://github.com/defnull/bottle-homepage) bei tragen. Oder einfach Fehler suchen. Ich selbst verwende nur ein sehr spezielles Layout von Bottle, wenn ich produktiv etwas damit mache (Bottle+SimpleTemplate+Fabws3). Den Cheetah Support habe ich zum Beispiel komplett blind geschrieben und noch kein einziges mal getestet, da ich Cheetah eben nicht so toll finde und in keinem Projekt nutze.

Jede Form von Feedback hilft :wink:
Bottle: Micro Web Framework + Development Blog
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Mehr als Wiederholen kann ich mich nicht:
Bei mir zumindest stürzt Python ab (verwende einen Mac). Entsprechend des Fehlerberichts von Mac OS X und eigenen Tests liegt der Fehler irgendwie bei "send_file". Mein eigener Reloader - den ich hier gepostet habe - funktioniert hingegen perfekt.
und mehr ist dazu auch nicht zu sagen, weil nicht mehr passiert. Irgendwo muss da ein Bug mit send_file sein, der vllt. gar nicht mit dem Reloader zusammenhängt, sondern mit deinem neuen Feature zusammenhängt, das du da eingebaut hast. Ich würde dir gerne eine Fehlermeldung liefern, aber Python stürzt lediglich ab.

Werde mich aber heute Nachmittag direkt mit dem Problem auseinandersetzen und versuchen es zu beheben.
Antworten