示例#1
0
文件: admin.py 项目: vegten/OIPA
    def process_uploaded_file(self, uploaded, object, request, **kwargs):
        """
        This method will be called for every csv file uploaded.

        See django-multiupload lib for more info
        """
        parser = IndicatorParser()
        return parser.parse(uploaded, object, request, **kwargs)
示例#2
0
    def setUp(self):
        self.country = geodata_factory.CountryFactory.create(
            code='NL',
            name='Netherlands',
            alt_name='Nederland',
        )

        self.city = geodata_factory.CityFactory.create(
            id=9999,
            name='Amsterdam',
            ascii_name='ascii_amsterdam',
            alt_name='alt_amsterdam',
            namepar='namepar_amsterdam',
            country=self.country
        )

        self.indicator = indicator_factory.IndicatorFactory.create()
        self.parser = IndicatorParser()
示例#3
0
class TestUploadIndicatorHelperTestCase(TestCase):

    def setUp(self):
        self.country = geodata_factory.CountryFactory.create(
            code='NL',
            name='Netherlands',
            alt_name='Nederland',
        )

        self.city = geodata_factory.CityFactory.create(
            id=9999,
            name='Amsterdam',
            ascii_name='ascii_amsterdam',
            alt_name='alt_amsterdam',
            namepar='namepar_amsterdam',
            country=self.country
        )

        self.indicator = indicator_factory.IndicatorFactory.create()
        self.parser = IndicatorParser()

    def test_get_city_name_dict(self):

        city_name_dict = self.parser.get_city_name_dict()

        self.assertTrue('nl' in city_name_dict)
        self.assertTrue('amsterdam' in city_name_dict['nl'])
        self.assertEqual(9999, city_name_dict['nl']['amsterdam'])
        self.assertTrue('ascii_amsterdam' in city_name_dict['nl'])
        self.assertEqual(9999, city_name_dict['nl']['ascii_amsterdam'])
        self.assertTrue('alt_amsterdam' in city_name_dict['nl'])
        self.assertEqual(9999, city_name_dict['nl']['alt_amsterdam'])
        self.assertTrue('namepar_amsterdam' in city_name_dict['nl'])
        self.assertEqual(9999, city_name_dict['nl']['namepar_amsterdam'])

    def test_get_country_name_dict(self):

        country_name_dict = self.parser.get_country_name_dict()

        self.assertTrue('nl' in country_name_dict)
        self.assertEqual('NL', country_name_dict['nl'])
        self.assertTrue('netherlands' in country_name_dict)
        self.assertEqual('NL', country_name_dict['netherlands'])
        self.assertTrue('nederland' in country_name_dict)
        self.assertEqual('NL', country_name_dict['nederland'])

    def test_find_country(self):

        country_name_dict = self.parser.get_country_name_dict()

        result_with_iso2 = self.parser.find_country('Netherlands', country_name_dict, 'NL')
        result_without_iso2 = self.parser.find_country('Netherlands', country_name_dict, None)
        result_false_name = self.parser.find_country('Non existent country', country_name_dict, None)
        result_false_iso2 = self.parser.find_country('Netherlands', country_name_dict, 'QQ')

        self.assertEqual(result_with_iso2, self.country)
        self.assertEqual(result_without_iso2, self.country)
        self.assertEqual(result_false_name, None)
        self.assertEqual(result_false_iso2, self.country)

    def test_find_city(self):
        city_name_dict = self.parser.get_city_name_dict()

        result_no_country = self.parser.find_city('Amsterdam', city_name_dict, None)
        result_correct_name = self.parser.find_city('Amsterdam', city_name_dict, self.country)
        result_false_name = self.parser.find_city('Non existent city', city_name_dict, self.country)

        self.assertEqual(result_no_country, None)
        self.assertEqual(result_correct_name, self.city)
        self.assertEqual(result_false_name, None)

    def test_get_value(self):
        correct_value = self.parser.get_value(unicode('1000'))
        incorrect_value = self.parser.get_value(unicode('No numbers'))
        corrected_value = self.parser.get_value(unicode(' 1000,00'))

        self.assertEqual(correct_value, float(1000))
        self.assertEqual(incorrect_value, None)
        self.assertEqual(corrected_value, float(1000))

    def test_save_log(self):
        uploadLogEntry = indicator_factory.CsvUploadLogFactory.build(
            id=1,
            upload=None,
            title=None,
            slug=None,
            link=None,
            description='',
            uploaded_by=None,
            cities_not_found='Berlin, Paris',
            countries_not_found='Germany',
            total_countries_found=10,
            total_countries_not_found=1,
            total_cities_found=5,
            total_cities_not_found=2,
            total_items_saved=15
        )

        log = self.parser.save_log(
            file=None,
            uploaded_by_user=None,
            cities_not_found=['Berlin', 'Paris'],
            countries_not_found=['Germany'],
            total_cities_found=range(5),
            total_countries_found=range(10),
            total_items_saved=15)

        # cant mock the uuid of course
        uploadLogEntry.slug = log.slug

        self.assertEqual(uploadLogEntry, log)

    def test_save_city_data(self):
        saved_data = self.parser.save_city_data(
            city_from_db=self.city,
            selection_type_csv=unicode('selection_type'),
            indicator_from_db=self.indicator,
            year_csv=unicode('2006'),
            value_csv=float(1000)
        )

        indicatorData = IndicatorData.objects.all()

        self.assertEqual(saved_data, True)
        self.assertEqual(1, indicatorData.count())
        self.assertEqual(1, IndicatorDataValue.objects.all().count())
        self.assertEqual(self.city, indicatorData[0].city)
        self.assertEqual(unicode('selection_type'), indicatorData[0].selection_type)

        # same year, different value
        same_year = self.parser.save_city_data(
            city_from_db=self.city,
            selection_type_csv=unicode('selection_type'),
            indicator_from_db=self.indicator,
            year_csv=unicode('2006'),
            value_csv=float(1234)
        )

        indicatorDataValues = IndicatorDataValue.objects.all()

        self.assertEqual(True, same_year)
        self.assertEqual(1, IndicatorData.objects.all().count())
        self.assertEqual(1, indicatorDataValues.count())
        self.assertEqual(1234.00, indicatorDataValues[0].value)


        # different year, different value
        different_year = self.parser.save_city_data(
            city_from_db=self.city,
            selection_type_csv=unicode('selection_type'),
            indicator_from_db=self.indicator,
            year_csv=unicode('2015'),
            value_csv=float(1000)
        )

        self.assertEqual(different_year, True)
        self.assertEqual(1, IndicatorData.objects.all().count())
        self.assertEqual(2, IndicatorDataValue.objects.all().count())


    def test_save_country_data(self):
        saved_data = self.parser.save_country_data(
            country_from_db=self.country,
            city_csv='',
            selection_type_csv=unicode('selection_type'),
            year_csv=unicode('2006'),
            indicator_from_db=self.indicator,
            value_csv=float(1000)
        )

        indicatorData = IndicatorData.objects.all()

        self.assertEqual(saved_data, True)
        self.assertEqual(None, indicatorData[0].city)
        self.assertEqual(self.country, indicatorData[0].country)

        false_data = self.parser.save_country_data(
            country_from_db=self.country,
            city_csv='Has unmatched city',
            selection_type_csv=unicode('selection_type'),
            year_csv=unicode('2006'),
            indicator_from_db=self.indicator,
            value_csv=float(1000)
        )

        self.assertFalse(false_data)

    def test_parse(self):
        import StringIO
        from django.core.files.uploadedfile import InMemoryUploadedFile

        io = StringIO.StringIO()

        text = 'year;year_range;indicator_id;friendly_name;type_data;selection_type;' \
               'deprivation_type;country;city;region;value;description;category\n' \
               '1992;;indicator_id;indicator text;p;Total;;Netherlands;;;13.3;Global_UNHABITAT-DHS;Health\n' \
               '1993;;indicator_id;indicator text;p;Total;;Netherlands;;;13.5;Global_UNHABITAT-DHS;Health\n'

        io.write(text)
        uploaded_file = InMemoryUploadedFile(io, None, 'testindicator.csv', 'csv', io.len, None)
        uploaded_file.seek(0)

        class MockObject(object):
            user = None

        self.parser.parse(uploaded_file, None, MockObject())

        self.assertEqual(2, Indicator.objects.all().count())
        self.assertEqual(1, IndicatorData.objects.all().count())
        self.assertEqual(2, IndicatorDataValue.objects.all().count())

        self.assertEqual('indicator_id', Indicator.objects.all()[1].id)
        self.assertEqual(self.country, IndicatorData.objects.all()[0].country)
        self.assertEqual(13.5, IndicatorDataValue.objects.all()[1].value)
        self.assertEqual(1993, IndicatorDataValue.objects.all()[1].year)