@@ -31,6 +31,12 @@ class Issue(GitHubCore):
31
31
32
32
"""
33
33
34
+ # The Accept header will likely be removable once the feature is out of
35
+ # preview mode. See: https://git.io/vgXmB
36
+ LOCKING_PREVIEW_HEADERS = {
37
+ 'Accept' : 'application/vnd.github.the-key-preview+json'
38
+ }
39
+
34
40
def _update_attributes (self , issue ):
35
41
self ._api = issue .get ('url' , '' )
36
42
#: :class:`User <github3.users.User>` representing the user the issue
@@ -254,6 +260,17 @@ def labels(self, number=-1, etag=None):
254
260
url = self ._build_url ('labels' , base_url = self ._api )
255
261
return self ._iter (int (number ), url , Label , etag = etag )
256
262
263
+ @requires_auth
264
+ def lock (self ):
265
+ """Lock an issue.
266
+
267
+ :returns: bool
268
+ """
269
+ headers = Issue .LOCKING_PREVIEW_HEADERS
270
+
271
+ url = self ._build_url ('lock' , base_url = self ._api )
272
+ return self ._boolean (self ._put (url , headers = headers ), 204 , 404 )
273
+
257
274
def pull_request (self ):
258
275
"""Retrieve the pull request associated with this issue.
259
276
@@ -309,3 +326,14 @@ def reopen(self):
309
326
labels = [str (l ) for l in self .original_labels ]
310
327
return self .edit (self .title , self .body , assignee , 'open' ,
311
328
number , labels )
329
+
330
+ @requires_auth
331
+ def unlock (self ):
332
+ """Unlock an issue.
333
+
334
+ :returns: bool
335
+ """
336
+ headers = Issue .LOCKING_PREVIEW_HEADERS
337
+
338
+ url = self ._build_url ('lock' , base_url = self ._api )
339
+ return self ._boolean (self ._delete (url , headers = headers ), 204 , 404 )
0 commit comments