Skip to main content

用于与 OSDU API 交互的简单 python 客户端。

项目描述

osdupy

OSDU数据平台的简单 python 客户端。

内容

客户

选择最能满足您需求的客户。每种方法都支持相同的方法。

SimpleOsduClient

BYOT:带上你自己的代币。非常适合补充前端应用程序的后端服务或业务逻辑。

此客户端假定您自己获取令牌(例如,通过您的应用程序的登录表单或其他机制。使用此 SimpleOsduClient,您只需提供该令牌。通过这种简单性,您还可以根据需要重新生成令牌并重新实例化使用新令牌的客户端。

AwsOsduServicePrincipalClient

要求boto3==1.15.*

适用于没有交互式前端的批处理任务。令牌管理由 boto3 库直接通过 Cognito 服务处理。您必须为此提供额外的参数。

对于 AWS 上的 OSDU,此客户端通常比 AwsOsduClient 简单,只要您拥有 IAM 凭证来访问必要的资源。您只需提供 OSDU 资源前缀、区域和配置文件。

AwsOsduClient

要求boto3==1.15.*

适用于没有交互式前端的批处理任务。令牌管理由 boto3 库直接通过 Cognito 服务处理。您必须为此提供额外的参数。

对于 AWS 上的 OSDU,当您可能希望以特定 OSDU 用户而不是 ServicePrinicpal 的身份执行操作时,此客户端非常有用。

当前支持的方法

  • 搜索
    • 询问
    • query_with_paging
  • 贮存
    • query_all_kinds
    • 获取记录
    • 获取记录
    • get_all_record_versions
    • 获取记录版本
    • 存储记录
    • 删除记录
    • 清除记录
  • 数据集
    • 获取数据集注册表
    • 获取数据集注册表
    • get_storage_instructions
    • 注册数据集
    • 获取检索指令
  • 权利
    • 获取组
    • get_group_members
    • add_group_member
    • 删除组成员
    • 创建组

安装

pip install osdupy

测试

运行单元测试

python -m unittest -v tests.unit

运行集成测试

python -m unittest -v tests.integration

用法

实例化 SimpleOsduClient

如果设置了环境变量OSDU_API_URL,则不需要将其作为参数传递。否则,它必须作为关键字参数传递。

from osdu.client import SimpleOsduClient

data_partition = 'osdu'
token = 'token-received-from-front-end-app'

# With env var `OSDU_API_URL` set in current environment.
osdu_client = SimpleOsduClient(data_partition, token)

# Without env var set.
api_url = 'https://your.api.base_url.com'
osdu_client = SimpleOsduClient(data_partition, token, api_url=api_url)

实例化 AwsServicePrincipalOsduClient

from osdu.client import AwsOsduClient

data_partition = 'osdu'
resource_prefix = 'osdur3mX'

osdu_client = AwsServicePrincipalOsduClient(
    data_partition,
    resource_prefix,
    profile=os.environ['AWS_PROFILE'],
    region=os.environ['AWS_DEFAULT_REGION']
)

实例化 AwsOsduClient

唯一需要的参数是data_partition. 如果您的环境变量(如下)已设置,则客户端只能data_partition作为参数实例化。环境变量:

  1. OSDU_API_URL
  2. OSDU_CLIENT_ID
  3. OSDU_USER
  4. OSDU_PASSWORD
  5. AWS_PROFILE
  6. AWS_SECRETHASH
from osdu.client import AwsOsduClient

data_partition = 'osdu'

osdu_client = AwsOsduClient(data_partition)

如果您没有设置上述环境变量(或者您只设置了一些),那么您将需要在实例化客户端时传递任何未定义的参数。

from getpass import getpass
from osdu.client import AwsOsduClient

api_url = 'https://your.api.url.com'  # Must be base URL only
client_id = 'YOURCLIENTID'
user = 'username@testing.com'
password = getpass()
data_partition = 'osdu'
profile = 'osdu-dev'

message = user + client_id
dig = hmac.new(client_secret.encode('UTF-8'), msg=message.encode('UTF-8'),
               digestmod=hashlib.sha256).digest()
secretHash = base64.b64encode(dig).decode()



osdu_client = AwsOsduClient(data_partition,
    api_url=api_url,
    client_id=client_id,
    user=user,
    password=password,
    secret_hash=secretHash,
    profile=profile)

使用客户端

下面只是一些使用示例。有关更全面的使用示例,请参阅集成测试

按查询搜索记录

query = {
    "kind": f"osdu:wks:*:*"
}
result = osdu_client.search.query(query)
# { results: [ {...}, .... ], totalCount: ##### }

分页搜索

对于大于 1,000 条记录的结果集,请使用分页查询方法。

page_size = 100 # Number of records per page (1-1000)
query = {
    "kind": f"osdu:wks:*:*",
    "limit": page_size
}
result = osdu_client.search.query_with_paging(query)

# Iterate over the pages to do something with the results.
for page, total_count in result:
    for record in page:
        # Do stuff with record...

获取记录

record_id = 'opendes:doc:123456789'
result = osdu_client.storage.get_record(record_id)
# { 'id': 'opendes:doc:123456789', 'kind': ..., 'data': {...}, 'acl': {...}, .... }

更新插入记录

new_or_updated_record = './record-123.json'
with open(new_or_updated_record, 'r') as _file:
    record = json.load(_file)

result = osdu_client.storage.store_records([record])

列出当前用户的组成员身份

result = osdu_client.entitlements.get_groups()
# {
#  "desId": "user@example.org",
#  "groups": [
#    {
#      "description": "Datalake Plugin-Manager users",
#      "email": "service.plugin.user@osdu.example.com",
#      "name": "service.plugin.user"
#    },
#    {
#      "description": "Datalake csv-parser admins",
#      "email": "service.csv-parser.admin@osdu.example.com",
#      "name": "service.csv-parser.admin"
#    },
#    #...
#       {
#     "description": "The viewer of the datalake csv-parser service",
#     "email": "service.csv-parser.viewer@osdu.example.com",
#     "name": "service.csv-parser.viewer"
#   }
# ],
# "memberEmail": "user@example.com"
# }

列出特定组的成员

result = osdu_client.entitlements.get_group_members('users@osdu.example.com')
#{
#  "members": [
#    {
#      "email": "serviceprincipal@testing.com",
#      "role": "OWNER"
#    },
#    {
#      "email": "user@example.com",
#      "role": "OWNER"
#    },
#    {
#      "email": "noaccess@testing.com",
#      "role": "OWNER"
#    }
#  ]
#}

将用户添加到特定组

将用户 ( user@example.com ) 添加到组以授予搜索和检索数据的权利。

query =  {
     "email": "user@example.com",
     #OWNER or MEMBER
     "role": "MEMBER",
 }
result = osdu_client.entitlements.add_group_member('users.datalake.viewers@osdu.example.com',query)
query =  {
     "email": "user@example.com",
     #OWNER or MEMBER
     "role": "OWNER",
 }
result = osdu_client.entitlements.add_group_member('service.search.admin@osdu.example.com',query)

从特定组中删除用户

从组中删除用户 ( user@example.com )。

query =  {
     "email": "user@example.com",
     #OWNER or MEMBER
     "role": "MEMBER",
 }
result = osdu_client.entitlements.delete_group_member('users.datalake.viewers@osdu.example.com',query)
query =  {
     "email": "user@example.com",
     #OWNER or MEMBER
     "role": "OWNER",
 }
result = osdu_client.entitlements.delete_group_member('service.search.admin@osdu.example.com',query)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

osdupy-0.4.0.tar.gz (17.1 kB 查看哈希

已上传 source

内置分布

osdupy-0.4.0-py3-none-any.whl (19.3 kB 查看哈希

已上传 py3