<div dir="ltr">Hi,<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 2, 2014 at 3:05 PM, Aurélien Campéas <span dir="ltr"><<a href="mailto:aurelien.campeas@logilab.fr" target="_blank">aurelien.campeas@logilab.fr</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">API<br>
...<br><br>
The API is as such:<br>
<br>
* `insert_entities` (etype, entitiesdicts, postprocessentity)<br>
* `insert_relations` (rtype, fromtoentities)<br>
* `run_deferred_hooks` (errorslist)<br></blockquote><div><br></div><div>What exactly does run_deferred_hooks() do ?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
The first problem with cubicweb/server/hook.py is that it is barely<br>
possible to understand the code. A serious refactoring is overdue.<br></blockquote><div><br></div><div>Could you elaborate a bit more ? I don't pretend this is the best piece of code ever but I find it at least readable.</div>
<div> </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">To sum up: we want the code to be properly TYPED and LEXICALLY SCOPED.<br>
</blockquote><div><br></div><div>I would also prefer explicit parameters rather than hooks holding a state.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

Notation-wise, we might even want something simpler::<br>
<br>
 @entityhook(__select__ = is_instance('Elephant') & ~king(),<br>
             events = ('after_add_entity', 'after_update_entity'))<br>
 def babar_validation(session, event, entity):<br>
     pass<br></blockquote><div><br></div><div>I've experimented this kind of notation and find it nice.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Fact is, it does not make a lot of sense for hooks to compete ... For<br>
one __regid__, we might want that only one hook exists, and not play<br>
the _select_best game.<br></blockquote><div><br></div><div>I agree. Unlike views or components, we usually don't have several implementations for a given __regid__. Is there any actual counter example somewhere ? </div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hooks can be deactivated only by 'category'. However, categories are<br>

not tags (one hook can belong to just one category), and we often need<br>
to deactivate down to the __regid__.<br></blockquote><div> </div><div>Wouldn't __regid__ disappear in your implementation ?</div><div><br></div><div><br></div></div></div></div>