/// <inheritdoc/> public BuildScriptSnippet GenerateBashBuildScriptSnippet( BuildScriptGeneratorContext context, PlatformDetectorResult detectorResult) { var pythonPlatformDetectorResult = detectorResult as PythonPlatformDetectorResult; if (pythonPlatformDetectorResult == null) { throw new ArgumentException( $"Expected '{nameof(detectorResult)}' argument to be of type " + $"'{typeof(PythonPlatformDetectorResult)}' but got '{detectorResult.GetType()}'."); } if (IsCondaEnvironment(pythonPlatformDetectorResult)) { return(GetBuildScriptSnippetForConda(context, pythonPlatformDetectorResult)); } var manifestFileProperties = new Dictionary <string, string>(); // Write the platform name and version to the manifest file manifestFileProperties[ManifestFilePropertyKeys.PythonVersion] = pythonPlatformDetectorResult.PlatformVersion; var packageDir = GetPackageDirectory(context); var virtualEnvName = GetVirtualEnvironmentName(context); var isPythonPackageCommandEnabled = _commonOptions.ShouldPackage; var pythonPackageWheelType = GetPythonPackageWheelType(context); if (!isPythonPackageCommandEnabled && !string.IsNullOrWhiteSpace(pythonPackageWheelType)) { throw new InvalidUsageException($"Option '{PythonPackageWheelPropertyKey}' can't exist" + $"without package command being enabled. Please provide --package along with wheel type"); } if (isPythonPackageCommandEnabled && !string.IsNullOrWhiteSpace(pythonPackageWheelType)) { if (!string.Equals(pythonPackageWheelType.ToLower(), "universal")) { throw new InvalidUsageException($"Option '{PythonPackageWheelPropertyKey}' can only have 'universal' as value.'"); } manifestFileProperties[PythonManifestFilePropertyKeys.PackageWheel] = pythonPackageWheelType; } if (!string.IsNullOrWhiteSpace(packageDir) && !string.IsNullOrWhiteSpace(virtualEnvName)) { throw new InvalidUsageException($"Options '{TargetPackageDirectoryPropertyKey}' and " + $"'{VirtualEnvironmentNamePropertyKey}' are mutually exclusive. Please provide " + $"only the target package directory or virtual environment name."); } if (string.IsNullOrWhiteSpace(packageDir)) { // If the package directory was not provided, we default to virtual envs if (string.IsNullOrWhiteSpace(virtualEnvName)) { virtualEnvName = GetDefaultVirtualEnvName(pythonPlatformDetectorResult); } manifestFileProperties[PythonManifestFilePropertyKeys.VirtualEnvName] = virtualEnvName; } else { manifestFileProperties[PythonManifestFilePropertyKeys.PackageDir] = packageDir; } var virtualEnvModule = string.Empty; var virtualEnvParams = string.Empty; var pythonVersion = pythonPlatformDetectorResult.PlatformVersion; _logger.LogDebug("Selected Python version: {pyVer}", pythonVersion); if (!string.IsNullOrEmpty(pythonVersion) && !string.IsNullOrWhiteSpace(virtualEnvName)) { (virtualEnvModule, virtualEnvParams) = GetVirtualEnvModules(pythonVersion); _logger.LogDebug( "Using virtual environment {venv}, module {venvModule}", virtualEnvName, virtualEnvModule); } GetVirtualEnvPackOptions( context, virtualEnvName, out var compressVirtualEnvCommand, out var compressedVirtualEnvFileName); if (!string.IsNullOrWhiteSpace(compressedVirtualEnvFileName)) { manifestFileProperties[PythonManifestFilePropertyKeys.CompressedVirtualEnvFile] = compressedVirtualEnvFileName; } TryLogDependencies(pythonVersion, context.SourceRepo); var scriptProps = new PythonBashBuildSnippetProperties( virtualEnvironmentName: virtualEnvName, virtualEnvironmentModule: virtualEnvModule, virtualEnvironmentParameters: virtualEnvParams, packagesDirectory: packageDir, enableCollectStatic: _pythonScriptGeneratorOptions.EnableCollectStatic, compressVirtualEnvCommand: compressVirtualEnvCommand, compressedVirtualEnvFileName: compressedVirtualEnvFileName, runPythonPackageCommand: isPythonPackageCommandEnabled, pythonPackageWheelProperty: pythonPackageWheelType); string script = TemplateHelper.Render( TemplateHelper.TemplateResource.PythonSnippet, scriptProps, _logger); return(new BuildScriptSnippet() { BashBuildScriptSnippet = script, BuildProperties = manifestFileProperties, }); }
/// <inheritdoc/> public BuildScriptSnippet GenerateBashBuildScriptSnippet( BuildScriptGeneratorContext context, PlatformDetectorResult detectorResult) { var manifestFileProperties = new Dictionary <string, string>(); // Write the platform name and version to the manifest file manifestFileProperties[ManifestFilePropertyKeys.PythonVersion] = detectorResult.PlatformVersion; var packageDir = GetPackageDirectory(context); var virtualEnvName = GetVirtualEnvironmentName(context); if (!string.IsNullOrWhiteSpace(packageDir) && !string.IsNullOrWhiteSpace(virtualEnvName)) { throw new InvalidUsageException($"Options '{TargetPackageDirectoryPropertyKey}' and " + $"'{VirtualEnvironmentNamePropertyKey}' are mutually exclusive. Please provide " + $"only the target package directory or virtual environment name."); } if (string.IsNullOrWhiteSpace(packageDir)) { // If the package directory was not provided, we default to virtual envs if (string.IsNullOrWhiteSpace(virtualEnvName)) { virtualEnvName = GetDefaultVirtualEnvName(detectorResult); } manifestFileProperties[PythonManifestFilePropertyKeys.VirtualEnvName] = virtualEnvName; } else { manifestFileProperties[PythonManifestFilePropertyKeys.PackageDir] = packageDir; } var virtualEnvModule = string.Empty; var virtualEnvCopyParam = string.Empty; var pythonVersion = detectorResult.PlatformVersion; _logger.LogDebug("Selected Python version: {pyVer}", pythonVersion); if (!string.IsNullOrEmpty(pythonVersion) && !string.IsNullOrWhiteSpace(virtualEnvName)) { (virtualEnvModule, virtualEnvCopyParam) = GetVirtualEnvModules(pythonVersion); _logger.LogDebug( "Using virtual environment {venv}, module {venvModule}", virtualEnvName, virtualEnvModule); } GetVirtualEnvPackOptions( context, virtualEnvName, out var compressVirtualEnvCommand, out var compressedVirtualEnvFileName); if (!string.IsNullOrWhiteSpace(compressedVirtualEnvFileName)) { manifestFileProperties[PythonManifestFilePropertyKeys.CompressedVirtualEnvFile] = compressedVirtualEnvFileName; } TryLogDependencies(pythonVersion, context.SourceRepo); var scriptProps = new PythonBashBuildSnippetProperties( virtualEnvironmentName: virtualEnvName, virtualEnvironmentModule: virtualEnvModule, virtualEnvironmentParameters: virtualEnvCopyParam, packagesDirectory: packageDir, enableCollectStatic: _pythonScriptGeneratorOptions.EnableCollectStatic, compressVirtualEnvCommand: compressVirtualEnvCommand, compressedVirtualEnvFileName: compressedVirtualEnvFileName); string script = TemplateHelper.Render( TemplateHelper.TemplateResource.PythonSnippet, scriptProps, _logger); return(new BuildScriptSnippet() { BashBuildScriptSnippet = script, BuildProperties = manifestFileProperties, }); }
public BuildScriptSnippet GenerateBashBuildScriptSnippet(BuildScriptGeneratorContext context) { var virtualEnvName = GetVirutalEnvironmentName(context); string packageDir = null; if (context.Properties == null || !context.Properties.TryGetValue(TargetPackageDirectoryPropertyKey, out packageDir)) { packageDir = DefaultTargetPackageDirectory; } var virtualEnvModule = string.Empty; var virtualEnvCopyParam = string.Empty; var pythonVersion = context.PythonVersion; _logger.LogDebug("Selected Python version: {pyVer}", pythonVersion); if (!string.IsNullOrEmpty(pythonVersion) && !string.IsNullOrWhiteSpace(virtualEnvName)) { switch (pythonVersion.Split('.')[0]) { case "2": virtualEnvModule = "virtualenv"; break; case "3": virtualEnvModule = "venv"; virtualEnvCopyParam = "--copies"; break; default: string errorMessage = "Python version '" + pythonVersion + "' is not supported"; _logger.LogError(errorMessage); throw new NotSupportedException(errorMessage); } _logger.LogDebug( "Using virtual environment {venv}, module {venvModule}", virtualEnvName, virtualEnvModule); } // Collect static is enabled by default, but users can opt-out of it var disableCollectStatic = false; var disableCollectStaticEnvValue = _environment.GetEnvironmentVariable( EnvironmentSettingsKeys.DisableCollectStatic); if (string.Equals(disableCollectStaticEnvValue, "true", StringComparison.OrdinalIgnoreCase)) { disableCollectStatic = true; } TryLogDependencies(pythonVersion, context.SourceRepo); var scriptProps = new PythonBashBuildSnippetProperties( virtualEnvironmentName: virtualEnvName, virtualEnvironmentModule: virtualEnvModule, virtualEnvironmentParameters: virtualEnvCopyParam, packagesDirectory: packageDir, disableCollectStatic: disableCollectStatic, zipVirtualEnvDir: ShouldZipVenvDir(context)); string script = TemplateHelpers.Render( TemplateHelpers.TemplateResource.PythonSnippet, scriptProps, _logger); return(new BuildScriptSnippet() { BashBuildScriptSnippet = script, }); }
public BuildScriptSnippet GenerateBashBuildScriptSnippet(BuildScriptGeneratorContext context) { var buildProperties = new Dictionary <string, string>(); var packageDir = GetPackageDirectory(context); var virtualEnvName = GetVirtualEnvironmentName(context); if (string.IsNullOrEmpty(packageDir)) { // If the package directory was not provided, we default to virtual envs if (string.IsNullOrWhiteSpace(virtualEnvName)) { virtualEnvName = GetDefaultVirtualEnvName(context); } buildProperties[PythonConstants.VirtualEnvNameBuildProperty] = virtualEnvName; } else if (!string.IsNullOrWhiteSpace(virtualEnvName)) { throw new InvalidUsageException($"Options '{TargetPackageDirectoryPropertyKey}' and " + $"'{VirtualEnvironmentNamePropertyKey}' are mutually exclusive. Please provide " + $"only the target package directory or virtual environment name."); } var virtualEnvModule = string.Empty; var virtualEnvCopyParam = string.Empty; var pythonVersion = context.PythonVersion; _logger.LogDebug("Selected Python version: {pyVer}", pythonVersion); if (!string.IsNullOrEmpty(pythonVersion) && !string.IsNullOrWhiteSpace(virtualEnvName)) { (virtualEnvModule, virtualEnvCopyParam) = GetVirtualEnvModules(pythonVersion); _logger.LogDebug( "Using virtual environment {venv}, module {venvModule}", virtualEnvName, virtualEnvModule); } bool enableCollectStatic = IsCollectStaticEnabled(); string compressVirtualEnvCommand = null; string compressedVirtualEnvFileName = null; GetVirtualEnvPackOptions( context, virtualEnvName, out compressVirtualEnvCommand, out compressedVirtualEnvFileName); if (!string.IsNullOrWhiteSpace(compressedVirtualEnvFileName)) { buildProperties[PythonConstants.CompressedVirtualEnvFileBuildProperty] = compressedVirtualEnvFileName; } TryLogDependencies(pythonVersion, context.SourceRepo); var scriptProps = new PythonBashBuildSnippetProperties( virtualEnvironmentName: virtualEnvName, virtualEnvironmentModule: virtualEnvModule, virtualEnvironmentParameters: virtualEnvCopyParam, packagesDirectory: packageDir, disableCollectStatic: !enableCollectStatic, compressVirtualEnvCommand: compressVirtualEnvCommand, compressedVirtualEnvFileName: compressedVirtualEnvFileName); string script = TemplateHelpers.Render( TemplateHelpers.TemplateResource.PythonSnippet, scriptProps, _logger); return(new BuildScriptSnippet() { BashBuildScriptSnippet = script, BuildProperties = buildProperties }); }