add python package total downloads from [pepy] badge (#9564)

This commit is contained in:
chris48s
2023-09-27 00:46:00 +01:00
committed by GitHub
parent afc2f9093a
commit 70d22c3532
2 changed files with 64 additions and 0 deletions

View 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,
})
}
}

View 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' })