-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathapsim_client.py
More file actions
372 lines (367 loc) · 32.7 KB
/
apsim_client.py
File metadata and controls
372 lines (367 loc) · 32.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# -*- coding: gbk -*-
__author__ = 'wxy'
__time__ = '10/19/2021 11:08'
import ujson as json
import jsonpath_ng as jsonpath
from jsonpath_ng.ext import parse
from jsonpath_ng.jsonpath import Fields
from jsonpath_ng.jsonpath import Slice
import jmespath
class build_apsimx():
def __init__(self, task='Models.Core.Simulations, Models',
Version='0.0.0.0',
ExplorerWidth='259',
simulation_name='Simulations',
Children=[],
IncludeInDocumentation=True,
Enabled=True,
ReadOnly=True):
self.Models = {}
self.Models['$type'] = task
self.Models['ExplorerWidth'] = ExplorerWidth
self.Models['Version'] = Version
self.Models['Name'] = simulation_name
self.Models['Children'] = Children
self.Models['IncludeInDocumentation'] = IncludeInDocumentation
self.Models['Enabled'] = Enabled
self.Models['ReadOnly'] = ReadOnly
def add_node(self,node_routing,node_context):
expression = parse(node_routing)
# print(expression)
expression.update_or_create(self.Models,node_context)
return self.Models
if __name__ == '__main__':
start="1900-01-01T00:00:00"
end="2000-12-31T00:00:00"
weather_path='%root%\\Examples\\WeatherFiles\\Dalby.met'
VariableNames=[
"[Clock].Today",
"[Clock].Today.DayOfYear",
"[Wheat].Phenology.Zadok.Stage",
"[Wheat].Phenology.CurrentStageName",
"[Wheat].AboveGround.Wt",
"[Wheat].AboveGround.N",
"[Wheat].Grain.Total.Wt*10 as Yield",
"[Wheat].Grain.Protein",
"[Wheat].Grain.Size",
"[Wheat].Grain.Number",
"[Wheat].Grain.Total.Wt",
"[Wheat].Grain.Total.N",
"[Wheat].Total.Wt"
]
model = build_apsimx(simulation_name='test')
# add Models.Core.Simulations
# 二级节点
model.add_node(node_routing='Children[0]."$type"',node_context='Models.Core.Simulations, Models')
model.add_node(node_routing='Children[0].IsRunning', node_context=False)
model.add_node(node_routing='Children[0].Name', node_context='Simulation')
model.add_node(node_routing='Children[0].Descriptors', node_context=None)
# add Models.Clock
# 三级节点第一个切片
model.add_node(node_routing='Children[0].Children[0]."$type"', node_context='Models.Clock, Models')
model.add_node(node_routing='Children[0].Children[0].Start', node_context=start)
model.add_node(node_routing='Children[0].Children[0].End', node_context=end)
model.add_node(node_routing='Children[0].Children[0].Name', node_context="Clock")
model.add_node(node_routing='Children[0].Children[0].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[0].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[0].ReadOnly', node_context=False)
# add Models.Summary
# 三级节点第二个切片
model.add_node(node_routing='Children[0].Children[1]."$type"', node_context='Models.Summary, Models')
model.add_node(node_routing='Children[0].Children[1].CaptureErrors', node_context=True)
model.add_node(node_routing='Children[0].Children[1].CaptureWarnings', node_context=True)
model.add_node(node_routing='Children[0].Children[1].CaptureSummaryText', node_context=True)
model.add_node(node_routing='Children[0].Children[1].Name', node_context="SummaryFile")
model.add_node(node_routing='Children[0].Children[1].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[1].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[1].ReadOnly', node_context=False)
# add Models.Climate.Weather
#三级节点第三个切片
model.add_node(node_routing='Children[0].Children[2]."$type"', node_context='Models.Climate.Weather, Models')
model.add_node(node_routing='Children[0].Children[2].ConstantsFile', node_context=None)
model.add_node(node_routing='Children[0].Children[2].FileName', node_context=weather_path)
model.add_node(node_routing='Children[0].Children[2].ExcelWorkSheetName', node_context=None)
model.add_node(node_routing='Children[0].Children[2].Name', node_context="Weather")
model.add_node(node_routing='Children[0].Children[2].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[2].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[2].ReadOnly', node_context=False)
# add Models.Soils.Arbitrator.SoilArbitrator
#三级节点第四个切片
model.add_node(node_routing='Children[0].Children[3]."$type"', node_context='Models.Soils.Arbitrator.SoilArbitrator, Models')
model.add_node(node_routing='Children[0].Children[3].Name', node_context="SoilArbitrator")
model.add_node(node_routing='Children[0].Children[3].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[3].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[3].ReadOnly', node_context=False)
# add Models.Core.Zone
#三级节点第五个切片
model.add_node(node_routing='Children[0].Children[4]."$type"', node_context='Models.Core.Zone, Models')
model.add_node(node_routing='Children[0].Children[4].Area', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Slope', node_context=weather_path)
model.add_node(node_routing='Children[0].Children[4].AspectAngle', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Altitude', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Name', node_context="Weather")
# add Models.Report
#四级节点第一个切片
model.add_node(node_routing='Children[0].Children[4].Children[0]."$type"', node_context='Models.Report, Models')
model.add_node(node_routing='Children[0].Children[4].Children[0]."VariableNames', node_context=VariableNames)
model.add_node(node_routing='Children[0].Children[4].Children[0].EventNames', node_context="[Wheat].Harvesting")
model.add_node(node_routing='Children[0].Children[4].Children[0].GroupByVariableName', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[0].Name', node_context="Report")
model.add_node(node_routing='Children[0].Children[4].Children[0].Children', node_context=[])
model.add_node(node_routing='Children[0].Children[4].Children[0].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[0].ReadOnly', node_context=False)
# add Models.Fertiliser
#四级节点第二个切片
model.add_node(node_routing='Children[0].Children[4].Children[1]."$type"', node_context='Models.Fertiliser, Models')
model.add_node(node_routing='Children[0].Children[4].Children[1].ResourceName', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[1].Name', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[1].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[1].ReadOnly', node_context=False)
# add Models.Soils.Soil
#四级节点第三个切片
model.add_node(node_routing='Children[0].Children[4].Children[2]."$type"', node_context='Models.Soils.Soil, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].RecordNumber', node_context=0)
model.add_node(node_routing='Children[0].Children[4].Children[2].ASCOrder', node_context='Vertosol')
model.add_node(node_routing='Children[0].Children[4].Children[2].ASCSubOrder', node_context='Black')
model.add_node(node_routing='Children[0].Children[4].Children[2].SoilType', node_context='Clay')
model.add_node(node_routing='Children[0].Children[4].Children[2].LocalName', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Site', node_context='Norwin')
model.add_node(node_routing='Children[0].Children[4].Children[2].NearestTown', node_context='Norwin')
model.add_node(node_routing='Children[0].Children[4].Children[2].Region', node_context='Darling Downs and Granite Belt')
model.add_node(node_routing='Children[0].Children[4].Children[2].State', node_context='Queensland')
model.add_node(node_routing='Children[0].Children[4].Children[2].Country', node_context='Australia')
model.add_node(node_routing='Children[0].Children[4].Children[2].NaturalVegetation', node_context='Qld. Bluegrass, possible Qld. Blue gum')
model.add_node(node_routing='Children[0].Children[4].Children[2].ApsoilNumber', node_context='900')
model.add_node(node_routing='Children[0].Children[4].Children[2].Latitude', node_context=-27.581836)
model.add_node(node_routing='Children[0].Children[4].Children[2].Longitude', node_context=151.320206)
model.add_node(node_routing='Children[0].Children[4].Children[2].LocationAccuracy', node_context=" +/- 20m")
model.add_node(node_routing='Children[0].Children[4].Children[2].YearOfSampling', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].DataSource', node_context="CSIRO Sustainable Ecosystems, Toowoomba; Characteriesd as part of the GRDC funded project\"Doing it better, doing it smarter, managing soil water in Australian agriculture' 2011")
model.add_node(node_routing='Children[0].Children[4].Children[2].Comments', node_context='OC, CLL for all crops estimated-based on Bongeen Mywybilla Soil No1')
model.add_node(node_routing='Children[0].Children[4].Children[2].Name', node_context='Soil')
# add Models.Soils.Physical
#五级节点第一个切片
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0]."$type"', node_context='Models.Soils.Physical, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Depth', node_context=depth)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Thickness', node_context='Thickness')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].ParticleSizeClay', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].ParticleSizeSand', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].ParticleSizeSilt', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Rocks', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Texture', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].BD', node_context=BD)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].AirDry', node_context=AirDry)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].LL15', node_context=LL15)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].DUL', node_context=DUL)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].SAT', node_context=SAT)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].KS', node_context=KS)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].BDMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].AirDryMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].LL15Metadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].DULMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].SATMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].KSMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].RocksMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].TextureMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].ParticleSizeSandMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].ParticleSizeSiltMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].ParticleSizeClayMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Name', node_context='Physical')
# add Models.Soils.SoilCrop, Models
# 六级节点第一个切片
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0]."$type"', node_context='Models.Soils.SoilCrop, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].LL', node_context=LL)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].KL', node_context=KL)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].XF', node_context=XF)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].LLMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].KLMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].XFMetadata', node_context=None)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].Name', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[0].Children[0].ReadOnly', node_context=False)
# add Models.WaterModel.WaterBalance
# 五级节点第二个切片
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1]."$type"',node_context='Models.WaterModel.WaterBalance, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].SummerDate', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].SummerU',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].SummerCona',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].WinterDate',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].WinterU',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].WinterCona', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].DiffusConst',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].DiffusSlope', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].Salb', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].CN2Bare', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].CNRed', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].CNCov', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].DischargeWidth', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].CatchmentArea',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].Thickness',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].SWCON',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].KLAT',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].ResourceName',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].Name',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].Enabled',node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[1].ReadOnly',node_context=False)
# add Models.Soils.Organic
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2]."$type"',node_context='Models.Soils.Organic, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].Depth',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].FOMCNRatio',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].Thickness',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].Carbon',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].SoilCNRatio',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].FBiom',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].FInert', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].FOM', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].CarbonMetadata', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].FOMMetadata', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].CarbonMetadata', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].Name',node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].Children',node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].Enabled',node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[2].ReadOnly',node_context=False)
# add Models.Soils.Chemical
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3]."$type"',node_context='Models.Soils.Chemical, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].Depth',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].Thickness',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].NO3N',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].NH4N',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].PH',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].CL',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].EC', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].ESP', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].LabileP', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].UnavailableP', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].ECMetadata', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].ESPMetadata',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].PHMetadata',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].Name',node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].Children',node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].Enabled',node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[3].ReadOnly',node_context=False)
# add Models.Soils.InitialWater
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4]."$type"',node_context='Models.Soils.InitialWater, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4].PercentMethod', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4].FractionFull',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4].DepthWetSoil', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4].RelativeTo', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4].Name', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[4].ReadOnly', node_context=False)
# add Models.Soils.Sample
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5]."$type"',node_context='Models.Soils.Sample, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].Depth',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].Thickness',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].NO3',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].NH4',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].LabileP',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].SW',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].OC', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].EC', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].CL', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].ESP', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].PH', node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].SWUnits',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].OCUnits',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].PHUnits',node_context='Fertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].Name',node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].Children',node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].Enabled',node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[5].ReadOnly',node_context=False)
# add Models.Soils.CERESSoilTemperature
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[6]."$type"',node_context='Models.Soils.CERESSoilTemperature, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[6].Name', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[6].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[6].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[6].ReadOnly', node_context=False)
# add Models.Soils.Nutrients.Nutrient
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[7]."$type"',node_context='Models.Soils.Nutrients.Nutrient, Models')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[7].ResourceName', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[7].Name', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[7].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[2].Children[7].ReadOnly', node_context=False)
# add Models.Surface.SurfaceOrganicMatter
model.add_node(node_routing='Children[0].Children[4].Children[3]."$type"',node_context='Models.Surface.SurfaceOrganicMatter, Models')
model.add_node(node_routing='Children[0].Children[4].Children[3].InitialResidueName', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[3].InitialResidueType', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[3].InitialResidueMass', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[3].InitialStandingFraction', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[3].InitialCPR', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[3].InitialCNR', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[3].ResourceName',node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[3].Name', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[3].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[3].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[3].ReadOnly', node_context=False)
# add Models.PMF.Plant, Models
model.add_node(node_routing='Children[0].Children[4].Children[4]."$type"',node_context='Models.PMF.Plant, Models')
model.add_node(node_routing='Children[0].Children[4].Children[4].ResourceName', node_context='WheatSoil')
model.add_node(node_routing='Children[0].Children[4].Children[4].Name', node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[4].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[4].ReadOnly', node_context=False)
# add Models.MicroClimate, Models
model.add_node(node_routing='Children[0].Children[4].Children[5]."$type"',node_context='Models.MicroClimate, Models')
model.add_node(node_routing='Children[0].Children[4].Children[5].a_interception', node_context=0)
model.add_node(node_routing='Children[0].Children[4].Children[5].b_interception', node_context=1)
model.add_node(node_routing='Children[0].Children[4].Children[5].c_interception', node_context=0)
model.add_node(node_routing='Children[0].Children[4].Children[5].d_interception', node_context=0)
model.add_node(node_routing='Children[0].Children[4].Children[5].SoilHeatFluxFraction', node_context=0.4)
model.add_node(node_routing='Children[0].Children[4].Children[5].MinimumHeightDiffForNewLayer', node_context=0.0)
model.add_node(node_routing='Children[0].Children[4].Children[5].NightInterceptionFraction',node_context=0.5)
model.add_node(node_routing='Children[0].Children[4].Children[5].ReferenceHeight',node_context=2.0)
model.add_node(node_routing='Children[0].Children[4].Children[5].Name', node_context='MicroClimate')
model.add_node(node_routing='Children[0].Children[4].Children[5].Children', node_context='[]')
model.add_node(node_routing='Children[0].Children[4].Children[5].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[5].ReadOnly', node_context=False)
# add Models.Manager, Models
model.add_node(node_routing='Children[0].Children[4].Children[6]."$type"',node_context='Models.Manager, Models')
model.add_node(node_routing='Children[0].Children[4].Children[6].Code', node_context=code1)
model.add_node(node_routing='Children[0].Children[4].Children[6].Parameters', node_context=parameter1)
model.add_node(node_routing='Children[0].Children[4].Children[6].Name', node_context='SowingFertiliser')
model.add_node(node_routing='Children[0].Children[4].Children[6].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[6].ReadOnly', node_context=False)
# add Models.Manager, Models
model.add_node(node_routing='Children[0].Children[4].Children[7]."$type"',node_context='Models.Manager, Models')
model.add_node(node_routing='Children[0].Children[4].Children[7].Code', node_context=code2)
model.add_node(node_routing='Children[0].Children[4].Children[7].Parameters', node_context=parameter2)
model.add_node(node_routing='Children[0].Children[4].Children[7].Name', node_context='Harvest')
model.add_node(node_routing='Children[0].Children[4].Children[7].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[7].ReadOnly', node_context=False)
# add Models.Manager, Models
model.add_node(node_routing='Children[0].Children[4].Children[8]."$type"',node_context='Models.Manager, Models')
model.add_node(node_routing='Children[0].Children[4].Children[8].Code', node_context=code3)
model.add_node(node_routing='Children[0].Children[4].Children[8].Parameters', node_context=parameter3)
model.add_node(node_routing='Children[0].Children[4].Children[8].Name', node_context='SowingRule1')
model.add_node(node_routing='Children[0].Children[4].Children[8].Enabled', node_context=True)
model.add_node(node_routing='Children[0].Children[4].Children[8].ReadOnly', node_context=False)
# add Models.Storage.DataStore, Models
model.add_node(node_routing='Children[1]."$type"', node_context='Models.Storage.DataStore, Models')
model.add_node(node_routing='Children[1].useFirebird', node_context=False)
model.add_node(node_routing='Children[1].CustomFileName', node_context=None)
model.add_node(node_routing='Children[1].Name', node_context='DataStore')
model.add_node(node_routing='Children[1].Children', node_context='[]')
model.add_node(node_routing='Children[1].Enabled', node_context=True)
model.add_node(node_routing='Children[1].ReadOnly', node_context=False)
print(model.Models)
# model.add_node(node_routing)
# if __name__ == '__main__':
# ApsimClient=ApsimClient()
# model = build_apsimx()
# print(model.add_node)
# with open('E:\APSIM\Examples/Wheat.apsimx') as f:
# lines =f.read()
# res=json.loads(lines)
# type = jmespath.search('"$type"',res)
# ExplorerWidth = jmespath.search('ExplorerWidth', res)
# Version = jmespath.search('Version', res)
# Name = jmespath.search('Name', res)
# Children = jmespath.search('Children', res)
# Enabled = jmespath.search('Enabled', res)
# ReadOnly = jmespath.search('ReadOnly', res)
# for k,v in res.items():
# print(k,v)
# for i in range(len(Children)):
# Children1 = jmespath.search('[%s]'%(str(i)), Children)
# print(Children1)