Skip to content

Commit 71b2515

Browse files
committed
Merge branch 'release/1.6.0'
2 parents 7af6c6b + 75dbdb3 commit 71b2515

File tree

8 files changed

+206
-74
lines changed

8 files changed

+206
-74
lines changed

CHANGELOG

+21
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
Changelog
22
=========
3+
## [1.6.0] - 2020-12-15
4+
### Summary
5+
This change was implemented after getting feedback from OHSU. Some ADRCs do
6+
not have the optional forms like A2 or A3 in their REDCap project at all, since
7+
they will not be used for that center. NACCulator used to run with the
8+
requirement that all forms be present in a REDCap project, whether they were
9+
optional or not. This change is very similar to the one made previously that
10+
made the CLS, Z1, and C1 forms optional for the REDCap csv input.
11+
I also fixed a bug in the FTLD FVP builder that would cause it to look for the
12+
IVP Z1X form.
13+
14+
### added
15+
* Make optional forms for FTLD optional in REDCap project
16+
* Make all optional UDS3 forms optional in REDCap project
17+
18+
19+
### changed
20+
* Fix cruft in FVP builder (Samantha Emerson)
21+
* Update README to account for cappy install complication
22+
* Fix ftld fvp builder to take followup Z1X instead of initial
23+
324
## [1.5.0] - 2020-12-08
425
### Summary
526

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ HOW TO Convert from REDCap to NACC
1414

1515
To install NACCulator, run:
1616

17+
$ python3 -m pip install git+https://github.com/ctsit/cappy.git@2.0.0#egg=cappy-2.0.0
1718
$ pip3 install git+https://github.com/ctsit/nacculator.git
1819

1920
Once the project data is exported from REDCap to the CSV file `data.csv`, run:

nacc/ftld/fvp/builder.py

+21-9
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,32 @@ def build_ftld_fvp_form(record: dict, err=sys.stderr):
2727
# Forms B3F, B9F, C1F, C2F, C3F, E2F, and E3F are REQUIRED.
2828
# Forms A3A, C4F, C5F, and C6F are OPTIONAL and must be specifically
2929
# marked as present for nacculator to process them
30-
if record['ivp_z1x_complete'] in ['1', '2']:
31-
if record['ftda3afs'] == '1':
32-
add_a3a(record, packet)
30+
if record['fvp_z1x_complete'] in ['1', '2']:
31+
try:
32+
if record['fu_ftda3afs'] == '1':
33+
add_a3a(record, packet)
34+
except KeyError:
35+
pass
3336
add_b3f(record, packet)
3437
add_b9f(record, packet)
3538
add_c1f(record, packet)
3639
add_c2f(record, packet)
3740
add_c3f(record, packet)
38-
if record['ftdc4fs'] == '1':
39-
add_c4f(record, packet)
40-
if record['ftdc5fs'] == '1':
41-
add_c5f(record, packet)
42-
if record['ftdc6fs'] == '1':
43-
add_c6f(record, packet)
41+
try:
42+
if record['fu_ftdc4fs'] == '1':
43+
add_c4f(record, packet)
44+
except KeyError:
45+
pass
46+
try:
47+
if record['fu_ftdc5fs'] == '1':
48+
add_c5f(record, packet)
49+
except KeyError:
50+
pass
51+
try:
52+
if record['fu_ftdc6fs'] == '1':
53+
add_c6f(record, packet)
54+
except KeyError:
55+
pass
4456
else:
4557
print("ptid " + str(record['ptid']) +
4658
": No Z1X form found.", file=err)

nacc/ftld/ivp/builder.py

+20-8
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,31 @@ def build_ftld_ivp_form(record: dict, err=sys.stderr):
2828
# Forms A3A, C4F, C5F, and C6F are OPTIONAL and must be specifically
2929
# marked as present for nacculator to process them
3030
if record['ivp_z1x_complete'] in ['1', '2']:
31-
if record['ftda3afs'] == '1':
32-
add_a3a(record, packet)
31+
try:
32+
if record['ftda3afs'] == '1':
33+
add_a3a(record, packet)
34+
except KeyError:
35+
pass
3336
add_b3f(record, packet)
3437
add_b9f(record, packet)
3538
add_c1f(record, packet)
3639
add_c2f(record, packet)
3740
add_c3f(record, packet)
38-
if record['ftdc4fs'] == '1':
39-
add_c4f(record, packet)
40-
if record['ftdc5fs'] == '1':
41-
add_c5f(record, packet)
42-
if record['ftdc6fs'] == '1':
43-
add_c6f(record, packet)
41+
try:
42+
if record['ftdc4fs'] == '1':
43+
add_c4f(record, packet)
44+
except KeyError:
45+
pass
46+
try:
47+
if record['ftdc5fs'] == '1':
48+
add_c5f(record, packet)
49+
except KeyError:
50+
pass
51+
try:
52+
if record['ftdc6fs'] == '1':
53+
add_c6f(record, packet)
54+
except KeyError:
55+
pass
4456
else:
4557
print("ptid " + str(record['ptid']) +
4658
": No Z1X form found.", file=err)

