Salome HOME
Copyright update 2020
[modules/yacs.git] / src / yacsloader / Test / xmlrun_orig.sh
1 #!/usr/bin/env python3
2 # Copyright (C) 2006-2020  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import xmlrpc.client,sys
22
23 #example
24 data="""
25 <methodCall>
26   <methodName>echo</methodName>
27   <params>
28     <param><value>hello, world</value></param>
29     <param><value><double>3.5</double></value></param>
30     <param><value><string>coucou</string></value></param>
31   </params>
32 </methodCall>
33 """
34 def echo(args):
35   print("args=",args)
36   if not args:
37     return None
38   elif len(args) == 1:
39     return args[0]
40   else:
41     return args
42
43 with open("input",'r') as f:
44   data=f.read()
45 print(data)
46
47 class Objref:
48   """Wrapper for objrefs """
49   def __init__(self,data=None):
50     self.data=data
51   def __str__(self):
52     return self.data or ""
53
54 # __cmp__ is not defined in Python 3 : strict ordering
55   def __le__(self, other):
56     if isinstance(other, Binary):
57       other = other.data
58     return self.data <= other
59   def __lt__(self, other):
60     if isinstance(other, Binary):
61       other = other.data
62     return self.data < other
63   def __ge__(self, other):
64     if isinstance(other, Binary):
65       other = other.data
66     return self.data >= other
67   def __gt__(self, other):
68     if isinstance(other, Binary):
69       other = other.data
70     return self.data > other
71   def __eq__(self, other):
72     if isinstance(other, Binary):
73       other = other.data
74     return self.data == other
75   def __ne__(self, other):
76     if isinstance(other, Binary):
77       other = other.data
78     return self.data != other
79
80   def decode(self, data):
81     self.data = data
82
83   def encode(self, out):
84     out.write("<value><objref>")
85     out.write(self.data or "")
86     out.write("</objref></value>\n")
87
88 xmlrpc.client.WRAPPERS=xmlrpc.client.WRAPPERS+(Objref,)
89
90 def end_objref(self,data):
91   self.append(Objref(data))
92   self._value=0
93
94 xmlrpc.client.Unmarshaller.end_objref=end_objref
95 xmlrpc.client.Unmarshaller.dispatch["objref"]=end_objref
96
97 params, method = xmlrpc.client.loads(data)
98
99 try:
100   call=eval(method)
101   response=call(params)
102   response = (response,)
103 except:
104   # report exception back to server
105   response = xmlrpc.client.dumps( xmlrpc.client.Fault(1, "%s:%s" % sys.exc_info()[:2]))
106 else:
107   response = xmlrpc.client.dumps( response, methodresponse=1)
108
109 print(response)
110 with open("output",'w') as f:
111   f.write(response)