Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
from rez.release_hook import ReleaseHook
from rez.exceptions import ReleaseHookCancellingError
from rez.config import config
from rez.system import system
from rez.utils.logging_ import print_debug
from rez.utils.scope import scoped_formatter
from rez.utils.formatting import expandvars
from rez.vendor.schema.schema import Schema, Or, Optional, Use, And
from rez.util import which
class CommandReleaseHook(ReleaseHook):
commands_schema = Schema(
{"command": basestring,
Optional("args"): Or(And(basestring,
Use(lambda x: x.strip().split())),
[basestring]),
Optional("pretty_args"): bool,
Optional("user"): basestring,
Optional("env"): dict})
schema_dict = {
"print_commands": bool,
"print_output": bool,
"print_error": bool,
"cancel_on_error": bool,
"stop_on_error": bool,
"pre_build_commands": [commands_schema],
"pre_release_commands": [commands_schema],
"post_release_commands": [commands_schema]}
# -----------------------------------------------------------------------------
# Schema Implementations
# -----------------------------------------------------------------------------
class Setting(object):
schema = Schema(object)
class Str(Setting):
schema = Schema(basestring)
class OptionalStr(Setting):
schema = Or(None, basestring)
class StrList(Setting):
schema = Schema([basestring])
class PathList(StrList):
pass
class Int(Setting):
schema = Schema(int)
class Bool(Setting):
schema = Schema(bool)
# this schema will automatically harden request strings like 'python-*'; see
# the 'expand_requires' function for more info.
#
package_request_schema = Or(And(basestring, Use(expand_requirement)),
And(PackageRequest, Use(str)))
tests_schema = Schema({
Optional(basestring): Or(
Or(basestring, [basestring]),
extensible_schema_dict({
"command": Or(basestring, [basestring]),
Optional("requires"): [package_request_schema],
Optional("run_on"): Or(basestring, [basestring]),
Optional("on_variants"): Or(
bool,
{
"type": "requires",
"value": [package_request_schema]
}
)
})
)
})
package_schema = Schema({
Optional("requires_rez_version"): And(basestring, Use(Version)),
Required("name"): basestring,
Optional("base"): basestring,
from contextlib import contextmanager
import os
basestring = six.string_types[0]
# this schema will automatically harden request strings like 'python-*'; see
# the 'expand_requires' function for more info.
#
package_request_schema = Or(And(basestring, Use(expand_requirement)),
And(PackageRequest, Use(str)))
tests_schema = Schema({
Optional(basestring): Or(
Or(basestring, [basestring]),
extensible_schema_dict({
"command": Or(basestring, [basestring]),
Optional("requires"): [package_request_schema],
Optional("run_on"): Or(basestring, [basestring]),
Optional("on_variants"): Or(
bool,
{
"type": "requires",
"value": [package_request_schema]
}
)
})
)
})
# package attributes that are rex-based functions
package_rex_keys = (
"pre_commands",
"commands",
"post_commands",
"pre_build_commands",
"pre_test_commands",
)
# ------------------------------------------------------------------------------
# utility schemas
# ------------------------------------------------------------------------------
help_schema = Or(basestring, # single help entry
[[basestring]]) # multiple help entries
_is_late = And(SourceCode, lambda x: hasattr(x, "_late"))
def late_bound(schema):
return Or(SourceCode, schema)
# used when 'requires' is late bound
late_requires_schema = Schema([
Or(PackageRequest, And(basestring, Use(PackageRequest)))
])
# ------------------------------------------------------------------------------
# schema dicts
# ------------------------------------------------------------------------------
run, these aliases resolve the configured environment, then run the command
within that environment.
See Soma documentation for a detailed overview of override features (not all
are shown in this comment).
"""
profile_schema = Schema({
Optional("new"): Or([basestring], None),
Optional("requires"): [basestring],
Optional("tools"): [Or(basestring,
And(Schema({basestring: basestring}),
lambda x: len(x) == 1)
)]
})
lock_schema = Schema({"locked": Or(None, int)})
def __init__(self, name, parent, overrides, lock_overrides=None):
"""Do not create directly, """
self.name = name
self.parent = parent
# profile overrides
self._levels = []
self._overrides = []
for level, data in overrides:
self._levels.append(level)
try:
data_ = self.profile_schema.validate(data)
self._overrides.append((level, data_))
except SchemaError as e:
raise SomaDataError("Invalid data in %r: %s"
'changelog',
'vcs',
'revision',
'previous_version',
'previous_revision']
version_schema = Or(basestring, And(Version, Use(str)))
package_request_schema = Or(basestring, And(PackageRequest, Use(str)))
source_code_schema = Or(SourceCode, And(basestring, Use(SourceCode)))
tests_schema = Schema({
Optional(basestring): Or(
Or(basestring, [basestring]),
extensible_schema_dict({
"command": Or(basestring, [basestring]),
Optional("requires"): [package_request_schema],
Optional("run_on"): Or(basestring, [basestring]),
Optional("on_variants"): Or(
bool,
{
"type": "requires",
"value": [package_request_schema]
}
)
})
)
})
# ------------------------------------------------------------------------------
package_family_schema = Schema(package_family_schema_dict)
package_schema = Schema(package_schema_dict)
variant_schema = Schema(variant_schema_dict)
# ------------------------------------------------------------------------------
# schemas for converting from POD datatypes
# ------------------------------------------------------------------------------
_commands_schema = Or(SourceCode, # commands as converted function
callable, # commands as function
basestring, # commands in text block
[basestring]) # old-style (rez-1) commands
_function_schema = Or(SourceCode, callable)
_package_request_schema = And(basestring, Use(PackageRequest))
package_pod_schema_dict = base_resource_schema_dict.copy()
large_string_dict = And(basestring, Use(lambda x: dedent(x).strip()))
package_pod_schema_dict.update({
Optional("base"): basestring,
Optional("version"): And(basestring, Use(Version)),
package_schema = Schema(package_schema_dict)
variant_schema = Schema(variant_schema_dict)
# ------------------------------------------------------------------------------
# schemas for converting from POD datatypes
# ------------------------------------------------------------------------------
_commands_schema = Or(SourceCode, # commands as converted function
callable, # commands as function
basestring, # commands in text block
[basestring]) # old-style (rez-1) commands
_function_schema = Or(SourceCode, callable)
_package_request_schema = And(basestring, Use(PackageRequest))
package_pod_schema_dict = base_resource_schema_dict.copy()
large_string_dict = And(basestring, Use(lambda x: dedent(x).strip()))
package_pod_schema_dict.update({
Optional("base"): basestring,
Optional("version"): And(basestring, Use(Version)),
Optional('description'): large_string_dict,
Optional('authors'): [basestring],
Optional('requires'): late_bound([_package_request_schema]),
Optional('build_requires'): late_bound([_package_request_schema]),
package_family_schema_dict = base_resource_schema_dict.copy()
# schema common to both package and variant
#
tests_schema = Schema({
Optional(basestring): Or(
Or(basestring, [basestring]),
extensible_schema_dict({
"command": Or(basestring, [basestring]),
Optional("requires"): [
Or(PackageRequest, And(basestring, Use(PackageRequest)))
],
Optional("run_on"): Or(basestring, [basestring]),
Optional("on_variants"): Or(
bool,
{
"type": "requires",
"value": [
Or(PackageRequest, And(basestring, Use(PackageRequest)))
]
}
)
})
)
})
package_base_schema_dict = base_resource_schema_dict.copy()
package_base_schema_dict.update({
# basics