Skip to content

Commit

Permalink
Prevent method and url as lookups in HTTP method helpers (#183)
Browse files Browse the repository at this point in the history
* Prevent method and url as lookups in HTTP method helpers

* Split only once

Co-authored-by: Petter Friberg <petter@5monkeys.se>

* Use elif

Co-authored-by: Petter Friberg <petter@5monkeys.se>

Co-authored-by: Petter Friberg <petter@5monkeys.se>
  • Loading branch information
lundberg and flaeppe committed Nov 11, 2021
1 parent 97eb9ae commit 586c91f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
22 changes: 15 additions & 7 deletions respx/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,14 @@ def request(
name: Optional[str] = None,
**lookups: Any,
) -> Route:
if lookups:
# Validate that lookups doesn't contain method or url
pattern_keys = {p.split("__", 1)[0] for p in lookups.keys()}
if "method" in pattern_keys:
raise TypeError("Got multiple values for pattern 'method'")
elif url and "url" in pattern_keys:
raise TypeError("Got multiple values for pattern 'url'")

return self.route(method=method, url=url, name=name, **lookups)

def get(
Expand All @@ -163,7 +171,7 @@ def get(
name: Optional[str] = None,
**lookups: Any,
) -> Route:
return self.route(method="GET", url=url, name=name, **lookups)
return self.request(method="GET", url=url, name=name, **lookups)

def post(
self,
Expand All @@ -172,7 +180,7 @@ def post(
name: Optional[str] = None,
**lookups: Any,
) -> Route:
return self.route(method="POST", url=url, name=name, **lookups)
return self.request(method="POST", url=url, name=name, **lookups)

def put(
self,
Expand All @@ -181,7 +189,7 @@ def put(
name: Optional[str] = None,
**lookups: Any,
) -> Route:
return self.route(method="PUT", url=url, name=name, **lookups)
return self.request(method="PUT", url=url, name=name, **lookups)

def patch(
self,
Expand All @@ -190,7 +198,7 @@ def patch(
name: Optional[str] = None,
**lookups: Any,
) -> Route:
return self.route(method="PATCH", url=url, name=name, **lookups)
return self.request(method="PATCH", url=url, name=name, **lookups)

def delete(
self,
Expand All @@ -199,7 +207,7 @@ def delete(
name: Optional[str] = None,
**lookups: Any,
) -> Route:
return self.route(method="DELETE", url=url, name=name, **lookups)
return self.request(method="DELETE", url=url, name=name, **lookups)

def head(
self,
Expand All @@ -208,7 +216,7 @@ def head(
name: Optional[str] = None,
**lookups: Any,
) -> Route:
return self.route(method="HEAD", url=url, name=name, **lookups)
return self.request(method="HEAD", url=url, name=name, **lookups)

def options(
self,
Expand All @@ -217,7 +225,7 @@ def options(
name: Optional[str] = None,
**lookups: Any,
) -> Route:
return self.route(method="OPTIONS", url=url, name=name, **lookups)
return self.request(method="OPTIONS", url=url, name=name, **lookups)

def record(
self,
Expand Down
8 changes: 8 additions & 0 deletions tests/test_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,14 @@ def test_rollback():
assert route.return_value is None


def test_multiple_pattern_values_type_error():
router = Router()
with pytest.raises(TypeError, match="Got multiple values for pattern 'method'"):
router.post(method__in=("PUT", "PATCH"))
with pytest.raises(TypeError, match="Got multiple values for pattern 'url'"):
router.get("https://foo.bar", url__regex=r"https://example.org$")


def test_routelist__add():
routes = RouteList()

Expand Down

0 comments on commit 586c91f

Please sign in to comment.