Skip to content

Commit 74acda7

Browse files
Accept supported template directory mutations
1 parent db7076e commit 74acda7

3 files changed

Lines changed: 46 additions & 1 deletion

File tree

crates/djls-project/src/settings/extraction.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1346,7 +1346,10 @@ fn setting_accepts_mutation(setting: KnownSetting, mutation: &PythonMutation) ->
13461346
KnownSetting::Templates => {
13471347
matches!(
13481348
mutation.operation,
1349-
PythonMutationOperation::Append | PythonMutationOperation::Extend
1349+
PythonMutationOperation::Append
1350+
| PythonMutationOperation::Extend
1351+
| PythonMutationOperation::Insert
1352+
| PythonMutationOperation::Remove
13501353
) && matches!(mutation.path.as_slice(), [PythonMutationPathSegment::Index(_), PythonMutationPathSegment::Key(key)] if key == "DIRS")
13511354
}
13521355
KnownSetting::StaticUrl | KnownSetting::StaticRoot | KnownSetting::StaticFilesDirs => false,

crates/djls-project/tests/settings.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1552,6 +1552,31 @@ fn template_dirs_resolve_settings_module_file() {
15521552
assert_eq!(dirs, vec![Utf8PathBuf::from("/proj/templates")]);
15531553
}
15541554

1555+
#[test]
1556+
fn template_dirs_follow_supported_nested_insert_and_remove_mutations() {
1557+
let mut db = TestDatabase::new();
1558+
let project = project_with_settings(
1559+
&mut db,
1560+
"myproject.settings",
1561+
&[(
1562+
"/proj/myproject/settings.py",
1563+
"TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/proj/first', '/proj/removed'], 'APP_DIRS': False}]
1564+
TEMPLATES[0]['DIRS'].insert(1, '/proj/inserted')
1565+
TEMPLATES[0]['DIRS'].remove('/proj/removed')",
1566+
)],
1567+
);
1568+
1569+
let dirs = complete_template_dirs(&db, project);
1570+
1571+
assert_eq!(
1572+
dirs,
1573+
[
1574+
Utf8PathBuf::from("/proj/first"),
1575+
Utf8PathBuf::from("/proj/inserted"),
1576+
]
1577+
);
1578+
}
1579+
15551580
#[test]
15561581
fn template_dirs_merge_equivalent_explicit_backend_branches() {
15571582
let mut db = TestDatabase::new();

crates/djls-project/tests/settings_extraction.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2892,6 +2892,23 @@ fn nested_template_dirs_append_and_extend_are_supported() {
28922892
assert_eq!(dirs[3]["value"]["resolved"], "/d");
28932893
}
28942894

2895+
#[test]
2896+
fn nested_template_dirs_insert_and_remove_are_supported() {
2897+
let settings = extract(
2898+
"TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/a', '/c', '/removed']}]
2899+
TEMPLATES[0]['DIRS'].insert(1, '/b')
2900+
TEMPLATES[0]['DIRS'].remove('/removed')",
2901+
);
2902+
let cases = cases(&settings, "/templates/cases");
2903+
let dirs = cases[0]["known"]["backends"][0]["dirs"].as_array().unwrap();
2904+
2905+
assert_eq!(cases.len(), 1, "{settings:#}");
2906+
assert_eq!(dirs.len(), 3, "{settings:#}");
2907+
assert_eq!(dirs[0]["value"]["resolved"], "/a");
2908+
assert_eq!(dirs[1]["value"]["resolved"], "/b");
2909+
assert_eq!(dirs[2]["value"]["resolved"], "/c");
2910+
}
2911+
28952912
#[test]
28962913
fn nested_template_dirs_mutation_updates_all_correlated_equal_lists() {
28972914
let settings = extract(

0 commit comments

Comments
 (0)