Esempio n. 1
0
    def test_by_uri_with_multiple_repeated_tracks(self):
        """
        Test deduping my id returns two distinct tracks when one duplicate is provided
        """
        mock_track_one = create_dataclass_mock(SimplifiedTrack)
        mock_track_one.uri = Uri('spotify:track:1')

        mock_track_two = create_dataclass_mock(SimplifiedTrack)
        mock_track_two.uri = Uri('spotify:track:2')

        mock_track_three = create_dataclass_mock(SimplifiedTrack)
        mock_track_three.uri = Uri('spotify:track:1')

        mock_track_four = create_dataclass_mock(SimplifiedTrack)
        mock_track_four.uri = Uri('spotify:track:2')

        for track in [
                mock_track_one, mock_track_two, mock_track_three,
                mock_track_four
        ]:
            self.assertTrue(hasattr(track, 'uri'))
            self.assertIsInstance(track.uri, Uri)

        returned_tracks = deduplicate_by_id([
            mock_track_one, mock_track_two, mock_track_three, mock_track_four
        ],
                                            include_malformed=False)

        self.assertTrue(len(returned_tracks) == 2)
        self.assertEqual(mock_track_one, returned_tracks[0])
        self.assertEqual(mock_track_two, returned_tracks[1])
Esempio n. 2
0
    def __post_init__(self):

        if isinstance(self.uri, str):
            self.uri = Uri(self.uri)

        if self.uri:
            if self.uri.object_type != Uri.ObjectType.episode:
                raise TypeError('provided uri not for an episode')

        if isinstance(self.resume_point, ResumePoint):
            self.resume_point = init_with_key_filter(ResumePoint,
                                                     self.resume_point)

        if all((isinstance(i, dict) for i in self.images)):
            self.images = [init_with_key_filter(Image, i) for i in self.images]

        if isinstance(self.release_date, str):
            if self.release_date_precision == 'year':
                self.release_date = datetime.strptime(self.release_date, '%Y')
            elif self.release_date_precision == 'month':
                self.release_date = datetime.strptime(self.release_date,
                                                      '%Y-%m')
            elif self.release_date_precision == 'day':
                self.release_date = datetime.strptime(self.release_date,
                                                      '%Y-%m-%d')
Esempio n. 3
0
    def __post_init__(self):
        if isinstance(self.uri, str):
            self.uri = Uri(self.uri)

        if self.uri:
            if self.uri.object_type not in [Uri.ObjectType.artist, Uri.ObjectType.show]:
                raise TypeError('provided uri not for an artist')
Esempio n. 4
0
def get_uri(uri_in):

    if isinstance(uri_in, str):
        return Uri(input_string=uri_in)

    if isinstance(uri_in, Uri):
        return uri_in

    raise TypeError(f'invalid uri type provided - {type(uri_in)}')
Esempio n. 5
0
    def __post_init__(self):
        if isinstance(self.uri, str):
            self.uri = Uri(self.uri)

        if self.uri:
            if self.uri.object_type != Uri.ObjectType.user:
                raise TypeError('provided uri not for a user')

        if all((isinstance(i, dict) for i in self.images)):
            self.images = [init_with_key_filter(Image, i) for i in self.images]
Esempio n. 6
0
 def __post_init__(self):
     if isinstance(self.uri, str):
         self.uri = Uri(self.uri)
     if self.uri:
         if self.uri.object_type not in [
                 Uri.ObjectType.album, Uri.ObjectType.artist,
                 Uri.ObjectType.playlist
         ]:
             raise TypeError(
                 'context uri must be one of album, artist, playlist')
Esempio n. 7
0
    def test_by_uri_with_two_different_tracks(self):
        """
        Test deduping my id returns two distinct tracks
        """
        mock_track_one = create_dataclass_mock(SimplifiedTrack)
        mock_track_one.uri = Uri('spotify:track:1')

        mock_track_two = create_dataclass_mock(SimplifiedTrack)
        mock_track_two.uri = Uri('spotify:track:2')

        self.assertTrue(hasattr(mock_track_one, 'uri'))
        self.assertTrue(hasattr(mock_track_two, 'uri'))
        self.assertIsInstance(mock_track_one.uri, Uri)
        self.assertIsInstance(mock_track_two.uri, Uri)

        returned_tracks = deduplicate_by_id([mock_track_one, mock_track_two],
                                            include_malformed=False)

        self.assertTrue(len(returned_tracks) == 2)
        self.assertEqual(mock_track_one, returned_tracks[0])
        self.assertEqual(mock_track_two, returned_tracks[1])
