Apache-ranger python 库 JSONDecoder 错误
Apache-ranger python library JSONDecoder error
所以我正在尝试使用 ranger python 客户端创建一个策略,这是我的代码(出于安全目的编辑了机密信息)
from apache_ranger.model.ranger_service import *
from apache_ranger.client.ranger_client import *
from apache_ranger.model.ranger_policy import *
ranger_url = 'http://************.com:***'
ranger_auth = ('**********', '**********')
ranger = RangerClient(ranger_url, ranger_auth)
policy = RangerPolicy()
policy.service = 'starburst-enterprise'
policy.name = 'test_policy'
policy.resources = { 'database': RangerPolicyResource({ 'values': ['hive'] }),
'table': RangerPolicyResource({ 'values': ['uber_rides'] }),
'column': RangerPolicyResource({ 'values': ['*'] }) }
allowItem1 = RangerPolicyItem()
allowItem1.groups = [ 'Data Product Owner' ]
allowItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'select' }) ]
denyItem1 = RangerPolicyItem()
denyItem1.groups = [ 'Data Product Owner' ]
denyItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'drop' }) ]
policy.policyItems = [ allowItem1 ]
policy.denyPolicyItems = [ denyItem1 ]
print('Creating policy: name=' + policy.name)
created_policy = ranger.create_policy(policy)
print(' created policy: name=' + created_policy.name + ', id=' + str(created_policy.id))
但是我收到这个错误,当我尝试调试它时我发现,它出现异常的原因是因为 ranger_clien.py 中的 http.post 方法正在返回一个响应( ) 没有被任何 if 或 elifs 块处理,因此它转到 else 块并进入 RaiseServiceException(),当我深入挖掘时,我发现函数中的一些注释给出了 JSONDecoder错误,它表示仅当 JSON 输入无效或未安装 simplejson 时才会引发异常。
Traceback (most recent call last):
File "c:\Users\j.shimoga.prakash\Desktop\pls work - Copy\test.py", line 37, in <module>
created_policy = ranger.create_policy(policy)
File "C:\Users\j.shimoga.prakash\Desktop\pls work - Copy\venv\lib\site-packages\apache_ranger\client\ranger_client.py", line 124, in create_policy
resp = self.__call_api(RangerClient.CREATE_POLICY, params, policy)
File "C:\Users\j.shimoga.prakash\Desktop\pls work - Copy\venv\lib\site-packages\apache_ranger\client\ranger_client.py",
File "C:\Users\j.shimoga.prakash\Desktop\pls work - Copy\venv\lib\site-packages\simplejson\decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
解决了我必须在 ranger_url 中传递 'https' 而不是 'http'
的问题
所以我正在尝试使用 ranger python 客户端创建一个策略,这是我的代码(出于安全目的编辑了机密信息)
from apache_ranger.model.ranger_service import *
from apache_ranger.client.ranger_client import *
from apache_ranger.model.ranger_policy import *
ranger_url = 'http://************.com:***'
ranger_auth = ('**********', '**********')
ranger = RangerClient(ranger_url, ranger_auth)
policy = RangerPolicy()
policy.service = 'starburst-enterprise'
policy.name = 'test_policy'
policy.resources = { 'database': RangerPolicyResource({ 'values': ['hive'] }),
'table': RangerPolicyResource({ 'values': ['uber_rides'] }),
'column': RangerPolicyResource({ 'values': ['*'] }) }
allowItem1 = RangerPolicyItem()
allowItem1.groups = [ 'Data Product Owner' ]
allowItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'select' }) ]
denyItem1 = RangerPolicyItem()
denyItem1.groups = [ 'Data Product Owner' ]
denyItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'drop' }) ]
policy.policyItems = [ allowItem1 ]
policy.denyPolicyItems = [ denyItem1 ]
print('Creating policy: name=' + policy.name)
created_policy = ranger.create_policy(policy)
print(' created policy: name=' + created_policy.name + ', id=' + str(created_policy.id))
但是我收到这个错误,当我尝试调试它时我发现,它出现异常的原因是因为 ranger_clien.py 中的 http.post 方法正在返回一个响应(
Traceback (most recent call last):
File "c:\Users\j.shimoga.prakash\Desktop\pls work - Copy\test.py", line 37, in <module>
created_policy = ranger.create_policy(policy)
File "C:\Users\j.shimoga.prakash\Desktop\pls work - Copy\venv\lib\site-packages\apache_ranger\client\ranger_client.py", line 124, in create_policy
resp = self.__call_api(RangerClient.CREATE_POLICY, params, policy)
File "C:\Users\j.shimoga.prakash\Desktop\pls work - Copy\venv\lib\site-packages\apache_ranger\client\ranger_client.py",
File "C:\Users\j.shimoga.prakash\Desktop\pls work - Copy\venv\lib\site-packages\simplejson\decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
解决了我必须在 ranger_url 中传递 'https' 而不是 'http'
的问题