Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merging main repo #3

Open
wants to merge 177 commits into
base: v-15
Choose a base branch
from
Open
Changes from 3 commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
6f7f98d
wip: implement facets tractability
mkarmona Nov 19, 2018
8c384b4
Merge branch 'gp-custom-datasource' into mk-tractability-facet
mkarmona Nov 21, 2018
f80902d
Merge branch 'gp-custom-datasource' into mk-tractability-facet
mkarmona Nov 21, 2018
93f23f2
refactor: move data version to mk1810 with new facets
mkarmona Nov 26, 2018
f7409dc
feat: tractability facets
mkarmona Nov 26, 2018
c6ccae3
Merge branch 'master' into mk-tractability-facet
mkarmona Nov 26, 2018
1f6b2b9
refactor: comment debug lines
mkarmona Nov 26, 2018
9b64382
refactor: unused class property
mkarmona Nov 26, 2018
31faedf
fix: add combined tractability facet
mkarmona Nov 26, 2018
32a9118
refactor: comment cleaned and other classes
mkarmona Nov 26, 2018
291a48f
refactor: clean unused code
mkarmona Nov 26, 2018
46e2361
Merge pull request #177 from opentargets/mk-tractability-facet
afaulconbridge Nov 26, 2018
fd93769
feat: move to new drafted release data 18.12
mkarmona Dec 5, 2018
6730292
Merge pull request #178 from opentargets/mk-1812
mkarmona Dec 5, 2018
430a5e1
fix: add sysbio datasource
mkarmona Dec 6, 2018
855bcb6
Merge remote-tracking branch 'origin/master'
mkarmona Dec 6, 2018
802374a
refactor: just clean few unnecesary commented lines but also refresh …
mkarmona Dec 12, 2018
a490edb
fix: uwsgi limit-as argument increased as it needs to manage more mem…
mkarmona Dec 13, 2018
ff920c5
fix: increase machine memory and reduce the number of processes
mkarmona Dec 13, 2018
315decb
fix: disable buffering on uwsgi side nginx
mkarmona Dec 13, 2018
d27919b
feat: new pointing master to sufentanil es5 server
mkarmona Dec 14, 2018
6d2d8a4
feat: pushing to production 18.12
mkarmona Dec 14, 2018
0b09782
Remove unused imports send_file, SimpleCache and RedisCache
peatroot Dec 21, 2018
e088166
Remove unused proxy classes
peatroot Dec 21, 2018
6b64540
Remove unused get_datatypes
peatroot Dec 21, 2018
fe902db
Remove unused add_error method
peatroot Dec 21, 2018
ce8a39a
Remove unused conditionally instantiated JsonFormatter
peatroot Dec 21, 2018
6b39954
Remove unused class SearchObjectTypes
peatroot Dec 21, 2018
2d4060f
Remove unused method _get_base_association_conditions
peatroot Dec 21, 2018
d1a3797
Remove unused method _get_association_score_scripted_metric_script
peatroot Dec 21, 2018
f23e6c5
Remove unused method _get_score_data_object_filter
peatroot Dec 21, 2018
c5e7f3a
Remove unused method _get_score_data_gene_filter
peatroot Dec 21, 2018
4a674ab
Remove unused method _get_datasource_init_list
peatroot Dec 21, 2018
578a83c
Remove unused method _get_datatype_combine_init_list
peatroot Dec 21, 2018
fce3cfd
Remove unused method _get_efo_data_for_associations
peatroot Dec 21, 2018
87cbbd0
Remove unused method _get_efo_with_data
peatroot Dec 21, 2018
2e28dfc
Remove unused method _get_genes_for_pathway_code
peatroot Dec 21, 2018
d67bd56
Remove unused method _get_datasource_score_calculation_script
peatroot Dec 21, 2018
a9bddad
Remove unused method _get_datasource_to_datatype_mapping_script
peatroot Dec 21, 2018
05e8739
Remove unused method _get_datatype_score_breakdown
peatroot Dec 21, 2018
6ce39d4
Remove unused class AggregationUnitECO
peatroot Dec 21, 2018
f5026a3
Remove unused, commented class AggregationUnitUniprotKW (an uncomment…
peatroot Dec 21, 2018
74415b6
Remove unused method _get_AggregationUnit
peatroot Dec 21, 2018
b5f5828
Remove commented code (last touched 3yrs ago)
peatroot Dec 21, 2018
3d8e663
Remove unused imports and commented out pprint statements
peatroot Dec 21, 2018
741eb41
Remove unused method add_evidence_score
peatroot Dec 21, 2018
989e8d7
Remove unused method _harmonic_sum
peatroot Dec 21, 2018
f96ec17
Remove unused cache_key argument
peatroot Dec 21, 2018
70bb6f2
Remove unused function get_ordered_filter_list
peatroot Dec 21, 2018
9965749
Remove unused imports
peatroot Dec 21, 2018
81c6e9c
Remove unused function json_type
peatroot Dec 21, 2018
6936fea
Replace _get_AggregationUnit method
peatroot Dec 21, 2018
89fe932
Remove unused imports
peatroot Jan 7, 2019
7ca7150
Replace @mkarmona's commented out debugging
peatroot Jan 8, 2019
c82161d
Merge pull request #179 from opentargets/gp-vulture
mkarmona Jan 8, 2019
a43e403
refactor: remove branch only travis
mkarmona Jan 9, 2019
cecb51b
refactor: clean travis
mkarmona Jan 10, 2019
d11a28e
fix: pip upgrade
mkarmona Jan 10, 2019
b20036c
fix: upgrade pytest to >= 3.6
mkarmona Jan 10, 2019
b134061
fix: pip packages order matters
mkarmona Jan 10, 2019
0149590
fix: remove travis pytest requirement
mkarmona Jan 10, 2019
2696c06
refactor: comment why some packages have to stick to a specific order
mkarmona Jan 10, 2019
d3b5e7a
Merge branch 'master' into mk-quay-tagging
afaulconbridge Jan 10, 2019
0e35997
Merge branch 'master' into mk-quay-tagging
mkarmona Jan 10, 2019
94ebb38
Merge pull request #180 from opentargets/mk-quay-tagging
mkarmona Jan 10, 2019
e62acf7
fix: remove api rate limit
mkarmona Jan 15, 2019
570b5c9
refactor: remove token api endpoint
mkarmona Jan 15, 2019
548aa11
refactor: remove unused env vars for the appengine docker image
mkarmona Jan 15, 2019
bfe2b8d
refactor: clean up
mkarmona Jan 15, 2019
ede2220
Merge pull request #181 from opentargets/mk-remove-api-limit
mkarmona Jan 15, 2019
6831551
feat: add proxy into nginx
mkarmona Jan 15, 2019
489e56a
fix: polute api rest calls
mkarmona Jan 15, 2019
ee6b689
refactor: comment out stop branches trigger
mkarmona Jan 16, 2019
9cb4e23
fix: miss proxy zone for proxying external websites
mkarmona Jan 16, 2019
93d2518
fix: miss proxy var used for ensembl
mkarmona Jan 16, 2019
d73e021
fix: miss proxy var used for ensembl bis
mkarmona Jan 16, 2019
67fccc1
fix: miss cache proxy folder
mkarmona Jan 16, 2019
9552d36
refactor: comment out stop-instances
mkarmona Jan 16, 2019
217b071
fix: change proxy request order
mkarmona Jan 16, 2019
86d2a5d
fix: remove proxy prefix
mkarmona Jan 16, 2019
beb1279
refactor: clean up unused commented code
mkarmona Jan 16, 2019
17f81da
refactor: clean up and remove circle-ci from the repo
mkarmona Jan 16, 2019
8b9ac7b
feat: bump to a new data minor version release
mkarmona Jan 17, 2019
24f58f9
feat: bump to a new data minor version release again as the previous …
mkarmona Jan 17, 2019
caee5db
feat: deploy another 18.12 minor release
mkarmona Jan 21, 2019
7ddacc1
feat: add metrics endpoint
mkarmona Jan 21, 2019
1890ec5
feat: add another metrics endpoint
mkarmona Jan 21, 2019
2aa995f
feat: add openapi endpoint
mkarmona Jan 21, 2019
632db9a
feat: failed to push to prod
mkarmona Jan 21, 2019
fbe7f9c
Re-add /proxy prefix for consistency
afaulconbridge Feb 12, 2019
21aed23
merge from master
afaulconbridge Feb 12, 2019
c8cac0c
Merge pull request #182 from opentargets/mk-include-proxy
mkarmona Feb 12, 2019
45f0c62
Update api-description.md
Mar 1, 2019
7fa32ad
update to swagger to work with new deployment
afaulconbridge Mar 1, 2019
ff5fb93
Added more Docker info, particularly about running with SSL.
Docproc Mar 7, 2019
638ab6e
Merge branch 'master' into gp-docker-readme
afaulconbridge Mar 8, 2019
d939397
Merge pull request #183 from opentargets/deniseOme-patch-2
afaulconbridge Mar 8, 2019
67e3f20
Merge branch 'master' into gp-docker-readme
afaulconbridge Mar 8, 2019
6636e5d
Merge branch 'master' into af-swagger-update
afaulconbridge Mar 8, 2019
448833d
Update badges
afaulconbridge Mar 8, 2019
981b1aa
Merge pull request #185 from opentargets/gp-docker-readme
afaulconbridge Mar 8, 2019
5999c96
Merge branch 'master' into af-swagger-update
afaulconbridge Mar 8, 2019
f73d63c
Merge pull request #184 from opentargets/af-swagger-update
cmalangone Mar 8, 2019
22958d8
Merge branch 'master' into af-readme-badges-update
afaulconbridge Mar 8, 2019
b2fd88e
Merge pull request #186 from opentargets/af-readme-badges-update
cmalangone Mar 8, 2019
0a8babc
Add documentation regarding proxy configuration
pieterlukasse Mar 25, 2019
9713a98
small fix to proxy url
pieterlukasse Mar 25, 2019
d534c83
small fix to webapp url
pieterlukasse Mar 25, 2019
c73775f
adding empty nginx config file that can be overwritten at runtime
pieterlukasse Mar 25, 2019
893817d
Add back missing info about custom data sources.
Docproc Mar 27, 2019
94d27d8
Add back missing info about custom data sources.
Docproc Mar 27, 2019
2bb54bc
Merge pull request #189 from opentargets/gp-readme-custom-datasource
afaulconbridge Mar 28, 2019
1b1cc22
Merge branch 'master' into patch-1
afaulconbridge Mar 28, 2019
dc15447
Merge branch 'master' into improve_nginx_runtime_config
afaulconbridge Mar 28, 2019
b60ef8c
Merge pull request #188 from thehyve/improve_nginx_runtime_config
afaulconbridge Mar 28, 2019
6af42c5
Merge branch 'master' into patch-1
afaulconbridge Mar 28, 2019
8dc48fc
proxy documentation to point to nginx-custom.conf
pieterlukasse Mar 28, 2019
3fe9c9c
Merge pull request #187 from pieterlukasse/patch-1
afaulconbridge Mar 28, 2019
934eac6
Add crispr data source
afaulconbridge Apr 9, 2019
87bc116
Merge pull request #190 from opentargets/af-crispr
cmalangone Apr 9, 2019
21968b9
Document how settings relate to pipeline ES_PREFIX
fedde-s Apr 1, 2019
471e73d
Merge pull request #191 from thehyve/document-esprefix-match
afaulconbridge May 1, 2019
38bca61
initial drug index endpoint
afaulconbridge May 15, 2019
d3e5242
Added list of therapeutic area
May 21, 2019
71b92cb
cache for 7 days
afaulconbridge May 21, 2019
5c157cb
Remove localhost 9200
May 21, 2019
7921415
Change JSON
May 21, 2019
e2f07bc
Added uri and clean up the code
May 22, 2019
3a3fda6
Simple JSON
May 22, 2019
747d590
Merge pull request #192 from opentargets/af-cache-increase
cmalangone May 22, 2019
a55e261
Merge branch 'master' into cm_603_static_response_for_therapeutic_area
afaulconbridge May 24, 2019
33b210a
Merge branch 'master' into af-drug
afaulconbridge May 24, 2019
0fffabd
update openapi spec
afaulconbridge May 24, 2019
e908874
Change indentation
May 24, 2019
62a2e62
Merge pull request #193 from opentargets/cm_603_static_response_for_t…
cmalangone May 24, 2019
c410f4b
Merge branch 'master' into af-drug
afaulconbridge May 28, 2019
e89cbe2
Merge pull request #194 from opentargets/af-drug
cmalangone May 28, 2019
923d0be
remove gprofiler as per opentargets/platform#437
afaulconbridge May 28, 2019
24ef363
Merge pull request #195 from opentargets/af-43-remove-gprofiler
cmalangone May 28, 2019
cdde3b5
fix free text search
afaulconbridge Jun 12, 2019
08ccda7
fixing type use
afaulconbridge Jun 12, 2019
b877001
update besthitsearch to es7
afaulconbridge Jun 17, 2019
682f680
fix quick_search
afaulconbridge Jun 17, 2019
23782ca
updates to es7
afaulconbridge Jun 21, 2019
b89375f
Merge pull request #196 from opentargets/af-search-es7
cmalangone Jul 8, 2019
70973a8
cache public for google cdn
afaulconbridge Jul 8, 2019
54169c2
Merge pull request #197 from opentargets/af-cache-public
cmalangone Jul 10, 2019
6cc2c04
initial phase 2 drug evidence collapse
afaulconbridge Jul 15, 2019
9f7200c
drug work in progress
afaulconbridge Jul 31, 2019
19d4474
add summary stats to aggregated drugs
afaulconbridge Aug 1, 2019
1ce2109
update drug trials aggregation
afaulconbridge Aug 1, 2019
45d94be
Merge branch 'master' into af-es-mapping-clinical-trials
afaulconbridge Aug 1, 2019
fa340ee
Merge pull request #198 from opentargets/af-es-mapping-clinical-trials
afaulconbridge Aug 1, 2019
8ee8ffc
fix bug best hit type doc
Aug 20, 2019
ea7c5d0
Fixed endpoint stats
Aug 22, 2019
5ad2e73
Merge pull request #199 from opentargets/cm_fix_stats_endpoint
cmalangone Aug 23, 2019
c748dc8
Fix issue with ES7 and track_total_hits
Sep 2, 2019
ae5b76e
Fix issue with ES7 and track_total_hits
Sep 2, 2019
58a5bc6
Fixing issue with tract_total_hits
Sep 4, 2019
e33a29c
quicksearch protected words EFO or ENSG prefix
Sep 4, 2019
58944fb
remove protected words
Sep 4, 2019
1fa0a05
Fix free text search
Sep 6, 2019
baa8d8e
handle phase 5 non-status evidence in drug collapse
afaulconbridge Sep 11, 2019
642dba8
fix drug label vs drug id
afaulconbridge Sep 11, 2019
8a08a4c
Merge pull request #200 from opentargets/af-drug-evidence-collapse-ph…
cmalangone Sep 11, 2019
2818584
Fix bug besthits
Sep 16, 2019
1837673
fix typo
Sep 16, 2019
5a3306d
remove track total hits
Sep 16, 2019
e60aa70
track total hits
Sep 18, 2019
26daa0e
Remove documented mention of old pipeline options
fedde-s Oct 21, 2019
e269afd
Merge pull request #201 from thehyve/remove-releasetag-reference
afaulconbridge Oct 22, 2019
8d180eb
Fixed issue (contrib.cache)
Feb 13, 2020
9add454
Add genetical portal datatype
Feb 18, 2020
b3a2e92
Fixed issue with POST for besthitsearch . Issue 1040
May 13, 2020
60e2bcd
clingen info
cmalangone Aug 28, 2020
e299c3c
Remove uniprot and gwas_catalog datatypes
cmalangone Sep 7, 2020
3e3d1df
Change readme
cmalangone Feb 9, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
291 changes: 161 additions & 130 deletions app/common/elasticsearchclient.py
Original file line number Diff line number Diff line change
@@ -891,38 +891,11 @@ def get_evidence_known_drug(self,

#return a large number of possible buckets
#note this plus the summary buckets must sum to less than 10k
q.aggs.evidence_known_drug.composite.size=9000

#setup the sub-buckets we want to get the combinations of
#the ordering here determines sort order of buckets
#these fields must be "keyword" type
q.aggs.evidence_known_drug.composite.sources = []

bucket_source_trial_phase = addict.Dict()
bucket_source_trial_phase.phase.terms.field = "evidence.drug2clinic.clinical_trial_phase.numeric_index"
q.aggs.evidence_known_drug.composite.sources.append(bucket_source_trial_phase)

bucket_source_trial_status = addict.Dict()
bucket_source_trial_status.status.terms.field = "evidence.drug2clinic.status"
q.aggs.evidence_known_drug.composite.sources.append(bucket_source_trial_status)

bucket_source_drug = addict.Dict()
bucket_source_drug.drug.terms.field = "drug.molecule_name.keyword"
q.aggs.evidence_known_drug.composite.sources.append(bucket_source_drug)

bucket_source_disease = addict.Dict()
bucket_source_disease.disease_id.terms.field = "disease.id"
q.aggs.evidence_known_drug.composite.sources.append(bucket_source_disease)

bucket_source_target = addict.Dict()
bucket_source_target.target.terms.field = "target.id"
q.aggs.evidence_known_drug.composite.sources.append(bucket_source_target)

#get certain fields from within each bucket
##this will only return the top 100 results in each bucket, which should be enough
##note: this is *slow*

q.aggs.evidence_known_drug.aggregations.content.top_hits._source = [
bucket_source = [
"disease.efo_info.label",
"evidence.drug2clinic.urls",
"evidence.drug2clinic.clinical_trial_phase.label",
@@ -933,8 +906,43 @@ def get_evidence_known_drug(self,
"drug.id",
"drug.molecule_type"
]

aggs_status = addict.Dict()
aggs_status.terms.field = "evidence.drug2clinic.status"
aggs_status.terms.size = 9000
aggs_status.aggregations.content.top_hits._source = bucket_source
#this can be increased by changing index.max_inner_result_window index setting
aggs_status.aggregations.content.top_hits.size = 100

aggs_status_missing = addict.Dict()
aggs_status_missing.missing.field = "evidence.drug2clinic.status"
aggs_status_missing.aggregations.content.top_hits._source = bucket_source
#this can be increased by changing index.max_inner_result_window index setting
q.aggs.evidence_known_drug.aggregations.content.top_hits.size=100
aggs_status_missing.aggregations.content.top_hits.size = 100

aggs_phase = addict.Dict()
aggs_phase.terms.field = "evidence.drug2clinic.clinical_trial_phase.numeric_index"
aggs_phase.terms.size = 9000
aggs_phase.aggregations.status = aggs_status
aggs_phase.aggregations.status_missing = aggs_status_missing

aggs_drug = addict.Dict()
aggs_drug.terms.field = "drug.molecule_name.keyword"
aggs_drug.terms.size = 9000
aggs_drug.aggregations.phase = aggs_phase

aggs_target = addict.Dict()
aggs_target.terms.field = "target.id"
aggs_target.terms.size = 9000
aggs_target.aggregations.drug = aggs_drug

evidence_known_drug = addict.Dict()
evidence_known_drug.terms.field = "disease.id"
evidence_known_drug.terms.size = 9000
evidence_known_drug.aggregations.target = aggs_target

q.aggs.evidence_known_drug = evidence_known_drug


#these are to generate the summary
q.aggs.associated_diseases.cardinality.field = "disease.id"
@@ -956,108 +964,131 @@ def get_evidence_known_drug(self,
#print(json.dumps(res, indent=2, sort_keys=True))

data = []
for bucket in res["aggregations"]["evidence_known_drug"]["buckets"]:
values = {}

values["disease_id"] = bucket["key"]["disease_id"]
values["drug_label"] = bucket["key"]["drug"]
values["clinical_trial_phase_number"] = bucket["key"]["phase"]
values["status"] = bucket["key"]["status"]
values["target_id"] = bucket["key"]["target"]

urls = []
disease_name = None
trial_phase_label = None
drug_id = None
drug_type = None
mechanisms_of_action = set()
target_activity = None
target_symbol = None
target_classes = set()

for hit in bucket["content"]["hits"]["hits"]:
for url in hit["_source"]["evidence"]["drug2clinic"]["urls"]:
urls.append(url)

if disease_name is None:
disease_name = hit["_source"]["disease"]["efo_info"]["label"]
elif disease_name == hit["_source"]["disease"]["efo_info"]["label"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected disease names %s and %s".format(disease_name,
hit["_source"]["disease"]["efo_info"]["label"]))

if target_activity is None:
target_activity = hit["_source"]["target"]["activity"]
elif target_activity == hit["_source"]["target"]["activity"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected target activity %s and %s".format(target_activity,
hit["_source"]["target"]["activity"]))

if target_symbol is None:
target_symbol = hit["_source"]["target"]["gene_info"]["symbol"]
elif target_symbol == hit["_source"]["target"]["gene_info"]["symbol"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected target symbol %s and %s".format(target_symbol,
hit["_source"]["target"]["gene_info"]["symbol"]))

for target_class in hit["_source"]["target"]["target_class"]:
target_classes.add(target_class)

if trial_phase_label is None:
trial_phase_label = hit["_source"]["evidence"]["drug2clinic"]["clinical_trial_phase"]["label"]
elif trial_phase_label == hit["_source"]["evidence"]["drug2clinic"]["clinical_trial_phase"]["label"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected trial phase label %s and %s".format(trial_phase_label,
hit["_source"]["evidence"]["drug2clinic"]["clinical_trial_phase"]["label"]))

if drug_id is None:
drug_id = hit["_source"]["drug"]["id"]
elif drug_id == hit["_source"]["drug"]["id"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected drug_id %s and %s".format(drug_id,
hit["_source"]["drug"]["id"]))

