Use crosspm
as python-module:
from crosspm import CrossPM
config_name = 'myconfig.yaml'
dependencies = 'dependencies.txt.lock'
# Если у вас есть уже подготовленный файл dependencies.txt.lock
argv = 'download -c "{}" --depslock-path="{}" --no-fails'.format(config_name, dependencies)
# Если нужно указать зависимости сразу в коде
# dependencies = "packagename 1.2.123 master"
# argv = 'download -c "{}" --dependencies-lock-content="{}" --no-fails'.format(config_name, dependencies)
# run download and get result
# crosspm_raw_packages - LIST of all downloaded packages (with duplicate)
err, crosspm_raw_packages = CrossPM(argv, return_result='raw').run()
crosspm_unique_packages = set(crosspm_raw_packages)
# crosspm_tree_packages - LIST of first-level packages, with child in package.packages variable
err, crosspm_tree_packages = CrossPM(argv, return_result='tree').run()
You can get some Package field, like this:
package = crosspm_tree_packages[0]
# class Package have this public interface:
print('Package has this dependencies')
dependencies_package = package.packages # access to all child packages
print(len(dependencies_package))
name = package.name # Package name
packed = package.packed_path # Path to archive (tar.gz\zip\nupkg
unpacked = package.unpacked_path # Path to unpacked folder
dup = package.duplicated # The package has a duplicate package with different version
pkg = package.pkg # type: ArtifactoryPath from dohq-artifactory
md5 = package.md5 # Artifactory or local file md5hash
package.get_name_and_path() # LEGACY - access to "name, unpacked_path"
package.get_file_path('some.exe') # Path to unpacked file (inside package)
package.get_file("some.exe") # Like "get_file_path" or None if file not exist
# Get package params like arch, branch, compiler, osname, version, repo, etc
params = package.get_params()
""" Return dict, like this
NB: version is list
{
"arch": "x86",
"branch": "1.9-pm",
"compiler": "vc120",
"osname": "win",
"package": "libiconv",
"repo": "libs-cpp-release",
"version": ["1", "9", "131", "feature"]
}
"""
# Get version in string format
params = package.get_params(merged=True)
"""
NB: version is list
{
"arch": "x86",
"branch": "1.9-pm",
"compiler": "vc120",
"osname": "win",
"package": "libiconv",
"repo": "libs-cpp-release",
"version": "1.9.131-feature",
}
"""
# Get version in string format
params = package.get_params(param_list='version', merged=True)
"""
NB: version is list
{
"version": "1.9.131-feature",
}
"""
params = package.get_params(param_list=['arch','version'], merged=True)
"""
NB: version is list
{
"arch": "x86",
"version": "1.9.131-feature",
}
"""
crosspm
log message to stderr by default. For now, we have this hack for disable standart logging.
def init_logging():
logger_format_string = '%(message)s'
logging.basicConfig(level=logging.DEBUG, format=logger_format_string, stream=sys.stdout)
init_logging()
cpm = CrossPM(argv_usedby, return_result='raw')
cpm.set_logging_level = lambda: (0, None)
err, crosspm_packages = cpm.run()
NOTE: If you set your logging setting and not suppressing crosspm
-logging, you will have two logs, one in stderr
, other in stdout