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)
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))
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
def test_get_json_with_no_params_works_just_the_same(self, _): self.assertEqual(TestGetJson.DummyGetReturn.CONTENT_DICT, get_json(ENDPOINT, LOGGER))
def test_get_json_accesses_content_and_parses_bytes_to_dict(self, _): self.assertEqual(TestGetJson.DummyGetReturn.CONTENT_DICT, get_json(ENDPOINT, LOGGER, PARAMS))