def validate_processed_item(self):
        if self.queue_item.status != QueueItemStatus.PROCESSED:
            return Success()
        if self.queue_item.processing_ended_at is None:
            return Failure('processing_ended_at should be present')

        if self.queue_item.waiting_time_estimation is None:
            return Failure('waiting_time_estimation should be present')

        return Success()
示例#2
0
    def skip(self, ):
        if not self.banner:
            return Failure('banner is not found')

        item = self.banner.queue.actual().first()

        if not item:
            return Failure('The queue is empty')

        SkipQueueItemProcessor(item).call()
        TransitToSkippedState(item).call()

        return Success()
    def validate_telegram_item(self):
        if self.queue_item.source != QueueItemSource.TELEGRAM:
            return Success()

        if self.queue_item.telegram_chat_id is None:
            return Failure('telegram_chat_id cannot be blank')

        return Success()
    def __get_us_phone_number(self):
        try:
            phone_numbers = \
                self.client.available_phone_numbers(self.COUNTRY_CODE).\
                local.list(limit=self.AVAILABLE_PHONE_NUMBERS_LIMIT)
        except twilio.base.exceptions.TwilioException as e:
            return Failure(e['message'])

        return Success(phone_numbers[0])
 def call(self):
     try:
         self.client.messages.create(
             body=f"Your turn",
             from_=self.item.banner.phone_number,
             to=self.item.phone_number
         )
         return Success(self.item)
     except twilio.base.exceptions.TwilioException as e:
         return Failure(e.msg)
示例#6
0
 def sms(self, body):
     try:
         self.client.messages.create(
             body=body,
             from_=self.banner_phone_number,
             to=self.client_phone_number
         )
         return Success()
     except twilio.base.exceptions.TwilioException as e:
         return Failure(e['message'])
    def __buy_phone_number(self, phone_number):
        try:
            bought_number_info = self.client.incoming_phone_numbers.\
                create(
                    phone_number=phone_number,
                    voice_url=settings.TWILIO_BANNER_CALL_CALLBACK_URL,
                    voice_method='POST'
                )
        except twilio.base.exceptions.TwilioRestException as e:
            return Failure(e.msg)

        return Success(bought_number_info.phone_number)
示例#8
0
    def call(self):
        if not self.is_transition_allowed():
            return Failure(
                f"Queue item with {self.queue_item.state} state can"
                f" not be transfered to {QueueItemStatus.PROCESSING} state")

        self.queue_item.status = QueueItemStatus.PROCESSING
        self.queue_item.processing_started_at = timezone.now()
        result = QueueItemValidator(self.queue_item).call()
        if result.failed:
            return result
        self.queue_item.save()
        return Success(self.queue_item)
示例#9
0
    def call(self):
        if not self.is_transition_allowed():
            return Failure(
                f"Queue item with {self.queue_item.state} state can"
                f" not be transfered to {QueueItemStatus.SKIPPED} state")

        self.queue_item.past = True
        self.queue_item.status = QueueItemStatus.SKIPPED
        result = QueueItemValidator(self.queue_item).call()
        if result.failed:
            return result
        self.queue_item.save()
        return Success(self.queue_item)
    def call(self):
        result = self.validate_processed_item()
        if result.failed:
            return result

        result = self.validate_telegram_item()
        if result.failed:
            return result

        try:
            self.queue_item.full_clean()
        except ValidationError as e:
            return Failure(str(e))

        return Success()
    def call(self):
        if not self.is_transition_allowed():
            return Failure(f"Queue item with {self.queue_item.state} state can"
                           f" not be transfered to {QueueItemStatus.PROCESSED} state")

        self.queue_item.past = True
        self.queue_item.position = -1
        self.queue_item.processing_ended_at = timezone.now()
        self.queue_item.status = QueueItemStatus.PROCESSED
        self.queue_item.waiting_time_estimation = \
            ConvolveWaitingTime(queue_item=self.queue_item).call()
        result = QueueItemValidator(self.queue_item).call()
        if result.failed:
            return result
        self.queue_item.save()
        return Success(self.queue_item)
示例#12
0
    def next(self):
        if not self.banner:
            return Failure('banner is not found')

        current_item = self.banner.queue.actual().\
            filter(status=QueueItemStatus.PROCESSING).first()
        if current_item:
            result = TransitToProcessedState(current_item).call()
            if result.failed:
                return result

        next_item = self.banner.queue.actual().first()
        if not next_item:
            # empty queue
            return Success()

        result = TransitToProcessingState(next_item).call()
        if result.failed:
            return result

        return NextQueueItemProcessor(item=next_item).call()
 def error_msg_and_failure(self, failure_msg):
     self.bot.send_message(self.message.chat.id, failure_msg)
     return Failure(failure_msg)
示例#14
0
 def error_msg_and_failure(self, failure_msg):
     self.sms(body=failure_msg)
     return Failure(failure_msg)
 def __check_number_capabilities(self, phone_number_info):
     if not phone_number_info.capabilities['SMS'] is False:
         return Success()
     return Failure('There is no sms capability')