def test_valume(self): print json.loads(getConf("data", "lite_player")).values() player_ids = ",".join(str(x).encode("utf-8") for x in json.loads(getConf("data", "lite_player")).values()) start_time = getNowTime() print start_time ''' step1 设置音量值 ''' valume_value = 50 task_id = 16 response = rq_command(task_id=task_id, value=valume_value, player_ids=player_ids) print response '''check1: 音量控制命令返回''' self.assertTrue(response["status"] == [11312001], 'lite 音量调节失败') time.sleep(5) '''step2: 音量控制 日志查询''' end_time = getNowTime() print end_time response = rq_commandHistory(player_ids=player_ids, ttid=9, synPlatform=1, asyPlatform=4, start_time=start_time, end_time=end_time, status='1,2', offset=0, limit=100, sort='start_time', sortType='desc') print response '''check2: 验证音量控制命令日志''' self.assertTrue(response["status"] == [10000001], 'lite 获取音量调节日志失败') '''验证返回的日志结果''' assertControlLog(self,response,"音量调节",ratio=valume_value,scheduledTaskstatus=1,task_id=task_id)
def rq_program(url=getConf("constant", "vnnoxlite_url"), search='', offset='', limit='', sort='', sortType='', token=getConf("data", "token")): ''' 获取Vnnox节目列表 :param1 search :param2 offset :param3 limit :param4 sort :param5 sortType :return type:json response :example response = rq_program(search='',offset=1,limit=20,sort='update_time',sortType='desc') ''' headers = getHearders(token) data = { "search": search, "offset": offset, "limit": limit, "sort": sort, "sortType": sortType } data = urllib.urlencode(data) print data response = requests.get(url=url + "/Rest/Lite/program?" + data, headers=headers, verify=False) return json.loads(response.text)
def assertControlLog(self,response,description,noApply=[],**kwargs): flag = True for playername in json.loads(getConf("data", "lite_player")).keys(): flag1 = False for execution in response["data"]["executionList"]: if playername == execution["playerName"]: flag1 = True for key in kwargs.keys(): if str(execution[key])!=str(kwargs[key]): flag = False print playername.encode("utf-8") + "日志中的"+key.encode("utf-8")+"值为"+str(execution[key])+" 期望值为"+str(kwargs[key]) break if not flag1: if noApply: flag88 = False for key in getAllKey("searchRes"): if key[-8:]==playername[-8:]: if json.loads(getConf("searchRes",key))["productName"] in noApply : flag88 = True if not flag88: flag = False print playername.encode("utf-8") + "没有生成" + description + "日志" else: flag = False print playername.encode("utf-8") + "没有生成"+description+"日志" self.assertTrue(flag,description+"日志未全部正确上报")
def test_HDMI(self): print json.loads(getConf("data", "lite_player")).values() player_ids = ",".join(str(x).encode("utf-8") for x in json.loads(getConf("data", "lite_player")).values()) start_time = getNowTime() print start_time task_id = 8 ''' step1 设置HDMI源 ''' response = rq_command(task_id=task_id, player_ids=player_ids) print response '''check1: 设置HDMI源命令返回''' self.assertTrue(response["status"] == [11312001], 'lite 设置HDMI源失败') time.sleep(5) '''step2: 设置HDMI源 日志查询''' end_time = getNowTime() print end_time response = rq_commandHistory(player_ids=player_ids, ttid=4, synPlatform=1, asyPlatform=2, start_time=start_time, end_time=end_time, status='1,2', offset=0, limit=100, sort='start_time', sortType='desc') print response '''check2: 验证设置HDMI源命令日志''' self.assertTrue(response["status"] == [10000001], 'lite 获取HDMI源日志失败') '''验证返回的日志结果''' assertControlLog(self, response,"设置HDMI源", noApply=["T1-4G", "T3"], task_id=task_id, scheduledTaskstatus=1, )
def rq_PlayerProgramProgress(url=getConf("constant", "vnnoxlite_url"), token=getConf("data", "token")): ''' 获取Vnnox播放器 :return type:json response :example response = rq_PlayerProgramProgress() ''' headers = getHearders(token) response = requests.get(url=url + "/Rest/Lite/PlayerProgramProgress", headers=headers, verify=False) return json.loads(response.text)
def rq_commandHistory(url=getConf("constant", "vnnoxlite_url"), player_ids='', ttid='', synPlatform='', asyPlatform='', start_time='', end_time='', status='', offset='', limit='', sort='', sortType='', token=getConf("data", "token")): ''' 获取日志 :param1 player_ids type:str(多个用 , 分隔) 屏体 id :param2 start_time type:y%-m%-d H:M:S 开始时间 :param2 end_time type:y%-m%-d H:M:S 结束时间 :param3 ttid 控制类型 1:重启 2:屏幕状态 3:同步播放 4:视频源 8:屏体电源 9:音量 10:亮度 :param4 synPlatform 命令来源 1 :param5 asyPlatform 命令来源 2 : 视频源,重启 ,屏幕状态 同步播放 4 :亮度,音量,屏体电源 vnnox (synPlatform:1 asyPlatform:2) 其它: (synPlatform:100,100,100,2 asyPlatform:100,100,100,1) :param6 status 执行结果 成功:1 失败:2 :param7 offset 默认值 0 :param8 limit 每页条数 20 :param9 sort 默认值 start_time :param10 sortType 默认值 desc :return type:json response :example response = rq_commandHistory(player_ids=getConf("data","id"),ttid=8,synPlatform=1,asyPlatform=2,start_time='2019-01-16 00:00:00',end_time='2019-01-17 23:59:59',status='1,2',offset=0,limit=20,sort='start_time',sortType='desc') ''' headers = getHearders(token) data = { "player_id": player_ids, "ttid": ttid, "filters[synPlatform]": synPlatform, "filters[asyPlatform]": asyPlatform, "filters[start_time]": start_time, "filters[end_time]": end_time, "filters[status]": status, "offset": offset, "limit": limit, "sort": sort, "sortType": sortType } response = requests.get(url=url + "/Rest/Lite/commandHistory", headers=headers, params=data, verify=False) return json.loads(response.text)
def rq_Playerdelete(url=getConf("constant", "vnnoxlite_url"), id='', token=getConf("data", "token")): ''' 删除Vnnox播放器 :param1 id type:int vnnox播放器id :return type:json response :example response = rq_Playerdelete(id = 13388) ''' headers = getHearders(token) response = requests.delete(url=url + "/Rest/Lite/Player/" + str(id), headers=headers, verify=False) return json.loads(response.text)
def rq_correctTime(url=getConf("constant", "vnnoxlite_url"), timezone='', type='', nodeUrl='', player_ids='', base_player_id='', group_id=0, is_base=0, is_ntp=0, token=getConf("data", "token")): ''' 对时 :param1 type type:int 1:NTP对时 2: 射频对时 3:手动对时 :param2 nodeUrl type:str cn or '': 服务器中国 us: 服务器美国 else: 自定义服务器 :param3 timezone type:str 时区 :param4 player_ids type:str(多个用 , 分隔) 屏体 id :param5 base_player_id 默认值 :param6 group_id 默认值 :param7 is_base 默认值 :param8 is_ntp 默认值 :return type:json response :example response = rq_correctTime(type=3,nodeUrl='cn',player_ids=getConf("data","id"),timezone ="Asia/Shanghai") ''' headers = getHearders(token) if nodeUrl == 'us': nodeUrl = 'us.ntp.org.cn' elif nodeUrl == 'cn' or nodeUrl == '': nodeUrl = 'ntp1.aliyun.com' else: nodeUrl = nodeUrl data = { "timezone": timezone, "player_ids": player_ids, "base_player_id": base_player_id, "type": type, "group_id": group_id, "is_base": is_base, "is_ntp": is_ntp, "nodeUrl": nodeUrl } print data response = requests.post(url=url + "/Rest/Lite/correctTime/generate", headers=headers, data=json.dumps(data), verify=False) return json.loads(response.text)
def assertOSVersion(self): result = getFireWareVersion(self) version1 = getConf("data","os3368version").split("V")[1] version2 = getConf("data","os3128version").split("V")[1] flag = True for i in self.sns: li = result[i] v = li["model"].split("V")[1] if li in [Constant.ERROR,Constant.FAILED,Constant.NOAPPLY]: print i + ":" + str(li) flag = False elif not ((version1==v) or (version2==v)): flag = False print i + "的系统版本号与预期不相符:"+str(li["model"]) self.assertTrue(flag,"系统存在与预期不相符的版本号")
def test_careRegister(self): u'''step1:将T卡注册至care''' url = getConf("constant", "care_url") username = getConf("constant", "care_username") flag = careRegister(self, url, username) u'''check1: 是否全部注册成功''' self.assertTrue(flag, "未全部注册成功") time.sleep(3) u''' step2: 获取T卡care配置信息 ''' result = getCareInfo(self) print result u'''check2: 查看care配置信息是否与注册信息一致 ''' assertCareResult(self, result, url, username) self.assertTrue(self.isLoginAll, "有未登录的终端")
def updateOS(self): """ 升级OS(注意:请将OS升级包放在工程src/file/update/OS 目录下) :param self 必须 :return flag 升级系统的命令是否全部成功下发,注意:不代表系统升级成功 :return version 要升级的版本号 :example flag,version = updateOS(self) """ sns_3368 = [] sns_3128 = [] for sn in self.sns: platform = json.loads(getConf("searchRes", sn))["platform"].encode() if "336" in platform: sns_3368.append(sn) elif "312" in platform: sns_3128.append(sn) else: raise RuntimeError("未知型号:" + platform) flag1 = True flag2 = True if sns_3368: print "shengji 3368" flag1 = update(self, type="OS3368", sns=sns_3368) if sns_3128: print "shengji 3128" flag2 = update(self, type="OS3128", sns=sns_3128) return flag1 and flag2
def rq_vnnoxLiteplayer( url=getConf("constant", "vnnoxlite_url"), username="", password=""): url = url + '/Rest/Players' data = {"username": username, "password": password, "playerType": 2} #请求vnnox获取播放器列表 response = requests.post(url=url, json=data, verify=False) return json.loads(response.text)
def test_manual(self): ''' 手动 对时 ''' player_ids = ",".join(str(x).encode("utf-8") for x in json.loads(getConf("data", "lite_player")).values()) response = rq_correctTime(type=3,nodeUrl='cn',player_ids=player_ids,timezone ="Asia/Shanghai") print response u'check' self.assertTrue(response["status"] == [10000001] ,'lite 设置手动对时失败') assertTimeModel(self, model=3)
def test_restart(self): player_ids = ",".join( str(x).encode("utf-8") for x in json.loads(getConf("data", "lite_player")).values()) start_time = getNowTime() print start_time task_id = 1 ''' step1 重启 ''' response = rq_command(task_id=task_id, player_ids=player_ids) print response '''check1: 重启命令返回''' self.assertTrue(response["status"] == [11312001], 'this Command is failed') time.sleep(20) for i in range(20): '''step2: 重启 日志查询''' print "第" + str(i + 1) + "次查询" time.sleep(3) end_time = getNowTime() response = rq_commandHistory(player_ids=player_ids, ttid=1, synPlatform=1, asyPlatform=2, start_time=start_time, end_time=end_time, status='1,2', offset=0, limit=100, sort='start_time', sortType='asc') if response["data"]["count"] == len( json.loads(getConf("data", "lite_player")).keys()): print end_time print response break '''check2: 验证设置同步播放命令日志''' self.assertTrue(response["status"] == [10000001], 'this Command is failed') '''验证返回的日志结果''' assertControlLog(self, response, "设置同步播放", task_id=task_id, scheduledTaskstatus=1)
def test_brightness(self): print json.loads(getConf("data", "lite_player")).values() player_ids = ",".join( str(x).encode("utf-8") for x in json.loads(getConf("data", "lite_player")).values()) start_time = getNowTime(addHours=-8) print start_time ''' step1 设置亮度值 ''' bright_value = 60 task_id = 17 response = rq_command(task_id=task_id, value=bright_value, player_ids=player_ids) print response '''check1: 亮度控制命令返回''' self.assertTrue(response["status"] == [11312001], 'lite设置亮度失败') time.sleep(5) '''step2: 亮度控制 日志查询''' end_time = getNowTime(addHours=-8) print end_time # time.sleep(10) response1 = rq_commandHistory(player_ids=player_ids, ttid=10, synPlatform=1, asyPlatform=4, start_time=start_time, end_time=end_time, status='1,2', offset=0, limit=50, sort='start_time', sortType='desc') print response1 '''check2: 验证亮度控制命令日志''' self.assertTrue(response1["status"] == [10000001], 'lite获取亮度日志失败') '''验证返回的日志结果''' assertControlLog(self, response1, "亮度调节", ratio=bright_value, scheduledTaskstatus=1, task_id=str(task_id))
def udp_receive_data(self): s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) hostname = socket.gethostname() ip = socket.gethostbyname(hostname) s.settimeout(6) s.bind((ip, Constant.UDP_HAND_LISTEN_PORT)) data = getConf("data","sn") if self: self.searchRes = {} if data : sns = data.split(",") while True: try: data, address = s.recvfrom(1024) a = data[24:] info = json.loads(a) info["addr"] = address[0] strn = json.dumps(info) sn = info["sn"].encode('utf-8').lower() for i in sns: if i in sn: if self: self.searchRes[sn] = info else: setConf("searchRes",sn,strn) sns.remove(i) break if not sns: return except socket.timeout: s.close() if sns: if self: return print "未搜索到屏体:" + str(sns) setConf("data","bad_sn",str(sns)) return else: while True: try: data, address = s.recvfrom(1024) a = data[24:] info = json.loads(a) info["addr"] = address[0] strn = json.dumps(info) sn = info["sn"].encode('utf-8').lower() if self: self.searchRes[sn] = info else: setConf("searchRes", sn, strn) except socket.timeout: s.close() return
def getLoginBuffer(key): data = {} data["sn"] = key.upper() data["username"] = '******' data['password'] = getConf('constant', 'login_password') data['loginType'] = 0 source = {} source['type'] = 1 source['platform'] = 1 data['source'] = source buffer = getPacket(sequence=-1,type=0x5251,param1=0x00,data=str(data)) return buffer
def rq_generatePlan(url=getConf("constant", "vnnoxlite_url"), player_id='', program_id='', token=getConf("data", "token")): ''' 发布节目 :param1 player_id type:list 播放器id :param2 program_id type:int 节目 id :return type:json response response = rq_generatePlan(player_id=getConf("data","id").split(','),program_id=getConf("data","program_id")) ''' headers = getHearders(token) data = {"player_id": player_id, "program_id": program_id} print data response = requests.post(url=url + "/Rest/Lite/generatePlan", headers=headers, json=data, verify=False) return json.loads(response.text)
def assertAPPVersion(self): result = getFireWareVersion(self) version = getConf("data","appversion") flag = True for i in self.sns: li = result[i] if li in [Constant.ERROR,Constant.FAILED,Constant.NOAPPLY]: print i + ":" + str(li) flag = False elif li["mainVersion"]!= version: flag = False print i + "的软件版本号与预期不相符:"+li["mainVersion"] self.assertTrue(flag,"终端存在与预期不相符的版本号")
def assertBindInfo(self, vnnoxLite_player_url, vnnoxLite_play_user): '''通过终端检验''' flag = True result = getBindInfo(self) print result for sn in result.keys(): info = result[sn] if info in [Constant.ERROR, Constant.FAILED, Constant.NOAPPLY]: print sn + "获取绑定信息失败" flag = False elif not info["isBind"]: print sn + "未绑定" flag = False elif info["baseUrl"] != vnnoxLite_player_url or info[ "username"] != vnnoxLite_play_user: print sn + "已绑定,但绑定信息与配置文件不符" flag = False '''在vnnox端检验''' flag1 = True res = rq_PlayerProgramProgress(url=getConf("constant", "vnnoxlite_url")) print res binded_player = {} for i in res["data"]: binded_player[i["name"].encode("utf-8")] = i["id"].encode("utf-8") lite_player = {} for sn in self.sns: aliasName = json.loads(getConf("searchRes", sn))["aliasName"].encode("utf-8") if aliasName in binded_player.keys(): lite_player[aliasName] = binded_player[aliasName] else: flag1 = False print aliasName + "未在vnnoxlite注册成功" '''将player_id写入配置文件''' setConf("data", "lite_player", json.dumps(lite_player)) if flag and flag1: print "全部绑定成功" self.assertTrue(flag and flag1, "未全部绑定成功")
def test_openScreen(self): print json.loads(getConf("data", "lite_player")).values() player_ids = ",".join( str(x).encode("utf-8") for x in json.loads(getConf("data", "lite_player")).values()) start_time = getNowTime() print start_time task_id = "2" ''' step1 开屏 ''' response = rq_command(task_id=task_id, player_ids=player_ids) print response '''check1: 开屏命令返回''' self.assertTrue(response["status"] == [11312001], 'lite开屏命令失败') time.sleep(5) '''step2: 开屏 日志查询''' end_time = getNowTime() print end_time response = rq_commandHistory(player_ids=player_ids, ttid=2, synPlatform=1, asyPlatform=2, start_time=start_time, end_time=end_time, status='1,2', offset=0, limit=100, sort='start_time', sortType='desc') print response '''check2: 验证设置开屏命令日志''' self.assertTrue(response["status"] == [10000001], 'lite获取屏幕状态日志失败') '''验证返回的日志结果''' assertControlLog(self, response, "开屏", task_id=task_id, scheduledTaskstatus=1)
def assertTimeModel(self,model=0): ''' :param self: :param model: 3:手动对时 1:NTP对时 2:lora对时 :return: bool ''' time.sleep(3) result = getTimeModel(self) flag = True for name in json.loads(getConf("data", "lite_player")).keys(): if result[name.split("-")[1]] != model: print name.encode("utf-8") + "对时模式为:" + str(result[name.split("-")[1]])+" 期望值为:"+str(model) flag = False self.assertTrue(flag)
def rq_command(url=getConf("constant", "vnnoxlite_url"), task_id='', value='', player_ids='', token=getConf("data", "token")): ''' 播放器控制 :param1 task_id 1:重启 2: 屏幕状态控制 正常显示 3:屏幕状态控制 黑屏 4:同步播放 8: 视频源控制 HDMI 9:视频源控制 内部 16: 音量控制 17 :亮度控制 :param2 value type: :param3 player_ids type:str(多个用 , 分隔) 播放器id :return type:json response :example response = rq_command(task_id=1,player_ids=getConf("data","id")) ''' headers = getHearders(token) data = {"task_id": task_id, "value": value, "player_ids": player_ids} print data response = requests.post(url=url + "/Rest/Lite/command", headers=headers, json=data, verify=False) return json.loads(response.text)
def rq_clearMedia(url=getConf("constant", "vnnoxlite_url"), player_ids='', scope='', type='', token=getConf("data", "token")): ''' 监控 媒体清理 :param1 player_ids type:list 播放器id :param2 scope type:int 1:不包括清理正在播放的媒体 99:清理所有媒体 :param3 type 默认值 :return type:json response :example response = rq_clearMedia(scope=1,player_ids=getConf("data","id").split(','),type="CLEAR_MEDIA") ''' headers = getHearders(token) data = {"player_ids": player_ids, "scope": scope, "type": type} print data response = requests.post(url=url + "/Rest/Lite/clearMedia", headers=headers, json=data, verify=False) return json.loads(response.text)
def searchT(self=None): if not self: removeSection("searchRes") addSection("searchRes") setConf("data","bad_sn","") print "search and login terminal" buffer = getPacket(type=-30635,param1=0x81) t = threading.Thread(target=udp_receive_data,args=(self,)) t.start() time.sleep(1) udp_send_data(buffer) t.join() if getConf("data","bad_sn"): return False else: return True
def test_publish(self): '''获取第一个节目''' response = rq_program(search='', offset=1, limit=20, sort='update_time', sortType='desc') print response u'check' self.assertTrue(response["status"] == [10000001], 'lite获取节目失败') print response["data"]["programList"][0]["id"] setConf("data", "program_id", response["data"]["programList"][0]["id"]) program_id = response["data"]["programList"][0]["id"] '''发布 vnnoxLite节目 ''' player_ids = json.loads(getConf("data", "lite_player")).values() response = rq_generatePlan(player_id=player_ids,program_id=program_id) print response u'check' self.assertTrue(response["status"] == [110250010101] ,'lite发布节目失败')
def downloadFile(self, user='', filepath='', ftpfiles={}, filetype='png'): ''' 下载文件 :param1 self 必须 :param2 user 用户名 :param3 filepath 本地存放目录 :param4 ftpfile 需下载的文件的绝对路径 :return Flag bool :example flag = downloadFile(self,user='',filepath='',ftpfile='') ''' if user == "admin": portName = "ftpPort" elif user == "supervisor": portName = "syssetFtpPort" else: print "ftp用户名不存在" result = {} for sn in self.sns: if ftpfiles[sn] == "FAILED": result[sn] = False continue try: res = json.loads(getConf("searchRes", sn)) ip = res["addr"] port = res[portName] passwordkey = res["key"] password = str(sn)[-8:] + '@' + passwordkey ftp = FTP() ftp.connect(ip, port) ftp.login(user, password) bufsize = 1024 filename = sn + "." + filetype file = os.path.join(filepath, filename) if os.path.exists(file): os.remove(file) ftpfile = ftpfiles[sn] file_handler = open(file, 'wb') ftp.retrbinary("RETR %s" % (ftpfile), file_handler.write, bufsize) file_handler.close() result[sn] = True except Exception, e: result[sn] = False print sn + ":" + e.message finally:
def bind_vnnoxLite(self, Server_address='', username='', password=''): ''' 绑定lite播放器 :param1 self 必须 :param2 Server_address vnnox认证播放器地址 :param3 username vnnox认证播放器用户名 :param3 password vnnox认证播放器密码 :return flag bool型 是否下发成功 :example1 flag=bind_VnnoxLite(self,Server_address="cn",username="******",password="******") :example2 flag=bind_VnnoxLite(self,Server_address="https://api-cn.vnnox.com",username="******",password="******") :example3 flag=bind_VnnoxLite(self,Server_address="China",username="******",password="******") ''' flag = True result = getBindInfo(self) bindedSn = [] for sn in result.keys(): info = result[sn] if info in [Constant.ERROR, Constant.FAILED, Constant.NOAPPLY]: print sn + "获取绑定vonnox信息失败" elif info["isBind"]: bindedSn.append(sn) if bindedSn: print "解绑:" + str(bindedSn) '''获取unbind_token''' vnnoxlite_url_unbind = getConf("constant", "vnnoxlite_url_unbind") vnnoxlite_username_unbind = getConf("constant", "vnnoxlite_username_unbind") vnnoxlite_password_unbind = getConf("constant", "vnnoxlite_password_unbind") response = rq_Logon(vnnox_url=vnnoxlite_url_unbind, username=vnnoxlite_username_unbind, password=vnnoxlite_password_unbind) self.assertTrue(10106001 in response["status"], "获取token失败") # setConf("data", "token_unbind", response["data"]["token"]) threads = [] for sn in bindedSn: aliasName = json.loads(getConf("searchRes", sn))["aliasName"].encode("utf-8") t = threading.Thread(target=unBind_vonnoxLite, args=(self, aliasName, vnnoxlite_url_unbind, vnnoxlite_username_unbind, response["data"]["token"])) threads.append(t) t.start() for t in threads: t.join() time.sleep(1) print "开始绑定" getBindInfo(self) info = get_vnnoxLiteplayer(Server_address, username, password) if not info: print "info wei kong" return False #组织data data = {} data["baseUrl"] = Server_address data["password"] = password data["username"] = username data1 = {} playerList = {} playerList["identifier"] = "" playerList["isUsed"] = False playerList["name"] = info["player"]["name"] playerList["playerIdentifier"] = "" data1["playerList"] = [playerList] data1["token"] = info["token"] data["data"] = data1 # print data threads2 = [] for sn in self.sns: def bindLite(self, sn, data): #绑定vonnoxlite identifier = get_playerIdentifier(Server_address, info["token"]) if identifier: data = copy.deepcopy(data) data["data"]["playerList"][0]["identifier"] = identifier data["data"]["playerList"][0]["playerIdentifier"] = sn.upper() # print identifier+":"+sn.upper() flag = sendSetCommand(self, Constant.WHAT_PLAYER_BINDING, Constant.TYPE_VNNOX_BINDINFO, Constant.ACTION_SET, 0, data=data, sns=[sn], timeout=8, describe="绑定lite播放器") # print flag else: print "未获取到identifier" return t = threading.Thread(target=bindLite, args=(self, sn, data)) threads2.append(t) t.start() for t in threads2: t.join()
def uploadFile(self, user='', file='', ftpdir={}, sns=None): ''' 上传文件 :param1 self 必须 :param2 file 要上传文件(绝对路径) :param4 ftpdir T卡ftp服务器目录(绝对路径) 字典或者字符串 :param5 user 用户名 :return Flag bool 是否全部上传成功 :example flag=uploadFile(self,file='',sn=[],user='',ftpdir=''): ''' if sns == None: sns = self.sns if user == "admin": portName = "ftpPort" elif user == "supervisor": portName = "syssetFtpPort" else: print "ftp用户名不存在" result = {} for sn in sns: if isinstance(ftpdir, dict): if ftpdir[sn] == "FAILED": result[sn] = False print "获取目录有失败的" continue res = json.loads(getConf("searchRes", sn)) ip = res["addr"] port = res[portName] passwordkey = res["key"].encode("utf-8") password = sn[-8:] + '@' + passwordkey try: ftp = FTP() ftp.connect(ip, port) ftp.login(user, password) bufsize = 1024 if isinstance(ftpdir, dict): ftppath = ftpdir[sn] elif isinstance(ftpdir, str): ftppath = ftpdir else: raise TypeError("参数fitdir类型错误") if os.path.isfile(file): filename = os.path.basename(file) file_handler = open(file, 'rb') ftpabsfile = ftppath + '/' + filename ftp.storbinary('STOR %s' % ftpabsfile, file_handler, bufsize) file_handler.close() result[sn] = True else: filenames = os.listdir(file) for filename in filenames: ftpabsfile = ftppath + '/' + filename localabsfile = file + '\\' + filename if not os.path.isfile(localabsfile): print localabsfile print "不是一个文件" continue file_handler = open(localabsfile, 'rb') ftp.storbinary('STOR %s' % ftpabsfile, file_handler, bufsize) file_handler.close() result[sn] = True except Exception, e: result[sn] = False print sn + ":" + e.message finally:
def rq_profile(url=getConf("constant", "vnnoxlite_url"), token=getConf("data", "token")): headers = getHearders(token) url = url + "/Rest/Lite/profile" response = requests.get(url=url, headers=headers) return json.loads(response.text)