Skip to content

Commit

Permalink
[backport humble] Fix compatibility with flake8 version 5 (ament#410)
Browse files Browse the repository at this point in the history
This is a backport of ament#410 to Humble.
When building on Ubuntu 20.04 Focal (Tier 3 support) and following the instructions in https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html#install-development-tools-and-ros-tools for that platform, `flake8` is installed via `pip` and so is installed at the newer version 5.
`ament_lint` then fails to run with:

```
/opt/ros/humble/install/lib/python3.8/site-packages/ament_flake8/main.py:150: in get_flake8_style_guide
    config_finder = config.ConfigFileFinder(
E   AttributeError: module 'flake8.options.config' has no attribute 'ConfigFileFinder'
```

This PR fixes that issue.

* Fix compatibility with flake8 version 5

The ConfigFileFinder class no longer exists in flake8 version 5.
The get_style_guide() code has been updated from the latest
api.legacy.get_style_guide() in flake8.

Signed-off-by: Timo Röhling <roehling@debian.org>
Co-authored-by: Chris Lalancette <clalancette@gmail.com>
Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
  • Loading branch information
2 people authored and emersonknapp committed Sep 5, 2023
1 parent 2d2a972 commit e30c2cd
Showing 1 changed file with 61 additions and 7 deletions.
68 changes: 61 additions & 7 deletions ament_flake8/ament_flake8/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import flake8
from flake8.api.legacy import StyleGuide
from flake8.main import application as flake8_app
from flake8.main import options as flake8_options


def main(argv=sys.argv[1:]):
Expand Down Expand Up @@ -147,13 +148,28 @@ def get_flake8_style_guide(argv):
argv)
flake8.configure_logging(prelim_opts.verbose, prelim_opts.output_file)
from flake8.options import config
config_finder = config.ConfigFileFinder(
application.program, prelim_opts.append_config,
config_file=prelim_opts.config,
ignore_config_files=prelim_opts.isolated)
application.find_plugins(config_finder)
application.register_plugin_options()
application.parse_configuration_and_cli(config_finder, remaining_args)
if hasattr(config, 'ConfigFileFinder'):
config_finder = config.ConfigFileFinder(
application.program, prelim_opts.append_config,
config_file=prelim_opts.config,
ignore_config_files=prelim_opts.isolated)
application.find_plugins(config_finder)
application.register_plugin_options()
application.parse_configuration_and_cli(config_finder, remaining_args)
else:
cfg, cfg_dir = config.load_config(
config=prelim_opts.config,
extra=prelim_opts.append_config,
isolated=prelim_opts.isolated,
)
application.find_plugins(
cfg,
cfg_dir,
enable_extensions=prelim_opts.enable_extensions,
require_plugins=prelim_opts.require_plugins,
)
application.register_plugin_options()
application.parse_configuration_and_cli(cfg, cfg_dir, remaining_args)
else:
application.parse_preliminary_options_and_args([])
flake8.configure_logging(
Expand All @@ -173,6 +189,44 @@ def get_flake8_style_guide(argv):
return StyleGuide(application)


def parse_config_file(config_file):
from flake8 import __version__ as flake8_version, __version_info__ as flake8_version6adf864b6f2b760b132cb03f9cdda329ca59c58f_info
from flake8.options import config, manager, aggregator

major_release = flake8_version_info[0]

if major_release >= 5:
opts_manager = manager.OptionManager(
version=flake8_version,
plugin_versions='',
parents=[]
)
flake8_options.register_default_options(opts_manager)
cfg, cfg_dir = config.load_config(config_file, [])

return aggregator.aggregate_options(
opts_manager,
cfg, cfg_dir,
[]
), []

if major_release >= 3:
opts_manager = manager.OptionManager(prog='flake8', version=flake8_version)
flake8_options.register_default_options(opts_manager)

return aggregator.aggregate_options(
opts_manager,
config.ConfigFileFinder(
'flake8',
[],
config_file if major_release == 4 else [config_file]
),
[]
)

raise RuntimeError('flake8 is too old. Please upgrade to version 3.0.0 or newer')


def generate_flake8_report(config_file, paths, excludes, max_line_length=None):
flake8_argv = []
if config_file is not None:
Expand Down

0 comments on commit e30c2cd

Please sign in to comment.