Skip to content

Commit

Permalink
Enabled exact-match search for short WB-ID-like search patterns #324
Browse files Browse the repository at this point in the history
  • Loading branch information
mluypaert committed Mar 4, 2021
1 parent 1b7d86d commit 0d8d7bc
Showing 1 changed file with 29 additions and 20 deletions.
49 changes: 29 additions & 20 deletions src/wormbase/names/entity.clj
Original file line number Diff line number Diff line change
Expand Up @@ -296,17 +296,22 @@
(ok))))))

(defn finding-resticted?
[pattern & {:keys [min-chars-match
"Check if `search-pattern` could match a WB entity ID (defined as `id-pattern`) and
return a warning message if it does and has < `min-chars-match` digits.
`search-pattern` - Search pattern to be analysed
`min-chars-match` - Minimum number of digits `search-pattern` should have
`id-pattern` - regex that matches the WB entity ID format"
[search-pattern & {:keys [min-chars-match
id-pattern]
:or {min-chars-match 7
id-pattern #"WB[a-zA-Z]+(\d+)"}}]
(when-let [[_ numbers] (re-find id-pattern pattern)]
(when-let [[_ numbers] (re-find id-pattern search-pattern)]
(when (< (count numbers) min-chars-match)
{:matches []
:message (format
"Identifier must contain at least %d digits (received %d)."
min-chars-match
(count numbers))})))
(format
"Identifier must contain at least %d digits (received %d). Returning perfect matches only."
min-chars-match
(count numbers)))))

(defn build-find-query
[find-attrs unqualified-attrs rule-head]
Expand Down Expand Up @@ -334,19 +339,23 @@
[entity-type unqualified-attrs]
(fn handle-find [request]
(when-let [s-pattern (some-> request :query-params :pattern str/trim)]
(if-let [restricted (finding-resticted? s-pattern)]
(ok restricted)
(let [db (:db request)
find-attrs (map (partial keyword entity-type) unqualified-attrs)
rule-head (str entity-type "-name")
matching-rules (wnm/make-rules rule-head find-attrs)
query (build-find-query find-attrs unqualified-attrs rule-head)
regexp-pattern (re-pattern (str "^" s-pattern))
q-result (d/q query db matching-rules regexp-pattern)
res {:matches (if (seq q-result)
(vec (map #(wnu/unqualify-keys % entity-type) q-result))
[])}]
(ok res))))))
(let [db (:db request)
restricted-msg (finding-resticted? s-pattern)
find-attrs (map (partial keyword entity-type) unqualified-attrs)
rule-head (str entity-type "-name")
matching-rules (wnm/make-rules rule-head find-attrs)
query (build-find-query find-attrs unqualified-attrs rule-head)
match-pattern (if restricted-msg
(re-pattern (str "^" s-pattern "$"))
(re-pattern (str "^" s-pattern)))
q-result (d/q query db matching-rules match-pattern)
matches (if (seq q-result)
(vec (map #(wnu/unqualify-keys % entity-type) q-result))
[])
res (if restricted-msg
{:matches matches :message restricted-msg}
{:matches matches})]
(ok res)))))

(defn generic-attrs
"Return the datomic attribute schema for a generic entity."
Expand Down

0 comments on commit 0d8d7bc

Please sign in to comment.