Eine Exception, die Routen überspringt, steht schon seit 0.4.8 auf meiner ToDo Liste >.< Schande über mich! Damit wär das gewünschte Verhalten problemlos in validate() erreichbar...
Würde es Sinn machen, das validate alternativ als route()-Parameter zu lösen?
Mit dem subclassen von Bottle würde ich noch etwas warten, daran bastel ich gerade recht aktiv rum. Die API wird sich also noch ändern.
Momentan gibt bottle.default_app() ein Singleton der Bottle() Klasse zurück. Das halbe Framework arbeitet damit. Wenn du Bottle subclassen willst, kannst du daher die Modul-Level-Dekoratoren nicht mehr verwenden. Die sehen nämlich so aus:
Code: Alles auswählen
def route(url, **kargs):
return default_app().route(url, **kargs)
Macht aber nix, @yoursubclassobject.route('...') würde nämlich funktionieren.
Auch run() arbeitet mit default_app(), es sei denn du übergipst deine Applikation als 'app' Parameter. Mal ein Beispiel:
Code: Alles auswählen
import bottle
class MyBottle(bottle.Bottle):
...
myapp = MyBottle()
@myapp.route('/hello'):
def handler():
return 'Hello MyWorld!'
bottle.run(app=myapp)
Ich frag mich allerdings, wozu du Bottle subclassen willst? Middleware wäre einfacher mit folgendem Code:
Code: Alles auswählen
import bottle
... normaler bottle krams...
bottle.run(app=MiddleWare(app=bottle.default_app()))
Dafür überleg ich mir aber eh noch was besseres

Support für Middleware war der Hauptgrund für die ganze Umstrukturiererei im letzten Update.