import asyncio from tornado.httpclient import HTTPResponse, HTTPRequest import dock from dock.dcm import dcm_api from paste.core.logging import echo_log from paste.web import requests import apps async def get_send_sms_request(body): """ 创建发送短信的请求对象。方法仅创建请求对象,并未实际提交请求,具体由调度方法处理。 :param body: 短信参数字典 :return: HTTPRequest 对象 """ api_url = '/home/sms/sendwfsms' sms_request = await dcm_api.new_api_request(api_url, body) return sms_request async def after_send_sms_request(response: HTTPResponse, retry_queue: asyncio.Queue[HTTPRequest]): """ 提交数字城管后的处理程序。 :param response: 响应对象 :param retry_queue: 重试队列 """ echo_log(response.body.decode()) echo_log('发送短信成功') async def send_sms(body): """ 调用数字城管的发送短信接口 :param body: 短信参数字典 """ echo_log('正在准备发送短信...') sms_request = await get_send_sms_request(body) sms_queue = asyncio.Queue() await sms_queue.put(sms_request) if apps.get_active_env() in ('dev', '', None): echo_log(f"非生产环境,不实际提交.") return await requests.async_concurrency( sms_queue, con_count=dock.CONCURRENCY_COUNT, retry=dock.MAX_RETRY_COUNT, after_request=after_send_sms_request )