in src/BuildScriptGenerator/Python/PythonPlatform.cs [140:271]
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()}'.");
}
_logger.LogInformation($"context buildcommandsfilename: {context.BuildCommandsFileName}");
_logger.LogInformation($"common option buildcommandsfilename: {_commonOptions.BuildCommandsFileName}");
if (IsCondaEnvironment(pythonPlatformDetectorResult))
{
_logger.LogInformation($" *** conda context buildcommandsfilename: {context.BuildCommandsFileName}");
_logger.LogInformation($" *** conda common option buildcommandsfilename: {_commonOptions.BuildCommandsFileName}");
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);
var pythonBuildCommandsFile = string.IsNullOrEmpty(_commonOptions.BuildCommandsFileName) ?
FilePaths.BuildCommandsFileName : _commonOptions.BuildCommandsFileName;
pythonBuildCommandsFile = string.IsNullOrEmpty(_commonOptions.ManifestDir) ?
Path.Combine(context.SourceRepo.RootPath, pythonBuildCommandsFile) :
Path.Combine(_commonOptions.ManifestDir, pythonBuildCommandsFile);
manifestFileProperties[nameof(pythonBuildCommandsFile)] = pythonBuildCommandsFile;
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,
pythonBuildCommandsFileName: pythonBuildCommandsFile,
pythonVersion: pythonVersion,
pythonPackageWheelProperty: pythonPackageWheelType);
string script = TemplateHelper.Render(
TemplateHelper.TemplateResource.PythonSnippet,
scriptProps,
_logger);
return new BuildScriptSnippet()
{
BashBuildScriptSnippet = script,
BuildProperties = manifestFileProperties,
};
}