Fix bug in auto ingest, immediately retry on failure

This commit is contained in:
Duncan Sommerville 2015-10-19 15:36:34 -04:00
parent c8069aaedd
commit bcbd8a8050
2 changed files with 16 additions and 7 deletions

View File

@ -117,17 +117,21 @@ class Application_Service_PodcastEpisodeService extends Application_Service_Thir
$ref = parent::updateTrackReference($task, $episodeId, $episodes, $status);
if ($status == CELERY_SUCCESS_STATUS) {
foreach($episodes as $episode) {
foreach ($episodes as $episode) {
// Since we process episode downloads as a batch, individual downloads can fail
// even if the task itself succeeds
$dbEpisode = PodcastEpisodesQuery::create()
->findOneByDbId($episode->episodeid);
if ($episode->status) {
$dbEpisode = PodcastEpisodesQuery::create()
->findOneByDbId($episode->episodeid);
$dbEpisode->setDbFileId($episode->fileid)
->save();
} else {
Logging::warn("Celery task $task episode $episode->episodeid unsuccessful with status $episode->status");
$dbEpisode->delete();
}
}
}
// TODO: do we need a broader fail condition here?
return $ref;
}

View File

@ -110,10 +110,10 @@ def podcast_download(episodes, callback_url, api_key):
f = json.loads(re.content) # Read the response from the media API to get the file id
obj['fileid'] = f['id']
obj['status'] = 1
response.append(obj)
except Exception as e:
logger.info('Error during file download: {0}'.format(e.message))
obj['status'] = 0
response.append(obj)
return json.dumps(response)
@ -127,10 +127,15 @@ def get_filename(r):
"""
# Try to get the filename from the content disposition
d = r.headers.get('Content-Disposition')
filename = ''
if d:
_, params = cgi.parse_header(d)
filename = params['filename']
else:
try:
_, params = cgi.parse_header(d)
filename = params['filename']
except Exception as e:
# We end up here if we get a Content-Disposition header with no filename
logger.warn("Couldn't find file name in Content-Disposition header, using url")
if not filename:
# Since we don't necessarily get the filename back in the response headers,
# parse the URL and get the filename and extension
path = urlparse.urlsplit(r.url).path