@@ -223,26 +223,23 @@ def _default_filter(node):
223
223
224
224
def __iter (self , indent , nodenamefunc , nodeattrfunc , edgeattrfunc , edgetypefunc , filter_ ):
225
225
yield f"{ self .graph } { self .name } {{"
226
- for option in self .__iter_options (indent ):
227
- yield option
228
- for node in self .__iter_nodes (indent , nodenamefunc , nodeattrfunc , filter_ ):
229
- yield node
230
- for edge in self .__iter_edges (indent , nodenamefunc , edgeattrfunc , edgetypefunc , filter_ ):
231
- yield edge
226
+ yield from self .__iter_options (indent )
227
+ yield from self .__iter_nodes (indent , nodenamefunc , nodeattrfunc , filter_ )
228
+ yield from self .__iter_edges (indent , nodenamefunc , edgeattrfunc , edgetypefunc , filter_ )
232
229
yield "}"
233
230
234
231
def __iter_options (self , indent ):
235
232
options = self .options
236
233
if options :
237
234
for option in options :
238
- yield "%s%s" % ( indent , option )
235
+ yield f" { indent } { option } "
239
236
240
237
def __iter_nodes (self , indent , nodenamefunc , nodeattrfunc , filter_ ):
241
238
for node in PreOrderIter (self .node , filter_ = filter_ , stop = self .stop , maxlevel = self .maxlevel ):
242
239
nodename = nodenamefunc (node )
243
240
nodeattr = nodeattrfunc (node )
244
- nodeattr = " [%s]" % nodeattr if nodeattr is not None else ""
245
- yield '%s"%s"%s;' % ( indent , DotExporter .esc (nodename ), nodeattr )
241
+ nodeattr = f " [{ nodeattr } ]" if nodeattr is not None else ""
242
+ yield f' { indent } " { DotExporter .esc (nodename )} " { nodeattr } ;'
246
243
247
244
def __iter_edges (self , indent , nodenamefunc , edgeattrfunc , edgetypefunc , filter_ ):
248
245
maxlevel = self .maxlevel - 1 if self .maxlevel else None
@@ -254,14 +251,8 @@ def __iter_edges(self, indent, nodenamefunc, edgeattrfunc, edgetypefunc, filter_
254
251
childname = nodenamefunc (child )
255
252
edgeattr = edgeattrfunc (node , child )
256
253
edgetype = edgetypefunc (node , child )
257
- edgeattr = " [%s]" % edgeattr if edgeattr is not None else ""
258
- yield '%s"%s" %s "%s"%s;' % (
259
- indent ,
260
- DotExporter .esc (nodename ),
261
- edgetype ,
262
- DotExporter .esc (childname ),
263
- edgeattr ,
264
- )
254
+ edgeattr = f" [{ edgeattr } ]" if edgeattr is not None else ""
255
+ yield f'{ indent } "{ DotExporter .esc (nodename )} " { edgetype } "{ DotExporter .esc (childname )} "{ edgeattr } ;'
265
256
266
257
def to_dotfile (self , filename ):
267
258
"""
@@ -288,7 +279,7 @@ def to_dotfile(self, filename):
288
279
"""
289
280
with codecs .open (filename , "w" , "utf-8" ) as file :
290
281
for line in self :
291
- file .write ("%s \n " % line )
282
+ file .write (f" { line } \n " )
292
283
293
284
def to_picture (self , filename ):
294
285
"""
@@ -302,7 +293,7 @@ def to_picture(self, filename):
302
293
with NamedTemporaryFile ("wb" , delete = False ) as dotfile :
303
294
dotfilename = dotfile .name
304
295
for line in self :
305
- dotfile .write (("%s \n " % line ).encode ("utf-8" ))
296
+ dotfile .write ((f" { line } \n " ).encode ())
306
297
dotfile .flush ()
307
298
cmd = ["dot" , dotfilename , "-T" , fileformat , "-o" , filename ]
308
299
check_call (cmd )
@@ -315,7 +306,7 @@ def to_picture(self, filename):
315
306
@staticmethod
316
307
def esc (value ):
317
308
"""Escape Strings."""
318
- return _RE_ESC .sub (lambda m : r"\%s" % m .group (0 ), six .text_type (value ))
309
+ return _RE_ESC .sub (lambda m : rf"\ { m .group (0 )} " , six .text_type (value ))
319
310
320
311
321
312
class UniqueDotExporter (DotExporter ):
@@ -438,7 +429,7 @@ def __init__(
438
429
stop = None ,
439
430
maxlevel = None ,
440
431
):
441
- super (UniqueDotExporter , self ).__init__ (
432
+ super ().__init__ (
442
433
node ,
443
434
graph = graph ,
444
435
name = name ,
@@ -466,4 +457,4 @@ def _default_nodenamefunc(self, node):
466
457
467
458
@staticmethod
468
459
def _default_nodeattrfunc (node ):
469
- return 'label="%s"' % ( node .name ,)
460
+ return f 'label="{ node .name } "'
0 commit comments