Skip to content

Commit cf988bb

Browse files
authored
Mask missing library dependency data handling (boostorg#1878)
1 parent 900d3ba commit cf988bb

File tree

6 files changed

+64
-28
lines changed

6 files changed

+64
-28
lines changed

libraries/views.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import datetime
2+
import structlog
23

34
from django.contrib import messages
45
from django.db.models import F, Count, Prefetch
@@ -10,6 +11,7 @@
1011
from django.views.generic import DetailView, ListView
1112

1213
from core.githubhelper import GithubAPIClient
14+
from versions.exceptions import BoostImportedDataException
1315
from versions.models import Version
1416

1517
from .constants import README_MISSING
@@ -30,6 +32,8 @@
3032
)
3133
from .constants import LATEST_RELEASE_URL_PATH_STR
3234

35+
logger = structlog.get_logger()
36+
3337

3438
class LibraryListDispatcher(View):
3539
def dispatch(self, request, *args, **kwargs):
@@ -239,7 +243,12 @@ def get_context_data(self, **kwargs):
239243

240244
# Populate the commit graphs
241245
context["commit_data_by_release"] = self.get_commit_data_by_release()
242-
context["dependency_diff"] = self.get_dependency_diff(library_version)
246+
try:
247+
context["dependency_diff"] = self.get_dependency_diff(library_version)
248+
except BoostImportedDataException:
249+
logger.warning("Library version dependencies not set, need importing.")
250+
context["dependency_diff"] = {}
251+
context["dependencies_not_calculated"] = True
243252

244253
# Populate the library description
245254
client = GithubAPIClient(repo_slug=self.object.github_repo)

templates/libraries/detail.html

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -137,41 +137,45 @@ <h2 class="text-2xl">This Release</h2>
137137
</section>
138138
{% endif %}
139139

140-
{% if dependency_diff.previous_dependencies and dependency_diff.current_dependencies %}
141140
<section class="p-6 pt-1 my-4 bg-white md:rounded-lg md:shadow-lg dark:text-white text-slate dark:bg-charcoal dark:bg-neutral-700">
142141
<h2 class="text-2xl">Dependencies</h2>
143-
<div class="flex gap-x-4 gap-y-2 flex-wrap">
144-
{% for dep in dependency_diff.current_dependencies %}
145-
<div>
146-
{{ dep.name }}
147-
</div>
148-
{% endfor %}
149-
</div>
150-
151-
{% if dependency_diff.added %}
152-
<h4 class="mt-3">Added</h4>
153-
<div class="flex gap-x-4 flex-wrap">
142+
{% if dependency_diff.previous_dependencies and dependency_diff.current_dependencies %}
143+
<div class="flex gap-x-4 gap-y-2 flex-wrap">
154144
{% for dep in dependency_diff.current_dependencies %}
155-
{% if dep.name in dependency_diff.added %}
156-
<div>{{ dep.name }}</div>
157-
{% endif %}
145+
<div>
146+
{{ dep.name }}
147+
</div>
158148
{% endfor %}
159149
</div>
160-
{% endif %}
161150

162-
{% if dependency_diff.removed %}
163-
<h4 class="mt-3">Removed</h4>
164-
<div class="flex gap-x-4 flex-wrap">
165-
{% for dep in dependency_diff.previous_dependencies %}
166-
{% if dep.name in dependency_diff.removed %}
167-
<div>{{ dep.name }}</div>
168-
{% endif %}
169-
{% endfor %}
151+
{% if dependency_diff.added %}
152+
<h4 class="mt-3">Added</h4>
153+
<div class="flex gap-x-4 flex-wrap">
154+
{% for dep in dependency_diff.current_dependencies %}
155+
{% if dep.name in dependency_diff.added %}
156+
<div>{{ dep.name }}</div>
157+
{% endif %}
158+
{% endfor %}
159+
</div>
160+
{% endif %}
161+
162+
{% if dependency_diff.removed %}
163+
<h4 class="mt-3">Removed</h4>
164+
<div class="flex gap-x-4 flex-wrap">
165+
{% for dep in dependency_diff.previous_dependencies %}
166+
{% if dep.name in dependency_diff.removed %}
167+
<div>{{ dep.name }}</div>
168+
{% endif %}
169+
{% endfor %}
170+
</div>
171+
{% endif %}
172+
{% elif dependencies_not_calculated %}
173+
<div class="text-sm">
174+
Library dependencies will be generated soon, please check back later.
170175
</div>
171176
{% endif %}
172177

