[openstack-dev] [nova][oslo] oslo.config and import chains (a proposal to update the style guidelines for imports)
Matthew Booth
mbooth at redhat.com
Thu Aug 7 15:19:47 UTC 2014
On 07/08/14 12:15, Matthew Booth wrote:
> I'm sure this is well known, but I recently encountered this problem for
> the second time.
>
> ---
> foo:
> import oslo.config as cfg
>
> import bar
>
> CONF = cfg.CONF
> CONF.register_opts('foo_opt')
>
> ---
> bar:
> import oslo.config as cfg
>
> CONF = cfg.CONF
>
> def bar_func(arg=CONF.foo_opt):
> pass
> ---
>
> importing foo results in an error in bar because CONF.foo_opt doesn't
> exist. This is because bar is imported before CONF.register_opts.
> CONF.import_opt() fails in the same way because it just imports foo and
> hits the exact same problem when foo imports bar.
>
> A (the?) solution is to register_opts() in foo before importing any
> modules which might also use oslo.config. This also allows import_opt()
> to work in bar, which you should do to remove any dependency on import
> order:
>
> ---
> foo:
> import oslo.config as cfg
>
> CONF = cfg.CONF
> CONF.register_opts('foo_opt')
>
> import bar
>
> ---
> bar:
> import oslo.config as cfg
>
> CONF = cfg.CONF
> CONF.import_opt('foo_opt', 'foo')
>
> def bar_func(arg=CONF.foo_opt):
> pass
> ---
>
> Even if it's old news it's worth a refresher because it was a bit of a
> headscratcher.
This became pertinent, because it's now blocking:
https://review.openstack.org/#/c/104145/. It has a -1 for not following
the style guidelines in the ordering of imports.
I think we should update our style guidelines to recommend that any
module which calls register_opts() or import_opt() do so *before*
importing another module which might also call one of those functions.
If this is done consistently, it means that any module can import_opt()
from another module and be certain that it won't be re-imported itself
before register_opts() has been called.
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