def __init__(self, request, db): """Extract filters etc. information from http request.""" self.db = db self.sort = sort_from_request(request) self.pg = pagination_from_request(request) self.ss = samples_selection_from_request(request, db) self.fc = variant_filters_from_request(request, db, self.ss) self.stats = stats_service(db)
def variant_filters_from_request(request, db, samples_selection=None): """Parse a GET Request and return a list of requested filters. A filter is a tuple (name, operation, value), corresponding to a request of the type '?name=value'. See the REST API documentation for more information. :rtype: FiltersCollection """ filters = [] filterlist = request.GET.getlist('filter', []) if samples_selection is None: samples_selection = samples_selection_from_request(request, db) for f in filterlist: m = re.match(r"(\S+?)([<>=]{1,2})(.+)", f) if m: k, op, v = m.groups() filters.append((k, op, v)) else: filters.append((f, '=', '1')) return variant_filters_collection_factory(filters, samples_selection, db)
def variant_filters_from_request(request, db, samples_selection=None): """Parse a GET Request and return a list of requested filters. A filter is a tuple (name, operation, value), corresponding to a request of the type '?name=value'. See the REST API documentation for more information. :rtype: FiltersCollection """ filters = [] filterlist = request.GET.getlist('filter', []) if filterlist == []: filterlist = ['genotype=none'] if samples_selection is None: samples_selection = samples_selection_from_request(request, db) for f in filterlist: m = re.match(r"(\S+?)([<>=]{1,2})(.+)", f) if m: k, op, v = m.groups() filters.append((k, op, v)) else: filters.append((f, '=', '1')) with open('/home/liaoth/Desktop/debug.info','a+') as f1: f1.write('filters=%s ; samples=%s \n' % (str(filters),str(samples_selection))) return variant_filters_collection_factory(filters, samples_selection, db)
def samples(request, db, user=None): """Return a JSON with the list of Samples.""" ss = samples_selection_from_request(request, db) return JsonResponse(ss.expose(), safe=False)
def test_samples_selection_from_request(self): """Create a SamplesSelection from groups dessribed in URL.""" request = RequestFactory().get('', [('samples','group1=09818'), ('samples','group2=09819'), ('samples','group3=09960,09961')]) ss = samples_selection_from_request(request, db='test') self.assertIsInstance(ss, SamplesSelection)