Skip to main content

Python3 library for checking code compatibility with different Python versions.

Project description

pycompatibility

PyPI - Downloads PyPI - License GitHub Tag

Python3 library for checking code compatibility with different Python versions.

is a tool designed to help verify the compatibility of Python code with versions older than Python 3.8. Specifically, this tool analyzes Python files for features introduced after Python 3.7 and provides refactoring suggestions to ensure that the code can run on older versions.

Features

The pycompatibility detects and reports the use of the following features introduced after Python 3.7:

  • Walrus Operator (:=): Introduced in Python 3.8, this operator allows variable assignment within expressions. The tool detects its usage and suggests refactoring to avoid its use if maintaining compatibility with older versions is necessary.

  • Positional-Only Parameters: Introduced in Python 3.8, these parameters are defined with the / syntax. The tool alerts you to their use and recommends refactoring to ensure compatibility with Python 3.7.

  • Assignment Expressions in Comprehensions: Introduced in Python 3.9, these expressions allow variable assignment within comprehensions. The tool identifies these expressions and suggests alternatives.

  • Type Union Operator (|): Introduced in Python 3.10, this operator allows combining types in annotations. The tool detects the use of this operator and suggests replacing it with Optional from the typing module.

  • Structural Pattern Matching (match-case): Introduced in Python 3.10, structural pattern matching allows code to be organized based on patterns. The tool identifies this construct and suggests avoiding its use if compatibility with older versions is required.

  • Enhanced F-strings: F-strings were enhanced in Python 3.8. The tool detects the use of f-strings and provides refactoring suggestions if needed.

Install

pip install pycompatibility

Command line just pass the name of the script as an argument which will show compatibility

pycompatibility example_code.py

In this example you can test a script that contains features that were introduced after version 3.7 of Python, this helps you maintain compatibility with older versions

script for testing "example_code.py"

def example_function():
    x = 10
    y = (z := x + 5)  # Walrus operator (3.8+)
    print(f"The value of z is: {z}")  # f-string (3.6+)

    def inner_function(a: int | None):  # Type union operator (3.10+)
        if a is None:
            return "a is None"
        return f"a is {a}"

    result = inner_function(None)
    print(result)

    match result:  # Structural pattern matching (3.10+)
        case "a is None":
            print("Matched None")
        case _:
            print("Matched something else")

    items = [1, 2, 3, 4, 5]
    if any((n := x) > 3 for x in items):  # Walrus operator in comprehensions (3.9+)
        print(f"Found an item greater than 3: {n}")

    context = (open("file1.txt"), open("file2.txt"))  # Parenthesized context managers (3.9+)
    with context as (f1, f2):
        print(f1.read(), f2.read())

    def positional_only_func(a, b, /, c):  # Positional-only parameters (3.8+)
        print(a, b, c)

    positional_only_func(1, 2, 3)
    

Now just test the script as in the instruction below

>>> from pycompatibility import CompatibilityChecker
>>> 
>>> checker = CompatibilityChecker("example_code.py")
>>> checker.verify()
Line 7: Use of the type union operator '|' detected. Introduced in Python 3.10+.
Suggestion: Replace 'int | None' with 'Optional[int]' from the 'typing' module.

Line 4: Use of the walrus operator ':=' detected. Introduced in Python 3.8+.
Suggestion: Refactor to avoid using the walrus operator ':='.

Line 22: Use of the walrus operator ':=' detected. Introduced in Python 3.8+.
Suggestion: Refactor to avoid using the walrus operator ':='.

Line 29: Use of positional-only parameters detected. Introduced in Python 3.8+.
Suggestion: Consider refactoring parameters if targeting Python 3.7.

Line 5: Use of f-strings detected. Introduced in Python 3.6, but with enhanced features in Python 3.8+.
Suggestion: Consider refactoring f-strings if targeting an older version of Python.

Line 10: Use of f-strings detected. Introduced in Python 3.6, but with enhanced features in Python 3.8+.
Suggestion: Consider refactoring f-strings if targeting an older version of Python.

Line 23: Use of f-strings detected. Introduced in Python 3.6, but with enhanced features in Python 3.8+.
Suggestion: Consider refactoring f-strings if targeting an older version of Python.

Line 15: Use of structural pattern matching (match-case) detected. Introduced in Python 3.10+.
Suggestion: Refactor to avoid using structural pattern matching.

>>> 

Contributing

  • If you want to contribute to the project, please submit a pull request or open an issue to discuss changes or improvements.

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

pycompatibility-1.0.0.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pycompatibility-1.0.0-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file pycompatibility-1.0.0.tar.gz.

File metadata

  • Download URL: pycompatibility-1.0.0.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.6

File hashes

Hashes for pycompatibility-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ad01e27e0a7941e93159af4a502a9852895a3c6ec04f60f7bedc4be5ad59428d
MD5 48d379228ed7596edde72ee8acd5510d
BLAKE2b-256 4b027c3cd4ccc9e552847359ec4febd597c629fa90e5375a48fa3e151246b00b

See more details on using hashes here.

File details

Details for the file pycompatibility-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pycompatibility-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1240a5cdd033add111a8ac0b94c59f92227fbd6bfedf3863a230f7f1a81cf8b8
MD5 18058586fc7968037edc537a09a92ebc
BLAKE2b-256 2bac74c95851b23ddd4a3e39374041dc53b467b2eb94d2b5b357143e3e83b814

See more details on using hashes here.

Supported by

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