Skip to main content

extend warnings.warn with callee parameter

Project description

extend warnings.warn with callee parameter

When you have some library, with some deprecated function X, you can use the stacklevel=2 parameter on warnings.warn to show the file-name and line-number of the routine calling X

But if you have some framework that calls the user provided code, either through plug-ins or by explicit registering, the stacklevel doesn’t help you to complain about return values that are deprecated.

This library extends warnings.warn with a callee parameter. If this is provided stacklevel should not be provided and the value for callee should be a method or function for which the warning is raised.

The warning will usually be a PendingDeprecationWarning, a DeprecationWarning or a subclass of either.

As an example, if you have two files p0.py and p2.py both with content:

class PlugIn:
 def status(self):
     return {'result': 'ok'}

And a file p1.py:

class PlugIn:
def status(self):

return [‘ok’] # this plug-in has been updated

And these files are in a subfolder plug_ins where your framework can find them. Then running:

import sys
from pathlib import Path
from importlib import import_module
import ruamel.std.warnings
import warnings

class DictReturnPendingDeprecationWarning(PendingDeprecationWarning):
    pass

class Driver:
    def __init__(self):
        self.plug_ins = []

    def load_plug_ins(self):
        sys.path.append('plug_ins')
        for file_name in Path('plug_ins').glob('p*.py'):
            mod = import_module(file_name.stem)
            self.plug_ins.append(mod.PlugIn())

    def check_status(self):
        for p in self.plug_ins:
            retval = p.status()
            if isinstance(retval, dict):
                # assume dict
                warnings.warn(
                   'callable should return list, not dict',
                   DictReturnPendingDeprecationWarning,
                   callee=p.status,
                )
            else:
                pass  # assume list

warnings.simplefilter('once', PendingDeprecationWarning)

def doit():
    driver = Driver()
    driver.load_plug_ins()
    for idx in range(2):
        driver.check_status()
    warnings.warn('almost done', PendingDeprecationWarning)

doit()

will result in:

/tmp/plug_ins/p0.py:2: DictReturnPendingDeprecationWarning: callable should return list, not dict
  def status(self):
/tmp/plug_ins/p2.py:2: DictReturnPendingDeprecationWarning: callable should return list, not dict
  def status(self):
/tmp/tmp_00.py:40: PendingDeprecationWarning: almost done
  warnings.warn('almost done', PendingDeprecationWarning)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ruamel.std.warning-0.2.1.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

ruamel.std.warning-0.2.1-py3-none-any.whl (3.6 kB view details)

Uploaded Python 3

File details

Details for the file ruamel.std.warning-0.2.1.tar.gz.

File metadata

  • Download URL: ruamel.std.warning-0.2.1.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.5

File hashes

Hashes for ruamel.std.warning-0.2.1.tar.gz
Algorithm Hash digest
SHA256 2a86dcf2616b4e411526fa4f8ac20d51c6cef2b8ae7dcee9736493a8202b85c9
MD5 fcb68f1daa12c5fbd54472556b1331ec
BLAKE2b-256 014616f7c1eec73296b7122e072fda9cb65da9127ab40970eccad2c45df1a67c

See more details on using hashes here.

File details

Details for the file ruamel.std.warning-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for ruamel.std.warning-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3fd7a811630f5b88d3fdb91c2d06457fb443ee7b9bb0fa02f666e397dda1e609
MD5 20348283085c5c197dc0cbba7e6c5290
BLAKE2b-256 f79c8ebe9198180136774c42a348180864c48dba158000bf4324152f6830696e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page