高级接口

更新时间:

高级接口中的所有方法均为阻塞操作,在操作没有完成之前不会返回。所有接口都可能会抛出两种异常,分别为OASServerErrorOASClientError,具体描述请参阅Exceptions一节。

高级接口使用Python内置模块logging输出日志,用户可根据实际需要自由配置日志输出,以下例子是输出INFO级别日志到标准输出的简单配置。

  1. import logging
  2. import sys
  3. handler = logging.StreamHandler(sys.stdout)
  4. handler.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
  5. handler.setLevel(logging.INFO)
  6. log = logging.getLogger('oas.ease.uploader')
  7. log.addHandler(handler)
  8. log.setLevel(logging.INFO)

Vault

Vault是用户所有操作的入口点。要实例化Vault对象,需要通过Vault的类方法,其中create_vaultget_vault_by_idget_vault_by_name是简单工厂方法,返回Vault对象,list_all_vaults返回Vault list。这些类方法都需要以OASAPI对象作为参数(参见低级接口概述部分)。

对于上传操作,可以直接调用成员方法upload_archive,接口内部会根据文件大小自动选择Normal Upload或Multipart Upload方式,并实现了多线程并行上传和失败重试。对于Multipart Upload任务,用户也可调用成员方法initiate_uploader获得Uploader对象再进行上传(参见Uploader一节)。使用后一种方法,用户可获得时机保存Multipart Upload的任务ID,若任务没有成功完成,可在之后调用成员方法recover_uploader传入任务ID进行续传。用户应根据业务需要选择合适的方法。

对于下载操作,可调用成员方法retrieve_inventoryretrieve_archive获得Job对象再进行下载(参见Job一节)。

下面按照功能分组,介绍Vault的接口。

成员变量

Vault对象包含了Vault的JSON描述中的所有字段,其中JSON标签与变量之间的转换关系如下表所示,各个字段的具体含义请参考API文档4.1.3一节的返回体部分。

JSON标签 变量名 类型
CreationDate creation_date string
LastInventoryDate last_inventory_date string
NumberOfArchives number_of_archives int
SizeInBytes size int
VaultId id string
VaultName name string

构造方法

Vault包含了三个简单工厂方法用于构造Vault对象,三个类方法均需OASAPI对象作为参数,OASAPI的构造请参阅低级接口的概述部分。

create_vault

类方法。新建指定名称的Vault。

定义

def create_vault(cls, api, name)

参数
  • apiOASAPI

  • namestring

    待新建的Vault的名称,名称应遵守API手册4.1.1节中Vault命名规范。

返回值

Vault

get_vault_by_id

类方法。获取指定ID的Vault。

定义

def get_vault_by_id(cls, api, vault_id)

参数
  • apiOASAPI

  • vault_idstring

    待检索的Vault的ID。

返回值

Vault

get_vault_by_name

类方法。获取指定名称的Vault。

定义

def get_vault_by_name(cls, api, vault_name)

参数
  • apiOASAPI

  • vault_namestring

    待检索的Vault的名称。

返回值

Vault

Vault删除

delete_vault_by_id

类方法。删除指定ID的Vault。

定义

def delete_vault_by_id(cls, api, vault_id)

参数
  • apiOASAPI

  • vault_idstring

    待删除的Vault的ID。

返回值

None

delete_vault_by_name

类方法。删除指定名称的Vault。

定义

def delete_vault_by_name(cls, api, vault_name)

参数
  • apiOASAPI
  • vault_namestring

    待删除的Vault的名称。

返回值

None

delete

删除当前Vault。

定义

def delete(self)

参数

None

返回值

None

状态查询

所有查询方法默认返回全部的检索结果,用户不需要对Marker标识进行处理。

list_all_vaults

类方法。返回用户持有的所有Vault。

定义

def list_all_vaults(cls, api)

参数
  • apiOASAPI
返回值

Vault list

list_all_multipart_uploads

返回Vault下的全部Multipart Upload任务。

定义

def list_all_multipart_uploads(self)

参数

None

返回值

Uploader list

list_all_jobs

返回Vault下的所有Job任务。

定义

def list_all_jobs(self)

参数

None

返回值

Job list

Archive操作

upload_archive

上传指定文件到当前Valut,成功上传后返回相应的Archive ID。

定义

def upload_archive(self, file_path, desc=None)

参数
  • file_pathstring

    待上传的文件路径。

  • descstring

    可选参数。Archive的描述字段。

返回值

string:Archive ID

initiate_uploader