nacc/redcap2nacc.py

+2
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ def check_redcap_event(options, record) -> bool:
198198
form_match_z1 = record['ivp_z1_complete']
199199
except KeyError:
200200
form_match_z1 = ''
201+
record['ivp_z1_complete'] = ''
201202
form_match_z1x = record['ivp_z1x_complete']
202203
if form_match_z1 in ['0', ''] and form_match_z1x in ['0', '']:
203204
return False
@@ -207,6 +208,7 @@ def check_redcap_event(options, record) -> bool:
207208
form_match_z1 = record['fvp_z1_complete']
208209
except KeyError:
209210
form_match_z1 = ''
211+
record['ivp_z1_complete'] = ''
210212
form_match_z1x = record['fvp_z1x_complete']
211213
if form_match_z1 in ['0', ''] and form_match_z1x in ['0', '']:
212214
return False

nacc/uds3/fvp/builder.py

+70-28
Original file line numberDiff line numberDiff line change
@@ -19,37 +19,79 @@ def build_uds3_fvp_form(record, err=sys.stderr):
1919
add_z1_or_z1x(record, packet)
2020
add_a1(record, packet)
2121
if record['fvp_z1x_complete'] in ['1', '2']:
22-
if record['fu_a2sub'] == '1':
23-
add_a2(record, packet)
24-
if record['fu_a3sub'] == '1':
25-
add_a3(record, packet)
26-
if record['fu_a4sub'] == '1':
27-
add_a4(record, packet)
28-
if record['fu_b1sub'] == '1':
29-
add_b1(record, packet)
22+
try:
23+
if record['fu_a2sub'] == '1':
24+
add_a2(record, packet)
25+
except KeyError:
26+
pass
27+
try:
28+
if record['fu_a3sub'] == '1':
29+
add_a3(record, packet)
30+
except KeyError:
31+
pass
32+
try:
33+
if record['fu_a4sub'] == '1':
34+
add_a4(record, packet)
35+
except KeyError:
36+
pass
37+
try:
38+
if record['fu_b1sub'] == '1':
39+
add_b1(record, packet)
40+
except KeyError:
41+
pass
3042
add_b4(record, packet)
31-
if record['fu_b5sub'] == '1':
32-
add_b5(record, packet)
33-
if record['fu_b6sub'] == '1':
34-
add_b6(record, packet)
35-
if record['fu_b7sub'] == '1':
36-
add_b7(record, packet)
43+
try:
44+
if record['fu_b5sub'] == '1':
45+
add_b5(record, packet)
46+
except KeyError:
47+
pass
48+
try:
49+
if record['fu_b6sub'] == '1':
50+
add_b6(record, packet)
51+
except KeyError:
52+
pass
53+
try:
54+
if record['fu_b7sub'] == '1':
55+
add_b7(record, packet)
56+
except KeyError:
57+
pass
3758
elif record['fvp_z1_complete'] in ['1', '2']:
38-
if record['fu_a2_sub'] == '1':
39-
add_a2(record, packet)
40-
if record['fu_a3_sub'] == '1':
41-
add_a3(record, packet)
42-
if record['fu_a4_sub'] == '1':
43-
add_a4(record, packet)
44-
if record['fu_b1_sub'] == '1':
45-
add_b1(record, packet)
59+
try:
60+
if record['fu_a2_sub'] == '1':
61+
add_a2(record, packet)
62+
except KeyError:
63+
pass
64+
try:
65+
if record['fu_a3_sub'] == '1':
66+
add_a3(record, packet)
67+
except KeyError:
68+
pass
69+
try:
70+
if record['fu_a4_sub'] == '1':
71+
add_a4(record, packet)
72+
except KeyError:
73+
pass
74+
try:
75+
if record['fu_b1_sub'] == '1':
76+
add_b1(record, packet)
77+
except KeyError:
78+
pass
4679
add_b4(record, packet)
47-
if record['fu_b5_sub'] == '1':
48-
add_b5(record, packet)
49-
if record['fu_b6_sub'] == '1':
50-
add_b6(record, packet)
51-
if record['fu_b7_sub'] == '1':
52-
add_b7(record, packet)
80+
try:
81+
if record['fu_b5_sub'] == '1':
82+
add_b5(record, packet)
83+
except KeyError:
84+
pass
85+
try:
86+
if record['fu_b6_sub'] == '1':
87+
add_b6(record, packet)
88+
except KeyError:
89+
pass
90+
try:
91+
if record['fu_b7_sub'] == '1':
92+
add_b7(record, packet)
93+
except KeyError:
94+
pass
5395
else:
5496
print("ptid " + str(record['ptid']) +
5597
": No Z1X or Z1 form found.", file=err)

