1
- import typing
2
1
import logging
2
+ from typing import Any , Dict , List , Optional , Tuple
3
3
4
4
import attr
5
5
import requests
@@ -15,7 +15,7 @@ class Repository:
15
15
name : str
16
16
17
17
18
- def not_read_only (attr : attr .Attribute , value : typing . Any ) -> bool :
18
+ def not_read_only (attr : attr .Attribute , value : Any ) -> bool :
19
19
"""Filter for attr that checks for a leading underscore."""
20
20
return not attr .name .startswith ("_" )
21
21
@@ -35,12 +35,12 @@ class Label:
35
35
_url : str = ""
36
36
37
37
@property
38
- def params_dict (self ) -> typing . Dict [str , typing . Any ]:
38
+ def params_dict (self ) -> Dict [str , Any ]:
39
39
"""Return label parameters as a dict."""
40
40
return attr .asdict (self , recurse = True , filter = not_read_only )
41
41
42
42
@property
43
- def params_tuple (self ) -> typing . Tuple [typing . Any , ...]:
43
+ def params_tuple (self ) -> Tuple [Any , ...]:
44
44
"""Return label parameters as a tuple."""
45
45
return attr .astuple (self , recurse = True , filter = not_read_only )
46
46
@@ -56,7 +56,7 @@ def __init__(
56
56
self .session = requests .Session ()
57
57
self .session .auth = auth
58
58
59
- def list_labels (self , repo : Repository ) -> typing . List [Label ]:
59
+ def list_labels (self , repo : Repository ) -> List [Label ]:
60
60
"""Return the list of Labels from the repository.
61
61
62
62
GitHub API docs:
@@ -65,9 +65,10 @@ def list_labels(self, repo: Repository) -> typing.List[Label]:
65
65
logger = logging .getLogger ("labels" )
66
66
logger .debug (f"Requesting labels for { repo .owner } /{ repo .name } " )
67
67
68
+ headers = {"Accept" : "application/vnd.github.symmetra-preview+json" }
69
+
68
70
response = self .session .get (
69
- f"{ self .base_url } /repos/{ repo .owner } /{ repo .name } /labels" ,
70
- headers = {"Accept" : "application/vnd.github.symmetra-preview+json" },
71
+ f"{ self .base_url } /repos/{ repo .owner } /{ repo .name } /labels" , headers = headers
71
72
)
72
73
73
74
if response .status_code != 200 :
@@ -77,15 +78,14 @@ def list_labels(self, repo: Repository) -> typing.List[Label]:
77
78
f"{ response .reason } "
78
79
)
79
80
80
- json = response .json ()
81
+ repo_labels : List [ Dict ] = response .json ()
81
82
82
- next_page = response .links .get ('next' , None )
83
- while next_page :
84
- logger .debug (f"Requesting { next_page } " )
85
- response = self .session .get (
86
- next_page ['url' ],
87
- headers = {"Accept" : "application/vnd.github.symmetra-preview+json" },
88
- )
83
+ next_page : Optional [Dict ] = response .links .get ("next" , None )
84
+
85
+ while next_page is not None :
86
+
87
+ logger .debug (f"Requesting next page of labels" )
88
+ response = self .session .get (next_page ["url" ], headers = headers )
89
89
90
90
if response .status_code != 200 :
91
91
raise GitHubException (
@@ -94,10 +94,11 @@ def list_labels(self, repo: Repository) -> typing.List[Label]:
94
94
f"{ response .reason } "
95
95
)
96
96
97
- json .extend (response .json ())
98
- next_page = response .links .get ('next' , None )
97
+ repo_labels .extend (response .json ())
98
+
99
+ next_page = response .links .get ("next" , None )
99
100
100
- return [Label (** data ) for data in json ]
101
+ return [Label (** label ) for label in repo_labels ]
101
102
102
103
def get_label (self , repo : Repository , * , name : str ) -> Label :
103
104
"""Return a single Label from the repository.
0 commit comments