def handle(self, *args, **options): self.stdout.write("\n") self.stdout.write('fetching repeater data...') repeater_summary = Repeater.get_db().view('repeaters/repeaters', group_level=1, reduce=True).all() repeaters_by_domain = { info['key'][0]: info['value'] for info in repeater_summary } self.stdout.write("\n") self.stdout.write('fetching repeat record data...') repeat_records_summary = RepeatRecord.get_db().view( 'repeaters/repeat_records', group_level=1, reduce=True).all() self.stdout.write("\n\n\n") self.stdout.write("Domain\tRepeaters\tRepeatRecords") for info in repeat_records_summary: domain = info['key'][0] num_repeaters = repeaters_by_domain.get(domain, 0) num_repeat_records = info['value'] self.stdout.write( f'{domain}\t{num_repeaters}\t{num_repeat_records}') self.stdout.write('*' * 230) self.stdout.write('done...')
def migrate_auth_field(apps, schema_editor): repeater_ids = [ row['id'] for row in Repeater.view('repeaters/repeaters', include_docs=False, reduce=False, wrap_doc=False) ] iter_update( db=Repeater.get_db(), fn=migrate_repeater, ids=repeater_ids, )
def migrate_auth_field(apps, schema_editor): repeater_ids = [row['id'] for row in Repeater.view( 'repeaters/repeaters', include_docs=False, reduce=False, wrap_doc=False )] iter_update( db=Repeater.get_db(), fn=migrate_repeater, ids=repeater_ids, )
def iter_repeaters(): for result in Repeater.get_db().view('repeaters/repeaters', reduce=False, include_docs=True).all(): try: repeater = Repeater.wrap(result['doc']) except ResourceNotFound: if result['doc']['doc_type'] in DELETED_REPEATER_CLASSES: # repeater is an instance of a class that has been deleted # from the codebase. It is safe to delete because it does # not have repeat records waiting to be sent, and no future # repeat records will be created for it. delete_zombie_repeater_instance(result['doc']) continue else: raise else: yield repeater
def delete_zombie_repeater_instance(document: dict): assert document['doc_type'] in DELETED_REPEATER_CLASSES db = Repeater.get_db() # Do not delete old repeat records. There could be thousands, and they # are benign because they will not be resent. db.delete_doc(document['_id'])