Async Cow Python 七牛异步SDK

Async Cow Python 七牛异步SDK

本SDK基于官方SDK改造而成,但又对其进行了进一步封装,简化了相关操作
例如:

  • 1、不需要使用者关心token问题

  • 2、简化了相关导包和引用,并且保持接口一致

  • 3、实现了异步IO,引入协程概念,IO层面引入aiohttp,aiofiles等,使得本SDK适用于异步编程

gitee:https://gitee.com/xixigroup/async_cow

感谢您的星星❤

[官方SDK请见] https://developer.qiniu.com/kodo/1242/python

组织:

QQ群: 614714752

Install

python解释器版本要求:> 3.6

# 标准安装
pip install async_cow

# 从官方源安装,你能获取最新版本SDK
pip install async_cow -i https://pypi.python.org/simple

Usage

初始化

在你需要的地方

from async_cow import AsyncCow, ClientCow
cow = AsyncCow(<ACCESS_KEY>, <SECRET_KEY>)
client = ClientCow(<ACCESS_KEY>, <SECRET_KEY>)

云存储桶操作

b = cow.get_bucket(<BUCKET>)

后面都用这个桶对象来操作。 它代表了<BUCKET>

列出所有的bucket

res = await b.buckets()

列出一个bucket中的所有文件

res = await b.list()

这个方法还有 marker, limit, prefix这三个可选参数,详情参考官方文档

bucket相关方法和用法和官方SDK同步

上传

file_path = '/Users/admin/Desktop/123.jpg'

with open(file_path, 'rb') as f:
    c = f.read()

# 上传二进制流
res = await b.put_data(
    key='AK47.jpg',  # 上传后的文件名
    data=c
)

# 上传文件
res = await b.put_file(
    key='AK472.jpg',  # 上传后的文件名
    file_path=file_path
)
for i in res:
    print(i)

删除,查看文件信息

await b.stat('a')                 # 查看单个文件信息
await b.delete('a')               # 删除单个文件

拷贝,移动(改名)经测试,只能在桶内copy和move

这两个操作需要提供源文件名和目标文件名

await b.copy('a', 'b')                            # 将'a' 拷贝至'b'
await b.move('a', 'b')                            # 将'a' 改名为'b'

有没有觉得比官方SDK容易使用多呢?


异常

在封装aiohttp操作时已经处理了大部分异常和重试过程,但仍会存在一些意外

所以安全的做法是这样:

try:
    await b.delete('a')
except Exception as e:
    # 自行处理
    pass

短信客户端操作

# 获取一个短信客户端对象
sms = cow.get_sms()

创建,查看,编辑,删除签名

await sms.createSignature(<signature>, <source>)
await sms.querySignature()
await sms.updateSignature(<id>, <signature>)
await sms.deleteSignature(<id>)

创建,查看,编辑,删除模版

await sms.createTemplate(<name>, <template>, <type>, <description>, <signature_id>)
await sms.queryTemplate(<audit_status>)
await sms.updateTemplate(<id>, <name>, <template>, <description>, <signature_id>)
await sms.deleteTemplate(<id>)

发送短信,查看发送记录,查询发送计费条数

await sms.sendMessage(<template_id>, <mobiles>, <parameters>)
await sms.get_messages_info()
await sms.get_charge_message_count(<start>, <end>, <g>, <status>)

持久化

# 获取持久化类对象
p = cow.get_persistent_fop(<bucket>)

文件持久化

await p.execute(<key>, <fops>)

直播连麦管理

# 获取一个管理类对象
r = cow.get_rtc_server()

创建,获取,修改,删除app

await r.create_app(<data>)
await r.get_app()
await r.update_app(<app_id>, <data>)
await r.delete_app(<app_id>)

用户列表,踢出用户

await r.list_user(<app_id>, <data>)
await r.kick_user(<app_id>, <data>, <user_id>)

查看活跃房间

await r.list_active_rooms(<app_id>)

CDN管理

# 获取cdn管理类对象
cdn = cow.get_cdn_manager()

刷新文件、目录

await cdn.refresh_urls(<urls>)
await cdn.refresh_dirs(<dirs>)
# 同时刷新urls和dirs
await cdn.refresh_urls_and_dirs(<urls>, <dirs>)

预取文件列表

await cdn.prefetch_urls(<urls>)

