def create_case_repeater_register(repeater, domain, payload): """ Only useful in a very specific edge case for CreateCaseRepeater If a CreateCaseRepeater has a missing repeat record, but the case now contains update transactions This can be used to properly trigger the missing repeat record. """ if not isinstance(repeater, CreateCaseRepeater): logger.error( f"Error - cannot call create_case_repeater_register on repeater type f{type(repeater)}" ) return if not create_case_repeater_allowed_to_forward(repeater, payload): return now = datetime.utcnow() repeat_record = RepeatRecord(repeater_id=repeater.get_id, repeater_type=repeater.doc_type, domain=domain, registered_on=now, next_check=now, payload_id=payload.get_id) metrics_counter('commcare.repeaters.new_record', tags={ 'domain': domain, 'doc_type': repeater.doc_type }) repeat_record.save() repeat_record.attempt_forward_now() return repeat_record
def create_repeat_records_on_dest_repeater(self, source_repeater_id, dest_repeater_id, state): dest_repeater = Repeater.get(dest_repeater_id) retriggered = set() records = iter_repeat_records_by_domain(domain, repeater_id=source_repeater_id, state=state) record_count = get_repeat_record_count(domain, repeater_id=source_repeater_id, state=state) accessor = CaseAccessors(domain) print("Iterating over records and adding new record for them") for record in with_progress_bar(records, length=record_count): if record.payload_id in retriggered: self.record_failure(record.get_id, record.payload_id, error_message="Already triggered") continue try: episode = accessor.get_case(record.payload_id) episode_case_properties = episode.dynamic_case_properties() if (episode_case_properties.get('nikshay_registered', 'false') == 'false' and episode_case_properties.get( 'private_nikshay_registered', 'false') == 'false' and not episode_case_properties.get('nikshay_id') and episode_case_properties.get('episode_type') == 'confirmed_tb' and is_valid_episode_submission(episode)): new_record = RepeatRecord( domain=domain, next_check=datetime.utcnow(), repeater_id=dest_repeater_id, repeater_type=dest_repeater.doc_type, payload_id=record.payload_id, ) if not self.dry_run: new_record.save() retriggered.add(record.payload_id) self.add_row( record, episode_case_properties.get('migration_created_case'), new_record.get_id) else: self.record_failure(record.get_id, record.payload_id, error_message="Not to be re-triggered") except Exception as e: self.record_failure(record.get_id, record.payload_id, error_message="{error}: {message}".format( error=e.__name__, message=e.message))
def create_repeat_records(cls): now = datetime.now() cls.couch_records = [] cls.sql_records = [] for __ in range(3): couch_record = RepeatRecord( domain=DOMAIN, repeater_id=cls.repeater._id, repeater_type='FormRepeater', payload_id=cls.instance_id, registered_on=now, ) couch_record.save() cls.couch_records.append(couch_record) cls.sql_records.append( SQLRepeatRecord.objects.create( domain=DOMAIN, couch_id=couch_record._id, payload_id=cls.instance_id, repeater=cls.sql_repeater, registered_at=now, ))