diff --git a/py2pack/__init__.py b/py2pack/__init__.py index 37d39a8..c9c1b27 100755 --- a/py2pack/__init__.py +++ b/py2pack/__init__.py @@ -23,7 +23,6 @@ import json import os import pprint -import pwd import re import sys import warnings @@ -37,7 +36,7 @@ from py2pack import version as py2pack_version from py2pack.utils import (_get_archive_filelist, get_pyproject_table, parse_pyproject, get_setuptools_scripts, - get_metadata) + get_metadata, get_user_name) from email import parser @@ -373,7 +372,7 @@ def generate(args): durl = newest_download_url(args) source_url = data['source_url'] = (args.source_url or (durl and durl['url'])) data['year'] = datetime.datetime.now().year # set current year - data['user_name'] = pwd.getpwuid(os.getuid())[4] # set system user (packager) + data['user_name'] = get_user_name() # set system user (packager) data['summary_no_ending_dot'] = re.sub(r'(.*)\.', r'\g<1>', data.get('summary')) if data.get('summary') else "" # If package name supplied on command line differs in case from PyPI's one @@ -409,6 +408,7 @@ def generate(args): env = _prepare_template_env(_get_template_dirs()) template = env.get_template(args.template) + data.update(args.options) # update data with custom options result = template.render(data).encode('utf-8') # render template and encode properly outfile = open(args.filename, 'wb') # write result to spec file try: @@ -500,6 +500,7 @@ def main(): parser_generate.add_argument('version', nargs='?', help='package version (optional)') parser_generate.add_argument('--source-url', default=None, help='source url') parser_generate.add_argument('--source-glob', help='source glob template') + parser_generate.add_argument('--setopt', action="append", help='A KEY=VALUE option (optional)', default=[]) parser_generate.add_argument('--local', action='store_true', help='build from local package') parser_generate.add_argument('--localfile', default='', help='path to the local PKG-INFO or json metadata') parser_generate.add_argument('-t', '--template', choices=file_template_list(), default='opensuse.spec', help='file template') @@ -526,6 +527,14 @@ def main(): if 'func' not in args: sys.exit(parser.print_help()) + if args.func == generate: + options = args.options = {} + for opt in args.setopt: + if '=' in opt: + key, value = opt.split('=', 1) + options[key] = value + else: + options[opt] = True args.func(args) diff --git a/py2pack/utils.py b/py2pack/utils.py index 3f24e3e..ce76a0e 100644 --- a/py2pack/utils.py +++ b/py2pack/utils.py @@ -195,3 +195,11 @@ def get_metadata(filename): data['install_requires'] = mdata.get_all('Requires-Dist') return data + + +def get_user_name(): + """get username""" + pwuid = pwd.getpwuid(os.getuid()) + gecos = pwuid.pw_gecos # or pwd.getpwuid(os.getuid())[4] + name = pwuid.pw_name # or pwd.getpwuid(os.getuid())[0] + return gecos or name diff --git a/test/test_py2pack.py b/test/test_py2pack.py index 9726a6a..4b464ca 100644 --- a/test/test_py2pack.py +++ b/test/test_py2pack.py @@ -34,6 +34,7 @@ class Args: source_glob = None local = False localfile = "" + options = {} self.args = Args() diff --git a/test/test_template.py b/test/test_template.py index f3c0177..1a3d52b 100644 --- a/test/test_template.py +++ b/test/test_template.py @@ -41,7 +41,7 @@ class Args(object): compare_dir = os.path.join(os.path.dirname(__file__), 'examples') maxDiff = None -username = pwd.getpwuid(os.getuid())[4] +username = py2pack.get_user_name() @pytest.mark.parametrize('template, fetch_tarball',