新建Multipart Upload任务。

定义

def initiate_uploader(self, file_path, desc=None)

参数
  • file_pathstring

    待上传的文件路径。

  • descstring

    可选参数。Archive的描述字段。

返回值

Uploader

recover_uploader

续传指定的Multipart Upload任务。

定义

def recover_uploader(self, upload_id)

参数
  • upload_idstring

    Multipart Upload任务的ID。

返回值

Uploader

delete_archive

删除指定ID的Archive。

定义

def delete_archive(self, archive_id)

参数
  • archive_idstring

    待删除的Archive的ID。

返回值

None

Job操作

get_job

获取指定ID的Job任务。

定义

def get_job(self, job_id)

参数
  • job_idstring

    Job任务的ID。

返回值

Job

retrieve_archive

新建类型为archive-retrieval的Job任务。

定义

def retrieve_archive(self, archive_id, desc=None, byte_range=None):

参数
  • archive_idstring

    待查询的Archive的ID。

  • descstring

    可选参数。Job任务的描述字段。

  • byte_range:tuple

    可选参数。长度为2,元素分别为字节长度的起点和终点(含)。

返回值

Job

retrieve_inventory

新建类型为inventory-retrieval的Job任务。

定义

def retrieve_inventory(self, desc=None)

参数
  • descstring

    可选参数。Job任务的描述字段。

返回值

Job

pull_from_oss

新建类型为pull-from-oss的Job任务。

定义

def pull_from_oss(self, osshost, bucket, object, desc=None)

参数
  • osshoststring

    job的源oss域名

  • bucketstring

    job任务的oss Bucket

  • objectstring

    job任务的oss Object

  • descstring

    可选参数。Job任务的描述字段。

返回值

Job

push_to_oss

新建类型为push-to-oss的Job任务。

定义

def push_to_oss(self, archive_id, osshost, bucket, object, desc=None)

参数
  • archive_idstring

待转储的archive_id

  • osshoststring

    job的源oss域名

  • bucketstring

    job任务的oss Bucket

  • objectstring

    job任务的oss Object

  • descstring

    可选参数。Job任务的描述字段。

返回值

Job

Uploader

Uploader是Multipart Upload任务的抽象。

要获取Uploader对象,可通过Vault的三个成员方法,包括:

  • initiate_uploader
  • recover_uploader
  • list_all_multipart_uploads

其中,initiate_uploaderrecover_uploader返回Uploader对象。

list_all_multipart_uploads返回Uploader list

initiate_uploader用于新建Multipart Upload任务,可直接调用Uploader的成员方法start开始上传。

recover_uploaderlist_all_multipart_uploads返回的Uploader用于续传Multipart Upload任务,应调用Uploader的成员方法resume继续上传。

成员变量

Uploader对象包含了Multipart Upload的JSON描述中的所有字段,其中JSON标签与变量之间的转换关系如下表所示,各个字段的具体含义请参考API文档4.3.5一节的返回体部分。

JSON标签 变量名 类型
ArchiveDescription description string
CreationDate creation_date string
MultipartUploadId id string
PartSizeInBytes part_size int

Property

  • size_completed

    已上传的字节数。

成员方法

start

开始上传任务。

定义

def start(self)

参数

None

返回值

String:Archive ID

resume

恢复上传任务。

定义

def resume(self, file_path)

参数
  • file_pathstring

    待上传的文件路径。

返回值

String:Archive ID

cancel

取消上传任务。

定义

def cancel(self)

参数

None

返回值

None

Job

Job是Job任务的抽象。根据下载文件的大小,Job内部会自动进行分块并行下载,并实现了断点续传和简单的出错重试。

在使用时,用户需要注意Job任务并不是实时完成的(参见《OAS API文档-1.1.6节》),用户应调用Job的成员方法update_status更新任务状态,并通过检查成员变量completed确认任务是否完成。当任务完成时,可通过调用download_to_filedownload_by_range开始下载。用户也可直接设置download_to_filedownload_by_range方法的block参数,当block为True时,接口内部会循环等待至Job完成再开始下载,用户不需调用手工更新任务状态。

对于未完成的下载任务,Job内部会自动创建一个进度存储文件,该进度文件路径为用户指定的文件保存路径加上.oas后缀。若用户希望重新下载整个文件,不进行续传,可以手动删除该进度文件,否则应保留该文件,当任务完成时,该文件会自动删除。

成员变量

