Skip to content

Commit bc83889

Browse files
committed
[IMP] add evaluation for request.env
- add evaluation for odoo.http.request (Request class) - add env variable to Request class and its evaluation (Environment class or None)
1 parent 047592d commit bc83889

File tree

2 files changed

+49
-3
lines changed

2 files changed

+49
-3
lines changed

server/src/core/python_arch_builder_hooks.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,27 @@ static arch_class_hooks: Lazy<Vec<PythonArchClassHook>> = Lazy::new(|| {vec![
3838
let mut range = symbol.borrow().range().clone();
3939
let slots = symbol.borrow().get_symbol(&(vec![], vec![Sy!("__slots__")]), u32::MAX);
4040
if slots.len() == 1 {
41-
if slots.len() == 1 {
42-
range = slots[0].borrow().range().clone();
43-
}
41+
range = slots[0].borrow().range().clone();
4442
}
4543
symbol.borrow_mut().add_new_variable(session, Sy!("env"), &range);
4644
}
4745
}
4846
},
47+
PythonArchClassHook {
48+
odoo_entry: true,
49+
trees: vec![
50+
(Sy!("15.3"), Sy!("999.0"), (vec![Sy!("odoo"), Sy!("http")], vec![Sy!("Request")]))
51+
],
52+
func: |session: &mut SessionInfo, _entry_point: &Rc<RefCell<EntryPoint>>, request_class: Rc<RefCell<Symbol>>| {
53+
// ----------- Request.env ------------
54+
let has_env = !request_class.borrow().get_content_symbol(&Sy!("env"), u32::MAX).symbols.is_empty();
55+
if has_env {
56+
return;
57+
}
58+
let range = request_class.borrow().range().clone();
59+
request_class.borrow_mut().add_new_variable(session, Sy!("env"), &range);
60+
}
61+
},
4962
PythonArchClassHook {
5063
odoo_entry: true,
5164
trees: vec![

server/src/core/python_arch_eval_hooks.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,39 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
6464
env.set_doc_string(Some(S!("")));
6565
}
6666
}},
67+
PythonArchEvalFileHook {odoo_entry: true,
68+
// todo? before 15.3: request: WebRequest
69+
trees: vec![(Sy!("15.3"), Sy!("999.0"), (vec![Sy!("odoo"), Sy!("http")], vec![Sy!("request")]))],
70+
if_exist_only: true,
71+
func: |_odoo: &mut SessionInfo, _entry: &Rc<RefCell<EntryPoint>>, file_symbol: Rc<RefCell<Symbol>>, symbol: Rc<RefCell<Symbol>>| {
72+
// --------- request: Request ---------
73+
let request_class = file_symbol.borrow().get_symbol(&(vec![], vec![Sy!("Request")]), u32::MAX);
74+
let Some(request_class) = request_class.last() else {
75+
return;
76+
};
77+
let mut request = symbol.borrow_mut();
78+
request.set_evaluations(vec![Evaluation::eval_from_symbol(&Rc::downgrade(request_class), Some(true))]);
79+
}},
80+
PythonArchEvalFileHook {odoo_entry: true,
81+
trees: vec![(Sy!("15.3"), Sy!("999.0"), (vec![Sy!("odoo"), Sy!("http")], vec![Sy!("Request"), Sy!("env")]))],
82+
if_exist_only: true,
83+
func: |odoo: &mut SessionInfo, _entry: &Rc<RefCell<EntryPoint>>, file_symbol: Rc<RefCell<Symbol>>, symbol: Rc<RefCell<Symbol>>| {
84+
// --------- Request.env: Environment | None ---------
85+
let env_file = odoo.sync_odoo.get_symbol(odoo.sync_odoo.config.odoo_path.as_ref().unwrap(), &(vec![Sy!("odoo"), Sy!("api")], vec![]), u32::MAX);
86+
let Some(env_file) = env_file.last() else {
87+
return;
88+
};
89+
let env_class = env_file.borrow().get_symbol(&(vec![], vec![Sy!("Environment")]), u32::MAX);
90+
let Some(env_class) = env_class.last() else {
91+
return;
92+
};
93+
let mut request_env = symbol.borrow_mut();
94+
request_env.set_evaluations(vec![
95+
Evaluation::eval_from_symbol(&Rc::downgrade(env_class), Some(true)),
96+
Evaluation::new_none()
97+
]);
98+
file_symbol.borrow_mut().add_dependency(&mut env_file.borrow_mut(), BuildSteps::ARCH_EVAL, BuildSteps::ARCH);
99+
}},
67100
PythonArchEvalFileHook {odoo_entry: true,
68101
trees: vec![(Sy!("0.0"), Sy!("18.1"), (vec![Sy!("odoo"), Sy!("models")], vec![Sy!("BaseModel"), Sy!("ids")])),
69102
(Sy!("18.1"), Sy!("999.0"), (vec![Sy!("odoo"), Sy!("orm"), Sy!("models")], vec![Sy!("BaseModel"), Sy!("ids")]))],

0 commit comments

Comments
 (0)