python - 提取 gcloud/digitalocean url 数据以进行签名的改进方法
问题描述
我有一个 python 实用函数,它给出了一个来自 gcp 或 digitalocean 的私有 url,使用 boto3 库对其进行签名。
要签署一个 url,我首先需要知道 urlsbucket_id
和object_id
bucket region
,目前我正在使用正则表达式提取它们。为了解析 gcp 和 digitalocean url,我创建了两个单独的正则表达式,并根据 url 使用两者之一。
我的私人网址具有以下结构:
- GCP:(
https://storage.googleapis.com/bucket_id/object_id
区域始终为auto
) - 数字海洋:
https://bucket_id.region.digitaloceanspaces.com/object_id
现在,我的方法有效,类似于下面的伪代码:
def sign_url(url):
if "digitaloceanspaces.com" in url:
bucket, region, endpoint, object_id = extract_do_data(url) # <- using do regex
elif "storage.googleapis.com" in url:
bucket, region, endpoint, object_id = extract_google_data(url) # <- using gcp regex
else:
raise ApiError(f"url data extraction failed for unrecognized url {url}")
[...]
client = boto3.Session().client(
region_name=region,
endpoint_url=endpoint,
...
)
signed_url = client.generate_presigned_url(
ClientMethod="get_object",
Params={"Bucket": bucket, "Key": object_id},
)
return signed_url
我正在寻找的是具有通用功能,最好来自内置的python库或boto3,它足够通用,可以让我始终能够从任何输入url中提取和存储bucket_id
,而不管结构如何。重要的是足够通用,如果有一天我需要从新服务签署 url,或者 url 采用不同的结构(我相信 gcp url 也可以传递为,这将需要一个新的正则表达式),我仍然可以提取我的元素而无需更改。object_id
region
https://bucket_id.storage.googleapis.com/object_id
解决方案
推荐阅读
- regex - 需要正则表达式查找和替换以忽略字符串中的代码字符
- sas-macro - 在 SAS 中使用宏生成联合语句
- python - 如何在python中按日期时间对列表进行排序?
- postgresql - 无法启动 docker 容器,“docker ps -a” STATUS = Exited (1)
- php - 如何使用或不使用插件将实时 wordpress 站点迁移到我的本地主机
- angular - 尝试即时更新生成的 angular6-json-schema-form
- javascript - 找不到带有 rails 5 和 es6 的 babel-transpiler?
- mysql - SQL 替换所有指定的键
- java - 使用 java Collections 出乎意料
- r - 如何为 R 中的预测创建坐标网格