Job对象包含了Job的JSON描述中的所有字段,其中JSON标签与变量之间的转换关系如下表所示,各个字段的具体含义请参考API文档4.4.4一节的返回体部分。

JSON标签 变量名 类型
Action action string
ArchiveContentEtag etag string
ArchiveId archive_id string
ArchiveSizeInBytes archive_size int
Completed completed boolean
CompletionDate completion_date string
CreationDate creation_date string
InventorySizeInBytes inventory_size int
JobDescription description string
JobId id string
StatusCode status_code string
StatusMessage status_message string

Property

  • size_completed

    已下载的字节数

成员方法

update_status

更新Job的任务状态。

定义

def update_status(self)

参数

None

返回值

None

download_by_range

下载指定字节范围到文件。

定义

def download_by_range(self, byte_range, file_path=None, file_obj=None, chunk_size=None, block=True)

参数
  • byte_rangetuple

    长度为2,两个元素分别为字节长度的起点和终点(含)。

  • file_pathstring

  • file_objfile object

    二选一参数,下载到指定的文件路径或保存到指定的文件对象。当两个参数均提供时,结果不确定。

  • chunk_sizeint

    可选参数。每次读写的块大小,默认为1048576(1MB)。

  • blockboolean

    可选参数。当block为False时,直接开始下载,若Job未完成会抛出异常。当block为True时,循环等待至Job完成,再开始下载。默认为True。

download_to_file

下载Job任务输出到指定文件路径。

定义

def download_to_file(self, file_path, chunk_size=None, block=True)

参数
  • file_pathstring

    文件保存的路径。

  • chunk_sizeint

    可选参数。每次读写的块大小,默认为1048576(1MB)。

  • blockint

    可选参数。当block为False时,直接开始下载,若Job未完成会抛出异常。当block为True时,循环等待至Job完成,再开始下载。默认为True。

说明

Response

OASResponseHttpResponse的简单抽象。OASResponse是字典对象,HttpResponse中的头部信息以键值对的形式存储在OASResponse中。对于类型为JSON的响应,OASResponse会自动解析JSON数据并保存为字典。对于类型为二进制流的响应,可通过成员方法read读取返回体中的数据。

Exceptions

根据出错原因的不同,SDK把异常分为两种不同类型,分别为OAServerError,和OASClientError

OASServerError

OASServerError是指一次完整的HTTP请求中,服务器返回了错误响应。各个成员变量的含义见下表。具体错误信息请参阅API文档第5节错误响应。

成员变量 类型 含义
headers dict HTTP响应中的头部,以键值对存储,所有键均为小写
request_id string 出错的请求的ID值,见API文档2.3.3节
status int HTTP状态码
code string 错误代码,见API文档2.3.3节
type string 错误类型,见API文档2.3.3节
message string 错误信息,见API文档2.3.3节

OASClientErrror

OASClientError表示客户端异常,可能原因包括网络连接出错、文件读写出错等,具体出错原因可通过查看成员变量message获得。异常仅作为标记错误类型,没有实现额外的方法。此外,UploadArchiveErrorDownloadArchiveErrorHashDoesNotMatchError均继承于OASClientError,作为更细一级的异常分类,分别代表上传出错、下载出错和校验出错。

Utils

utils中包含的是高级接口所使用的公共工具方法,用户在开发时可直接使用这些方法。

文件操作

is_file_like

判断指定对象是否支持read操作。

定义

def is_file_like(obj)

参数
  • objobject
返回值

boolean

content_length

根据输入类型的不同,自动获取目标的长度。对于无法处理的类型,抛出ValueError异常。

定义

def content_length(content)

参数
  • content
返回值

int

open_file

当提供file_obj参数时,返回file_obj;否则以mode默认打开file_path。

定义

def open_file(file_path=None, file_obj=None, mode=’r’)

参数
  • file_pathstring

  • file_objfile object

  • modestring

    可选参数。打开模式,默认为’rb’。

返回值

file object

Range操作

range_size

计算指定字节范围的长度。

定义

def range_size(byte_range)

参数
  • byte_rangetuple

    长度为2,元素分别为字节长度的起点和终点(含)。

返回值

int

calc_num_part

计算长度为size_total的文件,以part_size长度进行分块的总分块数。

定义

def calc_num_part(part_size, size_total)

参数
  • part_sizeint

    Part的字节长度。

  • size_totalint

    文件总字节长度。

返回值

int

calc_ranges

计算长度为size_total的文件,以part_size长度进行分块的所有分块字节范围。

定义

def calc_ranges(part_size, size_total)

