rez.package_filter#
- class rez.package_filter.PackageFilterBase#
Bases:
object
Base class for package filters.
- excludes(package)#
Determine if the filter excludes the given package.
- classmethod from_pod(data)#
Convert from POD types to equivalent package filter.
- to_pod()#
Convert to POD type, suitable for storing in an rxt file.
- iter_packages(name, range_=None, paths=None)#
Same as
iter_packages()
, but also applies this filter.- Parameters:
name (str) – Name of the package, eg ‘maya’.
range (VersionRange or str) – If provided, limits the versions returned to those in
range_
.paths (Optional[list[str]]) – paths to search for packages, defaults to
packages_path
.
- Returns:
iterator
- Return type:
- class rez.package_filter.PackageFilter#
Bases:
PackageFilterBase
A package filter is a set of rules that hides some packages but leaves others visible. For example, a package filter might be used to hide all packages whos version ends in the string
.beta
. A package filter might also be used simply to act as a blacklist, hiding some specific packages that are known to be problematic.Rules can be added as ‘exclusion’ or ‘inclusion’ rules. A package is only excluded if it matches one or more exclusion rules, and does not match any inclusion rules.
- __init__()#
- excludes(package)#
Determine if the filter excludes the given package.
- copy()#
Return a shallow copy of the filter.
Adding rules to the copy will not alter the source.
- cost()#
Get the approximate cost of this filter.
Cost is the total cost of the exclusion rules in this filter. The cost of family-specific filters is divided by 10.
- Returns:
The approximate cost of the filter.
- Return type:
- classmethod from_pod(data)#
Convert from POD types to equivalent package filter.
- Return type:
- to_pod()#
Convert to POD type, suitable for storing in an rxt file.
- iter_packages(name, range_=None, paths=None)#
Same as
iter_packages()
, but also applies this filter.- Parameters:
name (str) – Name of the package, eg ‘maya’.
range (VersionRange or str) – If provided, limits the versions returned to those in
range_
.paths (Optional[list[str]]) – paths to search for packages, defaults to
packages_path
.
- Returns:
iterator
- Return type:
- class rez.package_filter.PackageFilterList#
Bases:
PackageFilterBase
A list of package filters.
A package is excluded by a filter list iff any filter within the list excludes it.
- __init__()#
- add_filter(package_filter)#
Add a filter to the list.
- Parameters:
package_filter (PackageFilter) – Filter to add.
- add_inclusion(rule)#
See also:
PackageFilterBase.add_inclusion()
Note
Adding an inclusion to a filter list applies that inclusion across all filters.
- copy()#
Return a copy of the filter list.
Adding rules to the copy will not alter the source.
- classmethod from_pod(data)#
Convert from POD types to equivalent package filter.
- Return type:
- to_pod()#
Convert to POD type, suitable for storing in an rxt file.
- singleton = PackageFilterList(())#
- iter_packages(name, range_=None, paths=None)#
Same as
iter_packages()
, but also applies this filter.- Parameters:
name (str) – Name of the package, eg ‘maya’.
range (VersionRange or str) – If provided, limits the versions returned to those in
range_
.paths (Optional[list[str]]) – paths to search for packages, defaults to
packages_path
.
- Returns:
iterator
- Return type:
- rez.package_filter.no_filter = PackageFilterList(())#
filter that does not exclude any packages
- class rez.package_filter.Rule#
Bases:
object
Base package filter rule
- name = None#
Rule name
- match(package)#
Apply the rule to the package.
- family()#
Returns a package family string if this rule only applies to a given package family, otherwise None.
- Return type:
str | None
- cost()#
Relative cost of filter. Cheaper filters are applied first.
- classmethod parse_rule(txt)#
Parse a rule from a string.
See
package_filter
for an overview of valid strings.
- family_re = re.compile('[^*?]+[-@#]')#
- label_re = re.compile('^([^(]+)\\(([^\\(\\)]+)\\)$')#
- class rez.package_filter.RegexRuleBase#
Bases:
Rule
- match(package)#
Apply the rule to the package.
- cost()#
Relative cost of filter. Cheaper filters are applied first.
- family()#
Returns a package family string if this rule only applies to a given package family, otherwise None.
- Return type:
str | None
- family_re = re.compile('[^*?]+[-@#]')#
- label_re = re.compile('^([^(]+)\\(([^\\(\\)]+)\\)$')#
- name = None#
Rule name
- classmethod parse_rule(txt)#
Parse a rule from a string.
See
package_filter
for an overview of valid strings.
- class rez.package_filter.RegexRule#
Bases:
RegexRuleBase
A rule that matches a package if its qualified name matches a regex string.
For example, the package
foo-1.beta
would match the regex rule.*\.beta$
.- name = 'regex'#
Rule name
- cost()#
Relative cost of filter. Cheaper filters are applied first.
- family()#
Returns a package family string if this rule only applies to a given package family, otherwise None.
- Return type:
str | None
- family_re = re.compile('[^*?]+[-@#]')#
- label_re = re.compile('^([^(]+)\\(([^\\(\\)]+)\\)$')#
- match(package)#
Apply the rule to the package.
- classmethod parse_rule(txt)#
Parse a rule from a string.
See
package_filter
for an overview of valid strings.
- class rez.package_filter.GlobRule#
Bases:
RegexRuleBase
A rule that matches a package if its qualified name matches a glob string.
For example, the package
foo-1.2
would match the glob rulefoo-*
.- name = 'glob'#
Rule name
- cost()#
Relative cost of filter. Cheaper filters are applied first.
- family()#
Returns a package family string if this rule only applies to a given package family, otherwise None.
- Return type:
str | None
- family_re = re.compile('[^*?]+[-@#]')#
- label_re = re.compile('^([^(]+)\\(([^\\(\\)]+)\\)$')#
- match(package)#
Apply the rule to the package.
- classmethod parse_rule(txt)#
Parse a rule from a string.
See
package_filter
for an overview of valid strings.
- class rez.package_filter.RangeRule#
Bases:
Rule
A rule that matches a package if that package does not conflict with a given requirement.
For example, the package
foo-1.2
would match the requirement rulefoo<10
.- name = 'range'#
Rule name
- __init__(requirement)#
- match(package)#
Apply the rule to the package.
- cost()#
Relative cost of filter. Cheaper filters are applied first.
- family()#
Returns a package family string if this rule only applies to a given package family, otherwise None.
- Return type:
str | None
- family_re = re.compile('[^*?]+[-@#]')#
- label_re = re.compile('^([^(]+)\\(([^\\(\\)]+)\\)$')#
- classmethod parse_rule(txt)#
Parse a rule from a string.
See
package_filter
for an overview of valid strings.
- class rez.package_filter.TimestampRule#
Bases:
Rule
A rule that matches a package if that package was released before the given timestamp.
Note
The
timestamp
argument used for resolves is ANDed with any package filters. Providing a filter containing timestamp rules does not override the value oftimestamp
.Warning
Do NOT use a timestamp rule to mimic what the
timestamp
resolve argument does.timestamp
is treated differently - the memcache caching system is aware of it, so timestamped resolves get cached. Non-timestamped resolves also get cached, but their cache entries are invalidated more often (when new packages are released).There is still a legitimate case to use a global timestamp rule though. You might want to ignore all packages released after time X, except for some specific packages that you want to let through. To do this you would create a package filter containing a timestamp rule with family=None, and other family-specific timestamp rules to override that.
- name = 'timestamp'#
Rule name
- __init__(timestamp, family=None, reverse=False, match_untimestamped=False)#
Create a timestamp rule.
- match(package)#
Apply the rule to the package.
- cost()#
Relative cost of filter. Cheaper filters are applied first.
- classmethod after(timestamp, family=None)#
- classmethod before(timestamp, family=None)#
- family()#
Returns a package family string if this rule only applies to a given package family, otherwise None.
- Return type:
str | None
- family_re = re.compile('[^*?]+[-@#]')#
- label_re = re.compile('^([^(]+)\\(([^\\(\\)]+)\\)$')#
- classmethod parse_rule(txt)#
Parse a rule from a string.
See
package_filter
for an overview of valid strings.