#36956: import_string logic for AttributeError is too broad, can be improved
under
Python 3.10+
-------------------------------------+-------------------------------------
Reporter: Glenn Matthews | Type:
| Cleanup/optimization
Status: new | Component: Utilities
Version: 6.0 | Severity: Normal
Keywords: import_string | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
The logic in `import_string` that maps `AttributeError` to `ImportError`
is overly-broad and can be misleading, as ''any'' AttributeError raised
while importing the requested module will cause Django to report (perhaps
misleadingly) that the ''specific'' attribute being requested is not
defined:
{{{
try:
return cached_import(module_path, class_name)
except AttributeError as err:
raise ImportError(
'Module "%s" does not define a "%s" attribute/class'
% (module_path, class_name)
) from err
}}}
In Python 3.10 and later, `AttributeError` has been enhanced
(https://docs.python.org/3/library/exceptions.html#AttributeError) to
include explicit `name` and `obj` parameters, making it easy to tell
exactly which specific attribute the error is attributed to.
My proposal is that the above logic should be enhanced to something like
the following:
{{{
try:
return cached_import(module_path, class_name)
except AttributeError as err:
if err.name and err.name != class_name:
raise
raise ImportError(
'Module "%s" does not define a "%s" attribute/class'
% (module_path, class_name)
) from err
}}}
If accepted, I'll be happy to open a PR as described.
--
Ticket URL: <https://code.djangoproject.com/ticket/36956>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/0107019c9b2c63dc-c7fbe675-5188-4a08-b20c-f76769b95967-000000%40eu-central-1.amazonses.com.