1
1
import re
2
2
from enum import Enum
3
+ from typing import Dict , List , Optional , Tuple
3
4
4
5
import httpx
5
6
12
13
OnRefreshCallback ,
13
14
Token ,
14
15
)
16
+ from shared .typings .torngit import TorngitInstanceData
15
17
16
18
get_start_of_line = re .compile (r"@@ \-(\d+),?(\d*) \+(\d+),?(\d*).*" ).match
17
19
@@ -26,67 +28,66 @@ class TokenType(Enum):
26
28
pull = "pull"
27
29
28
30
29
- TokenTypeMapping = dict [TokenType , Token ]
31
+ TokenTypeMapping = Dict [TokenType , Token ]
30
32
31
33
32
34
class TorngitBaseAdapter (object ):
33
35
_repo_url : str | None = None
34
36
_aws_key = None
35
- _oauth : OauthConsumerToken | None
36
- _on_token_refresh : OnRefreshCallback | None
37
+ _oauth : OauthConsumerToken | None = None
38
+ _on_token_refresh : OnRefreshCallback = None
37
39
_token : Token | None = None
38
- verify_ssl : str | bool
39
- _timeout : httpx .Timeout
40
- valid_languages = set (language [0 ] for language in Repository .Languages .choices )
40
+ verify_ssl = None
41
41
42
- # These are set by the subclasses
43
- service_url : str | None = None
44
- service : str | None = None
45
- urls : dict [str , str ] | None = None
42
+ valid_languages = set (language .value for language in Repository .Languages )
46
43
47
44
def __init__ (
48
45
self ,
49
46
oauth_consumer_token : OauthConsumerToken | None = None ,
50
- timeout : httpx . Timeout | tuple [ int , int ] | None = None ,
47
+ timeouts = None ,
51
48
token : Token | None = None ,
52
49
token_type_mapping : TokenTypeMapping | None = None ,
53
- on_token_refresh : OnRefreshCallback | None = None ,
54
- verify_ssl : str | bool = True ,
50
+ on_token_refresh : OnRefreshCallback = None ,
51
+ verify_ssl = None ,
55
52
** kwargs ,
56
- ) -> None :
57
- if isinstance (timeout , tuple ):
58
- self ._timeout = httpx .Timeout (timeout [1 ], connect = timeout [0 ])
59
- else :
60
- self ._timeout = timeout or httpx .Timeout (30 , connect = 10 )
53
+ ):
54
+ self ._timeouts = timeouts or [10 , 30 ]
61
55
self ._token = token
62
56
self ._on_token_refresh = on_token_refresh
63
57
self ._token_type_mapping = token_type_mapping or {}
64
58
self ._oauth = oauth_consumer_token
65
- self .verify_ssl = verify_ssl
66
- self .data = {
67
- "owner" : kwargs .get ("owner" , {}),
68
- "repo" : kwargs .get ("repo" , {}),
69
- "fallback_installations" : kwargs .get ("fallback_installations" , None ),
70
- "installation" : kwargs .get ("installation" , None ),
71
- "additional_data" : kwargs .get ("additional_data" , {}),
59
+ self .data : TorngitInstanceData = {
60
+ "owner" : {},
61
+ "repo" : {},
62
+ "fallback_installations" : None ,
63
+ "installation" : None ,
64
+ "additional_data" : {},
72
65
}
66
+ self .verify_ssl = verify_ssl
67
+ self .data .update (kwargs )
73
68
# This has the side effect of initializing the torngit_cache
74
69
# (if not yet initialized)
75
70
torngit_cache .initialize ()
76
71
77
- def __repr__ (self ) -> str :
72
+ def __repr__ (self ):
78
73
return "<%s slug=%s ownerid=%s repoid=%s>" % (
79
74
self .service ,
80
75
self .slug ,
81
76
self .data ["owner" ].get ("ownerid" ),
82
77
self .data ["repo" ].get ("repoid" ),
83
78
)
84
79
85
- def get_client (self , timeout : httpx .Timeout | None = None ) -> httpx .AsyncClient :
86
- if timeout is None :
87
- timeout = self ._timeout
80
+ def get_client (self , timeouts : List [int ] = []) -> httpx .AsyncClient :
81
+ if timeouts :
82
+ timeout = httpx .Timeout (timeouts [1 ], connect = timeouts [0 ])
83
+ else :
84
+ timeout = httpx .Timeout (self ._timeouts [1 ], connect = self ._timeouts [0 ])
88
85
return httpx .AsyncClient (
89
- verify = self .verify_ssl ,
86
+ verify = (
87
+ self .verify_ssl
88
+ if not isinstance (self .verify_ssl , bool )
89
+ else self .verify_ssl
90
+ ),
90
91
timeout = timeout ,
91
92
)
92
93
@@ -95,7 +96,7 @@ def get_token_by_type(self, token_type: TokenType):
95
96
return self ._token_type_mapping .get (token_type )
96
97
return self .token
97
98
98
- def get_token_by_type_if_none (self , token : str | None , token_type : TokenType ):
99
+ def get_token_by_type_if_none (self , token : Optional [ str ] , token_type : TokenType ):
99
100
if token is not None :
100
101
return token
101
102
return self .get_token_by_type (token_type )
@@ -105,15 +106,14 @@ def _oauth_consumer_token(self) -> OauthConsumerToken:
105
106
raise Exception ("Oauth consumer token not present" )
106
107
return self ._oauth
107
108
108
- def _validate_language (self , language : str | None ) -> str | None :
109
+ def _validate_language (self , language : str ) -> str | None :
109
110
if language :
110
111
language = language .lower ()
111
-
112
112
if language in self .valid_languages :
113
113
return language
114
114
return None
115
115
116
- def set_token (self , token : Token ) -> None :
116
+ def set_token (self , token : OauthConsumerToken ) -> None :
117
117
self ._token = token
118
118
119
119
@property
@@ -329,7 +329,7 @@ async def edit_webhook(
329
329
330
330
# OTHERS
331
331
332
- async def get_authenticated (self , token = None ) -> tuple [bool , bool ]:
332
+ async def get_authenticated (self , token = None ) -> Tuple [bool , bool ]:
333
333
"""Finds the user permissions about about whether the user on
334
334
`self.data["user"]` can access the repo from `self.data["repo"]`
335
335
Returns a `can_view` and a `can_edit` permission tuple
@@ -357,7 +357,7 @@ async def get_authenticated_user(self, **kwargs):
357
357
async def get_branches (self , token = None ):
358
358
raise NotImplementedError ()
359
359
360
- async def get_branch (self , branch_name : str , token = None ):
360
+ async def get_branch (self , token = None ):
361
361
raise NotImplementedError ()
362
362
363
363
async def get_compare (
@@ -426,7 +426,7 @@ async def list_top_level_files(self, ref, token=None):
426
426
async def get_workflow_run (self , run_id , token = None ):
427
427
raise NotImplementedError ()
428
428
429
- async def get_best_effort_branches (self , commit_sha : str , token = None ) -> list [str ]:
429
+ async def get_best_effort_branches (self , commit_sha : str , token = None ) -> List [str ]:
430
430
"""
431
431
Gets a 'best effort' list of branches this commit is in.
432
432
If a branch is returned, this means this commit is in that branch. If not, it could still be
0 commit comments