Skip to content

Commit

Permalink
add python package total downloads from [pepy] badge
Browse files Browse the repository at this point in the history
  • Loading branch information
chris48s committed Sep 11, 2023
1 parent 015b5b0 commit 10d271d
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
53 changes: 53 additions & 0 deletions services/pepy/pepy-downloads.service.js
Original file line number Diff line number Diff line change
@@ -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 changes: 11 additions & 0 deletions services/pepy/pepy-downloads.tester.js
Original file line number Diff line number Diff line change
@@ -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' })

0 comments on commit 10d271d

Please sign in to comment.