mirror of
https://github.com/wentasah/ros2nix.git
synced 2025-06-09 07:42:23 +03:00
Cleanup, flake8
This commit is contained in:
parent
83e07c9ea1
commit
caae29d852
3 changed files with 50 additions and 39 deletions
4
.flake8
Normal file
4
.flake8
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[flake8]
|
||||||
|
max-line-length = 80
|
||||||
|
extend-select = B950
|
||||||
|
extend-ignore = E203,E501,E701
|
|
@ -80,6 +80,8 @@
|
||||||
pkgs.bashInteractive
|
pkgs.bashInteractive
|
||||||
pkgs.superflore
|
pkgs.superflore
|
||||||
pkgs.python3Packages.rosdep
|
pkgs.python3Packages.rosdep
|
||||||
|
pkgs.python3Packages.flake8
|
||||||
|
pkgs.python3Packages.flake8-bugbear
|
||||||
];
|
];
|
||||||
ROSDEP_SOURCE_PATH = "${rosdistro}/rosdep/sources.list.d";
|
ROSDEP_SOURCE_PATH = "${rosdistro}/rosdep/sources.list.d";
|
||||||
ROSDISTRO_INDEX_URL = "file://${rosdistro}/index-v4.yaml";
|
ROSDISTRO_INDEX_URL = "file://${rosdistro}/index-v4.yaml";
|
||||||
|
|
|
@ -3,51 +3,46 @@
|
||||||
# Copyright 2019-2024 Ben Wolsieffer <benwolsieffer@gmail.com>
|
# Copyright 2019-2024 Ben Wolsieffer <benwolsieffer@gmail.com>
|
||||||
# Copyright 2024 Michal Sojka <michal.sojka@cvut.cz>
|
# Copyright 2024 Michal Sojka <michal.sojka@cvut.cz>
|
||||||
|
|
||||||
import os
|
from .nix_expression import NixExpression, NixLicense
|
||||||
import argparse
|
|
||||||
import itertools
|
|
||||||
import subprocess
|
|
||||||
from textwrap import dedent, indent
|
|
||||||
from catkin_pkg.package import parse_package_string, Package
|
from catkin_pkg.package import parse_package_string, Package
|
||||||
from rosinstall_generator.distro import get_distro
|
|
||||||
from superflore.PackageMetadata import PackageMetadata
|
|
||||||
from superflore.exceptions import UnresolvedDependency
|
from superflore.exceptions import UnresolvedDependency
|
||||||
from superflore.generators.nix.nix_package import NixPackage
|
from superflore.generators.nix.nix_package import NixPackage
|
||||||
from .nix_expression import NixExpression, NixLicense
|
from superflore.utils import err, ok, warn
|
||||||
from superflore.utils import (download_file, get_distro_condition_context,
|
from superflore.utils import resolve_dep
|
||||||
get_distros, get_pkg_version, info, resolve_dep,
|
from textwrap import dedent
|
||||||
retry_on_exception, warn)
|
from typing import Iterable, Set
|
||||||
from typing import Dict, Iterable, Set, reveal_type
|
import argparse
|
||||||
from superflore.utils import err
|
import itertools
|
||||||
from superflore.utils import ok
|
|
||||||
from superflore.utils import warn
|
|
||||||
import urllib.parse
|
|
||||||
import re
|
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
def resolve_dependencies(deps: Iterable[str]) -> Set[str]:
|
def resolve_dependencies(deps: Iterable[str]) -> Set[str]:
|
||||||
return set(itertools.chain.from_iterable(
|
return set(itertools.chain.from_iterable(map(resolve_dependency, deps)))
|
||||||
map(resolve_dependency, deps)))
|
|
||||||
|
|
||||||
def resolve_dependency(d: str) -> Iterable[str]:
|
def resolve_dependency(d: str) -> Iterable[str]:
|
||||||
try:
|
try:
|
||||||
# Try resolving as system dependency via rosdep
|
# Try resolving as system dependency via rosdep
|
||||||
return resolve_dep(d, 'nix')[0]
|
return resolve_dep(d, "nix")[0]
|
||||||
except UnresolvedDependency:
|
except UnresolvedDependency:
|
||||||
# Assume ROS or 3rd-party package
|
# Assume ROS or 3rd-party package
|
||||||
return (NixPackage.normalize_name(d),)
|
return (NixPackage.normalize_name(d),)
|
||||||
|
|
||||||
|
|
||||||
# Adapted from rosdistro.dependency_walker.DependencyWalker._get_dependencies()
|
# Adapted from rosdistro.dependency_walker.DependencyWalker._get_dependencies()
|
||||||
def get_dependencies_as_set(pkg, dep_type):
|
def get_dependencies_as_set(pkg, dep_type):
|
||||||
deps = {
|
deps = {
|
||||||
'build': pkg.build_depends,
|
"build": pkg.build_depends,
|
||||||
'buildtool': pkg.buildtool_depends,
|
"buildtool": pkg.buildtool_depends,
|
||||||
'build_export': pkg.build_export_depends,
|
"build_export": pkg.build_export_depends,
|
||||||
'buildtool_export': pkg.buildtool_export_depends,
|
"buildtool_export": pkg.buildtool_export_depends,
|
||||||
'exec': pkg.exec_depends,
|
"exec": pkg.exec_depends,
|
||||||
'run': pkg.run_depends,
|
"run": pkg.run_depends,
|
||||||
'test': pkg.test_depends,
|
"test": pkg.test_depends,
|
||||||
'doc': pkg.doc_depends,
|
"doc": pkg.doc_depends,
|
||||||
}
|
}
|
||||||
return set([d.name for d in deps[dep_type] if d.evaluated_condition is not False])
|
return set([d.name for d in deps[dep_type] if d.evaluated_condition is not False])
|
||||||
|
|
||||||
|
@ -62,14 +57,20 @@ def get_output_file_name(source: str, pkg: Package, args):
|
||||||
dir = args.output_dir if args.output_dir is not None else os.path.dirname(source)
|
dir = args.output_dir if args.output_dir is not None else os.path.dirname(source)
|
||||||
return os.path.join(dir, fn)
|
return os.path.join(dir, fn)
|
||||||
|
|
||||||
|
|
||||||
def generate_overlay(expressions: dict[str, str], args):
|
def generate_overlay(expressions: dict[str, str], args):
|
||||||
with open(f'{args.output_dir or "."}/overlay.nix', "w") as f:
|
with open(f'{args.output_dir or "."}/overlay.nix', "w") as f:
|
||||||
print("self: super:\n{", file=f)
|
print("self: super:\n{", file=f)
|
||||||
for pkg in sorted(expressions):
|
for pkg in sorted(expressions):
|
||||||
expr = expressions[pkg] if args.output_dir is None else f"./{os.path.basename(expressions[pkg])}"
|
expr = (
|
||||||
|
expressions[pkg]
|
||||||
|
if args.output_dir is None
|
||||||
|
else f"./{os.path.basename(expressions[pkg])}"
|
||||||
|
)
|
||||||
print(f" {pkg} = super.callPackage {expr} {{}};", file=f)
|
print(f" {pkg} = super.callPackage {expr} {{}};", file=f)
|
||||||
print("}", file=f)
|
print("}", file=f)
|
||||||
|
|
||||||
|
|
||||||
def generate_default(args):
|
def generate_default(args):
|
||||||
with open(f'{args.output_dir or "."}/default.nix', "w") as f:
|
with open(f'{args.output_dir or "."}/default.nix', "w") as f:
|
||||||
f.write('''{
|
f.write('''{
|
||||||
|
@ -92,14 +93,18 @@ import nix-ros-overlay {
|
||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
|
|
||||||
|
|
||||||
def generate_flake(args):
|
def generate_flake(args):
|
||||||
with open(f'{args.output_dir or "."}/flake.nix', "w") as f:
|
with open(f'{args.output_dir or "."}/flake.nix', "w") as f:
|
||||||
f.write('''
|
f.write('''
|
||||||
TODO
|
TODO
|
||||||
''')
|
''')
|
||||||
|
|
||||||
|
|
||||||
def ros2nix(args):
|
def ros2nix(args):
|
||||||
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
parser = argparse.ArgumentParser(
|
||||||
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter
|
||||||
|
)
|
||||||
parser.add_argument("source", nargs="+", help="Path to package.xml")
|
parser.add_argument("source", nargs="+", help="Path to package.xml")
|
||||||
|
|
||||||
group = parser.add_mutually_exclusive_group()
|
group = parser.add_mutually_exclusive_group()
|
||||||
|
@ -239,21 +244,19 @@ def ros2nix(args):
|
||||||
build_inputs=build_inputs,
|
build_inputs=build_inputs,
|
||||||
propagated_build_inputs=propagated_build_inputs,
|
propagated_build_inputs=propagated_build_inputs,
|
||||||
check_inputs=check_inputs,
|
check_inputs=check_inputs,
|
||||||
native_build_inputs=native_build_inputs, **kwargs)
|
native_build_inputs=native_build_inputs,
|
||||||
|
**kwargs,
|
||||||
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
err('Failed to generate derivation for package {}!'.format(pkg))
|
err('Failed to prepare Nix expression for package {}!'.format(pkg))
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
try:
|
try:
|
||||||
derivation_text = derivation.get_text(args.copyright_holder, args.license)
|
derivation_text = derivation.get_text(args.copyright_holder, args.license)
|
||||||
except UnresolvedDependency:
|
except UnresolvedDependency as e:
|
||||||
err("'Failed to resolve required dependencies for package {}!"
|
err(f"Failed to resolve required dependencies for package {pkg}!")
|
||||||
.format(pkg))
|
raise e
|
||||||
unresolved = unresolved_dependencies
|
|
||||||
for dep in unresolved:
|
|
||||||
err(" unresolved: \"{}\"".format(dep))
|
|
||||||
return None, unresolved, None
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
err('Failed to generate derivation for package {}!'.format(pkg))
|
err('Failed to generate derivation for package {}!'.format(pkg))
|
||||||
raise e
|
raise e
|
||||||
|
@ -280,9 +283,11 @@ def ros2nix(args):
|
||||||
else:
|
else:
|
||||||
generate_default(args)
|
generate_default(args)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
import sys
|
import sys
|
||||||
ros2nix(sys.argv[1:])
|
ros2nix(sys.argv[1:])
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue