You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2023/02/21 19:54:49 UTC
[ranger] 01/02: RANGER-4080: Python client updated with addition of 2 security-zone APIs
This is an automated email from the ASF dual-hosted git repository.
madhan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git
commit e6bb0df9ca0f10f6192b60ecb558df6c7a9ac3fb
Author: Madhan Neethiraj <ma...@apache.org>
AuthorDate: Sun Feb 12 13:54:51 2023 -0800
RANGER-4080: Python client updated with addition of 2 security-zone APIs
---
intg/src/main/python/README.md | 2 +-
.../python/apache_ranger/client/ranger_client.py | 29 ++++++++++++++--------
.../apache_ranger/model/ranger_security_zone.py | 20 +++++++++++++++
.../python/apache_ranger/model/ranger_service.py | 11 ++++++++
intg/src/main/python/apache_ranger/utils.py | 16 ++++++------
intg/src/main/python/setup.py | 2 +-
6 files changed, 60 insertions(+), 20 deletions(-)
diff --git a/intg/src/main/python/README.md b/intg/src/main/python/README.md
index 46de769fc..3df8aa696 100644
--- a/intg/src/main/python/README.md
+++ b/intg/src/main/python/README.md
@@ -35,7 +35,7 @@ Verify if apache-ranger client is installed:
Package Version
------------ ---------
-apache-ranger 0.0.8
+apache-ranger 0.0.10
```
## Usage
diff --git a/intg/src/main/python/apache_ranger/client/ranger_client.py b/intg/src/main/python/apache_ranger/client/ranger_client.py
index 260095b2f..4680e2d8e 100644
--- a/intg/src/main/python/apache_ranger/client/ranger_client.py
+++ b/intg/src/main/python/apache_ranger/client/ranger_client.py
@@ -23,8 +23,8 @@ from apache_ranger.exceptions import RangerServiceException
from apache_ranger.model.ranger_base import RangerBase
from apache_ranger.model.ranger_policy import RangerPolicy
from apache_ranger.model.ranger_role import RangerRole
-from apache_ranger.model.ranger_security_zone import RangerSecurityZone
-from apache_ranger.model.ranger_service import RangerService
+from apache_ranger.model.ranger_security_zone import RangerSecurityZone, RangerSecurityZoneHeaderInfo
+from apache_ranger.model.ranger_service import RangerService, RangerServiceHeaderInfo
from apache_ranger.model.ranger_service_def import RangerServiceDef
from apache_ranger.model.ranger_service_tags import RangerServiceTags
from apache_ranger.utils import *
@@ -194,11 +194,6 @@ class RangerClient:
return type_coerce(resp, RangerSecurityZone)
- def update_security_zone(self, zoneName, securityZone):
- resp = self.client_http.call_api(RangerClient.UPDATE_ZONE_BY_NAME.format_path({ 'name': zoneName }), request_data=securityZone)
-
- return type_coerce(resp, RangerSecurityZone)
-
def delete_security_zone_by_id(self, zoneId):
self.client_http.call_api(RangerClient.DELETE_ZONE_BY_ID.format_path({ 'id': zoneId }))
@@ -215,6 +210,16 @@ class RangerClient:
return type_coerce(resp, RangerSecurityZone)
+ def get_security_zone_headers(self):
+ resp = self.client_http.call_api(RangerClient.GET_ZONE_HEADERS)
+
+ return type_coerce_list(resp, RangerSecurityZoneHeaderInfo)
+
+ def get_security_zone_service_headers(self, zoneId):
+ resp = self.client_http.call_api(RangerClient.GET_ZONE_SERVICE_HEADERS.format_path({ 'id': zoneId }))
+
+ return type_coerce_list(resp, RangerServiceHeaderInfo)
+
def find_security_zones(self, filter=None):
resp = self.client_http.call_api(RangerClient.FIND_ZONES, filter)
@@ -320,9 +325,11 @@ class RangerClient:
URI_GRANT_ROLE = URI_ROLE + "/grant/{name}"
URI_REVOKE_ROLE = URI_ROLE + "/revoke/{name}"
- URI_ZONE = URI_BASE + "/zones"
- URI_ZONE_BY_ID = URI_ZONE + "/{id}"
- URI_ZONE_BY_NAME = URI_ZONE + "/name/{name}"
+ URI_ZONE = URI_BASE + "/zones"
+ URI_ZONE_BY_ID = URI_ZONE + "/{id}"
+ URI_ZONE_BY_NAME = URI_ZONE + "/name/{name}"
+ URI_ZONE_HEADERS = URI_BASE + "/zone-headers"
+ URI_ZONE_SERVICE_HEADERS = URI_ZONE + "/{id}/service-headers"
URI_SERVICE_TAGS = URI_SERVICE + "/{serviceName}/tags"
URI_PLUGIN_INFO = URI_BASE + "/plugins/info"
@@ -366,6 +373,8 @@ class RangerClient:
GET_ZONE_BY_ID = API(URI_ZONE_BY_ID, HttpMethod.GET, HTTPStatus.OK)
GET_ZONE_BY_NAME = API(URI_ZONE_BY_NAME, HttpMethod.GET, HTTPStatus.OK)
FIND_ZONES = API(URI_ZONE, HttpMethod.GET, HTTPStatus.OK)
+ GET_ZONE_HEADERS = API(URI_ZONE_HEADERS, HttpMethod.GET, HTTPStatus.OK)
+ GET_ZONE_SERVICE_HEADERS = API(URI_ZONE_SERVICE_HEADERS, HttpMethod.GET, HTTPStatus.OK)
CREATE_ROLE = API(URI_ROLE, HttpMethod.POST, HTTPStatus.OK)
UPDATE_ROLE_BY_ID = API(URI_ROLE_BY_ID, HttpMethod.PUT, HTTPStatus.OK)
diff --git a/intg/src/main/python/apache_ranger/model/ranger_security_zone.py b/intg/src/main/python/apache_ranger/model/ranger_security_zone.py
index 3056b7ed5..9b3eec623 100644
--- a/intg/src/main/python/apache_ranger/model/ranger_security_zone.py
+++ b/intg/src/main/python/apache_ranger/model/ranger_security_zone.py
@@ -17,6 +17,7 @@
# limitations under the License.
from apache_ranger.model.ranger_base import RangerBase, RangerBaseModelObject
+from apache_ranger.utils import *
class RangerSecurityZoneService(RangerBase):
@@ -28,6 +29,11 @@ class RangerSecurityZoneService(RangerBase):
self.resources = attrs.get('resources')
+ def type_coerce_attrs(self):
+ super(RangerSecurityZoneService, self).type_coerce_attrs()
+
+ self.resources = type_coerce_list_dict(self.resources, list)
+
class RangerSecurityZone(RangerBaseModelObject):
def __init__(self, attrs=None):
@@ -44,3 +50,17 @@ class RangerSecurityZone(RangerBaseModelObject):
self.auditUsers = attrs.get('auditUsers')
self.auditUserGroups = attrs.get('auditUserGroups')
self.description = attrs.get('description')
+
+ def type_coerce_attrs(self):
+ super(RangerSecurityZone, self).type_coerce_attrs()
+
+ self.services = type_coerce_dict(self.services, RangerSecurityZoneService)
+
+class RangerSecurityZoneHeaderInfo(RangerBaseModelObject):
+ def __init__(self, attrs=None):
+ if attrs is None:
+ attrs = {}
+
+ RangerBaseModelObject.__init__(self, attrs)
+
+ self.name = attrs.get('name')
diff --git a/intg/src/main/python/apache_ranger/model/ranger_service.py b/intg/src/main/python/apache_ranger/model/ranger_service.py
index a3d273c20..a1346d5b5 100644
--- a/intg/src/main/python/apache_ranger/model/ranger_service.py
+++ b/intg/src/main/python/apache_ranger/model/ranger_service.py
@@ -36,3 +36,14 @@ class RangerService(RangerBaseModelObject):
self.policyUpdateTime = attrs.get('policyUpdateTime')
self.tagVersion = attrs.get('tagVersion')
self.tagUpdateTime = attrs.get('tagUpdateTime')
+
+
+class RangerServiceHeaderInfo(RangerBaseModelObject):
+ def __init__(self, attrs=None):
+ if attrs is None:
+ attrs = {}
+
+ RangerBaseModelObject.__init__(self, attrs)
+
+ self.name = attrs.get('name')
+ self.isTagService = attrs.get('isTagService')
diff --git a/intg/src/main/python/apache_ranger/utils.py b/intg/src/main/python/apache_ranger/utils.py
index b3c568f1f..28e0e4b60 100644
--- a/intg/src/main/python/apache_ranger/utils.py
+++ b/intg/src/main/python/apache_ranger/utils.py
@@ -30,7 +30,8 @@ def type_coerce(obj, objType):
elif isinstance(obj, dict):
ret = objType(obj)
- ret.type_coerce_attrs()
+ if callable(getattr(ret, 'type_coerce_attrs', None)):
+ ret.type_coerce_attrs()
else:
ret = None
@@ -38,13 +39,8 @@ def type_coerce(obj, objType):
def type_coerce_list(obj, objType):
if isinstance(obj, list):
- ret = []
- for entry in obj:
- ret.append(type_coerce(entry, objType))
- else:
- ret = None
-
- return ret
+ return [ type_coerce(entry, objType) for entry in obj ]
+ return None
def type_coerce_dict(obj, objType):
if isinstance(obj, dict):
@@ -66,6 +62,10 @@ def type_coerce_dict_list(obj, objType):
return ret
+def type_coerce_list_dict(obj, objType):
+ if isinstance(obj, list):
+ return [ type_coerce_dict(entry, objType) for entry in obj ]
+ return None
class API:
def __init__(self, path, method, expected_status, consumes=APPLICATION_JSON, produces=APPLICATION_JSON):
diff --git a/intg/src/main/python/setup.py b/intg/src/main/python/setup.py
index 5222d7153..dbb11617d 100644
--- a/intg/src/main/python/setup.py
+++ b/intg/src/main/python/setup.py
@@ -27,7 +27,7 @@ with open("README.md", "r") as fh:
setup(
name="apache-ranger",
- version="0.0.8",
+ version="0.0.10",
author="Apache Ranger",
author_email="dev@ranger.apache.org",
description="Apache Ranger Python client",