CC-5856: Analyzer metadata exception

* Fixed parsing of metadata when there's empty lists returned (mutagen's
  API is awful)
* Return HTTP 422 if there's any exception in validating the metadata
This commit is contained in:
Albert Santoni 2014-06-03 12:43:01 -04:00
parent 4548123ad9
commit a969f8fc44
2 changed files with 31 additions and 24 deletions

View file

@ -383,6 +383,7 @@ class Rest_MediaController extends Zend_Rest_Controller
private function validateRequestData($file, &$whiteList) private function validateRequestData($file, &$whiteList)
{ {
try {
// EditAudioMD form is used here for validation // EditAudioMD form is used here for validation
$fileForm = new Application_Form_EditAudioMD(); $fileForm = new Application_Form_EditAudioMD();
$fileForm->startForm($file->getDbId()); $fileForm->startForm($file->getDbId());
@ -408,6 +409,9 @@ class Rest_MediaController extends Zend_Rest_Controller
} }
if (!$fileForm->isValidPartial($whiteList)) { if (!$fileForm->isValidPartial($whiteList)) {
throw Exception("Data validation failed");
}
} catch (Exception $e) {
$errors = $fileForm->getErrors(); $errors = $fileForm->getErrors();
$messages = $fileForm->getMessages(); $messages = $fileForm->getMessages();
Logging::error($messages); Logging::error($messages);

View file

@ -132,7 +132,10 @@ class MetadataAnalyzer(Analyzer):
# Some tags are returned as lists because there could be multiple values. # Some tags are returned as lists because there could be multiple values.
# This is unusual so we're going to always just take the first item in the list. # This is unusual so we're going to always just take the first item in the list.
if isinstance(metadata[airtime_tag], list): if isinstance(metadata[airtime_tag], list):
if metadata[airtime_tag]:
metadata[airtime_tag] = metadata[airtime_tag][0] metadata[airtime_tag] = metadata[airtime_tag][0]
else: # Handle empty lists
metadata[airtime_tag] = ""
except KeyError: except KeyError:
continue continue