Exemplo n.º 1
0
    def test_fetch_flows(self, mock_get_flows):

        mock_get_flows.side_effect = [
            MockClientQuery([Flow.create(name='Flow 1',
                                         uuid='uuid-25',
                                         labels=[],
                                         archived=False,
                                         expires=720,
                                         created_on=json_date_to_datetime("2015-04-08T12:48:44.320Z"),
                                         runs=Flow.Runs.create(completed=120, active=50, expired=100, interrupted=30))
                             ])]

        with patch("ureport.utils.datetime_to_ms") as mock_datetime_ms:
            mock_datetime_ms.return_value = 500

            with patch('django.core.cache.cache.set') as cache_set_mock:
                flows = fetch_flows(self.org, self.rapidpro_backend)
                expected = dict()
                expected['uuid-25'] = dict(uuid='uuid-25', date_hint="2015-04-08",
                                           created_on="2015-04-08T12:48:44.320Z",
                                           name="Flow 1", runs=300, completed_runs=120, archived=False)

            self.assertEqual(flows, expected)

            cache_set_mock.assert_called_once_with('org:%d:backend:%s:flows' % (self.org.pk, self.rapidpro_backend.slug),
                                                   dict(time=500, results=expected),
                                                   UREPORT_ASYNC_FETCHED_DATA_CACHE_TIME)
Exemplo n.º 2
0
    def test_fetch_flows(self, mock_get_flows):

        mock_get_flows.side_effect = [
            MockClientQuery(
                [
                    Flow.create(
                        name="Flow 1",
                        uuid="uuid-25",
                        labels=[],
                        archived=False,
                        expires=720,
                        created_on=json_date_to_datetime("2015-04-08T12:48:44.320Z"),
                        results=[
                            Flow.FlowResult.create(
                                key="color",
                                name="Color",
                                categories=["Orange", "Blue", "Other", "Nothing"],
                                node_uuids=["42a8e177-9e88-429b-b70a-7d4854423092"],
                            )
                        ],
                        runs=Flow.Runs.create(completed=120, active=50, expired=100, interrupted=30),
                    )
                ]
            )
        ]

        with patch("ureport.utils.datetime_to_ms") as mock_datetime_ms:
            mock_datetime_ms.return_value = 500

            with patch("django.core.cache.cache.set") as cache_set_mock:
                flows = fetch_flows(self.org, self.rapidpro_backend)
                expected = dict()
                expected["uuid-25"] = dict(
                    uuid="uuid-25",
                    date_hint="2015-04-08",
                    created_on="2015-04-08T12:48:44.320Z",
                    name="Flow 1",
                    runs=300,
                    completed_runs=120,
                    archived=False,
                    results=[
                        dict(
                            key="color",
                            name="Color",
                            categories=["Orange", "Blue", "Other", "Nothing"],
                            node_uuids=["42a8e177-9e88-429b-b70a-7d4854423092"],
                        )
                    ],
                )

            self.assertEqual(flows, expected)

            cache_set_mock.assert_called_once_with(
                "org:%d:backend:%s:flows" % (self.org.pk, self.rapidpro_backend.slug),
                dict(time=500, results=expected),
                UREPORT_ASYNC_FETCHED_DATA_CACHE_TIME,
            )
Exemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        self.org = kwargs['org']
        del kwargs['org']

        super(PollForm, self).__init__(*args, **kwargs)
        self.fields['category'].queryset = Category.objects.filter(org=self.org)

        # find all the flows on this org, create choices for those
        flows = self.org.get_flows()

        # if cache empty we fetch from RapidPro API, for Better UX
        if not flows:
            from ureport.utils import fetch_flows
            fetch_flows(self.org)
            flows = self.org.get_flows()

        self.fields['flow_uuid'].choices = [(f['uuid'], f['name']) for f in flows.values()]

        # only display category images for this org which are active
        self.fields['category_image'].queryset = CategoryImage.objects.filter(category__org=self.org, is_active=True).order_by('category__name', 'name')
Exemplo n.º 4
0
def refresh_org_flows(org_id=None):
    start = time.time()
    r = get_redis_connection()

    key = "refresh_flows"
    lock_timeout = 900

    if org_id:
        key = "refresh_flows:%d" % org_id
        lock_timeout = 30

    if not r.get(key):
        with r.lock(key, timeout=lock_timeout):
            active_orgs = Org.objects.filter(is_active=True)
            if org_id:
                active_orgs = Org.objects.filter(pk=org_id)

            for org in active_orgs:
                fetch_flows(org)

        logger.info("Task: refresh_flows took %ss" % (time.time() - start))
Exemplo n.º 5
0
def refresh_org_flows(org_id=None):
    start = time.time()
    r = get_redis_connection()

    key = 'refresh_flows'
    lock_timeout = 900

    if org_id:
        key = 'refresh_flows:%d' % org_id
        lock_timeout = 30

    if not r.get(key):
        with r.lock(key, timeout=lock_timeout):
            active_orgs = Org.objects.filter(is_active=True)
            if org_id:
                active_orgs = Org.objects.filter(pk=org_id)

            for org in active_orgs:
                fetch_flows(org)

        print "Task: refresh_flows took %ss" % (time.time() - start)
Exemplo n.º 6
0
    def test_fetch_flows(self, mock_get_flows):

        mock_get_flows.side_effect = [
            MockClientQuery(
                [
                    Flow.create(
                        name="Flow 1",
                        uuid="uuid-25",
                        labels=[],
                        archived=False,
                        expires=720,
                        created_on=json_date_to_datetime("2015-04-08T12:48:44.320Z"),
                        runs=Flow.Runs.create(completed=120, active=50, expired=100, interrupted=30),
                    )
                ]
            )
        ]

        with patch("ureport.utils.datetime_to_ms") as mock_datetime_ms:
            mock_datetime_ms.return_value = 500

            with patch("django.core.cache.cache.set") as cache_set_mock:
                flows = fetch_flows(self.org, self.rapidpro_backend)
                expected = dict()
                expected["uuid-25"] = dict(
                    uuid="uuid-25",
                    date_hint="2015-04-08",
                    created_on="2015-04-08T12:48:44.320Z",
                    name="Flow 1",
                    runs=300,
                    completed_runs=120,
                    archived=False,
                )

            self.assertEqual(flows, expected)

            cache_set_mock.assert_called_once_with(
                "org:%d:backend:%s:flows" % (self.org.pk, self.rapidpro_backend.slug),
                dict(time=500, results=expected),
                UREPORT_ASYNC_FETCHED_DATA_CACHE_TIME,
            )