if drug_type is None:
drug_type = hit["_source"]["drug"]["molecule_type"]
elif drug_type == hit["_source"]["drug"]["molecule_type"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected drug_type %s and %s".format(drug_type,
hit["_source"]["drug"]["molecule_type"]))

mechanism_of_action = hit["_source"]["evidence"]["target2drug"]["mechanism_of_action"]
if mechanism_of_action not in mechanisms_of_action:
mechanisms_of_action.add(mechanism_of_action)

values["urls"] = sorted(urls)
values["disease_name"] = disease_name
values["count"] = bucket["doc_count"]
values["clinical_trial_phase_label"] = trial_phase_label
values["drug_id"] = drug_id
values["drug_type"] = drug_type
values["mechanisms_of_action"] = sorted(mechanisms_of_action)
values["target_activity"] = target_activity
values["target_symbol"] = target_symbol
values["target_classes"] = sorted(target_classes)

data.append(values)
for disease_bucket in res["aggregations"]["evidence_known_drug"]["buckets"]:
disease_id = disease_bucket["key"]
for target_bucket in disease_bucket["target"]["buckets"]:
target_id = target_bucket["key"]
for drug_bucket in target_bucket["drug"]["buckets"]:
drug_label = drug_bucket["key"]
for phase_bucket in drug_bucket["phase"]["buckets"]:
phase_id = phase_bucket["key"]

