def getUserRating(self, entityUri): """Return the rating a user has applied to an entity. The given parameter has to be a fully qualified MusicBrainz ID, as returned by other library functions. Note that this method only works if a valid user name and password have been set. Only the rating the authenticated user applied to the entity will be returned. If username and/or password are incorrect, an AuthenticationError is raised. This method will return a L{Rating <musicbrainz2.model.Rating>} object. @param entityUri: a string containing an absolute MB ID @raise ValueError: invalid entityUri @raise ConnectionError: couldn't connect to server @raise RequestError: invalid ID or entity @raise AuthenticationError: invalid user name and/or password """ entity = mbutils.extractEntityType(entityUri) uuid = mbutils.extractUuid(entityUri, entity) params = { 'entity': entity, 'id': uuid } stream = self._ws.get('rating', '', filter=params) try: parser = MbXmlParser() result = parser.parse(stream) except ParseError, e: raise ResponseError(str(e), e)
def submitUserTags(self, entityUri, tags): """Submit folksonomy tags for an entity. Note that all previously existing tags from the authenticated user are replaced with the ones given to this method. Other users' tags are not affected. @param entityUri: a string containing an absolute MB ID @param tags: A list of either L{Tag <musicbrainz2.model.Tag>} objects or strings @raise ValueError: invalid entityUri @raise ConnectionError: couldn't connect to server @raise RequestError: invalid ID, entity or tags @raise AuthenticationError: invalid user name and/or password """ entity = mbutils.extractEntityType(entityUri) uuid = mbutils.extractUuid(entityUri, entity) params = ( ('type', 'xml'), ('entity', entity), ('id', uuid), ('tags', ','.join([unicode(tag).encode('utf-8') for tag in tags])) ) encodedStr = urllib.urlencode(params) self._ws.post('tag', '', encodedStr)
def submitUserRating(self, entityUri, rating): """Submit rating for an entity. Note that all previously existing rating from the authenticated user are replaced with the one given to this method. Other users' ratings are not affected. @param entityUri: a string containing an absolute MB ID @param rating: A L{Rating <musicbrainz2.model.Rating>} object or integer @raise ValueError: invalid entityUri @raise ConnectionError: couldn't connect to server @raise RequestError: invalid ID, entity or tags @raise AuthenticationError: invalid user name and/or password """ entity = mbutils.extractEntityType(entityUri) uuid = mbutils.extractUuid(entityUri, entity) params = ( ('type', 'xml'), ('entity', entity), ('id', uuid), ('rating', unicode(rating).encode('utf-8')) ) encodedStr = urllib.urlencode(params) self._ws.post('rating', '', encodedStr)
def testExtractEntityType(self): prefix = 'http://musicbrainz.org' uuid = 'c0b2500e-0cef-4130-869d-732b23ed9df5' mbid1 = prefix + '/artist/' + uuid self.assertEquals(u.extractEntityType(mbid1), 'artist') mbid2 = prefix + '/release/' + uuid self.assertEquals(u.extractEntityType(mbid2), 'release') mbid3 = prefix + '/track/' + uuid self.assertEquals(u.extractEntityType(mbid3), 'track') mbid4 = prefix + '/label/' + uuid self.assertEquals(u.extractEntityType(mbid4), 'label') mbid5 = prefix + '/invalid/' + uuid self.assertRaises(ValueError, u.extractEntityType, mbid5) self.assertRaises(ValueError, u.extractEntityType, None) self.assertRaises(ValueError, u.extractEntityType, uuid) invalidUri = 'http://example.invalid/foo' self.assertRaises(ValueError, u.extractEntityType, invalidUri)