4
4
from __future__ import annotations
5
5
6
6
import json
7
- import re
8
7
import os .path
8
+ import re
9
9
import urllib .parse
10
+ from typing import Any
10
11
11
12
from hatchling .metadata .plugin .interface import MetadataHookInterface
12
13
13
-
14
14
AUTHOR_PATTERN = r"^([^<(]+?)?[ \t]*(?:<([^>(]+?)>)?[ \t]*(?:\(([^)]+?)\)|$)"
15
15
REPOSITORY_PATTERN = r"^(?:(gist|bitbucket|gitlab|github):)?(.*?)$"
16
16
REPOSITORY_TABLE = {
@@ -52,6 +52,15 @@ def load_package_data(self):
52
52
with open (path , "r" , encoding = "utf-8" ) as f :
53
53
return json .load (f )
54
54
55
+ def _parse_bugs (self , bugs : str | dict [str , str ]) -> str | None :
56
+ if isinstance (bugs , str ):
57
+ return bugs
58
+
59
+ if "url" not in bugs :
60
+ return None
61
+
62
+ return bugs ["url" ]
63
+
55
64
def _parse_person (self , person : dict [str , str ]) -> dict [str , str ]:
56
65
if {"url" , "email" } & person .keys ():
57
66
result = {"name" : person ["name" ]}
@@ -74,7 +83,7 @@ def _parse_repository(self, repository: str | dict[str, str]) -> str:
74
83
75
84
return repository ["url" ]
76
85
77
- def update (self , metadata ):
86
+ def update (self , metadata : dict [ str , Any ] ):
78
87
package = self .load_package_data ()
79
88
80
89
if "author" in package :
@@ -99,7 +108,9 @@ def update(self, metadata):
99
108
if "homepage" in package :
100
109
urls ["homepage" ] = package ["homepage" ]
101
110
if "bugs" in package :
102
- urls ["bug tracker" ] = package ["bugs" ]
111
+ bugs_url = self ._parse_bugs (package ["bugs" ])
112
+ if bugs_url is not None :
113
+ urls ["bug tracker" ] = bugs_url
103
114
if "repository" in package :
104
115
urls ["repository" ] = self ._parse_repository (package ["repository" ])
105
116
0 commit comments