Add [PythonVersionFromToml] shield (#9516)
* Add PythonVersionFromToml Added new shield per issue #9410 The shield display required python versions for packages based on pyproject.toml * Add tests for PythonVersionFromToml * Improve docs for tests regex * Improve title and description Rename and updated description to bring into focus that only PEP 621 complaint pyproject.toml files are supported. Solves review https://github.com/badges/shields/pull/9516#discussion_r1310648023 * replace complex regex with @renovate/pep440 solves review https://github.com/badges/shields/pull/9516#discussion_r1310648881
This commit is contained in:
65
services/python/python-version-from-toml.service.js
Normal file
65
services/python/python-version-from-toml.service.js
Normal file
@@ -0,0 +1,65 @@
|
||||
import Joi from 'joi'
|
||||
import BaseTomlService from '../../core/base-service/base-toml.js'
|
||||
import { optionalUrl } from '../validators.js'
|
||||
|
||||
const queryParamSchema = Joi.object({
|
||||
tomlFilePath: optionalUrl.required(),
|
||||
}).required()
|
||||
|
||||
const schema = Joi.object({
|
||||
project: Joi.object({
|
||||
'requires-python': Joi.string().required(),
|
||||
}).required(),
|
||||
}).required()
|
||||
|
||||
const documentation = `Shows the required python version for a package based on the values in the requires-python field in PEP 621 compliant pyproject.toml \n
|
||||
a URL of the toml is required, please note that when linking to files in github or similar sites, provide URL to raw file, for example:
|
||||
|
||||
Use https://raw.githubusercontent.com/numpy/numpy/main/pyproject.toml \n
|
||||
And not https://github.com/numpy/numpy/blob/main/pyproject.toml
|
||||
`
|
||||
|
||||
class PythonVersionFromToml extends BaseTomlService {
|
||||
static category = 'platform-support'
|
||||
|
||||
static route = {
|
||||
base: '',
|
||||
pattern: 'python/required-version-toml',
|
||||
queryParamSchema,
|
||||
}
|
||||
|
||||
static examples = [
|
||||
{
|
||||
title: 'Python Version from PEP 621 TOML',
|
||||
namedParams: {},
|
||||
queryParams: {
|
||||
tomlFilePath:
|
||||
'https://raw.githubusercontent.com/numpy/numpy/main/pyproject.toml',
|
||||
},
|
||||
staticPreview: this.render({ requiresPythonString: '>=3.9' }),
|
||||
documentation,
|
||||
},
|
||||
]
|
||||
|
||||
static defaultBadgeData = { label: 'python' }
|
||||
|
||||
static render({ requiresPythonString }) {
|
||||
// we only show requries-python as is
|
||||
// for more info read the following issues:
|
||||
// https://github.com/badges/shields/issues/9410
|
||||
// https://github.com/badges/shields/issues/5551
|
||||
return {
|
||||
message: requiresPythonString,
|
||||
color: 'blue',
|
||||
}
|
||||
}
|
||||
|
||||
async handle(namedParams, { tomlFilePath }) {
|
||||
const tomlData = await this._requestToml({ url: tomlFilePath, schema })
|
||||
const requiresPythonString = tomlData.project['requires-python']
|
||||
|
||||
return this.constructor.render({ requiresPythonString })
|
||||
}
|
||||
}
|
||||
|
||||
export { PythonVersionFromToml }
|
||||
Reference in New Issue
Block a user