Skip to content

Commit d18fae3

Browse files
committed
[FIX] Werkzeug hook on recent version
monkeypatch should (and can't) be applied on recent version of werkzeug, as classes and functions are already in werkzeug. No need to apply hooks in this case
1 parent 4e2831e commit d18fae3

File tree

2 files changed

+74
-51
lines changed

2 files changed

+74
-51
lines changed

server/src/core/python_arch_builder_hooks.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -201,17 +201,20 @@ impl PythonArchBuilderHooks {
201201
//doing this patch like this imply that an odoo project will make these functions available for all entrypoints, but heh
202202
let werkzeug_url = session.sync_odoo.get_symbol(symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![]), u32::MAX);
203203
if let Some(werkzeug_url) = werkzeug_url.first() {
204-
//fake variable, as ext_symbols are not seen through get_symbol, etc...
205-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_decode"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
206-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_encode"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
207-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_join"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
208-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_parse"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
209-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_quote"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
210-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_unquote"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
211-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_quote_plus"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
212-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_unquote_plus"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
213-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_unparse"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
214-
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("URL"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
204+
let url_join = werkzeug_url.borrow().get_symbol(&(vec![], vec![Sy!("url_join")]), u32::MAX);
205+
if url_join.is_empty() { //else, installed version is already patched
206+
//fake variable, as ext_symbols are not seen through get_symbol, etc...
207+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_decode"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
208+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_encode"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
209+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_join"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
210+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_parse"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
211+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_quote"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
212+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_unquote"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
213+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_quote_plus"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
214+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_unquote_plus"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
215+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("url_unparse"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
216+
werkzeug_url.borrow_mut().add_new_variable(session, Sy!("URL"), &TextRange::new(TextSize::new(0), TextSize::new(0)));
217+
}
215218
} else {
216219
warn!("Unable to find werkzeug.urls to monkeypatch it");
217220
}

server/src/core/python_arch_eval_hooks.rs

Lines changed: 60 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -312,91 +312,111 @@ static arch_eval_file_hooks: Lazy<Vec<PythonArchEvalFileHook>> = Lazy::new(|| {v
312312
let url_decode = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_decode")]), u32::MAX);
313313
let werkzeug_url_decode = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_decode")]), u32::MAX);
314314
if let Some(werkzeug_url_decode) = werkzeug_url_decode.first() {
315-
if let Some(eval_1) = url_decode.first() {
316-
werkzeug_url_decode.borrow_mut().set_evaluations(vec![
317-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
318-
]);
315+
if werkzeug_url_decode.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
316+
if let Some(eval_1) = url_decode.first() {
317+
werkzeug_url_decode.borrow_mut().set_evaluations(vec![
318+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
319+
]);
320+
}
319321
}
320322
}
321323
let url_encode = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_encode")]), u32::MAX);
322324
let werkzeug_url_encode = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_encode")]), u32::MAX);
323325
if let Some(werkzeug_url_encode) = werkzeug_url_encode.first() {
324-
if let Some(eval_1) = url_encode.first() {
325-
werkzeug_url_encode.borrow_mut().set_evaluations(vec![
326-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
327-
]);
326+
if werkzeug_url_encode.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
327+
if let Some(eval_1) = url_encode.first() {
328+
werkzeug_url_encode.borrow_mut().set_evaluations(vec![
329+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
330+
]);
331+
}
328332
}
329333
}
330334
let url_join = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_join")]), u32::MAX);
331335
let werkzeug_url_join = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_join")]), u32::MAX);
332336
if let Some(werkzeug_url_join) = werkzeug_url_join.first() {
333-
if let Some(eval_1) = url_join.first() {
334-
werkzeug_url_join.borrow_mut().set_evaluations(vec![
335-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
336-
]);
337+
if werkzeug_url_join.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
338+
if let Some(eval_1) = url_join.first() {
339+
werkzeug_url_join.borrow_mut().set_evaluations(vec![
340+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
341+
]);
342+
}
337343
}
338344
}
339345
let url_parse = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_parse")]), u32::MAX);
340346
let werkzeug_url_parse = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_parse")]), u32::MAX);
341347
if let Some(werkzeug_url_parse) = werkzeug_url_parse.first() {
342-
if let Some(eval_1) = url_parse.first() {
343-
werkzeug_url_parse.borrow_mut().set_evaluations(vec![
344-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
345-
]);
348+
if werkzeug_url_parse.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
349+
if let Some(eval_1) = url_parse.first() {
350+
werkzeug_url_parse.borrow_mut().set_evaluations(vec![
351+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
352+
]);
353+
}
346354
}
347355
}
348356
let url_quote = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_quote")]), u32::MAX);
349357
let werkzeug_url_quote = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_quote")]), u32::MAX);
350358
if let Some(werkzeug_url_quote) = werkzeug_url_quote.first() {
351-
if let Some(eval_1) = url_quote.first() {
352-
werkzeug_url_quote.borrow_mut().set_evaluations(vec![
353-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
354-
]);
359+
if werkzeug_url_quote.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
360+
if let Some(eval_1) = url_quote.first() {
361+
werkzeug_url_quote.borrow_mut().set_evaluations(vec![
362+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
363+
]);
364+
}
355365
}
356366
}
357367
let url_unquote = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_unquote")]), u32::MAX);
358368
let werkzeug_url_unquote = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_unquote")]), u32::MAX);
359369
if let Some(werkzeug_url_unquote) = werkzeug_url_unquote.first() {
360-
if let Some(eval_1) = url_unquote.first() {
361-
werkzeug_url_unquote.borrow_mut().set_evaluations(vec![
362-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
363-
]);
370+
if werkzeug_url_unquote.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
371+
if let Some(eval_1) = url_unquote.first() {
372+
werkzeug_url_unquote.borrow_mut().set_evaluations(vec![
373+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
374+
]);
375+
}
364376
}
365377
}
366378
let url_quote_plus = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_quote_plus")]), u32::MAX);
367379
let werkzeug_url_quote_plus = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_quote_plus")]), u32::MAX);
368380
if let Some(werkzeug_url_quote_plus) = werkzeug_url_quote_plus.first() {
369-
if let Some(eval_1) = url_quote_plus.first() {
370-
werkzeug_url_quote_plus.borrow_mut().set_evaluations(vec![
371-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
372-
]);
381+
if werkzeug_url_quote_plus.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
382+
if let Some(eval_1) = url_quote_plus.first() {
383+
werkzeug_url_quote_plus.borrow_mut().set_evaluations(vec![
384+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
385+
]);
386+
}
373387
}
374388
}
375389
let url_unquote_plus = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_unquote_plus")]), u32::MAX);
376390
let werkzeug_url_unquote_plus = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_unquote_plus")]), u32::MAX);
377391
if let Some(werkzeug_url_unquote_plus) = werkzeug_url_unquote_plus.first() {
378-
if let Some(eval_1) = url_unquote_plus.first() {
379-
werkzeug_url_unquote_plus.borrow_mut().set_evaluations(vec![
380-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
381-
]);
392+
if werkzeug_url_unquote_plus.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
393+
if let Some(eval_1) = url_unquote_plus.first() {
394+
werkzeug_url_unquote_plus.borrow_mut().set_evaluations(vec![
395+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
396+
]);
397+
}
382398
}
383399
}
384400
let url_unparse = symbol.borrow().get_symbol(&(vec![], vec![Sy!("url_unparse")]), u32::MAX);
385401
let werkzeug_url_unparse = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("url_unparse")]), u32::MAX);
386402
if let Some(werkzeug_url_unparse) = werkzeug_url_unparse.first() {
387-
if let Some(eval_1) = url_unparse.first() {
388-
werkzeug_url_unparse.borrow_mut().set_evaluations(vec![
389-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
390-
]);
403+
if werkzeug_url_unparse.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
404+
if let Some(eval_1) = url_unparse.first() {
405+
werkzeug_url_unparse.borrow_mut().set_evaluations(vec![
406+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
407+
]);
408+
}
391409
}
392410
}
393411
let url = symbol.borrow().get_symbol(&(vec![], vec![Sy!("URL")]), u32::MAX);
394412
let werkzeug_url_syms = odoo.get_symbol(_file_symbol.borrow().paths()[0].as_str(), &(vec![Sy!("werkzeug"), Sy!("urls")], vec![Sy!("URL")]), u32::MAX);
395413
if let Some(werkzeug_url) = werkzeug_url_syms.first() {
396-
if let Some(eval_1) = url.first() {
397-
werkzeug_url.borrow_mut().set_evaluations(vec![
398-
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
399-
]);
414+
if werkzeug_url.borrow().typ() == SymType::VARIABLE { //if not variable, no need to patch it
415+
if let Some(eval_1) = url.first() {
416+
werkzeug_url.borrow_mut().set_evaluations(vec![
417+
Evaluation::eval_from_symbol(&Rc::downgrade(&eval_1), Some(false))
418+
]);
419+
}
400420
}
401421
}
402422
}},

0 commit comments

Comments
 (0)