Skip to content

Commit 8573a44

Browse files
committed
Fix tests, update backwards compatability function.
1 parent f9b999a commit 8573a44

File tree

7 files changed

+429
-48
lines changed

7 files changed

+429
-48
lines changed

datashuttle/configs/canonical_configs.py

Lines changed: 59 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
if TYPE_CHECKING:
2424
from datashuttle.configs.config_class import Configs
25-
import copy
2625
from pathlib import Path
2726

2827
import typeguard
@@ -367,70 +366,82 @@ def in_place_update_narrow_datatypes_if_required(user_settings: dict):
367366
datatypes into the user datatype dict results in the wrong order).
368367
369368
"""
369+
# Find out what is included in the loaded config file,
370+
# that determines its version
371+
370372
has_narrow_datatypes = isinstance(
371373
user_settings["tui"]["create_checkboxes_on"]["behav"], dict
372374
) # added 'narrow datatype' v0.6.0 with major refactor to dict
373375

374376
all_narrow_datatypes = quick_get_narrow_datatypes()
375377

376-
is_not_missing_narrow_datatypes = all(
378+
is_not_missing_any_narrow_datatypes = all(
377379
[
378-
dtype in all_narrow_datatypes
379-
for dtype in user_settings["tui"]["create_checkboxes_on"]
380+
dtype in user_settings["tui"]["create_checkboxes_on"]
381+
for dtype in all_narrow_datatypes
380382
]
381383
)
382384

383-
if is_not_missing_narrow_datatypes:
385+
if is_not_missing_any_narrow_datatypes:
384386
assert all(
385387
[
386-
dtype in all_narrow_datatypes
387-
for dtype in user_settings["tui"]["transfer_checkboxes_on"]
388+
dtype in user_settings["tui"]["transfer_checkboxes_on"]
389+
for dtype in all_narrow_datatypes
388390
]
389-
)
391+
), "Somehow there are datatypes missing in `transfer_checkboxes_on` but not `create_checkboxes_on`"
390392

391-
if has_narrow_datatypes and is_not_missing_narrow_datatypes:
393+
if has_narrow_datatypes and is_not_missing_any_narrow_datatypes:
392394
return
393395

394-
# Copy TUI defaults that include narrow-datatype defaults
395-
396+
# Make a dictionary of the canonical configs to fill in with whatever
397+
# user data exists. This ensures the order of the keys is always the same.
396398
canonical_tui_configs = get_tui_config_defaults()
397399

398-
new_create_checkbox_configs = copy.deepcopy(
399-
canonical_tui_configs["tui"]["create_checkboxes_on"]
400-
)
401-
new_transfer_checkbox_configs = copy.deepcopy(
402-
canonical_tui_configs["tui"]["transfer_checkboxes_on"]
403-
)
404-
405-
# Copy the pre-existing settings for broad datatypes
406-
for key in ["behav", "ephys", "funcimg", "anat"]:
407-
new_create_checkbox_configs[key]["on"] = user_settings["tui"][
408-
"create_checkboxes_on"
409-
][key]
410-
new_transfer_checkbox_configs[key]["on"] = user_settings["tui"][
411-
"transfer_checkboxes_on"
412-
][key]
400+
new_checkbox_configs = {
401+
"create_checkboxes_on": (
402+
canonical_tui_configs["tui"]["create_checkboxes_on"]
403+
),
404+
"transfer_checkboxes_on": (
405+
canonical_tui_configs["tui"]["transfer_checkboxes_on"]
406+
),
407+
}
413408

414-
# Copy the pre-existing settings for the transfer checkboxes
409+
# Copy the pre-existing settings unique to the transfer checkboxes
415410
for key in ["all", "all_datatype", "all_non_datatype"]:
416-
new_transfer_checkbox_configs[key]["on"] = user_settings["tui"][
417-
"transfer_checkboxes_on"
418-
][key]
419-
420-
for narrow_datatype in all_narrow_datatypes:
421-
if (
422-
narrow_datatype
423-
not in user_settings["tui"]["create_checkboxes_on"].keys()
424-
):
425-
user_settings["tui"][
426-
"create_checkboxes_on"
427-
] = new_create_checkbox_configs
428-
429-
for narrow_datatype in all_narrow_datatypes:
430-
if (
431-
narrow_datatype
432-
not in user_settings["tui"]["transfer_checkboxes_on"].keys()
433-
):
434-
user_settings["tui"][
435-
"transfer_checkboxes_on"
436-
] = new_transfer_checkbox_configs
411+
if has_narrow_datatypes:
412+
new_checkbox_configs["transfer_checkboxes_on"][key] = (
413+
user_settings["tui"]["transfer_checkboxes_on"][key]
414+
)
415+
else:
416+
new_checkbox_configs["transfer_checkboxes_on"][key]["on"] = (
417+
user_settings["tui"]["transfer_checkboxes_on"][key]
418+
)
419+
420+
# Copy any datatype information that exists. Broad datatypes will all be there
421+
# but some narrow datatypes might be missing.
422+
for checkbox_type in ["create_checkboxes_on", "transfer_checkboxes_on"]:
423+
424+
datatypes_that_user_has = list(
425+
user_settings["tui"][checkbox_type].keys()
426+
)
427+
428+
for dtype in get_datatypes():
429+
430+
if dtype in datatypes_that_user_has:
431+
432+
if has_narrow_datatypes:
433+
new_checkbox_configs[checkbox_type][dtype] = user_settings[
434+
"tui"
435+
][checkbox_type][dtype]
436+
else:
437+
# in versions < 0.6.0 the datatype settings was only a bool
438+
# indicating whether the checkbox is on or not. New versions
439+
# are a dictionary indicating if the checkbox is on ("on")
440+
# and displayed ("displayed").
441+
new_checkbox_configs[checkbox_type][dtype]["on"] = (
442+
user_settings["tui"][checkbox_type][dtype]
443+
)
444+
445+
user_settings["tui"][checkbox_type] = new_checkbox_configs[
446+
checkbox_type
447+
]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
This config and persistent settings are copied from a project created in the GUI
2+
for the purposes of this regression test. They key information is:
3+
4+
1) The project is called "test_project"
5+
2) All create and transfer checkboxes are not displayed, except for "f2pe".
6+
This is so we can check the persistent settings are updated as expected.
7+
3) The
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
local_path: old_ver
2+
central_path: old_ver
3+
connection_method: local_filesystem
4+
central_host_id: null
5+
central_host_username: null
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
tui:
2+
create_checkboxes_on:
3+
behav: false
4+
ephys: false
5+
funcimg: false
6+
anat: false
7+
transfer_checkboxes_on:
8+
behav: false
9+
ephys: false
10+
funcimg: false
11+
anat: false
12+
all: false
13+
all_datatype: false
14+
all_non_datatype: false
15+
top_level_folder_select:
16+
create_tab: rawdata
17+
toplevel_transfer: rawdata
18+
custom_transfer: rawdata
19+
bypass_validation: false
20+
overwrite_existing_files: never
21+
dry_run: false
22+
name_templates:
23+
'on': false
24+
sub: null
25+
ses: null
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
local_path: old_ver
2+
central_path: old_ver
3+
connection_method: local_filesystem
4+
central_host_id: null
5+
central_host_username: null
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
tui:
2+
create_checkboxes_on:
3+
ephys:
4+
'on': false
5+
displayed: false
6+
behav:
7+
'on': false
8+
displayed: false
9+
funcimg:
10+
'on': false
11+
displayed: false
12+
anat:
13+
'on': false
14+
displayed: false
15+
ecephys:
16+
'on': false
17+
displayed: false
18+
icephys:
19+
'on': false
20+
displayed: false
21+
cscope:
22+
'on': false
23+
displayed: false
24+
f2pe:
25+
'on': false
26+
displayed: true
27+
fmri:
28+
'on': false
29+
displayed: false
30+
fusi:
31+
'on': false
32+
displayed: false
33+
2pe:
34+
'on': false
35+
displayed: false
36+
bf:
37+
'on': false
38+
displayed: false
39+
cars:
40+
'on': false
41+
displayed: false
42+
conf:
43+
'on': false
44+
displayed: false
45+
dic:
46+
'on': false
47+
displayed: false
48+
df:
49+
'on': false
50+
displayed: false
51+
fluo:
52+
'on': false
53+
displayed: false
54+
mpe:
55+
'on': false
56+
displayed: false
57+
nlo:
58+
'on': false
59+
displayed: false
60+
oct:
61+
'on': false
62+
displayed: false
63+
pc:
64+
'on': false
65+
displayed: false
66+
pli:
67+
'on': false
68+
displayed: false
69+
sem:
70+
'on': false
71+
displayed: false
72+
spim:
73+
'on': false
74+
displayed: false
75+
sr:
76+
'on': false
77+
displayed: false
78+
tem:
79+
'on': false
80+
displayed: false
81+
uct:
82+
'on': false
83+
displayed: false
84+
mri:
85+
'on': false
86+
displayed: false
87+
transfer_checkboxes_on:
88+
all:
89+
'on': false
90+
displayed: false
91+
all_datatype:
92+
'on': false
93+
displayed: false
94+
all_non_datatype:
95+
'on': false
96+
displayed: false
97+
ephys:
98+
'on': false
99+
displayed: false
100+
behav:
101+
'on': false
102+
displayed: false
103+
funcimg:
104+
'on': false
105+
displayed: false
106+
anat:
107+
'on': false
108+
displayed: false
109+
ecephys:
110+
'on': false
111+
displayed: false
112+
icephys:
113+
'on': false
114+
displayed: false
115+
cscope:
116+
'on': false
117+
displayed: false
118+
f2pe:
119+
'on': false
120+
displayed: true
121+
fmri:
122+
'on': false
123+
displayed: false
124+
fusi:
125+
'on': false
126+
displayed: false
127+
2pe:
128+
'on': false
129+
displayed: false
130+
bf:
131+
'on': false
132+
displayed: false
133+
cars:
134+
'on': false
135+
displayed: false
136+
conf:
137+
'on': false
138+
displayed: false
139+
dic:
140+
'on': false
141+
displayed: false
142+
df:
143+
'on': false
144+
displayed: false
145+
fluo:
146+
'on': false
147+
displayed: false
148+
mpe:
149+
'on': false
150+
displayed: false
151+
nlo:
152+
'on': false
153+
displayed: false
154+
oct:
155+
'on': false
156+
displayed: false
157+
pc:
158+
'on': false
159+
displayed: false
160+
pli:
161+
'on': false
162+
displayed: false
163+
sem:
164+
'on': false
165+
displayed: false
166+
spim:
167+
'on': false
168+
displayed: false
169+
sr:
170+
'on': false
171+
displayed: false
172+
tem:
173+
'on': false
174+
displayed: false
175+
uct:
176+
'on': false
177+
displayed: false
178+
mri:
179+
'on': false
180+
displayed: false
181+
top_level_folder_select:
182+
create_tab: rawdata
183+
toplevel_transfer: rawdata
184+
custom_transfer: rawdata
185+
bypass_validation: false
186+
overwrite_existing_files: never
187+
dry_run: false
188+
name_templates:
189+
'on': false
190+
sub: null
191+
ses: null

0 commit comments

Comments
 (0)