Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
clinicaltrials
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
david Chavalarias
clinicaltrials
Commits
05b2b713
Commit
05b2b713
authored
Dec 09, 2016
by
Romain Loth
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[WIP] adding support for multiple query via 'refine' buttons
parent
b8b1a0a5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
132 additions
and
22 deletions
+132
-22
extractDataCustom.py
comex_install/extractDataCustom.py
+108
-12
main.py
comex_install/main.py
+1
-0
whoswho.js
js/whoswho.js
+22
-9
parametres_comex.ini
parametres_comex.ini
+1
-1
No files found.
comex_install/extractDataCustom.py
View file @
05b2b713
...
@@ -5,7 +5,15 @@ from math import floor
...
@@ -5,7 +5,15 @@ from math import floor
from
cgi
import
escape
from
cgi
import
escape
from
converter
import
CountryConverter
from
converter
import
CountryConverter
from
pprint
import
pprint
from
pprint
import
pprint
from
re
import
sub
whoswho_to_sqlnames
=
{
"keywords"
:
"keywords.kwstr"
,
"countries"
:
"scholars.country"
,
"organizations"
:
"affiliations.org"
,
"laboratories"
:
"affiliations.team_lab"
,
"tags"
:
"scholars.community_hashtags"
}
class
MyExtractor
:
class
MyExtractor
:
...
@@ -53,12 +61,12 @@ class MyExtractor:
...
@@ -53,12 +61,12 @@ class MyExtractor:
def
getScholarsList
(
self
,
qtype
,
query
):
def
getScholarsList
(
self
,
qtype
,
query
):
# debug
# debug
#
print("getScholarsList<============")
print
(
"getScholarsList<============"
)
#
print("qtype", qtype)
print
(
"qtype"
,
qtype
)
#
print("query", query)
print
(
"query"
,
query
)
# remove quotes from id
# remove quotes from id
unique_id
=
query
[
1
:
-
1
]
unique_id
=
sub
(
r'^"|"$'
,
''
,
query
)
scholar_array
=
{}
scholar_array
=
{}
sql1
=
None
sql1
=
None
sql2
=
None
sql2
=
None
...
@@ -87,7 +95,8 @@ class MyExtractor:
...
@@ -87,7 +95,8 @@ class MyExtractor:
self
.
cursor
.
execute
(
sql1
)
self
.
cursor
.
execute
(
sql1
)
results
=
self
.
cursor
.
fetchall
()
results
=
self
.
cursor
.
fetchall
()
print
(
"getScholarsList<==len(results) ="
,
len
(
results
))
# debug
# print("getScholarsList<==len(results) =", len(results))
if
len
(
results
)
==
0
:
if
len
(
results
)
==
0
:
return
[]
return
[]
...
@@ -129,6 +138,9 @@ class MyExtractor:
...
@@ -129,6 +138,9 @@ class MyExtractor:
print
(
"sql2:
\t
"
+
sql2
)
print
(
"sql2:
\t
"
+
sql2
)
print
(
error
)
print
(
error
)
# debug
print
(
"getScholarsList<==scholar_array"
,
scholar_array
)
return
scholar_array
return
scholar_array
...
@@ -140,9 +152,60 @@ class MyExtractor:
...
@@ -140,9 +152,60 @@ class MyExtractor:
print
(
error
)
print
(
error
)
# TODO fix ('refine' button)
if
qtype
==
"filter"
:
if
qtype
==
"filter"
:
print
(
"filter: query is"
,
query
)
# query is a set of filters like: key <=> array of values
# (expressed as rest parameters: "keyA[]=valA1&keyB[]=valB1&keyB[]=valB2")
# we map it to an sql conjunction of alternatives
# ==> WHERE colA IN ("valA1") AND colB IN ("valB1", "valB2")
try
:
try
:
filter_dict
=
restparse
(
query
)
# build WHERE-clause elements for each table
# ==========================================
sql_constraints
=
[]
for
key
in
filter_dict
:
col
=
whoswho_to_sqlnames
[
key
]
clause
=
""
if
isinstance
(
val
,
list
)
or
isinstance
(
val
,
tuple
):
qwliststr
=
repr
(
val
)
qwliststr
=
sub
(
r'^\['
,
'('
,
qwliststr
)
qwliststr
=
sub
(
r'\[$'
,
')'
,
qwliststr
)
clause
=
'IN '
+
qwliststr
elif
isinstance
(
val
,
int
):
clause
=
'=
%
i'
%
val
elif
isinstance
(
val
,
float
):
clause
=
'=
%
f'
%
val
elif
isinstance
(
val
,
str
):
clause
=
'= "
%
s"'
%
val
sql_constraints
.
append
(
"(
%
s
%
s)"
%
(
col
,
clause
))
query
=
"""
SELECT
scholars.*,
affiliations.*,
-- kws info
COUNT(keywords.kwid) AS keywords_nb,
GROUP_CONCAT(kwstr) AS keywords_list,
GROUP_CONCAT(kwid) AS keywords_ids
FROM scholars
-- two step JOIN for keywords
JOIN sch_kw
ON doors_uid = uid
JOIN keywords
ON sch_kw.kwid = keywords.kwid
LEFT JOIN affiliations
ON affiliation_id = affid
WHERE
%
s
GROUP BY doors_uid
"""
%
" AND "
.
join
(
sql_constraints
)
self
.
cursor
.
execute
(
query
)
self
.
cursor
.
execute
(
query
)
res1
=
self
.
cursor
.
fetchall
()
res1
=
self
.
cursor
.
fetchall
()
# print(res1)
# print(res1)
...
@@ -272,9 +335,9 @@ class MyExtractor:
...
@@ -272,9 +335,9 @@ class MyExtractor:
conditions
=
' ('
+
','
.
join
(
sorted
(
list
(
termsMatrix
)))
+
')'
conditions
=
' ('
+
','
.
join
(
sorted
(
list
(
termsMatrix
)))
+
')'
# debug
# debug
print
(
"SQL query ==============================="
)
#
print("SQL query ===============================")
print
(
query
+
conditions
)
#
print(query+conditions)
print
(
"/SQL query =============================="
)
#
print("/SQL query ==============================")
self
.
cursor
.
execute
(
query
+
conditions
)
self
.
cursor
.
execute
(
query
+
conditions
)
results4
=
self
.
cursor
.
fetchall
()
results4
=
self
.
cursor
.
fetchall
()
...
@@ -377,7 +440,6 @@ class MyExtractor:
...
@@ -377,7 +440,6 @@ class MyExtractor:
def
toHTML
(
self
,
string
):
def
toHTML
(
self
,
string
):
escaped
=
escape
(
string
)
.
encode
(
"ascii"
,
"xmlcharrefreplace"
)
.
decode
()
escaped
=
escape
(
string
)
.
encode
(
"ascii"
,
"xmlcharrefreplace"
)
.
decode
()
print
(
type
(
escaped
))
return
escaped
return
escaped
...
@@ -408,9 +470,11 @@ class MyExtractor:
...
@@ -408,9 +470,11 @@ class MyExtractor:
for
idNode
in
graph
.
nodes_iter
():
for
idNode
in
graph
.
nodes_iter
():
if
idNode
[
0
]
==
"N"
:
#If it is NGram
if
idNode
[
0
]
==
"N"
:
#If it is NGram
print
(
"terms idNode:"
,
idNode
)
# debug
# print("terms idNode:", idNode)
numID
=
int
(
idNode
.
split
(
"::"
)[
1
])
numID
=
int
(
idNode
.
split
(
"::"
)[
1
])
print
(
"DBG terms_dict:"
,
self
.
terms_dict
)
try
:
try
:
nodeLabel
=
self
.
terms_dict
[
numID
][
'kwstr'
]
.
replace
(
"&"
,
" and "
)
nodeLabel
=
self
.
terms_dict
[
numID
][
'kwstr'
]
.
replace
(
"&"
,
" and "
)
colorg
=
max
(
0
,
180
-
(
100
*
self
.
terms_colors
[
numID
]))
colorg
=
max
(
0
,
180
-
(
100
*
self
.
terms_colors
[
numID
]))
...
@@ -578,3 +642,35 @@ class MyExtractor:
...
@@ -578,3 +642,35 @@ class MyExtractor:
# print("nodes2",edgesB)
# print("nodes2",edgesB)
# print("bipartite",edgesAB)
# print("bipartite",edgesAB)
return
graph
return
graph
def
restparse
(
paramstr
):
"""
"keyA[]=valA1&keyB[]=valB1&keyB[]=valB2&keyC=valC"
=> {
"keyA": [valA1],
"keyB": [valB1, valB2],
"keyC": valC
}
"""
resultdict
=
{}
components
=
paramstr
.
split
(
'&'
)
for
comp
in
components
:
(
keystr
,
valstr
)
=
comp
.
split
(
'='
)
# type array
if
len
(
keystr
)
>
2
and
keystr
[
-
2
:]
==
"[]"
:
key
=
keystr
[
0
:
-
2
]
if
key
in
resultdict
:
resultdict
[
key
]
.
append
(
valstr
)
else
:
resultdict
[
key
]
=
[
valstr
]
# atomic type
else
:
key
=
keystr
resultdict
[
key
]
=
valstr
return
resultdict
comex_install/main.py
View file @
05b2b713
...
@@ -45,4 +45,5 @@ def main():
...
@@ -45,4 +45,5 @@ def main():
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
print
(
" * Using
%
s:3306 as SQL_HOST"
%
MY_SQL_HOST
)
app
.
run
(
host
=
"0.0.0.0"
,
port
=
8484
)
app
.
run
(
host
=
"0.0.0.0"
,
port
=
8484
)
js/whoswho.js
View file @
05b2b713
...
@@ -219,18 +219,31 @@ $(document).ready(function() {
...
@@ -219,18 +219,31 @@ $(document).ready(function() {
return
t
;
return
t
;
};
};
log
(
"reading filters forms.."
);
log
(
"reading filters forms.."
);
query
=
{
query
=
{
categorya
:
$
.
trim
(
$
(
"#categorya :selected"
).
text
()),
categoryb
:
$
.
trim
(
$
(
"#categoryb :selected"
).
text
()),
// TODO in the future multiple categories
keywords
:
collect
(
"keywords"
),
// categorya: $.trim($("#categorya :selected").text()),
countries
:
collect
(
"countries"
),
// categoryb: $.trim($("#categoryb :selected").text()),
laboratories
:
collect
(
"laboratories"
),
coloredby
:
[],
// TODO in the future coloredby
tags
:
collect
(
"tags"
),
// query.coloredby = []
organizations
:
collect
(
"organizations"
)
};
}
for
(
filterName
of
[
"keywords"
,
"countries"
,
"laboratories"
,
"tags"
,
"organizations"
])
{
var
filterValuesArray
=
collect
(
filterName
)
// we add only if something to add :)
if
(
filterValuesArray
.
length
)
{
query
[
filterName
]
=
filterValuesArray
}
}
log
(
"raw query: "
);
log
(
"raw query: "
);
log
(
query
);
log
(
query
);
query
=
encodeURIComponent
(
JSON
.
stringify
(
query
));
query
=
encodeURIComponent
(
JSON
.
stringify
(
query
));
return
cb
(
query
);
return
cb
(
query
);
};
};
...
...
parametres_comex.ini
View file @
05b2b713
[services]
[services]
SQL_HOST
=
172.1
8
.0.2
SQL_HOST
=
172.1
7
.0.2
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment