Apache-ranger python 库 JSONDecoder 错误

发布于 2025-01-13 03:42:19 字数 2362 浏览 3 评论 0原文

所以我试图使用 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)

So i'm trying to create a policy using the ranger python client, and this is my code (redacted confidential info for security purposes)

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))

But i receive this error, When i tried to debug it i found that, the reason it was going for an exception is because the http.post method inside the ranger_clien.py was returning a response (<Response [400]>) that is not handled by any of the if or elifs blocks hence it goes to else block and enters RaiseServiceException(), when i dug deeper i found some comments in the function that gives JSONDecoder error and it said that exception would be raised only if JSON input is not valid or if simplejson is not installed.

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

慕烟庭风 2025-01-20 03:42:19

解决了我只需在 ranger_url 中传递“https”而不是“http”的问题

Figured out the issue i just had to pass 'https' in ranger_url instead of 'http'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文