summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rust/src/endpoint_handlers.rs2
-rw-r--r--rust/src/identifiers.rs24
2 files changed, 17 insertions, 9 deletions
diff --git a/rust/src/endpoint_handlers.rs b/rust/src/endpoint_handlers.rs
index 91ea2393..141c414e 100644
--- a/rust/src/endpoint_handlers.rs
+++ b/rust/src/endpoint_handlers.rs
@@ -536,7 +536,7 @@ impl Server {
Some(dblp),
None,
) => {
- check_dblp_id(dblp)?;
+ check_dblp_key(dblp)?;
let (rev, ident, _extid): (ReleaseRevRow, ReleaseIdentRow, ReleaseExtidRow) =
release_rev::table
.inner_join(release_ident::table)
diff --git a/rust/src/identifiers.rs b/rust/src/identifiers.rs
index 76f978f9..9d766417 100644
--- a/rust/src/identifiers.rs
+++ b/rust/src/identifiers.rs
@@ -388,15 +388,15 @@ fn test_check_doaj_id() {
assert!(check_doaj_id("1b39813549077b2347c0f370c3864b411").is_err());
}
-pub fn check_dblp_id(raw: &str) -> Result<()> {
+pub fn check_dblp_key(raw: &str) -> Result<()> {
lazy_static! {
// TODO: what should this actually be? more or less restrictive?
- static ref RE: Regex = Regex::new(r"^[a-z]+/[a-zA-Z0-9]+/[a-zA-Z0-9/]+$").unwrap();
+ static ref RE: Regex = Regex::new(r"^(journals|conf|series|phd|books|tr|ms|www)(/[a-zA-Z0-9-+]+){1,4}$").unwrap();
}
if raw.is_ascii() && RE.is_match(raw) {
Ok(())
} else {
- Err(FatcatError::MalformedChecksum(
+ Err(FatcatError::MalformedExternalId(
"dblp Article Key (expected, eg, 'journals/entcs/GoubaultM12')".to_string(),
raw.to_string(),
))?
@@ -404,11 +404,19 @@ pub fn check_dblp_id(raw: &str) -> Result<()> {
}
#[test]
-fn test_check_dblp_id() {
- assert!(check_dblp_id("journals/entcs/GoubaultM12").is_ok());
- assert!(check_dblp_id("journals/entcs/GoubaultM12").is_ok());
- assert!(check_dblp_id("10.123*").is_err());
- assert!(check_dblp_id("").is_err());
+fn test_check_dblp_key() {
+ assert!(check_dblp_key("journals/entcs/GoubaultM12").is_ok());
+ assert!(check_dblp_key("journals/entcs/GoubaultM12").is_ok());
+ assert!(check_dblp_key("conf/entcs/GoubaultM12").is_ok());
+ assert!(check_dblp_key("conf/3dica/DorringtonGCPS11").is_ok());
+ assert!(check_dblp_key("conf/c++/CohenHS91").is_ok());
+ assert!(check_dblp_key("phd/Hoff2002").is_ok());
+ assert!(check_dblp_key("phd/dk/Heine2010").is_ok());
+ assert!(check_dblp_key("phd/Beferull-Lozano02").is_ok());
+ assert!(check_dblp_key("www/org/w3/TR/xmlquery-use-cases").is_ok());
+ assert!(check_dblp_key("books/mc/18/KuznetsovSPCSS18").is_ok());
+ assert!(check_dblp_key("10.123*").is_err());
+ assert!(check_dblp_key("").is_err());
}
pub fn check_oai_id(raw: &str) -> Result<()> {