def hierarchy_report(request): manager = get_database_manager(request) column_headers, values = [], [] choices = [(t, '.'.join(t)) for t in get_all_entity_types(manager)] if request.method == 'POST': form = ReportHierarchy(data=request.POST, choices=choices) if form.is_valid(): entity_type = form.cleaned_data['entity_type'].split(".") aggregates_field = form.cleaned_data['aggregates_field'] reduce_function = form.cleaned_data['reduce'] aggregates = {aggregates_field: reduce_function} aggregate_on_path = form.cleaned_data['aggregate_on_path'] level = form.cleaned_data['level'] report_data = data.aggregate(manager, entity_type=entity_type, aggregates=aggregates, aggregate_on=TypeAggregration(type=aggregate_on_path,level=level), ) column_headers, values = tabulate_output(report_data, "Path") else: form = ReportHierarchy(choices=choices) return render_to_response('reports/reportperhierarchypath.html', {'form': form, 'column_headers': column_headers, 'column_values': values}, context_instance=RequestContext(request))
def report(request): manager = get_database_manager(request) types = get_all_entity_types(manager) choices = [('.'.join(t), '.'.join(t)) for t in types] column_headers = [] values = [] error_message = None if request.method == 'POST': form = Report(data=request.POST, choices=choices) if form.is_valid(): entity_type = form.cleaned_data['entity_type'].split(".") filter_criteria = form.cleaned_data['filter'] aggregates_field = form.cleaned_data['aggregates_field'] location = filter_criteria.split(",") if filter_criteria else None report_data = data.aggregate(manager, entity_type=entity_type, aggregates={aggregates_field: data.reduce_functions.LATEST}, filter=LocationFilter(location=location) ) column_headers, values = tabulate_output(report_data, "ID") if not len(values): error_message = 'Sorry, No records found for this query' else: form = Report(choices=choices) return render_to_response('reports/reportperlocation.html', {'form': form, 'column_headers': column_headers, 'column_values': values, 'error_message': error_message}, context_instance=RequestContext(request))
def hierarchy_report(request): manager = get_database_manager(request) column_headers, values = [], [] choices = [(t, '.'.join(t)) for t in get_all_entity_types(manager)] if request.method == 'POST': form = ReportHierarchy(data=request.POST, choices=choices) if form.is_valid(): entity_type = form.cleaned_data['entity_type'].split(".") aggregates_field = form.cleaned_data['aggregates_field'] reduce_function = form.cleaned_data['reduce'] aggregates = {aggregates_field: reduce_function} aggregate_on_path = form.cleaned_data['aggregate_on_path'] level = form.cleaned_data['level'] report_data = data.aggregate( manager, entity_type=entity_type, aggregates=aggregates, aggregate_on=TypeAggregration(type=aggregate_on_path, level=level), ) column_headers, values = tabulate_output(report_data, "Path") else: form = ReportHierarchy(choices=choices) return render_to_response('reports/reportperhierarchypath.html', { 'form': form, 'column_headers': column_headers, 'column_values': values }, context_instance=RequestContext(request))
def report(request): manager = get_database_manager(request) types = get_all_entity_types(manager) choices = [('.'.join(t), '.'.join(t)) for t in types] column_headers = [] values = [] error_message = None if request.method == 'POST': form = Report(data=request.POST, choices=choices) if form.is_valid(): entity_type = form.cleaned_data['entity_type'].split(".") filter_criteria = form.cleaned_data['filter'] aggregates_field = form.cleaned_data['aggregates_field'] location = filter_criteria.split(",") if filter_criteria else None report_data = data.aggregate( manager, entity_type=entity_type, aggregates={aggregates_field: data.reduce_functions.LATEST}, filter=LocationFilter(location=location)) column_headers, values = tabulate_output(report_data, "ID") if not len(values): error_message = 'Sorry, No records found for this query' else: form = Report(choices=choices) return render_to_response('reports/reportperlocation.html', { 'form': form, 'column_headers': column_headers, 'column_values': values, 'error_message': error_message }, context_instance=RequestContext(request))
def find_reporters_by_from_number(dbm, from_number): reporters = data.aggregate(dbm, entity_type=REPORTER_ENTITY_TYPE, aggregates={MOBILE_NUMBER_FIELD: data.reduce_functions.LATEST, NAME_FIELD: data.reduce_functions.LATEST}, aggregate_on=EntityAggregration() ) from_reporter_list = [{id: reporters[id]} for id in reporters if reporters[id].get(MOBILE_NUMBER_FIELD) == from_number] if not len(from_reporter_list): raise NumberNotRegisteredException(from_number) return from_reporter_list
def test_should_create_with_bulk_upload(self): NUM_ENTITIES = 1000 DATA_REC_PER_ENTITY = 10 BATCH = (NUM_ENTITIES * DATA_REC_PER_ENTITY) / 1 start = datetime.datetime.now() le = [ Entity(self.dbm, entity_type=["Health_Facility", "Clinic"], location=['India', 'MH', 'Pune']) for x in range(0, NUM_ENTITIES) ] entity_docs = [x._doc for x in le] r = self.dbm.database.update(entity_docs) end = datetime.datetime.now() print "Updating entities took %s" % (end - start, ) print "data records" for e in le: for i in range(0, DATA_REC_PER_ENTITY): e.add_data_bulk( data=[("beds", 10, self.beds_type), ("meds", 10, self.meds_type)]) print "total bulk docs %s" % (len(self.dbm.bulk)) print "bulk save !" start = datetime.datetime.now() for s in range(0, len(self.dbm.bulk))[::BATCH]: start = datetime.datetime.now() r = self.dbm.database.update(self.dbm.bulk[s:s + BATCH]) end = datetime.datetime.now() print "Bulk updates took %s" % (end - start, ) print "Firing view..." start = datetime.datetime.now() values = data.aggregate(self.dbm, entity_type=["Health_Facility", "Clinic"], aggregates={ "beds": data.reduce_functions.LATEST, "meds": data.reduce_functions.COUNT }, aggregate_on=EntityAggregration()) end = datetime.datetime.now() print "views took %s" % (end - start, ) print "Done!"
def test_should_create_with_bulk_upload(self): NUM_ENTITIES = 1000 DATA_REC_PER_ENTITY = 10 BATCH = (NUM_ENTITIES * DATA_REC_PER_ENTITY) / 1 start = datetime.datetime.now() le = [Entity(self.dbm, entity_type=["Health_Facility", "Clinic"], location=['India', 'MH', 'Pune']) for x in range(0, NUM_ENTITIES)] entity_docs = [x._doc for x in le] r = self.dbm.database.update(entity_docs) end = datetime.datetime.now() print "Updating entities took %s" % (end - start,) print "data records" for e in le: for i in range(0, DATA_REC_PER_ENTITY): e.add_data_bulk(data=[("beds", 10, self.beds_type), ("meds", 10, self.meds_type)]) print "total bulk docs %s" % (len(self.dbm.bulk)) print "bulk save !" start = datetime.datetime.now() for s in range(0, len(self.dbm.bulk))[::BATCH]: start = datetime.datetime.now() r = self.dbm.database.update(self.dbm.bulk[s:s + BATCH]) end = datetime.datetime.now() print "Bulk updates took %s" % (end - start,) print "Firing view..." start = datetime.datetime.now() values = data.aggregate(self.dbm, entity_type=["Health_Facility", "Clinic"], aggregates={"beds": data.reduce_functions.LATEST, "meds": data.reduce_functions.COUNT}, aggregate_on=EntityAggregration() ) end = datetime.datetime.now() print "views took %s" % (end - start,) print "Done!"