Skip to content

Commit 1a2761f

Browse files
authored
Merge pull request #159 from pbs-data-solutions/entry-reviewd-by
Add missing fields to entry
2 parents 02b6f08 + d9bd8e5 commit 1a2761f

File tree

4 files changed

+136
-1
lines changed

4 files changed

+136
-1
lines changed

src/lib.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,9 @@ pub fn parse_site_native_file(xml_path: &Path) -> Result<SiteNative, Error> {
180180
/// keep_history: true,
181181
/// entries: Some(vec![Entry {
182182
/// entry_id: "1".to_string(),
183+
/// reviewed_by: None,
184+
/// reviewed_by_unique_id: None,
185+
/// reviewed_by_when: None,
183186
/// value: Some(Value {
184187
/// by: "Paul Sanders".to_string(),
185188
/// by_unique_id: Some("1681162687395".to_string()),
@@ -209,6 +212,9 @@ pub fn parse_site_native_file(xml_path: &Path) -> Result<SiteNative, Error> {
209212
/// entries: Some(vec![
210213
/// Entry {
211214
/// entry_id: "1".to_string(),
215+
/// reviewed_by: None,
216+
/// reviewed_by_unique_id: None,
217+
/// reviewed_by_when: None,
212218
/// value: Some(Value {
213219
/// by: "set from calculation".to_string(),
214220
/// by_unique_id: None,
@@ -234,6 +240,9 @@ pub fn parse_site_native_file(xml_path: &Path) -> Result<SiteNative, Error> {
234240
/// },
235241
/// Entry {
236242
/// entry_id: "2".to_string(),
243+
/// reviewed_by: None,
244+
/// reviewed_by_unique_id: None,
245+
/// reviewed_by_when: None,
237246
/// value: Some(Value {
238247
/// by: "set from calculation".to_string(),
239248
/// by_unique_id: None,
@@ -294,6 +303,9 @@ pub fn parse_site_native_file(xml_path: &Path) -> Result<SiteNative, Error> {
294303
/// keep_history: true,
295304
/// entries: Some(vec![Entry {
296305
/// entry_id: "1".to_string(),
306+
/// reviewed_by: None,
307+
/// reviewed_by_unique_id: None,
308+
/// reviewed_by_when: None,
297309
/// value: Some(Value {
298310
/// by: "Paul Sanders".to_string(),
299311
/// by_unique_id: Some("1681162687395".to_string()),
@@ -383,6 +395,9 @@ pub fn parse_site_native_file(xml_path: &Path) -> Result<SiteNative, Error> {
383395
/// keep_history: true,
384396
/// entries: Some(vec![Entry {
385397
/// entry_id: "1".to_string(),
398+
/// reviewed_by: None,
399+
/// reviewed_by_unique_id: None,
400+
/// reviewed_by_when: None,
386401
/// value: Some(Value {
387402
/// by: "Paul Sanders".to_string(),
388403
/// by_unique_id: Some("1681162687395".to_string()),
@@ -536,6 +551,9 @@ pub fn parse_subject_native_file(xml_path: &Path) -> Result<SubjectNative, Error
536551
/// keep_history: true,
537552
/// entries: Some(vec![Entry {
538553
/// entry_id: "1".to_string(),
554+
/// reviewed_by: None,
555+
/// reviewed_by_unique_id: None,
556+
/// reviewed_by_when: None,
539557
/// value: Some(Value {
540558
/// by: "Paul Sanders".to_string(),
541559
/// by_unique_id: Some("1681162687395".to_string()),
@@ -606,6 +624,9 @@ pub fn parse_subject_native_file(xml_path: &Path) -> Result<SubjectNative, Error
606624
/// keep_history: true,
607625
/// entries: Some(vec![Entry {
608626
/// entry_id: "1".to_string(),
627+
/// reviewed_by: None,
628+
/// reviewed_by_unique_id: None,
629+
/// reviewed_by_when: None,
609630
/// value: Some(Value {
610631
/// by: "Paul Sanders".to_string(),
611632
/// by_unique_id: Some("1681162687395".to_string()),
@@ -1015,6 +1036,9 @@ pub fn parse_user_native_file(xml_path: &Path) -> Result<UserNative, Error> {
10151036
/// keep_history: true,
10161037
/// entries: Some(vec![Entry {
10171038
/// entry_id: "1".to_string(),
1039+
/// reviewed_by: None,
1040+
/// reviewed_by_unique_id: None,
1041+
/// reviewed_by_when: None,
10181042
/// value: Some(Value {
10191043
/// by: "Paul Sanders".to_string(),
10201044
/// by_unique_id: Some("1681162687395".to_string()),
@@ -1047,6 +1071,9 @@ pub fn parse_user_native_file(xml_path: &Path) -> Result<UserNative, Error> {
10471071
/// entries: Some(vec![
10481072
/// Entry {
10491073
/// entry_id: "1".to_string(),
1074+
/// reviewed_by: None,
1075+
/// reviewed_by_unique_id: None,
1076+
/// reviewed_by_when: None,
10501077
/// value: Some(Value {
10511078
/// by: "set from calculation".to_string(),
10521079
/// by_unique_id: None,

src/native/common.rs

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,18 +238,74 @@ pub struct Entry {
238238
#[serde(alias = "@id")]
239239
#[serde(alias = "entryId")]
240240
pub entry_id: String,
241+
242+
#[serde(rename = "reviewedBy")]
243+
#[serde(alias = "@reviewedBy")]
244+
#[serde(alias = "reviewedBy")]
245+
#[serde(
246+
default = "default_string_none",
247+
deserialize_with = "deserialize_empty_string_as_none"
248+
)]
249+
pub reviewed_by: Option<String>,
250+
251+
#[serde(rename = "reviewedByUniqueId")]
252+
#[serde(alias = "@reviewedByUniqueId")]
253+
#[serde(alias = "reviewedByUniqueId")]
254+
#[serde(
255+
default = "default_string_none",
256+
deserialize_with = "deserialize_empty_string_as_none"
257+
)]
258+
pub reviewed_by_unique_id: Option<String>,
259+
260+
#[serde(rename = "reviewedByWhen")]
261+
#[serde(alias = "@reviewedByWhen")]
262+
#[serde(alias = "reviewedByWhen")]
263+
#[serde(
264+
default = "default_datetime_none",
265+
deserialize_with = "deserialize_empty_string_as_none_datetime"
266+
)]
267+
pub reviewed_by_when: Option<DateTime<Utc>>,
268+
241269
pub value: Option<Value>,
242270
pub reason: Option<Reason>,
243271
}
244272

245273
#[cfg(feature = "python")]
246274
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
247-
#[pyclass(get_all)]
275+
#[pyclass]
248276
pub struct Entry {
249277
#[serde(rename = "entryId")]
250278
#[serde(alias = "@id")]
251279
#[serde(alias = "entryId")]
252280
pub entry_id: String,
281+
282+
#[serde(rename = "reviewedBy")]
283+
#[serde(alias = "@reviewedBy")]
284+
#[serde(alias = "reviewedBy")]
285+
#[serde(
286+
default = "default_string_none",
287+
deserialize_with = "deserialize_empty_string_as_none"
288+
)]
289+
pub reviewed_by: Option<String>,
290+
291+
#[serde(rename = "reviewedByUniqueId")]
292+
#[serde(alias = "@reviewedByUniqueId")]
293+
#[serde(alias = "reviewedByUniqueId")]
294+
#[serde(
295+
default = "default_string_none",
296+
deserialize_with = "deserialize_empty_string_as_none"
297+
)]
298+
pub reviewed_by_unique_id: Option<String>,
299+
300+
#[serde(rename = "reviewedByWhen")]
301+
#[serde(alias = "@reviewedByWhen")]
302+
#[serde(alias = "reviewedByWhen")]
303+
#[serde(
304+
default = "default_datetime_none",
305+
deserialize_with = "deserialize_empty_string_as_none_datetime"
306+
)]
307+
pub reviewed_by_when: Option<DateTime<Utc>>,
308+
253309
pub value: Option<Value>,
254310
pub reason: Option<Reason>,
255311
}
@@ -262,6 +318,21 @@ impl Entry {
262318
Ok(self.entry_id.clone())
263319
}
264320

