treat out of bounds dates as unknown value
This commit is contained in:
parent
38b35a77cb
commit
284af1ad9f
2 changed files with 20 additions and 10 deletions
|
@ -398,7 +398,12 @@ impl Entity {
|
||||||
.as_str()
|
.as_str()
|
||||||
.ok_or(EntityError::NoRank)?,
|
.ok_or(EntityError::NoRank)?,
|
||||||
)?,
|
)?,
|
||||||
data: ClaimValueData::parse_snak(claim.get_mut("mainsnak").ok_or(EntityError::MissingMainsnak)?.take())?,
|
data: ClaimValueData::parse_snak(
|
||||||
|
claim
|
||||||
|
.get_mut("mainsnak")
|
||||||
|
.ok_or(EntityError::MissingMainsnak)?
|
||||||
|
.take(),
|
||||||
|
)?,
|
||||||
qualifiers,
|
qualifiers,
|
||||||
references,
|
references,
|
||||||
},
|
},
|
||||||
|
@ -704,13 +709,18 @@ impl ClaimValueData {
|
||||||
lower_bound: parse_wb_number(&take_prop("lowerBound", &mut value)).ok(),
|
lower_bound: parse_wb_number(&take_prop("lowerBound", &mut value)).ok(),
|
||||||
unit: try_get_as_qid(&take_prop("unit", &mut value)).ok(),
|
unit: try_get_as_qid(&take_prop("unit", &mut value)).ok(),
|
||||||
}),
|
}),
|
||||||
"time" => Ok(ClaimValueData::DateTime {
|
// our time parsing code can't handle a few edge cases (really old years), so we
|
||||||
// our time parsing code can't handle a few edge cases (really old years), so we
|
"time" => Ok(
|
||||||
// just give up on parsing the snak if parse_wb_time returns None
|
match parse_wb_time(&get_json_string(take_prop("time", &mut value))?) {
|
||||||
date_time: parse_wb_time(&get_json_string(take_prop("time", &mut value))?)?,
|
Ok(date_time) => ClaimValueData::DateTime {
|
||||||
precision: parse_wb_number(&take_prop("precision", &mut value))
|
date_time,
|
||||||
.map_err(|_| EntityError::InvalidPrecision)? as u8,
|
precision: parse_wb_number(&take_prop("precision", &mut value))
|
||||||
}),
|
.map_err(|_| EntityError::InvalidPrecision)?
|
||||||
|
as u8,
|
||||||
|
},
|
||||||
|
Err(_) => ClaimValueData::UnknownValue,
|
||||||
|
},
|
||||||
|
),
|
||||||
"monolingualtext" => Ok(ClaimValueData::MonolingualText(Text {
|
"monolingualtext" => Ok(ClaimValueData::MonolingualText(Text {
|
||||||
text: get_json_string(take_prop("text", &mut value))?,
|
text: get_json_string(take_prop("text", &mut value))?,
|
||||||
lang: Lang(get_json_string(take_prop("language", &mut value))?),
|
lang: Lang(get_json_string(take_prop("language", &mut value))?),
|
||||||
|
|
|
@ -2,7 +2,8 @@ use wikidata::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn simple_item() {
|
fn simple_item() {
|
||||||
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q106975887.json")).unwrap();
|
let j: serde_json::Value =
|
||||||
|
serde_json::from_str(include_str!("../items/Q106975887.json")).unwrap();
|
||||||
Entity::from_json(j).unwrap();
|
Entity::from_json(j).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +14,6 @@ fn douglas_adams() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[ignore = "can't handle year right"]
|
|
||||||
fn universe() {
|
fn universe() {
|
||||||
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q1.json")).unwrap();
|
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q1.json")).unwrap();
|
||||||
Entity::from_json(j).unwrap();
|
Entity::from_json(j).unwrap();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue