rosdep2 Python API¶
Experimental: the rosdep2 Python library is still unstable.
The rosdep Python module supports both the rosdep
command-line tool as well as libraries that wish to use rosdep data
files to resolve dependencies.
As a developer, you may wish to extend rosdep to add new OS
platforms or package managers. Platforms are specified by registering
information on the InstallerContext. Package managers
generally extend the PackageManagerInstaller implementation.
The rospkg library is used for OS detection.
Please consult the Developers Guide for more information on developing with the Python API.
Exceptions¶
Database Model¶
- class rosdep2.RosdepDatabase[source]¶
Stores loaded rosdep data for multiple views.
- get_view_data(view_name)[source]¶
- Returns:
RosdepDatabaseEntryof given view.- Raises:
KeyErrorif no entry for view_name
- get_view_dependencies(view_name)[source]¶
- Raises:
KeyErrorif view_name is not an entry, or if all of view’s dependencies have not been properly loaded.
- is_loaded(view_name)[source]¶
- Parameters:
view_name – name of view to check,
str- Returns:
Trueif view_name has been loaded into this database.
- mark_loaded(view_name)[source]¶
If view is not already loaded, this will mark it as such. This in effect sets the data for the view to be empty.
- Parameters:
view_name – name of view to mark as loaded
- set_view_data(view_name, rosdep_data, view_dependencies, origin)[source]¶
Set data associated with view. This will create a new
RosdepDatabaseEntry.- Parameters:
rosdep_data – rosdep data map to associated with view. This will be copied.
origin – origin of view data, e.g. filepath of
rosdep.yaml
View Model¶
- class rosdep2.RosdepDefinition(rosdep_key, data, origin='<dynamic>')[source]¶
Single rosdep dependency definition. This data is stored as the raw dictionary definition for the dependency.
See REP 111, ‘Multiple Package Manager Support for Rosdep’ for a discussion of this raw format.
- get_rule_for_platform(os_name, os_version, installer_keys, default_installer_key)[source]¶
Get installer_key and rule for the specified rule. See REP 111 for precedence rules.
- Parameters:
os_name – OS name to get rule for
os_version – OS version to get rule for
installer_keys – Keys of installers for platform,
[str]default_installer_key – Default installer key for platform,
[str]
- Returns:
(installer_key, rosdep_args_dict),
(str, dict)- Raises:
ResolutionErrorIf no rule is available- Raises:
InvalidDataIf rule data is not valid
- reverse_merge(new_data, origin='<dynamic>', verbose=False)[source]¶
Merge two definitions together, with existing rules taking precendence. Definitions are merged at the os_name level, meaning that if two rules exist with the same os_name, the first one wins.
- Parameters:
data – raw rosdep data for a single rosdep dependency,
dictorigin – string that indicates where this new data comes from (e.g. filename)
- class rosdep2.RosdepView(name)[source]¶
View of
RosdepDatabase. UnlikeRosdepDatabase, which storesRosdepDatabaseEntrydata for all stacks, a view merges entries for a particular stack. This view can then be queried to lookup and resolve individual rosdep dependencies.- merge(update_entry, override=False, verbose=False)[source]¶
Merge rosdep database update into main database. Merge rules are first entry to declare a key wins. There are no conflicts. This rule logic is modelled after the apt sources list.
- Parameters:
override – Ignore first-one-wins rules and instead always use rules from update_entry
- class rosdep2.RosdepLookup(rosdep_db, loader)[source]¶
Lookup rosdep definitions. Provides API for most non-install-related commands for rosdep.
RosdepLookupcaches data as it is loaded, so changes made on the filesystem will not be reflected if the rosdep information has already been loaded.- static create_from_rospkg(rospack=None, rosstack=None, sources_loader=None, verbose=False, dependency_types=None)[source]¶
Create
RosdepLookupbased on current ROS package environment.- Parameters:
rospack – (optional) Override
rospkg.RosPackinstance used to crawl ROS packages.rosstack – (optional) Override
rospkg.RosStackinstance used to crawl ROS stacks.sources_loader – (optional) Override SourcesLoader used for managing sources.list data sources.
dependency_types – (optional) List of dependency types. Allowed: {‘build’, ‘buildtool’, ‘build_export’, ‘buildtool_export’, ‘exec’, ‘test’, ‘doc’}
- create_rosdep_view(view_name, view_keys, verbose=False)[source]¶
- Parameters:
view_name – name of view to create
view_keys – order list of view names to merge, first one wins
verbose – print debugging output
- get_errors()[source]¶
Retrieve error state for API calls that do not directly report error state. This is the case for APIs like
RosdepLookup.where_defined()that are meant to be fault-tolerant to single-stack failures.- Returns:
List of exceptions,
[Exception]
- get_resources_that_need(rosdep_name)[source]¶
- Parameters:
rosdep_name – name of rosdep dependency
- Returns:
list of package names that require rosdep,
[str]
- get_rosdep_view(view_key, verbose=False)[source]¶
Get a
RosdepViewassociated with view_key. Views can be queries to resolve rosdep keys to definitions.- Parameters:
view_key – Name of rosdep view (e.g. ROS stack name),
str- Raises:
RosdepConflictif view cannot be created due to conflict rosdep definitions.- Raises:
rospkg.ResourceNotFoundif view_key cannot be located- Raises:
RosdepInternalError
- get_rosdep_view_for_resource(resource_name, verbose=False)[source]¶
Get a
RosdepViewfor a specific ROS resource resource_name. Views can be queries to resolve rosdep keys to definitions.- Parameters:
resource_name – Name of ROS resource (e.g. stack, package) to create view for,
str.- Returns:
RosdepViewfor specific ROS resource resource_name, orNoneif no view is associated with this resource.- Raises:
RosdepConflictif view cannot be created due to conflict rosdep definitions.- Raises:
rospkg.ResourceNotFoundif view_key cannot be located- Raises:
RosdepInternalError
- get_rosdeps(resource_name, implicit=True)[source]¶
Get rosdeps that resource_name (e.g. package) requires.
- Parameters:
implicit – If
True, include implicit rosdep dependencies. Default:True.- Returns:
list of rosdep names,
[str]
- get_views_that_define(rosdep_name)[source]¶
Locate all views that directly define rosdep_name. A side-effect of this method is that all available rosdep files in the configuration will be loaded into memory.
Error state from single-stack failures (e.g.
InvalidData,ResourceNotFound) are not propagated. Caller must checkRosdepLookup.get_errors()to check for single-stack error state. Error state does not reset – it accumulates.- Parameters:
rosdep_name – name of rosdep to lookup
- Returns:
list of (stack_name, origin) where rosdep is defined.
- Raises:
RosdepInternalError
- resolve(rosdep_key, resource_name, installer_context)[source]¶
Resolve a
RosdepDefinitionfor a particular os/version spec.- Parameters:
resource_name – resource (e.g. ROS package) to resolve key within
rosdep_key – rosdep key to resolve
os_name – OS name to use for resolution
os_version – OS name to use for resolution
- Returns:
(installer_key, resolution, dependencies),
(str, [opaque], [str]). resolution are the system dependencies for the specified installer. The value is an opaque list and meant to be interpreted by the installer. dependencies is a list of rosdep keys that the definition depends on.- Raises:
ResolutionErrorIf rosdep_key cannot be resolved for resource_name in installer_context- Raises:
rospkg.ResourceNotFoundif resource_name cannot be located
- resolve_all(resources, installer_context, implicit=False)[source]¶
Resolve all the rosdep dependencies for resources using installer_context.
- Parameters:
resources – list of resources (e.g. packages),
[str]installer_context –
InstallerContextimplicit – Install implicit (recursive) dependencies of resources. Default
False.
- Returns:
(resolutions, errors),
([(str, [str])], {str: ResolutionError}). resolutions provides an ordered list of resolution tuples. A resolution tuple’s first element is the installer key (e.g.: apt or homebrew) and the second element is a list of opaque resolution values for that installer. errors maps package names to anResolutionErrororKeyErrorexception.- Raises:
RosdepInternalErrorif unexpected error in constructing dependency graph- Raises:
InvalidDataif a cycle occurs in constructing dependency graph
Loaders¶
- class rosdep2.RosdepLoader[source]¶
Base API for loading rosdep information by package or stack name.
- get_rosdeps(resource_name, implicit=True)[source]¶
- Raises:
rospkg.ResourceNotFoundif resource_name cannot be found.
- get_view_key(resource_name)[source]¶
Map resource_name to a view key. In rospkg, this maps a ROS package name to a ROS stack name. If resource_name is a ROS stack name, it returns the ROS stack name.
- Returns:
Name of view that resource_name is in,
Noneif no associated view.- Raises:
rospkg.ResourceNotFoundif resource_name cannot be found.
- load_rosdep_yaml(yaml_contents, origin)[source]¶
Utility routine for unmarshalling rosdep data encoded as YAML.
- Parameters:
origin – origin of yaml contents (for error messages)
- Raises:
yaml.YAMLError
- load_view(view_name, rosdep_db, verbose=False)[source]¶
Load view data into rosdep_db. If the view has already been loaded into rosdep_db, this method does nothing.
- Parameters:
view_name – name of ROS stack to load,
strrosdep_db – database to load stack data into,
RosdepDatabase
- Raises:
- Raises:
rospkg.ResourceNotFoundif view cannot be located
- class rosdep2.RosPkgLoader(rospack=None, rosstack=None, underlay_key=None, dependency_types=[])[source]¶
-
- get_rosdeps(resource_name, implicit=True)[source]¶
If resource_name is a stack, returns an empty list.
- Raises:
rospkg.ResourceNotFoundif resource_name cannot be found.
- get_view_key(resource_name)[source]¶
Map resource_name to a view key. In rospkg, this maps the DEFAULT_VIEW_KEY if resource_name exists.
- Raises:
rospkg.ResourceNotFound
- load_view(view_name, rosdep_db, verbose=False)[source]¶
Load view data into rosdep_db. If the view has already been loaded into rosdep_db, this method does nothing. If view has no rosdep data, it will be initialized with an empty data map.
- Raises:
InvalidDataif view rosdep.yaml is invalid- Raises:
rospkg.ResourceNotFoundif view cannot be located- Returns:
Trueif view was loaded.Falseif view was already loaded.
Installers¶
- class rosdep2.InstallerContext(os_detect=None)[source]¶
InstallerContextmanages the context of execution for rosdep as it relates to the installers, OS detectors, and other extensible APIs.- add_os_installer_key(os_key, installer_key)[source]¶
Register an installer for the specified OS. This will fail with a
KeyErrorif noInstallercan be found with the associated installer_key.- Parameters:
os_key – Key for OS
installer_key – Key for installer to add to OS
- Raises:
KeyError: if installer for installer_key is not set.
- get_default_os_installer_key(os_key)[source]¶
Get the default OS installer key to use for OS, or
Noneif there is no default.- Parameters:
os_key – Key for OS
- Returns:
- Raises:
KeyError: if no information for OS os_key is registered.
- get_installer(installer_key)[source]¶
- Returns:
Installerclass associated with installer_key.- Raises:
KeyErrorIf not associated installer- Raises:
InstallFailedIf installer cannot produce an install command (e.g. if installer is not installed)
- get_os_installer_keys(os_key)[source]¶
Get list of installer keys registered for the specified OS. These keys can be resolved by calling
InstallerContext.get_installer().- Parameters:
os_key – Key for OS
- Raises:
KeyError: if no information for OS os_key is registered.
- get_os_name_and_version()[source]¶
Get the OS name and version key to use for resolution and installation. This will be the detected OS name/version unless
InstallerContext.set_os_override()has been called.- Returns:
(os_name, os_version),
(str, str)
- set_default_os_installer_key(os_key, installer_key)[source]¶
Set the default OS installer to use for OS.
InstallerContext.add_os_installer()must have previously been called with the same arguments.- Parameters:
os_key – Key for OS
installer_key – Key for installer to add to OS
- Raises:
KeyError: if installer for installer_key is not set or if OS for os_key has no associated installers.
- set_installer(installer_key, installer)[source]¶
Set the installer to use for installer_key. This will replace any existing installer associated with the key. installer_key should be the same key used for the
rosdep.yamlpackage manager key. If installer isNone, this will delete any existing associated installer from this context.
- class rosdep2.Installer[source]¶
The
InstallerAPI is designed around opaque resolved parameters. These parameters can be any type of sequence object, but they must obey set arithmetic. They should also implement__str__()methods so they can be pretty printed.- get_depends(rosdep_args)[source]¶
- Returns:
list of dependencies on other rosdep keys. Only necessary if the package manager doesn’t handle dependencies.
- get_install_command(resolved, interactive=True, reinstall=False, quiet=False)[source]¶
- Parameters:
resolved – list of resolved installation items,
[opaque]interactive – If False, disable interactive prompts, e.g. Pass through
-yor equivalant to package manager.reinstall – If True, install everything even if already installed
- is_installed(resolved_item)[source]¶
- Parameters:
resolved – resolved installation item. NOTE: this is a single item, not a list of items like the other APIs,
opaque.- Returns:
Trueif all of the resolved items are installed on the local system
- resolve(rosdep_args_dict)[source]¶
- Parameters:
rosdep_args_dict – argument dictionary to the rosdep rule for this package manager
- Returns:
[resolutions]. resolved objects should be printable to a user, but are otherwise opaque.
- unique(*resolved_rules)[source]¶
Combine the resolved rules into a unique list. This is meant to combine the results of multiple calls to
PackageManagerInstaller.resolve().Example:
resolved1 = installer.resolve(args1) resolved2 = installer.resolve(args2) resolved = installer.unique(resolved1, resolved2)
- Parameters:
resolved_rules – resolved arguments. Resolved arguments must all be from this
Installerinstance.
- class rosdep2.PackageManagerInstaller(detect_fn, supports_depends=False)[source]¶
General form of a package manager
Installerimplementation that assumes:installer rosdep args spec is a list of package names stored with the key “packages”
a detect function exists that can return a list of packages that are installed
Also, if supports_depends is set to
True:installer rosdep args spec can also include dependency specification with the key “depends”
- elevate_priv(cmd)[source]¶
Prepend self.sudo_command to the command if self.as_root is
True.- Parameters:
cmd (list) – list of strings comprising the command
- Returns:
a list of commands
- get_depends(rosdep_args)[source]¶
- Returns:
list of dependencies on other rosdep keys. Only necessary if the package manager doesn’t handle dependencies.
- get_install_command(resolved, interactive=True, reinstall=False, quiet=False)[source]¶
- Parameters:
resolved – list of resolved installation items,
[opaque]interactive – If False, disable interactive prompts, e.g. Pass through
-yor equivalant to package manager.reinstall – If True, install everything even if already installed
- get_packages_to_install(resolved, reinstall=False)[source]¶
Return a list of packages (out of resolved) that still need to get installed.
- get_version_strings()[source]¶
Return a list of version information strings.
Where each string is of the form “<installer> <version string>”. For example, [“apt-get x.y.z”] or [“pip x.y.z”, “setuptools x.y.z”].