1
1
import re
2
2
from enum import Enum
3
- from typing import Dict , List , Optional , Tuple
4
3
5
4
import httpx
6
5
13
12
OnRefreshCallback ,
14
13
Token ,
15
14
)
16
- from shared .typings .torngit import TorngitInstanceData
17
15
18
16
get_start_of_line = re .compile (r"@@ \-(\d+),?(\d*) \+(\d+),?(\d*).*" ).match
19
17
@@ -28,66 +26,67 @@ class TokenType(Enum):
28
26
pull = "pull"
29
27
30
28
31
- TokenTypeMapping = Dict [TokenType , Token ]
29
+ TokenTypeMapping = dict [TokenType , Token ]
32
30
33
31
34
32
class TorngitBaseAdapter (object ):
35
33
_repo_url : str | None = None
36
34
_aws_key = None
37
- _oauth : OauthConsumerToken | None = None
38
- _on_token_refresh : OnRefreshCallback = None
35
+ _oauth : OauthConsumerToken | None
36
+ _on_token_refresh : OnRefreshCallback | None
39
37
_token : Token | None = None
40
- verify_ssl = None
38
+ verify_ssl : str | bool
39
+ _timeout : httpx .Timeout
40
+ valid_languages = set (language [0 ] for language in Repository .Languages .choices )
41
41
42
- valid_languages = set (language .value for language in Repository .Languages )
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
43
46
44
47
def __init__ (
45
48
self ,
46
49
oauth_consumer_token : OauthConsumerToken | None = None ,
47
- timeouts = None ,
50
+ timeout : httpx . Timeout | tuple [ int , int ] | None = None ,
48
51
token : Token | None = None ,
49
52
token_type_mapping : TokenTypeMapping | None = None ,
50
- on_token_refresh : OnRefreshCallback = None ,
51
- verify_ssl = None ,
53
+ on_token_refresh : OnRefreshCallback | None = None ,
54
+ verify_ssl : str | bool = True ,
52
55
** kwargs ,
53
- ):
54
- self ._timeouts = timeouts or [10 , 30 ]
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 )
55
61
self ._token = token
56
62
self ._on_token_refresh = on_token_refresh
57
63
self ._token_type_mapping = token_type_mapping or {}
58
64
self ._oauth = oauth_consumer_token
59
- self .data : TorngitInstanceData = {
60
- "owner" : {},
61
- "repo" : {},
62
- "fallback_installations" : None ,
63
- "installation" : None ,
64
- "additional_data" : {},
65
- }
66
65
self .verify_ssl = verify_ssl
67
- self .data .update (kwargs )
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" , {}),
72
+ }
68
73
# This has the side effect of initializing the torngit_cache
69
74
# (if not yet initialized)
70
75
torngit_cache .initialize ()
71
76
72
- def __repr__ (self ):
77
+ def __repr__ (self ) -> str :
73
78
return "<%s slug=%s ownerid=%s repoid=%s>" % (
74
79
self .service ,
75
80
self .slug ,
76
81
self .data ["owner" ].get ("ownerid" ),
77
82
self .data ["repo" ].get ("repoid" ),
78
83
)
79
84
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 ])
85
+ def get_client (self , timeout : httpx .Timeout | None = None ) -> httpx .AsyncClient :
86
+ if timeout is None :
87
+ timeout = self ._timeout
85
88
return httpx .AsyncClient (
86
- verify = (
87
- self .verify_ssl
88
- if not isinstance (self .verify_ssl , bool )
89
- else self .verify_ssl
90
- ),
89
+ verify = self .verify_ssl ,
91
90
timeout = timeout ,
92
91
)
93
92
@@ -96,7 +95,7 @@ def get_token_by_type(self, token_type: TokenType):
96
95
return self ._token_type_mapping .get (token_type )
97
96
return self .token
98
97
99
- def get_token_by_type_if_none (self , token : Optional [ str ] , token_type : TokenType ):
98
+ def get_token_by_type_if_none (self , token : str | None , token_type : TokenType ):
100
99
if token is not None :
101
100
return token
102
101
return self .get_token_by_type (token_type )
@@ -106,14 +105,15 @@ def _oauth_consumer_token(self) -> OauthConsumerToken:
106
105
raise Exception ("Oauth consumer token not present" )
107
106
return self ._oauth
108
107
109
- def _validate_language (self , language : str ) -> str | None :
108
+ def _validate_language (self , language : str | None ) -> str | None :
110
109
if language :
111
110
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 : OauthConsumerToken ) -> None :
116
+ def set_token (self , token : Token ) -> 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 , token = None ):
360
+ async def get_branch (self , branch_name : str , 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