1

我已经使用Flask Enterprisepython 库编写了一个 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 服务器的确切接口:

  1. 模拟器应该能够接收/发送不止一次的输入/输出;这意味着我可以向 Web 服务器发送例如三个sourceAddresses标签。使用字符串列表 ( Array(String)) 作为类型会更改 WSDL 中list无效的输入类型。
  2. 模拟器应该发送具有特定名称的输出值;在我的版本中,它使用模式${methodName} + Result + ${index}来命名输出值。我想自己命名它们。

有什么帮助吗?

编辑1: 我也试过Spyne;我也有同样的问题。

4

0 回答 0