Your ZIM file has expired and needs to be re-created. ZIM file
download links are only valid for 2 weeks. You can re-create your
ZIM file with the button below.
@@ -108,7 +111,8 @@
@@ -364,11 +371,15 @@ export default {
repetitionPeriodInMonths: 1,
numberOfRepetitions: 1,
scheduleEmail: '',
+ forceExpiredDisplay: false,
};
},
created: async function () {
await this.getBuilder();
await this.getStatus();
+ if (this.$route.query.expired) {
+ this.forceExpiredDisplay = true;
+ }
await this.loadUserEmail();
this.ready = true;
},
diff --git a/wp1/web/builders.py b/wp1/web/builders.py
index 249167d70..b00d840e8 100644
--- a/wp1/web/builders.py
+++ b/wp1/web/builders.py
@@ -1,4 +1,5 @@
import logging
+import requests
import flask
@@ -356,6 +357,10 @@ def latest_zim_file_for_builder(builder_id):
if not url:
flask.abort(404)
+ head = requests.head(url)
+ if head.status_code == 404:
+ flask.abort(410)
+
return flask.redirect(url, code=302)
diff --git a/wp1/web/builders_test.py b/wp1/web/builders_test.py
index fb1c426ce..8b628a57a 100644
--- a/wp1/web/builders_test.py
+++ b/wp1/web/builders_test.py
@@ -1287,7 +1287,9 @@ def test_zimfarm_status(self):
"wp1.logic.builder.zimfarm.zim_file_url_for_task_id",
return_value="http://fake-file-host.fake/1234/file.zim",
)
- def test_latest_zim_file_for_builder(self, mock_zimfarm):
+ @patch("wp1.web.builders.requests.head")
+ def test_latest_zim_file_for_builder(self, mock_head, mock_zimfarm):
+ mock_head.return_value.status_code = 200
builder_id = self._insert_builder()
self._insert_selections(builder_id)
self.app = create_app()
@@ -1306,6 +1308,20 @@ def test_latest_zim_file_for_builder_404(self):
rv = client.get("/v1/builders/abcd-1234/zim/latest")
self.assertEqual("404 NOT FOUND", rv.status)
+ @patch(
+ "wp1.logic.builder.zimfarm.zim_file_url_for_task_id",
+ return_value="http://fake-file-host.fake/1234/file.zim",
+ )
+ @patch("wp1.web.builders.requests.head")
+ def test_latest_zim_file_for_builder_410(self, mock_head, mock_zimfarm):
+ mock_head.return_value.status_code = 404
+ builder_id = self._insert_builder()
+ self._insert_selections(builder_id)
+ self.app = create_app()
+ with self.app.test_client() as client:
+ rv = client.get("/v1/builders/%s/zim/latest" % builder_id)
+ self.assertEqual("410 GONE", rv.status)
+
def test_latest_selection_article_count_for_builder(self):
builder_id = self._insert_builder()
self._insert_selections(builder_id)