@@ -89,9 +89,7 @@ def __init__(self, *args, **values):
8989 list (self ._fields .keys ()) + ["id" , "pk" , "_cls" , "_text_score" ]
9090 )
9191 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 } "'
9593 raise FieldDoesNotExist (msg )
9694
9795 if self .STRICT and not self ._dynamic :
@@ -231,10 +229,10 @@ def __setstate__(self, data):
231229 setattr (self , k , data [k ])
232230 if "_fields_ordered" in data :
233231 if self ._dynamic :
234- setattr ( self , " _fields_ordered" , data ["_fields_ordered" ])
232+ self . _fields_ordered = data ["_fields_ordered" ]
235233 else :
236234 _super_fields_ordered = type (self )._fields_ordered
237- setattr ( self , " _fields_ordered" , _super_fields_ordered )
235+ self . _fields_ordered = _super_fields_ordered
238236
239237 dynamic_fields = data .get ("_dynamic_fields" ) or SON ()
240238 for k in dynamic_fields .keys ():
@@ -244,8 +242,7 @@ def __iter__(self):
244242 return iter (self ._fields_ordered )
245243
246244 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."""
249246 try :
250247 if name in self ._fields_ordered :
251248 return getattr (self , name )
@@ -254,8 +251,7 @@ def __getitem__(self, name):
254251 raise KeyError (name )
255252
256253 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."""
259255 # Ensure that the field exists before settings its value
260256 if not self ._dynamic and name not in self ._fields :
261257 raise KeyError (name )
@@ -277,7 +273,7 @@ def __repr__(self):
277273 except (UnicodeEncodeError , UnicodeDecodeError ):
278274 u = "[Bad Unicode data]"
279275 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 } >" )
281277
282278 def __str__ (self ):
283279 # TODO this could be simpler?
@@ -433,7 +429,7 @@ def validate(self, clean=True):
433429 pk = self .pk
434430 elif self ._instance and hasattr (self ._instance , "pk" ):
435431 pk = self ._instance .pk
436- message = "ValidationError ({}:{}) " . format ( self . _class_name , pk )
432+ message = f "ValidationError ({ self . _class_name } :{ pk } ) "
437433 raise ValidationError (message , errors = errors )
438434
439435 def to_json (self , * args , ** kwargs ):
@@ -506,7 +502,7 @@ def _mark_as_changed(self, key):
506502 if "." in key :
507503 key , rest = key .split ("." , 1 )
508504 key = self ._db_field_map .get (key , key )
509- key = "{ }.{}" . format ( key , rest )
505+ key = f" { key } .{ rest } "
510506 else :
511507 key = self ._db_field_map .get (key , key )
512508
@@ -578,7 +574,7 @@ def _nestable_types_clear_changed_fields(data):
578574 else :
579575 iterator = data .items ()
580576
581- for index_or_key , value in iterator :
577+ for _index_or_key , value in iterator :
582578 if hasattr (value , "_get_changed_fields" ) and not isinstance (
583579 value , Document
584580 ): # don't follow references
@@ -602,23 +598,22 @@ def _nestable_types_changed_fields(changed_fields, base_key, data):
602598 iterator = data .items ()
603599
604600 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 } ."
606602 # don't check anything lower if this key is already marked
607603 # as changed.
608604 if item_key [:- 1 ] in changed_fields :
609605 continue
610606
611607 if hasattr (value , "_get_changed_fields" ):
612608 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 ]
614610 elif isinstance (value , (list , tuple , dict )):
615611 BaseDocument ._nestable_types_changed_fields (
616612 changed_fields , item_key , value
617613 )
618614
619615 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."""
622617 EmbeddedDocument = _import_class ("EmbeddedDocument" )
623618 ReferenceField = _import_class ("ReferenceField" )
624619 GenericReferenceField = _import_class ("GenericReferenceField" )
@@ -643,7 +638,7 @@ def _get_changed_fields(self):
643638 if isinstance (data , EmbeddedDocument ):
644639 # Find all embedded fields that have been changed
645640 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 ]
647642 elif isinstance (data , (list , tuple , dict )):
648643 if hasattr (field , "field" ) and isinstance (
649644 field .field , (ReferenceField , GenericReferenceField )
@@ -750,8 +745,7 @@ def _get_collection_name(cls):
750745
751746 @classmethod
752747 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)"""
755749 if son and not isinstance (son , dict ):
756750 raise ValueError (
757751 "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):
796790 errors_dict [field_name ] = e
797791
798792 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 ()])
802794 msg = "Invalid data to create a `{}` instance.\n {}" .format (
803- cls ._class_name , errors ,
795+ cls ._class_name ,
796+ errors ,
804797 )
805798 raise InvalidDocumentError (msg )
806799
@@ -968,10 +961,7 @@ def _unique_with_indexes(cls, namespace=""):
968961 unique_fields += unique_with
969962
970963 # 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 ]
975965 index = {"fields" : fields , "unique" : True , "sparse" : sparse }
976966 unique_indexes .append (index )
977967
@@ -1007,9 +997,7 @@ def _geo_indices(cls, inspected=None, parent_field=None):
1007997 "PolygonField" ,
1008998 )
1009999
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 )
10131001
10141002 for field in cls ._fields .values ():
10151003 if not isinstance (field , geo_field_types ):
@@ -1027,7 +1015,7 @@ def _geo_indices(cls, inspected=None, parent_field=None):
10271015 elif field ._geo_index :
10281016 field_name = field .db_field
10291017 if parent_field :
1030- field_name = "{ }.{}" . format ( parent_field , field_name )
1018+ field_name = f" { parent_field } .{ field_name } "
10311019 geo_indices .append ({"fields" : [(field_name , field ._geo_index )]})
10321020
10331021 return geo_indices
@@ -1165,8 +1153,7 @@ def _lookup_field(cls, parts):
11651153
11661154 @classmethod
11671155 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."""
11701157 parts = field .split (sep )
11711158 parts = [f .db_field for f in cls ._lookup_field (parts )]
11721159 return "." .join (parts )
0 commit comments