diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index f71afad8f..93841931c 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -14,11 +14,11 @@ jobs:
run-docker:
runs-on: ubuntu-18.04
-
+
strategy:
fail-fast: false
matrix:
- python-version: ['3.4', '3.5', '3.6', '3.7', '3.8']
+ python-version: ['3.4', '3.5', '3.6', '3.7', '3.8', '3.9', '-dev']
steps:
- uses: actions/checkout@v2
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 07c6eab2b..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-language: python
-python:
- - "2.7"
- - "3.4"
- - "3.5"
- - "3.6"
- - "3.7"
- - "3.8"
- - "3.9"
- - "3.10-dev"
-
-matrix:
- allow_failures:
- - python: "3.10-dev"
-
-install: pip install tox-travis
-before_script:
- - .travis/bump_version ./ minor > atlassian/VERSION
-script:
- - make qa
diff --git a/Dockerfile.qa b/Dockerfile.qa
index 218b756b5..35e3ed805 100644
--- a/Dockerfile.qa
+++ b/Dockerfile.qa
@@ -1,10 +1,10 @@
-FROM ubuntu:18.04
+FROM ubuntu:20.04
ARG PYTHON_VERSION
RUN \
apt update && \
- apt-get install -y make gcc-5 libkrb5-dev python$PYTHON_VERSION python3-pip && \
+ apt-get install -y make gcc-8 libkrb5-dev python$PYTHON_VERSION python3-pip && \
apt-get clean
WORKDIR /atlassian-python-api
diff --git a/Makefile b/Makefile
index 8b02dea55..5fb5642c1 100644
--- a/Makefile
+++ b/Makefile
@@ -31,6 +31,8 @@ setup-dev:
qa: tox
+tox: export PYTHONDONTWRITEBYTECODE := 1
+
tox:
tox
diff --git a/atlassian/bamboo.py b/atlassian/bamboo.py
index 57a91fcb1..8a6b986b8 100755
--- a/atlassian/bamboo.py
+++ b/atlassian/bamboo.py
@@ -66,15 +66,7 @@ def _get_generator(
yield response
def base_list_call(
- self,
- resource,
- expand,
- favourite,
- clover_enabled,
- max_results,
- label=None,
- start_index=0,
- **kwargs
+ self, resource, expand, favourite, clover_enabled, max_results, label=None, start_index=0, **kwargs
):
flags = []
params = {"max-results": max_results}
@@ -101,9 +93,7 @@ def base_list_call(
""" Projects & Plans """
- def projects(
- self, expand=None, favourite=False, clover_enabled=False, max_results=25
- ):
+ def projects(self, expand=None, favourite=False, clover_enabled=False, max_results=25):
return self.base_list_call(
"project",
expand=expand,
@@ -217,9 +207,7 @@ def enable_plan(self, plan_key):
""" Branches """
- def search_branches(
- self, plan_key, include_default_branch=True, max_results=25, start=0
- ):
+ def search_branches(self, plan_key, include_default_branch=True, max_results=25, start=0):
params = {
"max-result": max_results,
"start-index": start,
@@ -261,9 +249,7 @@ def get_branch_info(self, plan_key, branch_name):
:param branch_name:
:return:
"""
- resource = "plan/{plan_key}/branch/{branch_name}".format(
- plan_key=plan_key, branch_name=branch_name
- )
+ resource = "plan/{plan_key}/branch/{branch_name}".format(plan_key=plan_key, branch_name=branch_name)
return self.get(self.resource_url(resource))
def create_branch(
@@ -286,9 +272,7 @@ def create_branch(
:param cleanup_enabled: bool
:return: PUT request
"""
- resource = "plan/{plan_key}/branch/{branch_name}".format(
- plan_key=plan_key, branch_name=branch_name
- )
+ resource = "plan/{plan_key}/branch/{branch_name}".format(plan_key=plan_key, branch_name=branch_name)
params = {}
if vcs_branch:
params = dict(
@@ -350,9 +334,7 @@ def results(
"""
resource = "result"
if project_key and plan_key and job_key and build_number:
- resource += "/{}-{}-{}/{}".format(
- project_key, plan_key, job_key, build_number
- )
+ resource += "/{}-{}-{}/{}".format(project_key, plan_key, job_key, build_number)
elif project_key and plan_key and build_number:
resource += "/{}-{}/{}".format(project_key, plan_key, build_number)
elif project_key and plan_key:
@@ -489,9 +471,7 @@ def plan_results(
include_all_states=include_all_states,
)
- def build_result(
- self, build_key, expand=None, include_all_states=False, start=0, max_results=25
- ):
+ def build_result(self, build_key, expand=None, include_all_states=False, start=0, max_results=25):
"""
Returns details of a specific build result
:param expand: expands build result details on request. Possible values are: artifacts, comments, labels,
@@ -516,9 +496,7 @@ def build_result(
include_all_states=include_all_states,
)
except ValueError:
- raise ValueError(
- 'The key "{}" does not correspond to a build result'.format(build_key)
- )
+ raise ValueError('The key "{}" does not correspond to a build result'.format(build_key))
def build_latest_result(self, plan_key, expand=None, include_all_states=False):
"""
@@ -541,11 +519,7 @@ def build_latest_result(self, plan_key, expand=None, include_all_states=False):
include_all_states=include_all_states,
)
except ValueError:
- raise ValueError(
- 'The key "{}" does not correspond to the latest build result'.format(
- plan_key
- )
- )
+ raise ValueError('The key "{}" does not correspond to the latest build result'.format(plan_key))
def delete_build_result(self, build_key):
"""
@@ -557,18 +531,9 @@ def delete_build_result(self, build_key):
plan_key = "{}-{}".format(build_key[0], build_key[1])
build_number = build_key[2]
params = {"buildKey": plan_key, "buildNumber": build_number}
- return self.post(
- custom_resource, params=params, headers=self.form_token_headers
- )
+ return self.post(custom_resource, params=params, headers=self.form_token_headers)
- def execute_build(
- self,
- plan_key,
- stage=None,
- execute_all_stages=True,
- custom_revision=None,
- **bamboo_variables
- ):
+ def execute_build(self, plan_key, stage=None, execute_all_stages=True, custom_revision=None, **bamboo_variables):
"""
Fire build execution for specified plan.
!IMPORTANT! NOTE: for some reason, this method always execute all stages
@@ -604,9 +569,7 @@ def stop_build(self, plan_key):
""" Comments & Labels """
- def comments(
- self, project_key, plan_key, build_number, start_index=0, max_results=25
- ):
+ def comments(self, project_key, plan_key, build_number, start_index=0, max_results=25):
resource = "result/{}-{}-{}/comment".format(project_key, plan_key, build_number)
params = {"start-index": start_index, "max-results": max_results}
return self.get(self.resource_url(resource), params=params)
@@ -619,9 +582,7 @@ def create_comment(self, project_key, plan_key, build_number, comment, author=No
}
return self.post(self.resource_url(resource), data=comment_data)
- def labels(
- self, project_key, plan_key, build_number, start_index=0, max_results=25
- ):
+ def labels(self, project_key, plan_key, build_number, start_index=0, max_results=25):
resource = "result/{}-{}-{}/label".format(project_key, plan_key, build_number)
params = {"start-index": start_index, "max-results": max_results}
return self.get(self.resource_url(resource), params=params)
@@ -631,9 +592,7 @@ def create_label(self, project_key, plan_key, build_number, label):
return self.post(self.resource_url(resource), data={"name": label})
def delete_label(self, project_key, plan_key, build_number, label):
- resource = "result/{}-{}-{}/label/{}".format(
- project_key, plan_key, build_number, label
- )
+ resource = "result/{}-{}-{}/label/{}".format(project_key, plan_key, build_number, label)
return self.delete(self.resource_url(resource))
def get_projects(self):
@@ -667,9 +626,7 @@ def deployment_project(self, project_id):
return self.get(self.resource_url(resource))
def deployment_environment_results(self, env_id, expand=None, max_results=25):
- resource = "deploy/environment/{environmentId}/results".format(
- environmentId=env_id
- )
+ resource = "deploy/environment/{environmentId}/results".format(environmentId=env_id)
params = {"max-result": max_results, "start-index": 0}
size = 1
if expand:
@@ -686,11 +643,7 @@ def deployment_dashboard(self, project_id=None):
Returns the current status of each deployment environment
If no project id is provided, returns all projects.
"""
- resource = (
- "deploy/dashboard/{}".format(project_id)
- if project_id
- else "deploy/dashboard"
- )
+ resource = "deploy/dashboard/{}".format(project_id) if project_id else "deploy/dashboard"
return self.get(self.resource_url(resource))
""" Users & Groups """
diff --git a/atlassian/bitbucket/__init__.py b/atlassian/bitbucket/__init__.py
index 7c4b49af4..9fe2a8cb3 100644
--- a/atlassian/bitbucket/__init__.py
+++ b/atlassian/bitbucket/__init__.py
@@ -16,9 +16,7 @@ def __init__(self, url, *args, **kwargs):
if "cloud" not in kwargs and ("bitbucket.org" in url):
kwargs["cloud"] = True
if "api_version" not in kwargs:
- kwargs["api_version"] = (
- "2.0" if "cloud" in kwargs and kwargs["cloud"] else "1.0"
- )
+ kwargs["api_version"] = "2.0" if "cloud" in kwargs and kwargs["cloud"] else "1.0"
if "cloud" in kwargs:
kwargs["api_root"] = "" if "api.bitbucket.org" in url else "api"
super(Bitbucket, self).__init__(url, *args, **kwargs)
@@ -66,19 +64,13 @@ def all_project_administrators(self):
:return: A generator object containing a map with the project_key, project_name and project_administrators
"""
for project in self.project_list():
- log.info(
- "Processing project: {0} - {1}".format(
- project.get("key"), project.get("name")
- )
- )
+ log.info("Processing project: {0} - {1}".format(project.get("key"), project.get("name")))
yield {
"project_key": project.get("key"),
"project_name": project.get("name"),
"project_administrators": [
{"email": x["emailAddress"], "name": x["displayName"]}
- for x in self.project_users_with_administrator_permissions(
- project["key"]
- )
+ for x in self.project_users_with_administrator_permissions(project["key"])
],
}
@@ -201,9 +193,7 @@ def get_associated_build_statuses(self, commit):
:commit: str- commit id
:return:
"""
- url = self.resource_url(
- "commits/{commitId}".format(commitId=commit), api_root="rest/build-status"
- )
+ url = self.resource_url("commits/{commitId}".format(commitId=commit), api_root="rest/build-status")
return self.get(url)
def _url_announcement_banner(self):
@@ -315,9 +305,7 @@ def update_project(self, key, **params):
"""
data = self.project(key)
if "errors" in data:
- log.debug(
- "Failed to update project: {0}: Unable to read project".format(key)
- )
+ log.debug("Failed to update project: {0}: Unable to read project".format(key))
return None
else:
data.update(params)
@@ -415,9 +403,7 @@ def project_users_with_administrator_permissions(self, key):
:return: List of project administrators
"""
project_administrators = [
- user["user"]
- for user in self.project_users(key)
- if user["permission"] == "PROJECT_ADMIN"
+ user["user"] for user in self.project_users(key) if user["permission"] == "PROJECT_ADMIN"
]
for group in self.project_groups_with_administrator_permissions(key):
for user in self.group_members(group):
@@ -499,9 +485,7 @@ def project_remove_group_permissions(self, project_key, groupname):
def _url_project_conditions(self, project_key):
return "{}/conditions".format(
- self._url_project(
- project_key, api_root="rest/default-reviewers", api_version="1.0"
- )
+ self._url_project(project_key, api_root="rest/default-reviewers", api_version="1.0")
)
def get_project_conditions(self, project_key):
@@ -518,9 +502,7 @@ def get_project_conditions(self, project_key):
def _url_project_condition(self, project_key, id_condition=None):
url = "{}/condition".format(
- self._url_project(
- project_key, api_root="rest/default-reviewers", api_version="1.0"
- )
+ self._url_project(project_key, api_root="rest/default-reviewers", api_version="1.0")
)
if id_condition is not None:
url += "/{}".format(id_condition)
@@ -617,9 +599,7 @@ def repo_all_list(self, project_key):
"""
return self.repo_list(project_key, limit=None)
- def create_repo(
- self, project_key, repository_slug, forkable=False, is_private=True
- ):
+ def create_repo(self, project_key, repository_slug, forkable=False, is_private=True):
"""Create a new repository.
Requires an existing project in which this repository will be created. The only parameters which will be used
@@ -667,7 +647,10 @@ def reindex_repo(self, project_key, repository_slug):
"""
url = "{urlRepo}/sync".format(
urlRepo=self._url_repo(
- project_key, repository_slug, api_root="rest/indexing", api_version="1.0"
+ project_key,
+ repository_slug,
+ api_root="rest/indexing",
+ api_version="1.0",
)
)
return self.post(url)
@@ -682,9 +665,7 @@ def reindex_repo_dev_panel(self, project_key, repository_slug):
:param repository_slug:
:return:
"""
- url = "{}/reindex".format(
- self._url_repo(project_key, repository_slug, api_root="rest/jira-dev")
- )
+ url = "{}/reindex".format(self._url_repo(project_key, repository_slug, api_root="rest/jira-dev"))
return self.post(url)
def get_repo(self, project_key, repository_slug):
@@ -820,15 +801,9 @@ def project_groups_with_administrator_permissions(self, key):
:param key:
:return:
"""
- return [
- group["group"]["name"]
- for group in self.project_groups(key)
- if group["permission"] == "PROJECT_ADMIN"
- ]
+ return [group["group"]["name"] for group in self.project_groups(key) if group["permission"] == "PROJECT_ADMIN"]
- def repo_grant_group_permissions(
- self, project_key, repo_key, groupname, permission
- ):
+ def repo_grant_group_permissions(self, project_key, repo_key, groupname, permission):
"""
Grant the specified repository permission to an specific group
Promote or demote a group's permission level for the specified repository. Available repository permissions are:
@@ -850,9 +825,7 @@ def repo_grant_group_permissions(
params = {"permission": permission, "name": groupname}
return self.put(url, params=params)
- def repo_remove_group_permissions(
- self, project_key, repo_key, groupname, permission
- ):
+ def repo_remove_group_permissions(self, project_key, repo_key, groupname, permission):
"""
Revoke all permissions for the specified repository for a group.
The authenticated user must have REPO_ADMIN permission for the specified repository
@@ -901,9 +874,7 @@ def set_repo_label(self, project_key, repository_slug, label_name):
return self.post(url, data=data)
def _url_repo_branches(self, project_key, repository_slug, api_root=None):
- return "{}/branches".format(
- self._url_repo(project_key, repository_slug, api_root=api_root)
- )
+ return "{}/branches".format(self._url_repo(project_key, repository_slug, api_root=api_root))
def get_branches(
self,
@@ -946,9 +917,7 @@ def get_branches(
return self._get_paged(url, params=params)
def _url_repo_default_branche(self, project_key, repository_slug):
- return "{}/default".format(
- self._url_repo_branches(project_key, repository_slug)
- )
+ return "{}/default".format(self._url_repo_branches(project_key, repository_slug))
def get_default_branch(self, project_key, repository_slug):
"""
@@ -974,9 +943,7 @@ def set_default_branch(self, project_key, repository_slug, ref_branch_name):
data = {"id": ref_branch_name}
return self.put(url, data=data)
- def create_branch(
- self, project_key, repository_slug, name, start_point, message=""
- ):
+ def create_branch(self, project_key, repository_slug, name, start_point, message=""):
"""Creates a branch using the information provided in the request.
The authenticated user must have REPO_WRITE permission for the context repository to call this resource.
@@ -1011,12 +978,10 @@ def delete_branch(self, project_key, repository_slug, name, end_point=None):
:param end_point:
:return:
"""
- url = self._url_repo_branches(
- project_key, repository_slug, api_root="rest/branch-utils"
- )
+ url = self._url_repo_branches(project_key, repository_slug, api_root="rest/branch-utils")
data = {"name": str(name)}
if end_point:
- data['endPoint'] = end_point
+ data["endPoint"] = end_point
return self.delete(url, data=data)
def _url_repo_tags(self, project_key, repository_slug, api_root=None):
@@ -1071,9 +1036,7 @@ def get_project_tags(self, project_key, repository_slug, tag_name):
url = self._url_repo_tags(project_key, repository_slug)
return self.get(url)
- def set_tag(
- self, project_key, repository_slug, tag_name, commit_revision, description=None
- ):
+ def set_tag(self, project_key, repository_slug, tag_name, commit_revision, description=None):
"""
Creates a tag using the information provided in the {@link RestCreateTagRequest request}
The authenticated user must have REPO_WRITE permission for the context repository to call this resource.
@@ -1103,14 +1066,15 @@ def delete_tag(self, project_key, repository_slug, tag_name):
:param tag_name:
:return:
"""
- url = "{}/{}".format(self._url_repo_tags(project_key, repository_slug, api_root="rest/git"), tag_name)
+ url = "{}/{}".format(
+ self._url_repo_tags(project_key, repository_slug, api_root="rest/git"),
+ tag_name,
+ )
(project_key, repository_slug, tag_name)
return self.delete(url)
def _url_pull_request_settings(self, project_key, repository_slug):
- return "{}/settings/pull-requests".format(
- self._url_repo(project_key, repository_slug)
- )
+ return "{}/settings/pull-requests".format(self._url_repo(project_key, repository_slug))
def get_pull_request_settings(self, project_key, repository_slug):
"""
@@ -1135,13 +1099,9 @@ def set_pull_request_settings(self, project_key, repository_slug, data):
def _url_pull_requests(self, project_key, repository_slug):
if Cloud:
- return self.resource_url(
- "repositories/{}/{}/pullrequests".format(project_key, repository_slug)
- )
+ return self.resource_url("repositories/{}/{}/pullrequests".format(project_key, repository_slug))
else:
- return "{}/pull-requests".format(
- self._url_repo(project_key, repository_slug)
- )
+ return "{}/pull-requests".format(self._url_repo(project_key, repository_slug))
def get_pull_requests(
self,
@@ -1253,9 +1213,7 @@ def create_pull_request(self, project_key, repository_slug, data):
return self.post(url, data=data)
def _url_pull_request(self, project_key, repository_slug, pull_request_id):
- return "{}/{}".format(
- self._url_pull_requests(project_key, repository_slug), pull_request_id
- )
+ return "{}/{}".format(self._url_pull_requests(project_key, repository_slug), pull_request_id)
def get_pull_request(self, project_key, repository_slug, pull_request_id):
"""
@@ -1277,9 +1235,7 @@ def get_pullrequest(self, *args, **kwargs):
"""
return self.get_pull_request(*args, **kwargs)
- def delete_pull_request(
- self, project_key, repository_slug, pull_request_id, pull_request_version
- ):
+ def delete_pull_request(self, project_key, repository_slug, pull_request_id, pull_request_version):
"""
Delete a pull request.
@@ -1293,9 +1249,7 @@ def delete_pull_request(
data = {"version": pull_request_version}
return self.delete(url, data=data)
- def get_pull_requests_activities(
- self, project_key, repository_slug, pull_request_id, start=0, limit=None
- ):
+ def get_pull_requests_activities(self, project_key, repository_slug, pull_request_id, start=0, limit=None):
"""
Get pull requests activities
:param project_key:
@@ -1304,9 +1258,7 @@ def get_pull_requests_activities(
:param start:
:return:
"""
- url = "{}/activities".format(
- self._url_pull_request(project_key, repository_slug, pull_request_id)
- )
+ url = "{}/activities".format(self._url_pull_request(project_key, repository_slug, pull_request_id))
params = {}
if start:
params["start"] = start
@@ -1314,9 +1266,7 @@ def get_pull_requests_activities(
params["limit"] = limit
return self._get_paged(url, params)
- def get_pull_requests_changes(
- self, project_key, repository_slug, pull_request_id, start=0, limit=None
- ):
+ def get_pull_requests_changes(self, project_key, repository_slug, pull_request_id, start=0, limit=None):
"""
Get pull requests changes
:param project_key:
@@ -1324,9 +1274,7 @@ def get_pull_requests_changes(
:param pull_request_id: the ID of the pull request within the repository
:return:
"""
- url = "{}/changes".format(
- self._url_pull_request(project_key, repository_slug, pull_request_id)
- )
+ url = "{}/changes".format(self._url_pull_request(project_key, repository_slug, pull_request_id))
params = {}
if start:
params["start"] = start
@@ -1334,9 +1282,7 @@ def get_pull_requests_changes(
params["limit"] = limit
return self._get_paged(url, params)
- def get_pull_requests_commits(
- self, project_key, repository_slug, pull_request_id, start=0, limit=None
- ):
+ def get_pull_requests_commits(self, project_key, repository_slug, pull_request_id, start=0, limit=None):
"""
Get pull requests commits
:param project_key:
@@ -1346,9 +1292,7 @@ def get_pull_requests_commits(
:limit
:return:
"""
- url = "{}/commits".format(
- self._url_pull_request(project_key, repository_slug, pull_request_id)
- )
+ url = "{}/commits".format(self._url_pull_request(project_key, repository_slug, pull_request_id))
params = {}
if start:
params["start"] = start
@@ -1356,16 +1300,10 @@ def get_pull_requests_commits(
params["limit"] = limit
return self._get_paged(url, params)
- def _url_pull_request_participants(
- self, project_key, repository_slug, pull_request_id
- ):
- return "{}/{}/participants".format(
- self._url_pull_requests(project_key, repository_slug), pull_request_id
- )
+ def _url_pull_request_participants(self, project_key, repository_slug, pull_request_id):
+ return "{}/{}/participants".format(self._url_pull_requests(project_key, repository_slug), pull_request_id)
- def get_pull_requests_participants(
- self, project_key, repository_slug, pull_request_id, start=0, limit=None
- ):
+ def get_pull_requests_participants(self, project_key, repository_slug, pull_request_id, start=0, limit=None):
"""
Get all participants of a pull request
:param project_key:
@@ -1373,9 +1311,7 @@ def get_pull_requests_participants(
:param pull_request_id:
:return:
"""
- url = self._url_pull_request_participants(
- project_key, repository_slug, pull_request_id
- )
+ url = self._url_pull_request_participants(project_key, repository_slug, pull_request_id)
params = {}
if start:
params["start"] = start
@@ -1383,9 +1319,7 @@ def get_pull_requests_participants(
params["limit"] = limit
return self._get_paged(url, params)
- def change_reviewed_status(
- self, project_key, repository_slug, pull_request_id, status, user_slug
- ):
+ def change_reviewed_status(self, project_key, repository_slug, pull_request_id, status, user_slug):
"""
Change the current user's status for a pull request.
Implicitly adds the user as a participant if they are not already.
@@ -1398,9 +1332,7 @@ def change_reviewed_status(
:return:
"""
url = "{}/{}".format(
- self._url_pull_request_participants(
- project_key, repository_slug, pull_request_id
- ),
+ self._url_pull_request_participants(project_key, repository_slug, pull_request_id),
user_slug,
)
approved = True if status == "APPROVED" else False
@@ -1408,14 +1340,10 @@ def change_reviewed_status(
return self.put(url, data)
def _url_pull_request_comments(self, project_key, repository_slug, pull_request_id):
- url = "{}/comments".format(
- self._url_pull_request(project_key, repository_slug, pull_request_id)
- )
+ url = "{}/comments".format(self._url_pull_request(project_key, repository_slug, pull_request_id))
return url
- def add_pull_request_comment(
- self, project_key, repository_slug, pull_request_id, text, parent_id=None
- ):
+ def add_pull_request_comment(self, project_key, repository_slug, pull_request_id, text, parent_id=None):
"""
Add comment into pull request
:param project_key:
@@ -1426,26 +1354,20 @@ def add_pull_request_comment(
:return:
"""
- url = self._url_pull_request_comments(
- project_key, repository_slug, pull_request_id
- )
+ url = self._url_pull_request_comments(project_key, repository_slug, pull_request_id)
body = {"text": text}
if parent_id:
body["parent"] = {"id": parent_id}
return self.post(url, data=body)
- def _url_pull_request_comment(
- self, project_key, repository_slug, pull_request_id, comment_id
- ):
+ def _url_pull_request_comment(self, project_key, repository_slug, pull_request_id, comment_id):
url = "{}/{}".format(
self._url_pull_request_comments(project_key, repository_slug, pull_request_id),
comment_id,
)
return url
- def get_pull_request_comment(
- self, project_key, repository_slug, pull_request_id, comment_id
- ):
+ def get_pull_request_comment(self, project_key, repository_slug, pull_request_id, comment_id):
"""
Retrieves a pull request comment.
The authenticated user must have REPO_READ permission
@@ -1456,9 +1378,7 @@ def get_pull_request_comment(
:param comment_id: the ID of the comment to retrieve
:return:
"""
- url = self._url_pull_request_comment(
- project_key, repository_slug, pull_request_id, comment_id
- )
+ url = self._url_pull_request_comment(project_key, repository_slug, pull_request_id, comment_id)
return self.get(url)
def update_pull_request_comment(
@@ -1478,9 +1398,7 @@ def update_pull_request_comment(
that must match the server's version of the comment
or the update will fail.
"""
- url = self._url_pull_request_comment(
- project_key, repository_slug, pull_request_id, comment_id
- )
+ url = self._url_pull_request_comment(project_key, repository_slug, pull_request_id, comment_id)
data = {"version": comment_version, "text": comment}
return self.put(url, data=data)
@@ -1512,9 +1430,7 @@ def get_tasks(self, project_key, repository_slug, pull_request_id):
"""
if Cloud:
raise Exception("Not supported in Bitbucket Cloud")
- url = "{}/tasks".format(
- self._url_pull_request(project_key, repository_slug, pull_request_id)
- )
+ url = "{}/tasks".format(self._url_pull_request(project_key, repository_slug, pull_request_id))
return self.get(url)
def _url_tasks(self):
@@ -1584,9 +1500,7 @@ def is_pull_request_can_be_merged(self, project_key, repository_slug, pr_id):
:param pr_id: 2341
:return:
"""
- url = "{}/merge".format(
- self._url_pull_request(project_key, repository_slug, pr_id)
- )
+ url = "{}/merge".format(self._url_pull_request(project_key, repository_slug, pr_id))
return self.get(url)
def merge_pull_request(self, project_key, repository_slug, pr_id, pr_version):
@@ -1601,9 +1515,7 @@ def merge_pull_request(self, project_key, repository_slug, pr_id, pr_version):
:param pr_version:
:return:
"""
- url = "{}/merge".format(
- self._url_pull_request(project_key, repository_slug, pr_id)
- )
+ url = "{}/merge".format(self._url_pull_request(project_key, repository_slug, pr_id))
params = {}
if not Cloud:
params["version"] = pr_version
@@ -1621,9 +1533,7 @@ def reopen_pull_request(self, project_key, repository_slug, pr_id, pr_version):
:param pr_version: 12
:return:
"""
- url = "{}/reopen".format(
- self._url_pull_request(project_key, repository_slug, pr_id)
- )
+ url = "{}/reopen".format(self._url_pull_request(project_key, repository_slug, pr_id))
params = {"version": pr_version}
return self.post(url, params=params)
@@ -1666,9 +1576,7 @@ def get_diff(self, project_key, repository_slug, path, hash_oldest, hash_newest)
:param hash_newest: the target commit (can be a partial/full commit ID or qualified/unqualified ref name)
:return:
"""
- url = "{}/diff/{}".format(
- self._url_repo_compare(project_key, repository_slug), path
- )
+ url = "{}/diff/{}".format(self._url_repo_compare(project_key, repository_slug), path)
params = {}
if hash_oldest:
params["from"] = hash_oldest
@@ -1677,7 +1585,9 @@ def get_diff(self, project_key, repository_slug, path, hash_oldest, hash_newest)
return (self.get(url, params=params) or {}).get("diffs")
def _url_commits(self, project_key, repository_slug, api_root=None, api_version=None):
- return "{}/commits".format(self._url_repo(project_key, repository_slug, api_root=api_root, api_version=api_version))
+ return "{}/commits".format(
+ self._url_repo(project_key, repository_slug, api_root=api_root, api_version=api_version)
+ )
def get_commits(
self,
@@ -1729,9 +1639,7 @@ def get_commits(
params["limit"] = limit
return (self.get(url, params=params) or {}).get("values")
- def get_changelog(
- self, project_key, repository_slug, ref_from, ref_to, start=0, limit=None
- ):
+ def get_changelog(self, project_key, repository_slug, ref_from, ref_to, start=0, limit=None):
"""
Get change log between 2 refs
:param project_key:
@@ -1756,7 +1664,8 @@ def get_changelog(
def _url_commit(self, project_key, repository_slug, commit_id, api_root=None, api_version=None):
return "{}/{}".format(
- self._url_commits(project_key, repository_slug, api_root=api_root, api_version=api_version), commit_id
+ self._url_commits(project_key, repository_slug, api_root=api_root, api_version=api_version),
+ commit_id,
)
def get_commit_info(self, project_key, repository_slug, commit, path=None):
@@ -1784,16 +1693,19 @@ def get_pull_requests_contain_commit(self, project_key, repository_slug, commit)
url = self._url_commit(project_key, repository_slug, commit)
return (self.get(url) or {}).get("values")
- def _url_code_insights_report(
- self, project_key, repository_slug, commit_id, report_key
- ):
+ def _url_code_insights_report(self, project_key, repository_slug, commit_id, report_key):
return "{}/reports/{}".format(
- self._url_commit(project_key, repository_slug, commit_id, api_root="rest/insights", api_version="1.0"), report_key
+ self._url_commit(
+ project_key,
+ repository_slug,
+ commit_id,
+ api_root="rest/insights",
+ api_version="1.0",
+ ),
+ report_key,
)
- def get_code_insights_report(
- self, project_key, repository_slug, commit_id, report_key
- ):
+ def get_code_insights_report(self, project_key, repository_slug, commit_id, report_key):
"""
Retrieve the specified code-insights report.
:projectKey: str
@@ -1801,14 +1713,10 @@ def get_code_insights_report(
:commitId: str
:report_key: str
"""
- url = self._url_code_insights_report(
- project_key, repository_slug, commit_id, report_key
- )
+ url = self._url_code_insights_report(project_key, repository_slug, commit_id, report_key)
return self.get(url)
- def delete_code_insights_report(
- self, project_key, repository_slug, commit_id, report_key
- ):
+ def delete_code_insights_report(self, project_key, repository_slug, commit_id, report_key):
"""
Delete a report for the given commit. Also deletes any annotations associated with this report.
:projectKey: str
@@ -1816,19 +1724,11 @@ def delete_code_insights_report(
:commitId: str
:report_key: str
"""
- url = self._url_code_insights_report(
- project_key, repository_slug, commit_id, report_key
- )
+ url = self._url_code_insights_report(project_key, repository_slug, commit_id, report_key)
return self.delete(url)
def create_code_insights_report(
- self,
- project_key,
- repository_slug,
- commit_id,
- report_key,
- report_title,
- **report_params
+ self, project_key, repository_slug, commit_id, report_key, report_title, **report_params
):
"""
Create a new insight report, or replace the existing one
@@ -1844,16 +1744,12 @@ def create_code_insights_report(
:report_title: str
:report_params:
"""
- url = self._url_code_insights_report(
- project_key, repository_slug, commit_id, report_key
- )
+ url = self._url_code_insights_report(project_key, repository_slug, commit_id, report_key)
data = {"title": report_title}
data.update(report_params)
return self.put(url, data=data)
- def get_file_list(
- self, project_key, repository_slug, query=None, start=0, limit=None
- ):
+ def get_file_list(self, project_key, repository_slug, query=None, start=0, limit=None):
"""
Retrieve a page of files from particular directory of a repository.
The search is done recursively, so all files from any sub-directory of the specified directory will be returned.
@@ -1875,9 +1771,7 @@ def get_file_list(
params["limit"] = limit
return self._get_paged(url, params=params)
- def get_content_of_file(
- self, project_key, repository_slug, filename, at=None, markup=None
- ):
+ def get_content_of_file(self, project_key, repository_slug, filename, at=None, markup=None):
"""
Retrieve the raw content for a file path at a specified revision.
The authenticated user must have REPO_READ permission for the specified repository to call this resource.
@@ -1898,13 +1792,9 @@ def get_content_of_file(
headers = self.form_token_headers
return self.get(url, params=params, not_json_response=True, headers=headers)
- def _url_branches_permissions(
- self, project_key, permission_id=None, repository_slug=None
- ):
+ def _url_branches_permissions(self, project_key, permission_id=None, repository_slug=None):
if repository_slug is None:
- base = self._url_project(
- project_key, api_root="rest/branch-permissions", api_version="2.0"
- )
+ base = self._url_project(project_key, api_root="rest/branch-permissions", api_version="2.0")
else:
base = self._url_repo(
project_key,
@@ -1913,13 +1803,9 @@ def _url_branches_permissions(
api_version="2.0",
)
- return "{}/restrictions/{}".format(
- base, "" if permission_id is None else str(permission_id)
- )
+ return "{}/restrictions/{}".format(base, "" if permission_id is None else str(permission_id))
- def get_branches_permissions(
- self, project_key, permission_id, repository_slug=None, start=0, limit=25
- ):
+ def get_branches_permissions(self, project_key, permission_id, repository_slug=None, start=0, limit=25):
"""
Get branches permissions from a given repo
:param project_key:
@@ -1929,9 +1815,7 @@ def get_branches_permissions(
:param limit:
:return:
"""
- url = self._url_branches_permissions(
- project_key, permission_id, repository_slug
- )
+ url = self._url_branches_permissions(project_key, permission_id, repository_slug)
params = {}
if limit:
params["limit"] = limit
@@ -1972,9 +1856,7 @@ def set_branches_permissions(
:param limit:
:return:
"""
- url = self._url_branches_permissions(
- project_key=project_key, repository_slug=repository_slug
- )
+ url = self._url_branches_permissions(project_key=project_key, repository_slug=repository_slug)
if except_users is None:
except_users = []
if except_groups is None:
@@ -2004,9 +1886,7 @@ def set_branches_permissions(
params = {"start": start, "limit": limit}
return self.post(url, data=restriction, params=params, headers=headers)
- def delete_branch_permission(
- self, project_key, permission_id, repository_slug=None
- ):
+ def delete_branch_permission(self, project_key, permission_id, repository_slug=None):
"""
Deletes a restriction as specified by a restriction id.
The authenticated user must have REPO_ADMIN permission or higher to call this resource.
@@ -2016,9 +1896,7 @@ def delete_branch_permission(
:param permission_id:
:return:
"""
- url = self._url_branches_permissions(
- project_key, permission_id, repository_slug
- )
+ url = self._url_branches_permissions(project_key, permission_id, repository_slug)
return self.delete(url)
def get_branch_permission(self, project_key, permission_id, repository_slug=None):
@@ -2031,14 +1909,10 @@ def get_branch_permission(self, project_key, permission_id, repository_slug=None
:param permission_id:
:return:
"""
- url = self._url_branches_permissions(
- project_key, permission_id, repository_slug
- )
+ url = self._url_branches_permissions(project_key, permission_id, repository_slug)
return self.get(url)
- def all_branches_permissions(
- self, project_key, permission_id, repository_slug=None
- ):
+ def all_branches_permissions(self, project_key, permission_id, repository_slug=None):
"""
Get branches permissions from a given repo
:param project_key:
@@ -2046,16 +1920,12 @@ def all_branches_permissions(
:param repository_slug:
:return:
"""
- url = self._url_branches_permissions(
- project_key, permission_id, repository_slug
- )
+ url = self._url_branches_permissions(project_key, permission_id, repository_slug)
return self._get_paged(url)
def _url_branching_model(self, project_key, repository_slug):
return self.resource_url(
- "{}/branchmodel/configuration".format(
- self._url_repo(project_key, repository_slug)
- ),
+ "{}/branchmodel/configuration".format(self._url_repo(project_key, repository_slug)),
api_root="rest/branch-utils",
api_version="1.0",
)
@@ -2117,9 +1987,7 @@ def enable_branching_model(self, project_key, repository_slug):
},
],
}
- return self.set_branching_model(
- project_key, repository_slug, default_model_data
- )
+ return self.set_branching_model(project_key, repository_slug, default_model_data)
def disable_branching_model(self, project_key, repository_slug):
"""
@@ -2131,13 +1999,9 @@ def disable_branching_model(self, project_key, repository_slug):
return self.delete(self._url_branching_model(project_key, repository_slug))
def _url_file(self, project_key, repository_slug, filename):
- return "{}/browse/{}".format(
- self._url_repo(project_key, repository_slug), filename
- )
+ return "{}/browse/{}".format(self._url_repo(project_key, repository_slug), filename)
- def upload_file(
- self, project_key, repository_slug, content, message, branch, filename
- ):
+ def upload_file(self, project_key, repository_slug, content, message, branch, filename):
"""
Upload new file for given branch.
:param project_key:
@@ -2189,9 +2053,7 @@ def search_code(self, team, search_query, page=1, limit=10):
:search_query: str
"""
url = self.resource_url("teams/{team}/search/code".format(team=team))
- return self.get(
- url, params={"search_query": search_query, "page": page, "pagelen": limit}
- )
+ return self.get(url, params={"search_query": search_query, "page": page, "pagelen": limit})
def get_lfs_repo_status(self, project_key, repo):
url = "rest/git-lfs/git-lfs/admin/projects/{projectKey}/repos/{repositorySlug}/enabled".format(
@@ -2202,7 +2064,10 @@ def get_lfs_repo_status(self, project_key, repo):
def _url_repo_conditions(self, project_key, repo_key):
return "{}/conditions".format(
self._url_repo(
- project_key, repo_key, api_root="rest/default-reviewers", api_version="1.0"
+ project_key,
+ repo_key,
+ api_root="rest/default-reviewers",
+ api_version="1.0",
)
)
@@ -2261,7 +2126,10 @@ def get_repo_repo_conditions(self, project_key, repo_key):
def _url_repo_condition(self, project_key, repo_key, id_condition=None):
return "{}/condition/{}".format(
self._url_repo(
- project_key, repo_key, api_root="rest/default-reviewers", api_version="1.0"
+ project_key,
+ repo_key,
+ api_root="rest/default-reviewers",
+ api_version="1.0",
),
"" if id_condition is None else str(id_condition),
)
@@ -2360,9 +2228,7 @@ def get_repositories(self, workspace, role=None, query=None, sort=None):
version="2.0.2",
reason="Use atlassion.bitbucket.cloud instead of atlassian.bitbucket",
)
- def get_pipelines(
- self, workspace, repository_slug, number=10, sort_by="-created_on"
- ):
+ def get_pipelines(self, workspace, repository_slug, number=10, sort_by="-created_on"):
"""
Get information about latest pipelines runs.
@@ -2387,9 +2253,7 @@ def get_pipelines(
version="2.0.2",
reason="Use atlassion.bitbucket.cloud instead of atlassian.bitbucket",
)
- def trigger_pipeline(
- self, workspace, repository_slug, branch="master", revision=None, name=None
- ):
+ def trigger_pipeline(self, workspace, repository_slug, branch="master", revision=None, name=None):
"""
Trigger a new pipeline. The following options are possible (1 and 2
trigger the pipeline that the branch is associated with in the Pipelines
@@ -2487,9 +2351,7 @@ def get_pipeline_step(self, workspace, repository_slug, pipeline_uuid, step_uuid
version="2.0.2",
reason="Use atlassion.bitbucket.cloud instead of atlassian.bitbucket",
)
- def get_pipeline_step_log(
- self, workspace, repository_slug, pipeline_uuid, step_uuid
- ):
+ def get_pipeline_step_log(self, workspace, repository_slug, pipeline_uuid, step_uuid):
"""
Get log of a step of a pipeline, specified by respective UUIDs.
:param pipeline_uuid: Pipeline identifier (with surrounding {}; NOT the build number)
@@ -2527,9 +2389,7 @@ def create_issue(
Cloud(self.url, **self._new_session_args)
.workspaces.get(workspace)
.repositories.get(repository_slug)
- .issues.create(
- title=title, description=description, kind=kind, priority=priority
- )
+ .issues.create(title=title, description=description, kind=kind, priority=priority)
.data
)
@@ -2663,9 +2523,7 @@ def add_branch_restriction(
version="2.0.2",
reason="Use atlassion.bitbucket.cloud instead of atlassian.bitbucket",
)
- def get_branch_restrictions(
- self, workspace, repository_slug, kind=None, pattern=None, number=10
- ):
+ def get_branch_restrictions(self, workspace, repository_slug, kind=None, pattern=None, number=10):
"""
Get all branch permissions.
"""
diff --git a/atlassian/bitbucket/base.py b/atlassian/bitbucket/base.py
index a3012ab81..305c88bed 100644
--- a/atlassian/bitbucket/base.py
+++ b/atlassian/bitbucket/base.py
@@ -21,9 +21,7 @@ def __init__(self, url, *args, **kwargs):
expected_type = kwargs.pop("expected_type")
if not self.get_data("type") == expected_type:
raise ValueError(
- "Expected type of data is [{}], got [{}].".format(
- expected_type, self.get_data("type")
- )
+ "Expected type of data is [{}], got [{}].".format(expected_type, self.get_data("type"))
)
if url is None:
url = self.get_link("self")
diff --git a/atlassian/bitbucket/cloud/__init__.py b/atlassian/bitbucket/cloud/__init__.py
index b59f4dcce..dc852e018 100644
--- a/atlassian/bitbucket/cloud/__init__.py
+++ b/atlassian/bitbucket/cloud/__init__.py
@@ -14,12 +14,8 @@ def __init__(self, url, *args, **kwargs):
kwargs["api_version"] = "2.0"
url = url.strip("/") + "/{}".format(kwargs["api_version"])
super(Cloud, self).__init__(url, *args, **kwargs)
- self.__workspaces = Workspaces(
- "{}/workspaces".format(self.url), **self._new_session_args
- )
- self.__repositories = Repositories(
- "{}/repositories".format(self.url), **self._new_session_args
- )
+ self.__workspaces = Workspaces("{}/workspaces".format(self.url), **self._new_session_args)
+ self.__repositories = Repositories("{}/repositories".format(self.url), **self._new_session_args)
@property
def workspaces(self):
diff --git a/atlassian/bitbucket/cloud/base.py b/atlassian/bitbucket/cloud/base.py
index 4280aaca7..f6114d2db 100644
--- a/atlassian/bitbucket/cloud/base.py
+++ b/atlassian/bitbucket/cloud/base.py
@@ -15,9 +15,7 @@ def __init__(self, url, *args, **kwargs):
"""
super(BitbucketCloudBase, self).__init__(url, *args, **kwargs)
- def _get_paged(
- self, url, params={}, data=None, flags=None, trailing=None, absolute=False
- ):
+ def _get_paged(self, url, params={}, data=None, flags=None, trailing=None, absolute=False):
"""
Used to get the paged data
:param url: The url to retrieve.
diff --git a/atlassian/bitbucket/cloud/repositories/__init__.py b/atlassian/bitbucket/cloud/repositories/__init__.py
index 7c0ddb888..45475767e 100644
--- a/atlassian/bitbucket/cloud/repositories/__init__.py
+++ b/atlassian/bitbucket/cloud/repositories/__init__.py
@@ -109,11 +109,7 @@ def get(self, repository, by="slug"):
if r.name == repository:
return r
else:
- ValueError(
- "Unknown value '{}' for argument [by], expected 'key' or 'name'".format(
- by
- )
- )
+ ValueError("Unknown value '{}' for argument [by], expected 'key' or 'name'".format(by))
raise Exception("Unknown repository {} '{}'".format(by, repository))
@@ -148,16 +144,10 @@ def get(self, repository, by="slug"):
:return: The requested Repository object
"""
if by not in ("slug", "name"):
- ValueError(
- "Unknown value '{}' for argument [by], expected 'slug' or 'name'".format(
- by
- )
- )
+ ValueError("Unknown value '{}' for argument [by], expected 'slug' or 'name'".format(by))
for r in self.each():
- if ((by == "slug") and (r.slug == repository)) or (
- (by == "name") and (r.name == repository)
- ):
+ if ((by == "slug") and (r.slug == repository)) or ((by == "name") and (r.name == repository)):
return r
raise Exception("Unknown repository {} '{}'".format(by, repository))
@@ -165,19 +155,13 @@ def get(self, repository, by="slug"):
class Repository(BitbucketCloudBase):
def __init__(self, data, *args, **kwargs):
- super(Repository, self).__init__(
- None, *args, data=data, expected_type="repository", **kwargs
- )
+ super(Repository, self).__init__(None, *args, data=data, expected_type="repository", **kwargs)
self.__branch_restrictions = BranchRestrictions(
"{}/branch-restrictions".format(self.url), **self._new_session_args
)
- self.__default_reviewers = DefaultReviewers(
- "{}/default-reviewers".format(self.url), **self._new_session_args
- )
+ self.__default_reviewers = DefaultReviewers("{}/default-reviewers".format(self.url), **self._new_session_args)
self.__issues = Issues("{}/issues".format(self.url), **self._new_session_args)
- self.__pipelines = Pipelines(
- "{}/pipelines".format(self.url), **self._new_session_args
- )
+ self.__pipelines = Pipelines("{}/pipelines".format(self.url), **self._new_session_args)
@property
def branch_restrictions(self):
diff --git a/atlassian/bitbucket/cloud/repositories/branchRestrictions.py b/atlassian/bitbucket/cloud/repositories/branchRestrictions.py
index 228ce4e37..62c07dc79 100644
--- a/atlassian/bitbucket/cloud/repositories/branchRestrictions.py
+++ b/atlassian/bitbucket/cloud/repositories/branchRestrictions.py
@@ -105,9 +105,7 @@ def get(self, id):
class BranchRestriction(BitbucketCloudBase):
def __init__(self, data, *args, **kwargs):
- super(BranchRestriction, self).__init__(
- None, *args, data=data, expected_type="branchrestriction", **kwargs
- )
+ super(BranchRestriction, self).__init__(None, *args, data=data, expected_type="branchrestriction", **kwargs)
@property
def id(self):
@@ -146,9 +144,7 @@ def update(self, **kwargs):
Updates an existing branch restriction rule.
Fields not present in the request body are ignored.
"""
- self.__data = super(BranchRestriction, self).put(
- self.url, absolute=True, data=kwargs
- )
+ self.__data = super(BranchRestriction, self).put(self.url, absolute=True, data=kwargs)
return self
def delete(self):
diff --git a/atlassian/bitbucket/cloud/repositories/defaultReviewers.py b/atlassian/bitbucket/cloud/repositories/defaultReviewers.py
index 61aa7fa2a..1a4737ea4 100644
--- a/atlassian/bitbucket/cloud/repositories/defaultReviewers.py
+++ b/atlassian/bitbucket/cloud/repositories/defaultReviewers.py
@@ -72,9 +72,7 @@ def get(self, user):
class DefaultReviewer(BitbucketCloudBase):
def __init__(self, data, *args, **kwargs):
- super(DefaultReviewer, self).__init__(
- None, *args, data=data, expected_type="user", **kwargs
- )
+ super(DefaultReviewer, self).__init__(None, *args, data=data, expected_type="user", **kwargs)
@property
def display_name(self):
diff --git a/atlassian/bitbucket/cloud/repositories/issues.py b/atlassian/bitbucket/cloud/repositories/issues.py
index 5d6d21b0e..c2e10ad17 100644
--- a/atlassian/bitbucket/cloud/repositories/issues.py
+++ b/atlassian/bitbucket/cloud/repositories/issues.py
@@ -65,9 +65,7 @@ def get(self, id):
class Issue(BitbucketCloudBase):
def __init__(self, data, *args, **kwargs):
- super(Issue, self).__init__(
- None, *args, data=data, expected_type="issue", **kwargs
- )
+ super(Issue, self).__init__(None, *args, data=data, expected_type="issue", **kwargs)
@property
def id(self):
diff --git a/atlassian/bitbucket/cloud/repositories/pipelines.py b/atlassian/bitbucket/cloud/repositories/pipelines.py
index 7d6e24e7d..0ef0abab5 100644
--- a/atlassian/bitbucket/cloud/repositories/pipelines.py
+++ b/atlassian/bitbucket/cloud/repositories/pipelines.py
@@ -94,16 +94,12 @@ def trigger(self, branch="master", commit=None, pattern=None, variables=None):
class Pipeline(BitbucketCloudBase):
def __init__(self, data, *args, **kwargs):
- super(Pipeline, self).__init__(
- None, *args, data=data, expected_type="pipeline", **kwargs
- )
+ super(Pipeline, self).__init__(None, *args, data=data, expected_type="pipeline", **kwargs)
def _get_object(self, data):
if "errors" in data:
return
- return Step(
- "{}/steps/{}".format(self.url, data["uuid"]), data, **self._new_session_args
- )
+ return Step("{}/steps/{}".format(self.url, data["uuid"]), data, **self._new_session_args)
@property
def uuid(self):
@@ -150,9 +146,7 @@ def step(self, uuid):
class Step(BitbucketCloudBase):
def __init__(self, url, data, *args, **kwargs):
- super(Step, self).__init__(
- url, *args, data=data, expected_type="pipeline_step", **kwargs
- )
+ super(Step, self).__init__(url, *args, data=data, expected_type="pipeline_step", **kwargs)
@property
def uuid(self):
@@ -197,9 +191,7 @@ def log(self, start=None, end=None):
the overall size and the byte representation of the requested range.
"""
headers = {"Accept": "application/octet-stream"}
- if ((start is not None) and (end is None)) or (
- (start is None) and (end is not None)
- ):
+ if ((start is not None) and (end is None)) or ((start is None) and (end is not None)):
raise ValueError("For a range [start] and [end] are needed.")
if start is not None:
start = int(start)
@@ -207,9 +199,7 @@ def log(self, start=None, end=None):
if (start >= 0) and (start < end):
headers["Range"] = "bytes={}-{}".format(start, end)
else:
- raise ValueError(
- "Value of [start] must be o or greater and [end] must be greater than [start]."
- )
+ raise ValueError("Value of [start] must be o or greater and [end] must be greater than [start].")
response = None
try:
diff --git a/atlassian/bitbucket/cloud/workspaces/__init__.py b/atlassian/bitbucket/cloud/workspaces/__init__.py
index 9df3c08b6..775a8a773 100644
--- a/atlassian/bitbucket/cloud/workspaces/__init__.py
+++ b/atlassian/bitbucket/cloud/workspaces/__init__.py
@@ -58,13 +58,9 @@ def get(self, workspace):
class Workspace(BitbucketCloudBase):
def __init__(self, data, *args, **kwargs):
- super(Workspace, self).__init__(
- None, *args, data=data, expected_type="workspace", **kwargs
- )
+ super(Workspace, self).__init__(None, *args, data=data, expected_type="workspace", **kwargs)
self.__projects = Projects(self.get_link("projects"), **self._new_session_args)
- self.__repositories = WorkspaceRepositories(
- self.get_link("repositories"), **self._new_session_args
- )
+ self.__repositories = WorkspaceRepositories(self.get_link("repositories"), **self._new_session_args)
@property
def projects(self):
diff --git a/atlassian/bitbucket/cloud/workspaces/projects.py b/atlassian/bitbucket/cloud/workspaces/projects.py
index c0a834bcc..e879b20ae 100644
--- a/atlassian/bitbucket/cloud/workspaces/projects.py
+++ b/atlassian/bitbucket/cloud/workspaces/projects.py
@@ -84,27 +84,19 @@ def get(self, project, by="key"):
if p.name == project:
return p
else:
- ValueError(
- "Unknown value '{}' for argument [by], expected 'key' or 'name'".format(
- by
- )
- )
+ ValueError("Unknown value '{}' for argument [by], expected 'key' or 'name'".format(by))
raise Exception("Unknown project {} '{}'".format(by, project))
class Project(BitbucketCloudBase):
def __init__(self, data, *args, **kwargs):
- super(Project, self).__init__(
- None, *args, data=data, expected_type="project", **kwargs
- )
+ super(Project, self).__init__(None, *args, data=data, expected_type="project", **kwargs)
try:
url = self.get_link("repositories")
except KeyError:
workspace = self.get_data("workspace")
- url = '{}/?q=project.key="{}"'.format(
- workspace["links"]["self"], workspace["slug"]
- )
+ url = '{}/?q=project.key="{}"'.format(workspace["links"]["self"], workspace["slug"])
self.__repositories = ProjectRepositories(url, **self._new_session_args)
@property
diff --git a/atlassian/confluence.py b/atlassian/confluence.py
index db8930a46..a2830c5fb 100644
--- a/atlassian/confluence.py
+++ b/atlassian/confluence.py
@@ -40,30 +40,20 @@ def __init__(self, url, *args, **kwargs):
@staticmethod
def _create_body(body, representation):
if representation not in ["editor", "export_view", "view", "storage", "wiki"]:
- raise ValueError(
- "Wrong value for representation, it should be either wiki or storage"
- )
+ raise ValueError("Wrong value for representation, it should be either wiki or storage")
return {representation: {"value": body, "representation": representation}}
def page_exists(self, space, title):
try:
if self.get_page_by_title(space, title):
- log.info(
- 'Page "{title}" already exists in space "{space}"'.format(
- space=space, title=title
- )
- )
+ log.info('Page "{title}" already exists in space "{space}"'.format(space=space, title=title))
return True
else:
log.info("Page does not exist because did not find by title search")
return False
except (HTTPError, KeyError, IndexError):
- log.info(
- 'Page "{title}" does not exist in space "{space}"'.format(
- space=space, title=title
- )
- )
+ log.info('Page "{title}" does not exist in space "{space}"'.format(space=space, title=title))
return False
def get_page_child_by_type(self, page_id, type="page", start=None, limit=None):
@@ -81,9 +71,7 @@ def get_page_child_by_type(self, page_id, type="page", start=None, limit=None):
if limit is not None:
params["limit"] = int(limit)
- url = "rest/api/content/{page_id}/child/{type}".format(
- page_id=page_id, type=type
- )
+ url = "rest/api/content/{page_id}/child/{type}".format(page_id=page_id, type=type)
log.info(url)
try:
@@ -154,12 +142,9 @@ def get_parent_content_id(self, page_id):
"""
parent_content_id = None
try:
- parent_content_id = (
- self.get_page_by_id(page_id=page_id, expand="ancestors").get(
- "ancestors"
- )
- or {}
- )[-1].get("id") or None
+ parent_content_id = (self.get_page_by_id(page_id=page_id, expand="ancestors").get("ancestors") or {})[
+ -1
+ ].get("id") or None
except Exception as e:
log.error(e)
return parent_content_id
@@ -172,12 +157,9 @@ def get_parent_content_title(self, page_id):
"""
parent_content_title = None
try:
- parent_content_title = (
- self.get_page_by_id(page_id=page_id, expand="ancestors").get(
- "ancestors"
- )
- or {}
- )[-1].get("title") or None
+ parent_content_title = (self.get_page_by_id(page_id=page_id, expand="ancestors").get("ancestors") or {})[
+ -1
+ ].get("title") or None
except Exception as e:
log.error(e)
return parent_content_title
@@ -188,9 +170,7 @@ def get_page_space(self, page_id):
:param page_id: content ID
:return:
"""
- return (
- (self.get_page_by_id(page_id, expand="space") or {}).get("space") or {}
- ).get("key")
+ return ((self.get_page_by_id(page_id, expand="space") or {}).get("space") or {}).get("key")
def get_pages_by_title(self, space, title, start=0, limit=200, expand=None):
"""
@@ -248,11 +228,7 @@ def get_page_by_title(self, space, title, start=0, limit=1, expand=None):
try:
return response.get("results")[0]
except (IndexError, TypeError) as e:
- log.error(
- "Can't find '{title}' page on the {url}!".format(
- title=title, url=self.url
- )
- )
+ log.error("Can't find '{title}' page on the {url}!".format(title=title, url=self.url))
log.debug(e)
return None
@@ -332,14 +308,14 @@ def get_page_labels(self, page_id, prefix=None, start=None, limit=None):
return response
def get_page_comments(
- self,
- content_id,
- expand=None,
- parent_version=None,
- start=0,
- limit=25,
- location=None,
- depth=None,
+ self,
+ content_id,
+ expand=None,
+ parent_version=None,
+ start=0,
+ limit=25,
+ location=None,
+ depth=None,
):
"""
@@ -385,9 +361,7 @@ def get_draft_page_by_id(self, page_id, status="draft"):
:param status:
:return:
"""
- url = "rest/api/content/{page_id}?status={status}".format(
- page_id=page_id, status=status
- )
+ url = "rest/api/content/{page_id}?status={status}".format(page_id=page_id, status=status)
try:
response = self.get(url)
@@ -414,9 +388,7 @@ def get_all_pages_by_label(self, label, start=0, limit=50):
url = "rest/api/content/search"
params = {}
if label:
- params["cql"] = 'type={type} AND label="{label}"'.format(
- type="page", label=label
- )
+ params["cql"] = 'type={type} AND label="{label}"'.format(type="page", label=label)
if start:
params["start"] = start
if limit:
@@ -432,9 +404,7 @@ def get_all_pages_by_label(self, label, start=0, limit=50):
return response.get("results")
- def get_all_pages_from_space(
- self, space, start=0, limit=50, status=None, expand=None, content_type="page"
- ):
+ def get_all_pages_from_space(self, space, start=0, limit=50, status=None, expand=None, content_type="page"):
"""
Get all pages from space
@@ -479,9 +449,7 @@ def get_all_pages_from_space(
return response.get("results")
- def get_all_pages_from_space_trash(
- self, space, start=0, limit=500, status="trashed", content_type="page"
- ):
+ def get_all_pages_from_space_trash(self, space, start=0, limit=500, status="trashed", content_type="page"):
"""
Get list of pages from trash
:param space:
@@ -492,9 +460,7 @@ def get_all_pages_from_space_trash(
:param content_type: the content type to return. Default value: page. Valid values: page, blogpost.
:return:
"""
- return self.get_all_pages_from_space(
- space, start, limit, status, content_type=content_type
- )
+ return self.get_all_pages_from_space(space, start, limit, status, content_type=content_type)
def get_all_draft_pages_from_space(self, space, start=0, limit=500, status="draft"):
"""
@@ -509,9 +475,7 @@ def get_all_draft_pages_from_space(self, space, start=0, limit=500, status="draf
"""
return self.get_all_pages_from_space(space, start, limit, status)
- def get_all_draft_pages_from_space_through_cql(
- self, space, start=0, limit=500, status="draft"
- ):
+ def get_all_draft_pages_from_space_through_cql(self, space, start=0, limit=500, status="draft"):
"""
Search list of draft pages by space key
Use case is cleanup old drafts from Confluence
@@ -522,9 +486,7 @@ def get_all_draft_pages_from_space_through_cql(
fixed system limits. Default: 500
:return:
"""
- url = "rest/api/content?cql=space=spaceKey={space} and status={status}".format(
- space=space, status=status
- )
+ url = "rest/api/content?cql=space=spaceKey={space} and status={status}".format(space=space, status=status)
params = {}
if limit:
params["limit"] = limit
@@ -638,14 +600,14 @@ def remove_page(self, page_id, status=None, recursive=False):
return response
def create_page(
- self,
- space,
- title,
- body,
- parent_id=None,
- type="page",
- representation="storage",
- editor=None,
+ self,
+ space,
+ title,
+ body,
+ parent_id=None,
+ type="page",
+ representation="storage",
+ editor=None,
):
"""
Create page from scratch
@@ -658,11 +620,7 @@ def create_page(
:param editor: OPTIONAL: v2 to be created in the new editor
:return:
"""
- log.info(
- 'Creating {type} "{space}" -> "{title}"'.format(
- space=space, title=title, type=type
- )
- )
+ log.info('Creating {type} "{space}" -> "{title}"'.format(space=space, title=title, type=type))
url = "rest/api/content/"
data = {
"type": type,
@@ -687,9 +645,7 @@ def create_page(
return response
- def move_page(
- self, space_key, page_id, target_id=None, target_title=None, position="append"
- ):
+ def move_page(self, space_key, page_id, target_id=None, target_title=None, position="append"):
"""
Move page method
:param space_key:
@@ -845,14 +801,14 @@ def add_comment(self, page_id, text):
return response
def attach_content(
- self,
- content,
- name,
- content_type="application/binary",
- page_id=None,
- title=None,
- space=None,
- comment=None,
+ self,
+ content,
+ name,
+ content_type="application/binary",
+ page_id=None,
+ title=None,
+ space=None,
+ comment=None,
):
"""
Attach (upload) a file to a page, if it exists it will update the
@@ -872,14 +828,10 @@ def attach_content(
:param comment: A comment describing this upload/file
:type comment: ``str``
"""
- page_id = (
- self.get_page_id(space=space, title=title) if page_id is None else page_id
- )
+ page_id = self.get_page_id(space=space, title=title) if page_id is None else page_id
type = "attachment"
if page_id is not None:
- comment = (
- comment if comment else "Uploaded {filename}.".format(filename=name)
- )
+ comment = comment if comment else "Uploaded {filename}.".format(filename=name)
data = {
"type": type,
"fileName": name,
@@ -890,9 +842,7 @@ def attach_content(
headers = {"X-Atlassian-Token": "nocheck", "Accept": "application/json"}
path = "rest/api/content/{page_id}/child/attachment".format(page_id=page_id)
# Check if there is already a file with the same name
- attachments = self.get(
- path=path, headers=headers, params={"filename": name}
- )
+ attachments = self.get(path=path, headers=headers, params={"filename": name})
if attachments.get("size"):
path = path + "/" + attachments["results"][0]["id"] + "/data"
@@ -928,14 +878,14 @@ def attach_content(
return None
def attach_file(
- self,
- filename,
- name=None,
- content_type=None,
- page_id=None,
- title=None,
- space=None,
- comment=None,
+ self,
+ filename,
+ name=None,
+ content_type=None,
+ page_id=None,
+ title=None,
+ space=None,
+ comment=None,
):
"""
Attach (upload) a file to a page, if it exists it will update the
@@ -1000,14 +950,10 @@ def delete_attachment_by_id(self, attachment_id, version):
:return:
"""
return self.delete(
- "rest/experimental/content/{id}/version/{versionId}".format(
- id=attachment_id, versionId=version
- )
+ "rest/experimental/content/{id}/version/{versionId}".format(id=attachment_id, versionId=version)
)
- def remove_page_attachment_keep_version(
- self, page_id, filename, keep_last_versions
- ):
+ def remove_page_attachment_keep_version(self, page_id, filename, keep_last_versions):
"""
Keep last versions
:param filename:
@@ -1015,14 +961,12 @@ def remove_page_attachment_keep_version(
:param keep_last_versions:
:return:
"""
- attachment = self.get_attachments_from_content(
- page_id=page_id, expand="version", filename=filename
- ).get("results")[0]
+ attachment = self.get_attachments_from_content(page_id=page_id, expand="version", filename=filename).get(
+ "results"
+ )[0]
attachment_versions = self.get_attachment_history(attachment.get("id"))
while len(attachment_versions) > keep_last_versions:
- remove_version_attachment_number = attachment_versions[
- keep_last_versions
- ].get("number")
+ remove_version_attachment_number = attachment_versions[keep_last_versions].get("number")
self.delete_attachment_by_id(
attachment_id=attachment.get("id"),
version=remove_version_attachment_number,
@@ -1033,11 +977,7 @@ def remove_page_attachment_keep_version(
)
)
attachment_versions = self.get_attachment_history(attachment.get("id"))
- log.info(
- "Kept versions {} for {}".format(
- keep_last_versions, attachment.get("title")
- )
- )
+ log.info("Kept versions {} for {}".format(keep_last_versions, attachment.get("title")))
def get_attachment_history(self, attachment_id, limit=200, start=0):
"""
@@ -1052,9 +992,7 @@ def get_attachment_history(self, attachment_id, limit=200, start=0):
return (self.get(url, params=params) or {}).get("results")
# @todo prepare more attachments info
- def get_attachments_from_content(
- self, page_id, start=0, limit=50, expand=None, filename=None, media_type=None
- ):
+ def get_attachments_from_content(self, page_id, start=0, limit=50, expand=None, filename=None, media_type=None):
"""
Get attachments for page
:param page_id:
@@ -1133,8 +1071,7 @@ def remove_page_label(self, page_id, label):
except HTTPError as e:
if e.response.status_code == 403:
raise ApiPermissionError(
- "The user has view permission, "
- "but no edit permission to the content",
+ "The user has view permission, " "but no edit permission to the content",
reason=e,
)
if e.response.status_code == 404:
@@ -1176,9 +1113,7 @@ def get_content_history_by_version_number(self, content_id, version_number):
:param version_number:
:return:
"""
- url = "rest/experimental/content/{0}/version/{1}".format(
- content_id, version_number
- )
+ url = "rest/experimental/content/{0}/version/{1}".format(content_id, version_number)
return self.get(url)
def remove_content_history(self, page_id, version_number):
@@ -1188,9 +1123,7 @@ def remove_content_history(self, page_id, version_number):
:param version_number: version number
:return:
"""
- url = "rest/experimental/content/{id}/version/{versionNumber}".format(
- id=page_id, versionNumber=version_number
- )
+ url = "rest/experimental/content/{id}/version/{versionNumber}".format(id=page_id, versionNumber=version_number)
self.delete(url)
def remove_page_history(self, page_id, version_number):
@@ -1209,9 +1142,7 @@ def remove_content_history_in_cloud(self, page_id, version_id):
:param version_id:
:return:
"""
- url = "rest/api/content/{id}/version/{versionId}".format(
- id=page_id, versionId=version_id
- )
+ url = "rest/api/content/{id}/version/{versionId}".format(id=page_id, versionId=version_id)
self.delete(url)
def remove_page_history_keep_version(self, page_id, keep_last_versions):
@@ -1227,14 +1158,8 @@ def remove_page_history_keep_version(self, page_id, keep_last_versions):
self.remove_page_history(page_id=page_id, version_number=1)
page = self.get_page_by_id(page_id=page_id, expand="version")
page_number = page.get("version").get("number")
- log.info(
- "Removed oldest version for {}, now it's {}".format(
- page.get("title"), page_number
- )
- )
- log.info(
- "Kept versions {} for {}".format(keep_last_versions, page.get("title"))
- )
+ log.info("Removed oldest version for {}, now it's {}".format(page.get("title"), page_number))
+ log.info("Kept versions {} for {}".format(keep_last_versions, page.get("title")))
def has_unknown_attachment_error(self, page_id):
"""
@@ -1242,9 +1167,7 @@ def has_unknown_attachment_error(self, page_id):
:param page_id:
:return:
"""
- unknown_attachment_identifier = (
- "plugins/servlet/confluence/placeholder/unknown-attachment"
- )
+ unknown_attachment_identifier = "plugins/servlet/confluence/placeholder/unknown-attachment"
result = self.get_page_by_id(page_id, expand="body.view")
if len(result) == 0:
return ""
@@ -1270,16 +1193,12 @@ def is_page_content_is_already_updated(self, page_id, body, title=None):
if self.advanced_mode:
confluence_content = (
- (self.get_page_by_id(page_id, expand="body.storage").json() or {}).get(
- "body"
- )
- or {}
- ).get("storage") or {}
+ (self.get_page_by_id(page_id, expand="body.storage").json() or {}).get("body") or {}
+ ).get("storage") or {}
else:
- confluence_content = (
- (self.get_page_by_id(page_id, expand="body.storage") or {}).get("body")
- or {}
- ).get("storage") or {}
+ confluence_content = ((self.get_page_by_id(page_id, expand="body.storage") or {}).get("body") or {}).get(
+ "storage"
+ ) or {}
confluence_body_content = confluence_content.get("value")
@@ -1291,23 +1210,21 @@ def is_page_content_is_already_updated(self, page_id, body, title=None):
log.debug('New Content: """{body}"""'.format(body=body))
if confluence_body_content.strip() == body.strip():
- log.warning(
- "Content of {page_id} is exactly the same".format(page_id=page_id)
- )
+ log.warning("Content of {page_id} is exactly the same".format(page_id=page_id))
return True
else:
log.info("Content of {page_id} differs".format(page_id=page_id))
return False
def update_existing_page(
- self,
- page_id,
- title,
- body,
- type="page",
- representation="storage",
- minor_edit=False,
- version_comment=None,
+ self,
+ page_id,
+ title,
+ body,
+ type="page",
+ representation="storage",
+ minor_edit=False,
+ version_comment=None,
):
"""Duplicate update_page. Left for the people who used it before. Use update_page instead"""
return self.update_page(
@@ -1322,15 +1239,15 @@ def update_existing_page(
)
def update_page(
- self,
- page_id,
- title,
- body=None,
- parent_id=None,
- type="page",
- representation="storage",
- minor_edit=False,
- version_comment=None,
+ self,
+ page_id,
+ title,
+ body=None,
+ parent_id=None,
+ type="page",
+ representation="storage",
+ minor_edit=False,
+ version_comment=None,
):
"""
Update page if already exist
@@ -1347,9 +1264,7 @@ def update_page(
"""
log.info('Updating {type} "{title}"'.format(title=title, type=type))
- if body is not None and self.is_page_content_is_already_updated(
- page_id, body, title
- ):
+ if body is not None and self.is_page_content_is_already_updated(page_id, body, title):
return self.get_page_by_id(page_id)
try:
@@ -1387,25 +1302,23 @@ def update_page(
reason=e,
)
if e.response.status_code == 404:
- raise ApiNotFoundError(
- "Can not find draft with current content", reason=e
- )
+ raise ApiNotFoundError("Can not find draft with current content", reason=e)
raise
return response
def _insert_to_existing_page(
- self,
- page_id,
- title,
- insert_body,
- parent_id=None,
- type="page",
- representation="storage",
- minor_edit=False,
- version_comment=None,
- top_of_page=False,
+ self,
+ page_id,
+ title,
+ insert_body,
+ parent_id=None,
+ type="page",
+ representation="storage",
+ minor_edit=False,
+ version_comment=None,
+ top_of_page=False,
):
"""
Insert body to a page if already exist
@@ -1427,16 +1340,10 @@ def _insert_to_existing_page(
else:
version = self.history(page_id)["lastUpdated"]["number"] + 1
previous_body = (
- (self.get_page_by_id(page_id, expand="body.storage").get("body") or {})
- .get("storage")
- .get("value")
+ (self.get_page_by_id(page_id, expand="body.storage").get("body") or {}).get("storage").get("value")
)
previous_body = previous_body.replace("ó", u"ó")
- body = (
- insert_body + previous_body
- if top_of_page
- else previous_body + insert_body
- )
+ body = insert_body + previous_body if top_of_page else previous_body + insert_body
data = {
"id": page_id,
"type": type,
@@ -1461,23 +1368,21 @@ def _insert_to_existing_page(
reason=e,
)
if e.response.status_code == 404:
- raise ApiNotFoundError(
- "Can not find draft with current content", reason=e
- )
+ raise ApiNotFoundError("Can not find draft with current content", reason=e)
raise
return response
def append_page(
- self,
- page_id,
- title,
- append_body,
- parent_id=None,
- type="page",
- representation="storage",
- minor_edit=False,
+ self,
+ page_id,
+ title,
+ append_body,
+ parent_id=None,
+ type="page",
+ representation="storage",
+ minor_edit=False,
):
"""
Append body to page if already exist
@@ -1505,14 +1410,14 @@ def append_page(
)
def prepend_page(
- self,
- page_id,
- title,
- prepend_body,
- parent_id=None,
- type="page",
- representation="storage",
- minor_edit=False,
+ self,
+ page_id,
+ title,
+ prepend_body,
+ parent_id=None,
+ type="page",
+ representation="storage",
+ minor_edit=False,
):
"""
Append body to page if already exist
@@ -1540,13 +1445,13 @@ def prepend_page(
)
def update_or_create(
- self,
- parent_id,
- title,
- body,
- representation="storage",
- minor_edit=False,
- version_comment=None,
+ self,
+ parent_id,
+ title,
+ body,
+ representation="storage",
+ minor_edit=False,
+ version_comment=None,
):
"""
Update page or create a page if it is not exists
@@ -1562,11 +1467,7 @@ def update_or_create(
if self.page_exists(space, title):
page_id = self.get_page_id(space, title)
- parent_id = (
- parent_id
- if parent_id is not None
- else self.get_parent_content_id(page_id)
- )
+ parent_id = parent_id if parent_id is not None else self.get_parent_content_id(page_id)
result = self.update_page(
parent_id=parent_id,
page_id=page_id,
@@ -1632,8 +1533,7 @@ def set_page_property(self, page_id, data):
)
if e.response.status_code == 403:
raise ApiPermissionError(
- "The user does not have permission to "
- "edit the content with the given id",
+ "The user does not have permission to " "edit the content with the given id",
reason=e,
)
if e.response.status_code == 413:
@@ -1651,9 +1551,7 @@ def update_page_property(self, page_id, data):
:data: property data in json format
:return:
"""
- url = "rest/api/content/{page_id}/property/{key}".format(
- page_id=page_id, key=data.get("key")
- )
+ url = "rest/api/content/{page_id}/property/{key}".format(page_id=page_id, key=data.get("key"))
try:
response = self.put(path=url, data=data)
except HTTPError as e:
@@ -1666,8 +1564,7 @@ def update_page_property(self, page_id, data):
)
if e.response.status_code == 403:
raise ApiPermissionError(
- "The user does not have permission to "
- "edit the content with the given id",
+ "The user does not have permission to " "edit the content with the given id",
reason=e,
)
if e.response.status_code == 404:
@@ -1678,8 +1575,7 @@ def update_page_property(self, page_id, data):
)
if e.response.status_code == 409:
raise ApiConflictError(
- "The given version is does not match the expected "
- "target version of the updated property",
+ "The given version is does not match the expected " "target version of the updated property",
reason=e,
)
if e.response.status_code == 413:
@@ -1719,9 +1615,7 @@ def get_page_property(self, page_id, page_property_key):
:param page_property_key: key of property
:return:
"""
- url = "rest/api/content/{page_id}/property/{key}".format(
- page_id=page_id, key=str(page_property_key)
- )
+ url = "rest/api/content/{page_id}/property/{key}".format(page_id=page_id, key=str(page_property_key))
try:
response = self.get(path=url)
except HTTPError as e:
@@ -1795,9 +1689,7 @@ def clean_package_cache(self, cache_name="com.gliffy.cache.gon"):
"""
headers = self.form_token_headers
data = {"cacheName": cache_name}
- return self.delete(
- "rest/cacheManagement/1.0/cacheEntries", data=data, headers=headers
- )
+ return self.delete("rest/cacheManagement/1.0/cacheEntries", data=data, headers=headers)
def get_all_groups(self, start=0, limit=1000):
"""
@@ -1807,25 +1699,19 @@ def get_all_groups(self, start=0, limit=1000):
fixed system limits. Default: 1000
:return:
"""
- url = "rest/api/group?limit={limit}&start={start}".format(
- limit=limit, start=start
- )
+ url = "rest/api/group?limit={limit}&start={start}".format(limit=limit, start=start)
try:
response = self.get(url)
except HTTPError as e:
if e.response.status_code == 403:
- raise ApiPermissionError(
- "The calling user does not have permission to view groups", reason=e
- )
+ raise ApiPermissionError("The calling user does not have permission to view groups", reason=e)
raise
return response.get("results")
- def get_group_members(
- self, group_name="confluence-users", start=0, limit=1000, expand=None
- ):
+ def get_group_members(self, group_name="confluence-users", start=0, limit=1000, expand=None):
"""
Get a paginated collection of users in the given group
:param group_name
@@ -1843,9 +1729,7 @@ def get_group_members(
response = self.get(url)
except HTTPError as e:
if e.response.status_code == 403:
- raise ApiPermissionError(
- "The calling user does not have permission to view users", reason=e
- )
+ raise ApiPermissionError("The calling user does not have permission to view users", reason=e)
raise
@@ -1876,13 +1760,13 @@ def get_space(self, space_key, expand="description.plain,homepage"):
return response
def get_space_content(
- self,
- space_key,
- depth="all",
- start=0,
- limit=500,
- content_type=None,
- expand="body.storage",
+ self,
+ space_key,
+ depth="all",
+ start=0,
+ limit=500,
+ content_type=None,
+ expand="body.storage",
):
"""
Get space content.
@@ -1900,9 +1784,7 @@ def get_space_content(
"""
content_type = "{}".format("/" + content_type if content_type else "")
- url = "rest/api/space/{space_key}/content{content_type}".format(
- space_key=space_key, content_type=content_type
- )
+ url = "rest/api/space/{space_key}/content{content_type}".format(space_key=space_key, content_type=content_type)
params = {
"depth": depth,
"start": start,
@@ -2002,9 +1884,7 @@ def get_user_details_by_username(self, username, expand=None):
response = self.get(url, params=params)
except HTTPError as e:
if e.response.status_code == 403:
- raise ApiPermissionError(
- "The calling user does not have permission to view users", reason=e
- )
+ raise ApiPermissionError("The calling user does not have permission to view users", reason=e)
if e.response.status_code == 404:
raise ApiNotFoundError(
"The user with the given username or userkey does not exist",
@@ -2032,9 +1912,7 @@ def get_user_details_by_userkey(self, userkey, expand=None):
response = self.get(url, params=params)
except HTTPError as e:
if e.response.status_code == 403:
- raise ApiPermissionError(
- "The calling user does not have permission to view users", reason=e
- )
+ raise ApiPermissionError("The calling user does not have permission to view users", reason=e)
if e.response.status_code == 404:
raise ApiNotFoundError(
"The user with the given username or userkey does not exist",
@@ -2046,13 +1924,13 @@ def get_user_details_by_userkey(self, userkey, expand=None):
return response
def cql(
- self,
- cql,
- start=0,
- limit=None,
- expand=None,
- include_archived_spaces=None,
- excerpt=None,
+ self,
+ cql,
+ start=0,
+ limit=None,
+ expand=None,
+ include_archived_spaces=None,
+ excerpt=None,
):
"""
Get results from cql search result with all related fields
@@ -2100,9 +1978,7 @@ def get_page_as_pdf(self, page_id):
:return: PDF File
"""
headers = self.form_token_headers
- url = "spaces/flyingpdf/pdfpageexport.action?pageId={pageId}".format(
- pageId=page_id
- )
+ url = "spaces/flyingpdf/pdfpageexport.action?pageId={pageId}".format(pageId=page_id)
if self.api_version == "cloud":
url = self.get_pdf_download_url_for_confluence_cloud(url)
@@ -2136,9 +2012,7 @@ def get_descendant_page_id(self, space, parent_id, title):
"""
page_id = ""
- url = 'rest/api/content/search?cql=parent={}%20AND%20space="{}"'.format(
- parent_id, space
- )
+ url = 'rest/api/content/search?cql=parent={}%20AND%20space="{}"'.format(parent_id, space)
try:
response = self.get(url, {})
@@ -2282,8 +2156,7 @@ def check_long_task_result(self, task_id, expand=None):
if e.response.status_code == 404:
# Raise ApiError as the documented reason is ambiguous
raise ApiError(
- "There is no task with the given key, "
- "or the calling user does not have permission to view it",
+ "There is no task with the given key, " "or the calling user does not have permission to view it",
reason=e,
)
@@ -2308,14 +2181,10 @@ def get_pdf_download_url_for_confluence_cloud(self, url):
log.info("Initiate PDF export from Confluence Cloud")
response = self.get(url, headers=headers, not_json_response=True)
response_string = response.decode(encoding="utf-8", errors="strict")
- task_id = response_string.split('name="ajs-taskId" content="')[1].split(
- '">'
- )[0]
+ task_id = response_string.split('name="ajs-taskId" content="')[1].split('">')[0]
poll_url = "runningtaskxml.action?taskId={0}".format(task_id)
while long_running_task:
- long_running_task_response = self.get(
- poll_url, headers=headers, not_json_response=True
- )
+ long_running_task_response = self.get(poll_url, headers=headers, not_json_response=True)
long_running_task_response_parts = long_running_task_response.decode(
encoding="utf-8", errors="strict"
).split("\n")
@@ -2331,9 +2200,7 @@ def get_pdf_download_url_for_confluence_cloud(self, url):
log.info("Downloading content...")
log.debug("Extract taskId and download PDF.")
current_status = long_running_task_response_parts[3]
- download_url = current_status.split("href="/wiki/")[
- 1
- ].split(""")[0]
+ download_url = current_status.split("href="/wiki/")[1].split(""")[0]
long_running_task = False
elif is_successful == "