Skip to content

Commit be2dc9b

Browse files
committed
fix html templates when we use prefix
1 parent 9fe5f01 commit be2dc9b

File tree

1 file changed

+45
-39
lines changed

1 file changed

+45
-39
lines changed

tifeatures/factory.py

Lines changed: 45 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -56,38 +56,6 @@
5656
)
5757

5858

59-
def create_html_response(
60-
request: Request, data: str, template_name: str
61-
) -> _TemplateResponse:
62-
"""Create Template response."""
63-
urlpath = request.url.path
64-
crumbs = []
65-
baseurl = str(request.base_url).rstrip("/")
66-
crumbpath = str(baseurl)
67-
for crumb in urlpath.split("/"):
68-
crumbpath = crumbpath.rstrip("/")
69-
part = crumb
70-
if part is None or part == "":
71-
part = "Home"
72-
crumbpath += f"/{crumb}"
73-
crumbs.append({"url": crumbpath.rstrip("/"), "part": part.capitalize()})
74-
75-
return templates.TemplateResponse(
76-
f"{template_name}.html",
77-
{
78-
"request": request,
79-
"response": json.loads(data),
80-
"template": {
81-
"api_root": baseurl,
82-
"params": request.query_params,
83-
"title": "",
84-
},
85-
"crumbs": crumbs,
86-
"url": str(request.url),
87-
},
88-
)
89-
90-
9159
def create_csv_rows(data: Iterable[Dict]) -> Generator[str, None, None]:
9260
"""Creates an iterator that returns lines of csv from an iterable of dicts."""
9361

@@ -144,6 +112,44 @@ def url_for(self, request: Request, name: str, **path_params: Any) -> str:
144112

145113
return url_path.make_absolute_url(base_url=base_url)
146114

115+
def _create_html_response(
116+
self,
117+
request: Request,
118+
data: str,
119+
template_name: str,
120+
) -> _TemplateResponse:
121+
"""Create Template response."""
122+
urlpath = request.url.path
123+
crumbs = []
124+
baseurl = str(request.base_url).rstrip("/")
125+
126+
crumbpath = str(baseurl)
127+
for crumb in urlpath.split("/"):
128+
crumbpath = crumbpath.rstrip("/")
129+
part = crumb
130+
if part is None or part == "":
131+
part = "Home"
132+
crumbpath += f"/{crumb}"
133+
crumbs.append({"url": crumbpath.rstrip("/"), "part": part.capitalize()})
134+
135+
if self.router_prefix:
136+
baseurl += self.router_prefix
137+
138+
return templates.TemplateResponse(
139+
f"{template_name}.html",
140+
{
141+
"request": request,
142+
"response": json.loads(data),
143+
"template": {
144+
"api_root": baseurl,
145+
"params": request.query_params,
146+
"title": "",
147+
},
148+
"crumbs": crumbs,
149+
"url": str(request.url),
150+
},
151+
)
152+
147153
def register_landing(self) -> None:
148154
"""Register landing endpoint."""
149155

@@ -242,7 +248,7 @@ def landing(
242248
)
243249

244250
if output_type == MediaType.html:
245-
return create_html_response(
251+
return self._create_html_response(
246252
request,
247253
data.json(exclude_none=True),
248254
template_name="landing",
@@ -291,7 +297,7 @@ def conformance(
291297
)
292298

293299
if output_type == MediaType.html:
294-
return create_html_response(
300+
return self._create_html_response(
295301
request,
296302
data.json(exclude_none=True),
297303
template_name="conformance",
@@ -387,7 +393,7 @@ def collections(
387393
)
388394

389395
if output_type == MediaType.html:
390-
return create_html_response(
396+
return self._create_html_response(
391397
request,
392398
data.json(exclude_none=True),
393399
template_name="collections",
@@ -469,7 +475,7 @@ def collection(
469475
)
470476

471477
if output_type == MediaType.html:
472-
return create_html_response(
478+
return self._create_html_response(
473479
request,
474480
data.json(exclude_none=True),
475481
template_name="collection",
@@ -515,7 +521,7 @@ def queryables(
515521
)
516522

517523
if output_type == MediaType.html:
518-
return create_html_response(
524+
return self._create_html_response(
519525
request,
520526
data.json(exclude_none=True),
521527
template_name="queryables",
@@ -772,7 +778,7 @@ async def items(
772778

773779
# HTML Response
774780
if output_type == MediaType.html:
775-
return create_html_response(
781+
return self._create_html_response(
776782
request,
777783
data.json(exclude_none=True),
778784
template_name="items",
@@ -847,7 +853,7 @@ async def item(
847853

848854
# HTML Response
849855
if output_type == MediaType.html:
850-
return create_html_response(
856+
return self._create_html_response(
851857
request,
852858
data.json(exclude_none=True),
853859
template_name="item",

0 commit comments

Comments
 (0)