|
@@ -6,6 +6,7 @@ from collections import OrderedDict
|
|
|
import sys
|
|
|
import json
|
|
|
import datetime
|
|
|
+import time
|
|
|
|
|
|
from . import utils, db
|
|
|
from .models import ISP, CoveredArea
|
|
@@ -193,7 +194,22 @@ class ISPResource(Resource):
|
|
|
s = ISP.query.filter_by(id=isp_id, is_disabled=False).scalar()
|
|
|
if not s:
|
|
|
raise ObjectNotFound
|
|
|
- return self.isp_to_dict(s)
|
|
|
+ if s.json_url:
|
|
|
+ # compute next update time, based on crawler cron interval.
|
|
|
+ interval = current_app.config['CRAWLER_CRON_INTERVAL']
|
|
|
+ nupdt = time.mktime(s.next_update.timetuple())
|
|
|
+ nupdt = datetime.datetime.fromtimestamp(nupdt - (nupdt % interval) + interval + 60)
|
|
|
+
|
|
|
+ now = datetime.datetime.utcnow()
|
|
|
+ if nupdt > now:
|
|
|
+ max_age = (nupdt - now).seconds
|
|
|
+ else:
|
|
|
+ max_age = current_app.config['CRAWLER_MIN_CACHE_TIME']
|
|
|
+ else:
|
|
|
+ # default max-age for isp using the form
|
|
|
+ max_age = current_app.config['CRAWLER_MIN_CACHE_TIME']
|
|
|
+ headers = {'Cache-Control': 'max-age='+str(max_age)}
|
|
|
+ return self.isp_to_dict(s), 200, headers
|
|
|
else:
|
|
|
s = ISP.query.filter_by(is_disabled=False)
|
|
|
return self.handle_list(s, self.isp_to_dict)
|