0

我想向我的 ladon 服务发送一个 python 列表。考虑以下 python 列表

lst_col_title = [(1, 'Column1', 10, 'L'),(2, 'Column2', 15, 'L'),(3, 'Column3', 15, 'L'),(4, 'Column4', 10, 'L'),(5, 'Column5', 10, 'L')]

他们是否有任何可能的方式使用 suds 将这种列表发送到 ladon 服务。

编辑 实际上我想使用 suds 将以下 python 变量发送到 ladon 服务

    str_report_name = 'OPENING BALANCE REPORT'
    str_report_format = 'GENERAL'
    lst_main_heading = [('<w><h><b><ds>NAME TRAVEL & TOURISM</ds></b></h></w>', 1), ('<p5><b>     <b></p5>', 2), ('<b><p2>P.O BOX 3000, JEDDAH 12345, KSA, Phone: 02 6845455</p2></b>', 3), ('<b><p2>Email: info@nametravel.com, Fax: 02 6873455, C.R.No: </p2></b>', 4), ('', 5)]
    lst_header = []
    lst_report_header = [['', 'CREDIT NOTE', '', '<u><b><w>'], ['', '', '', ''], ['', 'No: RF/1', '', '<b>'], ['To, CASH KAAU (942)', '', 'Date: 01/01/2011', '<b>'], ['    P.O. Box No. 3263,DOHA,QATAR', '', 'Code: C022      ', '<b>'], ['    Tel: +91 9945 4561 45, Fax: +21 7894 7894', '', '', '<b>'], ['    E-Mail: cashkaau123@gmail.com', '', '', '<b>'], ['', '', '', ''], ['Please note that we have CREDITED your account with following details.', '', '', '']]
    lst_page_header = []
    lst_footer = []
    lst_page_footer = []
    lst_report_footer = [['Two Thousand Two Hundred Seventeen Saudi Riyal Only ', '', '2217.00', '<b>'], ['', '', '', ''], ['Accountant', 'Created By:ADMIN', 'Manager', ''], ['', '', '', ''], ['Signature', '', '', '']]
    lst_report_data = [('', '', '', '', ''), (1, '065-9778821549', 'ABOUNASEF/SEHAM KAMEL MRS', 'JED/CAI/JED', '2584.00'), ('', '', '<i>Less</i>: Cancellation Fee', '', '367.00'), ('', '', '', '', ''), ('', 'THIS IS TO CHECK THE NARRATION PRINTING THIS IS TO CHECK THE NARRATION PRINTING THIS IS TO CHECK THE NARR<i>', '', '', '')]
    bln_show_column_heading = True
    lst_col_title = [(1, 'Column1', 10, 'L'),(2, 'Column2', 15, 'L'),(3, 'Column3', 15, 'L'),(4, 'Column4', 10, 'L'),(5, 'Column5', 10, 'L')]

这是我的服务

@ladonize(str,str,[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING], rtype=str)
def generate_pdf_print(self, str_report_name,str_report_format,lst_main_heading, lst_header, lst_report_header, lst_page_header, lst_footer, lst_report_footer, lst_page_footer, lst_report_data, bln_show_column_heading, lst_col_title, **args):

但是 [PORTABLE_STRING] 不会做我想做的事。

由于我是 Web 服务的新手,我不知道如何处理这些复杂的 python 类型。

更新

我创建了一个新的 ladon 类型

    lst_col_title = [(1, 'Column1', 10, 'L'),(2, 'Column2', 15, 'L'),(3, 'Column3', 15, 'L'),(4, 'Column4', 10, 'L'),(5, 'Column5', 10, 'L')]

作为:

class Table(LadonType):
    slno = int
    col_title = PORTABLE_STRING
    col_size = int
    col_align = PORTABLE_STRING

并将@ladonize 修改为,

