Exemplo n.º 1
0
def schedule_run_directly_for(runnable, run_delay):
    if Run.has_scheduled_run(runnable.contact_person_id):
        RunQueue.enqueue(runnable, run_delay)
    elif settings.RAPIDPRO_LIVE:
        task = _schedule_run.apply_async(args=[runnable.id], countdown=run_delay)
        Run.objects.create(scheduled_message_task_id=task.id, runnable=runnable,
                           status=Run.STATUS.scheduled, phone=runnable.contact.phone)
Exemplo n.º 2
0
def schedule_run_directly_for(runnable, run_delay):
    if Run.has_scheduled_run(runnable.contact_person_id):
        RunQueue.enqueue(runnable, settings.DELIVERY_STATUS_CHECK_DELAY)
    elif settings.RAPIDPRO_LIVE:
        logger.info("schedule_run_directly_for:: run_delay=%s" % run_delay)
        task = _schedule_run.apply_async(args=[runnable.id], countdown=run_delay)
        Run.objects.create(scheduled_message_task_id=task.id, runnable=runnable,
                           status=Run.STATUS.not_started, phone=runnable.contact.phone)
Exemplo n.º 3
0
 def _schedule_run_for(self, runnable):
     if runnable.completed_run() is None:
         if Run.has_scheduled_run(runnable.contact_person_id):
             RunQueue.enqueue(runnable, 0)
         else:
             contact = runnable.build_contact()
             task = '231x31231231'
             Run.objects.create(scheduled_message_task_id=task, runnable=runnable,
                                status=Run.STATUS.scheduled, phone=contact['phone'] if contact else None)
Exemplo n.º 4
0
 def _schedule_run_for(self, runnable):
     if runnable.completed_run() is None:
         if Run.has_scheduled_run(runnable.contact_person_id):
             RunQueue.enqueue(runnable, 0)
         else:
             contact = runnable.build_contact()
             task = '231x31231231'
             Run.objects.create(scheduled_message_task_id=task, runnable=runnable,
                                status=Run.STATUS.scheduled, phone=contact['phone'] if contact else None)
Exemplo n.º 5
0
def schedule_run_directly_for(runnable, run_delay):
    if Run.has_scheduled_run(runnable.contact_person_id):
        RunQueue.enqueue(runnable, run_delay)
    elif settings.RAPIDPRO_LIVE:
        task = _schedule_run.apply_async(args=[runnable.id],
                                         countdown=run_delay)
        Run.objects.create(scheduled_message_task_id=task.id,
                           runnable=runnable,
                           status=Run.STATUS.scheduled,
                           phone=runnable.contact.phone)
Exemplo n.º 6
0
def schedule_run_directly_for(runnable, run_delay):
    if Run.has_scheduled_run(runnable.contact_person_id):
        RunQueue.enqueue(runnable, settings.DELIVERY_STATUS_CHECK_DELAY)
    elif settings.RAPIDPRO_LIVE:
        logger.info("schedule_run_directly_for:: run_delay=%s" % run_delay)
        task = _schedule_run.apply_async(args=[runnable.id],
                                         countdown=run_delay)
        Run.objects.create(scheduled_message_task_id=task.id,
                           runnable=runnable,
                           status=Run.STATUS.not_started,
                           phone=runnable.contact.phone)
Exemplo n.º 7
0
    def test_queues_run_for_particular_line_item_node(self):
        contact_person_id = 'id'
        run_delay = 1000

        node = DistributionPlanNodeFactory(contact_person_id=contact_person_id)

        RunQueue.enqueue(node, run_delay)
        queued_run = RunQueue.dequeue(contact_person_id)

        self.assertEqual(queued_run.status, RunQueue.STATUS.not_started)
        self.assertEqual(queued_run.contact_person_id, contact_person_id)
Exemplo n.º 8
0
    def test_queues_run_for_particular_line_item_node(self):
        contact_person_id = 'id'
        run_delay = 1000

        node = DeliveryNodeFactory(contact_person_id=contact_person_id)

        RunQueue.enqueue(node, run_delay)
        queued_run = RunQueue.dequeue(contact_person_id)

        self.assertEqual(queued_run.status, RunQueue.STATUS.not_started)
        self.assertEqual(queued_run.contact_person_id, contact_person_id)
Exemplo n.º 9
0
    def test_queues_run_for_particular_line_item_node(self):
        contact_person_id = 'id'
        start_run_date = datetime.now()

        consignee = ConsigneeFactory(contact_person_id=contact_person_id)
        node = DistributionPlanNodeFactory(consignee=consignee)
        node_line_item = DistributionPlanLineItemFactory(distribution_plan_node=node)

        RunQueue.enqueue(node_line_item, start_run_date)
        queued_run = RunQueue.deque(contact_person_id)

        self.assertEqual(queued_run.status, RunQueue.STATUS.not_started)
        self.assertEqual(queued_run.contact_person_id, contact_person_id)
