Add the packages-translation-availability page

Signed-off-by: Christopher Baines <mail@cbaines.net>
This commit is contained in:
Danjela Lura 2020-06-26 17:05:26 +02:00 committed by Christopher Baines
parent bd3aa98620
commit f60c2eabce
3 changed files with 213 additions and 1 deletions

View file

@ -34,7 +34,10 @@
inferior-packages->package-metadata-ids
inferior-packages->translated-package-descriptions-and-synopsis
package-description-and-synopsis-locale-options-guix-revision))
package-description-and-synopsis-locale-options-guix-revision
synopsis-counts-by-locale
description-counts-by-locale))
(define locales
'("cs_CZ.utf8"
@ -434,3 +437,59 @@ WHERE packages.id IN (
ON package_derivations.id = guix_revision_package_derivations.package_derivation_id
WHERE guix_revision_package_derivations.revision_id = $1"
(list revision-id)))
(define (synopsis-counts-by-locale conn revision-id)
(define synopsis-counts
"
SELECT package_synopsis.locale, COUNT(package_synopsis.synopsis) AS translated_synopsis
FROM package_synopsis_sets
INNER JOIN package_synopsis
ON package_synopsis.id = ANY (package_synopsis_sets.synopsis_ids)
WHERE package_synopsis_sets.id IN (
SELECT package_metadata.package_synopsis_set_id
FROM packages
INNER JOIN package_derivations
ON packages.id = package_derivations.package_id
INNER JOIN guix_revision_package_derivations
ON package_derivations.id = guix_revision_package_derivations.package_derivation_id
INNER JOIN guix_revisions
ON guix_revision_package_derivations.revision_id = guix_revisions.id
INNER JOIN package_metadata
ON package_metadata.id = packages.package_metadata_id
WHERE guix_revisions.id = $1)
GROUP BY package_synopsis.locale;
")
(map
(match-lambda
((locale synopsis-counts)
`(,locale . ,(string->number synopsis-counts))))
(exec-query conn synopsis-counts
(list revision-id))))
(define (description-counts-by-locale conn revision-id)
(define description-counts
"
SELECT package_descriptions.locale, COUNT(package_descriptions.description) AS translated_description
FROM package_description_sets
INNER JOIN package_descriptions
ON package_descriptions.id = ANY (package_description_sets.description_ids)
WHERE package_description_sets.id IN (
SELECT package_metadata.package_description_set_id
FROM packages
INNER JOIN package_derivations
ON packages.id = package_derivations.package_id
INNER JOIN guix_revision_package_derivations
ON package_derivations.id = guix_revision_package_derivations.package_derivation_id
INNER JOIN guix_revisions
ON guix_revision_package_derivations.revision_id = guix_revisions.id
INNER JOIN package_metadata
ON package_metadata.id = packages.package_metadata_id
WHERE guix_revisions.id = $1)
GROUP BY package_descriptions.locale;
")
(map
(match-lambda
((locale description-counts)
`(,locale . ,(string->number description-counts))))
(exec-query conn description-counts
(list revision-id))))

View file

@ -147,6 +147,15 @@
(render-unknown-revision mime-types
conn
commit-hash)))
(('GET "revision" commit-hash "packages-translation-availability")
(if (guix-commit-exists? conn commit-hash)
(render-revision-packages-translation-availability mime-types
conn
commit-hash
#:path-base path)
(render-unknown-revision mime-types
conn
commit-hash)))
(('GET "revision" commit-hash "package" name)
(if (guix-commit-exists? conn commit-hash)
(render-revision-package mime-types
@ -648,6 +657,41 @@
#:header-link header-link)
#:extra-headers http-headers-for-unchanging-content))))))
(define* (render-revision-packages-translation-availability mime-types
conn
commit-hash
#:key
path-base
(header-link
(string-append
"/revision/" commit-hash))
(header-text
`("Revision " (samp ,commit-hash))))
(let ((package-synopsis-counts
(synopsis-counts-by-locale conn
(commit->revision-id conn
commit-hash)))
(package-description-counts
(description-counts-by-locale conn
(commit->revision-id conn
commit-hash))))
(case (most-appropriate-mime-type
'(application/json text/html)
mime-types)
((application/json)
(render-json
`((package-synopsis-counts . ,package-synopsis-counts)
(package-description-counts . ,package-description-counts))))
(else
(render-html
#:sxml
(view-revision-packages-translation-availability commit-hash
package-synopsis-counts
package-description-counts
#:path-base path-base
#:header-link header-link
#:header-text header-text))))))
(define* (render-revision-package mime-types
conn
commit-hash

View file

@ -34,6 +34,7 @@
view-revision-package-and-version
view-revision
view-revision-packages
view-revision-packages-translation-availability
view-revision-package-derivations
view-revision-package-derivation-outputs
view-revision-system-tests
@ -717,6 +718,114 @@
"Next page")))
'())))))
(define* (view-revision-packages-translation-availability commit-hash
package-synopsis-counts
package-description-counts
#:key
path-base header-link
header-text)
(define total-package-synopsis
(assoc-ref package-synopsis-counts "en_US.utf8"))
(define total-package-descriptions
(assoc-ref package-description-counts "en_US.utf8"))
(assoc-remove! package-synopsis-counts "en_US.utf8")
(assoc-remove! package-description-counts "en_US.utf8")
(define synopsis-percentages
(map
(match-lambda
((locale . count)
(exact->inexact
(* 100 (/ (or count
0)
total-package-synopsis)))))
package-synopsis-counts))
(define description-percentages
(map
(match-lambda
((locale . count)
(exact->inexact
(* 100 (/ (or count
0)
total-package-descriptions)))))
package-description-counts))
(layout
#:body
`(,(header)
(div
(@ (class "container"))
(div
(@ (class "row"))
(div
(@ (class "col-sm-12"))
(h3 (a (@ (style "white-space: nowrap;")
(href ,header-link))
,@header-text)))
(div
(@ (class "col-sm-12"))
(a (@ (class "btn btn-default btn-lg pull-right")
(href ,(string-append path-base ".json")))
"View JSON")))
(div (@ (class "row"))
(div (@ (class "col-sm-6"))
(table (@ (class "table"))
(thead
(tr
(th (@ (scope "col")) "Locale")
(th (@ (scope "col")) "Translated Package Synopsis")))
(tbody
,@(map
(lambda (synopsis-locale synopsis-percentage)
`(tr
(th (@ (scope "row")) ,synopsis-locale)
(td
,(simple-format #f "~~~A%" (inexact->exact
(round synopsis-percentage)))
(div (@ (class "progress"))
(div (@ (class "progress-bar")
(role "progressbar")
(aria-valuenow ,synopsis-percentage)
(aria-valuemin "0")
(aria-valuemax "100")
(style ,(string-append
"width: "
(number->string
synopsis-percentage)
"%;"))))))))
(map car package-synopsis-counts)
synopsis-percentages))))
(div (@ (class "col-sm-6"))
(table (@ (class "table"))
(thead
(tr
(th (@ (scope "col")) "Locale")
(th (@ (scope "col")) "Translated Package Descriptions")))
(tbody
,@(map
(lambda (description-locale description-percentage)
`(tr
(th (@ (scope "row")) ,description-locale)
(td
,(simple-format #f "~~~A%" (inexact->exact
(round description-percentage)))
(div (@ (class "progress"))
(div (@ (class "progress-bar")
(role "progressbar")
(aria-valuenow ,description-percentage)
(aria-valuemin "0")
(aria-valuemax "100")
(style ,(string-append
"width: "
(number->string
description-percentage)
"%;"))))))))
(map car package-description-counts)
description-percentages)))))))))
(define* (view-revision-system-tests commit-hash
system-tests
git-repositories