Esempio n. 8
0
    def __post_init__(self):

        if isinstance(self.album_type, str):
            self.album_type = SimplifiedAlbum.Type[
                self.album_type.strip().lower()]

        if isinstance(self.uri, str):
            self.uri = Uri(self.uri)

        if self.uri:
            if self.uri.object_type not in [
                    Uri.ObjectType.album, Uri.ObjectType.show
            ]:
                raise TypeError('provided uri not for an album')

        if all((isinstance(i, dict) for i in self.artists)):
            self.artists = [
                init_with_key_filter(
                    spotframework.model.artist.SimplifiedArtist, i)
                for i in self.artists
            ]

        if all((isinstance(i, dict) for i in self.images)):
            self.images = [
                init_with_key_filter(spotframework.model.service.Image, i)
                for i in self.images
            ]

        if isinstance(self.release_date, str):
            try:
                if self.release_date_precision == 'year':
                    self.release_date = datetime.strptime(
                        self.release_date, '%Y')
                elif self.release_date_precision == 'month':
                    self.release_date = datetime.strptime(
                        self.release_date, '%Y-%m')
                elif self.release_date_precision == 'day':
                    self.release_date = datetime.strptime(
                        self.release_date, '%Y-%m-%d')
                else:
                    logger.error(
                        f'invalid release date type {self.release_date_precision} - {self.release_date}'
                    )
            except ValueError:
                self.release_date = datetime(year=1900, month=1, day=1)
                logger.error(
                    f'failed to parse release date for album {self.uri} {self.name} {self.artists_names} {self.release_date_precision} - {self.release_date}'
                )

        elif self.release_date is None and self.release_date_precision is None:  # for podcasts
            self.release_date = datetime(year=1900, month=1, day=1)
Esempio n. 9
0
    def test_by_uri_with_one_track(self):
        """
        Test deduping my id returns one track when provided one track
        """
        mock_track = create_dataclass_mock(SimplifiedTrack)
        mock_track.uri = Uri('spotify:track:1')

        self.assertTrue(hasattr(mock_track, 'uri'))
        self.assertIsInstance(mock_track.uri, Uri)

        returned_tracks = deduplicate_by_id([mock_track],
                                            include_malformed=False)

        self.assertTrue(len(returned_tracks) == 1)
        self.assertEqual(mock_track, returned_tracks[0])
Esempio n. 10
0
    def __post_init__(self):
        if isinstance(self.tracks, dict):
            self.tracks = []

        if isinstance(self.uri, str):
            self.uri = Uri(self.uri)

        if self.uri:
            if self.uri.object_type != Uri.ObjectType.playlist:
                raise TypeError('provided uri not for a playlist')

        if all((isinstance(i, dict) for i in self.images)):
            self.images = [init_with_key_filter(Image, i) for i in self.images]

        if isinstance(self.owner, dict):
            self.owner = init_with_key_filter(PublicUser, self.owner)
Esempio n. 11
0
    def __post_init__(self):
        if isinstance(self.uri, str):
            self.uri = Uri(self.uri)

        if self.uri:
            if self.uri.object_type not in [
                    Uri.ObjectType.track, Uri.ObjectType.episode
            ]:
                raise TypeError('provided uri not for a track')

        if all((isinstance(i, dict) for i in self.artists)):
            self.artists = [
                init_with_key_filter(
                    spotframework.model.artist.SimplifiedArtist, i)
                for i in self.artists
            ]
Esempio n. 12
0
def validate_uri_string(uri_string: str):
    try:
        uri = Uri(uri_string)
        return uri
    except ValueError:
        return False
Esempio n. 13
0
 def test_6_components_is_local_uri(self):
     with self.assertRaises(ValueError):
         # all uris start with spotify
         # spotify:local:{artist}:{album_title}:{track_title}:{duration_in_seconds}
         Uri("spotify:_ocal:{artist}:{album_title}:{track_title}:{duration_in_seconds}")
Esempio n. 14
0
 def test_too_many_components(self):
     with self.assertRaises(ValueError):
         # all uris start with spotifys
         Uri("spotify:test:test:test:test:test:test")
Esempio n. 15
0
    def test_equals(self):
        uri_one = Uri("spotify:track:test")
        uri_two = Uri("spotify:track:test")

        self.assertEqual(uri_one, uri_two)
Esempio n. 16
0
 def test_start_spotify(self):
     with self.assertRaises(ValueError):
         # all uris start with spotify
         # spotify:track:3EHhS6B2qJWup1nqUVQy1H
         Uri("_potify:track:3EHhS6B2qJWup1nqUVQy1H")
Esempio n. 17
0
 def test_input_not_string(self):
     with self.assertRaises(AttributeError):
         Uri(7)
Esempio n. 18
0
    def test_repr(self):
        uri = Uri("spotify:track:test")

        self.assertEqual(repr(uri), "URI: track / test")
Esempio n. 19
0
    def test_str(self):
        uri = Uri("spotify:track:test")

        self.assertEqual(str(uri), "spotify:track:test")
Esempio n. 20
0
    def test_equal_object_id(self):
        uri_one = Uri("spotify:track:test")
        uri_two = Uri("spotify:track:tester")

        self.assertNotEqual(uri_one, uri_two)
Esempio n. 21
0
    def test_equal_different_type(self):
        uri_one = Uri("spotify:track:test")
        uri_two = 7

        self.assertNotEqual(uri_one, uri_two)