@@ -89,9 +89,7 @@ def __init__(self, *args, **values):
89
89
list (self ._fields .keys ()) + ["id" , "pk" , "_cls" , "_text_score" ]
90
90
)
91
91
if _undefined_fields :
92
- msg = ('The fields "{}" do not exist on the document "{}"' ).format (
93
- _undefined_fields , self ._class_name
94
- )
92
+ msg = f'The fields "{ _undefined_fields } " do not exist on the document "{ self ._class_name } "'
95
93
raise FieldDoesNotExist (msg )
96
94
97
95
if self .STRICT and not self ._dynamic :
@@ -231,10 +229,10 @@ def __setstate__(self, data):
231
229
setattr (self , k , data [k ])
232
230
if "_fields_ordered" in data :
233
231
if self ._dynamic :
234
- setattr ( self , " _fields_ordered" , data ["_fields_ordered" ])
232
+ self . _fields_ordered = data ["_fields_ordered" ]
235
233
else :
236
234
_super_fields_ordered = type (self )._fields_ordered
237
- setattr ( self , " _fields_ordered" , _super_fields_ordered )
235
+ self . _fields_ordered = _super_fields_ordered
238
236
239
237
dynamic_fields = data .get ("_dynamic_fields" ) or SON ()
240
238
for k in dynamic_fields .keys ():
@@ -244,8 +242,7 @@ def __iter__(self):
244
242
return iter (self ._fields_ordered )
245
243
246
244
def __getitem__ (self , name ):
247
- """Dictionary-style field access, return a field's value if present.
248
- """
245
+ """Dictionary-style field access, return a field's value if present."""
249
246
try :
250
247
if name in self ._fields_ordered :
251
248
return getattr (self , name )
@@ -254,8 +251,7 @@ def __getitem__(self, name):
254
251
raise KeyError (name )
255
252
256
253
def __setitem__ (self , name , value ):
257
- """Dictionary-style field access, set a field's value.
258
- """
254
+ """Dictionary-style field access, set a field's value."""
259
255
# Ensure that the field exists before settings its value
260
256
if not self ._dynamic and name not in self ._fields :
261
257
raise KeyError (name )
@@ -277,7 +273,7 @@ def __repr__(self):
277
273
except (UnicodeEncodeError , UnicodeDecodeError ):
278
274
u = "[Bad Unicode data]"
279
275
repr_type = str if u is None else type (u )
280
- return repr_type ("<{}: {}>" . format ( self .__class__ .__name__ , u ) )
276
+ return repr_type (f "<{ self .__class__ .__name__ } : { u } >" )
281
277
282
278
def __str__ (self ):
283
279
# TODO this could be simpler?
@@ -433,7 +429,7 @@ def validate(self, clean=True):
433
429
pk = self .pk
434
430
elif self ._instance and hasattr (self ._instance , "pk" ):
435
431
pk = self ._instance .pk
436
- message = "ValidationError ({}:{}) " . format ( self . _class_name , pk )
432
+ message = f "ValidationError ({ self . _class_name } :{ pk } ) "
437
433
raise ValidationError (message , errors = errors )
438
434
439
435
def to_json (self , * args , ** kwargs ):
@@ -506,7 +502,7 @@ def _mark_as_changed(self, key):
506
502
if "." in key :
507
503
key , rest = key .split ("." , 1 )
508
504
key = self ._db_field_map .get (key , key )
509
- key = "{ }.{}" . format ( key , rest )
505
+ key = f" { key } .{ rest } "
510
506
else :
511
507
key = self ._db_field_map .get (key , key )
512
508
@@ -578,7 +574,7 @@ def _nestable_types_clear_changed_fields(data):
578
574
else :
579
575
iterator = data .items ()
580
576
581
- for index_or_key , value in iterator :
577
+ for _index_or_key , value in iterator :
582
578
if hasattr (value , "_get_changed_fields" ) and not isinstance (
583
579
value , Document
584
580
): # don't follow references
@@ -602,23 +598,22 @@ def _nestable_types_changed_fields(changed_fields, base_key, data):
602
598
iterator = data .items ()
603
599
604
600
for index_or_key , value in iterator :
605
- item_key = "{}{ }.". format ( base_key , index_or_key )
601
+ item_key = f" { base_key } { index_or_key } ."
606
602
# don't check anything lower if this key is already marked
607
603
# as changed.
608
604
if item_key [:- 1 ] in changed_fields :
609
605
continue
610
606
611
607
if hasattr (value , "_get_changed_fields" ):
612
608
changed = value ._get_changed_fields ()
613
- changed_fields += ["{}{}" . format ( item_key , k ) for k in changed if k ]
609
+ changed_fields += [f" { item_key } { k } " for k in changed if k ]
614
610
elif isinstance (value , (list , tuple , dict )):
615
611
BaseDocument ._nestable_types_changed_fields (
616
612
changed_fields , item_key , value
617
613
)
618
614
619
615
def _get_changed_fields (self ):
620
- """Return a list of all fields that have explicitly been changed.
621
- """
616
+ """Return a list of all fields that have explicitly been changed."""
622
617
EmbeddedDocument = _import_class ("EmbeddedDocument" )
623
618
ReferenceField = _import_class ("ReferenceField" )
624
619
GenericReferenceField = _import_class ("GenericReferenceField" )
@@ -643,7 +638,7 @@ def _get_changed_fields(self):
643
638
if isinstance (data , EmbeddedDocument ):
644
639
# Find all embedded fields that have been changed
645
640
changed = data ._get_changed_fields ()
646
- changed_fields += ["{}{}" . format ( key , k ) for k in changed if k ]
641
+ changed_fields += [f" { key } { k } " for k in changed if k ]
647
642
elif isinstance (data , (list , tuple , dict )):
648
643
if hasattr (field , "field" ) and isinstance (
649
644
field .field , (ReferenceField , GenericReferenceField )
@@ -750,8 +745,7 @@ def _get_collection_name(cls):
750
745
751
746
@classmethod
752
747
def _from_son (cls , son , _auto_dereference = True , created = False ):
753
- """Create an instance of a Document (subclass) from a PyMongo SON (dict)
754
- """
748
+ """Create an instance of a Document (subclass) from a PyMongo SON (dict)"""
755
749
if son and not isinstance (son , dict ):
756
750
raise ValueError (
757
751
"The source SON object needs to be of type 'dict' but a '%s' was found"
@@ -796,11 +790,10 @@ def _from_son(cls, son, _auto_dereference=True, created=False):
796
790
errors_dict [field_name ] = e
797
791
798
792
if errors_dict :
799
- errors = "\n " .join (
800
- ["Field '{}' - {}" .format (k , v ) for k , v in errors_dict .items ()]
801
- )
793
+ errors = "\n " .join ([f"Field '{ k } ' - { v } " for k , v in errors_dict .items ()])
802
794
msg = "Invalid data to create a `{}` instance.\n {}" .format (
803
- cls ._class_name , errors ,
795
+ cls ._class_name ,
796
+ errors ,
804
797
)
805
798
raise InvalidDocumentError (msg )
806
799
@@ -968,10 +961,7 @@ def _unique_with_indexes(cls, namespace=""):
968
961
unique_fields += unique_with
969
962
970
963
# Add the new index to the list
971
- fields = [
972
- ("{}{}" .format (namespace , f ), pymongo .ASCENDING )
973
- for f in unique_fields
974
- ]
964
+ fields = [(f"{ namespace } { f } " , pymongo .ASCENDING ) for f in unique_fields ]
975
965
index = {"fields" : fields , "unique" : True , "sparse" : sparse }
976
966
unique_indexes .append (index )
977
967
@@ -1007,9 +997,7 @@ def _geo_indices(cls, inspected=None, parent_field=None):
1007
997
"PolygonField" ,
1008
998
)
1009
999
1010
- geo_field_types = tuple (
1011
- [_import_class (field ) for field in geo_field_type_names ]
1012
- )
1000
+ geo_field_types = tuple (_import_class (field ) for field in geo_field_type_names )
1013
1001
1014
1002
for field in cls ._fields .values ():
1015
1003
if not isinstance (field , geo_field_types ):
@@ -1027,7 +1015,7 @@ def _geo_indices(cls, inspected=None, parent_field=None):
1027
1015
elif field ._geo_index :
1028
1016
field_name = field .db_field
1029
1017
if parent_field :
1030
- field_name = "{ }.{}" . format ( parent_field , field_name )
1018
+ field_name = f" { parent_field } .{ field_name } "
1031
1019
geo_indices .append ({"fields" : [(field_name , field ._geo_index )]})
1032
1020
1033
1021
return geo_indices
@@ -1165,8 +1153,7 @@ def _lookup_field(cls, parts):
1165
1153
1166
1154
@classmethod
1167
1155
def _translate_field_name (cls , field , sep = "." ):
1168
- """Translate a field attribute name to a database field name.
1169
- """
1156
+ """Translate a field attribute name to a database field name."""
1170
1157
parts = field .split (sep )
1171
1158
parts = [f .db_field for f in cls ._lookup_field (parts )]
1172
1159
return "." .join (parts )
0 commit comments