Skip to content

Commit 0f58279

Browse files
authored
Merge pull request #420 from AmpliconSuite/search_fix
fix for search
2 parents 8f3f223 + 0fb9c8c commit 0f58279

1 file changed

Lines changed: 43 additions & 56 deletions

File tree

caper/caper/views.py

Lines changed: 43 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@
6363
# imports for coamp graph
6464
from .neo4j_utils import load_graph, fetch_subgraph
6565

66+
# Import search function
67+
from .search import perform_search
68+
6669
import subprocess
6770
import shutil
6871
import caper.sample_plot as sample_plot
@@ -2869,62 +2872,46 @@ def search_results(request):
28692872
# Get the combined cancer/tissue field
28702873
cancer_tissue = request.POST.get("metadata_cancer_tissue", "").upper()
28712874

2872-
# Gene Search
2873-
if request.user.is_authenticated:
2874-
username = request.user.username
2875-
useremail = request.user.email
2876-
query_obj = {'private': True, "$or": [{"project_members": username}, {"project_members": useremail}],
2877-
'Oncogenes': gen_query, 'delete': False}
2878-
2879-
private_projects = list(collection_handle.find(query_obj))
2880-
# private_projects = get_projects_close_cursor(query_obj)
2881-
else:
2882-
private_projects = []
2883-
2884-
public_projects = list(collection_handle.find({'private': False, 'Oncogenes': gen_query, 'delete': False}))
2885-
# public_projects = get_projects_close_cursor({'private' : False, 'Oncogenes' : gen_query, 'delete': False})
2875+
# We'll set both parameters to the same value for the backend search
2876+
cancer_type = cancer_tissue
2877+
tissue_origin = "" # Leave empty to avoid duplicate filtering
2878+
2879+
extra_metadata = request.POST.get('metadata_extra', "").upper()
2880+
2881+
# Store user query for persistence in the form
2882+
user_query = {
2883+
"genequery": gene_search,
2884+
"project_name": project_name,
2885+
"classquery": classifications,
2886+
"metadata_sample_name": sample_name,
2887+
"metadata_sample_type": sample_type,
2888+
"metadata_cancer_tissue": cancer_tissue, # New field
2889+
'extra_metadata': extra_metadata
2890+
}
28862891

2887-
for proj in private_projects:
2888-
prepare_project_linkid(proj)
2889-
for proj in public_projects:
2890-
prepare_project_linkid(proj)
2892+
# Debugging logs
2893+
logging.info(f'Search terms: Gene={gene_search}, Project={project_name}, Class={classifications}, '
2894+
f'Sample Name={sample_name}, Sample Type={sample_type}, Cancer/Tissue={cancer_tissue},'
2895+
f' Extra Metadata={extra_metadata}')
2896+
2897+
# Run the search function
2898+
search_results = perform_search(
2899+
genequery=gene_search,
2900+
project_name=project_name,
2901+
classquery=classifications,
2902+
metadata_sample_name=sample_name,
2903+
metadata_sample_type=sample_type,
2904+
metadata_cancer_type=cancer_tissue, # Use the combined term
2905+
metadata_tissue_origin=tissue_origin, # Leave this empty
2906+
extra_metadata=extra_metadata,
2907+
user=request.user
2908+
)
28912909

2892-
def collect_class_data(projects):
2893-
sample_data = []
2894-
for project in projects:
2895-
project_name = project['project_name']
2896-
project_linkid = project['_id']
2897-
features = project['runs']
2898-
features_list = replace_space_to_underscore(features)
2899-
data = sample_data_from_feature_list(features_list)
2900-
2901-
for sample in data:
2902-
sample['project_name'] = project_name
2903-
sample['project_linkid'] = project_linkid
2904-
2905-
# Gene and classification checks
2906-
gene_match = (genequery in sample['Oncogenes'] or len(genequery) == 0)
2907-
upperclass = list(map(str.upper, sample['Classifications']))
2908-
class_match = (classquery in upperclass or len(classquery) == 0)
2909-
2910-
# Cancer type or tissue of origin check
2911-
cancer_tissue_match = True # Default to True if no filter
2912-
if metadata_cancer_tissue:
2913-
cancer_type = sample.get('Cancer_type', '').lower()
2914-
tissue_origin = sample.get('Tissue_of_origin', '').lower()
2915-
cancer_tissue_match = (
2916-
metadata_cancer_tissue.lower() in cancer_type or
2917-
metadata_cancer_tissue.lower() in tissue_origin
2918-
)
2919-
2920-
# Only add the sample if all filters match
2921-
if gene_match and class_match and cancer_tissue_match:
2922-
sample_data.append(sample)
2923-
2924-
return sample_data
2925-
2926-
public_sample_data = collect_class_data(public_projects)
2927-
private_sample_data = collect_class_data(private_projects)
2910+
# Count the number of matches for each category
2911+
public_projects_count = len(search_results["public_projects"])
2912+
private_projects_count = len(search_results["private_projects"])
2913+
public_samples_count = len(search_results["public_sample_data"])
2914+
private_samples_count = len(search_results["private_sample_data"])
29282915

29292916
# Calculate project filter data with counts
29302917
def get_project_filters(sample_data):
@@ -2943,8 +2930,8 @@ def get_project_filters(sample_data):
29432930
# Sort by project name
29442931
return sorted(project_counts.values(), key=lambda x: x['name'])
29452932

2946-
public_project_filters = get_project_filters(public_sample_data)
2947-
private_project_filters = get_project_filters(private_sample_data)
2933+
public_project_filters = get_project_filters(search_results["public_sample_data"])
2934+
private_project_filters = get_project_filters(search_results["private_sample_data"])
29482935

29492936
query_info = {
29502937
"Gene Name": gene_search,

0 commit comments

Comments
 (0)