Skip to content

Commit bde7a99

Browse files
author
Martin Zihlmann
committed
allow passing in rule explicitly
1 parent 1cc195e commit bde7a99

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

src/apispec_webframeworks/flask.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,21 +120,34 @@ def _rule_for_view(
120120
rule = app.url_map._rules_by_endpoint[endpoint][0]
121121
return rule
122122

123+
@staticmethod
124+
def _view_for_rule(
125+
rule: Rule,
126+
app: Optional[Flask] = None,
127+
) -> Union[Callable[..., Any], "RouteCallable"]:
128+
if app is None:
129+
app = current_app
130+
return app.view_functions[rule.endpoint]
131+
123132
def path_helper(
124133
self,
125134
path: Optional[str] = None,
126135
operations: Optional[dict] = None,
127136
parameters: Optional[List[dict]] = None,
128137
*,
129138
view: Optional[Union[Callable[..., Any], "RouteCallable"]] = None,
139+
rule: Optional[Rule] = None,
130140
app: Optional[Flask] = None,
131141
**kwargs: Any,
132142
) -> Optional[str]:
133143
"""Path helper that allows passing a Flask view function."""
134-
assert view is not None
144+
assert view is not None or rule is not None
135145
assert operations is not None
136146

137-
rule = self._rule_for_view(view, app=app)
147+
if rule is None:
148+
rule = self._rule_for_view(view, app=app)
149+
if view is None:
150+
view = self._view_for_rule(rule, app=app)
138151
view_doc = view.__doc__ or ""
139152
doc_operations = yaml_utils.load_operations_from_docstring(view_doc)
140153
operations.update(doc_operations)

0 commit comments

Comments
 (0)