#mangle status around into a single loop
status_hits = {}
for status_bucket in phase_bucket["status"]["buckets"]:
status_id = status_bucket["key"]
status_hits[status_id] = status_bucket["content"]["hits"]["hits"]
if phase_bucket["status_missing"]["doc_count"]:
status_id = "N/A"
status_hits[status_id] = phase_bucket["status_missing"]["content"]["hits"]["hits"]

for status_id in status_hits:
hits = status_hits[status_id]

values = {}

values["disease_id"] = disease_id
values["drug_label"] = drug_label
values["clinical_trial_phase_number"] = phase_id
values["status"] = status_id
values["target_id"] = target_id

urls = []
disease_name = None
trial_phase_label = None
drug_id = None
drug_type = None
mechanisms_of_action = set()
target_activity = None
target_symbol = None
target_classes = set()

for hit in hits:
for url in hit["_source"]["evidence"]["drug2clinic"]["urls"]:
urls.append(url)

if disease_name is None:
disease_name = hit["_source"]["disease"]["efo_info"]["label"]
elif disease_name == hit["_source"]["disease"]["efo_info"]["label"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected disease names %s and %s".format(disease_name,
hit["_source"]["disease"]["efo_info"]["label"]))

if target_activity is None:
target_activity = hit["_source"]["target"]["activity"]
elif target_activity == hit["_source"]["target"]["activity"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected target activity %s and %s".format(target_activity,
hit["_source"]["target"]["activity"]))

