@@ -350,15 +350,18 @@ class DeprecatedFunctionAlias:
350
350
- Florent Hivert (2009-11-23), with the help of Mike Hansen.
351
351
- Luca De Feo (2011-07-11), printing the full module path when different from old path
352
352
"""
353
- def __init__ (self , issue_number , func , module , instance = None , unbound = None ):
353
+ def __init__ (self , issue_number , func , module , instance = None , unbound = None , * , replacement = None , replacement_rst_doc = None ):
354
354
r"""
355
355
TESTS::
356
356
357
+ sage: # needs sage.combinat
357
358
sage: from sage.misc.superseded import deprecated_function_alias
358
- sage: g = deprecated_function_alias(13109, number_of_partitions) # needs sage.combinat
359
- sage: from sage.misc.superseded import deprecated_function_alias
360
- sage: g.__doc__ # needs sage.combinat
359
+ sage: g = deprecated_function_alias(13109, number_of_partitions)
360
+ sage: g.__doc__
361
361
'Deprecated: Use :func:`number_of_partitions` instead.\nSee :issue:`13109` for details.\n\n'
362
+ sage: g = deprecated_function_alias(13109, number_of_partitions, replacement_rst_doc='BLOB')
363
+ sage: g.__doc__
364
+ 'Deprecated: Use BLOB instead.\nSee :issue:`13109` for details.\n\n'
362
365
"""
363
366
_check_issue_number (issue_number )
364
367
try :
@@ -369,14 +372,15 @@ def __init__(self, issue_number, func, module, instance=None, unbound=None):
369
372
self .issue_number = issue_number
370
373
self .instance = instance # for use with methods
371
374
self .unbound = unbound
375
+ self ._replacement = replacement
372
376
self .__module__ = module
373
- if isinstance ( func , type ( deprecation )) :
374
- sphinxrole = " func"
375
- else :
376
- sphinxrole = "meth"
377
- doc = 'Deprecated: '
378
- doc += 'Use :' + sphinxrole + ':`' + self . func . __name__ + '` instead.\n '
379
- doc += 'See :issue:`' + str ( self .issue_number ) + ' ` for details.\n \n '
377
+ if replacement_rst_doc is None :
378
+ if isinstance ( func , type ( deprecation )):
379
+ replacement_rst_doc = f":func:` { self . func . __name__ } `"
380
+ else :
381
+ replacement_rst_doc = f":meth:` { self . func . __name__ } `"
382
+ doc = f'Deprecated: Use { replacement_rst_doc } instead.\n '
383
+ doc += f 'See :issue:`{ self .issue_number } ` for details.\n \n '
380
384
self .__doc__ = doc
381
385
382
386
@lazy_attribute
@@ -389,7 +393,6 @@ def __name__(self):
389
393
sage: g.__name__ # needs sage.combinat
390
394
'g'
391
395
392
- sage: from sage.misc.superseded import deprecated_function_alias
393
396
sage: class cls():
394
397
....: def new_meth(self): return 42
395
398
....: old_meth = deprecated_function_alias(13109, new_meth)
@@ -444,15 +447,21 @@ def __call__(self, *args, **kwds):
444
447
doctest:...: DeprecationWarning: blo is deprecated. Please use bla instead.
445
448
See https://github.com/sagemath/sage/issues/13109 for details.
446
449
42
450
+ sage: blo = deprecated_function_alias(13109, bla, replacement='BLOB')
451
+ sage: blo()
452
+ doctest:...: DeprecationWarning: blo is deprecated. Please use BLOB instead.
453
+ See https://github.com/sagemath/sage/issues/13109 for details.
454
+ 42
447
455
"""
448
- if self .instance is None and self .__module__ != self .func .__module__ :
449
- other = self .func .__module__ + "." + self .func .__name__
450
- else :
451
- other = self .func .__name__
456
+ replacement = self ._replacement
457
+ if replacement is None :
458
+ if self .instance is None and self .__module__ != self .func .__module__ :
459
+ replacement = self .func .__module__ + "." + self .func .__name__
460
+ else :
461
+ replacement = self .func .__name__
452
462
453
463
deprecation (self .issue_number ,
454
- "{} is deprecated. Please use {} instead." .format (
455
- self .__name__ , other ))
464
+ f"{ self .__name__ } is deprecated. Please use { replacement } instead." )
456
465
if self .instance is None :
457
466
return self .func (* args , ** kwds )
458
467
else :
@@ -497,7 +506,7 @@ def __get__(self, inst, cls=None):
497
506
unbound = self )
498
507
499
508
500
- def deprecated_function_alias (issue_number , func ):
509
+ def deprecated_function_alias (issue_number , func , * , replacement = None , replacement_rst_doc = None ):
501
510
"""
502
511
Create an aliased version of a function or a method which raises a
503
512
deprecation warning message.
@@ -513,6 +522,12 @@ def deprecated_function_alias(issue_number, func):
513
522
514
523
- ``func`` -- the function or method to be aliased
515
524
525
+ - ``replacement`` -- a plain text string to be inserted
526
+ into the warning message to describe the replacement
527
+
528
+ - ``replacement_rst_doc`` -- a restructuredText snippet to be inserted
529
+ into the user documentation to describe the replacement
530
+
516
531
EXAMPLES::
517
532
518
533
sage: from sage.misc.superseded import deprecated_function_alias
@@ -554,4 +569,5 @@ def deprecated_function_alias(issue_number, func):
554
569
module_name = inspect .getmodulename (frame1 .f_code .co_filename )
555
570
if module_name is None :
556
571
module_name = '__main__'
557
- return DeprecatedFunctionAlias (issue_number , func , module_name )
572
+ return DeprecatedFunctionAlias (issue_number , func , module_name ,
573
+ replacement = replacement , replacement_rst_doc = replacement_rst_doc )
0 commit comments