So habe gerade einen Reloader für Bottle gebaut. Das war bisher das, was mich am meisten gestört hat beim entwickeln von kleinen Webapps mit Bottle.
http://paste.pocoo.org/show/140881/
verändert habe ich nur die run-function, der Rest ist unverändert (bis auf die zusätzlichen Ergänzungen.
Soweit ich das getestet habe, funktioniert alles einwandfrei.
EDIT: habe noch eine kleine Änderung gemacht,...
Bottle: Micro Web Framework
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Sehr cool! Ich werde mir das morgen mal genauer an sehen und in Bottle fest einbauen, wenn das möglich ist.
Bottle: Micro Web Framework + Development Blog
gleich noch ein kleines Update und Bugfix: http://paste.pocoo.org/show/140959/
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Der auto-uploader code von SchneiderWeisse ist im GitHub repository und funktioniert prima! Er ist noch disabled-by-default, weil er ein paar Seiteneffekte bei vorhandenen Projekten haben könnte (schließlich wird der startup- und module-level-code mehrmals aus geführt) wird aber wohl standard (zumindest im debug-modus) sobald ich ihn ausgiebig testen konnte. Ein nächster Schritt wäre der reload-support für Templates, aber das sollte eh recht einfach sein.
Danke an dieser Stelle an SchneiderWeisse. Auto-Reloading war das meist gefragte Feature seit langem
Dein Code funktioniert sogar unter Windows (wo fort(), kill() u.s.w. nicht existieren) und ich hätte es nicht besser machen können. Wenn du namentlich auf der Bottle Homepage genannt werden willst, kannst du ihn mir ja vielleicht noch verraten 
Danke an dieser Stelle an SchneiderWeisse. Auto-Reloading war das meist gefragte Feature seit langem


Bottle: Micro Web Framework + Development Blog
Hallo, keine Ursache!
Allerdings glaube ich, dass hier ein kleiner Fehler ist:
Es soll ja nicht reloadet werden, wenn die Datei existiert, sondern nur, wenn auch die Datei verändert wurde, oder habe ich da einen Knick in der Optik?
Der Template-Reloader war, bei mir zumindest, nicht notwendig, da die anscheinend jedes mal neu geladen werden...
EDIT: ja, ich hatte wohl einen Knick in der Optik, das war ja ein not exists...
Allerdings glaube ich, dass hier ein kleiner Fehler ist:
Code: Alles auswählen
for file_path, file_mtime in files.iteritems():
if not os.path.exists(file_path):
print "File changed: %s (deleted)" % file_path
print "Restarting..."
sys.exit(3)
if os.stat(file_path).st_mtime > file_mtime:
print "File changed: %s (modified)" % file_path
print "Restarting..."
sys.exit(3)
Code: Alles auswählen
for file_path, file_mtime in files.iteritems():
if not os.path.exists(file_path):
if os.stat(file_path).st_mtime > file_mtime:
print "File changed: %s (modified)" % file_path
print "Restarting..."
sys.exit(3)
EDIT: ja, ich hatte wohl einen Knick in der Optik, das war ja ein not exists...

- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Ich glaube, du hast das "not" vor "os.path.exists" übersehen? Man könnte aber das zweite if zu einem elif machen, damit es verständlicher wird.
Bottle: Micro Web Framework + Development Blog
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Die ganzen Änderungen von heute waren ein neues (feature) Release wert. Bottle trägt nun die Version 0.6.0!!! Wird Zeit für ein easy_install -U bottle
Bei kritischen apps würde ich allerdings noch auf 0.6.1 warten. Ich bin mir noch nicht 100%ig sicher, ob alles so klappt, wie es soll. Die Tests laufen zwar durch, aber gerade das auto-reloading lässt sich nur sehr schwer mit Unit Tests absichern.
Bei kritischen apps würde ich allerdings noch auf 0.6.1 warten. Ich bin mir noch nicht 100%ig sicher, ob alles so klappt, wie es soll. Die Tests laufen zwar durch, aber gerade das auto-reloading lässt sich nur sehr schwer mit Unit Tests absichern.
Zuletzt geändert von Defnull am Freitag 25. September 2009, 09:48, insgesamt 1-mal geändert.
Bottle: Micro Web Framework + Development Blog
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
gibt es eigentlich irgendwo ein Changelog oder sowas wo man sieht, was bei 0.6 neu ist? Habe gerade nichts gefunden...
Gruß, noisefloor
gibt es eigentlich irgendwo ein Changelog oder sowas wo man sieht, was bei 0.6 neu ist? Habe gerade nichts gefunden...
Gruß, noisefloor
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Nicht direkt. Man könnte den Twitter-Feed[1] verfolgen oder sich die changelog[1] des GIT Repositories anschauen.
[1] https://twitter.com/bottlepy
[2] http://github.com/defnull/bottle/commits/master
Ich kanns dir aber auch verraten: Experimental auto-reloading support. Disabled by default. Use run(reloader=True) to activate (and test) this feature.
[1] https://twitter.com/bottlepy
[2] http://github.com/defnull/bottle/commits/master
Ich kanns dir aber auch verraten: Experimental auto-reloading support. Disabled by default. Use run(reloader=True) to activate (and test) this feature.
Bottle: Micro Web Framework + Development Blog
Also, leider habe ich feststellen müssen, dass deine Variante von Bottle mit dem Reloader nicht richtig funktioniert.
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.
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.
Ich fände es auch ganz gut, wenn response eine delete_cookie-Methode hätte...
Code: Alles auswählen
def delete_cookie(key, path='/'):
self.set_cookie(key=key, value=None, expires=0, max_age=0, path=path)
Endlich mal ein nettes kleines Webframework, das auch flott zu erfassen ist und man gleich loslegen kann, nen kleines Progrämmchen zu schreiben.
Etwas mehr Doku fände ich trotzdem klasse!
An fehlender Doku scheitern die meisten kleinen Projekte.
Web.py hat zwar ausreichend Doku, aber das mit Bottle besser gefällt, kann ich schonmal sagen!
Und mal ein Beispiel wie sinnvoll und praktisch Decorators angewendet werden können!
Viel Erfolg noch!
Etwas mehr Doku fände ich trotzdem klasse!
An fehlender Doku scheitern die meisten kleinen Projekte.
Web.py hat zwar ausreichend Doku, aber das mit Bottle besser gefällt, kann ich schonmal sagen!
Und mal ein Beispiel wie sinnvoll und praktisch Decorators angewendet werden können!

Viel Erfolg noch!
Noch ein dringender Feature-Request: eine Art "tidy_up"-Funktion wäre sehr, sehr praktisch,... Das wäre eine Liste an Funktionen, die ausgeführt werden bevor der output an den Server gesendet wird. Sozusagen, um bestimmte Sachen aufzuräumen, als Beispiel könnte man das Schließen einer Datenbank-Session nennen. Es macht wenig Sinn, solche Sachen in jeder view-Funktion extra zu schreiben.
Ob das mit Bottle so funktioniert, weiß ich nicht, aber grundsätzlich sollte es so in der Art funktionieren.
Code: Alles auswählen
class Bottle(object):
...
def __init__(self,....):
self.closing_functions = []
...
def __call__(self,...):
....
for func in self.closing_functions:
func()
return output
Code: Alles auswählen
bottle.add_closing_function(session.close)
Warum benutzt du nicht lieber einen Dekorator? Irgendwelche Funktionen die für jede Route aufgerufen werden finde ich undurchsichtig und unpraktisch. In etwa so:
Stefan
Code: Alles auswählen
connection = threading.local()
def with_connection(f):
def inner(*args, **kwargs):
connnection = setup()
try:
return f(*args, **kwargs)
finally:
cleanup(connection)
return inner
@with_connection
@route(...)
def index(...):
...
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Der Reloader funktioniert bei mir nicht. Er wird zwar gestartet, anscheinend findet er aber keine Dateiänderungen. Ich verwende Fapws.
Ich geh mal debuggen... ;-)
Ich geh mal debuggen... ;-)
Jau gute arbeit.
Wie oben schon erwähnt bissi mehr doku wäre cool gewesen . Ansonsten tops
Wie oben schon erwähnt bissi mehr doku wäre cool gewesen . Ansonsten tops

Mein Frauen Aufreiss Blog ;) http://www.geilezone.com/