nacc/uds3/ivp/builder.py

+70-28
Original file line numberDiff line numberDiff line change
@@ -19,39 +19,81 @@ def build_uds3_ivp_form(record, err=sys.stderr):
1919
add_z1_or_z1x(record, packet)
2020
add_a1(record, packet)
2121
if record['ivp_z1x_complete'] in ['1', '2']:
22-
if record['a2sub'] == '1':
23-
add_a2(record, packet)
24-
if record['a3sub'] == '1':
25-
add_a3(record, packet)
26-
if record['a4sub'] == '1':
27-
add_a4(record, packet)
22+
try:
23+
if record['a2sub'] == '1':
24+
add_a2(record, packet)
25+
except KeyError:
26+
pass
27+
try:
28+
if record['a3sub'] == '1':
29+
add_a3(record, packet)
30+
except KeyError:
31+
pass
32+
try:
33+
if record['a4sub'] == '1':
34+
add_a4(record, packet)
35+
except KeyError:
36+
pass
2837
add_a5(record, packet)
29-
if record['b1sub'] == '1':
30-
add_b1(record, packet)
38+
try:
39+
if record['b1sub'] == '1':
40+
add_b1(record, packet)
41+
except KeyError:
42+
pass
3143
add_b4(record, packet)
32-
if record['b5sub'] == '1':
33-
add_b5(record, packet)
34-
if record['b6sub'] == '1':
35-
add_b6(record, packet)
36-
if record['b7sub'] == '1':
37-
add_b7(record, packet)
44+
try:
45+
if record['b5sub'] == '1':
46+
add_b5(record, packet)
47+
except KeyError:
48+
pass
49+
try:
50+
if record['b6sub'] == '1':
51+
add_b6(record, packet)
52+
except KeyError:
53+
pass
54+
try:
55+
if record['b7sub'] == '1':
56+
add_b7(record, packet)
57+
except KeyError:
58+
pass
3859
elif record['ivp_z1_complete'] in ['1', '2']:
39-
if record['a2_sub'] == '1':
40-
add_a2(record, packet)
41-
if record['a3_sub'] == '1':
42-
add_a3(record, packet)
43-
if record['a4_sub'] == '1':
44-
add_a4(record, packet)
60+
try:
61+
if record['a2_sub'] == '1':
62+
add_a2(record, packet)
63+
except KeyError:
64+
pass
65+
try:
66+
if record['a3_sub'] == '1':
67+
add_a3(record, packet)
68+
except KeyError:
69+
pass
70+
try:
71+
if record['a4_sub'] == '1':
72+
add_a4(record, packet)
73+
except KeyError:
74+
pass
4575
add_a5(record, packet)
46-
if record['b1_sub'] == '1':
47-
add_b1(record, packet)
76+
try:
77+
if record['b1_sub'] == '1':
78+
add_b1(record, packet)
79+
except KeyError:
80+
pass
4881
add_b4(record, packet)
49-
if record['b5_sub'] == '1':
50-
add_b5(record, packet)
51-
if record['b6_sub'] == '1':
52-
add_b6(record, packet)
53-
if record['b7_sub'] == '1':
54-
add_b7(record, packet)
82+
try:
83+
if record['b5_sub'] == '1':
84+
add_b5(record, packet)
85+
except KeyError:
86+
pass
87+
try:
88+
if record['b6_sub'] == '1':
89+
add_b6(record, packet)
90+
except KeyError:
91+
pass
92+
try:
93+
if record['b7_sub'] == '1':
94+
add_b7(record, packet)
95+
except KeyError:
96+
pass
5597
else:
5698
print("ptid " + str(record['ptid']) +
5799
": No Z1X or Z1 form found.", file=err)

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from setuptools import setup, find_packages
88

9-
VERSION = "1.5.0"
9+
VERSION = "1.6.0"
1010

1111
setup(
1212
name="nacculator",

0 commit comments

Comments
 (0)