Le 06/03/2012 10:26, Niels Huylebroeck a écrit :
> This depends on whether or not the called function wants to alter the 
> behavior (...) of the calling function and thus seems optional and depends on 
> the case.
Ghostbusters don't cross the streams, though it depends on the case too.
Usually in OpenERP the context is updated to adjust the behavior of 
subsequent function calls, not that of the caller.
For example, there's no reason to mutate the context in an ORM method is 
there?
Furthermore, there is no way a developer can know the impact of changing 
a key in the caller's context, so at first sight I'd consider it a mistake.
Legitimate uses are possible but they would be rare, wouldn't they? They 
should be explicitly documented with a comment.
> I'd just like to point out that the context is not passed with a "pointer" or 
> anything like that(...)
Sorry about the C-ish description. The important part was : it's mutable.

Lionel.

-- 
You received this bug notification because you are a member of OpenERP
sa GTK client R&D, which is a bug assignee.
https://bugs.launchpad.net/bugs/525808

Title:
  Default values should be immutable

Status in OpenERP Addons (modules):
  Opinion
Status in OpenERP Addons extra-trunk series:
  Opinion
Status in OpenERP Addons trunk series:
  Opinion
Status in OpenERP GTK Client:
  Opinion
Status in OpenERP Server:
  Fix Released
Status in OpenERP Server trunk series:
  Fix Released

Bug description:
  Often in the code base we have:
  def foo(...., context={},....):
      ....
  As explained in comment #1, this should be changed to
  def foo(...., context=None,....):
      # you should add this test only if the context is actually used
      if context is None:
          context={}
      ....

  (This bug originally proposed the other way round hence the "nope" in
  comment #1.)

  (xmo) Complements of information:

  * The test should be `context is None` rather than `not context`: the caller 
could provide an empty dict argument {} and expect to have data in it after the 
call, if a test is done using `not context` an empty dict will match and the 
function will be creating a brand new context.
  * The test should *only ever* performed when the current function fetches 
data from the context. If you don't do anything with the context but forward it 
to other functions and methods (e.g. read() or create()), no need to test for 
anything.

To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-addons/+bug/525808/+subscriptions

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to