def get_artists_and_collaborators_of_song_by_uri(self, uri):
        rows_artists = self._graph.query(Queries.find_artists_uri_compiled(uri))
        rows_compilers = self._graph.query(Queries.find_compiler_uri_compiled(uri))

        artist_uris = self._get_single_rows_multiple_result(rows_artists)
        if artist_uris is not None:
            for artist_uri in artist_uris:
                yield self.get_artist_by_uri(artist_uri)

        compilers_tuples = self._get_double_rows_multiple_result(rows_compilers)
        if compilers_tuples is not None:
            for compiler_tuple in compilers_tuples:
                yield self.get_artist_by_uri(compiler_tuple[0])
    def get_artist_by_uri(self, uri):
        rows_canonical = self._graph.query(Queries.find_canonical_compiled(uri))
        canonical_tuple = MeraRdflibGraph._get_double_rows_simple_result(rows_canonical)
        if canonical_tuple is None:
            return None

        rows_aliases = self._graph.query(Queries.find_aliases_compiled(uri))
        rows_namevars = self._graph.query(Queries.find_namevars_compiled(uri))
        rows_country = self._graph.query(Queries.find_country_compiled(uri))

        return MeraArtist(labelled_canonical=canonical_tuple,
                          labelled_aliases=MeraRdflibGraph._get_double_rows_multiple_result(rows_aliases),
                          labelled_namevars=MeraRdflibGraph._get_double_rows_multiple_result(rows_namevars),
                          labelled_country=MeraRdflibGraph._get_double_rows_simple_result(rows_country))
    def get_song_by_uri(self, uri):
        rows_canonical = self._graph.query(Queries.find_canonical_compiled(uri))
        canonical_tuple = MeraRdflibGraph._get_double_rows_simple_result(rows_canonical)
        if canonical_tuple is None:
            return None
        # rows_artist = self._graph.query(Queries.find_artists_uri_compiled(uri))
        rows_compilers = self._graph.query(Queries.find_compiler_uri_compiled(uri))
        rows_genres = self._graph.query(Queries.find_genres_compiled(uri))
        rows_alt_titles = self._graph.query(Queries.find_alternative_titles_compiled(uri))
        # rows_country = self._graph.query(Queries.find_country_compiled(uri))
        rows_discogs_id = self._graph.query(Queries.find_discogs_id_compiled(uri))
        rows_discogs_index = self._graph.query(Queries.find_discogs_index_compiled(uri))
        rows_transaction_id = self._graph.query(Queries.find_usos_transaction_id_compiled(uri))
        rows_isrc = self._graph.query(Queries.find_usos_isrc_compiled(uri))

        # rows_duration = None  # Not used yet
        # rows_date = None  # Not used yet
        # rows_album = None  # Not used yet


        return MeraSong(labelled_canonical=canonical_tuple,
                        labelled_alt_titles=MeraRdflibGraph._get_double_rows_multiple_result(rows_alt_titles),
                        labelled_collaborations=self._build_labelled_collaborations_from_rows(rows_compilers,
                                                                                              ROLE_WRITER),
                        # labelled_country=MeraRdflibGraph._get_double_rows_simple_result(rows_country),
                        # artists=MeraRdflibGraph._get_single_rows_multiple_result(rows_artist),
                        duration=None,
                        labelled_genres=MeraRdflibGraph._get_double_rows_multiple_result(rows_genres),
                        release_date=None,
                        album=None,
                        discogs_index=MeraRdflibGraph._get_single_rows_simple_result(rows_discogs_index),
                        discogs_id=MeraRdflibGraph._get_single_rows_simple_result(rows_discogs_id),
                        usos_transaction_id=MeraRdflibGraph._get_single_rows_simple_result(rows_transaction_id),
                        usos_isrc=MeraRdflibGraph._get_single_rows_simple_result(rows_isrc))
 def get_uri_of_intermediary_of_entity(self, primary_entity_uri, primary_property, target_entity):
     rows_intermediary_uri = self._graph.query(
         Queries.find_intermediary_uri_for_target_entity_compiled(primary_entity_uri=primary_entity_uri,
                                                                  primary_property=primary_property,
                                                                  entity_target_uri=target_entity)
     )
     return self._get_single_rows_simple_result(rows_intermediary_uri)
    def get_artist_group_by_uri(self, uri):
        rows_canonical = self._graph.query(Queries.find_canonical_compiled(uri))
        canonical_tuple = MeraRdflibGraph._get_double_rows_simple_result(rows_canonical)
        if canonical_tuple is None:
            return None

        rows_aliases = self._graph.query(Queries.find_aliases_compiled(uri))
        rows_namevars = self._graph.query(Queries.find_namevars_compiled(uri))
        rows_country = self._graph.query(Queries.find_country_compiled(uri))
        rows_members = self._graph.query(Queries.find_members_uri_compiled(uri))

        object_members = None
        uri_members = MeraRdflibGraph._get_single_rows_multiple_result(rows_members)
        if uri_members is not None:
            object_members = [self.get_artist_person_by_uri(person) for person in uri_members]

        return MeraArtistGroup(labelled_canonical=canonical_tuple,
                               labelled_aliases=MeraRdflibGraph._get_double_rows_multiple_result(rows_aliases),
                               labelled_namevars=MeraRdflibGraph._get_double_rows_multiple_result(rows_namevars),
                               labelled_country=MeraRdflibGraph._get_double_rows_simple_result(rows_country),
                               members=object_members)
    def get_artist_of_unknown_type_by_uri(self, uri):
        rows_canonical = self._graph.query(Queries.find_canonical_compiled(uri))
        canonical_tuple = MeraRdflibGraph._get_double_rows_simple_result(rows_canonical)
        if canonical_tuple is None:
            return None

        rows_aliases = self._graph.query(Queries.find_aliases_compiled(uri))
        rows_namevars = self._graph.query(Queries.find_namevars_compiled(uri))
        rows_country = self._graph.query(Queries.find_country_compiled(uri))
        rows_civil = self._graph.query(Queries.find_civil_compiled(uri))

        if rows_civil is not None:  # It is an ArtistPerson
            return MeraArtistPerson(labelled_canonical=canonical_tuple,
                                    labelled_aliases=MeraRdflibGraph._get_double_rows_multiple_result(rows_aliases),
                                    labelled_namevars=MeraRdflibGraph._get_double_rows_multiple_result(rows_namevars),
                                    labelled_country=MeraRdflibGraph._get_double_rows_simple_result(rows_country),
                                    labelled_civil=MeraRdflibGraph._get_double_rows_simple_result(rows_civil))
        rows_members = self._graph.query(Queries.find_members_uri_compiled(uri))
        if rows_members is None:  # It has not members, so it hasn't group properties
            return MeraArtist(labelled_canonical=canonical_tuple,
                              labelled_aliases=MeraRdflibGraph._get_double_rows_multiple_result(rows_aliases),
                              labelled_namevars=MeraRdflibGraph._get_double_rows_multiple_result(rows_namevars),
                              labelled_country=MeraRdflibGraph._get_double_rows_simple_result(rows_country))
        # By elimination, it is a group
        object_members = None
        uri_members = MeraRdflibGraph._get_single_rows_multiple_result(rows_members)
        if uri_members is not None:
            object_members = [self.get_artist_person_by_uri(person) for person in uri_members]

        return MeraArtistGroup(labelled_canonical=canonical_tuple,
                               labelled_aliases=MeraRdflibGraph._get_double_rows_multiple_result(rows_aliases),
                               labelled_namevars=MeraRdflibGraph._get_double_rows_multiple_result(rows_namevars),
                               labelled_country=MeraRdflibGraph._get_double_rows_simple_result(rows_country),
                               members=object_members)
    def test_query_artist_of_song(self):

        dataset = Dataset("A fancy dataset")
        generator = get_clean_graph_generator_mongo_repos()
        mera_graph = generator.generate_mera_graph(artist_parser=FakeArtistParser(dataset),
                                                   song_parser=FakeSongParser(dataset))
        rdflib_graph = mera_graph._graph

        rows = rdflib_graph.query(Queries.find_artists_uri_compiled(base_entities_URI + "avaloncho"))

        counter = 0
        last_result = ""
        for row in rows:
            counter += 1
            last_result = str(row[0])

        self.assertEquals(counter, 1)
        self.assertEquals(last_result, base_entities_URI + "herroes_del_selencio")
 def get_uri_of_intermediary_of_text(self, primary_entity_uri, primary_property, matching_text):
     rows_intermediary_uri = self._graph.query(
         Queries.find_intermediary_uri_for_text_compiled(primary_property=primary_property,
                                                         primary_entity_uri=primary_entity_uri,
                                                         matching_text=matching_text))
     return self._get_single_rows_simple_result(rows_intermediary_uri)