PBR command classes overwrite setup.cfg cmdclass settings

Bug #1300381 reported by Sam Stavinoha on 2014-03-31
This bug affects 3 people
Affects Status Importance Assigned to Milestone

Bug Description

A user should be able to subclass pbr's command classes found in pbr/packaging.py, and declare that they be used by specifying them in the setup.cfg:


# setup.cfg

commands = setup.MyLocalInstall

The MyLocalInstall class might be defined in the project's setup.py:


# setup.py

from pbr.packaging import LocalInstall

class MyLocalInstall(LocalInstall):

    # override __init__() and run()

After noticing that my custom class wasn't being called, I traced the behavior to here:


Since pbr.hooks.commands appends to a string of command class names, the pbr classes are always at the end of that string. Any command class specified in setup.cfg that has the same `command_name` (class attribute) as a pbr class defined in pbr.packaging, the class from pbr.packaging will overwrite that class in the config returned by setup_cfg_to_setup_kwargs().

Sam Stavinoha (smlstvnh) on 2014-03-31
description: updated
Doug Hellmann (doug-hellmann) wrote :

I'm not certain this is something we want to support in pbr.

What's the use case for overriding the install command?

Sam Stavinoha (smlstvnh) wrote :

I have seen various threads on extending setuptools command classes...


but for me it was to add user_options and execute additional tasks based on those options. e.g. installing an additional package for a tag like --with-redis, where in my code I try, except imports when constructing the database client instance.

Regarding this bug:

The only time this occurs is if a command class is specified for which pbr has a corresponding command class (has the same `command_name`). I created custom classes for 'develop' and 'install', but only the class I created for 'install' was being overwritten, which I thought was pretty odd behavior.

I have other packages using this type of setup for custom command classes, and no matter the purpose of the customization, I would really like to start using pbr on all of those projects, but this prevents me from doing so.

I went ahead and submitted a patch just in case:


Changed in pbr:
status: New → Triaged
importance: Undecided → Low

Change abandoned by lifeless (<email address hidden>) on branch: master
Review: https://review.openstack.org/84218
Reason: WIP is still in the review queue, marking abandoned.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers