From cb9f97ca28c93bf44db7954f3b3283d7a3c2acf3 Mon Sep 17 00:00:00 2001 From: theborch Date: Thu, 6 Mar 2025 11:39:33 -0600 Subject: [PATCH 1/6] fix:add missing fields param --- src/britive/access_broker/resources/types.py | 33 ++++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/britive/access_broker/resources/types.py b/src/britive/access_broker/resources/types.py index c9f8fbe..18a148b 100644 --- a/src/britive/access_broker/resources/types.py +++ b/src/britive/access_broker/resources/types.py @@ -12,18 +12,31 @@ def list(self) -> list: return self.britive.get(self.base_url)['data'] - def create(self, name, description='Default resource type description') -> dict: + def create(self, name: str, description: str = '', fields: list = None) -> dict: """ Create a new resource type. :param name: Name of the resource type. :param description: Description of the resource type. + :param fields: List of Resource Type fields. + Example: [ + { + 'name': 'string', + 'paramType': 'string'|'multiline'|'password', + 'isMandatory': True|False + }, + ... + ] :return: Created resource type. """ params = { 'name': name, 'description': description, } + + if fields: + params['parameters'] = fields + return self.britive.post(self.base_url, json=params) def get(self, resource_type_id) -> dict: @@ -35,15 +48,29 @@ def get(self, resource_type_id) -> dict: """ return self.britive.get(f'{self.base_url}/{resource_type_id}') - def update(self, resource_type_id, description=None) -> dict: + def update(self, resource_type_id: str, description: str = None, fields: list = None) -> dict: """ Update a resource type. :param resource_type_id: ID of the resource type. :param description: Description of the resource type. + :param fields: List of Resource Type fields. + Example: [ + { + 'name': 'string', + 'paramType': 'string'|'multiline'|'password', + 'isMandatory': True|False + }, + ... + ] :return: Updated resource type. """ - params = {'description': description} + params = {} + + if description: + params['description'] = description + if fields: + params['parameters'] = fields return self.britive.put(f'{self.base_url}/{resource_type_id}', json=params) From 3b6b129dc364de74e3b46edb9c2ea8dde24813ab Mon Sep 17 00:00:00 2001 From: theborch Date: Thu, 6 Mar 2025 11:40:19 -0600 Subject: [PATCH 2/6] style:sorting and type hint cleanup --- src/britive/access_broker/__init__.py | 4 +- src/britive/access_broker/pools.py | 74 ++++++------ .../access_broker/profiles/__init__.py | 24 ++-- .../access_broker/resources/__init__.py | 62 +++++----- src/britive/access_broker/resources/labels.py | 20 ++-- .../access_broker/resources/permissions.py | 110 +++++++++--------- src/britive/access_broker/resources/types.py | 22 ++-- .../access_broker/response_templates.py | 26 ++--- 8 files changed, 172 insertions(+), 170 deletions(-) diff --git a/src/britive/access_broker/__init__.py b/src/britive/access_broker/__init__.py index 12b684f..796f248 100644 --- a/src/britive/access_broker/__init__.py +++ b/src/britive/access_broker/__init__.py @@ -7,8 +7,8 @@ class AccessBroker: def __init__(self, britive) -> None: + self.brokers = Brokers(britive) + self.pools = Pools(britive) self.profiles = Profiles(britive) self.resources = Resources(britive) self.response_templates = ResponseTemplates(britive) - self.brokers = Brokers(britive) - self.pools = Pools(britive) diff --git a/src/britive/access_broker/pools.py b/src/britive/access_broker/pools.py index fcf772c..0692c94 100644 --- a/src/britive/access_broker/pools.py +++ b/src/britive/access_broker/pools.py @@ -23,6 +23,16 @@ def create(self, name: str, description: str = '', keep_alive: int = 60, disconn return self.britive.post(self.base_url, json=params) + def get(self, pool_id: str) -> dict: + """ + Retrieve broker pool by ID. + + :param pool_id: Broker pool ID. + :return: Details of the broker pool. + """ + + return self.britive.get(f'{self.base_url}/{pool_id}') + def list(self, name_filter: str = '') -> list: """ List broker pools with ability to filter by name. @@ -37,15 +47,28 @@ def list(self, name_filter: str = '') -> list: return self.britive.get(self.base_url, params=params)['data'] - def get(self, pool_id: str) -> dict: + def list_brokers(self, pool_id: str) -> list: """ - Retrieve broker pool by ID. + Retrieve brokers for the broker pool. :param pool_id: Broker pool ID. - :return: Details of the broker pool. + :return: List of brokers for the broker pool. """ - return self.britive.get(f'{self.base_url}/{pool_id}') + return self.britive.get(f'{self.base_url}/{pool_id}/brokers') + + def list_resources(self, pool_id: str, search_text: str = '') -> list: + """ + Retrieve resources for the broker pool. + + :param pool_id: Broker pool ID. + :param search_text: Filter resources by search text. + :return: List of resources for the broker pool. + """ + + params = {'filter': f'brokerPool eq {pool_id}', 'searchText': search_text} + + return self.britive.get(f'{self.britive.base_url}/resource-manager/resources', params=params) def update( self, pool_id: str, name: str = None, description: str = None, keep_alive: int = None, disconnect: int = None @@ -84,29 +107,6 @@ def delete(self, pool_id: str) -> None: return self.britive.delete(f'{self.base_url}/{pool_id}') - def list_brokers(self, pool_id: str) -> list: - """ - Retrieve brokers for the broker pool. - - :param pool_id: Broker pool ID. - :return: List of brokers for the broker pool. - """ - - return self.britive.get(f'{self.base_url}/{pool_id}/brokers') - - def list_resources(self, pool_id: str, search_text: str = '') -> list: - """ - Retrieve resources for the broker pool. - - :param pool_id: Broker pool ID. - :param search_text: Filter resources by search text. - :return: List of resources for the broker pool. - """ - - params = {'filter': f'brokerPool eq {pool_id}', 'searchText': search_text} - - return self.britive.get(f'{self.britive.base_url}/resource-manager/resources', params=params) - def create_token(self, pool_id, name: str, description: str = '') -> dict: """ Create new token for the broker pool - newly created tokens have an `INACTIVE` status. @@ -162,16 +162,6 @@ def delete_token(self, pool_id: str, name: str) -> None: return self.britive.delete(f'{self.base_url}/{pool_id}/tokens/{name}') - def list_labels(self, pool_id: str) -> list: - """ - Retrieve resource labels for the broker pool. - - :param pool_id: Broker pool ID. - :return: List of resource labels for the broker pool. - """ - - return self.britive.get(f'{self.base_url}/{pool_id}/labels') - def add_label(self, pool_id: str, key: str, values: list) -> dict: """ Add a resource label to the broker pool. @@ -186,6 +176,16 @@ def add_label(self, pool_id: str, key: str, values: list) -> dict: return self.britive.post(f'{self.base_url}/{pool_id}/labels/', json=params) + def list_labels(self, pool_id: str) -> list: + """ + Retrieve resource labels for the broker pool. + + :param pool_id: Broker pool ID. + :return: List of resource labels for the broker pool. + """ + + return self.britive.get(f'{self.base_url}/{pool_id}/labels') + def update_label(self, pool_id: str, key: str, values: list) -> dict: """ Add a resource label to the broker pool. diff --git a/src/britive/access_broker/profiles/__init__.py b/src/britive/access_broker/profiles/__init__.py index 6ef24f8..cdb4a0b 100644 --- a/src/britive/access_broker/profiles/__init__.py +++ b/src/britive/access_broker/profiles/__init__.py @@ -6,8 +6,8 @@ class Profiles: def __init__(self, britive) -> None: self.britive = britive self.base_url = f'{self.britive.base_url}/resource-manager/profiles' - self.policies = Policies(britive) self.permissions = Permissions(britive) + self.policies = Policies(britive) def create(self, name: str, description: str = '', expiration_duration: int = 900000) -> dict: """ @@ -23,15 +23,6 @@ def create(self, name: str, description: str = '', expiration_duration: int = 90 return self.britive.post(f'{self.base_url}', json=params) - def list(self) -> list: - """ - Retrieve all profiles. - - :return: List of profiles. - """ - - return self.britive.get(self.base_url, params={}) - def get(self, profile_id: str) -> dict: """ Retrieve a profile by ID. @@ -42,7 +33,18 @@ def get(self, profile_id: str) -> dict: return self.britive.get(f'{self.base_url}/{profile_id}') - def update(self, profile_id: str, name: str = '', description: str = '', expiration_duration: int = 0) -> dict: + def list(self) -> list: + """ + Retrieve all profiles. + + :return: List of profiles. + """ + + return self.britive.get(self.base_url, params={}) + + def update( + self, profile_id: str, name: str = None, description: str = None, expiration_duration: int = None + ) -> dict: """ Update a profile. diff --git a/src/britive/access_broker/resources/__init__.py b/src/britive/access_broker/resources/__init__.py index 7ab5f47..3ae5eb3 100644 --- a/src/britive/access_broker/resources/__init__.py +++ b/src/britive/access_broker/resources/__init__.py @@ -6,26 +6,10 @@ class Resources: def __init__(self, britive) -> None: self.britive = britive + self.base_url = f'{self.britive.base_url}/resource-manager/resources' self.labels = Labels(britive) - self.types = Types(britive) self.permissions = Permissions(britive) - self.base_url = f'{self.britive.base_url}/resource-manager/resources' - - def list(self, filter_expression: str = '', search_text: str = '') -> list: - """ - Retrieve all resources. - - :param filter_expression: Parameter to filter resources by name. Example: `name eq profile1`. - :param search_text: Filter resources by search text. - :return: List of resources. - """ - - params = { - **({'filter': filter_expression} if filter_expression else {}), - **({'searchText': search_text} if search_text else {}), - } - - return self.britive.get(f'{self.base_url}', params=params) + self.types = Types(britive) def create(self, name: str, resource_type_id: str, description: str = '', param_values: dict = None) -> dict: """ @@ -50,6 +34,17 @@ def create(self, name: str, resource_type_id: str, description: str = '', param_ return self.britive.post(self.base_url, json=params) + def add_broker_pools(self, resource_id: str, pools: list) -> list: + """ + Add broker pools to a resource. + + :param resource_id: ID of the resource. + :param pools: List of broker pools. + :return: List of broker pools. + """ + + return self.britive.post(f'{self.base_url}/{resource_id}/broker-pools', json=pools) + def get(self, resource_id: str) -> dict: """ Retrieve a resource by ID. @@ -60,7 +55,23 @@ def get(self, resource_id: str) -> dict: return self.britive.get(f'{self.base_url}/{resource_id}') - def update(self, resource_id: str, description: str = '', resource_labels: list = None) -> dict: + def list(self, filter_expression: str = None, search_text: str = None) -> list: + """ + Retrieve all resources. + + :param filter_expression: Parameter to filter resources by name. Example: `name eq profile1`. + :param search_text: Filter resources by search text. + :return: List of resources. + """ + + params = { + **({'filter': filter_expression} if filter_expression else {}), + **({'searchText': search_text} if search_text else {}), + } + + return self.britive.get(f'{self.base_url}', params=params) + + def update(self, resource_id: str, description: str = None, resource_labels: list = None) -> dict: """ Update a resource. @@ -80,7 +91,7 @@ def update(self, resource_id: str, description: str = '', resource_labels: list return self.britive.put(f'{self.base_url}/{resource_id}', json=params) - def delete(self, resource_id: str) -> dict: + def delete(self, resource_id: str) -> None: """ Delete a resource. @@ -89,14 +100,3 @@ def delete(self, resource_id: str) -> dict: """ return self.britive.delete(f'{self.base_url}/{resource_id}') - - def add_broker_pools(self, resource_id: str, pools: list) -> list: - """ - Add broker pools to a resource. - - :param resource_id: ID of the resource. - :param pools: List of broker pools. - :return: List of broker pools. - """ - - return self.britive.post(f'{self.base_url}/{resource_id}/broker-pools', json=pools) diff --git a/src/britive/access_broker/resources/labels.py b/src/britive/access_broker/resources/labels.py index 864fda8..7def3ca 100644 --- a/src/britive/access_broker/resources/labels.py +++ b/src/britive/access_broker/resources/labels.py @@ -20,6 +20,16 @@ def create(self, name: str, description: str = '', values: list = None) -> dict: return self.britive.post(self.base_url, json=params) + def get(self, label_id: str) -> dict: + """ + Retrieve a label by ID. + + :param label_id: ID of the label. + :return: Label. + """ + + return self.britive.get(f'{self.base_url}/{label_id}') + def list(self) -> list: """ Retrieve all labels. @@ -50,16 +60,6 @@ def update(self, label_id: str, name: str = None, description: str = None, value return self.britive.put(f'{self.base_url}/{label_id}', json=params) - def get(self, label_id: str) -> dict: - """ - Retrieve a label by ID. - - :param label_id: ID of the label. - :return: Label. - """ - - return self.britive.get(f'{self.base_url}/{label_id}') - def delete(self, label_id: str) -> None: """ Delete a label. diff --git a/src/britive/access_broker/resources/permissions.py b/src/britive/access_broker/resources/permissions.py index 988b7f8..4c03c4c 100644 --- a/src/britive/access_broker/resources/permissions.py +++ b/src/britive/access_broker/resources/permissions.py @@ -6,61 +6,6 @@ def __init__(self, britive) -> None: self.britive = britive self.base_url = f'{self.britive.base_url}/resource-manager' - def list(self, resource_type_id: str, search_text: str = '') -> list: - """ - Retrieve all permissions for a resource type. - - :param resource_type_id: ID of the resource type. - :param search_text: filter resource types by search text. - :return: List of permissions. - """ - - params = {**({'searchText': search_text} if search_text else {})} - - return self.britive.get(f'{self.base_url}/resource-types/{resource_type_id}/permissions', params=params) - - def get(self, permission_id: str, version_id: str = '') -> dict: - """ - Retrieve a permission by ID. - - :param permission_id: ID of the permission. - :param version_id: ID of the version. Optional. - :return: Permission. - """ - - if version_id: - return self.britive.get(f'{self.base_url}/permissions/{permission_id}/{version_id}') - - return self.britive.get(f'{self.base_url}/permissions/{permission_id}') - - def delete(self, permission_id: str, version_id: str = '') -> None: - """ - Delete a permission. - - :param permission_id: ID of the permission. - :param version_id: Version of the permission. Optional. - :return: None - """ - - if version_id: - return self.britive.delete(f'{self.base_url}/permissions/{permission_id}/{version_id}') - return self.britive.delete(f'{self.base_url}/permissions/{permission_id}') - - def get_urls(self, permission_id: str) -> dict: - """ - Retrieve URLs for a permission. - - :param permission_id: ID of the permission. - :return: URLs. - """ - - return self.britive.get(f'{self.base_url}/permissions/get-urls/{permission_id}') - - def get_system_values(self, resource_type_id): - return self.britive.get( - f'{self.base_url}/permissions/system-defined-values', params={'resourceTypeId': resource_type_id} - ) - def create( self, resource_type_id: str, @@ -110,6 +55,48 @@ def create( return self.britive.put(f'{self.base_url}/permissions/{permissionId}', json=update_params) + def get(self, permission_id: str, version_id: str = None) -> dict: + """ + Retrieve a permission by ID. + + :param permission_id: ID of the permission. + :param version_id: ID of the version. Optional. + :return: Permission. + """ + + if version_id: + return self.britive.get(f'{self.base_url}/permissions/{permission_id}/{version_id}') + + return self.britive.get(f'{self.base_url}/permissions/{permission_id}') + + def get_system_values(self, resource_type_id: str): + return self.britive.get( + f'{self.base_url}/permissions/system-defined-values', params={'resourceTypeId': resource_type_id} + ) + + def get_urls(self, permission_id: str) -> dict: + """ + Retrieve URLs for a permission. + + :param permission_id: ID of the permission. + :return: URLs. + """ + + return self.britive.get(f'{self.base_url}/permissions/get-urls/{permission_id}') + + def list(self, resource_type_id: str, search_text: str = None) -> list: + """ + Retrieve all permissions for a resource type. + + :param resource_type_id: ID of the resource type. + :param search_text: filter resource types by search text. + :return: List of permissions. + """ + + params = {**({'searchText': search_text} if search_text else {})} + + return self.britive.get(f'{self.base_url}/resource-types/{resource_type_id}/permissions', params=params) + def update( self, permission_id: str, @@ -170,3 +157,16 @@ def update( ) return self.britive.put(f'{self.base_url}/permissions/{permission_id}', json=params) + + def delete(self, permission_id: str, version_id: str = None) -> None: + """ + Delete a permission. + + :param permission_id: ID of the permission. + :param version_id: Version of the permission. Optional. + :return: None + """ + + if version_id: + return self.britive.delete(f'{self.base_url}/permissions/{permission_id}/{version_id}') + return self.britive.delete(f'{self.base_url}/permissions/{permission_id}') diff --git a/src/britive/access_broker/resources/types.py b/src/britive/access_broker/resources/types.py index 18a148b..61d1b5f 100644 --- a/src/britive/access_broker/resources/types.py +++ b/src/britive/access_broker/resources/types.py @@ -3,15 +3,6 @@ def __init__(self, britive) -> None: self.britive = britive self.base_url = f'{self.britive.base_url}/resource-manager/resource-types' - def list(self) -> list: - """ - Retrieve all resource types. - - :return: List of resource types. - """ - - return self.britive.get(self.base_url)['data'] - def create(self, name: str, description: str = '', fields: list = None) -> dict: """ Create a new resource type. @@ -39,7 +30,7 @@ def create(self, name: str, description: str = '', fields: list = None) -> dict: return self.britive.post(self.base_url, json=params) - def get(self, resource_type_id) -> dict: + def get(self, resource_type_id: str) -> dict: """ Retrieve a resource type by ID. @@ -48,6 +39,15 @@ def get(self, resource_type_id) -> dict: """ return self.britive.get(f'{self.base_url}/{resource_type_id}') + def list(self) -> list: + """ + Retrieve all resource types. + + :return: List of resource types. + """ + + return self.britive.get(self.base_url)['data'] + def update(self, resource_type_id: str, description: str = None, fields: list = None) -> dict: """ Update a resource type. @@ -74,7 +74,7 @@ def update(self, resource_type_id: str, description: str = None, fields: list = return self.britive.put(f'{self.base_url}/{resource_type_id}', json=params) - def delete(self, resource_type_id) -> dict: + def delete(self, resource_type_id: str) -> None: """ Delete a resource type. diff --git a/src/britive/access_broker/response_templates.py b/src/britive/access_broker/response_templates.py index b041374..43b8e39 100644 --- a/src/britive/access_broker/response_templates.py +++ b/src/britive/access_broker/response_templates.py @@ -32,7 +32,17 @@ def create( return self.britive.post(self.base_url, json=params) - def list(self, search_text: str = '') -> list: + def get(self, response_template_id: str) -> dict: + """ + Retrieve a response template by ID. + + :param response_template_id: ID of the response template. + :return: Response template. + """ + + return self.britive.get(f'{self.base_url}/{response_template_id}') + + def list(self, search_text: str = None) -> list: """ Retrieve all response templates. @@ -48,8 +58,8 @@ def update( self, response_template_id: str, name: str, - description: str = '', - template_data: str = '', + description: str = None, + template_data: str = None, is_console_enabled: bool = False, ) -> dict: """ @@ -74,16 +84,6 @@ def update( return self.britive.put(f'{self.base_url}/{response_template_id}', json=params) - def get(self, response_template_id: str) -> dict: - """ - Retrieve a response template by ID. - - :param response_template_id: ID of the response template. - :return: Response template. - """ - - return self.britive.get(f'{self.base_url}/{response_template_id}') - def delete(self, response_template_id: str) -> None: """ Delete a response template. From 825e424fe71f06bd3ca48d808f2357a44e84b279 Mon Sep 17 00:00:00 2001 From: theborch Date: Thu, 6 Mar 2025 12:07:39 -0600 Subject: [PATCH 3/6] fix:params needs to be a dict --- src/britive/britive.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/britive/britive.py b/src/britive/britive.py index 2260e16..30ee5b5 100644 --- a/src/britive/britive.py +++ b/src/britive/britive.py @@ -248,6 +248,9 @@ def __request(self, method, url, params=None, data=None, json=None) -> dict: return_data = [] _pagination_type = None + if params is None: + params = {} + while True: response = self.__request_with_exponential_backoff_and_retry(method, url, params, data, json) if response_has_no_content(response): From 51814b9c56d92ce13cb795aeba031129594cdc7d Mon Sep 17 00:00:00 2001 From: theborch Date: Thu, 6 Mar 2025 14:09:21 -0600 Subject: [PATCH 4/6] fix:only PUT if files are supplied --- .../access_broker/resources/permissions.py | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/britive/access_broker/resources/permissions.py b/src/britive/access_broker/resources/permissions.py index 4c03c4c..fc5a22c 100644 --- a/src/britive/access_broker/resources/permissions.py +++ b/src/britive/access_broker/resources/permissions.py @@ -36,24 +36,29 @@ def create( 'name': name, 'resourceTypeId': resource_type_id, } - permissionId = self.britive.post(f'{self.base_url}/permissions', json=create_params)['permissionId'] - urls = self.get_urls(permissionId) - requests.put(urls['checkinURL'], files={'file': checkin_file}) - requests.put(urls['checkoutURL'], files={'file': checkout_file}) - update_params = { - 'checkinFileName': permissionId + '_checkin', - 'checkinTimeLimit': 60, - 'checkoutFileName': permissionId + '_checkout', - 'checkoutTimeLimit': 60, - 'description': description, - 'inlineFileExists': True, - 'isDraft': False, - 'name': name, - 'resourceTypeId': resource_type_id, - 'variables': variables, - } + permission = self.britive.post(f'{self.base_url}/permissions', json=create_params) - return self.britive.put(f'{self.base_url}/permissions/{permissionId}', json=update_params) + if checkin_file and checkout_file: + permissionId = permission['permissionId'] + urls = self.get_urls(permissionId) + requests.put(urls['checkinURL'], files={'file': checkin_file}) + requests.put(urls['checkoutURL'], files={'file': checkout_file}) + update_params = { + 'checkinFileName': permissionId + '_checkin', + 'checkinTimeLimit': 60, + 'checkoutFileName': permissionId + '_checkout', + 'checkoutTimeLimit': 60, + 'description': description, + 'inlineFileExists': True, + 'isDraft': False, + 'name': name, + 'resourceTypeId': resource_type_id, + 'variables': variables, + } + permission = self.britive.put(f'{self.base_url}/permissions/{permissionId}', json=update_params) + permission['permissionId'] = permissionId + + return permission def get(self, permission_id: str, version_id: str = None) -> dict: """ From 4c571a593e321cd770ea67ca16c4ee079aa95f85 Mon Sep 17 00:00:00 2001 From: theborch Date: Thu, 6 Mar 2025 14:30:34 -0600 Subject: [PATCH 5/6] fix:incorrect `members` structure example --- .../access_broker/profiles/policies.py | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/britive/access_broker/profiles/policies.py b/src/britive/access_broker/profiles/policies.py index 36707fb..d2d90bd 100644 --- a/src/britive/access_broker/profiles/policies.py +++ b/src/britive/access_broker/profiles/policies.py @@ -31,15 +31,21 @@ def create( :param name: Name of the policy. :param access_type: Access type of the policy. :param condition: Condition of the policy. - :param members: List of member objects. - Example: [ - { - 'id': 'string', - 'name': 'string', - 'memberType': 'User', - }, - ... - ] + :param members: Dict of member type objects. + Example: { + users: [ + {'id': '...'} + ], + tags: [ + {'id': '...'} + ], + tokens: [ + {'id': '...'} + ], + serviceIdentities: [ + {'id': '...'} + ], + } :param is_active: Is active. :param is_draft: Is draft. :param is_read_only: Is read only. @@ -103,15 +109,21 @@ def update( :param name: Name of the policy. :param access_type: Access type of the policy. :param condition: Condition of the policy. - :param members: List of member objects. - Example: [ - { - 'id': 'string', - 'name': 'string', - 'memberType': 'User', - }, - ... - ] + :param members: Dict of member type objects. + Example: { + users: [ + {'id': '...'} + ], + tags: [ + {'id': '...'} + ], + tokens: [ + {'id': '...'} + ], + serviceIdentities: [ + {'id': '...'} + ], + } :param is_active: Is active. :param is_draft: Is draft. :param is_read_only: Is read only. From 18f44975d72ae12968031949e3186f95383acfc0 Mon Sep 17 00:00:00 2001 From: theborch Date: Thu, 6 Mar 2025 11:44:03 -0600 Subject: [PATCH 6/6] v4.1.2 --- CHANGELOG.md | 25 +++++++++++++++++++++++++ src/britive/__init__.py | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28c2dd0..1303460 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,30 @@ # Change Log (v2.8.1+) +## v4.1.2 [2025-03-06] + +__What's New:__ + +* None + +__Enhancements:__ + +* None + +__Bug Fixes:__ + +* Added missing `fields` param to `access_broker.resources.types.[create|update]` +* Fixed `my_resources.list` bug, where `params` is `None` instead of expected `dict` +* Fixed issue with `access_broker.resources.permissions.create` uploading files when none are specified. +* Correct the `members` param example for `access_broker.profiles.policies.[create|update]` + +__Dependencies:__ + +* None + +__Other:__ + +* Type hint cleanup and preferential sorting for `access_broker` + ## v4.1.1 [2025-03-05] __What's New:__ diff --git a/src/britive/__init__.py b/src/britive/__init__.py index 47cbba7..96e5585 100644 --- a/src/britive/__init__.py +++ b/src/britive/__init__.py @@ -1 +1 @@ -__version__ = '4.1.1' +__version__ = '4.1.2'