Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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()