> On 18 Jun 2017, at 19:21, Barry Scott <ba...@barrys-emacs.org> wrote: > >> >> On 14 Jun 2017, at 07:33, Nick Coghlan <ncogh...@gmail.com >> <mailto:ncogh...@gmail.com>> wrote: >> >> On 14 June 2017 at 13:02, Mahmoud Hashemi <mahm...@hatnote.com >> <mailto:mahm...@hatnote.com>> wrote: >>> That would be amazing! If there's anything I can do to help make that >>> happen, please let me know. It'll almost certainly save that much time for >>> me alone down the line, anyway :) >> >> The `IMPORT_FROM` opcode's error handling would probably be the best >> place to start poking around: >> https://github.com/python/cpython/blob/master/Python/ceval.c#L5055 >> <https://github.com/python/cpython/blob/master/Python/ceval.c#L5055> >> >> If you can prove the concept there, that would: >> >> 1. Directly handle the "from x import y" and "import x.y as name" cases >> 2. Provide a starting point for factoring out a "report missing module >> attribute" helper that could be shared with ModuleType >> >> As an example of querying _frozen_importlib state from C code, I'd >> point to https://github.com/python/cpython/blob/master/Python/import.c#L478 >> <https://github.com/python/cpython/blob/master/Python/import.c#L478> > > I had thought that the solution would be in the .py implementation of the > import > machinery not in the core C code. > > I was going to simply keep track of the names of the modules that are being > imported > and raise an exception if an import attempted to import a module that had not > completed > being imported. It seems from a quick loom at the code that this would be > practical. > > Are you saying that there is a subtle point about import and detection of > cycles that > means the work must be done in C?
It seemed that PyImport_ImportModuleLevelObject() always calls out the interp->importlib. For example: value = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__lock_unlock_module, abs_name, NULL); Where interp->importlib is the frozen importlib.py code I thought. I'd assumed that I would need to change the importlib.py code and build that as the frozen version to implement this. Barry > > Barry > > > > > >> >> Cheers, >> Nick. >> >> P.S. I also double checked that ImportError & AttributeError have >> compatible binary layouts, so dual inheritance from them works :) >> >> -- >> Nick Coghlan | ncogh...@gmail.com <mailto:ncogh...@gmail.com> | >> Brisbane, Australia >> _______________________________________________ >> Python-ideas mailing list >> Python-ideas@python.org <mailto:Python-ideas@python.org> >> https://mail.python.org/mailman/listinfo/python-ideas >> Code of Conduct: http://python.org/psf/codeofconduct/ >> > > _______________________________________________ > Python-ideas mailing list > Python-ideas@python.org <mailto:Python-ideas@python.org> > https://mail.python.org/mailman/listinfo/python-ideas > <https://mail.python.org/mailman/listinfo/python-ideas> > Code of Conduct: http://python.org/psf/codeofconduct/ > <http://python.org/psf/codeofconduct/>
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/