def odk_refresh_master(self): ''' A refresh master method that deals specifically with source_datpaoints from odk. First we find the source_datapoint_ids that we need from the source ( odk ) and then we pass those IDs as well as the user to the MasterRefresh cache. The system knows to only then refresh datapoints that have been newly created from ODK. ''' try: source_datapoints = SourceDataPoint.objects.filter( status_id = ProcessStatus.objects.get(status_text='TO_PROCESS'), source_id = Source.objects.get(source_name='odk')) m = MasterRefresh(source_datapoints,self.user_id) m.main() dp_count = len(m.new_datapoints) success_msg = 'SUCSSFULLY CREATED: ' + str(dp_count) +\ ' NEW DATPOINTS' except Exception: err = format_exc() return err, None return None, success_msg
def do(self): user_id = User.objects.get(username = '******').id document_id = SourceSubmission.objects.\ filter(process_status='TO_PROCESS').\ values_list('document_id',flat=True)[0] mr = MasterRefresh(user_id, document_id) mr.main()
def do(self): user_id = User.objects.get(username='******').id document_id = SourceSubmission.objects.\ filter(process_status='TO_PROCESS').\ values_list('document_id',flat=True)[0] mr = MasterRefresh(user_id, document_id) mr.main()
def get_object_list(self, request): document_id = request.GET['document_id'] mr = MasterRefresh(request.user.id, document_id) mr.main() doc_detail, created = DocumentDetail.objects.update_or_create( document_id=document_id, doc_detail_type_id=DocDetailType.objects.get( name='submission_processed_count').id, defaults={ 'doc_detail_value': SourceSubmission.objects.filter( process_status='PROCESSED', document_id=document_id).count() }, ) doc_detail, created = DocumentDetail.objects.update_or_create( document_id=document_id, doc_detail_type_id=DocDetailType.objects.get( name='doc_datapoint_count').id, defaults={ 'doc_detail_value': DocDataPoint.objects.filter(document_id=document_id).count() }, ) doc_detail, created = DocumentDetail.objects.update_or_create( document_id=document_id, doc_detail_type_id=DocDetailType.objects.get( name='datapoint_count').id, defaults={ 'doc_detail_value': DataPoint.objects.filter( source_submission_id__in=SourceSubmission.objects.filter( document_id=document_id).values_list( 'id', flat=True)).count() }, ) queryset = DocumentDetail.objects \ .filter(document_id=document_id).values() return queryset
def get_object_list(self, request): document_id = request.GET['document_id'] mr = MasterRefresh(request.user.id, document_id) mr.main() doc_detail, created = DocumentDetail.objects.update_or_create( document_id=document_id, doc_detail_type_id=DocDetailType.objects.get(name='submission_processed_count').id, defaults={ 'doc_detail_value': SourceSubmission.objects.filter( process_status='PROCESSED', document_id=document_id).count() }, ) doc_detail, created = DocumentDetail.objects.update_or_create( document_id=document_id, doc_detail_type_id=DocDetailType.objects.get(name='doc_datapoint_count').id, defaults={ 'doc_detail_value': DocDataPoint.objects.filter(document_id=document_id).count() }, ) doc_detail, created = DocumentDetail.objects.update_or_create( document_id=document_id, doc_detail_type_id=DocDetailType.objects.get(name='datapoint_count').id, defaults={ 'doc_detail_value': DataPoint.objects.filter( source_submission_id__in=SourceSubmission.objects.filter( document_id=document_id).values_list('id', flat=True)).count() }, ) queryset = DocumentDetail.objects \ .filter(document_id=document_id).values() return queryset
def refresh_master(request,document_id): mr = MasterRefresh(request.user.id, document_id) mr.main() return HttpResponseRedirect('/doc_review/overview/%s' % document_id)
def test_submission_to_datapoint(self): ''' This simulates the following use case: As a user journey we can describe this test case as: - user uploads file ( see how set_up method calls DocTransform ) - user maps metadata - user clicks " refresh master " -> user checks to see if data is correct - user realizes that the data is wrong, due to an invalid mapping - user re-mapps the data and clicks " refresh master" -> data from old mapping should be deleted and associated to the newly mapped value TEST CASES: 1. WHen the submission detail is refreshed, the location/campaign ids that we mapped should exist in that row. 2. DocDataPoint records are created if the necessary mapping exists 3. There are no zero or null values allowed in doc_datapoint 4. The doc_datapoint from #3 is merged into datpaoint. 5. I create mappings, sync data, realize the mapping was incorrect, re-map the metadata and the old data should be deleted, the new data created. -> was the old data deleted? -> was the new data created? ''' self.set_up() submission_qs = SourceSubmission.objects\ .filter(document_id = self.document.id)\ .values_list('id','submission_json')[0] ss_id, first_submission = submission_qs[0],json.loads(submission_qs[1]) location_code = first_submission[self.location_code_input_column] campaign_code = first_submission[self.campaign_code_input_column] raw_indicator_list = [k for k,v in first_submission.iteritems()] indicator_code = raw_indicator_list[-1] ## SIMULATED USER MAPPING ## ## see: datapoints/source-data/Nigeria/2015/06/mapping/2 ## choose meta data values for the source_map update ## map_location_id = Location.objects.all()[0].id map_campaign_id = Campaign.objects.all()[0].id first_indicator_id = Indicator.objects.all()[0].id ## map location ## som_id_l = SourceObjectMap.objects.get( content_type = 'location', source_object_code = location_code, ) som_id_l.master_object_id = map_location_id som_id_l.save() ## map campaign ## som_id_c = SourceObjectMap.objects.get( content_type = 'campaign', source_object_code = campaign_code, ) som_id_c.master_object_id = map_campaign_id som_id_c.save() ## map indicator ## som_id_i = SourceObjectMap.objects.get( content_type = 'indicator', source_object_code = indicator_code, ) som_id_i.master_object_id = first_indicator_id som_id_i.save() mr_with_new_meta = MasterRefresh(self.user.id ,self.document.id) mr_with_new_meta.refresh_submission_details() first_submission_detail = SourceSubmission.objects\ .get(id = ss_id) ## Test Case 2 ## self.assertEqual(first_submission_detail.location_id, map_location_id) self.assertEqual(first_submission_detail.campaign_id, map_campaign_id) ## now that we have created the mappign, "refresh_master" ## ## should create the relevant datapoints ## mr_with_new_meta.submissions_to_doc_datapoints() doc_dp_ids = DocDataPoint.objects.filter(document_id = self.document.id) ## Test Case #3 self.assertEqual(1,len(doc_dp_ids)) mr_with_new_meta.sync_datapoint() dps = DataPoint.objects.all() ## Test Case #4 self.assertEqual(1,len(dps)) ## Test Case #5 ## update the mapping with a new indicator value ## new_indicator_id = Indicator.objects.all()[1].id som_id_i.master_object_id = new_indicator_id som_id_i.save() mr_after_new_mapping = MasterRefresh(self.user.id ,self.document.id) mr_after_new_mapping.main() dp_with_new_indicator = DataPoint.objects.filter(indicator_id = \ new_indicator_id) dp_with_old_indicator = DataPoint.objects.filter(indicator_id = \ first_indicator_id) ## did new indicator flow through the system ?## self.assertEqual(1,len(dp_with_new_indicator)) ## did the old indicator data get deleted? self.assertEqual(0,len(dp_with_old_indicator))
def refresh_master(request, document_id): mr = MasterRefresh(request.user.id, document_id) mr.main() return HttpResponseRedirect('/doc_review/overview/%s' % document_id)