From b4f098e11c5746fe4980d5a6d7ab9ad2ff99a4fa Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Fri, 18 Oct 2019 12:55:15 +0200
Subject: [PATCH] bugfix: commonsense filter

---
 deploy/datasets/query.js                   |  4 ++--
 deploy/datasets/supplements/commonSense.js | 26 +++++++++++++++++-----
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/deploy/datasets/query.js b/deploy/datasets/query.js
index 83986048b..6dd7876b0 100644
--- a/deploy/datasets/query.js
+++ b/deploy/datasets/query.js
@@ -3,7 +3,7 @@ const request = require('request')
 const URL = require('url')
 const path = require('path')
 const archiver = require('archiver')
-const { commonSenseDsFilter } = require('./supplements/commonSense')
+const { getCommonSenseDsFilter } = require('./supplements/commonSense')
 const { getPreviewFile, hasPreview } = require('./supplements/previewFile')
 const { init: kgQueryUtilInit, getUserKGRequestParam } = require('./util')
 
@@ -183,7 +183,7 @@ const filterByPRName = ({ parcellationName = null, dataset = {parcellationAtlas:
   : (dataset.parcellationAtlas || []).some(({ name }) => name === parcellationName)
 
 const filter = (datasets = [], { templateName, parcellationName }) => datasets
-  .filter(ds => commonSenseDsFilter({ ds, templateName, parcellationName }))
+  .filter(getCommonSenseDsFilter({ templateName, parcellationName }))
   .filter(ds => {
     if (/infant/.test(ds.name))
       return false
diff --git a/deploy/datasets/supplements/commonSense.js b/deploy/datasets/supplements/commonSense.js
index 42e4f30f5..404617f8f 100644
--- a/deploy/datasets/supplements/commonSense.js
+++ b/deploy/datasets/supplements/commonSense.js
@@ -34,7 +34,7 @@ const mouseParcellationSet = new Set([
   'Allen Mouse Common Coordinate Framework v3 2015'
 ])
 
-const dsIsHuman = ({ds}) => ds && ds.species.some(species => /homo\ sapiens/i.test(species))
+const dsIsHuman = ({ ds }) => ds && ds.species.some(species => /homo\ sapiens/i.test(species))
 const dsIsRat = ({ ds }) => ds && ds.species.some(species => /rattus\ norvegicus/i.test(species))
 const dsIsMouse = ({ ds }) => ds && ds.species.some(species => /mus\ musculus/i.test(species))
 
@@ -50,7 +50,23 @@ const queryIsHuman = ({ templateName, parcellationName }) =>
   (templateName && humanTemplateSet.has(templateName))
   || (parcellationName && humanParcellationSet.has(parcellationName))
 
-exports.commonSenseDsFilter = ({ ds , templateName, parcellationName}) => 
-  (queryIsHuman({ templateName, parcellationName }) && !dsIsRat({ ds }) && !dsIsMouse({ ds }))
-  || (queryIsMouse({ templateName, parcellationName }) && !dsIsRat({ ds }) && !dsIsHuman({ ds }))
-  || (queryIsRat({ templateName, parcellationName }) && !dsIsMouse({ ds }) && !dsIsHuman({ ds }))
+exports.getCommonSenseDsFilter = ({ templateName, parcellationName }) => {
+  const trueFilter = queryIsHuman({ templateName, parcellationName })
+    ? dsIsHuman
+    : queryIsMouse({ templateName, parcellationName })
+      ? dsIsMouse
+      : queryIsRat({ templateName, parcellationName })
+        ? dsIsRat
+        : null
+
+  const falseFilters = queryIsHuman({ templateName, parcellationName })
+    ? [dsIsMouse, dsIsRat]
+    : queryIsMouse({ templateName, parcellationName })
+      ? [dsIsHuman, dsIsRat]
+      : queryIsRat({ templateName, parcellationName })
+        ? [dsIsMouse, dsIsHuman]
+        : []
+  return ds => trueFilter
+    ? trueFilter({ ds }) || (falseFilters.every(filterFn => !filterFn({ ds })))
+    : false
+}
-- 
GitLab