Esempio n. 1
0
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))
Esempio n. 2
0
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))
Esempio n. 3
0
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))
Esempio n. 4
0
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))
Esempio n. 5
0
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
Esempio n. 6
0
    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!"
Esempio n. 7
0
    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!"