def handle(self, *args, **options):
        start_period = options['period'][0]
        current_period = date.today().strftime("%Y%m")

        DataSyncTracker.update_periods(current_period, start_period)

        one_day_ago = timezone.now() - timedelta(days=1)
        trackers = DataSyncTracker.objects.filter(last_parsed__lte=one_day_ago) \
            .filter(Q(status=DataSyncTrackerStatus.INIT_DOWNLOAD) | Q(status=DataSyncTrackerStatus.DOWNLOADED))
        data_sets = DataSet.objects.all()

        for tracker in trackers:
            try:
                for data_set in data_sets:
                    try:
                        parser = DataSetParser(data_set, tracker.period)
                        parser.parse()
                    except Exception, e:
                        print e.message

                tracker.last_parsed = timezone.now()
                tracker.status = DataSyncTrackerStatus.PARSED
                tracker.save()

            except Exception, e:
                print e.message
    def handle(self, *args, **options):
        period = options['period'][0]

        data_sets = DataSet.objects.all()
        for data_set in data_sets:
            parser = DataSetParser(data_set, period)
            parser.parse()
    def test_that_invalid_data_element_is_ignored(self):
        period = 201505
        test_data_values = [{'dataElement': 'wrong'}]

        with patch.object(DataSetParser, 'get_data_values', return_value=test_data_values) as mock_get_values:
            with patch.object(DataSetParser, 'save_data_value', return_value=test_data_values) as mock_method:
                parser = DataSetParser(self.data_set, period)
                parser.parse()

        assert not mock_method.called
    def test_that_valid_data_element_is_saved(self):
        period = 201505
        test_data_values = [{'dataElement': self.rdt_data_element.identifier}]

        with patch.object(DataSetParser, 'get_data_values', return_value=test_data_values) as mock_get_values:
            with patch.object(DataSetParser, 'save_data_value', return_value=None) as mock_method:
                parser = DataSetParser(self.data_set, period)
                parser.parse()

        assert mock_method.called
    def test_data_value_is_updated_if_integrity_error_occurs(self):
        # Create data value
        period = 201505

        parser = DataSetParser(self.data_set, period)
        parser.save_data_value({'dataElement': self.rdt_data_element.identifier,
                                'categoryOptionCombo': self.positive_under5.identifier,
                                'orgUnit': self.facility1.identifier,
                                'period': 'xx',
                                'value': 10})

        parser.save_data_value({'dataElement': self.rdt_data_element.identifier,
                                'categoryOptionCombo': self.positive_under5.identifier,
                                'orgUnit': self.facility1.identifier,
                                'period': 'xx',
                                'value': 20})

        dv = DataValue.objects.get(facility=self.facility1, data_element=self.rdt_data_element,
                                   category_option_combo=self.positive_under5, period=period)

        self.assertEqual(20, dv.value)