5
5
from unittest .mock import MagicMock
6
6
from unittest .mock import patch
7
7
from datetime import date
8
- import math
9
8
import numpy as np
10
- import os
11
9
12
10
# third party
13
- import pandas
11
+ import pandas as pd
14
12
import epiweeks as epi
15
13
16
14
from delphi_utils import Nans
17
- from delphi .epidata .acquisition .covidcast .csv_importer import CsvImporter
18
15
from delphi .utils .epiweek import delta_epiweeks
16
+ from delphi .epidata .acquisition .covidcast .csv_importer import CsvImporter , CsvRowValue
19
17
20
18
# py3tester coverage target
21
19
__test_target__ = 'delphi.epidata.acquisition.covidcast.csv_importer'
@@ -208,37 +206,38 @@ def make_row(
208
206
self .assertEqual (error , field )
209
207
210
208
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 (), CsvRowValue ('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 ))), CsvRowValue ('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 ))), CsvRowValue ('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 ))), CsvRowValue ('vi' , 1.23 , 4.56 , None , Nans .NOT_MISSING , Nans .NOT_MISSING , Nans .OTHER )),
215
213
]
216
214
217
215
for ((geo_type , row ), field ) in success_cases :
218
216
values , error = CsvImporter .extract_and_check_row (row , geo_type )
219
217
self .assertIsNone (error )
220
- self .assertIsInstance (values , CsvImporter . RowValues )
218
+ self .assertIsInstance (values , CsvRowValue )
221
219
self .assertEqual (values .geo_value , field .geo_value )
222
220
self .assertEqual (values .value , field .value )
223
221
self .assertEqual (values .stderr , field .stderr )
224
222
self .assertEqual (values .sample_size , field .sample_size )
225
223
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 ):
227
226
"""Bail loading a CSV when the header is invalid."""
228
227
229
228
data = {'foo' : [1 , 2 , 3 ]}
230
- mock_pandas = MagicMock ()
231
- mock_pandas .read_csv .return_value = pandas .DataFrame (data = data )
232
229
filepath = 'path/name.csv'
233
230
geo_type = 'state'
234
231
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 ))
236
234
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 )
239
237
self .assertEqual (rows , [None ])
240
238
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 ):
242
241
"""Yield sanity checked `RowValues` from a valid CSV file."""
243
242
244
243
# one invalid geo_id, but otherwise valid
@@ -248,15 +247,14 @@ def test_load_csv_with_valid_header(self):
248
247
'se' : ['2.1' , '2.2' , '2.3' , '2.4' ],
249
248
'sample_size' : ['301' , '302' , '303' , '304' ],
250
249
}
251
- mock_pandas = MagicMock ()
252
- mock_pandas .read_csv .return_value = pandas .DataFrame (data = data )
253
250
filepath = 'path/name.csv'
254
251
geo_type = 'state'
255
252
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 ))
257
255
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 )
260
258
self .assertEqual (len (rows ), 4 )
261
259
262
260
self .assertEqual (rows [0 ].geo_value , 'ca' )
@@ -286,15 +284,14 @@ def test_load_csv_with_valid_header(self):
286
284
'missing_stderr' : [Nans .NOT_MISSING , Nans .REGION_EXCEPTION , Nans .NOT_MISSING , Nans .NOT_MISSING ] + [None ],
287
285
'missing_sample_size' : [Nans .NOT_MISSING ] * 2 + [Nans .REGION_EXCEPTION ] * 2 + [None ]
288
286
}
289
- mock_pandas = MagicMock ()
290
- mock_pandas .read_csv .return_value = pandas .DataFrame (data = data )
291
287
filepath = 'path/name.csv'
292
288
geo_type = 'state'
293
289
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 ))
295
292
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 )
298
295
self .assertEqual (len (rows ), 5 )
299
296
300
297
self .assertEqual (rows [0 ].geo_value , 'ca' )
0 commit comments