renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
78 lines • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parsePyProject = parsePyProject;
exports.extractPackageFile = extractPackageFile;
const tslib_1 = require("tslib");
const logger_1 = require("../../../logger");
const toml_1 = require("../../../util/toml");
const python_version_1 = require("../../datasource/python-version");
const pep440 = tslib_1.__importStar(require("../../versioning/pep440"));
const processors_1 = require("./processors");
const schema_1 = require("./schema");
function parsePyProject(content, packageFile) {
try {
const jsonMap = (0, toml_1.parse)((0, toml_1.massage)(content));
return schema_1.PyProject.parse(jsonMap);
}
catch (err) {
logger_1.logger.debug({ packageFile, err }, `Failed to parse and validate pyproject file`);
return null;
}
}
async function extractPackageFile(content, packageFile, _config) {
logger_1.logger.trace(`pep621.extractPackageFile(${packageFile})`);
const def = parsePyProject(content, packageFile);
if (!def) {
return null;
}
const deps = [];
const pythonConstraint = def.project?.['requires-python'];
const extractedConstraints = {};
if (pythonConstraint) {
extractedConstraints.python = pythonConstraint;
deps.push({
packageName: 'python',
depType: 'requires-python',
currentValue: pythonConstraint,
commitMessageTopic: 'Python',
datasource: python_version_1.PythonVersionDatasource.id,
versioning: pep440.id,
});
}
const projectDependencies = def.project?.dependencies;
if (projectDependencies) {
deps.push(...projectDependencies);
}
const dependencyGroups = def['dependency-groups'];
if (dependencyGroups) {
deps.push(...dependencyGroups);
}
const projectOptionalDependencies = def.project?.['optional-dependencies'];
if (projectOptionalDependencies) {
deps.push(...projectOptionalDependencies);
}
const buildSystemRequires = def['build-system']?.requires;
if (buildSystemRequires) {
deps.push(...buildSystemRequires);
}
// process specific tool sets
let processedDeps = deps;
let lockFiles = [];
for (const processor of processors_1.processors) {
processedDeps = processor.process(def, processedDeps);
processedDeps = await processor.extractLockedVersions(def, processedDeps, packageFile);
if (processor.getLockfiles) {
lockFiles = await processor.getLockfiles(def, lockFiles, packageFile);
}
}
const packageFileVersion = def.project?.version;
return processedDeps.length || lockFiles.length
? {
extractedConstraints,
deps: processedDeps,
packageFileVersion,
lockFiles,
}
: null;
}
//# sourceMappingURL=extract.js.map