fix(settings): add AST compatibility for Python 3.12+
All checks were successful
CI / test (push) Successful in 51s
All checks were successful
CI / test (push) Successful in 51s
* Use `ast.Constant` as primary node for Python 3.8+ * Maintain backward compatibility with `ast.Num`, `ast.Str`, and `ast.NameConstant` * Prevent crashes on Python 3.12 where legacy nodes were removed * Add safe handling via `try/except AttributeError`
This commit is contained in:
10
settings.py
10
settings.py
@@ -499,12 +499,16 @@ else:
|
|||||||
else:
|
else:
|
||||||
# parse settings in a safe way, without exec
|
# parse settings in a safe way, without exec
|
||||||
current_settings_dict = {}
|
current_settings_dict = {}
|
||||||
|
# Python 3.8+ uses ast.Constant; older versions use ast.Num, ast.Str, ast.NameConstant
|
||||||
attributes = {
|
attributes = {
|
||||||
ast.Constant: 'value',
|
ast.Constant: 'value',
|
||||||
ast.NameConstant: 'value',
|
|
||||||
ast.Num: 'n',
|
|
||||||
ast.Str: 's',
|
|
||||||
}
|
}
|
||||||
|
try:
|
||||||
|
attributes[ast.Num] = 'n'
|
||||||
|
attributes[ast.Str] = 's'
|
||||||
|
attributes[ast.NameConstant] = 'value'
|
||||||
|
except AttributeError:
|
||||||
|
pass # Removed in Python 3.12+
|
||||||
module_node = ast.parse(settings_text)
|
module_node = ast.parse(settings_text)
|
||||||
for node in module_node.body:
|
for node in module_node.body:
|
||||||
if type(node) != ast.Assign:
|
if type(node) != ast.Assign:
|
||||||
|
|||||||
Reference in New Issue
Block a user