173178
</section>
174-
{% endif %}
175179

176180
{% if description %}
177181
<section id="libraryReadMe"

templates/versions/detail.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,12 @@
8181
</div>
8282
</div>
8383
</div>
84+
{% elif dependencies_not_calculated %}
85+
<div class="text-base whitespace-normal text-sm">
86+
Library dependency calculations will be generated soon, please check back later.
87+
</div>
88+
{% endif %}
8489
</div>
85-
{% endif %}
8690
{% endif %}
8791

8892
</div>

versions/exceptions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class BoostImportedDataException(Exception):
2+
"""Custom exception for Boost data errors."""
3+
4+
pass

versions/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from django.utils.text import slugify
77

88
from .converters import to_url
9+
from .exceptions import BoostImportedDataException
910
from .managers import VersionManager, VersionFileManager
1011
from .utils.model_validators import validate_version_name_format
1112

@@ -91,6 +92,7 @@ def get_dependency_diffs(self, library=None):
9192
library=library
9293
)
9394
diffs = {}
95+
dependencies_count = 0
9496
if previous_library_versions and current_library_versions:
9597
prev = {x.library.name: x for x in previous_library_versions}
9698
current = {x.library.name: x for x in current_library_versions}
@@ -102,6 +104,7 @@ def get_dependency_diffs(self, library=None):
102104
current_dep_objects = current_lv.dependencies.all()
103105
old_dependencies = {x.name for x in prev_dep_objects}
104106
current_dependencies = {x.name for x in current_dep_objects}
107+
dependencies_count += len(current_dependencies)
105108
diffs[key] = {
106109
"library_id": current_lv.library_id,
107110
"added": list(current_dependencies - old_dependencies),
@@ -117,6 +120,9 @@ def get_dependency_diffs(self, library=None):
117120
key=lambda x: x.name.lower(),
118121
),
119122
}
123+
if dependencies_count == 0:
124+
msg = "No dependencies found for libraries in this version."
125+
raise BoostImportedDataException(msg)
120126
return diffs
121127

122128
@cached_property

versions/views.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import structlog
12
from django.contrib.admin.views.decorators import staff_member_required
23
from django.db.models.query import QuerySet
34
from itertools import groupby
@@ -23,8 +24,11 @@
2324
determine_selected_boost_version,
2425
library_doc_latest_transform,
2526
)
27+
from versions.exceptions import BoostImportedDataException
2628
from versions.models import Review, Version
2729

30+
logger = structlog.get_logger()
31+
2832

2933
@method_decorator(csrf_exempt, name="dispatch")
3034
class VersionDetail(BoostVersionMixin, VersionAlertMixin, DetailView):
@@ -66,7 +70,12 @@ def get_context_data(self, **kwargs):
6670
context["top_contributors_release"] = self.get_top_contributors_release(obj)
6771

6872
context["documentation_url"] = obj.documentation_url
69-
context["deps"] = self.get_library_version_dependencies(obj)
73+
try:
74+
context["deps"] = self.get_library_version_dependencies(obj)
75+
except BoostImportedDataException:
76+
logger.warning("Library version dependencies not set, need importing.")
77+
context["deps"] = None
78+
context["dependencies_not_calculated"] = True
7079
if context["version_str"] == LATEST_RELEASE_URL_PATH_STR:
7180
context["documentation_url"] = library_doc_latest_transform(
7281
obj.documentation_url

0 commit comments

Comments
 (0)