4646 'id' : '[1-9]\d*' ,
4747 'decimal' : '\d{1,10}\.\d{2}' ,
4848 'integer' : '[+-]?\d*' ,
49- 'float' : '[+-]?\d*(\.\d*)?' ,
49+ 'float' : '[+-]?\d*(\.\d*)?' ,
5050 'double' : '[+-]?\d*(\.\d*)?' ,
5151 'date' : '\d{4}\-\d{2}\-\d{2}' ,
5252 'time' : '\d{2}\:\d{2}(\:\d{2}(\.\d*)?)?' ,
5353 'datetime' :'\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}(\:\d{2}(\.\d*)?)?' ,
54- }
54+ }
5555
5656class Row (BasicStorage ):
5757
@@ -381,9 +381,9 @@ def fields(self):
381381
382382 def _structure (self ):
383383 keys = ['name' ,'type' ,'writable' ,'listable' ,'searchable' ,'regex' ,'options' ,
384- 'default' ,'label' ,'unique' ,'notnull' ,'required' ]
384+ 'default' ,'label' ,'unique' ,'notnull' ,'required' ]
385385 def noncallable (obj ): return obj if not callable (obj ) else None
386- return [{key : noncallable (getattr (field , key )) for key in keys }
386+ return [{key : noncallable (getattr (field , key )) for key in keys }
387387 for field in self if field .readable and not field .type == 'password' ]
388388
389389 @cachedprop
@@ -415,7 +415,7 @@ def _enable_record_versioning(self,
415415 clones .append (
416416 field .clone (unique = False , type = field .type if nfk else 'bigint' )
417417 )
418-
418+
419419 d = dict (format = self ._format )
420420 if migrate :
421421 d ['migrate' ] = migrate
@@ -427,7 +427,7 @@ def _enable_record_versioning(self,
427427 d ['redefine' ] = redefine
428428 archive_db .define_table (
429429 archive_name ,
430- Field (current_record , field_type , label = current_record_label ),
430+ Field (current_record , field_type , label = current_record_label ),
431431 * clones , ** d )
432432
433433 self ._before_update .append (
@@ -447,7 +447,7 @@ def _enable_record_versioning(self,
447447 self ._common_filter = lambda q : reduce (
448448 AND , [query (q ), newquery (q )])
449449 else :
450- self ._common_filter = newquery
450+ self ._common_filter = newquery
451451
452452 def _validate (self , ** vars ):
453453 errors = Row ()
@@ -795,7 +795,7 @@ def validate_and_insert(self, **fields):
795795 response .id = self .insert (** new_fields )
796796 return response
797797
798- def validate_and_update (self , _key = DEFAULT , ** fields ):
798+ def validate_and_update (self , _key = DEFAULT , ** fields ):
799799 response , new_fields = self ._validate_fields (fields , 'update' )
800800 #: select record(s) for update
801801 if _key is DEFAULT :
@@ -891,9 +891,9 @@ def import_from_csv_file(self,
891891 null = '<NULL>' ,
892892 unique = 'uuid' ,
893893 id_offset = None , # id_offset used only when id_map is None
894- transform = None ,
894+ transform = None ,
895895 validate = False ,
896- ** kwargs
896+ ** kwargs
897897 ):
898898 """
899899 Import records from csv file.
@@ -912,7 +912,6 @@ def import_from_csv_file(self,
912912 incrementing order.
913913 Will keep the id numbers in restored table.
914914 """
915-
916915 if validate :
917916 inserting = self .validate_and_insert
918917 else :
@@ -925,8 +924,8 @@ def import_from_csv_file(self,
925924 if restore :
926925 self ._db [self ].truncate ()
927926
928- reader = csv . reader ( csvfile , delimiter = delimiter ,
929- quotechar = quotechar , quoting = quoting )
927+ csvfile = csvfile . read (). decode ()
928+ reader = csv . reader ( csvfile , delimiter = delimiter , quotechar = quotechar , quoting = quoting )
930929 colnames = None
931930 if isinstance (id_map , dict ):
932931 if self ._tablename not in id_map :
@@ -1287,10 +1286,10 @@ def abs(self):
12871286 return Expression (
12881287 self .db , self ._dialect .aggregate , self , 'ABS' , self .type )
12891288
1290- def cast (self , cast_as , ** kwargs ):
1289+ def cast (self , cast_as , ** kwargs ):
12911290 return Expression (
12921291 self .db , self ._dialect .cast , self , self ._dialect .types [cast_as ] % kwargs , cast_as )
1293-
1292+
12941293 def lower (self ):
12951294 return Expression (
12961295 self .db , self ._dialect .lower , self , None , self .type )
@@ -1614,7 +1613,7 @@ class Field(Expression, Serializable):
16141613 def __init__ (self , fieldname , type = 'string' , length = None , default = DEFAULT ,
16151614 required = False , requires = DEFAULT , ondelete = 'CASCADE' ,
16161615 notnull = False , unique = False , uploadfield = True , widget = None ,
1617- label = None , comment = None ,
1616+ label = None , comment = None ,
16181617 writable = True , readable = True ,
16191618 searchable = True , listable = True ,
16201619 regex = None , options = None ,
0 commit comments