def test_get_leaderboard(self):
        # given
        self.backend.get_leaderboard_entries.return_value = [
            LeaderboardEntry(some_exp_entry_dto)
        ]

        # when
        leaderboard = self.project.get_leaderboard()

        # then
        self.backend.get_leaderboard_entries.assert_called_once_with(
            project=self.project,
            ids=None,
            states=None,
            owners=None,
            tags=None,
            min_running_time=None)

        # and
        expected_data = {0: some_exp_entry_row}
        expected_leaderboard = pd.DataFrame.from_dict(data=expected_data,
                                                      orient='index')
        expected_leaderboard = expected_leaderboard.reindex(
            # pylint: disable=protected-access
            self.project._sort_leaderboard_columns(expected_leaderboard.columns
                                                   ),
            axis='columns')

        self.assertTrue(leaderboard.equals(expected_leaderboard))
Example #2
0
    def get_leaderboard_entries(self,
                                project,
                                entry_types=None,
                                ids=None,
                                states=None,
                                owners=None,
                                tags=None,
                                min_running_time=None):
        try:
            if entry_types is None:
                entry_types = ['experiment', 'notebook']

            def get_portion(limit, offset):
                return self.leaderboard_swagger_client.api.getLeaderboard(
                    projectIdentifier=project.full_id,
                    entryType=entry_types,
                    shortId=ids,
                    groupShortId=None,
                    state=states,
                    owner=owners,
                    tags=tags,
                    minRunningTimeSeconds=min_running_time,
                    sortBy=['shortId'],
                    sortFieldType=['native'],
                    sortDirection=['ascending'],
                    limit=limit,
                    offset=offset).response().result.entries

            return [
                LeaderboardEntry(e)
                for e in self._get_all_items(get_portion, step=100)
            ]
        except HTTPNotFound:
            raise ProjectNotFound(project_identifier=project.full_id)
Example #3
0
    def get_leaderboard_entries(
        self,
        project,
        entry_types=None,  # deprecated
        ids=None,
        states=None,
        owners=None,
        tags=None,
        min_running_time=None,
    ):
        if states is not None:
            states = [
                state if state == "running" else "idle" for state in states
            ]
        try:

            def get_portion(limit, offset):
                return (self.leaderboard_swagger_client.api.getLeaderboard(
                    projectIdentifier=project.full_id,
                    shortId=ids,
                    state=states,
                    owner=owners,
                    tags=tags,
                    tagsMode="and",
                    minRunningTimeSeconds=min_running_time,
                    sortBy=["sys/id"],
                    sortFieldType=["string"],
                    sortDirection=["ascending"],
                    limit=limit,
                    offset=offset,
                ).response().result.entries)

            return [
                LeaderboardEntry(self._to_leaderboard_entry_dto(e))
                for e in self._get_all_items(get_portion, step=100)
            ]
        except HTTPNotFound:
            raise ProjectNotFound(project_identifier=project.full_id)