def _get_info_file_packages(open_ce_info): """ Get a list of all of the license information from a package's open-ce-info file. """ if not os.path.exists(open_ce_info): return [] with open(open_ce_info) as file_stream: license_data = open_ce.yaml_utils.load(file_stream) utils.validate_dict_schema(license_data, _OPEN_CE_INFO_SCHEMA) third_party_info = [] for package in license_data.get(Key.third_party_packages.name, []): info = LicenseGenerator.LicenseInfo( package[Key.name.name], package[Key.version.name], [package[Key.license_url.name]] if Key.license_url.name in package else package[Key.url.name], package.get(Key.license.name), [package[Key.copyright_string.name]] if Key.copyright_string.name in package else None, package.get(Key.license_files.name)) third_party_info.append(info) return third_party_info
def render_yaml(path, variants=None, variant_config_files=None, schema=None, permit_undefined_jinja=False): """ Call conda-build's render tool to get a list of dictionaries of the rendered YAML file for each variant that will be built. """ config = get_or_merge_config(None, variant=variants) config.variant_config_files = variant_config_files config.verbose = False if not os.path.isfile(path): metas = conda_build.api.render(path, config=config, bypass_env_check=True, finalize=False) else: # api.render will only work if path is pointing to a meta.yaml file. # For other files, use the MetaData class directly. # The absolute path is needed because MetaData seems to do some caching based on file name. metas = conda_build.metadata.MetaData( os.path.abspath(path), config=config).get_rendered_recipe_text( permit_undefined_jinja=permit_undefined_jinja) if schema: validate_dict_schema(metas, schema) return metas
def add_licenses_from_info_file(self, license_file): """ Add all of the licensing information from an info file. """ if not os.path.exists(license_file): return with open(license_file) as file_stream: license_data = yaml.safe_load(file_stream) utils.validate_dict_schema(license_data, _OPEN_CE_INFO_SCHEMA) for package in license_data.get(Key.third_party_packages.name, []): source_folder = os.path.join(utils.TMP_LICENSE_DIR, package[Key.name.name] + "-" + str(package[Key.version.name])) if not os.path.exists(source_folder): os.makedirs(source_folder) urls = [package[Key.license_url.name]] if Key.license_url.name in package else package[Key.url.name] # Download the source from each URL for url in urls: if url.endswith(".git"): try: utils.git_clone(url, package[Key.version.name], source_folder) except OpenCEError: print("Unable to clone source for " + package[Key.name.name]) else: try: res = requests.get(url) local_path = os.path.join(source_folder, os.path.basename(url)) with open(local_path, 'wb') as file_stream: file_stream.write(res.content) _extract(local_path, source_folder) #pylint: disable=broad-except except Exception: print("Unable to download source for " + package[Key.name.name]) # Find every license file within the downloaded source license_files = _find_license_files(source_folder) # Get copyright information from the downloaded source (unless the copyright string is provided) if Key.copyright_string.name in package: copyright_string = [package[Key.copyright_string.name]] else: copyright_string = _get_copyrights_from_files(license_files) info = LicenseGenerator.LicenseInfo(package[Key.name.name], package[Key.version.name], package[Key.url.name], package[Key.license.name], copyright_string) self._licenses.add(info)