Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
package_paths = self.context_model.packages_path
widget = None
if self.left_variant and self.right_variant:
self.side = "both"
equal_versions = (self.left_variant.version == self.right_variant.version)
right_variant_visible = (self.right_variant.wrapped.location in package_paths)
self.comparable = right_variant_visible and not equal_versions
if self.comparable:
# determine how far apart the variant versions are
versions = sorted([self.left_variant.version,
self.right_variant.version])
range_ = VersionRange.as_span(*versions)
it = iter_packages(name=self.left_variant.name,
paths=package_paths, range_=range_)
diff_num = sum(1 for x in it) - 1
unit = "version" if diff_num == 1 else "versions"
icon_suffixes = {1: "_1", 2: "_2", 3: "_3"}
icon_suffix = icon_suffixes.get(diff_num, "")
if self.left_variant == self.right_variant:
self.mode = "equal_to"
self._set_color(0.7, 0.7, 0.7)
widget = IconButton("equal_to", "packages are equal")
elif self.left_variant.version == self.right_variant.version:
# same version, but package is different. This can happen when
# a local package is released which then hides a central package
# of the same version
self.mode = "equalish"
def get_packages(self, url):
""" @returns A list of packages (as strings) contained in the given repo """
repo = self._get_repo(url)
if "pkgs" not in repo:
pkgs = []
repo_dir = self._get_repo_dir(url)
if os.path.exists(repo_dir):
for pkg_fam in iter_package_families(paths=[repo_dir]):
for pkg in iter_packages(pkg_fam.name, paths=[repo_dir]):
pkgs.append(pkg.short_name())
repo["pkgs"] = pkgs
return repo["pkgs"]
other_fams = dict((x.name, x) for x in other_pkgs)
newer_packages = {}
older_packages = {}
added_packages = set()
removed_packages = set()
for pkg in self_pkgs:
if pkg.name not in other_fams:
removed_packages.add(pkg)
else:
other_pkg = other_fams[pkg.name]
if other_pkg.version > pkg.version:
r = VersionRange.as_span(lower_version=pkg.version,
upper_version=other_pkg.version)
it = iter_packages(pkg.name, range_=r)
pkgs = sorted(it, key=lambda x: x.version)
newer_packages[pkg.name] = pkgs
elif other_pkg.version < pkg.version:
r = VersionRange.as_span(lower_version=other_pkg.version,
upper_version=pkg.version)
it = iter_packages(pkg.name, range_=r)
pkgs = sorted(it, key=lambda x: x.version, reverse=True)
older_packages[pkg.name] = pkgs
for pkg in other_pkgs:
if pkg.name not in self_fams:
added_packages.add(pkg)
if newer_packages:
d["newer_packages"] = newer_packages
if older_packages:
def set_package_name(self, package_name):
package_paths = self.context_model.packages_path
self.packages = {}
self.clear()
rows = []
busy_cursor = QtGui.QCursor(QtCore.Qt.WaitCursor)
QtWidgets.QApplication.setOverrideCursor(busy_cursor)
try:
packages = list(iter_packages(name=str(package_name),
paths=package_paths))
except RezError:
packages = []
if not packages:
self.setEnabled(False)
self.package_name = None
QtWidgets.QApplication.restoreOverrideCursor()
return
for i, package in enumerate(sorted(packages, key=lambda x: x.version,
reverse=True)):
version_str = str(package.version) + ' '
path_str = package.uri + " "
release_str = get_timestamp_str(package.timestamp) \
if package.timestamp else '-'
def iter_packages(self, name, range_=None, paths=None):
"""Same as iter_packages in packages.py, but also applies this filter.
Args:
name (str): Name of the package, eg 'maya'.
range_ (VersionRange or str): If provided, limits the versions returned
to those in `range_`.
paths (list of str, optional): paths to search for packages, defaults
to `config.packages_path`.
Returns:
`Package` iterator.
"""
for package in iter_packages(name, range_, paths):
if not self.excludes(package):
yield package
p = Popen(["python", "-c", py_cmd], stdout=subprocess.PIPE,
stderr=subprocess.PIPE, text=True)
out, err = p.communicate()
if p.returncode:
raise InvalidPackageError(
"Failed to find installed python module '%s':\n%s"
% (module_name, err))
module_paths = ast.literal_eval(out.strip())
def issubdir(path, parent_path):
return path.startswith(parent_path + os.sep)
for package in iter_packages("python", paths=paths):
if not hasattr(package, "_site_paths"):
continue
contained = True
for module_path in module_paths:
if not any(issubdir(module_path, x) for x in package._site_paths):
contained = False
if contained:
return package
raise InvalidPackageError(
"Failed to find python installation containing the module '%s'. Has "
"python been installed as a rez package?" % module_name)
range_ = None
if self.reference_variant and self.reference_variant.name == variant.name:
reference_version = self.reference_variant.version
versions = sorted([reference_version, variant.version])
range_ = VersionRange.as_span(*versions)
timestamp = self.context().timestamp
if preloaded_packages is not None:
if range_ is None:
packages = preloaded_packages
else:
packages = [x for x in preloaded_packages if x.version in range_]
else:
it = iter_packages(name=variant.name, paths=package_paths, range_=range_)
packages = sorted(it, key=lambda x: x.version, reverse=True)
self.setRowCount(len(packages))
brush = self.palette().brush(QtGui.QPalette.Active, QtGui.QPalette.Base)
for row, package in enumerate(packages):
version_str = str(package.version) + ' '
item = QtWidgets.QTableWidgetItem(version_str)
item.setTextAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
self.setVerticalHeaderItem(row, item)
if package.version == variant.version:
self.version_index = row
update_font(item, bold=True)
if reference_version is not None \
def print_package_versions(self):
"""Print a list of versions of the package this tool comes from, and
indicate which version this tool is from."""
variants = self.context.get_tool_variants(self.tool_name)
if variants:
if len(variants) > 1:
self._print_conflicting(variants)
return 1
else:
from rez.packages import iter_packages
variant = next(iter(variants))
it = iter_packages(name=variant.name)
rows = []
colors = []
for pkg in sorted(it, key=lambda x: x.version, reverse=True):
if pkg.version == variant.version:
name = "* %s" % pkg.qualified_name
col = heading
else:
name = " %s" % pkg.qualified_name
col = local if pkg.is_local else None
label = "(local)" if pkg.is_local else ""
rows.append((name, pkg.path, label))
colors.append(col)
_pr = Printer()
def __init__(self, package_name, version_range=None, paths=None, verbose=False):
"""Create a PackageHelp object.
Args:
package_name (str): Package to search.
version_range (`VersionRange`): Versions to search.
"""
self.package = None
self._verbose = verbose
self._sections = []
# find latest package with a help entry
package = None
it = iter_packages(package_name, range_=version_range)
packages = sorted(it, key=lambda x: x.version, reverse=True)
for package_ in packages:
if self._verbose:
print("searching for help in %s..." % package_.uri)
if package_.help:
package = package_
break
if package:
help_ = package.help
if isinstance(help_, basestring):
sections = [["Help", help_]]
elif isinstance(help_, list):
sections = help_
if self._verbose:
print("found %d help entries in %s." % (len(sections), package.uri))
else:
resource_type = "family"
if not family_names:
return resource_type, []
# return list of family names (validation is n/a in this case)
if resource_type == "family":
results = [ResourceSearchResult(x, "family") for x in family_names]
return "family", results
results = []
# iterate over packages/variants
for name in family_names:
it = iter_packages(name, version_range, paths=self.package_paths)
packages = sorted(it, key=lambda x: x.version)
if self.latest and packages:
packages = [packages[-1]]
for package in packages:
# validate and check time (accessing timestamp may cause
# validation fail)
try:
if package.timestamp:
if self.after_time and package.timestamp < self.after_time:
continue
if self.before_time and package.timestamp >= self.before_time:
continue
if self.validate: