示例#1
0
    def test__aoty__get_reviews__WillReturnListOfReviews__WhenAOTYRespondsWithPublicationScreenHTML(
            self, mock_requests):

        response = MagicMock()
        response.text = get_reviews_html()
        mock_requests.get.return_value = response
        expected_reviews = [
            PublicationReview(
                artist='Ghost',
                release_name='Prequelle',
                score=80,
                link='https://www.youtube.com/watch?v=-L2Xv5-EmUo',
                publication_name='57-the-needle-drop',
                date=None),
            PublicationReview(
                artist='Sleep',
                release_name='The Sciences',
                score=80,
                link='https://www.youtube.com/watch?v=d5jWckdWqpM',
                publication_name='57-the-needle-drop',
                date=None)
        ]

        actual_reviews = aoty.get_reviews('57-the-needle-drop')

        self.assertEqual(actual_reviews, expected_reviews)
示例#2
0
def get_publication_reviews() -> List[PublicationReview]:
    return [
        PublicationReview(
            artist='Yob',
            date='Posted Jun 20, 2018',
            publication_name='The Quietus',
            release_name='Our Raw Heart',
            score=80,
            link=
            'http://thequietus.com/articles/24811-yob-our-raw-heart-album-review'
        ),
        PublicationReview(artist='Sleep',
                          publication_name='57-the-needle-drop',
                          release_name='The Sciences',
                          score=80,
                          link='https://www.youtube.com/watch?v=d5jWckdWqpM')
    ]
示例#3
0
def extract_data(review_html, publication_name) -> PublicationReview:

    release_name = review_html.find('div', attrs={'class': 'albumTitle'}).text
    score = int(review_html.find('div', attrs={'class': 'rating'}).text)
    link = review_html.find('div', attrs={'class': 'ratingText'}).a['href']
    artist = review_html.find('div', attrs={'class': 'artistTitle'}).text

    return PublicationReview(
        artist=artist,
        release_name=release_name,
        score=score,
        link=link,
        publication_name=publication_name
    )
示例#4
0
    def test__metacritic__get_reviews__WillIncludeFirstReview_WhenMetacriticHTMLIncludesFirstReviewHTMLClass(
            self, mock_requests):

        response = MagicMock()
        response.text = get_review_without_full_review()
        mock_requests.get.return_value = response
        expected_reviews = [
            PublicationReview(artist='Yob',
                              date='Posted Jun 20, 2018',
                              publication_name='The Quietus',
                              release_name='Our Raw Heart',
                              score=80,
                              link=None)
        ]

        actual_reviews = metacritic.get_reviews('the-quietus')

        self.assertEqual(actual_reviews, expected_reviews)
示例#5
0
    def test__metacritic__get_reviews__WillIncludeFirstReview_WhenMetacriticHTMLIncludesFirstReviewHTMLClass(
            self, mock_requests):

        response = MagicMock()
        response.text = get_first_review_html()
        mock_requests.get.return_value = response
        expected_reviews = [
            PublicationReview(
                artist='Pusha T',
                date='Posted Jun 21, 2018',
                publication_name='The Quietus',
                release_name='DAYTONA',
                score=80,
                link=
                'http://thequietus.com/articles/24834-pusha-t-daytona-album-review'
            )
        ]

        actual_reviews = metacritic.get_reviews('the-quietus')

        self.assertEqual(actual_reviews, expected_reviews)
示例#6
0
    def test__metacritic__get_reviews__WillReturnListOfReviews__WhenMetacriticRespondsWithPublicationScreenHTML(
            self, mock_requests):

        response = MagicMock()
        response.text = get_reviews_html()
        mock_requests.get.return_value = response
        expected_reviews = [
            PublicationReview(
                artist='Yob',
                date='Posted Jun 20, 2018',
                publication_name='The Quietus',
                release_name='Our Raw Heart',
                score=80,
                link=
                'http://thequietus.com/articles/24811-yob-our-raw-heart-album-review'
            )
        ]

        actual_reviews = metacritic.get_reviews('the-quietus')

        self.assertEqual(actual_reviews, expected_reviews)
示例#7
0
def extract_data(review_html) -> PublicationReview:

    release_name = review_html.find('div', attrs={
        'class': 'review_product'
    }).a.text
    score = int(
        review_html.find('li',
                         attrs={
                             'class': 'review_product_score brief_critscore'
                         }).span.text)
    publication_name = review_html.find('li',
                                        attrs={
                                            'class':
                                            'review_action publication_title'
                                        }).text

    date, link = extract_full_review(review_html)

    review_product_href = review_html.find('div',
                                           attrs={
                                               'class': 'review_product'
                                           }).a['href']
    groups = re.search(ARTIST_PARTS_REGEX, review_product_href)

    if not groups:
        print(
            'failed to parse metacritic html for release: %s got artist: %s' %
            (release_name, review_product_href))
        return None

    artist_parts = groups.group(1).split('-')

    artist = ' '.join([part.capitalize() for part in artist_parts])
    return PublicationReview(artist=artist,
                             release_name=release_name,
                             score=score,
                             publication_name=publication_name,
                             date=date,
                             link=link)
    def test__MusicReviewCollector__collect__WillCatalogAListOfArtistsWithReviews__WhenCalledTwice(
            self):
        mock_metacritic = MagicMock()
        mock_metacritic.get_reviews.return_value = [
            PublicationReview(release_name='Clearing The Path',
                              artist='YOB',
                              publication_name='pitchfork',
                              score=80,
                              date='',
                              link='')
        ]
        mock_aoty = MagicMock()
        mock_aoty.get_reviews.return_value = [
            PublicationReview(release_name='Clearing The Path',
                              artist='YOB',
                              publication_name='melon',
                              score=70,
                              date='',
                              link='')
        ]

        catalog = MusicCatalog()
        collector = MusicReviewCollector()
        cataloger = MusicCataloger(catalog, collector, None)
        cataloger.collect_reviews(mock_metacritic, publications=['pitchfork'])
        cataloger.collect_reviews(mock_aoty, publications=['melon'])

        actual_artists = cataloger.catalog_reviews()
        expected_artists = {
            'd92a4901abc2f02dfd347e0793ca3f1c223cbff321d30cdef2679ed13b1c58ae':
            Artist(
                id=
                'd92a4901abc2f02dfd347e0793ca3f1c223cbff321d30cdef2679ed13b1c58ae',
                name='YOB',
                releases=[
                    Release(
                        id=
                        '137801a1514b811c49b2d27183e4b6fd8b7371d76cc4ff177c0a70d9700e196c',
                        name='Clearing The Path',
                        reviews=[
                            Review(
                                id=
                                'af9896e8834f324e2ad0aa281985cc9b13534ec3b2b81414f05df508ef0f2f0b',
                                publication_name='pitchfork',
                                score=80,
                                date='',
                                link=''),
                            Review(
                                id=
                                'f36c160e4def4615f4ab216fa3a3f68bb98b29e649be9804a41e6199e9985f48',
                                publication_name='melon',
                                score=70,
                                date='',
                                link='')
                        ],
                        date=None,
                        type=None,
                        total_tracks=None,
                        spotify_url=None),
                ])
        }

        self.assertEqual(expected_artists, actual_artists)