apache-ranger


Nameapache-ranger JSON
Version 0.0.12 PyPI version JSON
download
home_pagehttps://github.com/apache/ranger/tree/master/intg/src/main/python
SummaryApache Ranger Python client
upload_time2023-10-13 23:16:41
maintainer
docs_urlNone
authorApache Ranger
requires_python>=2.7
licenseApache LICENSE 2.0
keywords ranger client apache ranger
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            <!---
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

# Apache Ranger - Python client

Python library for Apache Ranger.

## Installation

Use the package manager [pip](https://pip.pypa.io/en/stable/) to install python client for Apache Ranger.

```bash
> pip install apache-ranger
> pip install requests_kerberos (If using kerberos for authentication)
```

Verify if apache-ranger client is installed:
```bash
> pip list

Package      Version
------------ ---------
apache-ranger 0.0.12
```

## Usage

```python test_ranger.py```
```python
# test_ranger.py

from apache_ranger.model.ranger_service import *
from apache_ranger.client.ranger_client import *
from apache_ranger.model.ranger_policy  import *


## Step 1: create a client to connect to Apache Ranger admin
ranger_url  = 'http://localhost:6080'
ranger_auth = ('admin', 'rangerR0cks!')

# For Kerberos authentication
#
# from requests_kerberos import HTTPKerberosAuth
#
# ranger_auth = HTTPKerberosAuth()

ranger = RangerClient(ranger_url, ranger_auth)

# to disable SSL certificate validation (not recommended for production use!)
#
# ranger.session.verify = False


## Step 2: Let's create a service
service         = RangerService()
service.name    = 'test_hive'
service.type    = 'hive'
service.configs = {'username':'hive', 'password':'hive', 'jdbc.driverClassName': 'org.apache.hive.jdbc.HiveDriver', 'jdbc.url': 'jdbc:hive2://ranger-hadoop:10000', 'hadoop.security.authorization': 'true'}

print('Creating service: name=' + service.name)

created_service = ranger.create_service(service)

print('    created service: name=' + created_service.name + ', id=' + str(created_service.id))


## Step 3: Let's create a policy
policy           = RangerPolicy()
policy.service   = service.name
policy.name      = 'test policy'
policy.resources = { 'database': RangerPolicyResource({ 'values': ['test_db'] }),
                     'table':    RangerPolicyResource({ 'values': ['test_tbl'] }),
                     'column':   RangerPolicyResource({ 'values': ['*'] }) }

allowItem1          = RangerPolicyItem()
allowItem1.users    = [ 'admin' ]
allowItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'create' }),
                        RangerPolicyItemAccess({ 'type': 'alter' }) ]

denyItem1          = RangerPolicyItem()
denyItem1.users    = [ 'admin' ]
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))


## Step 4: Delete policy and service created above
print('Deleting policy: id=' + str(created_policy.id))

ranger.delete_policy_by_id(created_policy.id)

print('    deleted policy: id=' + str(created_policy.id))

print('Deleting service: id=' + str(created_service.id))

ranger.delete_service_by_id(created_service.id)

print('    deleted service: id=' + str(created_service.id))

```

```python test_ranger_kms.py```
```python
# test_ranger_kms.py
from apache_ranger.client.ranger_kms_client import RangerKMSClient
from apache_ranger.client.ranger_client     import HadoopSimpleAuth
from apache_ranger.model.ranger_kms         import RangerKey
import time


##
## Step 1: create a client to connect to Apache Ranger KMS
##
kms_url  = 'http://localhost:9292'
kms_auth = HadoopSimpleAuth('keyadmin')

# For Kerberos authentication
#
# from requests_kerberos import HTTPKerberosAuth
#
# kms_auth = HTTPKerberosAuth()
#
# For HTTP Basic authentication
#
# kms_auth = ('keyadmin', 'rangerR0cks!')

kms_client = RangerKMSClient(kms_url, kms_auth)



##
## Step 2: Let's call KMS APIs
##

kms_status = kms_client.kms_status()
print('kms_status():', kms_status)
print()

key_name = 'test_' + str(int(time.time() * 1000))

key = kms_client.create_key(RangerKey({'name':key_name}))
print('create_key(' + key_name + '):', key)
print()

rollover_key = kms_client.rollover_key(key_name, key.material)
print('rollover_key(' + key_name + '):', rollover_key)
print()

kms_client.invalidate_cache_for_key(key_name)
print('invalidate_cache_for_key(' + key_name + ')')
print()

key_metadata = kms_client.get_key_metadata(key_name)
print('get_key_metadata(' + key_name + '):', key_metadata)
print()

current_key = kms_client.get_current_key(key_name)
print('get_current_key(' + key_name + '):', current_key)
print()

encrypted_keys = kms_client.generate_encrypted_key(key_name, 6)
print('generate_encrypted_key(' + key_name + ', ' + str(6) + '):')
for i in range(len(encrypted_keys)):
  encrypted_key   = encrypted_keys[i]
  decrypted_key   = kms_client.decrypt_encrypted_key(key_name, encrypted_key.versionName, encrypted_key.iv, encrypted_key.encryptedKeyVersion.material)
  reencrypted_key = kms_client.reencrypt_encrypted_key(key_name, encrypted_key.versionName, encrypted_key.iv, encrypted_key.encryptedKeyVersion.material)
  print('  encrypted_keys[' + str(i) + ']: ', encrypted_key)
  print('  decrypted_key[' + str(i) + ']:  ', decrypted_key)
  print('  reencrypted_key[' + str(i) + ']:', reencrypted_key)
print()

reencrypted_keys = kms_client.batch_reencrypt_encrypted_keys(key_name, encrypted_keys)
print('batch_reencrypt_encrypted_keys(' + key_name + ', ' + str(len(encrypted_keys)) + '):')
for i in range(len(reencrypted_keys)):
  print('  batch_reencrypt_encrypted_key[' + str(i) + ']:', reencrypted_keys[i])
print()

key_versions = kms_client.get_key_versions(key_name)
print('get_key_versions(' + key_name + '):', len(key_versions))
for i in range(len(key_versions)):
  print('  key_versions[' + str(i) + ']:', key_versions[i])
print()

for i in range(len(key_versions)):
  key_version = kms_client.get_key_version(key_versions[i].versionName)
  print('get_key_version(' + str(i) + '):', key_version)
print()

key_names = kms_client.get_key_names()
print('get_key_names():', len(key_names))
for i in range(len(key_names)):
  print('  key_name[' + str(i) + ']:', key_names[i])
print()

keys_metadata = kms_client.get_keys_metadata(key_names)
print('get_keys_metadata(' + str(key_names) + '):', len(keys_metadata))
for i in range(len(keys_metadata)):
  print('  key_metadata[' + str(i) + ']:', keys_metadata[i])
print()

key = kms_client.get_key(key_name)
print('get_key(' + key_name + '):', key)
print()

kms_client.delete_key(key_name)
print('delete_key(' + key_name + ')')
```

```python test_ranger_user_mgmt.py```
```python
# test_ranger_user_mgmt.py
from apache_ranger.client.ranger_client           import *
from apache_ranger.utils                          import *
from apache_ranger.model.ranger_user_mgmt         import *
from apache_ranger.client.ranger_user_mgmt_client import *
from datetime                                     import datetime

##
## Step 1: create a client to connect to Apache Ranger
##
ranger_url  = 'http://localhost:6080'
ranger_auth = ('admin', 'rangerR0cks!')

# For Kerberos authentication
#
# from requests_kerberos import HTTPKerberosAuth
#
# ranger_auth = HTTPKerberosAuth()
#
# For HTTP Basic authentication
#
# ranger_auth = ('admin', 'rangerR0cks!')

ranger    = RangerClient(ranger_url, ranger_auth)
user_mgmt = RangerUserMgmtClient(ranger)



##
## Step 2: Let's call User Management APIs
##

print('\nListing users')

users = user_mgmt.find_users()

print(f'    {len(users.list)} users found')

for user in users.list:
    print(f'        id: {user.id}, name: {user.name}')


print('\nListing groups')

groups = user_mgmt.find_groups()

print(f'    {len(groups.list)} groups found')

for group in groups.list:
    print(f'        id: {group.id}, name: {group.name}')

print('\nListing group-users')

group_users = user_mgmt.find_group_users()

print(f'    {len(group_users.list)} group-users found')

for group_user in group_users.list:
    print(f'        id: {group_user.id}, groupId: {group_user.parentGroupId}, userId: {group_user.userId}')


now = datetime.now()

name_suffix = '-' + now.strftime('%Y%m%d-%H%M%S-%f')
user_name   = 'test-user' + name_suffix
group_name  = 'test-group' + name_suffix


user = RangerUser({ 'name': user_name, 'firstName': user_name, 'lastName': 'user', 'emailAddress': user_name + '@test.org', 'password': 'Welcome1', 'userRoleList': [ 'ROLE_USER' ], 'otherAttributes': '{ "dept": "test" }' })

print(f'\nCreating user: name={user.name}')

created_user = user_mgmt.create_user(user)

print(f'    created user: {created_user}')


group = RangerGroup({ 'name': group_name, 'otherAttributes': '{ "dept": "test" }' })

print(f'\nCreating group: name={group.name}')

created_group = user_mgmt.create_group(group)

print(f'    created group: {created_group}')


group_user = RangerGroupUser({ 'name': created_group.name, 'parentGroupId': created_group.id, 'userId': created_user.id })

print(f'\nAdding user {created_user.name} to group {created_group.name}')

created_group_user = user_mgmt.create_group_user(group_user)

print(f'    created group-user: {created_group_user}')


print('\nListing group-users')

group_users = user_mgmt.find_group_users()

print(f'    {len(group_users.list)} group-users found')

for group_user in group_users.list:
    print(f'        id: {group_user.id}, groupId: {group_user.parentGroupId}, userId: {group_user.userId}')


print(f'\nListing users for group {group.name}')

users = user_mgmt.get_users_in_group(group.name)

print(f'    users: {users}')


print(f'\nListing groups for user {user.name}')

groups = user_mgmt.get_groups_for_user(user.name)

print(f'    groups: {groups}')


print(f'\nDeleting group-user {created_group_user.id}')

user_mgmt.delete_group_user_by_id(created_group_user.id)


print(f'\nDeleting group {group.name}')

user_mgmt.delete_group_by_id(created_group.id, True)


print(f'\nDeleting user {user.name}')

user_mgmt.delete_user_by_id(created_user.id, True)
```

For more examples, checkout `sample-client` python  project in [ranger-examples](https://github.com/apache/ranger/blob/master/ranger-examples/sample-client/src/main/python) module.



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/apache/ranger/tree/master/intg/src/main/python",
    "name": "apache-ranger",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=2.7",
    "maintainer_email": "",
    "keywords": "ranger client,apache ranger",
    "author": "Apache Ranger",
    "author_email": "dev@ranger.apache.org",
    "download_url": "https://files.pythonhosted.org/packages/88/e3/e974af0f4d30da6d19ef6621289cca76a9e05f4f0b03b110dd92894a2d67/apache-ranger-0.0.12.tar.gz",
    "platform": null,
    "description": "<!---\nLicensed to the Apache Software Foundation (ASF) under one\nor more contributor license agreements.  See the NOTICE file\ndistributed with this work for additional information\nregarding copyright ownership.  The ASF licenses this file\nto you under the Apache License, Version 2.0 (the\n\"License\"); you may not use this file except in compliance\nwith the License.  You may obtain a copy of the License at\n\n  http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing,\nsoftware distributed under the License is distributed on an\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, either express or implied.  See the License for the\nspecific language governing permissions and limitations\nunder the License.\n-->\n\n# Apache Ranger - Python client\n\nPython library for Apache Ranger.\n\n## Installation\n\nUse the package manager [pip](https://pip.pypa.io/en/stable/) to install python client for Apache Ranger.\n\n```bash\n> pip install apache-ranger\n> pip install requests_kerberos (If using kerberos for authentication)\n```\n\nVerify if apache-ranger client is installed:\n```bash\n> pip list\n\nPackage      Version\n------------ ---------\napache-ranger 0.0.12\n```\n\n## Usage\n\n```python test_ranger.py```\n```python\n# test_ranger.py\n\nfrom apache_ranger.model.ranger_service import *\nfrom apache_ranger.client.ranger_client import *\nfrom apache_ranger.model.ranger_policy  import *\n\n\n## Step 1: create a client to connect to Apache Ranger admin\nranger_url  = 'http://localhost:6080'\nranger_auth = ('admin', 'rangerR0cks!')\n\n# For Kerberos authentication\n#\n# from requests_kerberos import HTTPKerberosAuth\n#\n# ranger_auth = HTTPKerberosAuth()\n\nranger = RangerClient(ranger_url, ranger_auth)\n\n# to disable SSL certificate validation (not recommended for production use!)\n#\n# ranger.session.verify = False\n\n\n## Step 2: Let's create a service\nservice         = RangerService()\nservice.name    = 'test_hive'\nservice.type    = 'hive'\nservice.configs = {'username':'hive', 'password':'hive', 'jdbc.driverClassName': 'org.apache.hive.jdbc.HiveDriver', 'jdbc.url': 'jdbc:hive2://ranger-hadoop:10000', 'hadoop.security.authorization': 'true'}\n\nprint('Creating service: name=' + service.name)\n\ncreated_service = ranger.create_service(service)\n\nprint('    created service: name=' + created_service.name + ', id=' + str(created_service.id))\n\n\n## Step 3: Let's create a policy\npolicy           = RangerPolicy()\npolicy.service   = service.name\npolicy.name      = 'test policy'\npolicy.resources = { 'database': RangerPolicyResource({ 'values': ['test_db'] }),\n                     'table':    RangerPolicyResource({ 'values': ['test_tbl'] }),\n                     'column':   RangerPolicyResource({ 'values': ['*'] }) }\n\nallowItem1          = RangerPolicyItem()\nallowItem1.users    = [ 'admin' ]\nallowItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'create' }),\n                        RangerPolicyItemAccess({ 'type': 'alter' }) ]\n\ndenyItem1          = RangerPolicyItem()\ndenyItem1.users    = [ 'admin' ]\ndenyItem1.accesses = [ RangerPolicyItemAccess({ 'type': 'drop' }) ]\n\npolicy.policyItems     = [ allowItem1 ]\npolicy.denyPolicyItems = [ denyItem1 ]\n\nprint('Creating policy: name=' + policy.name)\n\ncreated_policy = ranger.create_policy(policy)\n\nprint('    created policy: name=' + created_policy.name + ', id=' + str(created_policy.id))\n\n\n## Step 4: Delete policy and service created above\nprint('Deleting policy: id=' + str(created_policy.id))\n\nranger.delete_policy_by_id(created_policy.id)\n\nprint('    deleted policy: id=' + str(created_policy.id))\n\nprint('Deleting service: id=' + str(created_service.id))\n\nranger.delete_service_by_id(created_service.id)\n\nprint('    deleted service: id=' + str(created_service.id))\n\n```\n\n```python test_ranger_kms.py```\n```python\n# test_ranger_kms.py\nfrom apache_ranger.client.ranger_kms_client import RangerKMSClient\nfrom apache_ranger.client.ranger_client     import HadoopSimpleAuth\nfrom apache_ranger.model.ranger_kms         import RangerKey\nimport time\n\n\n##\n## Step 1: create a client to connect to Apache Ranger KMS\n##\nkms_url  = 'http://localhost:9292'\nkms_auth = HadoopSimpleAuth('keyadmin')\n\n# For Kerberos authentication\n#\n# from requests_kerberos import HTTPKerberosAuth\n#\n# kms_auth = HTTPKerberosAuth()\n#\n# For HTTP Basic authentication\n#\n# kms_auth = ('keyadmin', 'rangerR0cks!')\n\nkms_client = RangerKMSClient(kms_url, kms_auth)\n\n\n\n##\n## Step 2: Let's call KMS APIs\n##\n\nkms_status = kms_client.kms_status()\nprint('kms_status():', kms_status)\nprint()\n\nkey_name = 'test_' + str(int(time.time() * 1000))\n\nkey = kms_client.create_key(RangerKey({'name':key_name}))\nprint('create_key(' + key_name + '):', key)\nprint()\n\nrollover_key = kms_client.rollover_key(key_name, key.material)\nprint('rollover_key(' + key_name + '):', rollover_key)\nprint()\n\nkms_client.invalidate_cache_for_key(key_name)\nprint('invalidate_cache_for_key(' + key_name + ')')\nprint()\n\nkey_metadata = kms_client.get_key_metadata(key_name)\nprint('get_key_metadata(' + key_name + '):', key_metadata)\nprint()\n\ncurrent_key = kms_client.get_current_key(key_name)\nprint('get_current_key(' + key_name + '):', current_key)\nprint()\n\nencrypted_keys = kms_client.generate_encrypted_key(key_name, 6)\nprint('generate_encrypted_key(' + key_name + ', ' + str(6) + '):')\nfor i in range(len(encrypted_keys)):\n  encrypted_key   = encrypted_keys[i]\n  decrypted_key   = kms_client.decrypt_encrypted_key(key_name, encrypted_key.versionName, encrypted_key.iv, encrypted_key.encryptedKeyVersion.material)\n  reencrypted_key = kms_client.reencrypt_encrypted_key(key_name, encrypted_key.versionName, encrypted_key.iv, encrypted_key.encryptedKeyVersion.material)\n  print('  encrypted_keys[' + str(i) + ']: ', encrypted_key)\n  print('  decrypted_key[' + str(i) + ']:  ', decrypted_key)\n  print('  reencrypted_key[' + str(i) + ']:', reencrypted_key)\nprint()\n\nreencrypted_keys = kms_client.batch_reencrypt_encrypted_keys(key_name, encrypted_keys)\nprint('batch_reencrypt_encrypted_keys(' + key_name + ', ' + str(len(encrypted_keys)) + '):')\nfor i in range(len(reencrypted_keys)):\n  print('  batch_reencrypt_encrypted_key[' + str(i) + ']:', reencrypted_keys[i])\nprint()\n\nkey_versions = kms_client.get_key_versions(key_name)\nprint('get_key_versions(' + key_name + '):', len(key_versions))\nfor i in range(len(key_versions)):\n  print('  key_versions[' + str(i) + ']:', key_versions[i])\nprint()\n\nfor i in range(len(key_versions)):\n  key_version = kms_client.get_key_version(key_versions[i].versionName)\n  print('get_key_version(' + str(i) + '):', key_version)\nprint()\n\nkey_names = kms_client.get_key_names()\nprint('get_key_names():', len(key_names))\nfor i in range(len(key_names)):\n  print('  key_name[' + str(i) + ']:', key_names[i])\nprint()\n\nkeys_metadata = kms_client.get_keys_metadata(key_names)\nprint('get_keys_metadata(' + str(key_names) + '):', len(keys_metadata))\nfor i in range(len(keys_metadata)):\n  print('  key_metadata[' + str(i) + ']:', keys_metadata[i])\nprint()\n\nkey = kms_client.get_key(key_name)\nprint('get_key(' + key_name + '):', key)\nprint()\n\nkms_client.delete_key(key_name)\nprint('delete_key(' + key_name + ')')\n```\n\n```python test_ranger_user_mgmt.py```\n```python\n# test_ranger_user_mgmt.py\nfrom apache_ranger.client.ranger_client           import *\nfrom apache_ranger.utils                          import *\nfrom apache_ranger.model.ranger_user_mgmt         import *\nfrom apache_ranger.client.ranger_user_mgmt_client import *\nfrom datetime                                     import datetime\n\n##\n## Step 1: create a client to connect to Apache Ranger\n##\nranger_url  = 'http://localhost:6080'\nranger_auth = ('admin', 'rangerR0cks!')\n\n# For Kerberos authentication\n#\n# from requests_kerberos import HTTPKerberosAuth\n#\n# ranger_auth = HTTPKerberosAuth()\n#\n# For HTTP Basic authentication\n#\n# ranger_auth = ('admin', 'rangerR0cks!')\n\nranger    = RangerClient(ranger_url, ranger_auth)\nuser_mgmt = RangerUserMgmtClient(ranger)\n\n\n\n##\n## Step 2: Let's call User Management APIs\n##\n\nprint('\\nListing users')\n\nusers = user_mgmt.find_users()\n\nprint(f'    {len(users.list)} users found')\n\nfor user in users.list:\n    print(f'        id: {user.id}, name: {user.name}')\n\n\nprint('\\nListing groups')\n\ngroups = user_mgmt.find_groups()\n\nprint(f'    {len(groups.list)} groups found')\n\nfor group in groups.list:\n    print(f'        id: {group.id}, name: {group.name}')\n\nprint('\\nListing group-users')\n\ngroup_users = user_mgmt.find_group_users()\n\nprint(f'    {len(group_users.list)} group-users found')\n\nfor group_user in group_users.list:\n    print(f'        id: {group_user.id}, groupId: {group_user.parentGroupId}, userId: {group_user.userId}')\n\n\nnow = datetime.now()\n\nname_suffix = '-' + now.strftime('%Y%m%d-%H%M%S-%f')\nuser_name   = 'test-user' + name_suffix\ngroup_name  = 'test-group' + name_suffix\n\n\nuser = RangerUser({ 'name': user_name, 'firstName': user_name, 'lastName': 'user', 'emailAddress': user_name + '@test.org', 'password': 'Welcome1', 'userRoleList': [ 'ROLE_USER' ], 'otherAttributes': '{ \"dept\": \"test\" }' })\n\nprint(f'\\nCreating user: name={user.name}')\n\ncreated_user = user_mgmt.create_user(user)\n\nprint(f'    created user: {created_user}')\n\n\ngroup = RangerGroup({ 'name': group_name, 'otherAttributes': '{ \"dept\": \"test\" }' })\n\nprint(f'\\nCreating group: name={group.name}')\n\ncreated_group = user_mgmt.create_group(group)\n\nprint(f'    created group: {created_group}')\n\n\ngroup_user = RangerGroupUser({ 'name': created_group.name, 'parentGroupId': created_group.id, 'userId': created_user.id })\n\nprint(f'\\nAdding user {created_user.name} to group {created_group.name}')\n\ncreated_group_user = user_mgmt.create_group_user(group_user)\n\nprint(f'    created group-user: {created_group_user}')\n\n\nprint('\\nListing group-users')\n\ngroup_users = user_mgmt.find_group_users()\n\nprint(f'    {len(group_users.list)} group-users found')\n\nfor group_user in group_users.list:\n    print(f'        id: {group_user.id}, groupId: {group_user.parentGroupId}, userId: {group_user.userId}')\n\n\nprint(f'\\nListing users for group {group.name}')\n\nusers = user_mgmt.get_users_in_group(group.name)\n\nprint(f'    users: {users}')\n\n\nprint(f'\\nListing groups for user {user.name}')\n\ngroups = user_mgmt.get_groups_for_user(user.name)\n\nprint(f'    groups: {groups}')\n\n\nprint(f'\\nDeleting group-user {created_group_user.id}')\n\nuser_mgmt.delete_group_user_by_id(created_group_user.id)\n\n\nprint(f'\\nDeleting group {group.name}')\n\nuser_mgmt.delete_group_by_id(created_group.id, True)\n\n\nprint(f'\\nDeleting user {user.name}')\n\nuser_mgmt.delete_user_by_id(created_user.id, True)\n```\n\nFor more examples, checkout `sample-client` python  project in [ranger-examples](https://github.com/apache/ranger/blob/master/ranger-examples/sample-client/src/main/python) module.\n\n\n",
    "bugtrack_url": null,
    "license": "Apache LICENSE 2.0",
    "summary": "Apache Ranger Python client",
    "version": "0.0.12",
    "project_urls": {
        "Homepage": "https://github.com/apache/ranger/tree/master/intg/src/main/python"
    },
    "split_keywords": [
        "ranger client",
        "apache ranger"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "efc6fe7aa214a21984346c79346e63ae78ef12bda6203e1c6ebd765cdd45818f",
                "md5": "5186c4aa0118fb36c6818358a19fc7b9",
                "sha256": "6a6e9c4aa4c74bc65741ba1fde08688a5fb6a3b5f71b8573449ab27d8fb2a71d"
            },
            "downloads": -1,
            "filename": "apache_ranger-0.0.12-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5186c4aa0118fb36c6818358a19fc7b9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=2.7",
            "size": 37716,
            "upload_time": "2023-10-13T23:16:39",
            "upload_time_iso_8601": "2023-10-13T23:16:39.658344Z",
            "url": "https://files.pythonhosted.org/packages/ef/c6/fe7aa214a21984346c79346e63ae78ef12bda6203e1c6ebd765cdd45818f/apache_ranger-0.0.12-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "88e3e974af0f4d30da6d19ef6621289cca76a9e05f4f0b03b110dd92894a2d67",
                "md5": "c50c783173922acd9b6b2b822a54157e",
                "sha256": "b7b538de38ead8c51a57e111cb153834eb097e87a565ca38e493cba6e8a6ff46"
            },
            "downloads": -1,
            "filename": "apache-ranger-0.0.12.tar.gz",
            "has_sig": false,
            "md5_digest": "c50c783173922acd9b6b2b822a54157e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=2.7",
            "size": 24089,
            "upload_time": "2023-10-13T23:16:41",
            "upload_time_iso_8601": "2023-10-13T23:16:41.813002Z",
            "url": "https://files.pythonhosted.org/packages/88/e3/e974af0f4d30da6d19ef6621289cca76a9e05f4f0b03b110dd92894a2d67/apache-ranger-0.0.12.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-10-13 23:16:41",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "apache",
    "github_project": "ranger",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": true,
    "lcname": "apache-ranger"
}
        
Elapsed time: 0.34642s