Ejemplo n.º 1
0
class TimeseriesInlineAdminFormProcessWithoutFileTestCase(TestCase):
    def setUp(self):
        station = mommy.make(models.Station)
        variable = mommy.make(models.Variable, descr="Temperature")
        self.timeseries = mommy.make(
            models.Timeseries,
            gentity=station,
            variable=variable,
            time_zone__utc_offset=0,
            precision=2,
        )
        self.timeseries.set_data(StringIO("2019-01-01 00:30,25,\n"))
        self.data = {
            "replace_or_append": "REPLACE",
            "gentity": station.id,
            "unit_of_measurement": self.timeseries.unit_of_measurement.id,
            "variable": self.timeseries.variable.id,
            "time_zone": self.timeseries.time_zone.id,
            "precision": 2,
        }
        self.form = TimeseriesInlineAdminForm(data=self.data,
                                              instance=self.timeseries)

    def test_form_is_valid(self):
        self.assertTrue(self.form.is_valid())

    def test_form_saves_and_returns_object(self):
        timeseries = self.form.save()
        self.assertEqual(timeseries.id, self.timeseries.id)
Ejemplo n.º 2
0
class TimeseriesInlineAdminFormRefusesToAppendIfNotInOrderTestCase(TestCase):
    def setUp(self):
        station = mommy.make(models.Station)
        self.timeseries = mommy.make(models.Timeseries,
                                     gentity=station,
                                     time_zone__utc_offset=0,
                                     precision=2)
        self.timeseries.set_data(
            StringIO("2005-11-01 18:00,3,\n2019-01-01 00:30,25,\n"))
        self.data = {
            "replace_or_append": "APPEND",
            "gentity": station.id,
            "unit_of_measurement": self.timeseries.unit_of_measurement.id,
            "variable": self.timeseries.variable.id,
            "time_zone": self.timeseries.time_zone.id,
            "precision": 2,
        }
        self.files = {
            "data":
            SimpleUploadedFile("mytimeseries.csv",
                               b"2005-12-01 18:35,7,\n2019-04-09 13:36,0,\n")
        }
        self.form = TimeseriesInlineAdminForm(data=self.data,
                                              files=self.files,
                                              instance=self.timeseries)

    def test_form_is_not_valid(self):
        self.assertFalse(self.form.is_valid())

    def test_form_errors(self):
        self.assertIn(
            "the first record of the time series to append is earlier than the last "
            "record of the existing time series",
            self.form.errors["__all__"][0],
        )
Ejemplo n.º 3
0
class TimeseriesUploadFileWithUnicodeHeadersTestCase(TestCase):
    def setUp(self):
        station = mommy.make(models.Station)
        self.timeseries = mommy.make(
            models.Timeseries,
            gentity=station,
            time_zone__utc_offset=0,
            variable__descr="irrelevant",
            precision=2,
        )
        self.data = {
            "replace_or_append": "REPLACE",
            "gentity": station.id,
            "unit_of_measurement": self.timeseries.unit_of_measurement.id,
            "variable": self.timeseries.variable.id,
            "time_zone": self.timeseries.time_zone.id,
            "precision": 2,
        }
        self.files = {
            "data":
            SimpleUploadedFile(
                "mytimeseries.csv",
                "Station=Πάπιγκο\n\n2019-04-09 13:36,0,\n".encode("utf-8"),
            )
        }
        try:
            # We check that the file is read without problem even if the locale
            # is set to C (i.e. ascii only)
            saved_locale = getlocale(LC_CTYPE)
            setlocale(LC_CTYPE, "C")
            self.form = TimeseriesInlineAdminForm(data=self.data,
                                                  files=self.files,
                                                  instance=self.timeseries)
            self.form.save()
        finally:
            setlocale(LC_CTYPE, saved_locale)

    def test_form_is_valid(self):
        self.assertTrue(self.form.is_valid())

    def test_data_length(self):
        self.assertEqual(len(self.timeseries.get_data().data), 1)

    def test_first_record(self):
        self.assertEqual(self.timeseries.get_data().data.index[0],
                         dt.datetime(2019, 4, 9, 13, 36))
Ejemplo n.º 4
0
class TimeseriesInlineAdminFormAcceptsReplacingTestCase(TestCase):
    def setUp(self):
        station = mommy.make(models.Station)
        self.timeseries = mommy.make(
            models.Timeseries,
            gentity=station,
            time_zone__utc_offset=0,
            variable__descr="irrelevant",
            precision=2,
        )
        self.timeseries.set_data(StringIO("2019-01-01 00:30,25,\n"))
        self.data = {
            "replace_or_append": "REPLACE",
            "gentity": station.id,
            "unit_of_measurement": self.timeseries.unit_of_measurement.id,
            "variable": self.timeseries.variable.id,
            "time_zone": self.timeseries.time_zone.id,
            "precision": 2,
        }
        self.files = {
            "data":
            SimpleUploadedFile("mytimeseries.csv",
                               b"2005-12-01 18:35,7,\n2019-04-09 13:36,0,\n")
        }
        self.form = TimeseriesInlineAdminForm(data=self.data,
                                              files=self.files,
                                              instance=self.timeseries)
        self.form.save()

    def test_form_is_valid(self):
        self.assertTrue(self.form.is_valid())

    def test_data_length(self):
        self.assertEqual(len(self.timeseries.get_data().data), 2)

    def test_first_record(self):
        self.assertEqual(self.timeseries.get_data().data.index[0],
                         dt.datetime(2005, 12, 1, 18, 35))

    def test_second_record(self):
        self.assertEqual(self.timeseries.get_data().data.index[1],
                         dt.datetime(2019, 4, 9, 13, 36))
Ejemplo n.º 5
0
 def _test_with(self, uploaded_file):
     files = {"data": uploaded_file}
     form = TimeseriesInlineAdminForm(data=self.data,
                                      files=files,
                                      instance=self.timeseries)
     self.assertFalse(form.is_valid())