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)
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, )
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')
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))
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)
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, )