Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions cbv/templates/cbv/includes/nav.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
{% load sansdb %}
{% sansdb %}
<li li="version-{{ version.version_number }}" class="dropdown">
{% if not other_versions %}
<a href="#">{{ version }}</a>
Expand All @@ -8,35 +10,36 @@
<ul class="dropdown-menu">
{% for v in other_versions %}
<li>
<a href="{{ v.url|default:v.get_absolute_url }}">{{ v }}</a>
<a href="{{ v.url }}">{{ v.name }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% for module in version.module_set.all %}
{% for module in modules %}
{% ifchanged module.source_name %}
<li class="divider-vertical"></li>
<li><a href="#">{{ module.source_name }}</a></li>
{% endifchanged %}
{% if module.klass_set.count == 1 %}
{% with klass=module.klass_set.get %}
<li {% if klass == this_klass %}class=" active"{% endif %}>
<a href="{{ klass.get_absolute_url }}">{{ klass }}</a>
{% if module.classes|length == 1 %}
{% with klass=module.classes.0 %}
<li {% if klass.active %}class=" active"{% endif %}>
<a href="{{ klass.url }}">{{ klass.name }}</a>
</li>
{% endwith %}
{% else %}
<li id="module-{{ module.short_name }}" class="dropdown{% if module == this_module %} active{% endif %}">
<li id="module-{{ module.short_name }}" class="dropdown{% if module.active %} active{% endif %}">
<a href="#module-{{ module.short_name }}" class="dropdown-toggle" data-toggle="dropdown">
{{ module.short_name|title }} <b class="caret"></b>
</a>
<ul class="dropdown-menu">
{% for klass in module.klass_set.all %}
<li {% if klass == this_klass %}class=" active"{% endif %}>
<a href="{{ klass.get_absolute_url }}">{{ klass }}</a>
{% for klass in module.classes %}
<li {% if klass.active %}class=" active"{% endif %}>
<a href="{{ klass.url }}">{{ klass.name }}</a>
</li>
{% endfor %}
</ul>
</li>
{% endif %}
{% endfor %}
{% endsansdb %}
94 changes: 72 additions & 22 deletions cbv/templatetags/cbv_tags.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import attrs
from django import template

from cbv.models import Klass, ProjectVersion
from cbv.models import Klass, Module, ProjectVersion


register = template.Library()
Expand Down Expand Up @@ -28,31 +29,80 @@ def namesake_methods(parent_klass, name):
return result


@attrs.frozen
class OtherVersion:
name: str
url: str


@attrs.frozen
class ModuleData:
@attrs.frozen
class KlassData:
name: str
url: str
active: bool

source_name: str
short_name: str
classes: list[KlassData]
active: bool

@classmethod
def from_module(
cls, module: Module, active_module: Module | None, active_klass: Klass | None
) -> "ModuleData":
return ModuleData(
source_name=module.source_name(),
short_name=module.short_name(),
classes=[
ModuleData.KlassData(
name=klass.name,
url=klass.get_absolute_url(),
active=klass == active_klass,
)
for klass in module.klass_set.all()
],
active=module == active_module,
)


@register.inclusion_tag("cbv/includes/nav.html")
def nav(version, module=None, klass=None):
other_versions = ProjectVersion.objects.filter(project=version.project).exclude(
pk=version.pk
)
context = {
if klass:
other_versions_of_klass = Klass.objects.filter(
name=klass.name,
module__project_version__in=other_versions,
)
other_versions_of_klass_dict = {
x.module.project_version: x for x in other_versions_of_klass
}
version_switcher = []
for other_version in other_versions:
try:
other_klass = other_versions_of_klass_dict[other_version]
except KeyError:
url = other_version.get_absolute_url()
else:
url = other_klass.get_absolute_url()

version_switcher.append(OtherVersion(name=str(other_version), url=url))
else:
version_switcher = [
OtherVersion(name=str(other_version), url=other_version.get_absolute_url())
for other_version in other_versions
]

modules = [
ModuleData.from_module(module=m, active_module=module, active_klass=klass)
for m in version.module_set.prefetch_related("klass_set")
]

return {
"version": version,
"other_versions": version_switcher,
"modules": modules,
}
if module:
context["this_module"] = module
if klass:
context["this_klass"] = klass
other_versions_of_klass = Klass.objects.filter(
name=klass.name,
module__project_version__in=other_versions,
)
other_versions_of_klass_dict = {
x.module.project_version: x for x in other_versions_of_klass
}
for other_version in other_versions:
try:
other_klass = other_versions_of_klass_dict[other_version]
except KeyError:
pass
else:
other_version.url = other_klass.get_absolute_url()
context["other_versions"] = other_versions
return context
18 changes: 9 additions & 9 deletions cbv/tests/test_page_snapshots.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@
RENDERED_VIEWS = [
(
"homepage.html",
205,
190,
reverse("home"),
),
(
"version-detail.html",
204,
189,
reverse("version-detail", kwargs={"package": "django", "version": "4.0"}),
),
(
"module-detail.html",
27,
12,
reverse(
"module-detail",
kwargs={
Expand All @@ -34,7 +34,7 @@
),
(
"klass-detail.html",
51,
36,
reverse(
"klass-detail",
kwargs={
Expand All @@ -47,18 +47,18 @@
),
(
"klass-detail.html",
54,
39,
reverse("klass-detail-shortcut", kwargs={"klass": "FormView"}),
),
# Detail pages with wRonGLY CasEd arGuMEnTs
(
"fuzzy-version-detail.html",
204,
189,
reverse("version-detail", kwargs={"package": "DJANGO", "version": "4.0"}),
),
(
"fuzzy-module-detail.html",
28,
13,
reverse(
"module-detail",
kwargs={
Expand All @@ -70,7 +70,7 @@
),
(
"fuzzy-klass-detail.html",
51,
36,
reverse(
"klass-detail",
kwargs={
Expand All @@ -83,7 +83,7 @@
),
(
"fuzzy-klass-detail.html",
54,
39,
reverse("klass-detail-shortcut", kwargs={"klass": "fORMvIEW"}),
),
]
Expand Down
2 changes: 2 additions & 0 deletions inspector/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
# Third Party Apps
"django_extensions",
"django_pygmy",
"sans_db",
# Django
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
Expand Down
3 changes: 2 additions & 1 deletion requirements.in
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
attrs
attrs>=21.4.0
blessings
coverage[toml]
django~=3.1.14
dj-database-url
django-extensions
django-pygmy
django-sans-db
factory_boy
gunicorn
mypy
Expand Down
4 changes: 3 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#
asgiref==3.4.1
# via django
attrs==21.2.0
attrs==21.4.0
# via
# -r requirements.in
# pytest
Expand Down Expand Up @@ -34,6 +34,8 @@ django-extensions==3.1.3
# via -r requirements.in
django-pygmy==0.1.5
# via -r requirements.in
django-sans-db==1.1.0
# via -r requirements.in
docutils==0.17.1
# via sphinx
factory-boy==3.2.0
Expand Down