From 00b2ebad3fc303b77d88322d03defeda478ffe68 Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Tue, 21 Nov 2017 14:45:57 -0500 Subject: [PATCH 1/5] Update Build state at the end of UpdateDocsTask.run Use the `update_build` method that handles most of the cases but fill the `failure` with a unhandled exception in case it was risen. --- readthedocs/projects/tasks.py | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/readthedocs/projects/tasks.py b/readthedocs/projects/tasks.py index 68042afb331..422bd87fb83 100644 --- a/readthedocs/projects/tasks.py +++ b/readthedocs/projects/tasks.py @@ -116,6 +116,8 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, This is fully wrapped in exception handling to account for a number of failure cases. """ + unhandled_failure = False + try: self.project = self.get_project(pk) self.version = self.get_version(self.project, version_pk) @@ -128,30 +130,21 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, setup_successful = self.run_setup(record=record) if setup_successful: self.run_build(record=record, docker=docker) - failure = self.setup_env.failure or self.build_env.failure except Exception as e: # noqa log.exception( 'An unhandled exception was raised outside the build environment', extra={'tags': {'build': build_pk}} ) - failure = _('Unknown error encountered. ' + unhandled_failure = _('Unknown error encountered. ' 'Please include the build id ({build_id}) in any bug reports.'.format( build_id=build_pk )) + finally: + if unhandled_failure: + self.build_env.build['failure'] = unhandled_failure + self.build_env.update_build(BUILD_STATE_FINISHED) - # **Always** report build status. - # This can still fail if the API Is totally down, but should catch more failures - result = {} - build_updates = {'state': BUILD_STATE_FINISHED} - build_data = {} - if hasattr(self, 'build'): - build_data.update(self.build) - if failure: - build_updates['success'] = False - build_updates['error'] = failure - build_data.update(build_updates) - result = api_v2.build(build_pk).patch(build_updates) - return result + return self.get_build(build_pk) def run_setup(self, record=True): """Run setup in the local environment. From eea0a86b40b56ec47e80c52b2bbc3a0e8465b8ec Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Tue, 21 Nov 2017 16:31:57 -0500 Subject: [PATCH 2/5] Fix lint style --- readthedocs/projects/tasks.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/readthedocs/projects/tasks.py b/readthedocs/projects/tasks.py index 422bd87fb83..ebd30c27338 100644 --- a/readthedocs/projects/tasks.py +++ b/readthedocs/projects/tasks.py @@ -135,10 +135,11 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, 'An unhandled exception was raised outside the build environment', extra={'tags': {'build': build_pk}} ) - unhandled_failure = _('Unknown error encountered. ' - 'Please include the build id ({build_id}) in any bug reports.'.format( - build_id=build_pk - )) + unhandled_failure = _( + 'Unknown error encountered. ' + 'Please include the build id ({build_id}) in any bug reports.'.format( + build_id=build_pk + )) finally: if unhandled_failure: self.build_env.build['failure'] = unhandled_failure From aa97ed53af58e29951cef94ff49d6e6e003e8e20 Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Wed, 22 Nov 2017 19:02:43 -0500 Subject: [PATCH 3/5] Fix attribute name --- readthedocs/projects/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/projects/tasks.py b/readthedocs/projects/tasks.py index ebd30c27338..0f7fb9e4681 100644 --- a/readthedocs/projects/tasks.py +++ b/readthedocs/projects/tasks.py @@ -142,7 +142,7 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, )) finally: if unhandled_failure: - self.build_env.build['failure'] = unhandled_failure + self.build_env.build['error'] = unhandled_failure self.build_env.update_build(BUILD_STATE_FINISHED) return self.get_build(build_pk) From f78f601a15cbda2e56f5a61aa8686f1921e9e7b6 Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Wed, 22 Nov 2017 19:05:07 -0500 Subject: [PATCH 4/5] Return the object we already have in memory instead of doing API call --- readthedocs/projects/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/projects/tasks.py b/readthedocs/projects/tasks.py index 0f7fb9e4681..63d536fa922 100644 --- a/readthedocs/projects/tasks.py +++ b/readthedocs/projects/tasks.py @@ -145,7 +145,7 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, self.build_env.build['error'] = unhandled_failure self.build_env.update_build(BUILD_STATE_FINISHED) - return self.get_build(build_pk) + return self.build_env.build def run_setup(self, record=True): """Run setup in the local environment. From 76fa94efb232db57e69865dee1261d54a7910eb3 Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Wed, 22 Nov 2017 19:06:28 -0500 Subject: [PATCH 5/5] Use a str variable --- readthedocs/projects/tasks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/readthedocs/projects/tasks.py b/readthedocs/projects/tasks.py index 63d536fa922..dba37e3da45 100644 --- a/readthedocs/projects/tasks.py +++ b/readthedocs/projects/tasks.py @@ -116,8 +116,7 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, This is fully wrapped in exception handling to account for a number of failure cases. """ - unhandled_failure = False - + unhandled_failure = '' try: self.project = self.get_project(pk) self.version = self.get_version(self.project, version_pk)