6363# imports for coamp graph
6464from .neo4j_utils import load_graph , fetch_subgraph
6565
66+ # Import search function
67+ from .search import perform_search
68+
6669import subprocess
6770import shutil
6871import 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