Skip to content

Commit 4c8c4f6

Browse files
authored
Merge pull request #4900 from dojutsu-user/implement-get-objects-or-log
Implement get objects or log
2 parents 4f7e9ff + 1bb1cd5 commit 4c8c4f6

File tree

4 files changed

+64
-5
lines changed

4 files changed

+64
-5
lines changed

readthedocs/builds/managers.py

+17
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
"""Build and Version class model Managers."""
44

5+
import logging
6+
57
from django.db import models
8+
from django.core.exceptions import ObjectDoesNotExist
69

710
from readthedocs.core.utils.extend import (
811
SettingsOverrideObject,
@@ -19,6 +22,8 @@
1922
)
2023
from .querysets import VersionQuerySet
2124

25+
log = logging.getLogger(__name__)
26+
2227

2328
__all__ = ['VersionManager']
2429

@@ -67,6 +72,18 @@ def create_latest(self, **kwargs):
6772
defaults.update(kwargs)
6873
return self.create(**defaults)
6974

75+
def get_object_or_log(self, **kwargs):
76+
"""
77+
Returns Version object or log.
78+
79+
It will return the Version object if found for the given kwargs,
80+
otherwise it will log a warning along with all provided kwargs.
81+
"""
82+
try:
83+
return super().get(**kwargs)
84+
except ObjectDoesNotExist:
85+
log.warning('Version not found for given kwargs. %s' % kwargs)
86+
7087

7188
class VersionManager(SettingsOverrideObject):
7289
_default_class = VersionManagerBase

readthedocs/projects/tasks.py

+15-5
Original file line numberDiff line numberDiff line change
@@ -903,7 +903,9 @@ def sync_files(
903903
synchronization of build artifacts on each application instance.
904904
"""
905905
# Clean up unused artifacts
906-
version = Version.objects.get(pk=version_pk)
906+
version = Version.objects.get_object_or_log(pk=version_pk)
907+
if not version:
908+
return
907909
if not pdf:
908910
remove_dirs([
909911
version.project.get_production_media_path(
@@ -965,7 +967,9 @@ def move_files(
965967
:param epub: Sync ePub files
966968
:type epub: bool
967969
"""
968-
version = Version.objects.get(pk=version_pk)
970+
version = Version.objects.get_object_or_log(pk=version_pk)
971+
if not version:
972+
return
969973
log.debug(
970974
LOG_TEMPLATE.format(
971975
project=version.project.slug,
@@ -1040,7 +1044,9 @@ def update_search(version_pk, commit, delete_non_commit_files=True):
10401044
:param commit: Commit that updated index
10411045
:param delete_non_commit_files: Delete files not in commit from index
10421046
"""
1043-
version = Version.objects.get(pk=version_pk)
1047+
version = Version.objects.get_object_or_log(pk=version_pk)
1048+
if not version:
1049+
return
10441050

10451051
page_list = process_all_json_files(version, build_dir=False)
10461052

@@ -1135,7 +1141,9 @@ def fileify(version_pk, commit):
11351141
11361142
This is so we have an idea of what files we have in the database.
11371143
"""
1138-
version = Version.objects.get(pk=version_pk)
1144+
version = Version.objects.get_object_or_log(pk=version_pk)
1145+
if not version:
1146+
return
11391147
project = version.project
11401148

11411149
if not commit:
@@ -1225,7 +1233,9 @@ def _manage_imported_files(version, path, commit):
12251233

12261234
@app.task(queue='web')
12271235
def send_notifications(version_pk, build_pk):
1228-
version = Version.objects.get(pk=version_pk)
1236+
version = Version.objects.get_object_or_log(pk=version_pk)
1237+
if not version:
1238+
return
12291239
build = Build.objects.get(pk=build_pk)
12301240

12311241
for hook in version.project.webhook_notifications.all():

readthedocs/rtd_tests/tests/test_build_notifications.py

+7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ def setUp(self):
1717
self.project = fixture.get(Project)
1818
self.version = fixture.get(Version, project=self.project)
1919
self.build = fixture.get(Build, version=self.version)
20+
21+
@patch('readthedocs.builds.managers.log')
22+
def test_send_notification_none_if_wrong_version_pk(self, mock_logger):
23+
self.assertFalse(Version.objects.filter(pk=345343).exists())
24+
send_notifications(version_pk=345343, build_pk=None)
25+
mock_logger.warning.assert_called_with("Version not found for given kwargs. {'pk': 345343}")
26+
2027

2128
def test_send_notification_none(self):
2229
send_notifications(self.version.pk, self.build.pk)

readthedocs/rtd_tests/tests/test_celery.py

+25
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from readthedocs.builds.models import Build
1313
from readthedocs.doc_builder.exceptions import VersionLockedError
1414
from readthedocs.projects import tasks
15+
from readthedocs.builds.models import Version
1516
from readthedocs.projects.exceptions import RepositoryError
1617
from readthedocs.projects.models import Project
1718
from readthedocs.rtd_tests.base import RTDTestCase
@@ -250,3 +251,27 @@ def public_task_exception():
250251
'error': 'Something bad happened',
251252
},
252253
)
254+
255+
@patch('readthedocs.builds.managers.log')
256+
def test_sync_files_logging_when_wrong_version_pk(self, mock_logger):
257+
self.assertFalse(Version.objects.filter(pk=345343).exists())
258+
tasks.sync_files(project_pk=None, version_pk=345343)
259+
mock_logger.warning.assert_called_with("Version not found for given kwargs. {'pk': 345343}")
260+
261+
@patch('readthedocs.builds.managers.log')
262+
def test_move_files_logging_when_wrong_version_pk(self, mock_logger):
263+
self.assertFalse(Version.objects.filter(pk=345343).exists())
264+
tasks.move_files(version_pk=345343, hostname=None)
265+
mock_logger.warning.assert_called_with("Version not found for given kwargs. {'pk': 345343}")
266+
267+
@patch('readthedocs.builds.managers.log')
268+
def test_update_search_logging_when_wrong_version_pk(self, mock_logger):
269+
self.assertFalse(Version.objects.filter(pk=345343).exists())
270+
tasks.update_search(version_pk=345343, commit=None)
271+
mock_logger.warning.assert_called_with("Version not found for given kwargs. {'pk': 345343}")
272+
273+
@patch('readthedocs.builds.managers.log')
274+
def test_fileify_logging_when_wrong_version_pk(self, mock_logger):
275+
self.assertFalse(Version.objects.filter(pk=345343).exists())
276+
tasks.fileify(version_pk=345343, commit=None)
277+
mock_logger.warning.assert_called_with("Version not found for given kwargs. {'pk': 345343}")

0 commit comments

Comments
 (0)