Async Cow Python 七牛异步SDK
# Async Cow Python 七牛异步SDK > gitee链接 >github链接
本SDK基于官方SDK改造而成,但又对其进行了进一步封装,简化了相关操作
例如:
- 1、不需要使用者关心token问题
- 2、简化了相关导包和引用,并且保持接口一致
- 3、实现了异步IO,引入协程概念,IO层面引入aiohttp,aiofiles等,使得本SDK适用于异步编程
感谢您的星星
[官方SDK请见] https://developer.qiniu.com/kodo/1242/python
## 组织:
QQ群: 614714752
## Install
python解释器版本要求:> 3.6
```bash
# 标准安装
pip install async_cow
# 从官方源安装,你能获取最新版本SDK
pip install async_cow -i https://pypi.python.org/simple
```
## Usage
### 初始化
在你需要的地方
```python
from async_cow import AsyncCow, ClientCow
cow = AsyncCow(<ACCESS_KEY>, <SECRET_KEY>)
client = ClientCow(<ACCESS_KEY>, <SECRET_KEY>)
```
### 云存储桶操作
```python
b = cow.get_bucket(<BUCKET>)
```
后面都用这个桶对象来操作。 它代表了`<BUCKET>`
#### 列出所有的bucket
```python
res = await b.buckets()
```
#### 列出一个bucket中的所有文件
```python
res = await b.list()
```
这个方法还有 marker, limit, prefix这三个可选参数,详情参考官方文档
bucket相关方法和用法和官方SDK同步
#### 上传
```python
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)
```
#### 删除,查看文件信息
```python
await b.stat('a') # 查看单个文件信息
await b.delete('a') # 删除单个文件
```
#### 拷贝,移动(改名)经测试,只能在桶内copy和move
这两个操作需要提供源文件名和目标文件名
```python
await b.copy('a', 'b') # 将'a' 拷贝至'b'
await b.move('a', 'b') # 将'a' 改名为'b'
```
有没有觉得比官方SDK容易使用多呢?
--------
#### 异常
在封装aiohttp操作时已经处理了大部分异常和重试过程,但仍会存在一些意外
所以安全的做法是这样:
```python
try:
await b.delete('a')
except Exception as e:
# 自行处理
pass
```
###短信客户端操作
```python
# 获取一个短信客户端对象
sms = cow.get_sms()
```
#### 创建,查看,编辑,删除签名
```python
await sms.createSignature(<signature>, <source>)
await sms.querySignature()
await sms.updateSignature(<id>, <signature>)
await sms.deleteSignature(<id>)
```
#### 创建,查看,编辑,删除模版
```python
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>)
```
####发送短信,查看发送记录,查询发送计费条数
```python
await sms.sendMessage(<template_id>, <mobiles>, <parameters>)
await sms.get_messages_info()
await sms.get_charge_message_count(<start>, <end>, <g>, <status>)
```
### 持久化
```python
# 获取持久化类对象
p = cow.get_persistent_fop(<bucket>)
```
#### 文件持久化
```python
await p.execute(<key>, <fops>)
```
###直播连麦管理
```python
# 获取一个管理类对象
r = cow.get_rtc_server()
```
#### 创建,获取,修改,删除app
```python
await r.create_app(<data>)
await r.get_app()
await r.update_app(<app_id>, <data>)
await r.delete_app(<app_id>)
```
#### 用户列表,踢出用户
```python
await r.list_user(<app_id>, <data>)
await r.kick_user(<app_id>, <data>, <user_id>)
```
#### 查看活跃房间
```python
await r.list_active_rooms(<app_id>)
```
### CDN管理
```python
# 获取cdn管理类对象
cdn = cow.get_cdn_manager()
```
#### 刷新文件、目录
```python
await cdn.refresh_urls(<urls>)
await cdn.refresh_dirs(<dirs>)
# 同时刷新urls和dirs
await cdn.refresh_urls_and_dirs(<urls>, <dirs>)
```
#### 预取文件列表
```python
await cdn.prefetch_urls(<urls>)
```
#### 查询宽带、流量数据
```python
# 宽带
await cdn.get_bandwidth_data(<domains>, <start_date>, <end_date>, <granularity>)
# 流量
await cdn.get_flux_data(<domains>, <start_date>, <end_date>, <granularity>)
```
#### 获取日志下载链接
```python
await cdn.get_log_list_data(<domains>, <log_date>)
```
#### 修改证书
```python
await cdn.put_httpsconf(<name>, <certid>)
```
### 域名管理
```python
# 获取域名管理类对象
d = cow.get_domain_manager()
```
#### 创建,查看,删除域名
```python
await d.create_domain(<name>, <body>)
await d.get_domain(<name>)
await d.delete_domain(<name>)
```
#### 上线、下线域名
```python
await d.domain_online(<name>)
await d.domain_offline(<name>)
```
#### 创建、修改证书
```python
await d.create_sslcert(<name>, <certid>, <forceHttps>)
await d.put_httpsconf(<name>, <common_name>, <pri>, <ca>)
```
### 账号客户端
```python
# 获取帐号客户端对象
app = client.get_app()
```
#### 创建、获取管理客户端
```python
await app.create_qcos_client(<app_uri>)
await app.get_qcos_client(<app_uri>)
```
#### 账号密钥
```python
# 获取帐号下应用的密钥
await app.get_app_keys(<app_uri>)
# 获取帐号下可用的应用的密钥
await app.get_valid_app_auth(<app_uri>)
```
#### 当前账号的信息
```python
await app.get_account_info()
```
####获得指定应用所在区域的产品信息
```python
await app.get_app_region_products(<app_uri>)
```
#### 获取指定区域产品信息
```python
await app.get_region_products(<region>)
```
#### 获得账号可见的区域的信息
```python
await app.list_regions()
```
#### 创建、获得、删除当前账号的应用
```python
await app.create_app(<args>)
await app.list_apps()
await app.delete_app(<app_uri>)
```
### 资源管理客户端
```python
# 获取资源管理客户端对象
q = client.get_qcos_client()
```
#### 创建、获取、删除服务组
```python
await q.create_stack(<args>)
await q.get_stack(<stack>)
await q.delete_stack(<stack>)
```
#### 启动、停止服务组
```python
await q.start_stack(<stack>)
await q.stop_stack(<stack>)
```
#### 创建、获取、更新删除服务
```python
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>)
```
#### 启动、停止服务
```python
await q.start_service(<stack>, <service>)
await q.stop_service(<stack>, <service>)
```
#### 扩容、缩容服务
```python
await q.scale_service(<stack>, <service>, <args>)
```
#### 创建、删除、扩容存储卷
```python
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>)
```
#### 查看、列出容器
```python
await q.get_container_inspect(<ip>)
await q.list_containers()
```
#### 启动、停止、重启容器
```python
await q.start_container(<ip>)
await q.stop_container(<ip>)
await q.restart_container(<ip>)
```
#### 接入点
```python
# 列出接入点
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>)
```
#### 自定义域名
```python
# 绑定自定义域名
await q.publish_ap(<apid>, <args>)
# 解绑自定义域名
await q.unpublish_ap(<apid>, <args>)
```
#### 查看健康检查结果
```python
await q.get_ap_port_healthcheck(<apid>, <port>)
```
#### 调整后端实例配置
```python
await q.set_ap_port_container(<apid>, <port>, <args>)
```
#### 接入点端口
```python
# 临时关闭接入点端口
await q.disable_ap_port(<apid>, <port>)
# 开启接入点端口
await q.enable_ap_port(<apid>, <port>)
```
#### 列出入口提供商
```python
await q.get_ap_providers()
```
#### 获取一次性代理地址
```python
await q.get_web_proxy(<backend>)
```
## 测试
###桶测试
1. 首先从github clone项目到本地
2. 在项目中有example供测试,配置好main.py中的access_key、secret_key、bucket以及file_path参数后即可开始测试
特别鸣谢:[Hagworm]以及七牛官方
欢迎大佬指正!感谢您的星星
Async Cow Python 七牛异步SDK的更多相关文章
- 七牛php sdk 生成上传凭证时出现 undefined function Qiniu_SetKeys()
将qiniu/http.php文件改名即可,原因是xampp等集成环境会安装pear存在了http.php
- 基于七牛Python SDK写的一个同步脚本
需求背景 最近刚搭了个markdown静态博客,想把博客的图片放到云存储中. 经过调研觉得七牛可以满足我个人的需求,就选它了. 博客要引用图片就要先将图片上传到云上. 虽然七牛网站后台可以上传文件,但 ...
- 七牛用户搭建c# sdk的图文讲解
Qiniu 七牛问题解答 问题描写叙述:非常多客户属于小白类型. 可是请不要随便喷七牛的文档站.由于须要一点http的专业知识才干了解七牛的api文档.如今我给大家弄个c# sdk的搭建步骤 问题解决 ...
- UEditor上传图片到七牛C#(后端实现)
由于个人网站空间存储有所以选择将图片统一存储到七牛上,理由很简单 1 免费10G 的容量 ,对个人网站足够用 2 规范的开发者文档 和完善的sdk(几乎所有热门语言sdk) 整体思路 图片上传七 ...
- 基于七牛Python SDK写的一个批量下载脚本
前言 上一篇基于七牛Python SDK写的一个同步脚本所写的脚本只支持上传,不支持文件下载. 虽然这个需求不太强烈,但有可能有人(在备份.迁移时)需要,而官方有没提供对应的工具,所以我就把这个功能也 ...
- ***七牛跨域上传图片JS SDK
SDK: http://developer.qiniu.com/code/v6/sdk/javascript.html#upload 上传 在页面中引入 plupload,plupload.full. ...
- yii2.0 集合七牛SDK 上传图片到第三方
首先,请用composer下载七牛phpSDK (具体参考官方文档) composer require qiniu/php-sdk 注册七牛账号 获取 AK SK(密匙) ,创建资源对象 获取doma ...
- PLDroidPlayer 是七牛推出的一款免费的适用于 Android 平台的播放器 SDK,采用全自研的跨平台播放内核,拥有丰富的功能和优异的性能,可高度定制化和二次开发。 https://developer.qiniu.com/pili/sdk/…
PLDroidPlayer PLDroidPlayer 是一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单.快捷的接口,帮助开发者在 ...
- discuz接入七牛sdk
自己摸索了几天,找群里面的人各种问,都没有一个人回答我,哎,国内的开源精神呢...... 需要修改有以下几个: 1.替换 /source/class/class_core.php 文件 解释:就 ...
随机推荐
- prefetch vs preload vs prerender vs preconnect All In One
prefetch vs preload vs prerender vs preconnect All In One 前端性能优化 prefetch 预获取 https://developer.mozi ...
- 微信公众号 webfullstack
微信公众号 webfullstack weixin refs https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_C ...
- Android 获取apk的URL Schemes
1. 下载apk到你的PC上 2. 反向工程Android APK文件的工具 Apktool 3. 查看"AndroidManifest.xml"文件 See alse: http ...
- css命名规范和书写规范
1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin)3.文字系列(fon ...
- 10月上线的NGK global有怎样的发展前景?
随着NGK global 10月份的上线时间将近,社区中也开始纷纷讨论.预测起NGK global上线后的表现,对此小编也有一些自己的理解,就此分享给大家. 在基于实体生态的赋能下,NGK globa ...
- 精密进近OAS面的绘制与评估
一.定义:精密进近OAS面(Obstacle Assessment Surface 障碍物评价面)是在精密进近程序中,用来对障碍物进行评估,找出影响运行标准的控制障碍物的一种计算方法. 二.构成 OA ...
- [Python学习笔记]正则表达式总结
常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...
- canal数据同步 客户端代码实现
1.引入相关依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId ...
- Redis基本数据结构之ZSet
1.1Zset(有序集合) Zset保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素可以排序.但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数(score)作为排序的 ...
- 五大自动化测试的Python框架
1.Robot Framework 作为最重要的Python测试框架之一,Robot Framework主要被用在测试驱动(test-driven)类型的开发与验收中.虽然是由Python开发而来,但 ...