我已经使用Flask Enterprise
python 库编写了一个 Web 服务器,它将成为一些 Web 服务器应用程序的模拟器。我从这个项目中得到了第一次实施的想法。
import os
import string
import random
from flaskext.enterprise import Enterprise
from flask import Flask, render_template
CUR_PATH = os.getcwd()
# config Flask
app = Flask(__name__, template_folder='../templates/')
# config Flask Enterprise
enterprise = Enterprise(app)
String = enterprise._sp.String
Integer = enterprise._sp.Integer
Boolean = enterprise._sp.Boolean
Array = enterprise._scls.Array
send_status = 0
msg_status = 6
class Service(enterprise.SOAPService):
__soap_target_namespace__ = 'MyNS' # namespace for soap service
__soap_server_address__ = '/soap' # address of soap service
@enterprise.soap(String, String, String,
String, Integer, Integer, Integer,
_returns=(String, Integer))
def sendSms(self, sourceAddresses, destinationAddresses, msgBody,
msgEncoding, groupId, groupWeight, sourceType):
return (''.join(random.sample(string.replace(string.digits, '0', ''), 8)), send_status)
@enterprise.soap(Integer, _returns=(String, String, String, Integer, Integer))
def getSmsDeliveryStatus(self, msgIds):
return ('0', ''.join(random.sample(string.replace(string.digits, '0', ''), 8)),
''.join(random.sample(string.replace(string.digits, '0', ''), 8)), msgIds, msg_status)
@app.route('/')
def index_page():
""" The index page
"""
return render_template("index.html")
if __name__ == '__main__':
port = int(os.environ.get('PORT', 5000))
app.debug = True
app.run(host='0.0.0.0', port=port)
我应该实现两个要求来提供我想要模拟的 Web 服务器的确切接口:
- 模拟器应该能够接收/发送不止一次的输入/输出;这意味着我可以向 Web 服务器发送例如三个
sourceAddresses
标签。使用字符串列表 (Array(String)
) 作为类型会更改 WSDL 中list
无效的输入类型。 - 模拟器应该发送具有特定名称的输出值;在我的版本中,它使用模式
${methodName} + Result + ${index}
来命名输出值。我想自己命名它们。
有什么帮助吗?
编辑1:
我也试过Spyne
;我也有同样的问题。