Comments (6)
yieldroutes()
is only called when you don't specify a route path and bottle has to guess the route based on the callback signature (name, args). The slash behavior has nothing to do with that. It is a default for all route wildcards to not match or consume the slash character. To be precise, the regular expression for a wildcard defaults to [^/]+
.
If the parentheses in your example are meant to be part of the URL, your example should work as expected. If not, it won't work because regular expressions outside of wildcard tokens are escaped. The parentheses are then interpreted as part of the URL. Optional keys are supported using multiple routes or more specific regular expressions. Is your :collection
wildcard limited in some way? If not, how do I know where :collection
ends and :key
starts?
from bottle.
This patch:
diff --git a/bottle.py b/bottle.py
index 4f9bfe6..a5a3397 100755
--- a/bottle.py
+++ b/bottle.py
@@ -232,7 +232,7 @@ class Route(object):
def flat_re(self):
''' Return a regexp pattern with non-grouping parentheses '''
- return re.sub(r'\(\?P<[^>]*>|\((?!\?)', '(?:', self.group_re())
+ return re.sub(r'\(\?P<[^>]*>', '(?:', self.group_re())
def format_str(self):
''' Return a format string with named fields. '''
makes bottle run here with the simple:
>>> path = '/col/:test#[^\(]+#(:name#[^,]+#,:type#[^\)]+#)'
>>> @bottle.route(path)
... def hello(test,name,type):
... return ["/",test,"(",name,",",type,")"]
...
>>> bottle.run()
without failing tests... now, I'm not sure what the regexp this patch kills means, or what it might be useful for... It might just be a problem of the past, or else it might be important in some edge case.
from bottle.
OK, I tested the example with bottle.Route.group_re()
directly (that worked) and not with bottle.Routes().add()
which invokes bottle.Route.flat_re()
and indeed did not work. This is a bug.
The bottle.Route.flat_re()
method should return a regular pattern that equals the one returned by bottle.Route.group_re()
but with all named and numbered groups replaced by non-grouping parenthesis. The pattern used to detect the parenthesis seems to match the [^\(]+
part, which it shouldn't. A negative look-behind should fix this.
from bottle.
Are you sure the alternate part of flat_re is needed? I see anon parts already as non grouping in group_re...
from bottle.
Yes. The route /some/:key#(a|b)#
for example adds a group to the regular pattern that needs to be replaced with (?:a|b)
in flat_re()
.
from bottle.
Strange, somehow my latest comment disappeared. I found a solution for all three cases (parentheses in paths, parentheses in regexp and escaped parentheses in regexp): dd4fc5b
from bottle.
Related Issues (20)
- The Deployment section of the docs HOT 2
- 0.12.24: test_server: 'fetch' method may unintentionally use system proxy HOT 3
- ResourceWarning: Enable tracemalloc to get the object allocation traceback HOT 1
- Save the chat results to the database HOT 3
- pyright gives "Object of type ModuleType is not callable" with OO way for route HOT 4
- UPYTL: pure python templating
- Project page not reachable HOT 1
- Python 2 compatibility with unicode response header keys and wsgiref
- 0.12.25: pytest deprecation warnings HOT 1
- Please backport "Fix #1378: Module loader should move from find_mdoule to find_spec." to 0.12.x
- Update full-stack web framework links
- AttributeError: module 'inspect' has no attribute 'getargspec' HOT 1
- How to fix "Absolute template path names are deprecated."? HOT 3
- Unable to import extensions in Python 3.12 / ModuleNotFoundError HOT 1
- Odd crash during vulnerability scan
- Bottle does not correctly render IPv6 addresses in startup prints
- bottlepy.org is down? HOT 2
- python windows service script fails to run when you import bottle HOT 2
- `_ImportRedirect` is using deprecated `load_module` function
- __import__ HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bottle.