asyncio使用并发业务实例—(2)请求函数部分
定义了类main,在里面些携程函数,将所有的请求都进行了封装,以便于调用和业务组合
常使用的参数封装成了配置文件,以下附readconfig.py代码
import configparser
import os
getpathInfo = os.path.dirname(os.path.abspath(__file__))
path =getpathInfo#调用获取实例的方法
config_path = os.path.join(path,'config.ini')
config = configparser.ConfigParser()#调用外部的读取配置文件的方法
config.read(config_path,encoding='utf-8')
def get_http(name):
value = config.get('HTTP',name)
return value
def get_ssh(name):
value = config.get('SSH',name)
return value
以下是config.ini的配置文件
# -*- coding: utf-8 -*-
# 运行脚本前需检查配置文件是否需要更改
[HTTP]
scheme = http
baseurl = 10.240.10.XXX
port = 8181
timeout = 10.0
parentNcdId = xxxxxx
npassword = xxxxxxxxxxxxxxxxxxxx
model = lasl
[SSH]
baseurl = 10.240.10.XX
port = 8181
user = root
password = root
以下附config.py代码供大家参考
import asyncio
import logging
import socket
import json
import os
import aiohttp
import async_timeout
import base64
import readConfig
import uuid
class main(object):
def __init__(self, loop, session, host= readConfig.get_http('baseurl'), port=readConfig.get_http('port'), data=None):
"""设置类的全局的属性"""
self._loop = loop
self._session = session
self.host = host
self.port = port
self.headers = {"Content-Type": "application/json"}
self.values = self.alarms = self.metrics = None
self.base_url = _INSTANCE.format(host=host, port=port)
"""登录"""
async def login(self,name,password):
url = "/XXXXXX/login"
data = {"input": {"user_name": name, "password": password}}
try:
with async_timeout.timeout(20, loop=self._loop):
response = await self._session.post(url=baseUrl + url, data=json.dumps(data),headers=self.headers)
data = await response.text()
# 获取sessionId
try:
sessionId=json.loads(data)["output"]["session_id"].encode('utf-8')
_LOGGER.info(
"Response from login: %s", response.status)
data = await response.text()
# 进行加密
bs64 = base64.b64encode(sessionId)
# 进行拼接
auth = "BASIC " + str(bs64, encoding="utf-8")
_LOGGER.info(data)
self.returnData = data
self.headers = {"Authorization": auth, "Content-Type": "application/json"}
except:
print("未登陆", json.loads(data)["output"]["return_message_en"])
except (asyncio.TimeoutError, aiohttp.ClientError, socket.gaierror):
_LOGGER.error("Can not login")
"""登出"""
async def logout(self):
url = "/XXXXXX/logout"
data = {}
try:
with async_timeout.timeout(20, loop=self._loop):
response = await self._session.post(url=baseUrl + url, headers=self.headers)
data = await response.text()
_LOGGER.info(data)
self.returnData = data
except (asyncio.TimeoutError, aiohttp.ClientError, socket.gaierror):
_LOGGER.error("Can not logout")
"""获取状态"""
async def getXXstatus(self):
url = '/topology/topology/'+parentNcdId+'/'+parentNcdId
r = await self._session.get(url=baseUrl + url,headers=self.headers)
print(self.headers)
#aiohttp
getne = await r.json()
print(getne)
print(r.status)
for x in getne['nodes']:
if x['operateStatus'] == 0:
pass
else:
print(x['label'], ':false')