OAS的使用——Python SDK

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
对象存储 OSS,内容安全 1000次 1年
简介: 当需要向OAS备份归档的文件量非常大的时候,通过web控制台和命令行工具来完成是不可能的,这时候需要使用OAS提供的SDK编写操作代码来实现

OAS的使用——Python SDK

[TOC]

当需要向OAS备份归档的文件量非常大的时候,通过web控制台和命令行工具来完成是不可能的,这时候需要使用OAS提供的SDK编写操作代码来实现,SDK包括Python SDK和Java SDK,本文主要讲解Python SDK, Java SDK的使用可以参考官方文档中的开发者工具和[最佳实践](https://docs.aliyun.com/?spm=5176.383338.201.102.NNmH36#/pub/oas/best_practice/java_sdk_demo
)。

使用需求

  1. 使用Python SDK编写脚本上传100个小文件(1M-32M),上传10个大文件(1G-5G)
  2. 使用Python SDK编写脚本查询上传后的Vault信息
  3. 使用Python SDK编写脚本下载所有的上传文件
  4. 使用Python SDK编写脚本删除已上传的所有文件

Python SDK概述

Python SDK是对API的一层封装,方便用户编写Python脚本来实现各种操作。官方文档中提到,Python SDK包含低级接口和高级接口。

低级接口是对API的最直接封装,在使用低级接口时必须对照API使用手册进行开发,需要仔细阅读API手册,对API中描述的各种参数需要比较清楚,因此使用灵活但是不够高效。

高级接口是对低级接口的封装,降低了用户的学习量,提高开发效率,而且代码也比低级接口更加清晰,因此官方建议一般用户都使用高级接口,在极个别高级接口不太灵活操作的地方使用低级接口。

本文所有代码均基于Python SDK的高级接口编写。

准备工作

根据使用需求,我需要准备好待上传的文件以及配置。
写个函数生成需要的文件:

def genfile(filePath, size):
    splitSize = 100 
    with open(filePath, 'w') as fd:
        if size <= splitSize:
            fd.seek(1024*1024*size - 10)
            randomString = "".join(random.sample("abcedfghigklmnopqrstuvwxyz", 10))
            fd.write(randomString)
        else:       
            for i in range(size/splitSize):
                fd.seek((i + 1)*splitSize*1024*1024 - 10)
                randomString = "".join(random.sample("abcedfghigklmnopqrstuvwxyz", 10))
                fd.write(randomString)

            if size % splitSize != 0:
                fd.seek(size*1024*1024 - 10)
                randomString = "".join(random.sample("abcedfghigklmnopqrstuvwxyz", 10))
                fd.write(randomString)

def generate_files():

    file_index = 0
    file_prefix = 'test_file_%s'
    file_dir = 'files'
    for i in xrange(0, 105):
        if i < 100:
            size = random.randint(1, 32)
        else:
            size = random.randint(1024, 5 * 1024)

        path = os.path.join(file_dir, file_prefix % file_index)
        genfile(path, size)
        file_index += 1

使用一个简单的配置文件来存放配置,然后读取这个配置文件:
20

使用下面代码读取配置:

class ConfHolder(object):

    def __init__(self, conf_path):
        self.conf_path = conf_path
        self.parser = ConfigParser.SafeConfigParser()
        self._read_conf()

    def _read_conf(self):
        try:
            self.parser.read(self.conf_path)
            self.host = self.parser.get('access', 'host')
            self.id = self.parser.get('access', 'id')
            self.key = self.parser.get('access', 'key')
            self.vault_name = self.parser.get('access', 'vault_name')
            self.local_path = self.parser.get('files', 'local_path')
            self.download_path = self.parser.get('files', 'download_path')

        except Exception, e:
            log.exception(e)
            print "Read Config File Error!"
            print e
            sys.exit(1)

Python SDK的使用

Python SDK中几个重要对象

Python SDK的高级接口抽象出来几个重要的对象:Vault、Uploader和Job。使用这三个对象基本可以完成常见的工作。实际上,Vault是所有操作的入口,更加直接的说法,我们在使用Python SDK的时候,只需要import两个包:

from oas.oas_api import OASAPI
from oas.ease.vault import Vault

其中Uploader和Job对象在Vault的类方法中生成。

重要的方法

创建Vault:

# 创建 Vault
vault = Vault.create_vault(api, '[Vault Name]')

上传Archive:

archive_id = vault.upload_archive('[File Path]')

下载 Archive:

#retrieve_archive生成一个Job类型的对象
#Job对象的具体方法和属性可以查看官方文档
job = vault.retrieve_archive('[Archive ID]')
job.download_to_file('[File Path]')

初始化multipart upload

#initiate_uploader 生成一个Uploader对象,用于进行multipart upload
#Uploader对象的具体方法和属性可以查看官方文档
uploader = vault.initiate_uploader('[File Path]')

下面使用这些对象和方法完成需求工作。

实现代码

class Task有四个方法: upload, download,info, delete, 分别完成上传、下载、查询和删除工作。
upload上传的文件包含100个小文件和5个大文件,大文件采用multipart方式上传,对于上传失败的multipart,还将调用resume来恢复上传,保存上传成功文件的filename和archive_id;
download将上传成功的文件下载至另外一个目录。
info使用retrieve_inventory来查询信息。
delete将已上传的所有文件删除。

注意:
由于OAS的元数据信息并非是实时更新,而且job调度是异步的,因此整个程序不会马上返回,可能会长时间阻塞,因此建议将程序写成Damon。

代码

代码包含配置文件(配置host, id以及key等)、生成文件代码和OAS SDK使用代码,另外提供了一个Python的daemonize函数,使用daemonize函数后台化。脚本会将中间信息打到日志中。

日志内容:
21
22

下载后的文件:
23

代码下载:

总结

在阅读API使用手册之后对整个系统的操作有比较清晰认识之后,参考官方文档的示例代码和SDK说明文档,OAS服务的使用非常容易上手。

目录
相关文章
|
5天前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
36 18
|
23天前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
46 1
|
27天前
|
网络安全 开发工具 Python
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
|
27天前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
|
27天前
|
机器学习/深度学习 开发工具 Python
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
|
27天前
|
API 网络安全 开发工具
【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)
【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)
|
27天前
|
API 开发工具 Python
【Azure Developer】使用 Azure Python SDK时,遇见 The resource principal named https://management.azure.com was not found in the tenant China Azure问题的解决办法
【Azure Developer】使用 Azure Python SDK时,遇见 The resource principal named https://management.azure.com was not found in the tenant China Azure问题的解决办法
|
23天前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
38 0
|
1月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
134 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
1月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
71 4