def handle(self, domain, **options): from casexml.apps.phone.cleanliness import ( set_cleanliness_flags_for_domain, set_cleanliness_flags_for_all_domains) force_full = options['force'] if domain: set_cleanliness_flags_for_domain(domain, force_full=force_full) else: set_cleanliness_flags_for_all_domains(force_full=force_full)
def handle(self, *args, **options): from casexml.apps.phone.cleanliness import ( set_cleanliness_flags_for_domain, set_cleanliness_flags_for_all_domains) force_full = options['force'] if len(args) == 1: domain = args[0] set_cleanliness_flags_for_domain(domain, force_full=force_full) else: assert len(args) == 0 set_cleanliness_flags_for_all_domains(force_full=force_full)
def handle(self, *args, **kwargs): from casexml.apps.phone.cleanliness import set_cleanliness_flags_for_domain if len(args) == 1: domain = args[0] set_cleanliness_flags_for_domain(domain) else: assert len(args) == 0 for domain in Domain.get_all_names(): if OWNERSHIP_CLEANLINESS.enabled(domain): print 'updating flags for {}'.format(domain) set_cleanliness_flags_for_domain(domain)
def migrate_to_enikshay(domain, migration_comment, beneficiaries, skip_adherence, chunk_size, location_owner, default_location_owner, dry_run): total = beneficiaries.count() counter = 0 num_succeeded = 0 num_failed = 0 num_failed_chunks = 0 logger.info('Starting migration of %d patients in domain %s.' % (total, domain)) if dry_run: logger.info('Dry run, exiting...') return factory = CaseFactory(domain=domain) case_structures = [] for beneficiary in beneficiaries: counter += 1 try: case_factory = BeneficiaryCaseFactory( domain, migration_comment, beneficiary, location_owner, default_location_owner ) case_structures.extend(case_factory.get_case_structures_to_create(skip_adherence)) except Exception: num_failed += 1 logger.error( 'Failed on %d of %d. Case ID=%s' % ( counter, total, beneficiary.caseId ), exc_info=True, ) else: num_succeeded += 1 if num_succeeded % chunk_size == 0: logger.info('%d cases to save.' % len(case_structures)) logger.info('committing beneficiaries {}-{}...'.format( num_succeeded - chunk_size + 1, num_succeeded )) try: factory.create_or_update_cases(case_structures) except Exception: num_failed_chunks += 1 logger.error( 'Failure writing case structures', exc_info=True, ) case_structures = [] logger.info('done') logger.info( 'Succeeded on %s of %d. Case ID=%s' % ( counter, total, beneficiary.caseId ) ) if case_structures: logger.info('committing final cases...'.format(num_succeeded - chunk_size, num_succeeded)) factory.create_or_update_cases(case_structures) logger.info('Done creating cases for domain %s.' % domain) logger.info('Number of attempts: %d.' % counter) logger.info('Number of successes: %d.' % num_succeeded) logger.info('Number of failures: %d.' % num_failed) logger.info('Number of chunks to fail writing: %d' % num_failed_chunks) # since we circumvented cleanliness checks just call this at the end logger.info('Setting cleanliness flags') set_cleanliness_flags_for_domain(domain, force_full=True, raise_soft_assertions=False) logger.info('Done!')
def handle(self, domain, migration_comment, **options): if not settings.UNIT_TESTING: raise CommandError( 'must migrate case data from phone_number to contact_phone_number before running' ) base_query = PatientDetail.objects.order_by('scode', 'Dtocode', 'Tbunitcode', 'PHI') if options['location_codes']: location_filter = Q() for location_code in options['location_codes']: codes = location_code.split('-') assert 1 <= len(codes) <= 4 q = Q(scode=codes[0]) if len(codes) > 1: q = q & Q(Dtocode=codes[1]) if len(codes) > 2: q = q & Q(Tbunitcode=int(codes[2])) if len(codes) > 3: q = q & Q(PHI=int(codes[3])) location_filter = location_filter | q base_query = base_query.filter(location_filter) if options['nikshay_ids']: base_query = base_query.filter(PregId__in=options['nikshay_ids']) start = options['start'] limit = options['limit'] chunk_size = options['chunk_size'] test_phi = options['test_phi'] if test_phi: logger.warning("** USING TEST PHI ID **") if limit is not None: patient_details = base_query[start:start + limit] else: patient_details = base_query[start:] total = patient_details.count() counter = 0 num_succeeded = 0 num_failed = 0 num_matching_case_not_migrated = 0 logger.info('Starting migration of %d patient cases on domain %s.' % (total, domain)) nikshay_codes_to_location = get_nikshay_codes_to_location(domain) factory = CaseFactory(domain=domain) case_structures = [] for patient_detail in patient_details: counter += 1 try: case_factory = EnikshayCaseFactory(domain, migration_comment, patient_detail, nikshay_codes_to_location, test_phi) case_structures.extend( case_factory.get_case_structures_to_create()) except MatchingNikshayIdCaseNotMigrated: num_matching_case_not_migrated += 1 logger.error( 'Matching case not migrated for %d of %d. Nikshay ID=%s' % (counter, total, patient_detail.PregId)) except Exception: num_failed += 1 logger.error( 'Failed on %d of %d. Nikshay ID=%s' % (counter, total, patient_detail.PregId), exc_info=True, ) else: num_succeeded += 1 if num_succeeded % chunk_size == 0: logger.info('committing cases {}-{}...'.format( num_succeeded - chunk_size, num_succeeded)) factory.create_or_update_cases(case_structures) case_structures = [] logger.info('done') logger.info('Succeeded on %s of %d. Nikshay ID=%s' % (counter, total, patient_detail.PregId)) if case_structures: logger.info('committing final cases...'.format( num_succeeded - chunk_size, num_succeeded)) factory.create_or_update_cases(case_structures) logger.info('Done creating cases for domain %s.' % domain) logger.info('Number of attempts: %d.' % counter) logger.info('Number of successes: %d.' % num_succeeded) logger.info('Number of failures: %d.' % num_failed) logger.info('Number of cases matched but not migrated: %d.' % num_matching_case_not_migrated) # since we circumvented cleanliness checks just call this at the end logger.info('Setting cleanliness flags') set_cleanliness_flags_for_domain(domain, force_full=True, raise_soft_assertions=False) logger.info('Done!')
def handle(self, domain, **options): base_query = Beneficiary.objects.filter( caseStatus__in=['suspect', 'patient', 'patient '], ) if options['nikshayId']: base_query = base_query.filter(nikshayId=options['nikshayId']) start = options['start'] limit = options['limit'] chunk_size = options['chunk_size'] if limit is not None: beneficiaries = base_query[start:start + limit] else: beneficiaries = base_query[start:] # Assert never null assert not beneficiaries.filter(firstName__isnull=True).exists() assert not beneficiaries.filter(lastName__isnull=True).exists() assert not beneficiaries.filter(phoneNumber__isnull=True).exists() assert not Episode.objects.filter( dateOfDiagnosis__isnull=True).exists() assert not Episode.objects.filter(patientWeight__isnull=True).exists() assert not Episode.objects.filter(rxStartDate__isnull=True).exists() assert not Episode.objects.filter(site__isnull=True).exists() assert not Adherence.objects.filter(creationDate__isnull=True).exists() # Assert always null assert not beneficiaries.filter(mdrTBSuspected__isnull=False).exists() assert not beneficiaries.filter(middleName__isnull=False).exists() assert not beneficiaries.filter(nikshayId__isnull=False).exists() assert not beneficiaries.filter(symptoms__isnull=False).exists() assert not beneficiaries.filter(tsType__isnull=False).exists() assert not Episode.objects.filter(phoneNumber__isnull=False).exists() total = beneficiaries.count() counter = 0 num_succeeded = 0 num_failed = 0 logger.info('Starting migration of %d patients in domain %s.' % (total, domain)) factory = CaseFactory(domain=domain) case_structures = [] for beneficiary in beneficiaries: counter += 1 try: case_factory = BeneficiaryCaseFactory(domain, beneficiary) case_structures.extend( case_factory.get_case_structures_to_create()) except Exception: num_failed += 1 logger.error( 'Failed on %d of %d. Nikshay ID=%s' % (counter, total, beneficiary.nikshayId), exc_info=True, ) else: num_succeeded += 1 if num_succeeded % chunk_size == 0: logger.info('committing cases {}-{}...'.format( num_succeeded - chunk_size, num_succeeded)) factory.create_or_update_cases(case_structures) case_structures = [] logger.info('done') logger.info('Succeeded on %s of %d. Nikshay ID=%s' % (counter, total, beneficiary.nikshayId)) if case_structures: logger.info('committing final cases...'.format( num_succeeded - chunk_size, num_succeeded)) factory.create_or_update_cases(case_structures) logger.info('Done creating cases for domain %s.' % domain) logger.info('Number of attempts: %d.' % counter) logger.info('Number of successes: %d.' % num_succeeded) logger.info('Number of failures: %d.' % num_failed) # since we circumvented cleanliness checks just call this at the end logger.info('Setting cleanliness flags') set_cleanliness_flags_for_domain(domain, force_full=True, raise_soft_assertions=False) logger.info('Done!')
def handle(self, domain, **options): base_query = PatientDetail.objects.filter( PregId__startswith=options['startswith'], ).order_by('PregId') start = options['start'] limit = options['limit'] chunk_size = options['chunk_size'] test_phi = options['test_phi'] if test_phi: logger.warning("** USING TEST PHI ID **") if limit is not None: patient_details = base_query[start:start + limit] else: patient_details = base_query[start:] total = patient_details.count() counter = 0 num_succeeded = 0 num_failed = 0 logger.info('Starting migration of %d patient cases on domain %s.' % (total, domain)) nikshay_codes_to_location = get_nikshay_codes_to_location(domain) factory = CaseFactory(domain=domain) case_structures = [] for patient_detail in patient_details: counter += 1 try: case_factory = EnikshayCaseFactory( domain, patient_detail, nikshay_codes_to_location, test_phi ) case_structures.extend(case_factory.get_case_structures_to_create()) except Exception: num_failed += 1 logger.error( 'Failed on %d of %d. Nikshay ID=%s' % ( counter, total, patient_detail.PregId ), exc_info=True, ) else: num_succeeded += 1 if num_succeeded % chunk_size == 0: logger.info('committing cases {}-{}...'.format(num_succeeded - chunk_size, num_succeeded)) factory.create_or_update_cases(case_structures) case_structures = [] logger.info('done') logger.info( 'Succeeded on %s of %d. Nikshay ID=%s' % ( counter, total, patient_detail.PregId ) ) if case_structures: logger.info('committing final cases...'.format(num_succeeded - chunk_size, num_succeeded)) factory.create_or_update_cases(case_structures) logger.info('Done creating cases for domain %s.' % domain) logger.info('Number of attempts: %d.' % counter) logger.info('Number of successes: %d.' % num_succeeded) logger.info('Number of failures: %d.' % num_failed) # since we circumvented cleanliness checks just call this at the end logger.info('Setting cleanliness flags') set_cleanliness_flags_for_domain(domain, force_full=True) logger.info('Done!')