@ladonize(str,str,[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[PORTABLE_STRING],[ Table ], rtype=str)

这是正确的方法吗?它给我带来了一个错误

' Server raised fault: '
classname: <class 'AccountEngine.Table'>
Dictionary expected for prime_dict got "<type 'unicode'>" of value "1"'
4

3 回答 3

1

我相信就是您正在寻找的。本质上,您要做的是将每个元组转换为 LadonType,然后返回这些类型的列表,类似于该教程中的listAlbumslistBands方法。这是关于 LadonTypes 的另一个教程。

拉登

from ladon.ladonizer import ladonize
from ladon.types.ladontype import LadonType

class Calculator(object):

    class Table(LadonType):
        slno = int
        colTitle = str
        colSize = int
        colAlign = str


    @ladonize([Table],rtype=int) #notice the [], around table that means the input will be a list of Table LadonTypes.
    def setTables(self,tables):

        return len(tables)

泡沫

from suds.client import Client

client = Client('http://localhost:8888/Calculator/soap/description')

table = client.factory.create('Table')

table.slno = 1
table.colTitle = 'col1'
table.colSize = 10
table.colAlign = 'L'

table2 = client.factory.create('Table')
table2.slno = 2
table2.colTitle = 'col2'
table2.colSize = 15
table2.colAlign = 'L'

tableList = [table, table2]

print client.service.setTables(tableList)
于 2012-10-23T02:25:07.580 回答
0

我通过将每个列表转换为字符串解决了这个问题。

self.generate_pdf_file(str_report_name,
                str_report_format,
                str(lst_main_heading),
                str(lst_header),
                str(lst_report_header),
                str(lst_page_header),
                str(lst_footer),
                str(lst_report_footer),
                str(lst_page_footer),
                str(lst_report_data),
                bln_show_column_heading,
                str(lst_col_title))

现在我的@ladonize 看起来像:

@ladonize(str,str,str,str,str,str,str,str,str,str,str,str, rtype=str)
def generate_pdf_print(self, str_report_name,str_report_format,lst_main_heading, lst_header, lst_report_header, lst_page_header, lst_footer, lst_report_footer, lst_page_footer, lst_report_data, bln_show_column_heading, lst_col_title, **args):

并使用eval恢复这些值,如下所示:

def generate_pdf_print(self,db,
                            str_report_name = 'OPENING BALANCE REPORT',
                            str_report_format = 'GENERAL',
                            lst_main_heading = [],
                            lst_header = [],
                            lst_report_header = [],
                            lst_page_header = [],
                            lst_footer = [],
                            lst_report_footer = [],
                            lst_page_footer = [],
                            lst_report_data = [],
                            bln_show_column_heading = True,
                            lst_col_title = [],
                            int_count_blocks_of_data_in_print = 1,
                            str_pdf_theme = 'Default'
                            ):

    lst_main_heading = eval(lst_main_heading) 
    lst_header = eval(lst_header)
    lst_report_header = eval(lst_report_header) 
    lst_page_header = eval(lst_page_header) 
    lst_footer = eval(lst_footer)
    lst_page_footer = eval(lst_page_footer)
    lst_report_footer = eval(lst_report_footer) 
    lst_report_data = eval(lst_report_data) 
    bln_show_column_heading = True
    lst_col_title = eval(lst_col_title) 
于 2012-10-23T09:10:57.383 回答
0

可以发送 LadonType 对象列表。

例子:

class Mov(LadonType):
    id = int
    text = str

@ladonize([Mov], rtype=PORTABLE_STRING)
def ReceiveMovs(self, moves):
    ....

客户端(ArrayOfxxx,其中 xxx 是对象类名):

moves = client.factory.create("ArrayOfMov")

data1 = client.factory.create("Mov")
data1.id = 1
data1.text = "Test 1"

data2 = client.factory.create("Mov")
data2.id = 2
data2.text = "Test 2"

以及客户端中最重要的部分:

moves["item"] = [data1, data2]
res = client.service.ReceiveMovs(moves=moves)

我希望这有帮助!为我的英语道歉。

于 2014-11-11T10:15:30.227 回答