Пример #1
0
 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)
Пример #2
0
 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()
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 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()
Пример #6
0
 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()
Пример #7
0
 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')
Пример #8
0
 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
Пример #9
0
 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()
Пример #10
0
 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)
Пример #11
0
 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
Пример #12
0
 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()
Пример #13
0
 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)
Пример #14
0
 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')
Пример #15
0
 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')
Пример #16
0
 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')
Пример #17
0
 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
Пример #18
0
 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
Пример #19
0
 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)
Пример #20
0
 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')
Пример #21
0
 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)
Пример #22
0
 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')