[openstack-dev] [nova][oslo] oslo.config and import chains
Matthew Booth
mbooth at redhat.com
Fri Aug 8 10:17:45 UTC 2014
On 07/08/14 19:02, Kevin L. Mitchell wrote:
> On Thu, 2014-08-07 at 17:41 +0100, Matthew Booth wrote:
>> ... or arg is an object which defines __nonzero__(), or defines
>> __getattr__() and then explodes because of the unexpected lookup of a
>> __nonzero__ attribute. Or it's False (no quotes when printed by the
>> debugger), but has a unicode type and therefore evaluates to True[1].
>
> If you're passing such exotic objects as parameters that could
> potentially be drawn from configuration instead, maybe that code needs
> to be refactored a bit :)
>
>> However, if you want to compare a value with None and write 'foo is
>> None' it will always do exactly what you expect, regardless what you
>> pass to it. I think it's also nicer to the reviewer and the
>> maintainer,
>> who then don't need to go looking for context to check if anything
>> invalid might be passed in.
>
> In the vast majority of cases, however, we use a value that evaluates to
> False to indicate "use the default", where "default" may be drawn from
> configuration. Yes, there are cases where we must treat, say, 0 as
> distinct from None, but when we don't need to, we should keep the code
> as simple as possible. After all, I doubt anyone would seriously
> suggest that we must always use something like the "_unset" sentinel,
> even when None has no special meaning…
I've found a few bugs in Openstack by checking implicit boolean tests
while reviewing code. Here's a recent one:
https://review.openstack.org/#/c/109006/1/nova/db/sqlalchemy/api.py
Note that the caller has accidentally passed read_deleted=False, a
pretty easy mistake to make, and the bare object test has hidden that
error and silently replaced it with a default.
Also note that while PEP8 stops short of decreeing against bare object
tests, it does recommend against it. See the section 'Programming
Recommendations':
http://legacy.python.org/dev/peps/pep-0008/
Matt
--
Matthew Booth
Red Hat Engineering, Virtualisation Team
Phone: +442070094448 (UK)
GPG ID: D33C3490
GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490
More information about the OpenStack-dev
mailing list