用于与 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作为参数实例化。环境变量:
OSDU_API_URLOSDU_CLIENT_IDOSDU_USEROSDU_PASSWORDAWS_PROFILEAWS_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)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。