Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
# Change Log (v2.8.1+)

## v4.6.1 [2026-07-07]

__Enhancements:__

* None

__Bug Fixes:__

* Added the missing optional `headers` argument to `my_requests.[list|approval_request_status|request_approval|request_approval_by_name|withdraw_approval_request|withdraw_approval_request_by_name]` and `my_approvals.[list|approve_request|reject_request]`, so custom headers (e.g. `X-On-Behalf-Of`) propagate through the approval flow as they already do for `my_access`/`my_resources`.
* Fixed `my_requests.list` and `my_approvals.list` to request the approvals collection with a trailing slash (`/v1/approvals/`); without it the request 302-redirected and was rejected at the edge.

__Dependencies:__

* None

__Other:__

* None

## v4.6.0 [2026-05-27]

__What's New:__
Expand Down
2 changes: 1 addition & 1 deletion src/britive/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '4.6.0'
__version__ = '4.6.1'
30 changes: 24 additions & 6 deletions src/britive/my_approvals.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,41 +15,59 @@ def __init__(self, britive) -> None:
self.britive = britive
self.base_url = f'{self.britive.base_url}/v1/approvals'

def approve_request(self, request_id: str, comments: str = '') -> None:
def approve_request(self, request_id: str, comments: str = '', headers: dict = None) -> None:
"""
Approves a request.

:param request_id: The ID of the request.
:param comments: Approver comments.
:param headers: Any additional headers
Example:
{
"X-On-Behalf-Of": "Bearer ... | user@... | username",
...
}
:return: None.
"""

params = {'approveRequest': 'yes'}
data = {'approverComment': comments}

return self.britive.patch(f'{self.base_url}/{request_id}', params=params, json=data)
return self.britive.patch(f'{self.base_url}/{request_id}', params=params, json=data, headers=headers)

def reject_request(self, request_id: str, comments: str = '') -> None:
def reject_request(self, request_id: str, comments: str = '', headers: dict = None) -> None:
"""
Rejects a request.

:param request_id: The ID of the request.
:param comments: Approver comments.
:param headers: Any additional headers
Example:
{
"X-On-Behalf-Of": "Bearer ... | user@... | username",
...
}
:return: None.
"""

params = {'approveRequest': 'no'}
data = {'approverComment': comments}

return self.britive.patch(f'{self.base_url}/{request_id}', params=params, json=data)
return self.britive.patch(f'{self.base_url}/{request_id}', params=params, json=data, headers=headers)

def list(self) -> dict:
def list(self, headers: dict = None) -> dict:
"""
Lists approval requests.

:param headers: Any additional headers
Example:
{
"X-On-Behalf-Of": "Bearer ... | user@... | username",
...
}
:return: List of approval requests.
"""

params = {'requestType': 'myApprovals'}

return self.britive.get(f'{self.base_url}', params=params)
return self.britive.get(f'{self.base_url}/', params=params, headers=headers)
Loading
Loading