55from unittest .mock import MagicMock
66from unittest .mock import patch
77from datetime import date
8- import math
98import numpy as np
10- import os
119
1210# third party
13- import pandas
11+ import pandas as pd
1412import epiweeks as epi
1513
1614from delphi_utils import Nans
17- from delphi .epidata .acquisition .covidcast .csv_importer import CsvImporter
1815from delphi .utils .epiweek import delta_epiweeks
16+ from ....src .acquisition .covidcast .csv_importer import CsvImporter , CsvRowValues
1917
2018# py3tester coverage target
2119__test_target__ = 'delphi.epidata.acquisition.covidcast.csv_importer'
@@ -208,37 +206,38 @@ def make_row(
208206 self .assertEqual (error , field )
209207
210208 success_cases = [
211- (make_row (), CsvImporter . RowValues ('vi' , 1.23 , 4.56 , 100.5 , Nans .NOT_MISSING , Nans .NOT_MISSING , Nans .NOT_MISSING )),
212- (make_row (value = None , stderr = np .nan , sample_size = '' , missing_value = str (float (Nans .DELETED )), missing_stderr = str (float (Nans .DELETED )), missing_sample_size = str (float (Nans .DELETED ))), CsvImporter . RowValues ('vi' , None , None , None , Nans .DELETED , Nans .DELETED , Nans .DELETED )),
213- (make_row (stderr = '' , sample_size = 'NA' , missing_stderr = str (float (Nans .OTHER )), missing_sample_size = str (float (Nans .OTHER ))), CsvImporter . RowValues ('vi' , 1.23 , None , None , Nans .NOT_MISSING , Nans .OTHER , Nans .OTHER )),
214- (make_row (sample_size = None , missing_value = 'missing_value' , missing_stderr = str (float (Nans .OTHER )), missing_sample_size = str (float (Nans .NOT_MISSING ))), CsvImporter . RowValues ('vi' , 1.23 , 4.56 , None , Nans .NOT_MISSING , Nans .NOT_MISSING , Nans .OTHER )),
209+ (make_row (), CsvRowValues ('vi' , 1.23 , 4.56 , 100.5 , Nans .NOT_MISSING , Nans .NOT_MISSING , Nans .NOT_MISSING )),
210+ (make_row (value = None , stderr = np .nan , sample_size = '' , missing_value = str (float (Nans .DELETED )), missing_stderr = str (float (Nans .DELETED )), missing_sample_size = str (float (Nans .DELETED ))), CsvRowValues ('vi' , None , None , None , Nans .DELETED , Nans .DELETED , Nans .DELETED )),
211+ (make_row (stderr = '' , sample_size = 'NA' , missing_stderr = str (float (Nans .OTHER )), missing_sample_size = str (float (Nans .OTHER ))), CsvRowValues ('vi' , 1.23 , None , None , Nans .NOT_MISSING , Nans .OTHER , Nans .OTHER )),
212+ (make_row (sample_size = None , missing_value = 'missing_value' , missing_stderr = str (float (Nans .OTHER )), missing_sample_size = str (float (Nans .NOT_MISSING ))), CsvRowValues ('vi' , 1.23 , 4.56 , None , Nans .NOT_MISSING , Nans .NOT_MISSING , Nans .OTHER )),
215213 ]
216214
217215 for ((geo_type , row ), field ) in success_cases :
218216 values , error = CsvImporter .extract_and_check_row (row , geo_type )
219217 self .assertIsNone (error )
220- self .assertIsInstance (values , CsvImporter . RowValues )
218+ self .assertIsInstance (values , CsvRowValues )
221219 self .assertEqual (values .geo_value , field .geo_value )
222220 self .assertEqual (values .value , field .value )
223221 self .assertEqual (values .stderr , field .stderr )
224222 self .assertEqual (values .sample_size , field .sample_size )
225223
226- def test_load_csv_with_invalid_header (self ):
224+ @patch ("pandas.read_csv" )
225+ def test_load_csv_with_invalid_header (self , mock_read_csv ):
227226 """Bail loading a CSV when the header is invalid."""
228227
229228 data = {'foo' : [1 , 2 , 3 ]}
230- mock_pandas = MagicMock ()
231- mock_pandas .read_csv .return_value = pandas .DataFrame (data = data )
232229 filepath = 'path/name.csv'
233230 geo_type = 'state'
234231
235- rows = list (CsvImporter .load_csv (filepath , geo_type , pandas = mock_pandas ))
232+ mock_read_csv .return_value = pd .DataFrame (data )
233+ rows = list (CsvImporter .load_csv (filepath , geo_type ))
236234
237- self .assertTrue (mock_pandas . read_csv .called )
238- self .assertTrue (mock_pandas . read_csv .call_args [0 ][0 ], filepath )
235+ self .assertTrue (mock_read_csv .called )
236+ self .assertTrue (mock_read_csv .call_args [0 ][0 ], filepath )
239237 self .assertEqual (rows , [None ])
240238
241- def test_load_csv_with_valid_header (self ):
239+ @patch ("pandas.read_csv" )
240+ def test_load_csv_with_valid_header (self , mock_read_csv ):
242241 """Yield sanity checked `RowValues` from a valid CSV file."""
243242
244243 # one invalid geo_id, but otherwise valid
@@ -248,15 +247,14 @@ def test_load_csv_with_valid_header(self):
248247 'se' : ['2.1' , '2.2' , '2.3' , '2.4' ],
249248 'sample_size' : ['301' , '302' , '303' , '304' ],
250249 }
251- mock_pandas = MagicMock ()
252- mock_pandas .read_csv .return_value = pandas .DataFrame (data = data )
253250 filepath = 'path/name.csv'
254251 geo_type = 'state'
255252
256- rows = list (CsvImporter .load_csv (filepath , geo_type , pandas = mock_pandas ))
253+ mock_read_csv .return_value = pd .DataFrame (data = data )
254+ rows = list (CsvImporter .load_csv (filepath , geo_type ))
257255
258- self .assertTrue (mock_pandas . read_csv .called )
259- self .assertTrue (mock_pandas . read_csv .call_args [0 ][0 ], filepath )
256+ self .assertTrue (mock_read_csv .called )
257+ self .assertTrue (mock_read_csv .call_args [0 ][0 ], filepath )
260258 self .assertEqual (len (rows ), 4 )
261259
262260 self .assertEqual (rows [0 ].geo_value , 'ca' )
@@ -286,15 +284,14 @@ def test_load_csv_with_valid_header(self):
286284 'missing_stderr' : [Nans .NOT_MISSING , Nans .REGION_EXCEPTION , Nans .NOT_MISSING , Nans .NOT_MISSING ] + [None ],
287285 'missing_sample_size' : [Nans .NOT_MISSING ] * 2 + [Nans .REGION_EXCEPTION ] * 2 + [None ]
288286 }
289- mock_pandas = MagicMock ()
290- mock_pandas .read_csv .return_value = pandas .DataFrame (data = data )
291287 filepath = 'path/name.csv'
292288 geo_type = 'state'
293289
294- rows = list (CsvImporter .load_csv (filepath , geo_type , pandas = mock_pandas ))
290+ mock_read_csv .return_value = pd .DataFrame (data )
291+ rows = list (CsvImporter .load_csv (filepath , geo_type ))
295292
296- self .assertTrue (mock_pandas . read_csv .called )
297- self .assertTrue (mock_pandas . read_csv .call_args [0 ][0 ], filepath )
293+ self .assertTrue (mock_read_csv .called )
294+ self .assertTrue (mock_read_csv .call_args [0 ][0 ], filepath )
298295 self .assertEqual (len (rows ), 5 )
299296
300297 self .assertEqual (rows [0 ].geo_value , 'ca' )
0 commit comments