def _parse_query(self, values, suffix): # type: (MultiDict, str) -> Union[TrackLookupQuery, FingerprintLookupQuery] index = int(suffix[1:]) if suffix else None track_gid = values.get('trackid' + suffix) if track_gid: if not is_uuid(track_gid): raise errors.InvalidUUIDError('trackid' + suffix) return TrackLookupQuery(index=index, track_gid=track_gid) else: duration = values.get(self.duration_name + suffix, type=int, default=0) if not duration: raise errors.MissingParameterError(self.duration_name + suffix) fingerprint_string = values.get('fingerprint' + suffix) if not fingerprint_string: raise errors.MissingParameterError('fingerprint' + suffix) fingerprint = decode_fingerprint( fingerprint_string.encode('ascii', 'ignore')) if not fingerprint: logger.info('Got invalid fingerprint %r', fingerprint_string) raise errors.InvalidFingerprintError() return FingerprintLookupQuery(index=index, duration=duration, fingerprint=fingerprint)
def parse(self, values, conn): super(LookupHandlerParams, self).parse(values, conn) self._parse_client(values, conn) self.meta = values.get('meta', type=int) self.duration = values.get('duration', type=int) if not self.duration: raise errors.MissingParameterError('duration') fingerprint_string = values.get('fingerprint') if not fingerprint_string: raise errors.MissingParameterError('fingerprint') self.fingerprint = decode_fingerprint(fingerprint_string) if not self.fingerprint: raise errors.InvalidFingerprintError()
def _parse_duration_and_format(self, p, values, suffix): p['duration'] = values.get('duration' + suffix, type=int) if p['duration'] is None: raise errors.MissingParameterError('duration' + suffix) if p['duration'] <= 0 or p['duration'] > 0x7fff: raise errors.InvalidDurationError('duration' + suffix) p['format'] = values.get('fileformat' + suffix)
def _parse_submission(self, values, suffix): # type: (MultiDict, str) -> None p = {} # type: Dict[str, Any] p['index'] = (suffix or '')[1:] p['puid'] = values.get('puid' + suffix) if p['puid'] and not is_uuid(p['puid']): raise errors.InvalidUUIDError('puid' + suffix) p['foreignid'] = values.get('foreignid' + suffix) if p['foreignid'] and not is_foreignid(p['foreignid']): raise errors.InvalidForeignIDError('foreignid' + suffix) p['mbids'] = values.getlist('mbid' + suffix) if p['mbids'] and not all(map(is_uuid, p['mbids'])): raise errors.InvalidUUIDError('mbid' + suffix) self._parse_duration_and_format(p, values, suffix) fingerprint_string = values.get('fingerprint' + suffix) if not fingerprint_string: raise errors.MissingParameterError('fingerprint' + suffix) p['fingerprint'] = decode_fingerprint( fingerprint_string.encode('ascii', 'ignore')) if not p['fingerprint']: logger.info('Got invalid fingerprint %r', fingerprint_string) raise errors.InvalidFingerprintError() p['bitrate'] = values.get('bitrate' + suffix, type=int) or None if p['bitrate'] is not None and p['bitrate'] <= 0: raise errors.InvalidBitrateError('bitrate' + suffix) p['track'] = values.get('track' + suffix) p['artist'] = values.get('artist' + suffix) p['album'] = values.get('album' + suffix) p['album_artist'] = values.get('albumartist' + suffix) p['track_no'] = values.get('trackno' + suffix, type=int) p['disc_no'] = values.get('discno' + suffix, type=int) p['year'] = values.get('year' + suffix, type=int) self.submissions.append(p)
def _parse_user(self, values, conn): account_apikey = values.get('user') if not account_apikey: raise errors.MissingParameterError('user') self.account_id = lookup_account_id_by_apikey(conn, account_apikey) if not self.account_id: raise errors.InvalidUserAPIKeyError()
def _parse_client(self, values, conn): application_apikey = values.get('client') if not application_apikey: raise errors.MissingParameterError('client') self.application_id = lookup_application_id_by_apikey(conn, application_apikey) if not self.application_id: raise errors.InvalidAPIKeyError()
def parse(self, values, conn): super(TrackListByPUIDHandlerParams, self).parse(values, conn) self.puid = values.get('puid') if not self.puid: raise errors.MissingParameterError('puid') if not is_uuid(self.puid): raise errors.InvalidUUIDError('puid')
def parse(self, values, db): # type: (MultiDict, DatabaseContext) -> None super(LookupHandlerParams, self).parse(values, db) self._parse_client(values, db) self.meta = values.get('meta') if self.meta == '0' or not self.meta: self.meta = [] elif self.meta == '1': self.meta = ['recordingids'] elif self.meta == '2': self.meta = ['m2'] else: self.meta = self.meta.split() self.max_duration_diff = values.get('maxdurationdiff', type=int) if self.max_duration_diff is None: self.max_duration_diff = const.FINGERPRINT_MAX_LENGTH_DIFF elif self.max_duration_diff > const.FINGERPRINT_MAX_ALLOWED_LENGTH_DIFF or self.max_duration_diff < 1: raise errors.InvalidMaxDurationDiffError('maxdurationdiff') self.batch = values.get('batch', type=int) self.fingerprints = [ ] # type: List[Union[TrackLookupQuery, FingerprintLookupQuery]] suffixes = list(iter_args_suffixes(values, 'fingerprint', 'trackid')) if not suffixes: raise errors.MissingParameterError('fingerprint') for i, suffix in enumerate(suffixes): try: self.fingerprints.append(self._parse_query(values, suffix)) except errors.WebServiceError: if not self.fingerprints and i + 1 == len(suffixes): raise
def _parse_user(self, values, db): # type: (MultiDict, DatabaseContext) -> None account_apikey = values.get('user') if not account_apikey: raise errors.MissingParameterError('user') self.account_id = check_user_api_key(self.config, db, account_apikey) if not self.account_id: raise errors.InvalidUserAPIKeyError()
def _parse_query(self, values, suffix): p = {} p['index'] = (suffix or '')[1:] p['track_gid'] = values.get('trackid' + suffix) if p['track_gid'] and not is_uuid(p['track_gid']): raise errors.InvalidUUIDError('trackid' + suffix) if not p['track_gid']: p['duration'] = values.get(self.duration_name + suffix, type=int) if not p['duration']: raise errors.MissingParameterError(self.duration_name + suffix) fingerprint_string = values.get('fingerprint' + suffix) if not fingerprint_string: raise errors.MissingParameterError('fingerprint' + suffix) p['fingerprint'] = decode_fingerprint( fingerprint_string.encode('ascii', 'ignore')) if not p['fingerprint']: raise errors.InvalidFingerprintError() self.fingerprints.append(p)
def parse(self, values, conn): super(UserLookupHandlerParams, self).parse(values, conn) account_apikey = values.get('user') if not account_apikey: raise errors.MissingParameterError('user') self.account_id = lookup_account_id_by_apikey(conn, account_apikey) if not self.account_id: raise errors.InvalidUserAPIKeyError() self.account_apikey = account_apikey
def _parse_user(self, values, db): # type: (MultiDict, DatabaseContext) -> None account_apikey = values.get('user') if not account_apikey: raise errors.MissingParameterError('user') self.account_id = lookup_account_id_by_apikey(db.get_app_db(), account_apikey) if not self.account_id: raise errors.InvalidUserAPIKeyError()
def parse(self, values, conn): super(TrackListByMBIDHandlerParams, self).parse(values, conn) self.disabled = values.get('disabled', type=int) self.batch = values.get('batch', type=int) self.mbids = values.getlist('mbid') if not self.mbids: raise errors.MissingParameterError('mbid') if not all(map(is_uuid, self.mbids)): raise errors.InvalidUUIDError('mbid' + suffix)
def parse(self, values, conn): super(SubmitHandlerParams, self).parse(values, conn) self._parse_client(values, conn) self._parse_user(values, conn) self.submissions = [] for suffix in iter_args_suffixes(values, 'fingerprint'): self._parse_submission(values, suffix) if not self.submissions: raise errors.MissingParameterError('fingerprint')
def _parse_client(self, values, db): application_apikey = values.get('client') if not application_apikey: raise errors.MissingParameterError('client') self.application_id = check_app_api_key(self.config, db, application_apikey) if not self.application_id: logger.warning("Invalid API key %s", application_apikey) raise errors.InvalidAPIKeyError() self.application_version = values.get('clientversion')
def _parse_client(self, values, conn): application_apikey = values.get('client') if not application_apikey: raise errors.MissingParameterError('client') self.application_id = lookup_application_id_by_apikey( conn, application_apikey, only_active=True) if not self.application_id: if check_demo_client_api_key(self.config.website.secret, application_apikey): self.application_id = DEMO_APPLICATION_ID else: logger.error("Invalid API key %s", application_apikey) raise errors.InvalidAPIKeyError() self.application_version = values.get('clientversion')
def parse(self, values, conn): super(SubmitHandlerParams, self).parse(values, conn) self._parse_client(values, conn) self._parse_user(values, conn) self.wait = values.get('wait', type=int, default=0) self.submissions = [] suffixes = list(iter_args_suffixes(values, 'fingerprint')) if not suffixes: raise errors.MissingParameterError('fingerprint') for i, suffix in enumerate(suffixes): try: self._parse_submission(values, suffix) except errors.WebServiceError: if not self.submissions and i + 1 == len(suffixes): raise
def parse(self, values, db): # type: (MultiDict, DatabaseContext) -> None super(SubmitHandlerParams, self).parse(values, db) self._parse_client(values, db) self._parse_user(values, db) self.wait = values.get('wait', type=int, default=0) self.submissions = [] # type: List[Dict[str, Any]] suffixes = list(iter_args_suffixes(values, 'fingerprint')) if not suffixes: raise errors.MissingParameterError('fingerprint') for i, suffix in enumerate(suffixes): try: self._parse_submission(values, suffix) except errors.WebServiceError: if not self.submissions and i + 1 == len(suffixes): raise
def _parse_submission(self, values, suffix): p = {} p['puid'] = values.get('puid' + suffix) if p['puid'] and not is_uuid(p['puid']): raise errors.InvalidUUIDError('puid' + suffix) p['mbids'] = values.getlist('mbid' + suffix) if p['mbids'] and not all(map(is_uuid, p['mbids'])): raise errors.InvalidUUIDError('mbid' + suffix) self._parse_duration_and_format(p, values, suffix) fingerprint_string = values.get('fingerprint' + suffix) if not fingerprint_string: raise errors.MissingParameterError('fingerprint' + suffix) p['fingerprint'] = decode_fingerprint(fingerprint_string) if not p['fingerprint']: raise errors.InvalidFingerprintError() p['bitrate'] = values.get('bitrate' + suffix, type=int) self.submissions.append(p)
def parse(self, values, conn): super(UserCreateMusicBrainzHandlerParams, self).parse(values, conn) self.access_token = values.get('access_token') if not self.access_token: raise errors.MissingParameterError('access_token')
def _parse_duration_and_format(self, p, values, suffix): p['duration'] = values.get('duration' + suffix, type=int) if not p['duration']: raise errors.MissingParameterError('duration' + suffix) p['format'] = values.get('fileformat' + suffix)
def parse(self, values, conn): super(GetFingerprintHandlerParams, self).parse(values, conn) self.fingerprint_id = values.get('id', type=int) if not self.fingerprint_id: raise errors.MissingParameterError('id')