asyncio使用并发业务实例—(2)请求函数部分

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')

asyncio使用并发业务实例—(1)结构及思路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值