Skip to content

Commit 1434204

Browse files
Racer159lunnyKN4CK3R
authored
Allow local package identifiers for PyPI packages (#21690) (#21726)
Backport (#21690) Fixes #21683 Co-authored-by: Lunny Xiao <[email protected]> Co-authored-by: KN4CK3R <[email protected]>
1 parent d6d62c0 commit 1434204

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

Diff for: integrations/api_packages_pypi_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestPackagePyPI(t *testing.T) {
2828
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
2929

3030
packageName := "test-package"
31-
packageVersion := "1.0.1"
31+
packageVersion := "1.0.1+r1234"
3232
packageAuthor := "KN4CK3R"
3333
packageDescription := "Test Description"
3434

@@ -163,7 +163,7 @@ func TestPackagePyPI(t *testing.T) {
163163
nodes := htmlDoc.doc.Find("a").Nodes
164164
assert.Len(t, nodes, 2)
165165

166-
hrefMatcher := regexp.MustCompile(fmt.Sprintf(`%s/files/%s/%s/test\..+#sha256-%s`, root, packageName, packageVersion, hashSHA256))
166+
hrefMatcher := regexp.MustCompile(fmt.Sprintf(`%s/files/%s/%s/test\..+#sha256-%s`, root, regexp.QuoteMeta(packageName), regexp.QuoteMeta(packageVersion), hashSHA256))
167167

168168
for _, a := range nodes {
169169
for _, att := range a.Attr {

Diff for: routers/api/packages/pypi/pypi.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,15 @@ import (
2626
var normalizer = strings.NewReplacer(".", "-", "_", "-")
2727
var nameMatcher = regexp.MustCompile(`\A[a-zA-Z0-9\.\-_]+\z`)
2828

29-
// https://www.python.org/dev/peps/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions
30-
var versionMatcher = regexp.MustCompile(`^([1-9][0-9]*!)?(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))*((a|b|rc)(0|[1-9][0-9]*))?(\.post(0|[1-9][0-9]*))?(\.dev(0|[1-9][0-9]*))?$`)
29+
// https://peps.python.org/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions
30+
var versionMatcher = regexp.MustCompile(`\Av?` +
31+
`(?:[0-9]+!)?` + // epoch
32+
`[0-9]+(?:\.[0-9]+)*` + // release segment
33+
`(?:[-_\.]?(?:a|b|c|rc|alpha|beta|pre|preview)[-_\.]?[0-9]*)?` + // pre-release
34+
`(?:-[0-9]+|[-_\.]?(?:post|rev|r)[-_\.]?[0-9]*)?` + // post release
35+
`(?:[-_\.]?dev[-_\.]?[0-9]*)?` + // dev release
36+
`(?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)?` + // local version
37+
`\z`)
3138

3239
func apiError(ctx *context.Context, status int, obj interface{}) {
3340
helper.LogAndProcessError(ctx, status, obj, func(message string) {

0 commit comments

Comments
 (0)