@@ -29,6 +29,8 @@ type PythonArchEvalHookFile = fn (odoo: &mut SyncOdoo, entry: &Rc<RefCell<EntryP
29
29
30
30
pub struct PythonArchEvalFileHook {
31
31
pub odoo_entry : bool ,
32
+ pub min_version : String ,
33
+ pub max_version : String ,
32
34
pub file_tree : Vec < OYarn > ,
33
35
pub content_tree : Vec < OYarn > , //if set, will provide symbol in file content instead of the file symbol to func
34
36
pub if_exist_only : bool ,
@@ -37,6 +39,96 @@ pub struct PythonArchEvalFileHook {
37
39
38
40
static arch_eval_file_hooks: Lazy < Vec < PythonArchEvalFileHook > > = Lazy :: new ( || { vec ! [
39
41
PythonArchEvalFileHook { odoo_entry: true ,
42
+ min_version: S !( "18.2.0" ) ,
43
+ max_version: S !( "9999.0.0" ) ,
44
+ file_tree: vec![ Sy !( "odoo" ) , Sy !( "init" ) ] ,
45
+ content_tree: vec![ Sy !( "SUPERUSER_ID" ) ] ,
46
+ if_exist_only: true ,
47
+ func: |odoo: & mut SyncOdoo , entry: & Rc <RefCell <EntryPoint >>, file_symbol: Rc <RefCell <Symbol >>, symbol: Rc <RefCell <Symbol >>| {
48
+ let superuser_id = file_symbol. borrow( ) . parent( ) . unwrap( ) . upgrade( ) . unwrap( ) . borrow( ) . get_symbol( & ( vec![ ] , vec![ Sy !( "SUPERUSER_ID" ) ] ) , u32 :: MAX ) ;
49
+ if superuser_id. len( ) == 1 {
50
+ let superuser_id = superuser_id. last( ) . unwrap( ) ;
51
+ symbol. borrow_mut( ) . set_evaluations( vec![ Evaluation {
52
+ symbol: EvaluationSymbol :: new_with_symbol(
53
+ Rc :: downgrade( superuser_id) ,
54
+ Some ( true ) ,
55
+ HashMap :: new( ) ,
56
+ None
57
+ ) ,
58
+ value: None ,
59
+ range: None
60
+ } ] ) ;
61
+ }
62
+ } } ,
63
+ PythonArchEvalFileHook { odoo_entry: true ,
64
+ min_version: S !( "18.2.0" ) ,
65
+ max_version: S !( "9999.0.0" ) ,
66
+ file_tree: vec![ Sy !( "odoo" ) , Sy !( "init" ) ] ,
67
+ content_tree: vec![ Sy !( "_" ) ] ,
68
+ if_exist_only: true ,
69
+ func: |odoo: & mut SyncOdoo , entry: & Rc <RefCell <EntryPoint >>, file_symbol: Rc <RefCell <Symbol >>, symbol: Rc <RefCell <Symbol >>| {
70
+ let superuser_id = file_symbol. borrow( ) . parent( ) . unwrap( ) . upgrade( ) . unwrap( ) . borrow( ) . get_symbol( & ( vec![ ] , vec![ Sy !( "_" ) ] ) , u32 :: MAX ) ;
71
+ if superuser_id. len( ) == 1 {
72
+ let superuser_id = superuser_id. last( ) . unwrap( ) ;
73
+ symbol. borrow_mut( ) . set_evaluations( vec![ Evaluation {
74
+ symbol: EvaluationSymbol :: new_with_symbol(
75
+ Rc :: downgrade( superuser_id) ,
76
+ Some ( true ) ,
77
+ HashMap :: new( ) ,
78
+ None
79
+ ) ,
80
+ value: None ,
81
+ range: None
82
+ } ] ) ;
83
+ }
84
+ } } ,
85
+ PythonArchEvalFileHook { odoo_entry: true ,
86
+ min_version: S !( "18.2.0" ) ,
87
+ max_version: S !( "9999.0.0" ) ,
88
+ file_tree: vec![ Sy !( "odoo" ) , Sy !( "init" ) ] ,
89
+ content_tree: vec![ Sy !( "_lt" ) ] ,
90
+ if_exist_only: true ,
91
+ func: |odoo: & mut SyncOdoo , entry: & Rc <RefCell <EntryPoint >>, file_symbol: Rc <RefCell <Symbol >>, symbol: Rc <RefCell <Symbol >>| {
92
+ let superuser_id = file_symbol. borrow( ) . parent( ) . unwrap( ) . upgrade( ) . unwrap( ) . borrow( ) . get_symbol( & ( vec![ ] , vec![ Sy !( "_lt" ) ] ) , u32 :: MAX ) ;
93
+ if superuser_id. len( ) == 1 {
94
+ let superuser_id = superuser_id. last( ) . unwrap( ) ;
95
+ symbol. borrow_mut( ) . set_evaluations( vec![ Evaluation {
96
+ symbol: EvaluationSymbol :: new_with_symbol(
97
+ Rc :: downgrade( superuser_id) ,
98
+ Some ( true ) ,
99
+ HashMap :: new( ) ,
100
+ None
101
+ ) ,
102
+ value: None ,
103
+ range: None
104
+ } ] ) ;
105
+ }
106
+ } } ,
107
+ PythonArchEvalFileHook { odoo_entry: true ,
108
+ min_version: S !( "18.2.0" ) ,
109
+ max_version: S !( "9999.0.0" ) ,
110
+ file_tree: vec![ Sy !( "odoo" ) , Sy !( "init" ) ] ,
111
+ content_tree: vec![ Sy !( "Command" ) ] ,
112
+ if_exist_only: true ,
113
+ func: |odoo: & mut SyncOdoo , entry: & Rc <RefCell <EntryPoint >>, file_symbol: Rc <RefCell <Symbol >>, symbol: Rc <RefCell <Symbol >>| {
114
+ let superuser_id = file_symbol. borrow( ) . parent( ) . unwrap( ) . upgrade( ) . unwrap( ) . borrow( ) . get_symbol( & ( vec![ ] , vec![ Sy !( "Command" ) ] ) , u32 :: MAX ) ;
115
+ if superuser_id. len( ) == 1 {
116
+ let superuser_id = superuser_id. last( ) . unwrap( ) ;
117
+ symbol. borrow_mut( ) . set_evaluations( vec![ Evaluation {
118
+ symbol: EvaluationSymbol :: new_with_symbol(
119
+ Rc :: downgrade( superuser_id) ,
120
+ Some ( true ) ,
121
+ HashMap :: new( ) ,
122
+ None
123
+ ) ,
124
+ value: None ,
125
+ range: None
126
+ } ] ) ;
127
+ }
128
+ } } ,
129
+ PythonArchEvalFileHook { odoo_entry: true ,
130
+ min_version: S !( "16.0.0" ) ,
131
+ max_version: S !( "9999.0.0" ) ,
40
132
file_tree: vec![ Sy !( "odoo" ) , Sy !( "models" ) ] ,
41
133
content_tree: vec![ Sy !( "BaseModel" ) , Sy !( "env" ) ] ,
42
134
if_exist_only: true ,
@@ -62,6 +154,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
62
154
}
63
155
} } ,
64
156
PythonArchEvalFileHook { odoo_entry: true ,
157
+ min_version: S !( "16.0.0" ) ,
158
+ max_version: S !( "9999.0.0" ) ,
65
159
file_tree: vec![ Sy !( "odoo" ) , Sy !( "models" ) ] ,
66
160
content_tree: vec![ Sy !( "BaseModel" ) , Sy !( "ids" ) ] ,
67
161
if_exist_only: true ,
@@ -81,6 +175,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
81
175
id.set_evaluations(vec![Evaluation::eval_from_symbol(odoo, values, range.clone())]);
82
176
}},*/
83
177
PythonArchEvalFileHook { odoo_entry: true ,
178
+ min_version: S !( "16.0.0" ) ,
179
+ max_version: S !( "9999.0.0" ) ,
84
180
file_tree: vec![ Sy !( "odoo" ) , Sy !( "api" ) ] ,
85
181
content_tree: vec![ Sy !( "Environment" ) , Sy !( "registry" ) ] ,
86
182
if_exist_only: true ,
@@ -101,6 +197,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
101
197
} } ,
102
198
/* As __get__ doesn't exists in each class, the validator will not trigger hooks for them at function level, so we put it at file level. */
103
199
PythonArchEvalFileHook { odoo_entry: true ,
200
+ min_version: S !( "16.0.0" ) ,
201
+ max_version: S !( "9999.0.0" ) ,
104
202
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
105
203
content_tree: vec![ Sy !( "Boolean" ) ] ,
106
204
if_exist_only: true ,
@@ -109,6 +207,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
109
207
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
110
208
} } ,
111
209
PythonArchEvalFileHook { odoo_entry: true ,
210
+ min_version: S !( "16.0.0" ) ,
211
+ max_version: S !( "9999.0.0" ) ,
112
212
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
113
213
content_tree: vec![ Sy !( "Integer" ) ] ,
114
214
if_exist_only: true ,
@@ -117,6 +217,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
117
217
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
118
218
} } ,
119
219
PythonArchEvalFileHook { odoo_entry: true ,
220
+ min_version: S !( "16.0.0" ) ,
221
+ max_version: S !( "9999.0.0" ) ,
120
222
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
121
223
content_tree: vec![ Sy !( "Float" ) ] ,
122
224
if_exist_only: true ,
@@ -125,6 +227,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
125
227
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
126
228
} } ,
127
229
PythonArchEvalFileHook { odoo_entry: true ,
230
+ min_version: S !( "16.0.0" ) ,
231
+ max_version: S !( "9999.0.0" ) ,
128
232
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
129
233
content_tree: vec![ Sy !( "Monetary" ) ] ,
130
234
if_exist_only: true ,
@@ -133,6 +237,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
133
237
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
134
238
} } ,
135
239
PythonArchEvalFileHook { odoo_entry: true ,
240
+ min_version: S !( "16.0.0" ) ,
241
+ max_version: S !( "9999.0.0" ) ,
136
242
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
137
243
content_tree: vec![ Sy !( "Char" ) ] ,
138
244
if_exist_only: true ,
@@ -141,6 +247,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
141
247
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
142
248
} } ,
143
249
PythonArchEvalFileHook { odoo_entry: true ,
250
+ min_version: S !( "16.0.0" ) ,
251
+ max_version: S !( "9999.0.0" ) ,
144
252
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
145
253
content_tree: vec![ Sy !( "Text" ) ] ,
146
254
if_exist_only: true ,
@@ -149,6 +257,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
149
257
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
150
258
} } ,
151
259
PythonArchEvalFileHook { odoo_entry: true ,
260
+ min_version: S !( "16.0.0" ) ,
261
+ max_version: S !( "9999.0.0" ) ,
152
262
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
153
263
content_tree: vec![ Sy !( "Html" ) ] ,
154
264
if_exist_only: true ,
@@ -157,6 +267,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
157
267
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
158
268
} } ,
159
269
PythonArchEvalFileHook { odoo_entry: true ,
270
+ min_version: S !( "16.0.0" ) ,
271
+ max_version: S !( "9999.0.0" ) ,
160
272
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
161
273
content_tree: vec![ Sy !( "Date" ) ] ,
162
274
if_exist_only: true ,
@@ -165,6 +277,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
165
277
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
166
278
} } ,
167
279
PythonArchEvalFileHook { odoo_entry: true ,
280
+ min_version: S !( "16.0.0" ) ,
281
+ max_version: S !( "9999.0.0" ) ,
168
282
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
169
283
content_tree: vec![ Sy !( "Datetime" ) ] ,
170
284
if_exist_only: true ,
@@ -173,6 +287,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
173
287
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
174
288
} } ,
175
289
PythonArchEvalFileHook { odoo_entry: true ,
290
+ min_version: S !( "16.0.0" ) ,
291
+ max_version: S !( "9999.0.0" ) ,
176
292
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
177
293
content_tree: vec![ Sy !( "Binary" ) ] ,
178
294
if_exist_only: true ,
@@ -181,6 +297,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
181
297
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
182
298
} } ,
183
299
PythonArchEvalFileHook { odoo_entry: true ,
300
+ min_version: S !( "16.0.0" ) ,
301
+ max_version: S !( "9999.0.0" ) ,
184
302
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
185
303
content_tree: vec![ Sy !( "Image" ) ] ,
186
304
if_exist_only: true ,
@@ -189,6 +307,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
189
307
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
190
308
} } ,
191
309
PythonArchEvalFileHook { odoo_entry: true ,
310
+ min_version: S !( "16.0.0" ) ,
311
+ max_version: S !( "9999.0.0" ) ,
192
312
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
193
313
content_tree: vec![ Sy !( "Selection" ) ] ,
194
314
if_exist_only: true ,
@@ -197,6 +317,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
197
317
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
198
318
} } ,
199
319
PythonArchEvalFileHook { odoo_entry: true ,
320
+ min_version: S !( "16.0.0" ) ,
321
+ max_version: S !( "9999.0.0" ) ,
200
322
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
201
323
content_tree: vec![ Sy !( "Reference" ) ] ,
202
324
if_exist_only: true ,
@@ -205,6 +327,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
205
327
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
206
328
} } ,
207
329
PythonArchEvalFileHook { odoo_entry: true ,
330
+ min_version: S !( "16.0.0" ) ,
331
+ max_version: S !( "9999.0.0" ) ,
208
332
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
209
333
content_tree: vec![ Sy !( "Json" ) ] ,
210
334
if_exist_only: true ,
@@ -213,6 +337,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
213
337
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
214
338
} } ,
215
339
PythonArchEvalFileHook { odoo_entry: true ,
340
+ min_version: S !( "16.0.0" ) ,
341
+ max_version: S !( "9999.0.0" ) ,
216
342
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
217
343
content_tree: vec![ Sy !( "Properties" ) ] ,
218
344
if_exist_only: true ,
@@ -221,6 +347,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
221
347
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
222
348
} } ,
223
349
PythonArchEvalFileHook { odoo_entry: true ,
350
+ min_version: S !( "16.0.0" ) ,
351
+ max_version: S !( "9999.0.0" ) ,
224
352
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
225
353
content_tree: vec![ Sy !( "PropertiesDefinition" ) ] ,
226
354
if_exist_only: true ,
@@ -229,6 +357,8 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
229
357
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , false ) ;
230
358
} } ,
231
359
PythonArchEvalFileHook { odoo_entry: true ,
360
+ min_version: S !( "16.0.0" ) ,
361
+ max_version: S !( "9999.0.0" ) ,
232
362
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
233
363
content_tree: vec![ Sy !( "Many2one" ) ] ,
234
364
if_exist_only: true ,
@@ -237,13 +367,17 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
237
367
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , true ) ;
238
368
} } ,
239
369
PythonArchEvalFileHook { odoo_entry: true ,
370
+ min_version: S !( "16.0.0" ) ,
371
+ max_version: S !( "9999.0.0" ) ,
240
372
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
241
373
content_tree: vec![ Sy !( "One2many" ) ] ,
242
374
if_exist_only: true ,
243
375
func: |odoo: & mut SyncOdoo , entry: & Rc <RefCell <EntryPoint >>, _file_symbol: Rc <RefCell <Symbol >>, symbol: Rc <RefCell <Symbol >>| {
244
376
PythonArchEvalHooks :: _update_field_init( symbol. clone( ) , true ) ;
245
377
} } ,
246
378
PythonArchEvalFileHook { odoo_entry: true ,
379
+ min_version: S !( "16.0.0" ) ,
380
+ max_version: S !( "9999.0.0" ) ,
247
381
file_tree: vec![ Sy !( "odoo" ) , Sy !( "fields" ) ] ,
248
382
content_tree: vec![ Sy !( "Many2many" ) ] ,
249
383
if_exist_only: true ,
@@ -397,14 +531,16 @@ impl PythonArchEvalHooks {
397
531
let odoo_tree = symbol. borrow ( ) . get_main_entry_tree ( session) ;
398
532
let name = symbol. borrow ( ) . name ( ) . clone ( ) ;
399
533
for hook in arch_eval_file_hooks. iter ( ) {
400
- if name. eq ( hook. file_tree . last ( ) . unwrap ( ) ) {
401
- if ( hook. odoo_entry && session. sync_odoo . has_main_entry && odoo_tree. 0 == hook. file_tree ) || ( !hook. odoo_entry && tree. 0 == hook. file_tree ) {
402
- if hook. content_tree . is_empty ( ) {
403
- ( hook. func ) ( session. sync_odoo , entry_point, symbol. clone ( ) , symbol. clone ( ) ) ;
404
- } else {
405
- let sub_symbol = symbol. borrow ( ) . get_symbol ( & ( vec ! [ ] , hook. content_tree . clone ( ) ) , u32:: MAX ) ;
406
- if !sub_symbol. is_empty ( ) {
407
- ( hook. func ) ( session. sync_odoo , entry_point, symbol. clone ( ) , sub_symbol. last ( ) . unwrap ( ) . clone ( ) ) ;
534
+ if session. sync_odoo . full_version >= hook. min_version && session. sync_odoo . full_version <= hook. max_version {
535
+ if name. eq ( hook. file_tree . last ( ) . unwrap ( ) ) {
536
+ if ( hook. odoo_entry && session. sync_odoo . has_main_entry && odoo_tree. 0 == hook. file_tree ) || ( !hook. odoo_entry && tree. 0 == hook. file_tree ) {
537
+ if hook. content_tree . is_empty ( ) {
538
+ ( hook. func ) ( session. sync_odoo , entry_point, symbol. clone ( ) , symbol. clone ( ) ) ;
539
+ } else {
540
+ let sub_symbol = symbol. borrow ( ) . get_symbol ( & ( vec ! [ ] , hook. content_tree . clone ( ) ) , u32:: MAX ) ;
541
+ if !sub_symbol. is_empty ( ) {
542
+ ( hook. func ) ( session. sync_odoo , entry_point, symbol. clone ( ) , sub_symbol. last ( ) . unwrap ( ) . clone ( ) ) ;
543
+ }
408
544
}
409
545
}
410
546
}
0 commit comments