def scan_public_contracts(scan_all=False): if (datetime.time(hour=10, minute=55) <= datetime.datetime.now( datetime.timezone.utc).time() <= datetime.time(hour=11, minute=20)): return all_regions = ESI.request('get_universe_regions').data all_contract_ids = set() for region in all_regions: number_of_page = ESI.head('get_contracts_public_region_id', region_id=region).header['X-Pages'][0] for page in range(1, number_of_page + 1): req = ESI.request('get_contracts_public_region_id', region_id=region, page=page) contracts = list(req.data) for contract_dict in contracts: all_contract_ids.add(contract_dict['contract_id']) if contract_dict['type'] not in ['item_exchange', 'auction']: continue COUNTER_CONTRACTS_FOUND.labels( region=region, type=contract_dict['type']).inc() try: contract = Contract.objects.get( id=contract_dict['contract_id']) if not contract.available: contract.available = True contract.save() if scan_all: scan_contract(dict(contract_dict), region) except Contract.DoesNotExist: scan_contract(dict(contract_dict), region) Contract.objects.filter(Q(available=True) & ~Q(id__in=all_contract_ids)).update( available=False)
def create_invtypes(self): existing = set(InvType.objects.values_list('id', flat=True)) available = set() res = ESI.head('get_universe_types') for p in range(1, 1 + res.header['X-Pages'][0]): available |= set(ESI.request('get_universe_types', page=p).data) to_fetch = available - existing for i in to_fetch: data = ESI.request('get_universe_types_type_id', type_id=i).data InvType.objects.update_or_create(id=i, defaults={ 'group_id': data['group_id'], 'name': data['name'], })