321+
#[getter]
322+
fn reviewed_by(&self) -> PyResult<Option<String>> {
323+
Ok(self.reviewed_by.clone())
324+
}
325+
326+
#[getter]
327+
fn reviewed_by_unique_id(&self) -> PyResult<Option<String>> {
328+
Ok(self.reviewed_by_unique_id.clone())
329+
}
330+
331+
#[getter]
332+
fn reviewed_by_when<'py>(&self, py: Python<'py>) -> PyResult<Option<Bound<'py, PyDateTime>>> {
333+
to_py_datetime_option(py, &self.reviewed_by_when)
334+
}
335+
265336
#[getter]
266337
fn value(&self) -> PyResult<Option<Value>> {
267338
Ok(self.value.clone())
@@ -275,6 +346,12 @@ impl Entry {
275346
pub fn to_dict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
276347
let dict = PyDict::new(py);
277348
dict.set_item("entry_id", &self.entry_id)?;
349+
dict.set_item("reviewed_by", &self.reviewed_by)?;
350+
dict.set_item("reviewed_by_unique_id", &self.reviewed_by_unique_id)?;
351+
dict.set_item(
352+
"reviewed_by_when",
353+
to_py_datetime_option(py, &self.reviewed_by_when)?,
354+
)?;
278355
if let Some(value) = &self.value {
279356
dict.set_item("value", value.to_dict(py)?)?;
280357
} else {
@@ -1362,8 +1439,27 @@ impl Entry {
13621439
.cloned()
13631440
.unwrap_or_default();
13641441

1442+
let reviewed_by = attrs.get("reviewedBy").filter(|s| !s.is_empty()).cloned();
1443+
let reviewed_by_unique_id = attrs
1444+
.get("reviewedByUniqueId")
1445+
.filter(|s| !s.is_empty())
1446+
.cloned();
1447+
1448+
let reviewed_by_when = if let Some(rbw) = attrs.get("reviewedByWhen") {
1449+
if rbw.is_empty() {
1450+
None
1451+
} else {
1452+
parse_datetime_internal(rbw).ok()
1453+
}
1454+
} else {
1455+
None
1456+
};
1457+
13651458
Ok(Entry {
13661459
entry_id,
1460+
reviewed_by,
1461+
reviewed_by_unique_id,
1462+
reviewed_by_when,
13671463
value: None,
13681464
reason: None,
13691465
})

src/native/snapshots/prelude_xml_parser__native__subject_native__tests__deserialize_subject_native_json.snap

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ patients:
4545
keepHistory: true
4646
entries:
4747
- entryId: "1"
48+
reviewedBy: ~
49+
reviewedByUniqueId: ~
50+
reviewedByWhen: ~
4851
value:
4952
by: Paul Sanders
5053
byUniqueId: "1681162687395"
@@ -95,6 +98,9 @@ patients:
9598
keepHistory: true
9699
entries:
97100
- entryId: "1"
101+
reviewedBy: ~
102+
reviewedByUniqueId: ~
103+
reviewedByWhen: ~
98104
value:
99105
by: Paul Sanders
100106
byUniqueId: "1681162687395"

src/native/snapshots/prelude_xml_parser__native__user_native__tests__deserialize_user_native_json.snap

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ users:
4949
keepHistory: true
5050
entries:
5151
- entryId: "1"
52+
reviewedBy: ~
53+
reviewedByUniqueId: ~
54+
reviewedByWhen: ~
5255
value:
5356
by: Paul Sanders
5457
byUniqueId: "1681162687395"
@@ -69,6 +72,9 @@ users:
6972
keepHistory: true
7073
entries:
7174
- entryId: "1"
75+
reviewedBy: ~
76+
reviewedByUniqueId: ~
77+
reviewedByWhen: ~
7278
value:
7379
by: set from calculation
7480
byUniqueId: ~

0 commit comments

Comments
 (0)