models.py 118 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258
  1. # -*- coding: utf-8 -*-
  2. """
  3. oss2.models
  4. ~~~~~~~~~~
  5. 该模块包含Python SDK API接口所需要的输入参数以及返回值类型。
  6. """
  7. from . import utils
  8. from .utils import http_to_unixtime, make_progress_adapter, make_crc_adapter, b64encode_as_string, b64decode_from_string
  9. from .exceptions import ClientError, InconsistentError
  10. from .compat import urlunquote, to_string, urlquote
  11. from .select_response import SelectResponseAdapter
  12. from .headers import *
  13. import json
  14. import logging
  15. import copy
  16. import struct
  17. from requests.structures import CaseInsensitiveDict
  18. logger = logging.getLogger(__name__)
  19. class PartInfo(object):
  20. """表示分片信息的文件。
  21. 该文件既用于 :func:`list_parts <oss2.Bucket.list_parts>` 的输出,也用于 :func:`complete_multipart_upload
  22. <oss2.Bucket.complete_multipart_upload>` 的输入。
  23. :param int part_number: 分片号
  24. :param str etag: 分片的ETag
  25. :param int size: 分片的大小。用在 `list_parts` 的结果里,也用与分片对象做crc combine得到整个对象crc64值
  26. :param int last_modified: 该分片最后修改的时间戳,类型为int。参考 :ref:`unix_time`
  27. :param int part_crc: 该分片的crc64值
  28. """
  29. def __init__(self, part_number, etag, size=None, last_modified=None, part_crc=None):
  30. self.part_number = part_number
  31. self.etag = etag
  32. self.size = size
  33. self.last_modified = last_modified
  34. self.part_crc = part_crc
  35. class ContentCryptoMaterial(object):
  36. def __init__(self, cipher, wrap_alg, encrypted_key=None, encrypted_iv=None, mat_desc=None):
  37. self.cipher = cipher
  38. self.cek_alg = cipher.alg
  39. self.wrap_alg = wrap_alg
  40. self.encrypted_key = encrypted_key
  41. self.encrypted_iv = encrypted_iv
  42. self.mat_desc = mat_desc
  43. self.deprecated = False
  44. def to_object_meta(self, headers=None, multipart_upload_context=None):
  45. if not isinstance(headers, CaseInsensitiveDict):
  46. headers = CaseInsensitiveDict(headers)
  47. if 'content-md5' in headers:
  48. headers[OSS_CLIENT_SIDE_ENCRYPTION_UNENCRYPTED_CONTENT_MD5] = headers['content-md5']
  49. del headers['content-md5']
  50. if 'content-length' in headers:
  51. headers[OSS_CLIENT_SIDE_ENCRYPTION_UNENCRYPTED_CONTENT_LENGTH] = headers['content-length']
  52. del headers['content-length']
  53. headers[OSS_CLIENT_SIDE_ENCRYPTION_KEY] = b64encode_as_string(self.encrypted_key)
  54. headers[OSS_CLIENT_SIDE_ENCRYPTION_START] = b64encode_as_string(self.encrypted_iv)
  55. headers[OSS_CLIENT_SIDE_ENCRYPTION_CEK_ALG] = self.cek_alg
  56. headers[OSS_CLIENT_SIDE_ENCRYPTION_WRAP_ALG] = self.wrap_alg
  57. if multipart_upload_context and multipart_upload_context.data_size and multipart_upload_context.part_size:
  58. headers[OSS_CLIENT_SIDE_ENCRYPTION_DATA_SIZE] = str(multipart_upload_context.data_size)
  59. headers[OSS_CLIENT_SIDE_ENCRYPTION_PART_SIZE] = str(multipart_upload_context.part_size)
  60. if self.mat_desc:
  61. headers[OSS_CLIENT_SIDE_ENCRYTPION_MATDESC] = json.dumps(self.mat_desc)
  62. return headers
  63. def from_object_meta(self, headers):
  64. if not isinstance(headers, CaseInsensitiveDict):
  65. headers = CaseInsensitiveDict(headers)
  66. if DEPRECATED_CLIENT_SIDE_ENCRYPTION_KEY in headers:
  67. self.deprecated = True
  68. if self.deprecated:
  69. undecode_encrypted_key = _hget(headers, DEPRECATED_CLIENT_SIDE_ENCRYPTION_KEY)
  70. undecode_encrypted_iv = _hget(headers, DEPRECATED_CLIENT_SIDE_ENCRYPTION_START)
  71. cek_alg = _hget(headers, DEPRECATED_CLIENT_SIDE_ENCRYPTION_CEK_ALG)
  72. wrap_alg = _hget(headers, DEPRECATED_CLIENT_SIDE_ENCRYPTION_WRAP_ALG)
  73. mat_desc = _hget(headers, DEPRECATED_CLIENT_SIDE_ENCRYTPION_MATDESC)
  74. if wrap_alg == "kms":
  75. self.encrypted_key = undecode_encrypted_key
  76. self.encrypted_iv = undecode_encrypted_iv
  77. wrap_alg = KMS_ALI_WRAP_ALGORITHM
  78. else:
  79. if undecode_encrypted_key:
  80. self.encrypted_key = b64decode_from_string(undecode_encrypted_key)
  81. if undecode_encrypted_iv:
  82. self.encrypted_iv = b64decode_from_string(undecode_encrypted_iv)
  83. wrap_alg = RSA_NONE_OAEPWithSHA1AndMGF1Padding
  84. if cek_alg == utils.AES_GCM:
  85. cek_alg = utils.AES_CTR
  86. else:
  87. undecode_encrypted_key = _hget(headers, OSS_CLIENT_SIDE_ENCRYPTION_KEY)
  88. undecode_encrypted_iv = _hget(headers, OSS_CLIENT_SIDE_ENCRYPTION_START)
  89. if undecode_encrypted_key:
  90. self.encrypted_key = b64decode_from_string(undecode_encrypted_key)
  91. if undecode_encrypted_iv:
  92. self.encrypted_iv = b64decode_from_string(undecode_encrypted_iv)
  93. cek_alg = _hget(headers, OSS_CLIENT_SIDE_ENCRYPTION_CEK_ALG)
  94. wrap_alg = _hget(headers, OSS_CLIENT_SIDE_ENCRYPTION_WRAP_ALG)
  95. mat_desc = _hget(headers, OSS_CLIENT_SIDE_ENCRYTPION_MATDESC)
  96. if mat_desc:
  97. self.mat_desc = json.loads(mat_desc)
  98. if cek_alg and cek_alg != self.cek_alg:
  99. logger.error("CEK algorithm or is inconsistent, object meta: cek_alg:{0}, material: cek_alg:{1}".
  100. format(cek_alg, self.cek_alg))
  101. err_msg = 'Data encryption/decryption algorithm is inconsistent'
  102. raise InconsistentError(err_msg, self)
  103. if wrap_alg and wrap_alg != self.wrap_alg:
  104. logger.error("WRAP algorithm or is inconsistent, object meta: wrap_alg:{0}, material: wrap_alg:{1}".
  105. format(wrap_alg, self.wrap_alg))
  106. err_msg = 'Envelope encryption/decryption algorithm is inconsistent'
  107. raise InconsistentError(err_msg, self)
  108. self.cek_alg = cek_alg
  109. self.wrap_alg = wrap_alg
  110. def is_unencrypted(self):
  111. if not self.encrypted_key and not self.encrypted_iv and not self.cek_alg and not self.wrap_alg:
  112. return True
  113. else:
  114. return False
  115. class MultipartUploadCryptoContext(object):
  116. def __init__(self, data_size=None, part_size=None, content_crypto_material=None):
  117. self.content_crypto_material = content_crypto_material
  118. self.data_size = data_size
  119. self.part_size = part_size
  120. def _hget(headers, key, converter=lambda x: x):
  121. if key in headers:
  122. return converter(headers[key])
  123. else:
  124. return None
  125. def _get_etag(headers):
  126. return _hget(headers, 'etag', lambda x: x.strip('"'))
  127. class RequestResult(object):
  128. def __init__(self, resp):
  129. #: HTTP响应
  130. self.resp = resp
  131. #: HTTP状态码
  132. self.status = resp.status
  133. #: HTTP头
  134. self.headers = resp.headers
  135. #: 请求ID,用于跟踪一个OSS请求。提交工单时,最后能够提供请求ID
  136. self.request_id = resp.request_id
  137. self.versionid = _hget(self.headers, 'x-oss-version-id')
  138. self.delete_marker = _hget(self.headers, 'x-oss-delete-marker', bool)
  139. class HeadObjectResult(RequestResult):
  140. def __init__(self, resp):
  141. super(HeadObjectResult, self).__init__(resp)
  142. #: 文件类型,可以是'Normal'、'Multipart'、'Appendable'等
  143. self.object_type = _hget(self.headers, OSS_OBJECT_TYPE)
  144. #: 文件最后修改时间,类型为int。参考 :ref:`unix_time` 。
  145. self.last_modified = _hget(self.headers, 'last-modified', http_to_unixtime)
  146. #: 文件的MIME类型
  147. self.content_type = _hget(self.headers, 'content-type')
  148. #: Content-Length,可能是None。
  149. self.content_length = _hget(self.headers, 'content-length', int)
  150. #: HTTP ETag
  151. self.etag = _get_etag(self.headers)
  152. #: 文件 server_crc
  153. self._server_crc = _hget(self.headers, 'x-oss-hash-crc64ecma', int)
  154. @property
  155. def server_crc(self):
  156. return self._server_crc
  157. class GetSelectObjectMetaResult(HeadObjectResult):
  158. def __init__(self, resp):
  159. super(GetSelectObjectMetaResult, self).__init__(resp)
  160. self.select_resp = SelectResponseAdapter(resp, None, None, False)
  161. for data in self.select_resp: # waiting the response body to finish
  162. pass
  163. self.csv_rows = self.select_resp.rows # to be compatible with previous version.
  164. self.csv_splits = self.select_resp.splits # to be compatible with previous version.
  165. self.rows = self.csv_rows
  166. self.splits = self.csv_splits
  167. class GetObjectMetaResult(RequestResult):
  168. def __init__(self, resp):
  169. super(GetObjectMetaResult, self).__init__(resp)
  170. #: 文件最后修改时间,类型为int。参考 :ref:`unix_time` 。
  171. self.last_modified = _hget(self.headers, 'last-modified', http_to_unixtime)
  172. #: Content-Length,文件大小,类型为int。
  173. self.content_length = _hget(self.headers, 'content-length', int)
  174. #: HTTP ETag
  175. self.etag = _get_etag(self.headers)
  176. class GetSymlinkResult(RequestResult):
  177. def __init__(self, resp):
  178. super(GetSymlinkResult, self).__init__(resp)
  179. #: 符号连接的目标文件
  180. self.target_key = urlunquote(_hget(self.headers, OSS_SYMLINK_TARGET))
  181. class GetObjectResult(HeadObjectResult):
  182. def __init__(self, resp, progress_callback=None, crc_enabled=False, crypto_provider=None, discard=0):
  183. super(GetObjectResult, self).__init__(resp)
  184. self.__crc_enabled = crc_enabled
  185. self.__crypto_provider = crypto_provider
  186. self.content_range = _hget(resp.headers, 'Content-Range')
  187. if self.content_range:
  188. byte_range = self._parse_range_str(self.content_range)
  189. if progress_callback:
  190. self.stream = make_progress_adapter(self.resp, progress_callback, self.content_length)
  191. else:
  192. self.stream = self.resp
  193. if self.__crc_enabled:
  194. self.stream = make_crc_adapter(self.stream, discard=discard)
  195. if self.__crypto_provider:
  196. content_crypto_material = ContentCryptoMaterial(self.__crypto_provider.cipher,
  197. self.__crypto_provider.wrap_alg)
  198. content_crypto_material.from_object_meta(resp.headers)
  199. if content_crypto_material.is_unencrypted():
  200. logger.info("The object is not encrypted, use crypto provider is not recommended")
  201. else:
  202. crypto_provider = self.__crypto_provider
  203. if content_crypto_material.mat_desc != self.__crypto_provider.mat_desc:
  204. logger.warn("The material description of the object and the provider is inconsistent")
  205. encryption_materials = self.__crypto_provider.get_encryption_materials(
  206. content_crypto_material.mat_desc)
  207. if encryption_materials:
  208. crypto_provider = self.__crypto_provider.reset_encryption_materials(encryption_materials)
  209. else:
  210. raise ClientError(
  211. 'There is no encryption materials match the material description of the object')
  212. plain_key = crypto_provider.decrypt_encrypted_key(content_crypto_material.encrypted_key)
  213. if content_crypto_material.deprecated:
  214. if content_crypto_material.wrap_alg == KMS_ALI_WRAP_ALGORITHM:
  215. plain_counter = int(
  216. crypto_provider.decrypt_encrypted_iv(content_crypto_material.encrypted_iv, True))
  217. else:
  218. plain_counter = int(crypto_provider.decrypt_encrypted_iv(content_crypto_material.encrypted_iv))
  219. else:
  220. plain_iv = crypto_provider.decrypt_encrypted_iv(content_crypto_material.encrypted_iv)
  221. offset = 0
  222. if self.content_range:
  223. start, end = crypto_provider.adjust_range(byte_range[0], byte_range[1])
  224. offset = content_crypto_material.cipher.calc_offset(start)
  225. cipher = copy.copy(content_crypto_material.cipher)
  226. if content_crypto_material.deprecated:
  227. cipher.initial_by_counter(plain_key, plain_counter + offset)
  228. else:
  229. cipher.initialize(plain_key, plain_iv, offset)
  230. self.stream = crypto_provider.make_decrypt_adapter(self.stream, cipher, discard)
  231. else:
  232. if OSS_CLIENT_SIDE_ENCRYPTION_KEY in resp.headers or DEPRECATED_CLIENT_SIDE_ENCRYPTION_KEY in resp.headers:
  233. logger.warn(
  234. "Using Bucket to get an encrypted object will return raw data, please confirm if you really want to do this")
  235. @staticmethod
  236. def _parse_range_str(content_range):
  237. # :param str content_range: sample 'bytes 0-128/1024'
  238. range_data = (content_range.split(' ', 2)[1]).split('/', 2)[0]
  239. range_start, range_end = range_data.split('-', 2)
  240. return int(range_start), int(range_end)
  241. def read(self, amt=None):
  242. return self.stream.read(amt)
  243. def close(self):
  244. self.resp.response.close()
  245. def __iter__(self):
  246. return iter(self.stream)
  247. def __enter__(self):
  248. return self
  249. def __exit__(self, exc_type, exc_val, exc_tb):
  250. self.close()
  251. @property
  252. def client_crc(self):
  253. if self.__crc_enabled:
  254. return self.stream.crc
  255. else:
  256. return None
  257. class SelectObjectResult(HeadObjectResult):
  258. def __init__(self, resp, progress_callback=None, crc_enabled=False):
  259. super(SelectObjectResult, self).__init__(resp)
  260. self.__crc_enabled = crc_enabled
  261. self.select_resp = SelectResponseAdapter(resp, progress_callback, None, enable_crc = self.__crc_enabled)
  262. def read(self):
  263. return self.select_resp.read()
  264. def close(self):
  265. self.resp.response.close()
  266. def __iter__(self):
  267. return iter(self.select_resp)
  268. def __next__(self):
  269. return self.select_resp.next()
  270. def __enter__(self):
  271. return self
  272. def __exit__(self, exc_type, exc_val, exc_tb):
  273. self.close()
  274. class PutObjectResult(RequestResult):
  275. def __init__(self, resp):
  276. super(PutObjectResult, self).__init__(resp)
  277. #: HTTP ETag
  278. self.etag = _get_etag(self.headers)
  279. #: 文件上传后,OSS上文件的CRC64值
  280. self.crc = _hget(resp.headers, OSS_HASH_CRC64_ECMA, int)
  281. class AppendObjectResult(RequestResult):
  282. def __init__(self, resp):
  283. super(AppendObjectResult, self).__init__(resp)
  284. #: HTTP ETag
  285. self.etag = _get_etag(self.headers)
  286. #: 本次追加写完成后,OSS上文件的CRC64值
  287. self.crc = _hget(resp.headers, OSS_HASH_CRC64_ECMA, int)
  288. #: 下次追加写的偏移
  289. self.next_position = _hget(resp.headers, OSS_NEXT_APPEND_POSITION, int)
  290. class BatchDeleteObjectVersion(object):
  291. def __init__(self, key=None, versionid=None):
  292. self.key = key or ''
  293. self.versionid = versionid or ''
  294. class BatchDeleteObjectVersionList(object):
  295. def __init__(self, object_version_list=None):
  296. self.object_version_list = object_version_list or []
  297. def append(self, object_version):
  298. self.object_version_list.append(object_version)
  299. def len(self):
  300. return len(self.object_version_list)
  301. class BatchDeleteObjectVersionResult(object):
  302. def __init__(self, key, versionid=None, delete_marker=None, delete_marker_versionid=None):
  303. self.key = key
  304. self.versionid = versionid or ''
  305. self.delete_marker = delete_marker or False
  306. self.delete_marker_versionid = delete_marker_versionid or ''
  307. class BatchDeleteObjectsResult(RequestResult):
  308. def __init__(self, resp):
  309. super(BatchDeleteObjectsResult, self).__init__(resp)
  310. #: 已经删除的文件名列表
  311. self.deleted_keys = []
  312. #:已经删除的带版本信息的文件信息列表
  313. self.delete_versions = []
  314. class InitMultipartUploadResult(RequestResult):
  315. def __init__(self, resp):
  316. super(InitMultipartUploadResult, self).__init__(resp)
  317. #: 新生成的Upload ID
  318. self.upload_id = None
  319. # 客户端加密Bucket关于Multipart文件的context
  320. # self.crypto_multipart_context = None
  321. class ListObjectsResult(RequestResult):
  322. def __init__(self, resp):
  323. super(ListObjectsResult, self).__init__(resp)
  324. #: True表示还有更多的文件可以罗列;False表示已经列举完毕。
  325. self.is_truncated = False
  326. #: 下一次罗列的分页标记符,即,可以作为 :func:`list_objects <oss2.Bucket.list_objects>` 的 `marker` 参数。
  327. self.next_marker = ''
  328. #: 本次罗列得到的文件列表。其中元素的类型为 :class:`SimplifiedObjectInfo` 。
  329. self.object_list = []
  330. #: 本次罗列得到的公共前缀列表,类型为str列表。
  331. self.prefix_list = []
  332. class ListObjectsV2Result(RequestResult):
  333. def __init__(self, resp):
  334. super(ListObjectsV2Result, self).__init__(resp)
  335. #: True表示还有更多的文件可以罗列;False表示已经列举完毕。
  336. self.is_truncated = False
  337. #: 下次罗列操作携带的token
  338. self.next_continuation_token = ''
  339. #: 本次罗列得到的文件列表。其中元素的类型为 :class:`SimplifiedObjectInfo` 。
  340. self.object_list = []
  341. #: 本次罗列得到的公共前缀列表,类型为str列表。
  342. self.prefix_list = []
  343. class SimplifiedObjectInfo(object):
  344. def __init__(self, key, last_modified, etag, type, size, storage_class, owner=None, restore_info=None):
  345. #: 文件名,或公共前缀名。
  346. self.key = key
  347. #: 文件的最后修改时间
  348. self.last_modified = last_modified
  349. #: HTTP ETag
  350. self.etag = etag
  351. #: 文件类型
  352. self.type = type
  353. #: 文件大小
  354. self.size = size
  355. #: 文件的存储类别,是一个字符串。
  356. self.storage_class = storage_class
  357. #: owner信息, 类型为: class:`Owner <oss2.models.Owner>`
  358. self.owner = owner
  359. #: Object的解冻状态。
  360. self.restore_info = restore_info
  361. def is_prefix(self):
  362. """如果是公共前缀,返回True;是文件,则返回False"""
  363. return self.last_modified is None
  364. OBJECT_ACL_DEFAULT = 'default'
  365. OBJECT_ACL_PRIVATE = 'private'
  366. OBJECT_ACL_PUBLIC_READ = 'public-read'
  367. OBJECT_ACL_PUBLIC_READ_WRITE = 'public-read-write'
  368. class GetObjectAclResult(RequestResult):
  369. def __init__(self, resp):
  370. super(GetObjectAclResult, self).__init__(resp)
  371. #: 文件的ACL,其值可以是 `OBJECT_ACL_DEFAULT`、`OBJECT_ACL_PRIVATE`、`OBJECT_ACL_PUBLIC_READ`或
  372. #: `OBJECT_ACL_PUBLIC_READ_WRITE`
  373. self.acl = ''
  374. class SimplifiedBucketInfo(object):
  375. """:func:`list_buckets <oss2.Service.list_objects>` 结果中的单个元素类型。"""
  376. def __init__(self, name, location, creation_date, extranet_endpoint, intranet_endpoint, storage_class, region=None, resource_group_id=None):
  377. #: Bucket名
  378. self.name = name
  379. #: Bucket的区域
  380. self.location = location
  381. #: Bucket的创建时间,类型为int。参考 :ref:`unix_time`。
  382. self.creation_date = creation_date
  383. #: Bucket访问的外网域名
  384. self.extranet_endpoint = extranet_endpoint
  385. #: 同区域ECS访问Bucket的内网域名
  386. self.intranet_endpoint = intranet_endpoint
  387. #: Bucket存储类型,支持“Standard”、“IA”、“Archive”、“ColdArchive”
  388. self.storage_class = storage_class
  389. #: Bucket所在地域
  390. self.region = region
  391. #: Bucket所属资源组ID
  392. self.resource_group_id = resource_group_id
  393. class ListBucketsResult(RequestResult):
  394. def __init__(self, resp):
  395. super(ListBucketsResult, self).__init__(resp)
  396. #: True表示还有更多的Bucket可以罗列;False表示已经列举完毕。
  397. self.is_truncated = False
  398. #: 下一次罗列的分页标记符,即,可以作为 :func:`list_buckets <oss2.Service.list_buckets>` 的 `marker` 参数。
  399. self.next_marker = ''
  400. #: 得到的Bucket列表,类型为 :class:`SimplifiedBucketInfo` 。
  401. self.buckets = []
  402. #: owner信息, 类型为: class:`Owner <oss2.models.Owner>`
  403. self.owner = Owner('', '')
  404. class MultipartUploadInfo(object):
  405. def __init__(self, key, upload_id, initiation_date):
  406. #: 文件名
  407. self.key = key
  408. #: 分片上传ID
  409. self.upload_id = upload_id
  410. #: 分片上传初始化的时间,类型为int。参考 :ref:`unix_time`
  411. self.initiation_date = initiation_date
  412. def is_prefix(self):
  413. """如果是公共前缀则返回True"""
  414. return self.upload_id is None
  415. class ListMultipartUploadsResult(RequestResult):
  416. def __init__(self, resp):
  417. super(ListMultipartUploadsResult, self).__init__(resp)
  418. #: True表示还有更多的为完成分片上传可以罗列;False表示已经列举完毕。
  419. self.is_truncated = False
  420. #: 文件名分页符
  421. self.next_key_marker = ''
  422. #: 分片上传ID分页符
  423. self.next_upload_id_marker = ''
  424. #: 分片上传列表。类型为`MultipartUploadInfo`列表。
  425. self.upload_list = []
  426. #: 公共前缀列表。类型为str列表。
  427. self.prefix_list = []
  428. class ListPartsResult(RequestResult):
  429. def __init__(self, resp):
  430. super(ListPartsResult, self).__init__(resp)
  431. # True表示还有更多的Part可以罗列;False表示已经列举完毕。
  432. self.is_truncated = False
  433. # 下一个分页符
  434. self.next_marker = ''
  435. # 罗列出的Part信息,类型为 `PartInfo` 列表。
  436. self.parts = []
  437. BUCKET_ACL_PRIVATE = 'private'
  438. BUCKET_ACL_PUBLIC_READ = 'public-read'
  439. BUCKET_ACL_PUBLIC_READ_WRITE = 'public-read-write'
  440. BUCKET_STORAGE_CLASS_STANDARD = 'Standard'
  441. BUCKET_STORAGE_CLASS_IA = 'IA'
  442. BUCKET_STORAGE_CLASS_ARCHIVE = 'Archive'
  443. BUCKET_STORAGE_CLASS_COLD_ARCHIVE = "ColdArchive"
  444. BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE = "DeepColdArchive"
  445. BUCKET_DATA_REDUNDANCY_TYPE_LRS = "LRS"
  446. BUCKET_DATA_REDUNDANCY_TYPE_ZRS = "ZRS"
  447. REDIRECT_TYPE_MIRROR = 'Mirror'
  448. REDIRECT_TYPE_EXTERNAL = 'External'
  449. REDIRECT_TYPE_INTERNAL = 'Internal'
  450. REDIRECT_TYPE_ALICDN = 'AliCDN'
  451. PAYER_BUCKETOWNER = 'BucketOwner'
  452. PAYER_REQUESTER = 'Requester'
  453. class GetBucketAclResult(RequestResult):
  454. def __init__(self, resp):
  455. super(GetBucketAclResult, self).__init__(resp)
  456. #: Bucket的ACL,其值可以是 `BUCKET_ACL_PRIVATE`、`BUCKET_ACL_PUBLIC_READ`或`BUCKET_ACL_PUBLIC_READ_WRITE`。
  457. self.acl = ''
  458. class GetBucketLocationResult(RequestResult):
  459. def __init__(self, resp):
  460. super(GetBucketLocationResult, self).__init__(resp)
  461. #: Bucket所在的数据中心
  462. self.location = ''
  463. class BucketLogging(object):
  464. """Bucket日志配置信息。
  465. :param str target_bucket: 存储日志到这个Bucket。
  466. :param str target_prefix: 生成的日志文件名加上该前缀。
  467. """
  468. def __init__(self, target_bucket, target_prefix):
  469. self.target_bucket = target_bucket
  470. self.target_prefix = target_prefix
  471. class GetBucketLoggingResult(RequestResult, BucketLogging):
  472. def __init__(self, resp):
  473. RequestResult.__init__(self, resp)
  474. BucketLogging.__init__(self, '', '')
  475. class BucketCreateConfig(object):
  476. def __init__(self, storage_class, data_redundancy_type=None):
  477. self.storage_class = storage_class
  478. self.data_redundancy_type = data_redundancy_type
  479. class BucketStat(object):
  480. def __init__(self, storage_size_in_bytes, object_count, multi_part_upload_count, live_channel_count=None,
  481. last_modified_time=None, standard_storage=None, standard_object_count=None, infrequent_access_storage=None,
  482. infrequent_access_real_storage=None, infrequent_access_object_count=None, archive_storage=None, archive_real_storage=None,
  483. archive_object_count=None, cold_archive_storage=None, cold_archive_real_storage=None, cold_archive_object_count=None,
  484. multipart_part_count=None, delete_marker_count=None, deep_cold_archive_storage=None, deep_cold_archive_real_storage=None, deep_cold_archive_object_count=None):
  485. self.storage_size_in_bytes = storage_size_in_bytes
  486. self.object_count = object_count
  487. self.multi_part_upload_count = multi_part_upload_count
  488. #: bucket中live channel数量
  489. self.live_channel_count = live_channel_count
  490. #: 此次调用获取到的数据记录的时间点
  491. self.last_modified_time = last_modified_time
  492. #: 标准存储类型的存储量,单位字节
  493. self.standard_storage = standard_storage
  494. #: 标准存储类型的object数量
  495. self.standard_object_count = standard_object_count
  496. #: 低频存储类型的计费存储量(单个object不足64KB以64KB计算),单位字节
  497. self.infrequent_access_storage = infrequent_access_storage
  498. #: 低频存储类型的实际存储量,单位字节
  499. self.infrequent_access_real_storage = infrequent_access_real_storage
  500. #: 低频存储类型的object数量
  501. self.infrequent_access_object_count = infrequent_access_object_count
  502. #: 归档存储类型的计费存储量(单个object不足64KB以64KB计算),单位字节
  503. self.archive_storage = archive_storage
  504. #: 归档存储类型的实际存储量,单位字节
  505. self.archive_real_storage = archive_real_storage
  506. #: 归档存储类型的object数量
  507. self.archive_object_count = archive_object_count
  508. #: 冷归档存储类型的计费存储量(单个object不足64KB以64KB计算),单位字节
  509. self.cold_archive_storage = cold_archive_storage
  510. #: 冷归档存储类型的实际存储量,单位字节
  511. self.cold_archive_real_storage = cold_archive_real_storage
  512. #: 冷归档存储类型的object数量
  513. self.cold_archive_object_count = cold_archive_object_count
  514. #: 分片数量
  515. self.multipart_part_count = multipart_part_count
  516. #: 删除标记数量
  517. self.delete_marker_count = delete_marker_count
  518. #: 深度冷归档存储类型的计费存储量,单位字节。
  519. self.deep_cold_archive_storage = deep_cold_archive_storage
  520. #: 深度冷归档存储类型的实际存储量,单位字节。
  521. self.deep_cold_archive_real_storage = deep_cold_archive_real_storage
  522. #: 深度冷归档存储类型的Object数量。
  523. self.deep_cold_archive_object_count = deep_cold_archive_object_count
  524. class AccessControlList(object):
  525. def __init__(self, grant):
  526. self.grant = grant
  527. class Owner(object):
  528. def __init__(self, display_name, owner_id):
  529. self.display_name = display_name
  530. self.id = owner_id
  531. class BucketInfo(object):
  532. def __init__(self, name=None, owner=None, location=None, storage_class=None, intranet_endpoint=None,
  533. extranet_endpoint=None, creation_date=None, acl=None, data_redundancy_type=None, comment=None,
  534. bucket_encryption_rule=None, versioning_status=None, access_monitor=None,
  535. transfer_acceleration=None, cross_region_replication=None, resource_group_id=None):
  536. self.name = name
  537. self.owner = owner
  538. self.location = location
  539. self.storage_class = storage_class
  540. self.intranet_endpoint = intranet_endpoint
  541. self.extranet_endpoint = extranet_endpoint
  542. self.creation_date = creation_date
  543. self.acl = acl
  544. self.data_redundancy_type = data_redundancy_type
  545. self.comment = comment
  546. self.bucket_encryption_rule = bucket_encryption_rule
  547. self.versioning_status = versioning_status
  548. self.access_monitor = access_monitor
  549. self.transfer_acceleration = transfer_acceleration
  550. self.cross_region_replication = cross_region_replication
  551. self.resource_group_id = resource_group_id
  552. class GetBucketStatResult(RequestResult, BucketStat):
  553. def __init__(self, resp):
  554. RequestResult.__init__(self, resp)
  555. BucketStat.__init__(self, 0, 0, 0, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None)
  556. class GetBucketInfoResult(RequestResult, BucketInfo):
  557. def __init__(self, resp):
  558. RequestResult.__init__(self, resp)
  559. BucketInfo.__init__(self)
  560. class BucketReferer(object):
  561. """Bucket防盗链设置。
  562. :param bool allow_empty_referer: 是否允许空的Referer。
  563. :param referers: Referer列表,每个元素是一个str。
  564. :param black_referers: BlackReferer列表,每个元素是一个str。
  565. """
  566. def __init__(self, allow_empty_referer, referers, allow_truncate_query_string=None, black_referers=None):
  567. self.allow_empty_referer = allow_empty_referer
  568. self.referers = referers
  569. self.allow_truncate_query_string = allow_truncate_query_string
  570. self.black_referers = black_referers
  571. class GetBucketRefererResult(RequestResult, BucketReferer):
  572. def __init__(self, resp):
  573. RequestResult.__init__(self, resp)
  574. BucketReferer.__init__(self, False, [], None, [])
  575. class Condition(object):
  576. """ 匹配规则
  577. :父节点: class `RoutingRule <oss2.models.RoutingRule>`
  578. :param key_prefix_equals: 匹配object的前缀,
  579. :type key_prefix_equals: string str
  580. :param http_err_code_return_equals: 匹配访问object时返回的status。
  581. :type http_err_code_return_equals: int
  582. :param include_header_list: 匹配指定的header
  583. :type include_header_list: list of :class:`ConditionInlcudeHeader`
  584. """
  585. def __init__(self, key_prefix_equals=None, http_err_code_return_equals=None, include_header_list=None):
  586. if (include_header_list is not None):
  587. if not isinstance(include_header_list, list):
  588. raise ClientError('class of include_header should be list')
  589. if len(include_header_list) > 5:
  590. raise ClientError('capacity of include_header_list should not > 5, please check!')
  591. self.key_prefix_equals = key_prefix_equals
  592. self.http_err_code_return_equals = http_err_code_return_equals
  593. self.include_header_list = include_header_list or []
  594. class ConditionInlcudeHeader(object):
  595. """ 指定匹配的header
  596. :父节点: class `Condition <oss2.models.Condition>`
  597. :param key: header key
  598. :type key: str
  599. :param key: header value
  600. :type key: str
  601. """
  602. def __init__(self, key=None, equals= None):
  603. self.key = key
  604. self.equals = equals
  605. class Redirect(object):
  606. """匹配规则之后执行的动作
  607. :父节点: class `RoutingRule <oss2.models.RoutingRule>`
  608. :param redirect_type: 跳转类型, 取值为Mirror, External, Internal, AliCDN其中一个。
  609. :type redirect_type: class: str
  610. :param pass_query_string: 执行跳转或者镜像回源时,是否要携带发起请求的请求参数,默认false。
  611. :type pass_query_string: bool
  612. :param replace_key_with: Redirect的时候object name将替换成这个值,可以支持变量(目前支持的变量是${key}
  613. 当RedirectType为Internal, External或者AliCDN时有效。
  614. :type replace_key_with: str
  615. :param replace_key_prefix_with: Redirect的时候object name的前缀将替换成这个值。如果前缀为空则将这个字符串插入在object namde的最前面。
  616. 当RedirectType为Internal, External或者AliCDN时有效。
  617. :type replace_key_prefix_with: str
  618. :param proto: 跳转时的协议,只能取值为http或者https。
  619. 当RedirectType为External或者AliCDN时有效。
  620. :type proto: class: str
  621. :param host_name: 跳转时的域名
  622. 当RedirectType为External或者AliCDN时有效。
  623. :type host_name: str
  624. :param http_redirect_code: 跳转时返回的状态码,取值为301、302或307。
  625. 当RedirectType为External或者AliCDN时有效。
  626. :type http_redirect_code: int (HTTP状态码)
  627. :mirror相关当参数只有当RedirectType为Mirror时有效。
  628. :param mirror_url: 镜像回源的源站地址,
  629. :type mirror_url: str
  630. :param mirror_url_slave: 镜像回源的备站地址
  631. :type mirror_url_slave: str
  632. :param mirror_url_probe: 主备切换模式的探测url,这个url需要代表主源站的健康程度,mirror_url_slave指定时,此项必须指定。
  633. :type mirror_url_probe: str
  634. :param mirror_pass_query_string: 作用同pass_query_string,默认false。
  635. :type mirror_pass_query_string: bool
  636. :param mirror_follow_redirect: 如果镜像回源获取的结果是3xx,是否要继续跳转到指定的Location获取数据。默认true。
  637. :type mirror_follow_redirect: bool
  638. :param mirror_check_md5: 是否要检查回源body的md5, 默认false。
  639. :type mirror_check_md5: bool
  640. :param mirror_headers: 指定匹配此规则后执行的动作。
  641. :type mirror_headers: class:`RedirectMirrorHeaders <oss2.models.RedirectMirrorHeaders>`
  642. """
  643. def __init__(self, redirect_type=None, pass_query_string= None, replace_key_with=None, replace_key_prefix_with=None,
  644. proto=None, host_name=None, http_redirect_code=None, mirror_url=None, mirror_url_slave=None,
  645. mirror_url_probe=None, mirror_pass_query_string=None, mirror_follow_redirect=None,
  646. mirror_check_md5=None, mirror_headers=None):
  647. if redirect_type not in [REDIRECT_TYPE_MIRROR, REDIRECT_TYPE_EXTERNAL, REDIRECT_TYPE_INTERNAL, REDIRECT_TYPE_ALICDN]:
  648. raise ClientError('redirect_type must be Internal, External, Mirror or AliCDN.')
  649. if redirect_type == REDIRECT_TYPE_INTERNAL:
  650. if any((host_name, proto, http_redirect_code)):
  651. raise ClientError('host_name, proto, http_redirect_code must be empty when redirect_type is Internal.')
  652. if redirect_type in [REDIRECT_TYPE_EXTERNAL, REDIRECT_TYPE_ALICDN]:
  653. if http_redirect_code is not None:
  654. if http_redirect_code < 300 or http_redirect_code > 399:
  655. raise ClientError("http_redirect_code must be a valid HTTP 3xx status code.")
  656. if redirect_type in [REDIRECT_TYPE_EXTERNAL, REDIRECT_TYPE_ALICDN, REDIRECT_TYPE_INTERNAL]:
  657. if all((replace_key_with, replace_key_prefix_with)):
  658. raise ClientError("replace_key_with or replace_key_prefix_with only choose one.")
  659. elif redirect_type == REDIRECT_TYPE_MIRROR:
  660. if any((proto, host_name, replace_key_with, replace_key_prefix_with, http_redirect_code)):
  661. raise ClientError('host_name, replace_key_with, replace_key_prefix_with, http_redirect_code and proto must be empty when redirect_type is Mirror.')
  662. if mirror_url is None:
  663. raise ClientError('mirror_url should not be None when redirect_type is Mirror.')
  664. if (not mirror_url.startswith('http://') and not mirror_url.startswith('https://')) or not mirror_url.endswith('/'):
  665. raise ClientError(r'mirror_url is invalid, should startwith "http://" or "https://", and endwith "/"')
  666. if mirror_url_slave is not None:
  667. if mirror_url_probe is None:
  668. raise ClientError('mirror_url_probe should not be none when mirror_url_slave is indicated')
  669. if (not mirror_url_slave.startswith('http://') and not mirror_url_slave.startswith('https://')) or not mirror_url_slave.endswith('/'):
  670. raise ClientError(r'mirror_url_salve is invalid, should startwith "http://" or "https://", and endwith "/"')
  671. self.redirect_type = redirect_type
  672. self.pass_query_string = pass_query_string
  673. self.replace_key_with = replace_key_with
  674. self.replace_key_prefix_with = replace_key_prefix_with
  675. self.proto = proto
  676. self.host_name = host_name
  677. self.http_redirect_code = http_redirect_code
  678. self.mirror_url = mirror_url
  679. self.mirror_url_slave = mirror_url_slave
  680. self.mirror_url_probe = mirror_url_probe
  681. self.mirror_pass_query_string = mirror_pass_query_string
  682. self.mirror_check_md5 = mirror_check_md5
  683. self.mirror_follow_redirect = mirror_follow_redirect
  684. self.mirror_headers = mirror_headers
  685. class RedirectMirrorHeaders(object):
  686. """指定镜像回源时携带的header
  687. :父节点: class `Redirect <oss2.models.Redirect>`
  688. :param pass_all: 是否透传请求中所有的header(除了保留的几个header以及以oss-/x-oss-/x-drs-开头的header)到源站。默认false
  689. :type pass_all: bool
  690. :param pass_list: 透传指定的header到源站,最多10个,只有在RedirectType为Mirror时生效
  691. :type pass_list: list of str
  692. :param remove_list: 禁止透传指定的header到源站,这个字段可以重复,最多10个
  693. :type remove_list: list of str
  694. :param set_list: 设置一个header传到源站,不管请求中是否携带这些指定的header,回源时都会设置这些header。
  695. 该容器可以重复,最多10组。只有在RedirectType为Mirror时生效。
  696. :type set_list: list of :class:`MirrorHeadersSet <oss2.models.MirrorHeadersSet>`
  697. """
  698. def __init__(self,pass_all=None, pass_list=None, remove_list=None, set_list=None):
  699. if pass_list is not None:
  700. if not isinstance(pass_list, list):
  701. raise ClientError('The type of pass_list should be list.')
  702. if len(pass_list) > 10:
  703. raise ClientError('The capacity of pass_list should not > 10!')
  704. if remove_list is not None:
  705. if not isinstance(remove_list, list):
  706. raise ClientError('The type of remove_list should be list.')
  707. if len(remove_list) > 10:
  708. raise ClientError('The capacity of remove_list should not > 10!')
  709. if set_list is not None:
  710. if not isinstance(set_list, list):
  711. raise ClientError('The type of set_list should be list.')
  712. if len(set_list) > 10:
  713. raise ClientError('The capacity of set_list should not > 10!')
  714. self.pass_all = pass_all
  715. self.pass_list = pass_list or []
  716. self.remove_list = remove_list or []
  717. self.set_list = set_list or []
  718. class MirrorHeadersSet(object):
  719. """父节点: class `RedirectMirrorHeaders <oss2.models.RedirectMirrorHeaders>`
  720. :param key:设置header的key,最多1024个字节,字符集与Pass相同。只有在RedirectType为Mirror时生效。
  721. :type key: str
  722. :param value:设置header的value,最多1024个字节,不能出现”\r\n” 。只有在RedirectType为Mirror时生效。
  723. :type value: str
  724. """
  725. def __init__(self, key=None, value=None):
  726. self.key = key
  727. self.value = value
  728. class RoutingRule(object):
  729. """设置静态网站托管模式中的跳转规则
  730. :param rule_num: RoutingRule的序号, 必须为正整数
  731. :type rule_num: int
  732. :param condition: 匹配条件
  733. :type condition: class:`Condition <oss2.models.Condition>`
  734. :param redirect: 指定匹配此规则后执行的动作
  735. :type redirect: class:`Redirect <oss2.models.Redirect>`
  736. """
  737. def __init__(self, rule_num=None, condition=None, redirect=None):
  738. if (rule_num is None) or (not isinstance(rule_num, int)) or (rule_num <= 0):
  739. raise ClientError('rule_num should be positive integer.')
  740. if(condition is None) or (redirect is None):
  741. raise ClientError('condition and redirect should be effective.')
  742. if(redirect.redirect_type == REDIRECT_TYPE_MIRROR) and condition.http_err_code_return_equals != 404:
  743. raise ClientError('http_err_code not match redirect_type, it should be 404!')
  744. self.rule_num = rule_num
  745. self.condition = condition
  746. self.redirect = redirect
  747. class BucketWebsite(object):
  748. """静态网站托管配置。
  749. :param str index_file: 索引页面文件
  750. :param str error_file: 404页面文件
  751. :param rules : list of class:`RoutingRule <oss2.models.RoutingRule>`
  752. """
  753. def __init__(self, index_file, error_file, rules=None):
  754. if rules is not None:
  755. if not isinstance(rules, list):
  756. raise ClientError('rules type should be list.')
  757. if len(rules) > 5:
  758. raise ClientError('capacity of rules should not be > 5.')
  759. self.index_file = index_file
  760. self.error_file = error_file
  761. self.rules = rules or []
  762. class GetBucketWebsiteResult(RequestResult, BucketWebsite):
  763. def __init__(self, resp):
  764. RequestResult.__init__(self, resp)
  765. BucketWebsite.__init__(self, '', '', [])
  766. class LifecycleExpiration(object):
  767. """过期删除操作。
  768. :param days: 表示在文件修改后过了这么多天,就会匹配规则,从而被删除
  769. :type days: int
  770. :param date: 表示在该日期之后,规则就一直生效。即每天都会对符合前缀的文件执行删除操作(如,删除),而不管文件是什么时候生成的。*不建议使用*
  771. :type date: `datetime.date`
  772. :param created_before_date: delete files if their last modified time earlier than created_before_date
  773. :type created_before_date: `datetime.date`
  774. :param expired_detete_marker: 真实文件删除之后是否自动移除删除标记,适用于多版本场景。
  775. :param expired_detete_marker: bool
  776. """
  777. def __init__(self, days=None, date=None, created_before_date=None, expired_detete_marker=None):
  778. not_none_fields = 0
  779. if days is not None:
  780. not_none_fields += 1
  781. if date is not None:
  782. not_none_fields += 1
  783. if created_before_date is not None:
  784. not_none_fields += 1
  785. if expired_detete_marker is not None:
  786. not_none_fields += 1
  787. if not_none_fields > 1:
  788. raise ClientError('More than one field(days, date and created_before_date, expired_detete_marker) has been specified')
  789. self.days = days
  790. self.date = date
  791. self.created_before_date = created_before_date
  792. self.expired_detete_marker = expired_detete_marker
  793. class AbortMultipartUpload(object):
  794. """删除parts
  795. :param days: 删除相对最后修改时间days天之后的parts
  796. :param created_before_date: 删除最后修改时间早于created_before_date的parts
  797. """
  798. def __init__(self, days=None, created_before_date=None):
  799. if days is not None and created_before_date is not None:
  800. raise ClientError('days and created_before_date should not be both specified')
  801. self.days = days
  802. self.created_before_date = created_before_date
  803. class StorageTransition(object):
  804. """transit objects
  805. :param days: 将相对最后修改时间days天之后的Object转储
  806. :param created_before_date: 将最后修改时间早于created_before_date的对象转储
  807. :param storage_class: 对象转储到OSS的目标存储类型
  808. :param bool is_access_time: 指定lifecycle rule是否基于atime。
  809. :param bool return_to_std_when_visit: 指定对象转到低频层后再次访问时是否回到标准层。
  810. :param bool allow_small_file: 指定是否将小于64 KB的Object转储为低频、归档、冷归档文件类型。
  811. """
  812. def __init__(self, days=None, created_before_date=None, storage_class=None, is_access_time=None, return_to_std_when_visit=None, allow_small_file=None):
  813. if days is not None and created_before_date is not None:
  814. raise ClientError('days and created_before_date should not be both specified')
  815. self.days = days
  816. self.created_before_date = created_before_date
  817. self.storage_class = storage_class
  818. self.is_access_time = is_access_time
  819. self.return_to_std_when_visit = return_to_std_when_visit
  820. self.allow_small_file = allow_small_file
  821. class NoncurrentVersionExpiration(object):
  822. """OSS何时将非当前版本的object删除
  823. :param noncurrent_days: 指定多少天之后删除
  824. :type noncurrent_days: int
  825. """
  826. def __init__(self, noncurrent_days):
  827. self.noncurrent_days = noncurrent_days
  828. class NoncurrentVersionStorageTransition(object):
  829. """生命周期内,OSS何时将指定Object的非当前版本转储为IA或者Archive存储类型。
  830. :param noncurrent_days: 多少天之后转存储
  831. :type noncurrent_days: int
  832. :param is_access_time: 指定lifecycle rule是否基于atime。
  833. :type is_access_time: bool
  834. :param return_to_std_when_visit: 指定对象转到低频层后再次访问时是否回到标准层。
  835. :type return_to_std_when_visit: bool
  836. :param allow_small_file: 指定是否将小于64 KB的Object转储为低频、归档、冷归档文件类型。
  837. :type allow_small_file: bool
  838. """
  839. def __init__(self, noncurrent_days, storage_class, is_access_time=None, return_to_std_when_visit=None, allow_small_file=None):
  840. self.noncurrent_days = noncurrent_days
  841. self.storage_class = storage_class
  842. self.is_access_time = is_access_time
  843. self.return_to_std_when_visit = return_to_std_when_visit
  844. self.allow_small_file = allow_small_file
  845. class LifecycleRule(object):
  846. """生命周期规则。
  847. :param id: 规则名
  848. :type id: str
  849. :param prefix: 只有文件名匹配该前缀的文件才适用本规则
  850. :type prefix: str
  851. :param expiration: 过期删除操作。
  852. :type expiration: :class:`LifecycleExpiration`
  853. :param status: 启用还是禁止该规则。可选值为 `LifecycleRule.ENABLED` 或 `LifecycleRule.DISABLED`
  854. :param storage_transitions: 存储类型转换规则
  855. :type storage_transitions: list of class:`StorageTransition <oss2.models.StorageTransition>`
  856. :param tagging: object tagging 规则
  857. :type tagging: :class:`Tagging <oss2.models.StorageTransition>`
  858. :param noncurrent_version_expiration: 指定Object非当前版本生命周期规则的过期属性。适用于多版本场景。
  859. :type noncurrent_version_expiration class:`NoncurrentVersionExpiration <oss2.models.NoncurrentVersionExpiration>`
  860. :param noncurrent_version_sotrage_transitions: 在有效生命周期中,OSS何时将指定Object的非当前版本转储为IA或者Archive存储类型,适用于多版本场景。
  861. :type noncurrent_version_sotrage_transitions: list of class:`NoncurrentVersionStorageTransition <oss2.models.NoncurrentVersionStorageTransition>`
  862. :param atime_base: last access time的时间戳
  863. :type atime_base: int
  864. :param filter: 规则的条件参数容器。
  865. :type filter class:`LifecycleFilter <oss2.models.LifecycleFilter>`
  866. """
  867. ENABLED = 'Enabled'
  868. DISABLED = 'Disabled'
  869. def __init__(self, id, prefix,
  870. status=ENABLED, expiration=None,
  871. abort_multipart_upload=None,
  872. storage_transitions=None, tagging=None,
  873. noncurrent_version_expiration=None,
  874. noncurrent_version_sotrage_transitions=None,
  875. atime_base=None,
  876. filter=None):
  877. self.id = id
  878. self.prefix = prefix
  879. self.status = status
  880. self.expiration = expiration
  881. self.abort_multipart_upload = abort_multipart_upload
  882. self.storage_transitions = storage_transitions
  883. self.tagging = tagging
  884. self.noncurrent_version_expiration = noncurrent_version_expiration
  885. self.noncurrent_version_sotrage_transitions = noncurrent_version_sotrage_transitions
  886. self.atime_base = atime_base
  887. self.filter = filter
  888. class BucketLifecycle(object):
  889. """Bucket的生命周期配置。
  890. :param rules: 规则列表,
  891. :type rules: list of :class:`LifecycleRule <oss2.models.LifecycleRule>`
  892. """
  893. def __init__(self, rules=None):
  894. self.rules = rules or []
  895. class GetBucketLifecycleResult(RequestResult, BucketLifecycle):
  896. def __init__(self, resp):
  897. RequestResult.__init__(self, resp)
  898. BucketLifecycle.__init__(self)
  899. class CorsRule(object):
  900. """CORS(跨域资源共享)规则。
  901. :param allowed_origins: 允许跨域访问的域。
  902. :type allowed_origins: list of str
  903. :param allowed_methods: 允许跨域访问的HTTP方法,如'GET'等。
  904. :type allowed_methods: list of str
  905. :param allowed_headers: 允许跨域访问的HTTP头部。
  906. :type allowed_headers: list of str
  907. """
  908. def __init__(self,
  909. allowed_origins=None,
  910. allowed_methods=None,
  911. allowed_headers=None,
  912. expose_headers=None,
  913. max_age_seconds=None):
  914. self.allowed_origins = allowed_origins or []
  915. self.allowed_methods = allowed_methods or []
  916. self.allowed_headers = allowed_headers or []
  917. self.expose_headers = expose_headers or []
  918. self.max_age_seconds = max_age_seconds
  919. class BucketCors(object):
  920. def __init__(self, rules=None):
  921. self.rules = rules or []
  922. class GetBucketCorsResult(RequestResult, BucketCors):
  923. def __init__(self, resp):
  924. RequestResult.__init__(self, resp)
  925. BucketCors.__init__(self)
  926. class LiveChannelInfoTarget(object):
  927. """Live channel中的Target节点,包含目标协议的一些参数。
  928. :param type: 协议,目前仅支持HLS。
  929. :type type: str
  930. :param frag_duration: HLS协议下生成的ts文件的期望时长,单位为秒。
  931. :type frag_duration: int
  932. :param frag_count: HLS协议下m3u8文件里ts文件的数量。
  933. :type frag_count: int"""
  934. def __init__(self,
  935. type = 'HLS',
  936. frag_duration = 5,
  937. frag_count = 3,
  938. playlist_name = ''):
  939. self.type = type
  940. self.frag_duration = frag_duration
  941. self.frag_count = frag_count
  942. self.playlist_name = playlist_name
  943. class LiveChannelInfo(object):
  944. """Live channel(直播频道)配置。
  945. :param status: 直播频道的状态,合法的值为"enabled"和"disabled"。
  946. :type status: str
  947. :param description: 直播频道的描述信息,最长为128字节。
  948. :type description: str
  949. :param target: 直播频道的推流目标节点,包含目标协议相关的参数。
  950. :type class:`LiveChannelInfoTarget <oss2.models.LiveChannelInfoTarget>`
  951. :param last_modified: 直播频道的最后修改时间,这个字段仅在`ListLiveChannel`时使用。
  952. :type last_modified: int, 参考 :ref:`unix_time`。
  953. :param name: 直播频道的名称。
  954. :type name: str
  955. :param play_url: 播放地址。
  956. :type play_url: str
  957. :param publish_url: 推流地址。
  958. :type publish_url: str"""
  959. def __init__(self,
  960. status = 'enabled',
  961. description = '',
  962. target = LiveChannelInfoTarget(),
  963. last_modified = None,
  964. name = None,
  965. play_url = None,
  966. publish_url = None):
  967. self.status = status
  968. self.description = description
  969. self.target = target
  970. self.last_modified = last_modified
  971. self.name = name
  972. self.play_url = play_url
  973. self.publish_url = publish_url
  974. class LiveChannelList(object):
  975. """List直播频道的结果。
  976. :param prefix: List直播频道使用的前缀。
  977. :type prefix: str
  978. :param marker: List直播频道使用的marker。
  979. :type marker: str
  980. :param max_keys: List时返回的最多的直播频道的条数。
  981. :type max_keys: int
  982. :param is_truncated: 本次List是否列举完所有的直播频道
  983. :type is_truncated: bool
  984. :param next_marker: 下一次List直播频道使用的marker。
  985. :type marker: str
  986. :param channels: List返回的直播频道列表
  987. :type channels: list,类型为 :class:`LiveChannelInfo`"""
  988. def __init__(self,
  989. prefix = '',
  990. marker = '',
  991. max_keys = 100,
  992. is_truncated = False,
  993. next_marker = ''):
  994. self.prefix = prefix
  995. self.marker = marker
  996. self.max_keys = max_keys
  997. self.is_truncated = is_truncated
  998. self.next_marker = next_marker
  999. self.channels = []
  1000. class LiveChannelVideoStat(object):
  1001. """LiveStat中的Video节点。
  1002. :param width: 视频的宽度。
  1003. :type width: int
  1004. :param height: 视频的高度。
  1005. :type height: int
  1006. :param frame_rate: 帧率。
  1007. :type frame_rate: int
  1008. :param codec: 编码方式。
  1009. :type codec: str
  1010. :param bandwidth: 码率。
  1011. :type bandwidth: int"""
  1012. def __init__(self,
  1013. width = 0,
  1014. height = 0,
  1015. frame_rate = 0,
  1016. codec = '',
  1017. bandwidth = 0):
  1018. self.width = width
  1019. self.height = height
  1020. self.frame_rate = frame_rate
  1021. self.codec = codec
  1022. self.bandwidth = bandwidth
  1023. class LiveChannelAudioStat(object):
  1024. """LiveStat中的Audio节点。
  1025. :param codec: 编码方式。
  1026. :type codec: str
  1027. :param sample_rate: 采样率。
  1028. :type sample_rate: int
  1029. :param bandwidth: 码率。
  1030. :type bandwidth: int"""
  1031. def __init__(self,
  1032. codec = '',
  1033. sample_rate = 0,
  1034. bandwidth = 0):
  1035. self.codec = codec
  1036. self.sample_rate = sample_rate
  1037. self.bandwidth = bandwidth
  1038. class LiveChannelStat(object):
  1039. """LiveStat结果。
  1040. :param status: 直播状态。
  1041. :type codec: str
  1042. :param remote_addr: 客户端的地址。
  1043. :type remote_addr: str
  1044. :param connected_time: 本次推流开始时间。
  1045. :type connected_time: int, unix time
  1046. :param video: 视频描述信息。
  1047. :type video: class:`LiveChannelVideoStat <oss2.models.LiveChannelVideoStat>`
  1048. :param audio: 音频描述信息。
  1049. :type audio: class:`LiveChannelAudioStat <oss2.models.LiveChannelAudioStat>`"""
  1050. def __init__(self,
  1051. status = '',
  1052. remote_addr = '',
  1053. connected_time = '',
  1054. video = None,
  1055. audio = None):
  1056. self.status = status
  1057. self.remote_addr = remote_addr
  1058. self.connected_time = connected_time
  1059. self.video = video
  1060. self.audio = audio
  1061. class LiveRecord(object):
  1062. """直播频道中的推流记录信息
  1063. :param start_time: 本次推流开始时间。
  1064. :type start_time: int,参考 :ref:`unix_time`。
  1065. :param end_time: 本次推流结束时间。
  1066. :type end_time: int, 参考 :ref:`unix_time`。
  1067. :param remote_addr: 推流时客户端的地址。
  1068. :type remote_addr: str"""
  1069. def __init__(self,
  1070. start_time = '',
  1071. end_time = '',
  1072. remote_addr = ''):
  1073. self.start_time = start_time
  1074. self.end_time = end_time
  1075. self.remote_addr = remote_addr
  1076. class LiveChannelHistory(object):
  1077. """直播频道下的推流记录。"""
  1078. def __init__(self):
  1079. self.records = []
  1080. class CreateLiveChannelResult(RequestResult, LiveChannelInfo):
  1081. def __init__(self, resp):
  1082. RequestResult.__init__(self, resp)
  1083. LiveChannelInfo.__init__(self)
  1084. class GetLiveChannelResult(RequestResult, LiveChannelInfo):
  1085. def __init__(self, resp):
  1086. RequestResult.__init__(self, resp)
  1087. LiveChannelInfo.__init__(self)
  1088. class ListLiveChannelResult(RequestResult, LiveChannelList):
  1089. def __init__(self, resp):
  1090. RequestResult.__init__(self, resp)
  1091. LiveChannelList.__init__(self)
  1092. class GetLiveChannelStatResult(RequestResult, LiveChannelStat):
  1093. def __init__(self, resp):
  1094. RequestResult.__init__(self, resp)
  1095. LiveChannelStat.__init__(self)
  1096. class GetLiveChannelHistoryResult(RequestResult, LiveChannelHistory):
  1097. def __init__(self, resp):
  1098. RequestResult.__init__(self, resp)
  1099. LiveChannelHistory.__init__(self)
  1100. class GetVodPlaylistResult(RequestResult):
  1101. def __init__(self, resp):
  1102. RequestResult.__init__(self, resp)
  1103. self.playlist = to_string(resp.read())
  1104. class ProcessObjectResult(RequestResult):
  1105. def __init__(self, resp):
  1106. RequestResult.__init__(self, resp)
  1107. self.bucket = ""
  1108. self.fileSize = 0
  1109. self.object = ""
  1110. self.process_status = ""
  1111. result = json.loads(to_string(resp.read()))
  1112. if 'bucket' in result:
  1113. self.bucket = result['bucket']
  1114. if 'fileSize' in result:
  1115. self.fileSize = result['fileSize']
  1116. if 'object' in result:
  1117. self.object = result['object']
  1118. if 'status' in result:
  1119. self.process_status = result['status']
  1120. _MAX_OBJECT_TAGGING_KEY_LENGTH=128
  1121. _MAX_OBJECT_TAGGING_VALUE_LENGTH=256
  1122. class Tagging(object):
  1123. def __init__(self, tagging_rules=None):
  1124. self.tag_set = tagging_rules or TaggingRule()
  1125. def __str__(self):
  1126. tag_str = ""
  1127. tagging_rule = self.tag_set.tagging_rule
  1128. for key in tagging_rule:
  1129. tag_str += key
  1130. tag_str += "#" + tagging_rule[key] + " "
  1131. return tag_str
  1132. class TaggingRule(object):
  1133. def __init__(self):
  1134. self.tagging_rule = dict()
  1135. def add(self, key, value):
  1136. if key is None or key == '':
  1137. raise ClientError("Tagging key should not be empty")
  1138. if len(key) > _MAX_OBJECT_TAGGING_KEY_LENGTH:
  1139. raise ClientError("Tagging key is too long")
  1140. if len(value) > _MAX_OBJECT_TAGGING_VALUE_LENGTH:
  1141. raise ClientError("Tagging value is too long")
  1142. self.tagging_rule[key] = value
  1143. def delete(self, key):
  1144. del self.tagging_rule[key]
  1145. def len(self):
  1146. return len(self.tagging_rule)
  1147. def to_query_string(self):
  1148. query_string = ''
  1149. for key in self.tagging_rule:
  1150. query_string += urlquote(key)
  1151. query_string += '='
  1152. query_string += urlquote(self.tagging_rule[key])
  1153. query_string += '&'
  1154. if len(query_string) == 0:
  1155. return ''
  1156. else:
  1157. query_string = query_string[:-1]
  1158. return query_string
  1159. class GetTaggingResult(RequestResult, Tagging):
  1160. def __init__(self, resp):
  1161. RequestResult.__init__(self, resp)
  1162. Tagging.__init__(self)
  1163. SERVER_SIDE_ENCRYPTION_AES256 = 'AES256'
  1164. SERVER_SIDE_ENCRYPTION_KMS = 'KMS'
  1165. SERVER_SIDE_ENCRYPTION_SM4 = 'SM4'
  1166. KMS_DATA_ENCRYPTION_SM4 = 'SM4'
  1167. class ServerSideEncryptionRule(object):
  1168. def __init__(self, sse_algorithm=None, kms_master_keyid=None, kms_data_encryption=None):
  1169. self.sse_algorithm = sse_algorithm
  1170. self.kms_master_keyid = kms_master_keyid
  1171. self.kms_data_encryption = kms_data_encryption
  1172. class GetServerSideEncryptionResult(RequestResult, ServerSideEncryptionRule):
  1173. def __init__(self, resp):
  1174. RequestResult.__init__(self, resp)
  1175. ServerSideEncryptionRule.__init__(self)
  1176. class ListObjectVersionsResult(RequestResult):
  1177. def __init__(self, resp):
  1178. super(ListObjectVersionsResult, self).__init__(resp)
  1179. #: True表示还有更多的文件可以罗列;False表示已经列举完毕。
  1180. self.is_truncated = False
  1181. #: 本次使用的分页标记符
  1182. self.key_marker = ''
  1183. #: 下一次罗列的分页标记符,即,可以作为 :func:`list_object_versions <oss2.Bucket.list_object_versions>` 的 `key_marker` 参数。
  1184. self.next_key_marker = ''
  1185. #: 本次使用的versionid分页标记符
  1186. self.versionid_marker = ''
  1187. #: 下一次罗列的versionid分页标记符,即,可以作为 :func:`list_object_versions <oss2.Bucket.list_object_versions>` 的 `versionid_marker` 参数。
  1188. self.next_versionid_marker = ''
  1189. self.name = ''
  1190. self.owner = ''
  1191. self.prefix = ''
  1192. self.max_keys = ''
  1193. self.delimiter = ''
  1194. #: 本次罗列得到的delete marker列表。其中元素的类型为 :class:`DeleteMarkerInfo` 。
  1195. self.delete_marker = []
  1196. #: 本次罗列得到的文件version列表。其中元素的类型为 :class:`ObjectVersionInfo` 。
  1197. self.versions = []
  1198. self.common_prefix = []
  1199. class DeleteMarkerInfo(object):
  1200. def __init__(self):
  1201. self.key = ''
  1202. self.versionid = ''
  1203. self.is_latest = False
  1204. self.last_modified = ''
  1205. self.owner = Owner('', '')
  1206. class ObjectVersionInfo(object):
  1207. def __init__(self):
  1208. self.key = ''
  1209. self.versionid = ''
  1210. self.is_latest = False
  1211. self.last_modified = ''
  1212. self.owner = Owner('', '')
  1213. self.type = ''
  1214. self.storage_class = ''
  1215. self.size = ''
  1216. self.etag = ''
  1217. self.restore_info = ''
  1218. BUCKET_VERSIONING_ENABLE = 'Enabled'
  1219. BUCKET_VERSIONING_SUSPEND = 'Suspended'
  1220. class BucketVersioningConfig(object):
  1221. def __init__(self, status=None):
  1222. self.status = status
  1223. class GetBucketVersioningResult(RequestResult, BucketVersioningConfig):
  1224. def __init__(self, resp):
  1225. RequestResult.__init__(self,resp)
  1226. BucketVersioningConfig.__init__(self)
  1227. class GetBucketPolicyResult(RequestResult):
  1228. def __init__(self, resp):
  1229. RequestResult.__init__(self, resp)
  1230. self.policy = to_string(resp.read())
  1231. class GetBucketRequestPaymentResult(RequestResult):
  1232. def __init__(self, resp):
  1233. RequestResult.__init__(self, resp)
  1234. self.payer = ''
  1235. class BucketQosInfo(object):
  1236. """bucket的Qos信息
  1237. :以下参数如果设置为0则表示完全禁止指定类型的访问,如果为-1则表示不单独限制
  1238. :param total_upload_bw: 总上传带宽, 单位Gbps
  1239. :type total_upload_bw: int
  1240. :param intranet_upload_bw: 内网上传带宽, 单位Gbps
  1241. :type intranet_upload_bw: int
  1242. :param extranet_upload_bw: 外网上传带宽, 单位Gbps
  1243. :type extranet_upload_bw: int
  1244. :param total_download_bw: 总下载带宽, 单位Gbps
  1245. :type total_download_bw: int
  1246. :param intranet_download_bw: 内外下载带宽, 单位Gbps
  1247. :type intranet_download_bw: int
  1248. :param extranet_download_bw: 外网下载带宽, 单位Gbps
  1249. :type extranet_download_bw: int
  1250. :param total_qps: 总qps, 单位请求数/s
  1251. :type total_qps: int
  1252. :param intranet_qps: 内网访问qps, 单位请求数/s
  1253. :type intranet_qps: int
  1254. :param extranet_qps: 外网访问qps, 单位请求数/s
  1255. :type extranet_qps: int
  1256. """
  1257. def __init__(self,
  1258. total_upload_bw = None,
  1259. intranet_upload_bw = None,
  1260. extranet_upload_bw = None,
  1261. total_download_bw = None,
  1262. intranet_download_bw = None,
  1263. extranet_download_bw = None,
  1264. total_qps = None,
  1265. intranet_qps = None,
  1266. extranet_qps = None):
  1267. self.total_upload_bw = total_upload_bw
  1268. self.intranet_upload_bw = intranet_upload_bw
  1269. self.extranet_upload_bw = extranet_upload_bw
  1270. self.total_download_bw = total_download_bw
  1271. self.intranet_download_bw = intranet_download_bw
  1272. self.extranet_download_bw = extranet_download_bw
  1273. self.total_qps = total_qps
  1274. self.intranet_qps = intranet_qps
  1275. self.extranet_qps = extranet_qps
  1276. class UserQosInfo(object):
  1277. """User的Qos信息
  1278. :param region: 查询的qos配置生效的区域
  1279. :type region: str
  1280. :以下参数如果为0则表示完全禁止指定类型的访问,如果为-1表示不单独限制
  1281. :param total_upload_bw: 总上传带宽, 单位Gbps
  1282. :type total_upload_bw: int
  1283. :param intranet_upload_bw: 内网上传带宽, 单位:Gbps
  1284. :type intranet_upload_bw: int
  1285. :param extranet_upload_bw: 外网上传带宽, 单位:Gbps
  1286. :type extranet_upload_bw: int
  1287. :param total_download_bw: 总下载带宽, 单位:Gbps
  1288. :type total_download_bw: int
  1289. :param intranet_download_bw: 内外下载带宽, 单位:Gbps
  1290. :type intranet_download_bw: int
  1291. :param extranet_download_bw: 外网下载带宽, 单位:Gbps
  1292. :type extranet_download_bw: int
  1293. :param total_qps: 总qps限制
  1294. :type total_qps: int
  1295. :param intranet_qps: 内网访问qps
  1296. :type intranet_qps: int
  1297. :param extranet_qps: 外网访问qps
  1298. :type extranet_qps: int
  1299. """
  1300. def __init__(self,
  1301. region=None,
  1302. total_upload_bw = None,
  1303. intranet_upload_bw = None,
  1304. extranet_upload_bw = None,
  1305. total_download_bw = None,
  1306. intranet_download_bw = None,
  1307. extranet_download_bw = None,
  1308. total_qps = None,
  1309. intranet_qps = None,
  1310. extranet_qps = None):
  1311. self.region = region
  1312. self.total_upload_bw = total_upload_bw
  1313. self.intranet_upload_bw = intranet_upload_bw
  1314. self.extranet_upload_bw = extranet_upload_bw
  1315. self.total_download_bw = total_download_bw
  1316. self.intranet_download_bw = intranet_download_bw
  1317. self.extranet_download_bw = extranet_download_bw
  1318. self.total_qps = total_qps
  1319. self.intranet_qps = intranet_qps
  1320. self.extranet_qps = extranet_qps
  1321. class GetUserQosInfoResult(RequestResult, UserQosInfo):
  1322. def __init__(self, resp):
  1323. RequestResult.__init__(self, resp)
  1324. UserQosInfo.__init__(self)
  1325. class GetBucketQosInfoResult(RequestResult, BucketQosInfo):
  1326. def __init__(self, resp):
  1327. RequestResult.__init__(self, resp)
  1328. BucketQosInfo.__init__(self)
  1329. class BucketUserQos(object):
  1330. """用户服务质量。
  1331. :param int storage_capacity: 容量大小,单位GB
  1332. """
  1333. def __init__(self, storage_capacity=None):
  1334. self.storage_capacity = storage_capacity
  1335. class GetBucketUserQosResult(RequestResult, BucketUserQos):
  1336. def __init__(self, resp):
  1337. RequestResult.__init__(self, resp)
  1338. BucketUserQos.__init__(self)
  1339. ASYNC_FETCH_TASK_STATE_RUNNING = 'Running'
  1340. ASYNC_FETCH_TASK_STATE_RETRY = 'Retry'
  1341. ASYNC_FETCH_TASK_STATE_FETCH_SUCCESS_CALLBACK_FAILED = 'FetchSuccessCallbackFailed'
  1342. ASYNC_FETCH_TASK_STATE_FAILED= 'Failed'
  1343. ASYNC_FETCH_TASK_STATE_SUCCESS = 'Success'
  1344. class AsyncFetchTaskConfiguration(object):
  1345. """异步获取文件到bucket到任务配置项
  1346. :param url: 源文件url
  1347. :type url: str
  1348. :param object_name: 文件的名称。
  1349. :type task_state: str
  1350. :param host: 文件所在服务器的host,如果不指定则会根据url解析填充。
  1351. :type host: str
  1352. :param content_md5: 指定校验源文件的md5
  1353. :type content_md5: str
  1354. :param callback: 指定fetch成功之后回调给用户的引用服务器,如果不指定则不回调。
  1355. callback格式与OSS上传回调的请求头callback一致,详情见官网。
  1356. :type callback: str
  1357. :param ignore_same_key: 默认为True表示如果文件已存在则忽略本次任务,api调用将会报错。如果为False,则会覆盖已存在的object。
  1358. :type ignore_same_key: bool
  1359. :param callback_when_failed: 失败时是否回调。
  1360. :type callback_when_failed: bool
  1361. """
  1362. def __init__(self,
  1363. url,
  1364. object_name,
  1365. host = None,
  1366. content_md5 = None,
  1367. callback = None,
  1368. ignore_same_key = None,
  1369. callback_when_failed = None):
  1370. self.url = url
  1371. self.object_name = object_name
  1372. self.host = host
  1373. self.content_md5 = content_md5
  1374. self.callback = callback
  1375. self.ignore_same_key = ignore_same_key
  1376. self.callback_when_failed = callback_when_failed
  1377. class PutAsyncFetchTaskResult(RequestResult):
  1378. def __init__(self, resp, task_id=None):
  1379. RequestResult.__init__(self, resp)
  1380. self.task_id = task_id
  1381. class GetAsyncFetchTaskResult(RequestResult):
  1382. """获取异步获取文件到bucket的任务的返回结果
  1383. :param task_id: 任务id
  1384. :type task_id: str
  1385. :param task_state: 取值范围:oss2.models.ASYNC_FETCH_TASK_STATE_RUNNING, oss2.models.ASYNC_FETCH_TASK_STATE_RETRY,
  1386. oss2.models.ASYNC_FETCH_TASK_STATE_FETCH_SUCCESS_CALLBACK_FAILED, oss2.models.ASYNC_FETCH_TASK_STATE_FAILED,
  1387. oss2.models.ASYNC_FETCH_TASK_STATE_SUCCESS。
  1388. :type task_state: str
  1389. :param error_msg: 错误信息
  1390. :type error_msg: str
  1391. :param task_config: 任务配置信息
  1392. :type task_config: class:`AsyncFetchTaskConfiguration <oss2.models.AsyncFetchTaskConfiguration>`
  1393. """
  1394. def __init__(self, resp,
  1395. task_id=None,
  1396. task_state=None,
  1397. error_msg=None,
  1398. task_config=None):
  1399. RequestResult.__init__(self, resp)
  1400. self.task_id = task_id
  1401. self.task_state = task_state
  1402. self.error_msg = error_msg
  1403. self.task_config = task_config
  1404. INVENTORY_INCLUDED_OBJECT_VERSIONS_CURRENT = "Current"
  1405. INVENTORY_INCLUDED_OBJECT_VERSIONS_ALL = "All"
  1406. INVENTORY_FREQUENCY_DAILY = "Daily"
  1407. INVENTORY_FREQUENCY_WEEKLY = "Weekly"
  1408. INVENTORY_FORMAT_CSV = "CSV"
  1409. FIELD_SIZE = "Size"
  1410. FIELD_LAST_MODIFIED_DATE = "LastModifiedDate"
  1411. FIELD_STORAG_CLASS = "StorageClass"
  1412. FIELD_ETAG = "ETag"
  1413. FIELD_IS_MULTIPART_UPLOADED = "IsMultipartUploaded"
  1414. FIELD_ENCRYPTION_STATUS = "EncryptionStatus"
  1415. class InventoryConfiguration(object):
  1416. """清单配置
  1417. :param str inventory_id: 清单的识别id
  1418. :type inventory_id: str
  1419. :param is_enabled: 是否生效
  1420. :type is_enabled: bool
  1421. :param include_object_versions: 包含的对象版本,
  1422. 取值可以是 INVENTORY_INCLUDE_OBJECT_VERSIONS_CURRENT 或者 INVENTORY_INCLUDE_OBJECT_VERSIONS_ALL.
  1423. :type include_object_versions: str
  1424. :param inventory_filter: 清单的过滤器
  1425. :type inventory_filter: class:`InventoryFilter <oss2.models.InventoryFilter>`
  1426. :param inventory_destination: 清单的目标地址
  1427. :type inventory_destination: class:`InventoryDestination <oss2.models.InventoryDestination>`
  1428. :param inventory_schedule: 清单的生成周期
  1429. :type inventory_schedule: class:`InventoryDestination <oss2.models.InventorySchedule>`
  1430. :param optional_fields: 清单中包含的字段
  1431. :type optional_fields: str
  1432. """
  1433. def __init__(self,
  1434. inventory_id=None,
  1435. is_enabled=None,
  1436. included_object_versions=None,
  1437. inventory_filter=None,
  1438. inventory_destination=None,
  1439. inventory_schedule=None,
  1440. optional_fields=None):
  1441. self.inventory_id = inventory_id
  1442. self.is_enabled = is_enabled
  1443. self.included_object_versions = included_object_versions
  1444. self.inventory_filter = inventory_filter
  1445. self.inventory_destination = inventory_destination
  1446. self.inventory_schedule = inventory_schedule
  1447. self.optional_fields = optional_fields or []
  1448. class InventoryFilter(object):
  1449. """清单过滤器
  1450. :param prefix: 清单筛选的前缀, 指定前缀后,清单将筛选出符合前缀设置的对象。
  1451. :type prefix: str
  1452. :param prefix: 筛选数据的起始时间戳。
  1453. :type prefix: int
  1454. :param prefix: 筛选数据的终止时间戳。
  1455. :type prefix: int
  1456. :param prefix: 筛选文件大小的最小大小。
  1457. :type prefix: int
  1458. :param prefix: 筛选文件大小的最大大小。
  1459. :type prefix: int
  1460. :param prefix: 筛选存储类型(支持多选),默认选All。
  1461. :type prefix: str
  1462. """
  1463. def __init__(self, prefix=None, last_modify_begin_time_stamp=None, last_modify_end_time_stamp=None, lower_size_bound=None,
  1464. upper_size_bound=None, storage_class=None):
  1465. self.prefix = prefix
  1466. self.last_modify_begin_time_stamp = last_modify_begin_time_stamp
  1467. self.last_modify_end_time_stamp = last_modify_end_time_stamp
  1468. self.lower_size_bound = lower_size_bound
  1469. self.upper_size_bound = upper_size_bound
  1470. self.storage_class = storage_class
  1471. class InventorySchedule(object):
  1472. """清单的生成周期
  1473. :param frequency: 清单的生成周期,可以是oss2.models.INVENTORY_FREQUENCY_DAILY 或者 oss2.models.INVENTORY_FREQUENCY_WEEKLY
  1474. :type frequency: str
  1475. """
  1476. def __init__(self, frequency):
  1477. self.frequency = frequency
  1478. class InventoryDestination(object):
  1479. """清单的接收目的地址
  1480. :param bucket_destination: OSS Bucket作为目的地,需要配置的OSS Bucket信息。
  1481. :type bucket_destination: class:`InventoryBucketDestination <oss2.models.InventoryBucketDestination>`
  1482. """
  1483. def __init__(self, bucket_destination=None):
  1484. self.bucket_destination = bucket_destination
  1485. class InventoryBucketDestination(object):
  1486. """OSS Bucket作为清单目的地的配置
  1487. :param account_id: 接收方的account id
  1488. :type account_id: class:`InventoryBucketDestination <oss2.models.InventoryBucketDestination>`
  1489. :param role_arn: 接收方的ram role arn
  1490. :type role_arn: str
  1491. :param bucket: OSS Bucket名称
  1492. :type bucket: str
  1493. :param inventory_format: 清单格式,可以是 oss2.models.INVENTORY_FORMAT_CSV。
  1494. :type inventory_format: str
  1495. :param prefix: 清单文件的存储路径前缀
  1496. :type prefix: str
  1497. :param sse_kms_encryption: 服务端使用kms作为清单的加密项
  1498. :type sse_kms_encryption: class:`InventoryServerSideEncryptionKMS <oss2.models.InventoryServerSideEncryptionKMS>`
  1499. :param sse_oss_encryption: OSS服务端为清单提供加密支持。
  1500. :type sse_oss_encryption: class:`InventoryServerSideEncryptionOSS <oss2.models.InventoryServerSideEncryptionOSS>`
  1501. """
  1502. def __init__(self,
  1503. account_id=None,
  1504. role_arn=None,
  1505. bucket=None,
  1506. inventory_format=None,
  1507. prefix=None,
  1508. sse_kms_encryption=None,
  1509. sse_oss_encryption=None):
  1510. if all((sse_kms_encryption, sse_oss_encryption)):
  1511. raise ClientError('only one encryption method between sse_kms_encryption and sse_oss_encryption can be chosen.')
  1512. self.account_id = account_id
  1513. self.role_arn = role_arn
  1514. self.bucket = bucket
  1515. self.inventory_format = inventory_format
  1516. self.prefix = prefix
  1517. self.sse_kms_encryption = sse_kms_encryption
  1518. self.sse_oss_encryption = sse_oss_encryption
  1519. class InventoryServerSideEncryptionKMS(object):
  1520. """服务端使用kms加密清单的加密项。
  1521. :param key_id: kms key id
  1522. :type key_id: str
  1523. """
  1524. def __init__(self, key_id):
  1525. self.key_id = key_id
  1526. class InventoryServerSideEncryptionOSS(object):
  1527. """OSS服务端加密清单的加密项。
  1528. """
  1529. pass
  1530. class GetInventoryConfigurationResult(RequestResult, InventoryConfiguration):
  1531. """获取清单配置的操作返回结果
  1532. """
  1533. def __init__(self, resp):
  1534. RequestResult.__init__(self, resp)
  1535. InventoryConfiguration.__init__(self)
  1536. class ListInventoryConfigurationsResult(RequestResult):
  1537. """列出清单配置的操作返回结果
  1538. :param inventory_configurations: list of class:`InventoryConfiguration <oss2.models.InventoryConfiguration>`
  1539. :type inventory_configurations: list
  1540. :param is_truncated: 罗列结果是否是截断的, true: 本地罗列结果并不完整, False: 所有清单配置项已经罗列完毕。
  1541. :type is_truncated: bool
  1542. :param continuaiton_token: 本地罗列操作所携带的continuaiton_token
  1543. :type continuaiton_token: str
  1544. :param next_continuation_token: 下一个罗列操作携带的token
  1545. :type next_continuation_token: str
  1546. """
  1547. def __init__(self, resp):
  1548. RequestResult.__init__(self, resp)
  1549. self.inventory_configurations= []
  1550. self.is_truncated = None
  1551. self.continuaiton_token = None
  1552. self.next_continuation_token = None
  1553. RESTORE_TIER_EXPEDITED = 'Expedited'
  1554. RESTORE_TIER_STANDARD = 'Standard'
  1555. RESTORE_TIER_BULK = 'Bulk'
  1556. class ResotreJobParameters(object):
  1557. """冷归档类型(ColdArchive)文件的解冻优先级配置。
  1558. 请使用class:`RestoreJobParameters <oss2.models.RestoreJobParameters>`代替此类。
  1559. :param tier: 解冻优先级, 取值范围:
  1560. oss2.models.RESTORE_TIER_EXPEDITED: 1个小时之内解冻完成。
  1561. oss2.models.RESTORE_TIER_STANDARD: 5小时之内解冻完成。
  1562. oss2.models.RESTORE_TIER_BULK: 10小时之内解冻完成。
  1563. :type tier: str
  1564. """
  1565. def __init__(self, tier):
  1566. self.tier = tier
  1567. class RestoreJobParameters(object):
  1568. """冷归档类型(ColdArchive)文件的解冻优先级配置。
  1569. :param tier: 解冻优先级, 取值范围:
  1570. oss2.models.RESTORE_TIER_EXPEDITED: 1个小时之内解冻完成。
  1571. oss2.models.RESTORE_TIER_STANDARD: 5小时之内解冻完成。
  1572. oss2.models.RESTORE_TIER_BULK: 10小时之内解冻完成。
  1573. :type tier: str
  1574. """
  1575. def __init__(self, tier):
  1576. self.tier = tier
  1577. class RestoreConfiguration(object):
  1578. """Archive, ColdArchive类型文件的解冻配置
  1579. :param days: 解冻之后保持解冻状态的天数。
  1580. :type days: int
  1581. :param job_parameters: 解冻优先级配置, 解冻冷归档(ColdArchive)类型的文件才需要此配置。如果不配置此项,
  1582. 解冻优先级默认为 oss2.models.RESTORE_TIER_STANDARD: 5小时之内解冻完成。
  1583. :type job_parameters: class:`RestoreJobParameters <oss2.models.RestoreJobParameters>`
  1584. """
  1585. def __init__(self, days, job_parameters=None):
  1586. self.days = days
  1587. self.job_parameters = job_parameters
  1588. class InitBucketWormResult(RequestResult):
  1589. """创建合规保留策略的返回结果
  1590. :param str worm_id: 合规保留策略的id
  1591. """
  1592. def __init__(self, resp):
  1593. super(InitBucketWormResult, self).__init__(resp)
  1594. self.worm_id = None
  1595. class GetBucketWormResult(RequestResult):
  1596. """获取合规保留策略的返回结果
  1597. :param str worm_id: 合规保留策略的id
  1598. """
  1599. def __init__(self, resp):
  1600. super(GetBucketWormResult, self).__init__(resp)
  1601. # 合规保留策略的id
  1602. self.worm_id = None
  1603. # 合规保留策略的状态
  1604. self.worm_state = None
  1605. # object的保留天数
  1606. self.retention_period_days = None
  1607. # 合规保留策略的创建日期
  1608. self.creation_date = None
  1609. class ReplicationRule(object):
  1610. """创建Bucket指定跨区域复制规则
  1611. :param str rule_id: 规则ID。
  1612. :param str target_bucket_name: 目的地Bucket名称。
  1613. :param str target_bucket_location: 目的地Bucket所处地域。
  1614. :param str target_transfer_type: 跨区域复制时使用的数据链路。
  1615. :param list prefix_list: 待复制Object的前缀,只有匹配该前缀的Object才会被复制。
  1616. :param list action_list: 新写入的数据与历史数据需要遵循的Action类型, 其中"ALL" 表示"PUT", "ABORT"与"DELETE"操作。
  1617. 均会被同步到Bucket,"PUT"表示同步到目标Bucket的写入操作。
  1618. :param bool is_enable_historical_object_replication: 指定是否复制历史数据。
  1619. :param str sync_role_name: 授权OSS使用哪个角色来进行数据复制。如果指定使用SSE-KMS加密目标对象,则必须指定sync_role。
  1620. :param str replica_kms_keyid: 指定SSE-KMS密钥ID。
  1621. :param str sse_kms_encrypted_objects_status: 指定OSS是否复制通过SSE-KMS加密创建的对象。
  1622. 取值范围[ReplicationRule.ENABLED, ReplicationRule.DISABLED]。
  1623. :param str status: 复制状态,由服务端赋值,可能为:starting, doing 或closing。
  1624. :param str target_cloud: 目标云名称
  1625. :param str target_cloud_location: 目标云内目标Bucket所处的Location
  1626. """
  1627. ENABLED = 'Enabled'
  1628. DISABLED = 'Disabled'
  1629. ALL = 'ALL'
  1630. PUT = 'PUT'
  1631. DELETE = 'DELETE'
  1632. ABORT = 'ABORT'
  1633. STARTING = 'starting'
  1634. DOING = 'doing'
  1635. CLOSING = 'closing'
  1636. def __init__(self,
  1637. rule_id=None,
  1638. target_bucket_name=None,
  1639. target_bucket_location=None,
  1640. target_transfer_type=None,
  1641. prefix_list=None,
  1642. action_list=None,
  1643. is_enable_historical_object_replication=None,
  1644. sync_role_name=None,
  1645. replica_kms_keyid=None,
  1646. sse_kms_encrypted_objects_status=None,
  1647. status=None,
  1648. target_cloud=None,
  1649. target_cloud_location=None):
  1650. self.rule_id = rule_id
  1651. self.target_bucket_name = target_bucket_name
  1652. self.target_bucket_location = target_bucket_location
  1653. self.target_transfer_type = target_transfer_type
  1654. self.prefix_list = prefix_list or []
  1655. self.action_list = action_list or []
  1656. if is_enable_historical_object_replication is not None and not isinstance(is_enable_historical_object_replication, bool):
  1657. raise ClientError('is_enable_historical_object_replication should be instance of bool.')
  1658. self.is_enable_historical_object_replication = is_enable_historical_object_replication
  1659. self.sync_role_name = sync_role_name
  1660. self.replica_kms_keyid = replica_kms_keyid
  1661. if sse_kms_encrypted_objects_status is not None and sse_kms_encrypted_objects_status not in [self.ENABLED, self.DISABLED]:
  1662. raise ClientError('sse_kms_encrypted_objects_status should be "Enabled" or "Disabled".')
  1663. self.sse_kms_encrypted_objects_status = sse_kms_encrypted_objects_status
  1664. self.status = status
  1665. self.target_cloud = target_cloud
  1666. self.target_cloud_location = target_cloud_location
  1667. class BucketReplicationProgress(object):
  1668. """Bucket跨区域复制进度
  1669. :param str rule_id: 规则ID。
  1670. :param str target_bucket_name: 目的地Bucket名称。
  1671. :param str target_bucket_location: 目的地Bucket所处地域。
  1672. :param str target_transfer_type: 跨区域复制时使用的数据链路。
  1673. :param list prefix_list: 待复制Object的前缀,只有匹配该前缀的Object才会被复制。
  1674. :param list action_list: 新写入的数据与历史数据需要遵循的Action类型, 其中"ALL" 表示"PUT", "ABORT"与"DELETE"操作。
  1675. 均会被同步到Bucket,"PUT"表示同步到目标Bucket的写入操作。
  1676. :param bool is_enable_historical_object_replication: 指定是否复制历史数据。
  1677. :param str status: 复制状态,可能为starting, doing 或closing。
  1678. :param float historical_object_progress: 已复制历史数据的百分比。
  1679. :param str new_object_progress: 数据复制到目标Bucket的时间点。
  1680. 例如Thu, 24 Sep 2015 15:39:18 GMT,表示早于这个时间点写入的数据都已复制到目标Bucket。
  1681. """
  1682. def __init__(self,
  1683. rule_id=None,
  1684. target_bucket_name=None,
  1685. target_bucket_location=None,
  1686. target_transfer_type=None,
  1687. prefix_list=None,
  1688. action_list=None,
  1689. is_enable_historical_object_replication=None,
  1690. status=None,
  1691. historical_object_progress=None,
  1692. new_object_progress=None):
  1693. self.rule_id = rule_id
  1694. self.target_bucket_name = target_bucket_name
  1695. self.target_bucket_location = target_bucket_location
  1696. self.target_transfer_type = target_transfer_type
  1697. self.prefix_list = prefix_list or []
  1698. self.action_list = action_list or []
  1699. self.is_enable_historical_object_replication = is_enable_historical_object_replication
  1700. self.status = status
  1701. self.historical_object_progress = historical_object_progress or 0
  1702. self.new_object_progress = new_object_progress
  1703. class LocationTransferType(object):
  1704. """包含TransferType到Location信息
  1705. :param str location: 可复制到的目标Bucket所在的地域。
  1706. :param str transfer_type: 跨区域复制时使用的数据传输类型。
  1707. """
  1708. def __init__(self):
  1709. self.location = None
  1710. self.transfer_type = None
  1711. class GetBucketReplicationResult(RequestResult):
  1712. """获取Bucket跨区域复制规则的结果
  1713. :param rule_list: Bucket跨区域复制到规则集合,目前只允许配置一条规则,所以返回list大小最多为1。
  1714. :type rule_list: list, 元素类型为class:`ReplicationRule <oss2.models.ReplicationRule>`。
  1715. """
  1716. def __init__(self, resp):
  1717. super(GetBucketReplicationResult, self).__init__(resp)
  1718. self.rule_list = []
  1719. class GetBucketReplicationLocationResult(RequestResult):
  1720. """获取可复制到的目标存储空间(Bucket)所在的地域信息
  1721. :param location_list: 可复制到的目标Bucket所在的地域集合
  1722. :type location_list: list, 元素类型为str, 比如'oss-cn-beijing'
  1723. :param location_transfer_type_list: 包含TransferType到Location信息列表。
  1724. :type location_transfer_type_list: list, 元素类型为:class:`LocationTransferType <oss2.models.LocationTransferType>`。
  1725. """
  1726. def __init__(self, resp):
  1727. super(GetBucketReplicationLocationResult, self).__init__(resp)
  1728. self.location_list = []
  1729. self.location_transfer_type_list = []
  1730. class GetBucketReplicationProgressResult(RequestResult):
  1731. """获取某个存储空间(Bucket)的跨区域复制进度结果。
  1732. :param progress: Bucket跨区域复制进度
  1733. :type progress: class:`BucketReplicationProgress <oss2.models.BucketReplicationProgress>`。
  1734. """
  1735. def __init__(self, resp):
  1736. super(GetBucketReplicationProgressResult, self).__init__(resp)
  1737. self.progress = None
  1738. class GetBucketTransferAccelerationResult(RequestResult):
  1739. """获取目标存储空间(Bucket)的传输加速配置。
  1740. :param enabled: Bucket传输加速状态
  1741. :type progress: class:`GetBucketTransferAccelerationResult <oss2.models.GetBucketTransferAccelerationResult>`。
  1742. """
  1743. def __init__(self, resp):
  1744. super(GetBucketTransferAccelerationResult, self).__init__(resp)
  1745. self.enabled = None
  1746. class CreateBucketCnameTokenResult(RequestResult):
  1747. """创建域名所有权验证所需的CnameToken。
  1748. :param str bucket: 绑定Cname的Bucket名称。
  1749. :param str cname: 绑定的Cname名称。
  1750. :param str token: OSS返回的CnameToken。
  1751. :param str expire_time: CnameToken的有效时间。
  1752. """
  1753. def __init__(self, resp):
  1754. super(CreateBucketCnameTokenResult, self).__init__(resp)
  1755. self.bucket = None
  1756. self.cname = None
  1757. self.token = None
  1758. self.expire_time = None
  1759. class GetBucketCnameTokenResult(RequestResult):
  1760. """获取已创建的CnameToken。
  1761. :param str bucket: 绑定Cname的Bucket名称。
  1762. :param str cname: 绑定的Cname名称。
  1763. :param str token: OSS返回的CnameToken。
  1764. :param str expire_time: CnameToken的有效时间。
  1765. """
  1766. def __init__(self, resp):
  1767. super(GetBucketCnameTokenResult, self).__init__(resp)
  1768. self.bucket = None
  1769. self.cname = None
  1770. self.token = None
  1771. self.expire_time = None
  1772. class ListBucketCnameResult(RequestResult):
  1773. """查询某个存储空间(Bucket)下绑定的所有Cname列表。
  1774. :param str bucket: 已绑定Cname列表的Bucket名称。
  1775. :param str owner: Bucket Owner名称。
  1776. :param str cname: Cname信息列表的容器。元素类型为:class:`CnameInfo <oss2.models.CnameInfo>`。
  1777. """
  1778. def __init__(self, resp):
  1779. super(ListBucketCnameResult, self).__init__(resp)
  1780. self.bucket = None
  1781. self.owner = None
  1782. self.cname = []
  1783. class CnameInfo(RequestResult):
  1784. """Cname信息列表。
  1785. :param str domain: 自定义域名。
  1786. :param str last_modified: 绑定自定义域名的时间
  1787. :param str status: 域名所处状态。
  1788. :param class certificate: 证书信息的容器。元素类型为:class:`CertificateInfo <oss2.models.CertificateInfo>`。
  1789. """
  1790. def __init__(self):
  1791. self.domain = None
  1792. self.last_modified = None
  1793. self.status = None
  1794. self.is_purge_cdn_cache = None
  1795. self.certificate = None
  1796. class CertificateInfo(object):
  1797. """证书信息。
  1798. :param str type: 证书来源。
  1799. :param str cert_id: 证书ID。
  1800. :param str status: 证书状态。
  1801. :param str creation_date: 证书绑定时间。
  1802. :param str fingerprint: 证书签名。
  1803. :param str valid_start_date: 证书有效期起始时间。
  1804. :param str valid_end_date: 证书有效期终止时间。
  1805. """
  1806. def __init__(self):
  1807. self.type = None
  1808. self.cert_id = None
  1809. self.status = None
  1810. self.creation_date = None
  1811. self.fingerprint = None
  1812. self.valid_start_date = None
  1813. self.valid_end_date = None
  1814. class PutBucketCnameRequest(object):
  1815. """绑定证书请求。
  1816. :param str domain: 自定义域名。
  1817. :param class cert: 证书。元素类型为:class:`CertInfo <oss2.models.CertInfo>`。
  1818. """
  1819. def __init__(self, domain, cert=None):
  1820. self.domain = domain
  1821. self.cert = cert
  1822. class CertInfo(RequestResult):
  1823. """绑定证书信息请求参数。
  1824. :param str cert_id: 证书ID。
  1825. :param str certificate: 证书公钥。
  1826. :param str private_key: 证书私钥。
  1827. :param str previous_cert_id: 当前证书ID。
  1828. :param bool force: 是否强制覆盖证书
  1829. :param bool delete_certificate: 是否删除证书。
  1830. """
  1831. def __init__(self, cert_id=None, certificate=None, private_key=None, previous_cert_id=None, force=None,
  1832. delete_certificate=None):
  1833. self.cert_id = cert_id
  1834. self.certificate = certificate
  1835. self.private_key = private_key
  1836. self.previous_cert_id = previous_cert_id
  1837. self.force = force
  1838. self.delete_certificate = delete_certificate
  1839. class MetaQuery(object):
  1840. """元数据索引库信息查询信息设置
  1841. :param str next_token: 当Object总数大于设置的MaxResults时,用于翻页的token。
  1842. :param str max_results: 返回Object的最大个数,取值范围为0~200。不设置此参数或者设置为0时,则默认值为100。
  1843. :param str query: 查询条件。
  1844. :param str sort: 对指定字段排序。
  1845. :param str order: 排序方式。asc(默认):升序; desc:降序。
  1846. :param list aggregations: 聚合操作信息的容器。元素类型为:class:`AggregationsRequest <oss2.models.AggregationsRequest>`。
  1847. """
  1848. def __init__(self,
  1849. next_token=None,
  1850. max_results=None,
  1851. query=None,
  1852. sort=None,
  1853. order=None,
  1854. aggregations=None):
  1855. self.next_token = next_token
  1856. self.max_results = str(max_results)
  1857. self.query = query
  1858. self.sort = sort
  1859. self.order = order
  1860. self.aggregations = aggregations or []
  1861. class AggregationsRequest(object):
  1862. """聚合操作信息的容器。
  1863. :param str field: 字段名称。
  1864. :param str operation: 聚合操作中的操作符。
  1865. """
  1866. def __init__(self,
  1867. field=None,
  1868. operation=None):
  1869. self.field = field
  1870. self.operation = operation
  1871. class GetBucketMetaQueryResult(RequestResult):
  1872. """获取指定存储空间(Bucket)的元数据索引库信息。
  1873. :param str state: 元数据索引库的状态。
  1874. :param str phase: 当前扫描类型。
  1875. :param str create_time: 元数据索引库的创建时间,遵循RFC 3339标准格式,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE。
  1876. :param str update_time: 元数据索引库的更新时间,遵循RFC 3339标准格式,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE。
  1877. """
  1878. def __init__(self, resp):
  1879. super(GetBucketMetaQueryResult, self).__init__(resp)
  1880. self.state = None
  1881. self.phase = None
  1882. self.create_time = None
  1883. self.update_time = None
  1884. class DoBucketMetaQueryResult(RequestResult):
  1885. """查询满足指定条件的文件(Object),并按照指定字段和排序方式列出文件信息。
  1886. :param str next_token: Object完整路径。
  1887. :param list files: Object信息的容器。元素类型为:class:`MetaQueryFile <oss2.models.MetaQueryFile>`。
  1888. :param list aggregations: 聚合操作信息的容器。元素类型为:class:`AggregationsInfo <oss2.models.AggregationsInfo>`。
  1889. """
  1890. def __init__(self, resp):
  1891. super(DoBucketMetaQueryResult, self).__init__(resp)
  1892. self.next_token = None
  1893. self.files = []
  1894. self.aggregations = []
  1895. class MetaQueryFile(object):
  1896. """Object信息的容器。
  1897. :param str file_name: Object完整路径。
  1898. :param int size: Object大小。单位为字节。
  1899. :param str file_modified_time: Object的最近一次修改时间,遵循RFC 3339标准格式,格式为YYYY-MM-DDTHH:mm:ss.ms+TIMEZONE。
  1900. :param str file_create_time: Object的创建时间,遵循RFC 3339标准格式,格式为YYYY-MM-DDTHH:mm:ss.ms+TIMEZONE。
  1901. :param str file_access_time: Object的智能分层时间,遵循RFC 3339标准格式,格式为YYYY-MM-DDTHH:mm:ss.ms+TIMEZONE。
  1902. :param str oss_object_type: Object的类型。
  1903. :param str oss_storage_class: Object的存储类型。
  1904. :param str object_acl: Object的访问权限。
  1905. :param str etag: Object生成时会创建相应的ETag ,ETag用于标识一个Object的内容。
  1906. :param str oss_crc64: Object的64位CRC值。该64位CRC根据ECMA-182标准计算得出。
  1907. :param int oss_tagging_count: Object的标签个数。
  1908. :param list oss_tagging: 标签信息的容器。元素类型为:class:`OSSTaggingInfo <oss2.models.OSSTaggingInfo>`。
  1909. :param list oss_user_meta: 用户自定义元数据的容器。元素类型为:class:`OSSUserMetaInfo <oss2.models.OSSUserMetaInfo>`。
  1910. """
  1911. def __init__(self):
  1912. self.file_name = None
  1913. self.size = None
  1914. self.file_modified_time = None
  1915. self.file_create_time = None
  1916. self.file_access_time = None
  1917. self.oss_object_type = None
  1918. self.oss_storage_class = None
  1919. self.object_acl = None
  1920. self.etag = None
  1921. self.oss_crc64 = None
  1922. self.oss_tagging_count = None
  1923. self.oss_tagging = []
  1924. self.oss_user_meta = []
  1925. class AggregationsInfo(object):
  1926. """聚合操作信息的容器。
  1927. :param str field: 字段名称。
  1928. :param str operation: 聚合操作中的操作符。
  1929. :param float value: 聚合操作的结果值。
  1930. :param list groups: 分组聚合的结果列表。元素类型为:class:`AggregationGroupInfo <oss2.models.AggregationGroupInfo>`。
  1931. """
  1932. def __init__(self):
  1933. self.field = None
  1934. self.operation = None
  1935. self.value = None
  1936. self.groups = []
  1937. class OSSTaggingInfo(object):
  1938. """标签信息的容器。
  1939. :param key: 标签或者用户自定义元数据的Key。
  1940. :type key: str
  1941. :param value: 标签或者用户自定义元数据的Value。
  1942. :type value: str
  1943. """
  1944. def __init__(self, key, value):
  1945. self.key = key
  1946. self.value = value
  1947. class OSSUserMetaInfo(object):
  1948. """用户自定义元数据的容器。
  1949. :param key: 用户自定义元数据的 key。
  1950. :type key: str
  1951. :param value: 用户自定义元数据的 value。
  1952. :type value: str
  1953. """
  1954. def __init__(self, key, value):
  1955. self.key = key
  1956. self.value = value
  1957. class AggregationGroupInfo(object):
  1958. """分组聚合的结果列表。
  1959. :param value: 分组聚合的值。
  1960. :type value: str
  1961. :param count: 分组聚合的总个数。
  1962. :type count: int
  1963. """
  1964. def __init__(self, value, count):
  1965. self.value = value
  1966. self.count = count
  1967. class GetBucketAccessMonitorResult(RequestResult):
  1968. """获取目标存储空间(Bucket)的访问跟踪状态。
  1969. :param class access_monitor: Bucket访问跟踪状态容器. 元素类型为:class:`AccessMonitorInfo <oss2.models.AccessMonitorInfo>`。
  1970. """
  1971. def __init__(self, resp):
  1972. super(GetBucketAccessMonitorResult, self).__init__(resp)
  1973. self.access_monitor = None
  1974. class AccessMonitorInfo(object):
  1975. """获取目标存储空间(Bucket)的访问跟踪状态。
  1976. :param str status: Bucket访问跟踪状态.
  1977. """
  1978. def __init__(self, status):
  1979. self.status = status
  1980. class LifecycleFilter(object):
  1981. """规则的条件参数容器。
  1982. :param list filter_not: 规则的匹配容器。 元素类型为:class:`FilterNot <oss2.models.FilterNot>`。
  1983. :param int object_size_greater_than: object大小大于.
  1984. :param int object_size_less_than: object大小小于.
  1985. """
  1986. def __init__(self, filter_not=None, object_size_greater_than=None, object_size_less_than=None):
  1987. self.filter_not = filter_not or []
  1988. self.object_size_greater_than = object_size_greater_than
  1989. self.object_size_less_than = object_size_less_than
  1990. class FilterNot(object):
  1991. """规则的匹配容器。
  1992. :param str prefix: 排除规则所适用的前缀。
  1993. :param class tag: 排除规则所适用的对象标签。元素类型为:class:`FilterNotTag <oss2.models.FilterNotTag>`。
  1994. """
  1995. def __init__(self, prefix=None, tag=None):
  1996. self.prefix = prefix
  1997. self.tag = tag
  1998. class FilterNotTag(object):
  1999. """对象标签。
  2000. :param str key: 标签key。
  2001. :param str value: 标签value。
  2002. """
  2003. def __init__(self, key=None, value=None):
  2004. self.key = key
  2005. self.value = value
  2006. class GetBucketResourceGroupResult(RequestResult):
  2007. """显示资源组ID的容器。
  2008. :param resource_group_id: Bucket所属的资源组ID
  2009. :type progress: class:`GetBucketResourceGroupResult <oss2.models.GetBucketResourceGroupResult>`。
  2010. """
  2011. def __init__(self, resp):
  2012. super(GetBucketResourceGroupResult, self).__init__(resp)
  2013. self.resource_group_id = None
  2014. class GetBucketStyleResult(RequestResult):
  2015. """获取图片样式内容的容器。
  2016. :param name: 图片样式名称。
  2017. :param content: 图片样式内容。
  2018. :param create_time: 图片样式创建时间。
  2019. :param last_modify_time: 图片样式修改时间。
  2020. :type progress: class:`GetBucketStyleResult <oss2.models.GetBucketStyleResult>`。
  2021. """
  2022. def __init__(self, resp):
  2023. super(GetBucketStyleResult, self).__init__(resp)
  2024. self.name = None
  2025. self.content = None
  2026. self.create_time = None
  2027. self.last_modify_time = None
  2028. class BucketStyleInfo(RequestResult):
  2029. """图片样式内容的容器。
  2030. :param name: 图片样式名称。
  2031. :param content: 图片样式内容。
  2032. :param create_time: 图片样式创建时间。
  2033. :param last_modify_time: 图片样式修改时间。
  2034. :type progress: class:`BucketStyleInfo <oss2.models.BucketStyleInfo>`。
  2035. """
  2036. def __init__(self, name=None, content=None, create_time=None, last_modify_time=None):
  2037. self.name = name
  2038. self.content = content
  2039. self.create_time = create_time
  2040. self.last_modify_time = last_modify_time
  2041. class ListBucketStyleResult(RequestResult):
  2042. """查询图片样式信息列表的容器。
  2043. :param str styles: 图片样式内容的容器。元素类型为:class:`BucketStyleInfo <oss2.models.BucketStyleInfo>`。
  2044. """
  2045. def __init__(self, resp):
  2046. super(ListBucketStyleResult, self).__init__(resp)
  2047. self.styles = []
  2048. class RegionInfo(RequestResult):
  2049. """地域信息。
  2050. :param region: 地域ID。
  2051. :param internet_endpoint: 地域对应的外网Endpoint。
  2052. :param internal_endpoint: 地域对应的内网Endpoint。
  2053. :param accelerate_endpoint: 地域对应的传输加速Endpoint。取值固定为oss-accelerate.aliyuncs.com。
  2054. """
  2055. def __init__(self, region=None, internet_endpoint=None, internal_endpoint=None, accelerate_endpoint=None):
  2056. self.region = region
  2057. self.internet_endpoint = internet_endpoint
  2058. self.internal_endpoint = internal_endpoint
  2059. self.accelerate_endpoint = accelerate_endpoint
  2060. class DescribeRegionsResult(RequestResult):
  2061. """地域信息列表。
  2062. :param list regions: 地域信息列表。元素类型为:class:`RegionInfo <oss2.models.RegionInfo>`。
  2063. """
  2064. def __init__(self, resp):
  2065. super(DescribeRegionsResult, self).__init__(resp)
  2066. self.regions = []
  2067. class AsyncProcessObject(RequestResult):
  2068. """异步多媒体处理返回信息。
  2069. :param str event_id: 事件id。
  2070. :param str async_request_id: 请求id。
  2071. :param str task_id: 任务id。
  2072. """
  2073. def __init__(self, resp):
  2074. super(AsyncProcessObject, self).__init__(resp)
  2075. self.event_id = None
  2076. self.async_request_id = None
  2077. self.task_id = None
  2078. class CallbackPolicyInfo(RequestResult):
  2079. """回调policy信息。
  2080. :param policy_name: policy名称。
  2081. :param callback: 回调参数。
  2082. :param callback_var: 自定义回调参数。
  2083. """
  2084. def __init__(self, policy_name=None, callback=None, callback_var=None):
  2085. self.policy_name = policy_name
  2086. self.callback = callback
  2087. self.callback_var = callback_var
  2088. class CallbackPolicy(object):
  2089. """设置回调policy请求。
  2090. :param list callback_policies: 回调策略集合。 元素类型为:class:`<oss2.models.CallbackPolicyInfo>`。
  2091. """
  2092. def __init__(self, callback_policies=None):
  2093. self.callback_policies = callback_policies or []
  2094. class CallbackPolicyResult(RequestResult):
  2095. """返回回调policy。
  2096. :param list callback_policies: 回调策略集合。元素类型为:class:`<oss2.models.CallbackPolicyInfo>`。
  2097. """
  2098. def __init__(self, resp):
  2099. super(CallbackPolicyResult, self).__init__(resp)
  2100. self.callback_policies = []
  2101. class GetBucketArchiveDirectReadResult(RequestResult):
  2102. """获取归档直读。
  2103. :param bool enabled: Bucket是否开启归档直读
  2104. """
  2105. def __init__(self, resp):
  2106. super(GetBucketArchiveDirectReadResult, self).__init__(resp)
  2107. self.enabled = None
  2108. class BucketTlsVersion(object):
  2109. """BucketTLS版本设置。
  2110. :param bool tls_enabled: 是否为Bucket开启TLS版本设置。
  2111. :param tls_version: TLS版本。
  2112. """
  2113. def __init__(self, tls_enabled=False, tls_version=None):
  2114. self.tls_enabled = tls_enabled
  2115. self.tls_version = tls_version
  2116. class HttpsConfigResult(RequestResult):
  2117. """返回Bucket TLS版本信息。
  2118. :param bool tls_enabled: bucket是否开启TLS版本设置。
  2119. :param tls_version: TLS版本。
  2120. """
  2121. def __init__(self, resp):
  2122. super(HttpsConfigResult, self).__init__(resp)
  2123. self.tls_enabled = None
  2124. self.tls_version = []
  2125. class DataRedundancyTransitionInfo(RequestResult):
  2126. """冗余转换任务信息。
  2127. :param str bucket: 存储桶名称。
  2128. :param str task_id: 存储冗余转换任务的ID。
  2129. :param str create_time: 存储冗余转换任务的创建时间。
  2130. :param str start_time: 存储冗余转换任务的开始时间。任务处于Processing、Finished状态时,有该字段。
  2131. :param str end_time: 存储冗余转换任务的结束时间。任务处于Finished状态时,有该字段。
  2132. :param str transition_status: 存储冗余转换任务的状态。
  2133. :param int estimated_remaining_time: 存储冗余转换任务的预计剩余耗时。单位为小时。任务处于Processing、Finished状态时,有该字段。
  2134. :param int process_percentage: 存储冗余转换任务的进度百分比。取值范围:0-100。任务处于Processing、Finished状态时,有该字段。
  2135. """
  2136. def __init__(self, bucket=None, task_id=None, create_time=None, start_time=None, end_time=None, transition_status=None, estimated_remaining_time=None, process_percentage=None):
  2137. self.bucket = bucket
  2138. self.task_id = task_id
  2139. self.create_time = create_time
  2140. self.start_time = start_time
  2141. self.end_time = end_time
  2142. self.transition_status = transition_status
  2143. self.estimated_remaining_time = estimated_remaining_time
  2144. self.process_percentage = process_percentage
  2145. class DataRedundancyTransitionInfoResult(RequestResult):
  2146. """冗余转换任务信息。
  2147. :param str bucket: 存储桶名称。
  2148. :param str task_id: 存储冗余转换任务的ID。
  2149. :param str create_time: 存储冗余转换任务的创建时间。
  2150. :param str start_time: 存储冗余转换任务的开始时间。任务处于Processing、Finished状态时,有该字段。
  2151. :param str end_time: 存储冗余转换任务的结束时间。任务处于Finished状态时,有该字段。
  2152. :param str transition_status: 存储冗余转换任务的状态。
  2153. :param int estimated_remaining_time: 存储冗余转换任务的预计剩余耗时。单位为小时。任务处于Processing、Finished状态时,有该字段。
  2154. :param int process_percentage: 存储冗余转换任务的进度百分比。取值范围:0-100。任务处于Processing、Finished状态时,有该字段。
  2155. """
  2156. def __init__(self, resp):
  2157. super(DataRedundancyTransitionInfoResult, self).__init__(resp)
  2158. self.bucket = None
  2159. self.task_id = None
  2160. self.create_time = None
  2161. self.start_time = None
  2162. self.end_time = None
  2163. self.transition_status = None
  2164. self.estimated_remaining_time = None
  2165. self.process_percentage = None
  2166. class CreateDataRedundancyTransitionResult(RequestResult):
  2167. """存储冗余转换任务的容器。
  2168. :param str task_id: 存储冗余转换任务的ID
  2169. """
  2170. def __init__(self, resp):
  2171. super(CreateDataRedundancyTransitionResult, self).__init__(resp)
  2172. self.task_id = None
  2173. class ListUserDataRedundancyTransitionResult(RequestResult):
  2174. """某个Bucket下所有的存储冗余转换任务。
  2175. :param bool is_truncated: 罗列结果是否是截断的, true: 本地罗列结果并不完整, False: 所有清单配置项已经罗列完毕。
  2176. :param str next_continuation_token: 下一个罗列操作携带的token
  2177. :param list data_redundancy_transition: 冗余转换任务信息列表。元素类型为:class:`DataRedundancyTransitionInfo <oss2.models.DataRedundancyTransitionInfo>`。
  2178. """
  2179. def __init__(self, resp):
  2180. super(ListUserDataRedundancyTransitionResult, self).__init__(resp)
  2181. self.is_truncated = None
  2182. self.next_continuation_token = None
  2183. self.data_redundancy_transitions = []
  2184. class ListBucketDataRedundancyTransitionResult(RequestResult):
  2185. """某个Bucket下所有的存储冗余转换任务。
  2186. :param list data_redundancy_transition: 冗余转换任务信息列表。元素类型为:class:`DataRedundancyTransitionInfo <oss2.models.DataRedundancyTransitionInfo>`。
  2187. """
  2188. def __init__(self, resp):
  2189. super(ListBucketDataRedundancyTransitionResult, self).__init__(resp)
  2190. self.data_redundancy_transitions = []
  2191. class CreateAccessPointRequest(RequestResult):
  2192. """创建接入点请求信息。
  2193. :param str access_point_name: 接入点名称。
  2194. :param str network_origin: 网络类型。
  2195. :param class vpc: vpc信息。元素类型为:class:`<oss2.models.AccessPointVpcConfiguration>`。
  2196. """
  2197. def __init__(self, access_point_name=None, network_origin=None, vpc=None):
  2198. self.access_point_name = access_point_name
  2199. self.network_origin = network_origin
  2200. self.vpc = vpc
  2201. class CreateAccessPointResult(RequestResult):
  2202. """创建接入点返回信息。
  2203. :param str access_point_arn: 接入点arn。
  2204. :param str alias: 别名。
  2205. """
  2206. def __init__(self, resp):
  2207. super(CreateAccessPointResult, self).__init__(resp)
  2208. self.access_point_arn = None
  2209. self.alias = None
  2210. class AccessPointVpcConfiguration(RequestResult):
  2211. """vpc信息。
  2212. :param str vpc_id: vpc网络id。
  2213. """
  2214. def __init__(self, vpc_id=None):
  2215. self.vpc_id = vpc_id
  2216. class PublicAccessBlockConfiguration(RequestResult):
  2217. """保存阻止公共访问信息。
  2218. :param bool block_public_access: 获取接入点的阻止公共访问配置信息。
  2219. """
  2220. def __init__(self, block_public_access=None):
  2221. self.block_public_access = block_public_access
  2222. class GetAccessPointResult(RequestResult):
  2223. """获取接入点返回信息。
  2224. :param str access_point_name: 接入点名称。
  2225. :param str bucket: bucket名称。
  2226. :param str account_id: 账户id。
  2227. :param str network_origin: 网络类型。
  2228. :param class vpc: vpc信息。元素类型为:class:`<oss2.models.AccessPointVpcConfiguration>`。
  2229. :param str access_point_arn: 接入点arn。
  2230. :param str creation_date: 创建日期。
  2231. :param str alias: 别名。
  2232. :param str access_point_status: 状态。
  2233. :param class endpoints: 接入点endpoint。元素类型为:class:`<oss2.models.AccessPointEndpoints>`。
  2234. :param class public_access_block_configuration: 获取接入点的阻止公共访问配置。元素类型为:class:`<oss2.models.PublicAccessBlockConfiguration>`。
  2235. """
  2236. def __init__(self, resp):
  2237. super(GetAccessPointResult, self).__init__(resp)
  2238. self.access_point_name = None
  2239. self.bucket = None
  2240. self.account_id = None
  2241. self.network_origin = None
  2242. self.vpc = None
  2243. self.access_point_arn = None
  2244. self.creation_date = None
  2245. self.alias = None
  2246. self.access_point_status = None
  2247. self.endpoints = None
  2248. self.public_access_block_configuration = None
  2249. class AccessPointEndpoints(RequestResult):
  2250. """接入点endpoint信息。
  2251. :param str public_endpoint: 公共endpoint。
  2252. :param str internal_endpoint: 内部endpoint。
  2253. """
  2254. def __init__(self, public_endpoint=None, internal_endpoint=None):
  2255. self.public_endpoint = public_endpoint
  2256. self.internal_endpoint = internal_endpoint
  2257. class GetAccessPointPolicyResult(RequestResult):
  2258. """获取接入点策略信息。
  2259. :param str access_point_policy: 接入点策略。
  2260. """
  2261. def __init__(self, resp):
  2262. super(GetAccessPointPolicyResult, self).__init__(resp)
  2263. self.access_point_policy = None
  2264. class GetAccessPointPolicyResult(RequestResult):
  2265. def __init__(self, resp):
  2266. RequestResult.__init__(self, resp)
  2267. self.policy = to_string(resp.read())
  2268. class AccessPointInfo(RequestResult):
  2269. """接入点信息。
  2270. :param str access_point_name: 接入点名称。
  2271. :param str bucket: bucket名称。
  2272. :param str network_origin: 网络类型。
  2273. :param class vpc: vpc信息。元素类型为:class:`<oss2.models.AccessPointVpcConfiguration>`。
  2274. :param str alias: 别名。
  2275. :param str status: 状态。
  2276. """
  2277. def __init__(self, access_point_name=None, bucket=None, network_origin=None, vpc=None, alias=None, status=None):
  2278. self.access_point_name = access_point_name
  2279. self.bucket = bucket
  2280. self.network_origin = network_origin
  2281. self.vpc = vpc
  2282. self.alias = alias
  2283. self.status = status
  2284. class ListAccessPointResult(RequestResult):
  2285. """返回所有接入点信息。
  2286. :param str account_id: 账户id。
  2287. :param int max_keys: List时返回的最多的接入点的条数。
  2288. :param bool is_truncated: 是否列举完所有的接入点。
  2289. :param str next_continuation_token: 下一个罗列操作携带的token。
  2290. :param str marker: 标记位。
  2291. :param str access_points: 接入点集合。元素类型为:class:`<oss2.models.AccessPointInfo>`
  2292. """
  2293. def __init__(self, resp):
  2294. super(ListAccessPointResult, self).__init__(resp)
  2295. self.account_id = None
  2296. self.max_keys = None
  2297. self.is_truncated = None
  2298. self.next_continuation_token = None
  2299. self.marker = None
  2300. self.access_points = []
  2301. class GetPublicAccessBlockResult(RequestResult):
  2302. """保存阻止公共访问信息的容器。
  2303. :param block_public_access: OSS全局阻止公共访问的配置信息。
  2304. """
  2305. def __init__(self, resp):
  2306. super(GetPublicAccessBlockResult, self).__init__(resp)
  2307. self.block_public_access = None
  2308. class GetBucketPublicAccessBlockResult(RequestResult):
  2309. """保存bucket阻止公共访问信息的容器。
  2310. :param block_public_access: Bucket的阻止公共访问配置信息。
  2311. """
  2312. def __init__(self, resp):
  2313. super(GetBucketPublicAccessBlockResult, self).__init__(resp)
  2314. self.block_public_access = None
  2315. class GetAccessPointPublicAccessBlockResult(RequestResult):
  2316. """保存access point阻止公共访问信息的容器。
  2317. :param block_public_access: 接入点的阻止公共访问配置信息。
  2318. """
  2319. def __init__(self, resp):
  2320. super(GetAccessPointPublicAccessBlockResult, self).__init__(resp)
  2321. self.block_public_access = None
  2322. class QoSConfiguration(object):
  2323. """Qos信息
  2324. :param total_upload_bw: 总上传带宽, 单位Gbps
  2325. :type total_upload_bw: int
  2326. :param intranet_upload_bw: 内网上传带宽, 单位Gbps
  2327. :type intranet_upload_bw: int
  2328. :param extranet_upload_bw: 外网上传带宽, 单位Gbps
  2329. :type extranet_upload_bw: int
  2330. :param total_download_bw: 总下载带宽, 单位Gbps
  2331. :type total_download_bw: int
  2332. :param intranet_download_bw: 内外下载带宽, 单位Gbps
  2333. :type intranet_download_bw: int
  2334. :param extranet_download_bw: 外网下载带宽, 单位Gbps
  2335. :type extranet_download_bw: int
  2336. :param total_qps: 总qps, 单位请求数/s
  2337. :type total_qps: int
  2338. :param intranet_qps: 内网访问qps, 单位请求数/s
  2339. :type intranet_qps: int
  2340. :param extranet_qps: 外网访问qps, 单位请求数/s
  2341. :type extranet_qps: int
  2342. """
  2343. def __init__(self,
  2344. total_upload_bw = None,
  2345. intranet_upload_bw = None,
  2346. extranet_upload_bw = None,
  2347. total_download_bw = None,
  2348. intranet_download_bw = None,
  2349. extranet_download_bw = None,
  2350. total_qps = None,
  2351. intranet_qps = None,
  2352. extranet_qps = None):
  2353. self.total_upload_bw = total_upload_bw
  2354. self.intranet_upload_bw = intranet_upload_bw
  2355. self.extranet_upload_bw = extranet_upload_bw
  2356. self.total_download_bw = total_download_bw
  2357. self.intranet_download_bw = intranet_download_bw
  2358. self.extranet_download_bw = extranet_download_bw
  2359. self.total_qps = total_qps
  2360. self.intranet_qps = intranet_qps
  2361. self.extranet_qps = extranet_qps
  2362. class RequesterQoSInfo(object):
  2363. """流控配置信息。
  2364. :param str requester: 请求者UID
  2365. :param list qos_configuration: 流控配置信息。元素类型为:class:`QoSConfiguration <oss2.models.QoSConfiguration>`。
  2366. """
  2367. def __init__(self, requester=None, qos_configuration=None):
  2368. self.requester = requester
  2369. self.qos_configuration = qos_configuration
  2370. class RequesterQoSInfoResult(RequestResult):
  2371. """流控配置。
  2372. :param str requester: 请求者UID
  2373. :param list qos_configuration: 流控配置信息。元素类型为:class:`QoSConfiguration <oss2.models.QoSConfiguration>`。
  2374. """
  2375. def __init__(self, resp):
  2376. super(RequesterQoSInfoResult, self).__init__(resp)
  2377. self.requester = None
  2378. self.qos_configuration = None
  2379. class ResourcePoolInfoResult(RequestResult):
  2380. """资源池的基本信息。
  2381. :param str region: 资源池所属的地域
  2382. :param str name: 资源池的名称
  2383. :param str owner: 资源池所属的用户
  2384. :param str create_time: 资源池创建的时间
  2385. :param list qos_configuration: 流控配置信息。元素类型为:class:`QoSConfiguration <oss2.models.QoSConfiguration>`。
  2386. """
  2387. def __init__(self, resp):
  2388. super(ResourcePoolInfoResult, self).__init__(resp)
  2389. self.region = None
  2390. self.name = None
  2391. self.owner = None
  2392. self.create_time = None
  2393. self.qos_configuration = None
  2394. class ResourcePoolInfo(RequestResult):
  2395. """资源池的简单信息。
  2396. :param str name: 资源池的名称
  2397. :param str create_time: 资源池创建的时间
  2398. """
  2399. def __init__(self, name=None, create_time=None):
  2400. self.name = name
  2401. self.create_time = create_time
  2402. class ListResourcePoolsResult(RequestResult):
  2403. """资源池集合。
  2404. :param str region: 资源池所属的地域
  2405. :param str owner: 资源池所属的用户
  2406. :param str continuation_token: 本次列举使用的ContinuationToken
  2407. :param str next_continuation_token: 下次列举请求的ContinuationToken
  2408. :param bool is_truncated: 本次返回结果是否截断
  2409. :param list resource_pool: 资源池信息。元素类型为:class:`ResourcePoolInfo <oss2.models.ResourcePoolInfo>`。
  2410. """
  2411. def __init__(self, resp):
  2412. super(ListResourcePoolsResult, self).__init__(resp)
  2413. self.region = None
  2414. self.owner = None
  2415. self.continuation_token = ''
  2416. self.next_continuation_token = ''
  2417. self.is_truncated = False
  2418. self.resource_pool = []
  2419. class ResourcePoolBucketInfo(RequestResult):
  2420. """资源池的基本信息。
  2421. :param str name: Bucket的名称
  2422. :param str join_time: Bucket加入资源池的时间,ISO8601格式
  2423. """
  2424. def __init__(self, name=None, join_time=None):
  2425. self.name = name
  2426. self.join_time = join_time
  2427. class ListResourcePoolBucketsResult(RequestResult):
  2428. """资源池中的Bucket列表。
  2429. :param str resource_pool: 目标资源池名称
  2430. :param str continuation_token: 本次列举使用的ContinuationToken
  2431. :param str next_continuation_token: 下次列举请求的ContinuationToken
  2432. :param bool is_truncated: 本次返回结果是否截断
  2433. :param list resource_pool_buckets: 资源池中Bucket的信息。元素类型为:class:`ResourcePoolBucketInfo <oss2.models.ResourcePoolBucketInfo>`。
  2434. """
  2435. def __init__(self, resp):
  2436. super(ListResourcePoolBucketsResult, self).__init__(resp)
  2437. self.resource_pool = None
  2438. self.continuation_token = ''
  2439. self.next_continuation_token = ''
  2440. self.is_truncated = False
  2441. self.resource_pool_buckets = []
  2442. class ListResourcePoolRequesterQoSInfosResult(RequestResult):
  2443. """资源池的请求者流控配置信息。
  2444. :param str resource_pool: 目标资源池名称
  2445. :param str continuation_token: 本次列举使用的ContinuationToken
  2446. :param str next_continuation_token: 下次列举请求的ContinuationToken
  2447. :param bool is_truncated: 本次返回结果是否截断
  2448. :param list requester_qos_info: 请求者流控配置信息。元素类型为:class:`RequesterQoSInfo <oss2.models.RequesterQoSInfo>`。
  2449. """
  2450. def __init__(self, resp):
  2451. super(ListResourcePoolRequesterQoSInfosResult, self).__init__(resp)
  2452. self.resource_pool = None
  2453. self.continuation_token = ''
  2454. self.next_continuation_token = ''
  2455. self.is_truncated = False
  2456. self.requester_qos_info = []
  2457. class ListBucketRequesterQoSInfosResult(RequestResult):
  2458. """bucket的请求者流控配置信息。
  2459. :param str bucket: 请求者流控对应的Bucket名称
  2460. :param str continuation_token: 本次列举使用的ContinuationTokenRequesterQoSInfo
  2461. :param str next_continuation_token: 下次列举请求的ContinuationToken
  2462. :param bool is_truncated: 本次返回结果是否截断
  2463. :param list requester_qos_info: 请求者流控配置信息。元素类型为:class:`RequesterQoSInfo <oss2.models.RequesterQoSInfo>`。
  2464. """
  2465. def __init__(self, resp):
  2466. super(ListBucketRequesterQoSInfosResult, self).__init__(resp)
  2467. self.bucket = None
  2468. self.continuation_token = ''
  2469. self.next_continuation_token = ''
  2470. self.is_truncated = False
  2471. self.requester_qos_info = []