def create_executable_script(filepath, body, program=None): """Create an executable script. Args: filepath (str): File to create. body (str or callable): Contents of the script. If a callable, its code is used as the script body. program (str): Name of program to launch the script, 'python' if None """ program = program or "python" if callable(body): from rez.utils.data_utils import SourceCode code = SourceCode.from_function(body) body = code.source if not body.endswith('\n'): body += '\n' with open(filepath, 'w') as f: # TODO: make cross platform f.write("#!/usr/bin/env %s\n" % program) f.write(body) # TODO: Although Windows supports os.chmod you can only set the readonly # flag. Setting the file readonly breaks the unit tests that expect to # clean up the files once the test has run. Temporarily we don't bother # setting the permissions, but this will need to change. if os.name == "posix": os.chmod(filepath, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
def _commented_old_command_annotations(sourcecode): lines = sourcecode.source.split('\n') for i, line in enumerate(lines): if line.startswith("comment('OLD COMMAND:"): lines[i] = "# " + line source = '\n'.join(lines) return SourceCode(source)
def _process_objects(data): for k, v in data.iteritems(): if isfunction(v): data[k] = SourceCode.from_function(v) elif isinstance(v, dict): _process_objects(v) return data
def create_executable_script(filepath, body, program=None): """Create an executable script. Args: filepath (str): File to create. body (str or callable): Contents of the script. If a callable, its code is used as the script body. program (str): Name of program to launch the script, 'python' if None """ program = program or "python" if callable(body): from rez.utils.data_utils import SourceCode code = SourceCode.from_function(body) body = code.source if not body.endswith('\n'): body += '\n' with open(filepath, 'w') as f: # TODO: make cross platform f.write("#!/usr/bin/env %s\n" % program) f.write(body) # TODO: Although Windows supports os.chmod you can only set the readonly # flag. Setting the file readonly breaks the unit tests that expect to # clean up the files once the test has run. Temporarily we don't bother # setting the permissions, but this will need to change. if os.name == "posix": os.chmod( filepath, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
def _convert_to_rex(self, commands): if isinstance(commands, list): from rez.utils.backcompat import convert_old_commands msg = "package %r is using old-style commands." % self.uri if config.disable_rez_1_compatibility or config.error_old_commands: raise SchemaError(None, msg) elif config.warn("old_commands"): print_warning(msg) commands = convert_old_commands(commands) if isinstance(commands, basestring): return SourceCode(commands) elif callable(commands): return SourceCode.from_function(commands) else: return commands
def test_3(self): """check package contents.""" # a py-based package package = get_package("versioned", "3.0") expected_data = dict( name="versioned", version=Version("3.0"), base=os.path.join(self.py_packages_path, "versioned", "3.0"), commands=SourceCode('env.PATH.append("{root}/bin")')) data = package.validated_data() self.assertDictEqual(data, expected_data) # a yaml-based package package = get_package("versioned", "2.0") expected_uri = os.path.join(self.yaml_packages_path, "versioned", "2.0", "package.yaml") self.assertEqual(package.uri, expected_uri) # a 'combined' type package package = get_package("multi", "1.0") expected_uri = os.path.join(self.yaml_packages_path, "multi.yaml<1.0>") self.assertEqual(package.uri, expected_uri) expected_data = dict( name="multi", version=Version("1.0"), tools=["tweak"]) data = package.validated_data() self.assertDictEqual(data, expected_data) # a 'combined' type package, with version overrides package = get_package("multi", "1.1") expected_uri = os.path.join(self.yaml_packages_path, "multi.yaml<1.1>") self.assertEqual(package.uri, expected_uri) expected_data = dict( name="multi", version=Version("1.1"), tools=["twerk"]) data = package.validated_data() self.assertDictEqual(data, expected_data) # check that visibility of 'combined' packages is correct package = get_package("multi", "2.0") expected_uri = os.path.join(self.py_packages_path, "multi.py<2.0>") self.assertEqual(package.uri, expected_uri)
def test_6(self): """test variant iteration.""" expected_data_ = dict( name="variants_py", version=Version("2.0"), description="package with variants", base=os.path.join(self.py_packages_path, "variants_py", "2.0"), commands=SourceCode('env.PATH.append("{root}/bin")')) requires_ = ["platform-linux", "platform-osx"] package = get_package("variants_py", "2.0") for i, variant in enumerate(package.iter_variants()): expected_data = expected_data_.copy() expected_data["requires"] = [PackageRequest('python-2.7'), PackageRequest(requires_[i])] data = variant.validated_data() self.assertDictEqual(data, expected_data) self.assertEqual(variant.index, i) self.assertEqual(variant.parent, package)