def handle(self, domain, case_type, **options):
        self.domain = domain
        self.case_type = case_type
        commit = options['commit']
        self.debug_info = options['debug_info']

        filename = '{}-{}.csv'.format(
            self.__module__.split('.')[-1],
            datetime.datetime.now().strftime('%Y-%m-%d_%H.%M.%S'))
        print("Logging actions to {}".format(filename))
        with open(filename, 'w') as f:
            if self.debug_info:
                fields = self.logfile_fields + self.logfile_debug_fields
            else:
                fields = self.logfile_fields
            logfile = csv.DictWriter(f, fields, extrasaction='ignore')
            logfile.writeheader()

            print("Finding duplicates")
            bad_cases = get_duplicated_case_stubs(self.domain, self.case_type)
            if self.debug_info:
                print("Adding debug info to cases")
                add_debug_info_to_cases(bad_cases, limit_debug_to=None)
            print("Processing duplicate cases")
            for case in bad_cases:
                logfile.writerow(case)
Exemple #2
0
 def get_duplicate_id_case_info(domain, case_type, limit_debug_to=None):
     total_cases = CaseES().domain(domain).case_type(case_type).count()
     bad_cases = get_duplicated_case_stubs(domain, case_type)
     add_debug_info_to_cases(bad_cases, limit_debug_to)
     context = {
         'case_type': case_type,
         'num_bad_cases': len(bad_cases),
         'num_total_cases': total_cases,
         'num_good_cases': total_cases - len(bad_cases),
         'bad_cases': bad_cases,
     }
     return context
Exemple #3
0
    def handle(self, domain, **options):
        self.domain = domain
        self.accessor = CaseAccessors(domain)
        commit = options['commit']
        self.id_generator = ReadableIdGenerator(domain, commit)

        filename = '{}-{}.csv'.format(
            self.__module__.split('.')[-1],
            datetime.datetime.now().strftime('%Y-%m-%d_%H.%M.%S'))
        print("Logging actions to {}".format(filename))
        with open(filename, 'w') as f:
            logfile = csv.DictWriter(f,
                                     self.logfile_fields,
                                     extrasaction='ignore')
            logfile.writeheader()

            print("Finding duplicates")
            bad_case_stubs = get_duplicated_case_stubs(self.domain,
                                                       CASE_TYPE_PERSON)
            bad_cases = self.accessor.iter_cases(stub['case_id']
                                                 for stub in bad_case_stubs)

            print("Processing duplicate cases")
            for person_case in with_progress_bar(bad_cases,
                                                 len(bad_case_stubs)):
                if person_case.get_case_property(
                        'enrolled_in_private') == 'true':
                    updates = list(
                        filter(None, self.get_private_updates(person_case)))
                else:
                    updates = list(
                        filter(None, self.get_public_updates(person_case)))

                person_info = self.get_person_case_info(person_case)
                for case, update in updates:
                    log = {
                        unidecode(k): unidecode(v)
                        for d in [person_info, update] for k, v in d.items()
                        if v
                    }
                    log['case_type'] = case.type
                    log['case_id'] = case.case_id
                    logfile.writerow(log)

                if commit:
                    update_tuples = [(case.case_id, update, False)
                                     for case, update in updates]
                    bulk_update_cases(self.domain, update_tuples,
                                      self.__module__)