3
3
import sys
4
4
import typing
5
5
6
+ import attr
6
7
import click
7
8
from requests .auth import HTTPBasicAuth
8
9
@@ -53,13 +54,49 @@ def labels(ctx, username: str, token: str, verbose: bool) -> None:
53
54
else :
54
55
logger .setLevel (logging .INFO )
55
56
56
- ctx .obj = Client (HTTPBasicAuth (username , token ))
57
+ ctx .obj = LabelsContext (Client (HTTPBasicAuth (username , token )))
58
+
59
+
60
+ @click .pass_obj
61
+ def default_owner (labels_context : LabelsContext ) -> str :
62
+ """Load repository owner information from the local working tree."""
63
+ if labels_context .repository is None :
64
+ repository = utils .load_repository_info ()
65
+ if repository is None :
66
+ raise click .BadParameter ("Unable to load repository information." )
67
+ labels_context .repository = repository
68
+ return labels_context .repository .owner
69
+
70
+
71
+ @click .pass_obj
72
+ def default_repo (labels_context : LabelsContext ) -> str :
73
+ """Load repository name information from the local working tree."""
74
+ if labels_context .repository is None :
75
+ repository = utils .load_repository_info ()
76
+ if repository is None :
77
+ raise click .BadParameter ("Unable to load repository information." )
78
+ labels_context .repository = repository
79
+ return labels_context .repository .name
57
80
58
81
59
82
@labels .command ("fetch" )
60
83
@click .pass_obj
61
- @click .option ("-o" , "--owner" , help = "GitHub owner name" , type = str )
62
- @click .option ("-r" , "--repo" , help = "GitHub repository name" , type = str )
84
+ @click .option (
85
+ "-o" ,
86
+ "--owner" ,
87
+ help = "GitHub owner name" ,
88
+ type = str ,
89
+ default = default_owner ,
90
+ required = True ,
91
+ )
92
+ @click .option (
93
+ "-r" ,
94
+ "--repo" ,
95
+ help = "GitHub repository name" ,
96
+ type = str ,
97
+ default = default_repo ,
98
+ required = True ,
99
+ )
63
100
@click .option (
64
101
"-f" ,
65
102
"--filename" ,
@@ -68,19 +105,16 @@ def labels(ctx, username: str, token: str, verbose: bool) -> None:
68
105
type = click .Path (),
69
106
required = True ,
70
107
)
71
- def fetch_cmd (
72
- client : Client ,
73
- owner : typing .Optional [str ],
74
- repo : typing .Optional [str ],
75
- filename : str ,
76
- ) -> None :
108
+ def fetch_cmd (context : LabelsContext , owner : str , repo : str , filename : str ) -> None :
77
109
"""Fetch labels for a GitHub repository.
78
110
79
111
This will write the labels information to disk to the specified filename.
80
112
"""
113
+
114
+ repository = Repository (owner , repo )
115
+
81
116
try :
82
- inferred_owner , inferred_repo = utils .get_owner_and_repo_from_cwd ()
83
- labels = client .list_labels (owner or inferred_owner , repo or inferred_repo )
117
+ labels = context .client .list_labels (repository )
84
118
except LabelsException as exc :
85
119
click .echo (str (exc ))
86
120
sys .exit (1 )
@@ -93,8 +127,22 @@ def fetch_cmd(
93
127
94
128
@labels .command ("sync" )
95
129
@click .pass_obj
96
- @click .option ("-o" , "--owner" , help = "GitHub owner name" , type = str )
97
- @click .option ("-r" , "--repo" , help = "GitHub repository name" , type = str )
130
+ @click .option (
131
+ "-o" ,
132
+ "--owner" ,
133
+ help = "GitHub owner name" ,
134
+ type = str ,
135
+ default = default_owner ,
136
+ required = True ,
137
+ )
138
+ @click .option (
139
+ "-r" ,
140
+ "--repo" ,
141
+ help = "GitHub repository name" ,
142
+ type = str ,
143
+ default = default_repo ,
144
+ required = True ,
145
+ )
98
146
@click .option ("-n" , "--dryrun" , help = "Do not modify remote labels" , is_flag = True )
99
147
@click .option (
100
148
"-f" ,
@@ -105,11 +153,7 @@ def fetch_cmd(
105
153
required = True ,
106
154
)
107
155
def sync_cmd (
108
- client : Client ,
109
- owner : typing .Optional [str ],
110
- repo : typing .Optional [str ],
111
- filename : str ,
112
- dryrun : bool ,
156
+ context : LabelsContext , owner : str , repo : str , filename : str , dryrun : bool
113
157
) -> None :
114
158
"""Sync labels with a GitHub repository.
115
159
@@ -123,12 +167,10 @@ def sync_cmd(
123
167
124
168
local_labels = read_labels (filename )
125
169
126
- inferred_owner , inferred_repo = utils .get_owner_and_repo_from_cwd ()
127
- owner = owner or inferred_owner
128
- repo = repo or inferred_repo
170
+ repository = Repository (owner , repo )
129
171
130
172
try :
131
- remote_labels = {l .name : l for l in client .list_labels (owner , repo )}
173
+ remote_labels = {l .name : l for l in context . client .list_labels (repository )}
132
174
except LabelsException as exc :
133
175
click .echo (str (exc ), err = True )
134
176
sys .exit (1 )
@@ -174,21 +216,21 @@ def sync_cmd(
174
216
175
217
for name in labels_to_delete .keys ():
176
218
try :
177
- client .delete_label (owner , repo , name = name )
219
+ context . client .delete_label (repository , name = name )
178
220
except LabelsException as exc :
179
221
click .echo (str (exc ), err = True )
180
222
failures .append (name )
181
223
182
224
for name , label in labels_to_update .items ():
183
225
try :
184
- client .edit_label (owner , repo , name = name , label = label )
226
+ context . client .edit_label (repository , name = name , label = label )
185
227
except LabelsException as exc :
186
228
click .echo (str (exc ), err = True )
187
229
failures .append (name )
188
230
189
231
for name , label in labels_to_create .items ():
190
232
try :
191
- client .create_label (owner , repo , label = label )
233
+ context . client .create_label (repository , label = label )
192
234
except LabelsException as exc :
193
235
click .echo (str (exc ), err = True )
194
236
failures .append (name )
0 commit comments