async def get_calls(request_model: RequestGetCalls) -> List[Call]: query = Call.all().prefetch_related('tags').order_by('-created_at') if request_model.offset: query = query.offset(request_model.offset) if request_model.limit: query = query.limit(request_model.limit) if not request_model.need_recall and request_model.state: query = query.filter(state=request_model.state) started_from = _get_dt(request_model.started_from) started_to = _get_dt(request_model.started_to) if started_from and started_to and started_from > started_to: started_to, started_from = started_from, started_to if started_from: query = query.filter(created_at__gte=started_from) if started_to: started_to = started_to.replace(hour=23, minute=59, second=59) query = query.filter(created_at__lte=started_to) if request_model.call_type: query = query.filter(call_type=request_model.call_type) number = request_model.number or '' num_len = len(number) if num_len > 4: number = number[1:] query = query.filter( Q(from_number__endswith=number, request_number__endswith=number, join_type='OR')) elif number: query = query.filter( Q(from_pin=number, request_pin=number, join_type='OR')) logger.info(f'request model: {request_model}', request_model=request_model.dict()) calls = await query logger.info(f'{query.sql()}', started_from=started_from, started_to=started_to) if request_model.need_recall: return CallsQueries.need_recalls(calls) return calls
async def callback(self): query = Call.all().order_by('-created_at').annotate( records_count=Count('records') ).prefetch_related('records').filter( state=CallState.END, record_path=None, records_count__gte=1 ).limit(50) async for call in query: record = self._choice_record(call.records) record.converted = await convert_record(record.full_path, call.id) record.duration = await get_mp3_file_duration(record.converted) if record.converted: await record.save() call.record_path = record.converted await call.save()