参数
  • part_sizeint

    Part的字节长度。

  • size_totalint

    文件总字节长度。

返回值

tuple list:每个元组长度为2,分别为分块的字节起点和终点(含)。

校验码计算

校验码是归档存储用于判断archive完整性的手段,etag与tree-etag是校验码的两种方式。本节中compute_etag_from_string、compute_etag_from_file、compute_etag_from_file、compute_etag_from_file_obj三个函数中的任何一个函数可以用来计算etag校验码,、compute_tree_etag_from_file、compute_tree_etag_from_file_obj、compute_combine_tree_etag_from_list几个函数都是用来计算tree-etag校验码的。

compute_hash_from_file、compute_hash_from_file_obj可以同时计算出etag、tree-etag两个校验码,并通过数组返回。

compute_etag_from_string

计算指定字符串的etag。

定义

def compute_etag_from_string(content)

参数
  • contentstring

    待计算的字符串。

返回值

string

说明

compute_etag_from_file

计算指定文件的etag。

定义

def compute_etag_from_file(file_path, offset=0, size=None, chunk_size=1048576)

参数
  • file_pathstring

    待计算的文件路径。

  • offsetint

    可选参数。计算的字节起始点(含),默认为0。

  • sizeint

    可选参数。待计算的字节长度,默认为offset起的所有字节的长度。

  • chunk_sizeint

    可选参数。每次读取的块大小,默认为1048576(1MB)。

返回值

string

compute_etag_from_file_obj

计算指定文件对象的etag。

定义

def compute_etag_from_file_obj(file_obj, offset=0, size=None, chunk_size=1048576)

参数
  • file_objfile object

    待计算的文件对象。

  • offsetint

    可选参数。计算的字节起始点(含),默认为0。

  • sizeint

    可选参数。待计算的字节长度,默认为offset起的所有字节的长度。

  • chunk_sizeint

    可选参数。每次读取的块大小,默认为1048576(1MB)。

返回值

string

compute_tree_etag_from_file

计算指定文件的tree-etag校验码。

定义

def compute_tree_etag_from_file(file_path, offset=0, size=None, chunk_size=1048576)

参数
  • file_pathstring

    待计算的文件路径。

  • offsetint

    可选参数。计算的字节起始点(含),默认为0。

  • sizeint

    可选参数。待计算的字节长度,默认为offset起的所有字节的长度。

  • chunk_sizeint

    可选参数。每次读取的块大小,默认为1048576(1MB)。

返回值

string

compute_tree_etag_from_file_obj

计算指定文件对象的tree-etag。

定义

def compute_tree_etag_from_file_obj(file_obj, offset=0, size=None, chunk_size=1048576)

参数
  • file_objfile object

    待计算的文件对象。

  • offsetint

    可选参数。计算的字节起始点(含),默认为0。

  • sizeint

    可选参数。待计算的字节长度,默认为offset起的所有字节的长度。

  • chunk_sizeint

    可选参数。每次读取的块大小,默认为1048576(1MB)。

返回值

string

compute_combine_tree_etag_from_list

根据各个分块的tree-etag所组成的list,计算整个文件的校验码。

定义

def compute_combine_tree_etag_from_list(tree_etag_list)

参数
  • tree_etag_listlist

    列表元素为每个分块的tree-etag。

返回值

string

compute_hash_from_file

计算指定文件的etag及tree-etag校验码。

定义

def compute_hash_from_file(file_path, offset=0, size=None, chunk_size=1048576)

参数
  • file_pathstring

    待计算的文件路径。

  • offsetint

    可选参数。计算的字节起始点(含),默认为0。

  • sizeint

    可选参数。待计算的字节长度,默认为offset起的所有字节的长度。

  • chunk_sizeint

    可选参数。每次读取的块大小,默认为1048576(1MB)。

返回值

(string,string)

返回的是两个校验码数组:(etag,tree-etag)

compute_hash_from_file_obj

计算指定文件对象的etag及tree-etag校验码。

定义

def compute_hash_from_file_obj(file_obj, offset=0, size=None, chunk_size=1048576)

参数
  • file_objfile object

    待计算的文件对象。

  • offsetint

    可选参数。计算的字节起始点(含),默认为0。

  • sizeint

    可选参数。待计算的字节长度,默认为offset起的所有字节的长度。

  • chunk_sizeint

    可选参数。每次读取的块大小,默认为1048576(1MB)。

返回值

(string, string)

返回的是两个校验码数组:(etag,tree-etag)