Exemplo n.º 10
0
def schedule_run_for(node):
    current_run = node.current_run()
    if current_run:
        _cancel_run(current_run)

    run_delay = _calculate_delay(node)
    if Run.current_run_for_node(node):
        RunQueue.enqueue(node, run_delay)
    else:
        contact = node.build_contact()
        task = _schedule_run.apply_async(args=[node.id], countdown=run_delay)
        Run.objects.create(scheduled_message_task_id=task.id, node=node,
                               status=Run.STATUS.scheduled, phone=contact['phone'])
Exemplo n.º 11
0
    def test_queues_run_for_particular_line_item_node(self):
        contact_person_id = 'id'
        start_run_date = datetime.now()

        consignee = ConsigneeFactory(contact_person_id=contact_person_id)
        node = DistributionPlanNodeFactory(consignee=consignee)
        node_line_item = DistributionPlanLineItemFactory(
            distribution_plan_node=node)

        RunQueue.enqueue(node_line_item, start_run_date)
        queued_run = RunQueue.deque(contact_person_id)

        self.assertEqual(queued_run.status, RunQueue.STATUS.not_started)
        self.assertEqual(queued_run.contact_person_id, contact_person_id)
Exemplo n.º 12
0
def schedule_run_for(node_line_item):
    current_run = node_line_item.current_run()
    if current_run:
        _cancel_run(current_run)

    run_delay = _calculate_delay(node_line_item)
    node = node_line_item.distribution_plan_node
    if NodeLineItemRun.current_run_for_node(node):
        RunQueue.enqueue(node_line_item, run_delay)
    else:
        contact = node.build_contact()
        task = _schedule_run.apply_async(args=[node_line_item.id], countdown=run_delay)
        NodeLineItemRun.objects.create(scheduled_message_task_id=task.id, node_line_item=node_line_item,
                                       status=NodeLineItemRun.STATUS.scheduled, phone=contact['phone'])
Exemplo n.º 13
0
    def test_deque_returns_none_when_contact_person_no_pending_runs(self):
        contact_person_id = 'id'
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started)
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started,
                        start_run_date=datetime(2014, 12, 10))

        self.assertEqual(RunQueue.deque(contact_person_id), None)
Exemplo n.º 14
0
    def test_deque_returns_none_when_contact_person_no_pending_runs(self):
        contact_person_id = 'id'
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started)
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started,
                        run_delay=1000.0)

        self.assertEqual(RunQueue.dequeue(contact_person_id), None)
Exemplo n.º 15
0
    def test_can_deque_next_run_for_a_particular_contact_person(self):
        contact_person_id = 'id'
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started)
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.not_started, run_delay=1000.0)
        run_queue = RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.not_started,
                                    run_delay=1500.0)

        self.assertEqual(RunQueue.dequeue(contact_person_id), run_queue)
Exemplo n.º 16
0
def expire_overdue_runs():
    overdue_runs = Run.overdue_runs()
    for overdue_run in overdue_runs:
        overdue_run.update_status(Run.STATUS.expired)
        next_run = RunQueue.dequeue(overdue_run.runnable.contact_person_id)
        if next_run:
            schedule_run_for(next_run.runnable)
            next_run.update_status(RunQueue.STATUS.started)
Exemplo n.º 17
0
    def test_can_deque_next_run_for_a_particular_contact_person(self):
        contact_person_id = 'id'
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started)
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.not_started, run_delay=1000.0)
        run_queue = RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.not_started,
                                    run_delay=1500.0)

        self.assertEqual(RunQueue.dequeue(contact_person_id), run_queue)
Exemplo n.º 18
0
def expire_overdue_runs():
    overdue_runs = Run.overdue_runs()
    for overdue_run in overdue_runs:
        overdue_run.update_status(Run.STATUS.expired)
        next_run = RunQueue.dequeue(overdue_run.runnable.contact_person_id)
        if next_run:
            schedule_run_for(next_run.runnable)
            next_run.update_status(RunQueue.STATUS.started)
Exemplo n.º 19
0
    def test_can_deque_next_run_for_a_particular_contact_person(self):
        contact_person_id = 'id'
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started)
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.not_started,
                        start_run_date=datetime(2014, 12, 10))
        run_queue = RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.not_started,
                                    start_run_date=datetime(2014, 10, 10))

        self.assertEqual(RunQueue.deque(contact_person_id), run_queue)
Exemplo n.º 20
0
    def test_deque_returns_none_when_contact_person_no_pending_runs(self):
        contact_person_id = 'id'
        RunQueueFactory(contact_person_id=contact_person_id,
                        status=RunQueue.STATUS.started)
        RunQueueFactory(contact_person_id=contact_person_id,
                        status=RunQueue.STATUS.started,
                        start_run_date=datetime(2014, 12, 10))

        self.assertEqual(RunQueue.deque(contact_person_id), None)
