11from datetime import datetime
2+ from typing import TYPE_CHECKING
23from typing import cast
34
45from {{ project.package }}.models import Record
56from dipdup.context import HookContext
6- from dipdup.datasources.tezos_tzkt import TezosTzktDatasource
7+
8+ if TYPE_CHECKING:
9+ from dipdup.datasources.tezos_tzkt import TezosTzktDatasource
10+
11+ BATCH_SIZE = 1000
712
813
914async def check_expiration(
1015 ctx: HookContext,
1116) -> None:
12- ds = cast(TezosTzktDatasource, next(iter(ctx.datasources.values())))
13- expiring_records = (
14- await Record.filter(expired=False, domain__expires_at__lt=datetime.utcnow()).all().prefetch_related('domain')
15- )
16-
17- for record in expiring_records:
18- ctx.logger.info('Record %s expired at %s', record.id, record.domain.expires_at)
19- record.expired = True
20- await record.save()
21- if record.address:
22- ctx.logger.debug('Invalidating contract metadata for %s @ %s', record.address, record.id)
23- await ctx.update_contract_metadata(
24- network=ds.name,
25- address=record.address,
26- metadata={}, # TODO: NULL
27- )
17+ ds = cast('TezosTzktDatasource', next(iter(ctx.datasources.values())))
18+ total_processed = 0
19+
20+ while True:
21+ expiring_records = (
22+ await Record.filter(expired=False, domain__expires_at__lt=datetime.utcnow())
23+ .limit(BATCH_SIZE)
24+ .prefetch_related('domain')
25+ )
26+
27+ if not expiring_records:
28+ break
29+
30+ for record in expiring_records:
31+ ctx.logger.info('Record %s expired at %s', record.id, record.domain.expires_at)
32+ record.expired = True
33+ await record.save()
34+ if record.address:
35+ ctx.logger.debug('Invalidating contract metadata for %s @ %s', record.address, record.id)
36+ await ctx.update_contract_metadata(
37+ network=ds.name,
38+ address=record.address,
39+ metadata={}, # TODO: NULL
40+ )
41+
42+ total_processed += len(expiring_records)
43+ ctx.logger.info('Processed %s expired records so far', total_processed)
44+
45+ if total_processed:
46+ ctx.logger.info('Finished processing %s expired records', total_processed)
0 commit comments