Re: Round 2 for "A ModuleSpec Type for the Import System"
Eric Snow <[email protected]>
| Newsgroups | gmane.comp.python.import |
|---|---|
| Message-ID | <CALFfu7Ab-zc3SACv6WQS+3X+f_jxKy8iq26ySihSgoYYh_TYUw@mail.gmail.com> |
On Tue, Aug 13, 2013 at 7:21 AM, Brett Cannon <[email protected]> wrote: > On Tue, Aug 13, 2013 at 12:17 AM, Eric Snow <[email protected]>wrote: > >> On Sun, Aug 11, 2013 at 2:08 PM, Brett Cannon <[email protected]> wrote: >> >>> >>> > [SNIP] > > >> >>> >>>> ``module_repr()`` also conflicts with the same >>>> method on loaders, but that workaround is not complicated since both are >>>> methods. >>>> >>>> Unfortunately, the ability to proxy does not extend to ``id()`` >>>> comparisons and ``isinstance()`` tests. In the case of the return value >>>> of ``find_module()``, we accept that break in backward compatibility. >>>> However, we will mitigate the problem with ``isinstance()`` somewhat by >>>> registering ``ModuleSpec`` on the loaders in ``importlib.abc``. >>>> >>> >>> Actually, ModuleSpec doesn't even need to register; __instancecheck__ >>> and __subclasscheck__ can just be defined and delegate by calling >>> issubclass/isinstance on the loader as appropriate. >>> >> >> Do you mean add custom versions of those methods to importlib.abc.Loader? >> > > Nope, I meant ModuleSpec because every time I have a reason to override > something it's on the object and not the class and so I forget the support > is the other way around. Argh. > Yeah, that would make things a lot easier. > That should work as well as the register approach. It won't work for all >> loaders but should be good enough. I was just planning on registering >> ModuleSpec on the loader in the setter for a `loader` property on >> ModuleSpec. >> > > But the registration is at the class level so how would that work? > @property def loader(self): return self._loader @loader.setter def loader(self, loader): try: register = loader.__class__.register except AttributeError: pass else: register(self.__class__) self._loader = loader It's not pretty and it won't work on non-ABCs, but it's better than nothing. The likelihood of someone doing an isinstance check on a loader seems pretty low though. Of course, I'm planning on doing just that for handling of namespace packages, but that's a little different. -eric _______________________________________________ Import-SIG mailing list [email protected] http://mail.python.org/mailman/listinfo/import-sig