blob: 9d884fbc20d6ed8d673f539ea9a49dbf098f3d18 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
(define-module (pypi api)
#:use-module (json)
#:use-module (logging logger)
#:use-module (web uri)
#:use-module (guix ui)
#:use-module (guix utils)
#:use-module (guix import utils)
#:use-module ((guix download) #:prefix download:)
#:use-module (guix import json)
#:use-module (guix packages)
#:use-module (guix upstream)
#:use-module (guix licenses)
#:use-module (guix build-system python)
#:use-module (ice-9 match)
#:use-module (ice-9 pretty-print)
#:use-module (gnu packages python)
#:use-module (pypi version)
#:export (pypi-fetch
get-sdist-releases
available-versions))
(define pypi-fetch
(memoize
(lambda (name api-root)
(begin
(log-msg 'INFO (string-append "Fetching... " name))
(let
((data
(call-with-output-file "/dev/null"
(lambda (null)
(with-error-to-port (current-error-port)
(lambda ()
(json-fetch (string-append api-root name "/json"))))))))
(if (eq? data #f)
(begin
(error (string-append "data from " api-root " is false"))
(sleep 2)
(pypi-fetch name api-root))
data))))))
(define (available-versions name api-root)
(sort-versions
(map
car
(get-sdist-releases (pypi-fetch name api-root)))))
(define (get-sdist-releases data)
(filter
(match-lambda
((version . releases)
(> (length (car releases)) 0)))
(map
(match-lambda
((version . releases)
(list
version
(filter
(lambda (r) (string=? "sdist" (assoc-ref r "packagetype")))
releases))))
(filter
(lambda (r) (> (length r) 1))
(assoc-ref* data "releases")))))
|