diff options
author | rsiddharth <s@ricketyspace.net> | 2016-11-13 21:10:36 +0000 |
---|---|---|
committer | rsiddharth <s@ricketyspace.net> | 2016-11-13 21:10:36 +0000 |
commit | def5342df23cb034db1f9e1c21ce2401b198dcdf (patch) | |
tree | dafcd91bb2114a9916345aed0cb1ab250a53278c /gd_diff.py | |
parent | 5428e3ac379727e1a4d1c279b940403e5d7898b0 (diff) |
Re-arrange functions.
* gd_diff.py (save_gns_readme, slurp_gns_readme, slurp_all_gns_readmes)
(readme_gns_readme, slurp_fields_from_readme): Re-arrange functions.
* tests/test_gd_diff.py (test_config_dir, test_config_file)
(test_read_config_file_fail, test_read_config_file_success)
(test_pkgs_dir, test_mk_pkgs_list, test_readmes_dir, test_wiki_page_dir)
(test_write_wiki_page, test_configured_p_no, test_configured_p_yes)
(test_configure): Re-arrange test methods.
Diffstat (limited to 'gd_diff.py')
-rw-r--r-- | gd_diff.py | 196 |
1 files changed, 100 insertions, 96 deletions
@@ -6,6 +6,7 @@ # gns-deb-diff is under the Public Domain. See # <https://creativecommons.org/publicdomain/zero/1.0> +import argparse import json import os import re @@ -19,6 +20,8 @@ from subprocess import run, PIPE from bs4 import BeautifulSoup +_version = '0.1.0dev0' + # list of recognized fields. field_list = [ "Change-Type", @@ -114,102 +117,6 @@ def get_packages(release): return pkgs -def save_gns_readme(content, release, pkg): - """Save README.gNewsense locally. - - :param str content: - Content of the README.gNewsense file. - :param str release: - Release name. - :param str pkg: - Package name. - """ - # create gns_readme dir. for pkg. - gns_readme_dir = path.join(readmes_dir(release), pkg, 'debian') - - try: - os.makedirs(gns_readme_dir, exist_ok=True) - except Exception as e: - print("Error creating directory '%s'\n Error Info:\n %r" % - (gns_readme_dir, e), file=sys.stderr) - sys.exit(1) - - gns_readme = path.join(gns_readme_dir, 'README.gNewSense') - write_file(gns_readme, content) - print('Saved {}'.format(gns_readme)) - - -def slurp_gns_readme(release, pkg): - """Read and save the README.gNewSense for `pkg` in `release`. - - """ - readme_url = readme_url_fmt.format(release, pkg) - cmd = 'bzr cat {}'.format(readme_url) - cp = execute(cmd, out=PIPE, err=PIPE) - - if(cp.returncode == 0): - save_gns_readme(cp.stdout.decode(), release, pkg) - return True - else: - print("README.gNewSense not found for package {}".format(pkg), - file=sys.stderr) - return False - - -def slurp_all_gns_readmes(release, pkgs): - """Read and save all README.gNewSense for `pkgs` in `release`. - - Returns list of packages in `pkgs` that does not have README.gNewSense. - """ - pkgs_noreadmes = [] - for pkg in pkgs: - slurped = slurp_gns_readme(release, pkg) - - if(not slurped): - pkgs_noreadmes.append(pkg) - - return pkgs_noreadmes - - -def read_gns_readme(release, pkg): - """Returns content of README.gNewSense for `pkg`. - - If `README.gNewSense` does not exists for `pkg`, None is returned. - - """ - readme_path = path.join(readmes_dir(release), pkg, 'debian', - 'README.gNewSense') - - if not path.isfile(readme_path): - return None - - readme_content = read_file(readme_path) - return readme_content - - -def slurp_fields_from_readme(content): - """Returns dict containing fields slurped from `content` - - - If a field is not defined or if its value is empty in the - `content`, then its corresponding value in the dict will be None. - - """ - field_values = {} - for field in field_list: - pattern = r'{}:[ ]*(.+)'.format(field) - field_pattern = re.compile(pattern) - field_match = field_pattern.search(content) - - if (field_match and - field_match.group(1) and - field_match.group(1).strip()): - field_values[field] = field_match.group(1).strip() - else: - field_values[field] = None - - return field_values - - def config_dir(): """Return the gns-deb-diff config directory. @@ -265,6 +172,7 @@ def mk_pkgs_list(release): return pkgs_file + def readmes_dir(release): """Return readmes directory for `release`. @@ -324,3 +232,99 @@ def configure(): json.dump(config, open(config_file(), 'w')) os.chmod(config_file(), mode=0o600) + + +def save_gns_readme(content, release, pkg): + """Save README.gNewsense locally. + + :param str content: + Content of the README.gNewsense file. + :param str release: + Release name. + :param str pkg: + Package name. + """ + # create gns_readme dir. for pkg. + gns_readme_dir = path.join(readmes_dir(release), pkg, 'debian') + + try: + os.makedirs(gns_readme_dir, exist_ok=True) + except Exception as e: + print("Error creating directory '%s'\n Error Info:\n %r" % + (gns_readme_dir, e), file=sys.stderr) + sys.exit(1) + + gns_readme = path.join(gns_readme_dir, 'README.gNewSense') + write_file(gns_readme, content) + print('Saved {}'.format(gns_readme)) + + +def slurp_gns_readme(release, pkg): + """Read and save the README.gNewSense for `pkg` in `release`. + + """ + readme_url = readme_url_fmt.format(release, pkg) + cmd = 'bzr cat {}'.format(readme_url) + cp = execute(cmd, out=PIPE, err=PIPE) + + if(cp.returncode == 0): + save_gns_readme(cp.stdout.decode(), release, pkg) + return True + else: + print("README.gNewSense not found for package {}".format(pkg), + file=sys.stderr) + return False + + +def slurp_all_gns_readmes(release, pkgs): + """Read and save all README.gNewSense for `pkgs` in `release`. + + Returns list of packages in `pkgs` that does not have README.gNewSense. + """ + pkgs_noreadmes = [] + for pkg in pkgs: + slurped = slurp_gns_readme(release, pkg) + + if(not slurped): + pkgs_noreadmes.append(pkg) + + return pkgs_noreadmes + + +def read_gns_readme(release, pkg): + """Returns content of README.gNewSense for `pkg`. + + If `README.gNewSense` does not exists for `pkg`, None is returned. + + """ + readme_path = path.join(readmes_dir(release), pkg, 'debian', + 'README.gNewSense') + + if not path.isfile(readme_path): + return None + + readme_content = read_file(readme_path) + return readme_content + + +def slurp_fields_from_readme(content): + """Returns dict containing fields slurped from `content` + + - If a field is not defined or if its value is empty in the + `content`, then its corresponding value in the dict will be None. + + """ + field_values = {} + for field in field_list: + pattern = r'{}:[ ]*(.+)'.format(field) + field_pattern = re.compile(pattern) + field_match = field_pattern.search(content) + + if (field_match and + field_match.group(1) and + field_match.group(1).strip()): + field_values[field] = field_match.group(1).strip() + else: + field_values[field] = None + + return field_values |