コード例 #1
0
    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...')
コード例 #2
0
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,
    )
コード例 #3
0
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,
    )
コード例 #4
0
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
コード例 #5
0
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'])