Skip to content

Commit ed0f57f

Browse files
authored
Bitbucket: add project default permissions and repository hook settings (atlassian-api#799)
* Bitbucket: add project default permissions and repository hook settings * Bitbucket: add repository hook settings for project
1 parent 9c7aca6 commit ed0f57f

File tree

2 files changed

+157
-2
lines changed

2 files changed

+157
-2
lines changed

atlassian/bitbucket/__init__.py

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,89 @@ def project_remove_group_permissions(self, project_key, groupname):
499499
params = {"name": groupname}
500500
return self.delete(url, params=params)
501501

502+
def project_default_permissions(self, project_key, permission):
503+
"""
504+
Check if the specified permission is the default permission for a given project
505+
:param project_key: The project key
506+
:param permission: the project permissions available are 'PROJECT_ADMIN', 'PROJECT_WRITE' and 'PROJECT_READ'
507+
:return:
508+
"""
509+
url = "{}/permissions/{}/all".format(self._url_project(project_key), permission)
510+
return self.get(url)
511+
512+
def project_grant_default_permissions(self, project_key, permission):
513+
"""
514+
Grant the specified project permission to all users for a given project
515+
:param project_key: The project key
516+
:param permission: the project permissions available are 'PROJECT_ADMIN', 'PROJECT_WRITE' and 'PROJECT_READ'
517+
:return:
518+
"""
519+
url = "{}/permissions/{}/all".format(self._url_project(project_key), permission)
520+
return self.post(url, params={"allow": True})
521+
522+
def project_remove_default_permissions(self, project_key, permission):
523+
"""
524+
Revoke the specified project permission for all users for a given project
525+
:param project_key: The project key
526+
:param permission: the project permissions available are 'PROJECT_ADMIN', 'PROJECT_WRITE' and 'PROJECT_READ'
527+
:return:
528+
"""
529+
url = "{}/permissions/{}/all".format(self._url_project(project_key), permission)
530+
return self.post(url, params={"allow": False})
531+
532+
def _url_project_repo_hook_settings(self, project_key):
533+
return "{}/settings/hooks".format(self._url_project(project_key))
534+
535+
def all_project_repo_hook_settings(self, project_key, start=0, limit=None, filter_type=None):
536+
"""
537+
Get all repository hooks for a given project
538+
:param project_key: The project key
539+
:param start:
540+
:param limit: OPTIONAL: The limit of the number of changes to return, this may be restricted by
541+
fixed system limits. Default by built-in method: None
542+
:param filter_type: OPTIONAL: PRE_RECEIVE|POST_RECEIVE if present, controls how repository hooks should be filtered.
543+
:return:
544+
"""
545+
url = self._url_project_repo_hook_settings(project_key)
546+
params = {}
547+
if filter_type:
548+
params["type"] = filter_type
549+
if start:
550+
params["start"] = start
551+
if limit:
552+
params["limit"] = limit
553+
return self._get_paged(url, params)
554+
555+
def get_project_repo_hook_settings(self, project_key, hook_key):
556+
"""
557+
Get a repository hook from a given project
558+
:param project_key: The project key
559+
:param hook_key: The repository hook key
560+
:return:
561+
"""
562+
url = "{}/{}".format(self._url_project_repo_hook_settings(project_key), hook_key)
563+
return self.get(url)
564+
565+
def enable_project_repo_hook_settings(self, project_key, hook_key):
566+
"""
567+
Enable a repository hook for a given project
568+
:param project_key: The project key
569+
:param hook_key: The repository hook key
570+
:return:
571+
"""
572+
url = "{}/{}/enabled".format(self._url_project_repo_hook_settings(project_key), hook_key)
573+
return self.put(url)
574+
575+
def disable_project_repo_hook_settings(self, project_key, hook_key):
576+
"""
577+
Disable a repository hook for a given project
578+
:param project_key: The project key
579+
:param hook_key: The repository hook key
580+
:return:
581+
"""
582+
url = "{}/{}/enabled".format(self._url_project_repo_hook_settings(project_key), hook_key)
583+
return self.delete(url)
584+
502585
def _url_project_conditions(self, project_key):
503586
return "{}/conditions".format(
504587
self._url_project(project_key, api_root="rest/default-reviewers", api_version="1.0")
@@ -1167,6 +1250,63 @@ def delete_tag(self, project_key, repository_slug, tag_name):
11671250
(project_key, repository_slug, tag_name)
11681251
return self.delete(url)
11691252

1253+
def _url_repo_hook_settings(self, project_key, repository_slug):
1254+
return "{}/settings/hooks".format(self._url_repo(project_key, repository_slug))
1255+
1256+
def all_repo_hook_settings(self, project_key, repository_slug, start=0, limit=None, filter_type=None):
1257+
"""
1258+
Get all repository hooks for a given repo
1259+
:param project_key: The project key
1260+
:param repository_slug: The repository key
1261+
:param start:
1262+
:param limit: OPTIONAL: The limit of the number of changes to return, this may be restricted by
1263+
fixed system limits. Default by built-in method: None
1264+
:param filter_type: OPTIONAL: PRE_RECEIVE|POST_RECEIVE if present, controls how repository hooks should be filtered.
1265+
:return:
1266+
"""
1267+
url = self._url_repo_hook_settings(project_key, repository_slug)
1268+
params = {}
1269+
if filter_type:
1270+
params["type"] = filter_type
1271+
if start:
1272+
params["start"] = start
1273+
if limit:
1274+
params["limit"] = limit
1275+
return self._get_paged(url, params)
1276+
1277+
def get_repo_hook_settings(self, project_key, repository_slug, hook_key):
1278+
"""
1279+
Get a repository hook from a given repo
1280+
:param project_key: The project key
1281+
:param repository_slug: The repository key
1282+
:param hook_key: The repository hook key
1283+
:return:
1284+
"""
1285+
url = "{}/{}".format(self._url_repo_hook_settings(project_key, repository_slug), hook_key)
1286+
return self.get(url)
1287+
1288+
def enable_repo_hook_settings(self, project_key, repository_slug, hook_key):
1289+
"""
1290+
Enable a repository hook for a given repo
1291+
:param project_key: The project key
1292+
:param repository_slug: The repository key
1293+
:param hook_key: The repository hook key
1294+
:return:
1295+
"""
1296+
url = "{}/{}/enabled".format(self._url_repo_hook_settings(project_key, repository_slug), hook_key)
1297+
return self.put(url)
1298+
1299+
def disable_repo_hook_settings(self, project_key, repository_slug, hook_key):
1300+
"""
1301+
Disable a repository hook for a given repo
1302+
:param project_key: The project key
1303+
:param repository_slug: The repository key
1304+
:param hook_key: The repository hook key
1305+
:return:
1306+
"""
1307+
url = "{}/{}/enabled".format(self._url_repo_hook_settings(project_key, repository_slug), hook_key)
1308+
return self.delete(url)
1309+
11701310
def _url_pull_request_settings(self, project_key, repository_slug):
11711311
return "{}/settings/pull-requests".format(self._url_repo(project_key, repository_slug))
11721312

docs/bitbucket.rst

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,27 @@ Manage projects
3333
# Project summary
3434
bitbucket.project_summary(key)
3535
36-
# Grant project permission to an specific user
36+
# Check default permission for project
37+
bitbucket.project_default_permissions(project_key, permission)
38+
39+
# Grant default permission for project
40+
bitbucket.project_grant_default_permissions(project_key, permission)
41+
42+
# Grant project permission to a specific user
3743
bitbucket.project_grant_user_permissions(project_key, username, permission)
3844
39-
# Grant project permission to an specific group
45+
# Grant project permission to a specific group
4046
bitbucket.project_grant_group_permissions(project_key, groupname, permission)
4147
48+
# Remove default permission for project
49+
bitbucket.project_remove_default_permissions(project_key, permission)
50+
51+
# Remove all project permissions for a specific user
52+
bitbucket.project_remove_user_permissions(project_key, username)
53+
54+
# Remove all project permissions for a specific group
55+
bitbucket.project_remove_group_permissions(project_key, groupname)
56+
4257
Manage repositories
4358
-------------------
4459

0 commit comments

Comments
 (0)