praiskup / argparse-manpage

Automatically build man-pages for your Python project
Apache License 2.0
40 stars 21 forks source link

Setting `prog` and `pyfile` in options gives an error #79

Closed rrthomas closed 11 months ago

rrthomas commented 1 year ago

It turned out I was doing the wrong thing (I should have been setting module, not pyfile), but…

In the examples, there are these lines:

[build_manpages]
manpages =
    man/foo.1:object=parser:pyfile=bin/foo.py
    man/bar.1:function=get_parser:pyfile=bin/bar
    man/baz.1:function=get_parser:pyfile=bin/bar:prog=baz

However, if with argparse-manpage 4 I set both prog and pyfile, then I get this error:

running build_manpages
Traceback (most recent call last):
  File "/home/rrt/.local/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 351, in <module>
    main()
  File "/home/rrt/.local/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 333, in main
    json_out['return_val'] = hook(**hook_input['kwargs'])
  File "/home/rrt/.local/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 249, in build_wheel
    return _build_backend().build_wheel(wheel_directory, config_settings,
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/build_meta.py", line 413, in build_wheel
    return self._build_with_temp_dir(['bdist_wheel'], '.whl',
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/build_meta.py", line 398, in _build_with_temp_dir
    self.run_setup()
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/build_meta.py", line 484, in run_setup
    super(_BuildMetaLegacyBackend,
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/build_meta.py", line 335, in run_setup
    exec(code, locals())
  File "<string>", line 18, in <module>
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/__init__.py", line 108, in setup
    return distutils.core.setup(**attrs)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 185, in setup
    return run_commands(dist)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
    dist.run_commands()
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
    self.run_command(cmd)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/dist.py", line 1221, in run_command
    super().run_command(command)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
    cmd_obj.run()
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/wheel/bdist_wheel.py", line 343, in run
    self.run_command("build")
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
    self.distribution.run_command(command)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/dist.py", line 1221, in run_command
    super().run_command(command)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
    cmd_obj.run()
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/command/build.py", line 131, in run
    self.run_command(cmd_name)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
    self.distribution.run_command(command)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/dist.py", line 1221, in run_command
    super().run_command(command)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
    cmd_obj.run()
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/build_manpages/build_manpages.py", line 117, in run
    self.run_command(DEFAULT_CMD_NAME)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
    self.distribution.run_command(command)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/dist.py", line 1221, in run_command
    super().run_command(command)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 987, in run_command
    cmd_obj.ensure_finalized()
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 111, in ensure_finalized
    self.finalize_options()
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/build_manpages/build_manpages.py", line 84, in finalize_options
    self.manpages_data = parse_manpages_spec(self.manpages)
  File "/tmp/build-env-4kgiaqi2/lib/python3.10/site-packages/build_manpages/build_manpages.py", line 59, in parse_manpages_spec
    assert(not oname in manpagedata)
AssertionError

This appears to be because of the following code:

            elif oname in MANPAGE_DATA_ATTRS and oname != "authors":
                assert(not oname in manpagedata)
                manpagedata[oname] = ovalue

This is triggered when oname is prog, because previously the following code was run:

                if oname == 'pyfile':
                    manpagedata['prog'] = os.path.basename(ovalue)

Setting prog before pyfile does not cause an error, but does cause pyfile's value to overwrite prog's. Neither seems to be what is really wanted!

praiskup commented 11 months ago

Thank you for the report!

rrthomas commented 11 months ago

Thanks for the fix!