def get_config(repo, base_branch): """ Get .pep8speaks.yml config file from the repository and return the config dictionary """ # Default configuration parameters default_config_path = os.path.join(os.path.dirname(__file__), '..', 'data', 'default_config.json') with open(default_config_path) as config_file: config = json.loads(config_file.read()) # Configuration file query = "https://raw.githubusercontent.com/{}/{}/.pep8speaks.yml" query = query.format(repo, base_branch) r = utils.query_request(query) if r.status_code == 200: try: new_config = yaml.load(r.text) # overloading the default configuration with the one specified config = utils.update_dict(config, new_config) except yaml.YAMLError: # Bad YAML file pass # Create pycodestyle command line arguments arguments = [] confs = config["pycodestyle"] for key, value in confs.items(): if value: # Non empty if isinstance(value, int): if isinstance(value, bool): arguments.append("--{}".format(key)) else: arguments.append("--{}={}".format(key, value)) elif isinstance(value, list): arguments.append("--{}={}".format(key, ','.join(value))) config["pycodestyle_cmd_config"] = ' {arguments}'.format( arguments=' '.join(arguments)) # pycodestyle is case-sensitive config["pycodestyle"]["ignore"] = [ e.upper() for e in list(config["pycodestyle"]["ignore"]) ] return config
def get_config(repo, base_branch, after_commit_hash): """ Get .pep8speaks.yml config file from the repository and return the config dictionary First look in the base branch of the Pull Request (general master branch). If no file is found, then look for a file in the head branch of the Pull Request. """ # Default configuration parameters default_config = Path(__file__).absolute().parent.parent.joinpath("data", "default_pep8speaks.yml") with open(default_config, "r") as config_file: config = yaml.safe_load(config_file) linters = ["pycodestyle", "flake8"] # Read setup.cfg for [pycodestyle] or [flake8] section setup_config_file = "" query = f"https://raw.githubusercontent.com/{repo}/{base_branch}/setup.cfg" r = utils.query_request(query) if r.status_code == 200: setup_config_file = r.text else: # Try to look for a config in the head branch of the Pull Request new_query = f"https://raw.githubusercontent.com/{repo}/{after_commit_hash}/setup.cfg" r_new = utils.query_request(new_query) if r_new.status_code == 200: setup_config_file = r_new.text if len(setup_config_file) > 0: linter_cfg_config = read_setup_cfg_file(setup_config_file) # Copy the setup.cfg config for all linters new_setup_config = {} for linter in linters: new_setup_config[linter] = linter_cfg_config config = utils.update_dict(config, new_setup_config) # Read .pep8speaks.yml new_config_text = "" # Configuration file query = f"https://raw.githubusercontent.com/{repo}/{base_branch}/.pep8speaks.yml" r = utils.query_request(query) if r.status_code == 200: new_config_text = r.text else: # Try to look for a config in the head branch of the Pull Request new_query = f"https://raw.githubusercontent.com/{repo}/{after_commit_hash}/.pep8speaks.yml" r_new = utils.query_request(new_query) if r_new.status_code == 200: new_config_text = r_new.text if len(new_config_text) > 0: try: new_config = yaml.load(new_config_text) # overloading the default configuration with the one specified config = utils.update_dict(config, new_config) except yaml.YAMLError: # Bad YAML file pass # Create pycodestyle and flake8 command line arguments for linter in linters: confs = config.get(linter, dict()) arguments = [] for key, value in confs.items(): if value: # Non empty if isinstance(value, int): if isinstance(value, bool): arguments.append(f"--{key}") else: arguments.append(f"--{key}={value}") elif isinstance(value, list): arguments.append(f"--{key}={','.join(value)}") config[f"{linter}_cmd_config"] = f' {" ".join(arguments)}' # linters are case-sensitive with error codes for linter in linters: config[linter]["ignore"] = [e.upper() for e in list(config[linter]["ignore"])] return config
def test_update_dict(self, base, head, expected): assert update_dict(base, head) == expected
def get_config(repo, base_branch): """ Get .pep8speaks.yml config file from the repository and return the config dictionary """ # Default configuration parameters config = { "message": { "opened": { "header": "", "footer": "" }, "updated": { "header": "", "footer": "" }, "no_errors": "Cheers ! There are no PEP8 issues in this Pull Request. :beers: ", }, "scanner": { "diff_only": False }, "pycodestyle": { "ignore": [], "max-line-length": 79, "count": False, "first": False, "show-pep8": False, "filename": [], "exclude": [], "select": [], "show-source": False, "statistics": False, "hang-closing": False, }, "no_blank_comment": True, "only_mention_files_with_errors": True, "descending_issues_order": False, } # Configuration file query = "https://raw.githubusercontent.com/{}/{}/.pep8speaks.yml" query = query.format(repo, base_branch) r = utils._request(query) if r.status_code == 200: try: new_config = yaml.load(r.text) # overloading the default configuration with the one specified config = utils.update_dict(config, new_config) except yaml.YAMLError: # Bad YAML file pass # Create pycodestyle command line arguments arguments = [] confs = config["pycodestyle"] for key, value in confs.items(): if value: # Non empty if isinstance(value, int): if isinstance(value, bool): arguments.append("--{}".format(key)) else: arguments.append("--{}={}".format(key, value)) elif isinstance(value, list): arguments.append("--{}={}".format(key, ','.join(value))) config["pycodestyle_cmd_config"] = ' {arguments}'.format( arguments=' '.join(arguments)) # pycodestyle is case-sensitive config["pycodestyle"]["ignore"] = [ e.upper() for e in list(config["pycodestyle"]["ignore"]) ] return config