File size: 3,270 Bytes
0ab2566 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | # -*- encoding: utf-8 -*-
"""
@File : tfsManager.py
@Contact : zhangwang.zhang@alibaba-inc.com
@License : (C)Copyright 2021, Alibaba Group
@Modify Time @Author @Version @Desciption
------------ ------- -------- -----------
2021/10/20 21:53 heqing 1.0 None
# import lib
from tfsClient import tfsManager
# 初始化客户端(初始化一次即可)
downloader = tfsManager('1316bec91c411')
response = downloader.fetchFile('O1CN01LkpGBC1itIwx70XNy_!!0-rate.jpg', timeout=3)
"""
import random
import time
import urllib
import urllib.request
# import lib
import requests
class tfsError(Exception):
"""base tfs Error"""
class tfsManager:
def __init__(self, appkey):
self.appKey = str(appkey)
self.tmpTfsProxyList = []
self.lastRefreshTime = 0
def getTfsProxyList(self):
"""
获取tfs的vip列表
"""
try:
tfsResponse = requests.get(
"http://restful-store.vip.tbsite.net:3800/tfs.list"
)
if tfsResponse.status_code == 200:
self.tmpTfsProxyList = tfsResponse.text.split("\n")[1:]
if len(self.tmpTfsProxyList) == 0:
raise RuntimeError("tmpTfsProxyList is empty")
self.lastRefreshTime = time.time()
else:
raise tfsError("ResponseError:", tfsResponse.status_code)
except requests.ConnectionError:
raise tfsError("ConnectionError:", str(requests.ConnectionError))
def refreshTfsProxyList(self):
"""
判断是否需要刷新vip列表
"""
needRefresh = False
if len(self.tmpTfsProxyList) == 0:
needRefresh = True
else:
diffTime = time.time() - self.lastRefreshTime
if diffTime >= 60:
needRefresh = True
if needRefresh:
self.getTfsProxyList()
def fetchFile(self, tfsFileName, timeout=None):
"""
从tfs服务器获取文件
:param tfsFileName: 请求的文件名
:return: http response
"""
self.refreshTfsProxyList()
headers = {"user-agent": "Picasso-Python-Client-V1.0.2"}
Host = random.choice(self.tmpTfsProxyList)
requestUrl = "http://" + Host + "/v1/" + self.appKey + "/" + tfsFileName
# response = requests.get(requestUrl, headers=headers, timeout=timeout)
request = urllib.request.Request(requestUrl, headers=headers)
response = urllib.request.urlopen(request, timeout=timeout)
return response
def fetchMetadata(self, tfsFileName, timeout=None):
"""
获取一个TFS文件的元信息
:param tfsFileName: 请求的文件名
:return: http response
"""
self.refreshTfsProxyList()
headers = {"user-agent": "Picasso-Python-Client-V1.0.2"}
Host = random.choice(self.tmpTfsProxyList)
requestUrl = (
"http://"
+ Host
+ "/v1/"
+ self.appKey
+ "/"
+ "metadata"
+ "/"
+ tfsFileName
)
response = requests.get(requestUrl, headers=headers, timeout=timeout)
return response |