if target_symbol is None:
target_symbol = hit["_source"]["target"]["gene_info"]["symbol"]
elif target_symbol == hit["_source"]["target"]["gene_info"]["symbol"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected target symbol %s and %s".format(target_symbol,
hit["_source"]["target"]["gene_info"]["symbol"]))

for target_class in hit["_source"]["target"]["target_class"]:
target_classes.add(target_class)

if trial_phase_label is None:
trial_phase_label = hit["_source"]["evidence"]["drug2clinic"]["clinical_trial_phase"]["label"]
elif trial_phase_label == hit["_source"]["evidence"]["drug2clinic"]["clinical_trial_phase"]["label"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected trial phase label %s and %s".format(trial_phase_label,
hit["_source"]["evidence"]["drug2clinic"]["clinical_trial_phase"]["label"]))

if drug_id is None:
drug_id = hit["_source"]["drug"]["id"]
elif drug_id == hit["_source"]["drug"]["id"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected drug_id %s and %s".format(drug_id,
hit["_source"]["drug"]["id"]))

if drug_type is None:
drug_type = hit["_source"]["drug"]["molecule_type"]
elif drug_type == hit["_source"]["drug"]["molecule_type"]:
#matches existing do nothing
pass
else:
#found a new that is different from the previous one
raise ValueError("Unexpected drug_type %s and %s".format(drug_type,
hit["_source"]["drug"]["molecule_type"]))

mechanism_of_action = hit["_source"]["evidence"]["target2drug"]["mechanism_of_action"]
if mechanism_of_action not in mechanisms_of_action:
mechanisms_of_action.add(mechanism_of_action)



values["urls"] = sorted(urls)
values["disease_name"] = disease_name
values["count"] = len(hits)
values["clinical_trial_phase_label"] = trial_phase_label
values["drug_id"] = drug_id
values["drug_type"] = drug_type
values["mechanisms_of_action"] = sorted(mechanisms_of_action)
values["target_activity"] = target_activity
values["target_symbol"] = target_symbol
values["target_classes"] = sorted(target_classes)

data.append(values)

facets = {}
facets["unique_drugs"] = res["aggregations"]["unique_drugs"]["value"]