Exemplo n.º 21
0
def expire_overdue_runs():
    overdue_runs = NodeLineItemRun.overdue_runs()
    for overdue_run in overdue_runs:
        overdue_run.status = NodeLineItemRun.STATUS.expired
        overdue_run.save()
        next_run = RunQueue.dequeue(overdue_run.node_line_item.distribution_plan_node.contact_person_id)
        if next_run:
            schedule_run_for(next_run.node_line_item)
            next_run.status = RunQueue.STATUS.started
            next_run.save()
Exemplo n.º 22
0
def expire_overdue_runs():
    overdue_runs = Run.overdue_runs()
    for overdue_run in overdue_runs:
        overdue_run.status = Run.STATUS.expired
        overdue_run.save()
        next_run = RunQueue.dequeue(overdue_run.node.contact_person_id)
        if next_run:
            schedule_run_for(next_run.node)
            next_run.status = RunQueue.STATUS.started
            next_run.save()
Exemplo n.º 23
0
    def test_can_deque_next_run_for_a_particular_contact_person(self):
        contact_person_id = 'id'
        date_first = datetime.datetime(2016, 2, 1, 9, 0, 0, 0)
        date_second = datetime.datetime(2016, 2, 2, 9, 0, 0, 0)
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started, start_time=date_second)
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.not_started, start_time=date_first)
        run_queue = RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.not_started,
                                    start_time=date_first)

        self.assertEqual(RunQueue.dequeue(contact_person_id).start_time, run_queue.start_time)
Exemplo n.º 24
0
    def test_should_have_all_expected_fields(self):
        node_line_item_run = RunQueue()
        fields_in_run_queue = [
            field.attname for field in node_line_item_run._meta.fields
        ]

        for field in [
                'node_line_item_id', 'contact_person_id', 'status',
                'start_run_date'
        ]:
            self.assertIn(field, fields_in_run_queue)
Exemplo n.º 25
0
    def test_can_deque_next_run_for_a_particular_contact_person(self):
        contact_person_id = 'id'
        RunQueueFactory(contact_person_id=contact_person_id,
                        status=RunQueue.STATUS.started)
        RunQueueFactory(contact_person_id=contact_person_id,
                        status=RunQueue.STATUS.not_started,
                        start_run_date=datetime(2014, 12, 10))
        run_queue = RunQueueFactory(contact_person_id=contact_person_id,
                                    status=RunQueue.STATUS.not_started,
                                    start_run_date=datetime(2014, 10, 10))

        self.assertEqual(RunQueue.deque(contact_person_id), run_queue)
Exemplo n.º 26
0
def _dequeue_next_run(contact_person_id, run_delay):
    next_run_queue = RunQueue.dequeue(contact_person_id=contact_person_id)
    if next_run_queue:
        schedule_run_for(next_run_queue.runnable, run_delay)
        next_run_queue.update_status(RunQueue.STATUS.started)
Exemplo n.º 27
0
def _dequeue_next_run_for(runnable):
    next_run = RunQueue.dequeue(contact_person_id=runnable.contact_person_id)
    logger.info("next run is %s" % next_run)
    if next_run:
        schedule_run_for(next_run.runnable)
        next_run.update_status(RunQueue.STATUS.started)
Exemplo n.º 28
0
    def test_deque_returns_none_when_contact_person_no_pending_runs(self):
        contact_person_id = 'id'
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started)
        RunQueueFactory(contact_person_id=contact_person_id, status=RunQueue.STATUS.started, run_delay=1000.0)

        self.assertEqual(RunQueue.dequeue(contact_person_id), None)
Exemplo n.º 29
0
def _dequeue_next_run(run):
    next_run = RunQueue.dequeue(contact_person_id=run.node.contact_person_id)
    if next_run:
        _schedule_next_run(next_run.node)
        next_run.status = RunQueue.STATUS.started
        next_run.save()
Exemplo n.º 30
0
Arquivo: hook.py Projeto: yaroing/eums
def _dequeue_next_run(contact_person_id):
    next_run_queue = RunQueue.dequeue(contact_person_id=contact_person_id)
    if next_run_queue:
        _schedule_next_run(next_run_queue.runnable)
        next_run_queue.update_status(RunQueue.STATUS.started)
Exemplo n.º 31
0
def _dequeue_next_run_for(runnable):
    next_run = RunQueue.dequeue(contact_person_id=runnable.contact_person_id)
    logger.info("next run is %s" % next_run)
    if next_run:
        schedule_run_for(next_run.runnable)
        next_run.update_status(RunQueue.STATUS.started)
Exemplo n.º 32
0
def _dequeue_next_run(line_item_run):
    next_run = RunQueue.dequeue(contact_person_id=line_item_run.node_line_item.distribution_plan_node.contact_person_id)
    _schedule_next_run(line_item_run.node_line_item)
    next_run.status = RunQueue.STATUS.started
    next_run.save()