查询宽带、流量数据

# 宽带
await cdn.get_bandwidth_data(<domains>, <start_date>, <end_date>, <granularity>)
# 流量
await cdn.get_flux_data(<domains>, <start_date>, <end_date>, <granularity>)

获取日志下载链接

await cdn.get_log_list_data(<domains>, <log_date>)

修改证书

await cdn.put_httpsconf(<name>, <certid>)

域名管理

# 获取域名管理类对象
d = cow.get_domain_manager()

创建,查看,删除域名

await d.create_domain(<name>, <body>)
await d.get_domain(<name>)
await d.delete_domain(<name>)

上线、下线域名

await d.domain_online(<name>)
await d.domain_offline(<name>)

创建、修改证书

await d.create_sslcert(<name>, <certid>, <forceHttps>)
await d.put_httpsconf(<name>, <common_name>, <pri>, <ca>)

账号客户端

# 获取帐号客户端对象
app = client.get_app()

创建、获取管理客户端

await app.create_qcos_client(<app_uri>)
await app.get_qcos_client(<app_uri>)

账号密钥

# 获取帐号下应用的密钥
await app.get_app_keys(<app_uri>)
# 获取帐号下可用的应用的密钥
await app.get_valid_app_auth(<app_uri>)

当前账号的信息

await app.get_account_info()

获得指定应用所在区域的产品信息

await app.get_app_region_products(<app_uri>)

获取指定区域产品信息

await app.get_region_products(<region>)

获得账号可见的区域的信息

await app.list_regions()

创建、获得、删除当前账号的应用

await app.create_app(<args>)
await app.list_apps()
await app.delete_app(<app_uri>)

资源管理客户端

# 获取资源管理客户端对象
q = client.get_qcos_client()

创建、获取、删除服务组

await q.create_stack(<args>)
await q.get_stack(<stack>)
await q.delete_stack(<stack>)

启动、停止服务组

await q.start_stack(<stack>)
await q.stop_stack(<stack>)

创建、获取、更新删除服务

await q.create_service(<stack>, <args>)
# 查看服务
await q.get_service_inspect(<stack>, <service>)
# 获得服务列表
await q.list_services(<stack>)
await q.update_service(<stack>, <service>, <args>)
await q.delete_service(<stack>, <service>)

启动、停止服务

await q.start_service(<stack>, <service>)
await q.stop_service(<stack>, <service>)

扩容、缩容服务

await q.scale_service(<stack>, <service>, <args>)

创建、删除、扩容存储卷

await q.create_service_volume(<stack>, <service>, <args>)
await q.delete_service_volume(<stack>, <service>, <volume>)
await q.extend_service_volume(<stack>, <service>, <volume>, <args>)

查看、列出容器

await q.get_container_inspect(<ip>)
await q.list_containers()

启动、停止、重启容器

await q.start_container(<ip>)
await q.stop_container(<ip>)
await q.restart_container(<ip>)

接入点

# 列出接入点
await q.list_aps()
# 搜索接入点
await q.search_ap(<mode>, <query>)
# 查看接入点
await q.get_ap(<apid>)
# 申请接入点
await q.create_ap(<args>)
# 更新接入点
await q.update_ap(<apid>, <args>)
# 更新接入点端口配置
await q.set_ap_port(<apid>, <port>, <args>)
# 释放接入点
await q.delete_ap(<apid>)

自定义域名

# 绑定自定义域名
await q.publish_ap(<apid>, <args>)
# 解绑自定义域名
await q.unpublish_ap(<apid>, <args>)

查看健康检查结果

await q.get_ap_port_healthcheck(<apid>, <port>)

调整后端实例配置

await q.set_ap_port_container(<apid>, <port>, <args>)

接入点端口

# 临时关闭接入点端口
await q.disable_ap_port(<apid>, <port>)
# 开启接入点端口
await q.enable_ap_port(<apid>, <port>)

列出入口提供商

await q.get_ap_providers()

获取一次性代理地址

await q.get_web_proxy(<backend>)

测试

桶测试

  1. 首先从github clone项目到本地
  2. 在项目中有example供测试,配置好main.py中的access_key、secret_key、bucket以及file_path参数后即可开始测试

特别鸣谢:Hagworm 以及七牛官方

欢迎大佬指正!感谢您的星星❤

本文由【希希大队长】原创

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容