Exemplo n.º 1
0
def get_repo() -> Optional[RepoConfig]:
    # Get repo name
    repo_name = input('GitHub repository name (to know which repository '
                      'triggered an alert, example: Substrate):\n')

    # Get repo page
    while True:
        repo_page = input('Official GitHub repository (example: '
                          'w3f/substrate/):\n')
        if not repo_page.endswith('/'):
            repo_page = repo_page + '/'

        releases_page = InternalConf.github_releases_template.format(repo_page)
        print('Trying to connect to {}'.format(releases_page))
        try:
            releases = get_json(releases_page, DUMMY_LOGGER)
            if 'message' in releases and releases['message'] == 'Not Found':
                if not yn_prompt('Connection successful, but URL is not valid. '
                                 'Do you want to try again? (Y/n)\n'):
                    return None
            else:
                break  # success message left to setup_repos function
        except Exception:
            if not yn_prompt('Failed to connect to page. Do '
                             'you want to try again? (Y/n)\n'):
                return None

    # Return node
    return RepoConfig(repo_name, repo_page, True)
def get_repo(repos_so_far: List[RepoConfig]) -> Optional[RepoConfig]:
    # Get repo's name
    repo_names_so_far = [r.repo_name for r in repos_so_far]
    while True:
        repo_name = input(
            'Unique GitHub repository name (to know which repository '
            'triggered an alert, example: oasis-core):\n')
        if repo_name in repo_names_so_far:
            print('Repo name must be unique.')
        elif len(repo_name) == 0:
            print('Repo name cannot be empty.')
        else:
            break

    # Get repo page
    while True:
        repo_page = input('Official GitHub repository (example: '
                          'oasislabs/oasis-core/):\n')
        if not repo_page.endswith('/'):
            repo_page = repo_page + '/'

        releases_page = InternalConf.github_releases_template.format(repo_page)
        print('Trying to connect to {}'.format(releases_page))
        try:
            releases = get_json(releases_page, DUMMY_LOGGER)
            if 'message' in releases and releases['message'] == 'Not Found':
                if not yn_prompt(
                        'Connection successful, but URL is not valid. '
                        'Do you want to try again? (Y/n)\n'):
                    if not yn_prompt(
                            'Do you still want to add the repo? (Y/n)\n'):
                        return None
                    else:
                        break
            else:
                break  # success message left to setup_repos function
        except Exception:
            if not yn_prompt('Failed to connect to page. Do '
                             'you want to try again? (Y/n)\n'):

                if not yn_prompt('Do you still want to add the repo? (Y/n)\n'):
                    return None
                else:
                    break

    # Return node
    return RepoConfig(repo_name, repo_page, True)
Exemplo n.º 3
0
def test_connection_to_github_page(repo: RepoConfig):
    # Get releases page
    releases_page = InternalConf.github_releases_template.format(
        repo.repo_page)

    # Test connection
    log_and_print('Trying to connect to {}'.format(releases_page))
    try:
        releases = get_json(releases_page, logger_general)
        if 'message' in releases and releases['message'] == 'Not Found':
            raise InitialisationException(
                'Successfully reached {} but URL '
                'is not valid.'.format(releases_page))
        else:
            log_and_print('Success.')
    except Exception:
        raise InitialisationException('Could not reach {}.'
                                      ''.format(releases_page))
Exemplo n.º 4
0
    def monitor(self) -> None:
        # Get list of releases
        releases = get_json(self.releases_page, self._logger)

        # If response contains a message, skip monitoring this time round
        # since the presence of a message indicates an error in the API call
        if 'message' in releases:
            self.logger.warning('GitHub message: %s', releases['message'])
            return

        # Check that number of releases has not changed
        no_of_releases = len(releases)
        if self._prev_no_of_releases not in [None, no_of_releases]:
            if self._prev_no_of_releases < no_of_releases:
                self.channels.alert_info(
                    NewGitHubReleaseAlert(releases[0]['name'], self.repo_name))
            else:
                # Something went wrong; reset number of releases
                self.logger.error('The number of releases decreased from {} '
                                  'to {}: {}'.format(self._prev_no_of_releases,
                                                     no_of_releases, releases))

        self._prev_no_of_releases = no_of_releases
Exemplo n.º 5
0
 def test_get_json_with_no_params_works_just_the_same(self, _):
     self.assertEqual(TestGetJson.DummyGetReturn.CONTENT_DICT,
                      get_json(ENDPOINT, LOGGER))
Exemplo n.º 6
0
 def test_get_json_accesses_content_and_parses_bytes_to_dict(self, _):
     self.assertEqual(TestGetJson.DummyGetReturn.CONTENT_DICT,
                      get_json(ENDPOINT, LOGGER, PARAMS))