1
2 """Transform a Python data-structure into a OpenFOAM-File-Representation"""
3
4 from PyFoam.Error import error
5 from PyFoam.Basics.DataStructures import Vector,Field,Dimension,DictProxy
6
8 """Class that generates a OpenFOAM-compatible representation of a
9 data-structure"""
10
12 """@param data: data structure that will be turned into a
13 Foam-compatible file
14 @param header: header information that is to be prepended
15 """
16
17 self.data=data
18 self.header=header
19
21 """turns the data into a string"""
22 result=""
23 if self.header:
24 result+="FoamFile\n{\n"+self.strDict(self.header,indent=1)+"}\n\n"
25
26 if type(self.data) in [dict,DictProxy]:
27 result+=self.strDict(self.data)
28 elif type(self.data)==list:
29 result+=self.strList(self.data)
30 elif self.data==None:
31 raise "GeneratorError","<None> found"
32 else:
33 result+=self.strPrimitive(self.data)
34
35 return result
36
38 if type(pri) in [int,float,long,str]:
39 return str(pri)
40 elif type(pri)==bool:
41 if pri:
42 return "yes"
43 else:
44 return "no"
45 elif pri.__class__ in [Vector,Dimension,Field]:
46 return str(pri)
47 else:
48 error("List, Dict or valid primitve expected,",type(self.data),"found in",self.data)
49
51 s=""
52 if type(dic)==DictProxy:
53 order=dic._order
54 else:
55 order=dic.keys()
56 order.sort()
57
58 for k in order:
59 v=dic[k]
60 if k.find("anonymValue")==0:
61 k=""
62
63 s+=(" "*indent)+k
64 if type(v)==str:
65 s+=" "+v+";\n"
66 elif type(v) in [dict,DictProxy]:
67 s+="\n"+(" "*indent)+"{\n"
68 s+=self.strDict(v,indent+2)
69 s+=(" "*indent)+"}\n"
70 elif type(v)==list:
71 s+="\n"
72 s+=self.strList(v,indent+2)+";\n"
73 elif type(v)==tuple:
74 s+=" "+self.strTuple(v,indent+2)+";\n"
75 elif type(v) in [int,float,long]:
76 s+=" "+str(v)+";\n"
77 elif v.__class__ in [Vector,Dimension,Field]:
78 s+=" "+str(v)+";\n"
79 else:
80 error("Unhandled type",type(v)," for",v)
81 return s
82
84 s=""
85
86 theLen=len(lst)
87
88 if len(lst)>2 and len(lst)%2==0:
89 if type(lst[0])==str and (type(lst[1]) in [dict,DictProxy]):
90 theLen=len(lst)/2
91
92 isVector=False
93 if len(lst)==3:
94 isVector=True
95 for l in lst:
96 try:
97 val=float(l)
98 except (ValueError,TypeError):
99 isVector=False
100
101 if isVector:
102 s+="( %s %s %s )" % tuple(lst)
103 else:
104 s+=(" "*indent)+str(theLen)+"\n"
105 s+=(" "*indent)+"(\n"
106 for v in lst:
107 if type(v)==str:
108 s+=(" "*(indent+2))+v+"\n"
109 elif type(v) in [dict,DictProxy]:
110 s+="\n"+(" "*(indent+2))+"{\n"
111 s+=self.strDict(v,indent+4)
112 s+="\n"+(" "*(indent+2))+"}\n"
113 elif type(v)==list:
114 s+="\n"
115 s+=self.strList(v,indent+2)
116 elif type(v)==tuple:
117 s+=" "+self.strTuple(v,indent+2)+" "
118 else:
119 s+=(" "*(indent+2))+str(v)+"\n"
120
121 s+=(" "*indent)+")\n"
122
123 return s
124
126 s=""
127
128 for v in lst:
129 if type(v)==str:
130 s+=v+" "
131 elif type(v) in [dict,DictProxy]:
132 s+="{\n"
133 s+=self.strDict(v,indent+4)
134 s+=(" "*(indent+2))+"} "
135 elif type(v)==list:
136 s+=" "
137 s+=self.strList(v,indent+2)
138 else:
139 s+=(" "*(indent+2))+str(v)+" "
140
141 return s
142