| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,9 +2,12 @@ | |||
| 2 | 2 | ||
| 3 | 3 | ### v6.1.3 | |
| 4 | 4 | ||
| 5 | - 2013-08-26 issue [] | ||
| 5 | + 2013-10-24 issue [#77](https://github.com/qiniu/python-sdk/pull/77) | ||
| 6 | 6 | ||
| 7 | 7 | - bug fix, httplib_thunk.py 中的无效符号引用 | |
| 8 | + - PutPolicy:增加 saveKey、persistentOps/persistentNotifyUrl、fsizeLimit(文件大小限制)等支持 | ||
| 9 | + - 断点续传:使用新的 mkfile 协议 | ||
| 10 | + | ||
| 8 | 11 | ||
| 9 | 12 | ### v6.1.2 | |
| 10 | 13 | ||
@@ -14,12 +17,14 @@ | |||
| 14 | 17 | - 修复在Windows环境下创建临时文件的权限问题 | |
| 15 | 18 | - 修复在Windows环境下对二进制文件计算crc32的bug | |
| 16 | 19 | ||
| 20 | + | ||
| 17 | 21 | ### v6.1.1 | |
| 18 | 22 | ||
| 19 | 23 | 2013-07-05 issue [#60](https://github.com/qiniu/python-sdk/pull/60) | |
| 20 | 24 | ||
| 21 | 25 | - 整理文档 | |
| 22 | 26 | ||
| 27 | + | ||
| 23 | 28 | ### v6.1.0 | |
| 24 | 29 | ||
| 25 | 30 | 2013-07-03 issue [#58](https://github.com/qiniu/python-sdk/pull/58) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -46,9 +46,7 @@ def gen_crc32(data): | |||
| 46 | 46 | return binascii.crc32(data) & 0xffffffff | |
| 47 | 47 | ||
| 48 | 48 | class PutExtra(object): | |
| 49 | - callback_params = None # 当 uptoken 指定了 CallbackUrl,则 CallbackParams 必须非空 | ||
| 50 | - bucket = None # 当前是必选项,但未来会去掉 | ||
| 51 | - custom_meta = None # 可选。用户自定义 Meta,不能超过 256 字节 | ||
| 49 | + params = None # 自定义用户变量, key需要x: 开头 | ||
| 52 | 50 | mimetype = None # 可选。在 uptoken 没有指定 DetectMime 时,用户客户端可自己指定 MimeType | |
| 53 | 51 | chunk_size = None # 可选。每次上传的Chunk大小 | |
| 54 | 52 | try_times = None # 可选。尝试次数 | |
@@ -153,17 +151,17 @@ def putblock(client, block_ret, chunk): | |||
| 153 | 151 | return client.call_with(url, chunk, content_type, len(chunk)) | |
| 154 | 152 | ||
| 155 | 153 | def mkfile(client, key, fsize, extra): | |
| 156 | - encoded_entry = urlsafe_b64encode("%s:%s" % (extra.bucket, key)) | ||
| 157 | - url = ["http://%s/rs-mkfile/%s/fsize/%s" % (conf.UP_HOST, encoded_entry, fsize)] | ||
| 154 | + url = ["http://%s/mkfile/%s" % (conf.UP_HOST, fsize)] | ||
| 158 | 155 | ||
| 159 | 156 | if extra.mimetype: | |
| 160 | 157 | url.append("mimeType/%s" % urlsafe_b64encode(extra.mimetype)) | |
| 161 | 158 | ||
| 162 | - if extra.custom_meta: | ||
| 163 | - url.append("meta/%s" % urlsafe_b64encode(extra.custom_meta)) | ||
| 159 | + if key is not None: | ||
| 160 | + url.append("key/%s" % urlsafe_b64encode(key)) | ||
| 164 | 161 | ||
| 165 | - if extra.callback_params: | ||
| 166 | - url.append("params/%s" % urlsafe_b64encode(extra.callback_params)) | ||
| 162 | + if extra.params: | ||
| 163 | + for k, v in extra.params.iteritems(): | ||
| 164 | + url.append("%s/%s" % (k, urlsafe_b64encode(v))) | ||
| 167 | 165 | ||
| 168 | 166 | url = "/".join(url) | |
| 169 | 167 | body = ",".join([i["ctx"] for i in extra.progresses]) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -17,6 +17,13 @@ class PutPolicy(object): | |||
| 17 | 17 | endUser = None | |
| 18 | 18 | asyncOps = None | |
| 19 | 19 | ||
| 20 | + saveKey = None | ||
| 21 | + insertOnly = None | ||
| 22 | + detectMime = None | ||
| 23 | + fsizeLimit = None | ||
| 24 | + persistentNotifyUrl = None | ||
| 25 | + persistentOps = None | ||
| 26 | + | ||
| 20 | 27 | def __init__(self, scope): | |
| 21 | 28 | self.scope = scope | |
| 22 | 29 | # @endgist | |
@@ -46,15 +53,33 @@ def token(self, mac=None): | |||
| 46 | 53 | ||
| 47 | 54 | if self.asyncOps is not None: | |
| 48 | 55 | token["asyncOps"] = self.asyncOps | |
| 49 | - | ||
| 56 | + | ||
| 57 | + if self.saveKey is not None: | ||
| 58 | + token["saveKey"] = self.saveKey | ||
| 59 | + | ||
| 60 | + if self.insertOnly is not None: | ||
| 61 | + token["exclusive"] = self.insertOnly | ||
| 62 | + | ||
| 63 | + if self.detectMime is not None: | ||
| 64 | + token["detectMime"] = self.detectMime | ||
| 65 | + | ||
| 66 | + if self.fsizeLimit is not None: | ||
| 67 | + token["fsizeLimit"] = self.fsizeLimit | ||
| 68 | + | ||
| 69 | + if self.persistentOps is not None: | ||
| 70 | + token["persistentOps"] = self.persistentOps | ||
| 71 | + | ||
| 72 | + if self.persistentNotifyUrl is not None: | ||
| 73 | + token["persistentNotifyUrl"] = self.persistentNotifyUrl | ||
| 74 | + | ||
| 50 | 75 | b = json.dumps(token, separators=(',',':')) | |
| 51 | 76 | return mac.sign_with_data(b) | |
| 52 | 77 | ||
| 53 | 78 | class GetPolicy(object): | |
| 54 | 79 | expires = 3600 | |
| 55 | 80 | def __init__(self): | |
| 56 | 81 | pass | |
| 57 | - | ||
| 82 | + | ||
| 58 | 83 | def make_request(self, base_url, mac=None): | |
| 59 | 84 | ''' | |
| 60 | 85 | * return private_url | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -65,9 +65,11 @@ def test_put(self): | |||
| 65 | 65 | policy = rs.PutPolicy(bucket) | |
| 66 | 66 | extra = resumable_io.PutExtra(bucket) | |
| 67 | 67 | extra.bucket = bucket | |
| 68 | + extra.params = {"x:foo": "test"} | ||
| 68 | 69 | key = "sdk_py_resumable_block_5_%s" % r(9) | |
| 69 | 70 | localfile = dst.name | |
| 70 | 71 | ret, err = resumable_io.put_file(policy.token(), key, localfile, extra) | |
| 72 | + assert ret.get("x:foo") == "test", "return data not contains 'x:foo'" | ||
| 71 | 73 | dst.close() | |
| 72 | 74 | os.remove(tmpf) | |
| 73 | 75 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments