| """Compatibility helpers. |
| |
| This module provides classes, variables and imports which are used to |
| support packaging across Python 2.x and 3.x. |
| """ |
| |
| from packaging import logger |
| |
| |
| # XXX Having two classes with the same name is not a good thing. |
| # XXX 2to3-related code should move from util to this module |
| |
| # TODO Move common code here: PY3 (bool indicating if we're on 3.x), any, etc. |
| |
| try: |
| from packaging.util import Mixin2to3 as _Mixin2to3 |
| _CONVERT = True |
| _KLASS = _Mixin2to3 |
| except ImportError: |
| _CONVERT = False |
| _KLASS = object |
| |
| __all__ = ['Mixin2to3'] |
| |
| |
| class Mixin2to3(_KLASS): |
| """ The base class which can be used for refactoring. When run under |
| Python 3.0, the run_2to3 method provided by Mixin2to3 is overridden. |
| When run on Python 2.x, it merely creates a class which overrides run_2to3, |
| yet does nothing in particular with it. |
| """ |
| if _CONVERT: |
| |
| def _run_2to3(self, files, doctests=[], fixers=[]): |
| """ Takes a list of files and doctests, and performs conversion |
| on those. |
| - First, the files which contain the code(`files`) are converted. |
| - Second, the doctests in `files` are converted. |
| - Thirdly, the doctests in `doctests` are converted. |
| """ |
| if fixers: |
| self.fixer_names = fixers |
| |
| logger.info('converting Python code') |
| _KLASS.run_2to3(self, files) |
| |
| logger.info('converting doctests in Python files') |
| _KLASS.run_2to3(self, files, doctests_only=True) |
| |
| if doctests != []: |
| logger.info('converting doctest in text files') |
| _KLASS.run_2to3(self, doctests, doctests_only=True) |
| else: |
| # If run on Python 2.x, there is nothing to do. |
| |
| def _run_2to3(self, files, doctests=[], fixers=[]): |
| pass |