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)
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 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()
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], )
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))
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))
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 _create_timeseries_inline_admin_form(self, replace_or_append, file_contents=""): self.data = { "replace_or_append": replace_or_append, "timeseries_group": self.timeseries_group.id, "type": models.Timeseries.INITIAL, } if file_contents: self.files = { "data": TemporaryUploadedFile( "mytimeseries.csv", "text/plain", size=len(file_contents), charset="utf8", ) } self.files["data"].write(file_contents) self.files["data"].seek(0) else: self.files = None self.form = TimeseriesInlineAdminForm( data=self.data, files=self.files, instance=self.timeseries )
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())