add python package total downloads from [pepy] badge (#9564)
This commit is contained in:
53
services/pepy/pepy-downloads.service.js
Normal file
53
services/pepy/pepy-downloads.service.js
Normal file
@@ -0,0 +1,53 @@
|
||||
import Joi from 'joi'
|
||||
import { nonNegativeInteger } from '../validators.js'
|
||||
import { BaseJsonService, pathParams } from '../index.js'
|
||||
import { renderDownloadsBadge } from '../downloads.js'
|
||||
|
||||
const schema = Joi.object({
|
||||
total_downloads: nonNegativeInteger,
|
||||
}).required()
|
||||
|
||||
const description = `
|
||||
Python package total downloads from [Pepy](https://www.pepy.tech/).
|
||||
|
||||
Download stats from pepy count package downloads from PyPI and known mirrors.`
|
||||
|
||||
export default class PepyDownloads extends BaseJsonService {
|
||||
static category = 'downloads'
|
||||
|
||||
static route = {
|
||||
base: 'pepy',
|
||||
pattern: 'dt/:packageName',
|
||||
}
|
||||
|
||||
static openApi = {
|
||||
'/pepy/dt/{packageName}': {
|
||||
get: {
|
||||
summary: 'Pepy Total Downlods',
|
||||
description,
|
||||
parameters: pathParams({
|
||||
name: 'packageName',
|
||||
example: 'django',
|
||||
}),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
static _cacheLength = 21600
|
||||
|
||||
static defaultBadgeData = { label: 'downloads' }
|
||||
|
||||
async fetch({ packageName }) {
|
||||
return this._requestJson({
|
||||
url: `https://api.pepy.tech/api/v2/projects/${packageName}`,
|
||||
schema,
|
||||
})
|
||||
}
|
||||
|
||||
async handle({ packageName }) {
|
||||
const data = await this.fetch({ packageName })
|
||||
return renderDownloadsBadge({
|
||||
downloads: data.total_downloads,
|
||||
})
|
||||
}
|
||||
}
|
||||
11
services/pepy/pepy-downloads.tester.js
Normal file
11
services/pepy/pepy-downloads.tester.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import { createServiceTester } from '../tester.js'
|
||||
import { isMetric } from '../test-validators.js'
|
||||
export const t = await createServiceTester()
|
||||
|
||||
t.create('downloads (valid)')
|
||||
.get('/dt/django.json')
|
||||
.expectBadge({ label: 'downloads', message: isMetric })
|
||||
|
||||
t.create('downloads (not found)')
|
||||
.get('/dt/not-a-package.json')
|
||||
.expectBadge({ label: 'downloads', message: 'not found' })
|
||||
Reference in New Issue
Block a user