1919
2020import json
2121import logging
22- import copy
2322
24- from django .contrib import messages
2523from django .contrib .auth .models import User
2624from django .conf import settings
2725from django .core .exceptions import ObjectDoesNotExist , MultipleObjectsReturned
2826from django .http import HttpResponse , JsonResponse
29- from django .shortcuts import render , redirect
3027from django .views .decorators .csrf import csrf_protect , csrf_exempt
3128from django .views .decorators .http import require_http_methods
3229from ..decorators import api_auth
3734 _cohort_preview_query_api , _cohort_query_api
3835from ..views .views import _save_cohort ,_delete_cohort
3936
37+ NUMERIC_OPS = ('_btw' , '_ebtw' , '_btwe' , '_ebtwe' , '_gte' , '_lte' , '_gt' , '_lt' , '_eq' )
4038BQ_ATTEMPT_MAX = 10
4139
4240debug = settings .DEBUG # RO global for this file
@@ -67,7 +65,7 @@ def save_cohort_api(request):
6765 return JsonResponse (response )
6866
6967 data = body ["request_data" ]
70- name = data ['name' ]
68+ cohort_name = data ['name' ]
7169 description = data ['description' ]
7270 filters = data ['filters' ]
7371 # Create a cohort only against the current version
@@ -76,31 +74,28 @@ def save_cohort_api(request):
7674 # We first need to convert the filters to a form accepted by _save_cohorts
7775 filters_by_name = {}
7876 for filter , value in filters .items ():
79- if filter .endswith (( '_lt' , '_lte' , '_ebtw' , '_ebtwe' , '_btw' , '_btwe' , '_gte' '_gt' ) ):
80- name = filter .rsplit ('_' , 1 )[0 ]
81- op = filter .rsplit ('_' , 1 )[- 1 ]
82- filters_by_name [name ] = dict (
77+ if filter .endswith (NUMERIC_OPS ):
78+ attribute_name = filter .rsplit ('_' , 1 )[0 ]
79+ op = filter .rsplit ('_' , 1 )[- 1 ]. upper ()
80+ filters_by_name [attribute_name ] = dict (
8381 op = op ,
8482 values = value
8583 )
8684 else :
8785 filters_by_name [filter ] = value
8886 filters_by_id = {}
89- for attr in Attribute .objects .filter (name__in = list (filters .keys ())).values ('id' , 'name' ):
90- filters_by_id [str (attr ['id' ])] = filters [attr ['name' ]]
91- response = _save_cohort (user , filters = filters_by_id , name = name , desc = description , version = version ,
87+ for attr in Attribute .objects .filter (name__in = list (filters_by_name .keys ())).values ('id' , 'name' ):
88+ filters_by_id [str (attr ['id' ])] = filters_by_name [attr ['name' ]]
89+ response = _save_cohort (user , filters = filters_by_id , name = cohort_name , desc = description , version = version ,
9290 no_stats = version .active == False )
9391 cohort_id = response ['cohort_id' ]
9492 idc_data_version = Cohort .objects .get (id = cohort_id ).get_data_versions ()[0 ].version_number
95- # if request.GET['return_filter'] == 'True':
96- # response["filterSet"] = get_filterSet_api(cohort)
97- # response["filterSet"] = get_filterSet_api(cohort)
9893
9994 response ['filterSet' ] = {'idc_data_version' : idc_data_version , 'filters' : response .pop ('filters' )}
10095
10196
10297 for filter , value in response ['filterSet' ]['filters' ].items ():
103- if filter .endswith (( '_lt' , '_lte' , '_ebtw' , '_ebtwe' , '_btw' , '_btwe' , '_gte' '_gt' ) ):
98+ if filter .endswith (NUMERIC_OPS ):
10499 response ['filterSet' ]['filters' ][filter ] = to_numeric_list (value )
105100
106101 cohort_properties = dict (
@@ -130,11 +125,6 @@ def cohort_query_api(request, cohort_id=0):
130125 }
131126 return JsonResponse (info )
132127
133- # if cohort_id == 0:
134- # messages.error(request, 'Cohort requested does not exist.')
135- # return redirect('/user_landing')
136-
137- # print(request.GET.get('email', ''))
138128 try :
139129 cohort = Cohort .objects .get (id = cohort_id )
140130 except ObjectDoesNotExist as e :
@@ -150,9 +140,9 @@ def cohort_query_api(request, cohort_id=0):
150140 body = json .loads (request .body .decode ('utf-8' ))
151141 try :
152142 user = User .objects .get (email = body ['email' ])
153- except :
143+ except Exception as exc :
154144 logger .error ("[ERROR] While trying to save cohort: " )
155- logger .exception (e )
145+ logger .exception (exc )
156146 info = {
157147 "message" : f"{ body ['email' ]} is not a known user" ,
158148 "code" : 401 ,
@@ -248,7 +238,9 @@ def cohort_list_api(request):
248238 "filterSet" : get_filterSet_api (cohort )
249239 }
250240 for filter , value in cohortMetadata ['filterSet' ]['filters' ].items ():
251- if filter .endswith (('_lt' , '_lte' , '_ebtw' , '_ebtwe' , '_btw' , '_btwe' , '_gte' '_gt' )):
241+ # if filter.endswith(('_lt', '_lte', '_ebtw', '_ebtwe', '_btw', '_btwe', '_gte' '_gt')):
242+ # if filter.endswith(('_lt', '_lte', '_ebtw', '_ebtwe', '_btw', '_btwe', '_gte' '_gt')):
243+ if filter .endswith (NUMERIC_OPS ):
252244 cohortMetadata ['filterSet' ]['filters' ][filter ] = to_numeric_list (value )
253245 cohortList .append (cohortMetadata )
254246
@@ -274,9 +266,9 @@ def delete_cohort_api(request):
274266 body = json .loads (request .body .decode ('utf-8' ))
275267 try :
276268 user = User .objects .get (email = body ['email' ])
277- except :
269+ except Exception as exc :
278270 logger .error ("[ERROR] While trying to save cohort: " )
279- logger .exception (e )
271+ logger .exception (exc )
280272 response = {
281273 "message" : f"{ body ['email' ]} is not a known user" ,
282274 "code" : 401 ,
0 commit comments