7
7
Optional ,
8
8
Type
9
9
)
10
- from urllib3 import get_host
11
- from wechaty_puppet import UrlLinkPayload , get_logger
10
+ from urllib3 .util .url import parse_url
11
+
12
+ from wechaty_puppet import get_logger , UrlLinkPayload
12
13
13
14
from wechaty .utils .link import get_url_metadata
14
15
15
- from dataclasses import dataclass
16
16
from typing import Dict , List
17
17
from abc import abstractmethod
18
18
from github import Github
24
24
from github .Issue import Issue
25
25
from github .IssueComment import IssueComment
26
26
27
- from wechaty_puppet .schemas .url_link import UrlLinkPayload
28
-
29
27
30
28
log = get_logger ('UrlLink' )
31
29
32
30
33
31
class UrlLinkParser :
34
32
# valid host-name of one parser
35
33
host_names : List [str ] = []
36
-
34
+
37
35
@classmethod
38
36
def can_parser (cls , url : str ) -> bool :
39
37
if not cls .host_names :
40
38
raise ValueError (f"please set valid host-names for parser, eg: ['github']" )
41
-
42
- _ , host_name , _ = get_host (url )
39
+
40
+ host_name = parse_url (url ). hostname
43
41
return host_name in cls .host_names
44
42
45
43
@abstractmethod
@@ -55,7 +53,7 @@ class GithubUrlLinkParser(UrlLinkParser):
55
53
def __init__ (self , token : Optional [str ] = None ):
56
54
self ._github = Github (login_or_token = token )
57
55
self ._repositories : Dict [str , Repository ] = {}
58
-
56
+
59
57
@staticmethod
60
58
def can_parser (url : str ) -> bool :
61
59
"""the source of url
@@ -64,11 +62,10 @@ def can_parser(url: str) -> bool:
64
62
url (str): github urllink
65
63
66
64
Returns:
67
- bool: wheter is github based urll
65
+ bool: whether is github based url
68
66
"""
69
- _ , host_name , _ = get_host (url )
70
- return host_name
71
-
67
+ return parse_url (url ).hostname
68
+
72
69
def parse (self , url : str ) -> UrlLinkPayload :
73
70
"""parse url-link as payload
74
71
@@ -115,7 +112,7 @@ def get_pr_payload(self, repo_name: str, pr_id: int) -> UrlLinkPayload:
115
112
thumbnailUrl = pull_request .user .avatar_url
116
113
)
117
114
return payload
118
-
115
+
119
116
def get_pr_comment_payload (self , repo_name : str , pr_id : int , comment_id : int , comment_type : str = 'issue' ) -> UrlLinkPayload :
120
117
"""get comment of pull-request, which can be issue or review comment
121
118
@@ -218,7 +215,7 @@ def create(
218
215
metadata = get_url_metadata (url )
219
216
220
217
payload = UrlLinkPayload (url = url )
221
-
218
+
222
219
payload .title = title or metadata .get ('title' , None )
223
220
payload .thumbnailUrl = thumbnail_url or metadata .get ('image' , None )
224
221
payload .description = description or metadata .get ('description' , None )
0 commit comments