Skip to content

Commit 994f900

Browse files
committed
Add to_dict to native classes
1 parent a7f3689 commit 994f900

File tree

4 files changed

+52
-5
lines changed

4 files changed

+52
-5
lines changed

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "prelude-parser"
3-
version = "0.8.0"
3+
version = "0.9.0"
44
description = "Parses XML files exported from Prelude EDC into formats usable by Python."
55
edition = "2021"
66
license = "MIT"
@@ -16,7 +16,7 @@ crate-type = ["cdylib"]
1616
[dependencies]
1717
anyhow = "1.0.89"
1818
chrono = "0.4.38"
19-
prelude-xml-parser = { version = "0.6.1", features = ["python"] }
19+
prelude-xml-parser = { version = "0.7.0", features = ["python"] }
2020
pyo3 = { version = "0.22.3", features = ["extension-module"] }
2121
roxmltree = "0.20.0"
2222
serde = { version = "1.0.210", features = ["derive"] }

prelude_parser/_prelude_parser.pyi

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,24 @@ class Value:
1111
role: str
1212
when: datetime
1313

14+
def to_dict(self) -> dict: ...
15+
1416
class Reason:
1517
by: str
1618
by_unique_id: str | None
1719
role: str
1820
when: datetime
1921
value: str
2022

23+
def to_dict(self) -> dict: ...
24+
2125
class Entry:
2226
entry_id: str
2327
value: Value | None
2428
reason: Reason | None
2529

30+
def to_dict(self) -> dict: ...
31+
2632
class Field:
2733
name: str
2834
data_type: str | None
@@ -31,17 +37,23 @@ class Field:
3137
keep_history: bool
3238
entries: list[Entry] | None
3339

40+
def to_dict(self) -> dict: ...
41+
3442
class Category:
3543
name: str
3644
category_type: str
3745
highest_index: int
3846
fields: list[Field] | None
3947

48+
def to_dict(self) -> dict: ...
49+
4050
class State:
4151
value: str
4252
signer: str
4353
signer_unique_id: str
4454

55+
def to_dict(self) -> dict: ...
56+
4557
class Form:
4658
name: str
4759
last_modified: datetime | None
@@ -60,6 +72,8 @@ class Form:
6072
states: list[State] | None
6173
categories: list[Category] | None
6274

75+
def to_dict(self) -> dict: ...
76+
6377
class Patient:
6478
patient_id: str
6579
unique_id: str
@@ -70,6 +84,8 @@ class Patient:
7084
last_language: str | None
7185
forms: list[Form] | None
7286

87+
def to_dict(self) -> dict: ...
88+
7389
class Site:
7490
name: str
7591
unique_id: str
@@ -80,22 +96,32 @@ class Site:
8096
number_of_forms: int
8197
forms: list[Form] | None
8298

99+
def to_dict(self) -> dict: ...
100+
83101
class User:
84102
unique_id: str
85103
last_language: str | None
86104
creator: str
87105
number_of_forms: int
88106
forms: list[Form] | None
89107

108+
def to_dict(self) -> dict: ...
109+
90110
class SiteNative:
91111
sites: list[Site]
92112

113+
def to_dict(self) -> dict: ...
114+
93115
class SubjectNative:
94116
patients: list[Patient]
95117

118+
def to_dict(self) -> dict: ...
119+
96120
class UserNative:
97121
users: list[User]
98122

123+
def to_dict(self) -> dict: ...
124+
99125
def _parse_flat_file_to_dict(
100126
xml_file: str | Path, *, short_names: bool = False
101127
) -> dict[str, FlatFormInfo]: ...

tests/test_parser.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ def test_parse_site_native_string(site_native_xml):
2929
assert result.sites[0].name == "Some Site"
3030

3131

32+
def test_site_native_to_dict(site_native_xml):
33+
result = parse_site_native_file(site_native_xml)
34+
result_dict = result.to_dict()
35+
36+
assert result_dict["sites"][0]["name"] == "Some Site"
37+
38+
3239
def test_parse_subject_native_file(subject_native_xml):
3340
result = parse_subject_native_file(subject_native_xml)
3441

@@ -43,6 +50,13 @@ def test_parse_subject_native_string(subject_native_xml):
4350
assert result.patients[0].patient_id == "ABC-001"
4451

4552

53+
def test_subject_native_to_dict(subject_native_xml):
54+
result = parse_subject_native_file(subject_native_xml)
55+
result_dict = result.to_dict()
56+
57+
assert result_dict["patients"][0]["patient_id"] == "ABC-001"
58+
59+
4660
def test_parse_user_native_file(user_native_xml):
4761
result = parse_user_native_file(user_native_xml)
4862

@@ -57,6 +71,13 @@ def test_parse_user_native_string(user_native_xml):
5771
assert result.users[0].unique_id == "1691421275437"
5872

5973

74+
def test_user_native_to_dict(user_native_xml):
75+
result = parse_user_native_file(user_native_xml)
76+
result_dict = result.to_dict()
77+
78+
assert result_dict["users"][0]["unique_id"] == "1691421275437"
79+
80+
6081
def test_parse_to_classes(test_file_1):
6182
result = parse_to_classes(test_file_1)
6283
assert len(result) == 2

0 commit comments

Comments
 (0)