mirror of
https://github.com/python/cpython.git
synced 2024-12-29 19:55:17 +08:00
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""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
|