Skip to content

Commit 1271520

Browse files
committed
Replace some calls to Klass().get_absolute_url()
Part of the process of removing the models is ensuring that we don't rely on any methods that live on them. This change removes most references to `get_absolute_url` on `Klass`, leaving behind those in the templates.
1 parent f65b2c9 commit 1271520

2 files changed

Lines changed: 65 additions & 11 deletions

File tree

cbv/queries.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import attrs
22

33
from cbv import models
4+
from cbv.models import DjangoURLService
45

56

67
@attrs.frozen
@@ -40,13 +41,18 @@ def _to_module_data(
4041
active_module: models.Module | None,
4142
active_klass: models.Klass | None,
4243
) -> "NavData.Module":
44+
url_service = DjangoURLService()
4345
return NavData.Module(
4446
source_name=module.source_name(),
4547
short_name=module.short_name(),
4648
classes=[
4749
NavData.Klass(
4850
name=klass.name,
49-
url=klass.get_absolute_url(),
51+
url=url_service.class_detail(
52+
class_name=klass.name,
53+
module_name=klass.module.name,
54+
version_number=klass.module.project_version.version_number,
55+
),
5056
active=klass == active_klass,
5157
)
5258
for klass in module.klass_set.all()
@@ -60,6 +66,7 @@ def make_version_switcher(
6066
klass: models.Klass | None = None,
6167
) -> VersionSwitcher:
6268
other_versions = models.ProjectVersion.objects.exclude(pk=project_version.pk)
69+
url_service = DjangoURLService()
6370
if klass:
6471
other_versions_of_klass = models.Klass.objects.filter(
6572
name=klass.name,
@@ -75,7 +82,11 @@ def make_version_switcher(
7582
except KeyError:
7683
url = other_version.get_absolute_url()
7784
else:
78-
url = other_klass.get_absolute_url()
85+
url = url_service.class_detail(
86+
class_name=other_klass.name,
87+
module_name=other_klass.module.name,
88+
version_number=other_version.version_number,
89+
)
7990

8091
versions.append(
8192
VersionSwitcher.OtherVersion(

cbv/views.py

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.urls import reverse
66
from django.views.generic import RedirectView, TemplateView, View
77

8-
from cbv.models import Klass, Module, ProjectVersion
8+
from cbv.models import DjangoURLService, Klass, Module, ProjectVersion
99
from cbv.queries import NavBuilder
1010

1111

@@ -46,9 +46,17 @@ def get_context_data(self, **kwargs):
4646
latest_version = Klass.objects.select_related(
4747
"module__project_version"
4848
).get_latest_version(module_name=klass.module.name, class_name=klass.name)
49-
50-
canonical_url_path = latest_version.get_absolute_url()
51-
best_current_path = klass.get_absolute_url()
49+
url_service = DjangoURLService()
50+
canonical_url_path = url_service.class_detail(
51+
class_name=latest_version.name,
52+
module_name=latest_version.module.name,
53+
version_number=latest_version.module.project_version.version_number,
54+
)
55+
best_current_path = url_service.class_detail(
56+
class_name=klass.name,
57+
module_name=klass.module.name,
58+
version_number=klass.module.project_version.version_number,
59+
)
5260
if best_current_path != self.request.path:
5361
push_state_url = best_current_path
5462
else:
@@ -98,7 +106,11 @@ def get_redirect_url(self, **kwargs):
98106
except Klass.DoesNotExist:
99107
raise http.Http404
100108

101-
return klass.get_absolute_url()
109+
return DjangoURLService().class_detail(
110+
class_name=klass.name,
111+
module_name=klass.module.name,
112+
version_number=klass.module.project_version.version_number,
113+
)
102114

103115

104116
@attrs.frozen
@@ -148,7 +160,18 @@ def get_context_data(self, **kwargs):
148160
klasses = Klass.objects.filter(module=module).select_related(
149161
"module__project_version"
150162
)
151-
klass_list = [KlassData(name=k.name, url=k.get_absolute_url()) for k in klasses]
163+
url_service = DjangoURLService()
164+
klass_list = [
165+
KlassData(
166+
name=k.name,
167+
url=url_service.class_detail(
168+
class_name=k.name,
169+
module_name=k.module.name,
170+
version_number=k.module.project_version.version_number,
171+
),
172+
)
173+
for k in klasses
174+
]
152175

153176
latest_version = (
154177
Module.objects.filter(
@@ -197,6 +220,7 @@ def get_context_data(self, **kwargs):
197220
nav_builder = NavBuilder()
198221
version_switcher = nav_builder.make_version_switcher(project_version)
199222
nav = nav_builder.get_nav_data(project_version)
223+
url_service = DjangoURLService()
200224
return {
201225
"nav": nav,
202226
"object_list": [
@@ -207,7 +231,11 @@ def get_context_data(self, **kwargs):
207231
module_long_name=class_.module.long_name,
208232
module_name=class_.module.name,
209233
module_short_name=class_.module.short_name,
210-
url=class_.get_absolute_url(),
234+
url=url_service.class_detail(
235+
class_name=class_.name,
236+
module_name=class_.module.name,
237+
version_number=project_version.version_number,
238+
),
211239
)
212240
for class_ in Klass.objects.filter(
213241
module__project_version=project_version
@@ -226,6 +254,7 @@ def get_context_data(self, **kwargs):
226254
nav_builder = NavBuilder()
227255
version_switcher = nav_builder.make_version_switcher(project_version)
228256
nav = nav_builder.get_nav_data(project_version)
257+
url_service = DjangoURLService()
229258
return {
230259
"nav": nav,
231260
"object_list": [
@@ -236,7 +265,11 @@ def get_context_data(self, **kwargs):
236265
module_long_name=class_.module.long_name,
237266
module_name=class_.module.name,
238267
module_short_name=class_.module.short_name,
239-
url=class_.get_absolute_url(),
268+
url=url_service.class_detail(
269+
class_name=class_.name,
270+
module_name=class_.module.name,
271+
version_number=project_version.version_number,
272+
),
240273
)
241274
for class_ in Klass.objects.filter(
242275
module__project_version=project_version
@@ -259,10 +292,20 @@ def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
259292
"name",
260293
)
261294

295+
url_service = DjangoURLService()
262296
urls = [{"location": reverse("home"), "priority": 1.0}]
263297
for klass in klasses:
264298
priority = 0.9 if klass.module.project_version == latest_version else 0.5
265-
urls.append({"location": klass.get_absolute_url(), "priority": priority})
299+
urls.append(
300+
{
301+
"location": url_service.class_detail(
302+
class_name=klass.name,
303+
module_name=klass.module.name,
304+
version_number=klass.module.project_version.version_number,
305+
),
306+
"priority": priority,
307+
}
308+
)
266309
return {"urlset": urls}
267310

268311

0 commit comments

Comments
 (0)