@@ -905,7 +905,7 @@ def inner(fn):
905905 required = True ,
906906 ),
907907 click .argument ("table" ),
908- click .argument ("file" , type = click .File ("rb" ), required = True ),
908+ click .argument ("file" , type = click .File ("rb" , lazy = True ), required = True ),
909909 click .option (
910910 "--pk" ,
911911 help = "Columns to use as the primary key, e.g. id" ,
@@ -2000,6 +2000,7 @@ def memory(
20002000 for i , path in enumerate (paths ):
20012001 # Path may have a :format suffix
20022002 fp = None
2003+ should_close_fp = False
20032004 if ":" in path and path .rsplit (":" , 1 )[- 1 ].upper () in Format .__members__ :
20042005 path , suffix = path .rsplit (":" , 1 )
20052006 format = Format [suffix .upper ()]
@@ -2017,29 +2018,32 @@ def memory(
20172018 file_table = stem
20182019 stem_counts [stem ] = stem_counts .get (stem , 1 ) + 1
20192020 fp = file_path .open ("rb" )
2020- rows , format_used = rows_from_file (fp , format = format , encoding = encoding )
2021- tracker = None
2022- if format_used in (Format .CSV , Format .TSV ) and not no_detect_types :
2023- tracker = TypeTracker ()
2024- rows = tracker .wrap (rows )
2025- if flatten :
2026- rows = (_flatten (row ) for row in rows )
2027-
2028- db [file_table ].insert_all (rows , alter = True )
2029- if tracker is not None :
2030- db [file_table ].transform (types = tracker .types )
2031- # Add convenient t / t1 / t2 views
2032- view_names = ["t{}" .format (i + 1 )]
2033- if i == 0 :
2034- view_names .append ("t" )
2035- for view_name in view_names :
2036- if not db [view_name ].exists ():
2037- db .create_view (
2038- view_name , "select * from {}" .format (quote_identifier (file_table ))
2039- )
2040-
2041- if fp :
2042- fp .close ()
2021+ should_close_fp = True
2022+ try :
2023+ rows , format_used = rows_from_file (fp , format = format , encoding = encoding )
2024+ tracker = None
2025+ if format_used in (Format .CSV , Format .TSV ) and not no_detect_types :
2026+ tracker = TypeTracker ()
2027+ rows = tracker .wrap (rows )
2028+ if flatten :
2029+ rows = (_flatten (row ) for row in rows )
2030+
2031+ db [file_table ].insert_all (rows , alter = True )
2032+ if tracker is not None :
2033+ db [file_table ].transform (types = tracker .types )
2034+ # Add convenient t / t1 / t2 views
2035+ view_names = ["t{}" .format (i + 1 )]
2036+ if i == 0 :
2037+ view_names .append ("t" )
2038+ for view_name in view_names :
2039+ if not db [view_name ].exists ():
2040+ db .create_view (
2041+ view_name ,
2042+ "select * from {}" .format (quote_identifier (file_table )),
2043+ )
2044+ finally :
2045+ if should_close_fp and fp :
2046+ fp .close ()
20432047
20442048 if analyze :
20452049 _analyze (db , tables = None , columns = None , save = False )
0 commit comments