[New-bugs-announce] [issue43206] Optional parameter got passed even when not in the call

Abhilash Jindal report at bugs.python.org
Fri Feb 12 08:30:29 EST 2021


New submission from Abhilash Jindal <jindal.abhilash at gmail.com>:

Seeing a very unexpected behavior. A call to __init__ method is receiving extra arguments not present in the caller. Following is a debugger session to demonstrate. Notice that "data_dict" is not being passed in the caller, yet the callee is receiving it!

```python
(Pdb) bt
  /Users/apple/Library/Python/3.8/bin/celery(10)<module>()
-> sys.exit(main())
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/__main__.py(15)main()
-> sys.exit(_main())
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/bin/celery.py(213)main()
-> return celery(auto_envvar_prefix="CELERY")
  /Users/apple/Library/Python/3.8/lib/python/site-packages/click/core.py(829)__call__()
-> return self.main(*args, **kwargs)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/click/core.py(782)main()
-> rv = self.invoke(ctx)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/click/core.py(1259)invoke()
-> return _process_result(sub_ctx.command.invoke(sub_ctx))
  /Users/apple/Library/Python/3.8/lib/python/site-packages/click/core.py(1066)invoke()
-> return ctx.invoke(self.callback, **ctx.params)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/click/core.py(610)invoke()
-> return callback(*args, **kwargs)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/click/decorators.py(21)new_func()
-> return f(get_current_context(), *args, **kwargs)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/bin/base.py(132)caller()
-> return f(ctx, *args, **kwargs)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/bin/worker.py(327)worker()
-> worker.start()
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/worker/worker.py(203)start()
-> self.blueprint.start(self)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/bootsteps.py(116)start()
-> step.start(parent)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/bootsteps.py(365)start()
-> return self.obj.start()
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/concurrency/base.py(129)start()
-> self.on_start()
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/concurrency/prefork.py(107)on_start()
-> P = self._pool = Pool(processes=self.limit,
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/concurrency/asynpool.py(460)__init__()
-> super().__init__(processes, *args, **kwargs)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/pool.py(1046)__init__()
-> self._create_worker_process(i)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/concurrency/asynpool.py(477)_create_worker_process()
-> return super()._create_worker_process(i)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/pool.py(1158)_create_worker_process()
-> w.start()
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/process.py(124)start()
-> self._popen = self._Popen(self)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/context.py(333)_Popen()
-> return Popen(process_obj)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/popen_fork.py(24)__init__()
-> self._launch(process_obj)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/popen_fork.py(79)_launch()
-> code = process_obj._bootstrap()
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/process.py(327)_bootstrap()
-> self.run()
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/process.py(114)run()
-> self._target(*self._args, **self._kwargs)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/pool.py(292)__call__()
-> sys.exit(self.workloop(pid=pid))
  /Users/apple/Library/Python/3.8/lib/python/site-packages/billiard/pool.py(362)workloop()
-> result = (True, prepare_result(fun(*args, **kwargs)))
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/app/trace.py(580)_trace_task_ret()
-> R, I, T, Rstr = trace_task(app.tasks[name],
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/app/trace.py(536)trace_task()
-> return task.__trace__(uuid, args, kwargs, request)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/app/trace.py(405)trace_task()
-> R = retval = fun(*args, **kwargs)
  /Users/apple/Library/Python/3.8/lib/python/site-packages/celery/app/trace.py(697)__protected_call__()
-> return self.run(*args, **kwargs)
  /Users/apple/Documents/research/hint/code/scope/core/nodes.py(23)process()
-> processor(idx)
  /Users/apple/Documents/research/hint/code/scope/core/nodes.py(96)__call__()
-> k = next(iter(self.named_in_edges))
> /Users/apple/Documents/research/hint/code/scope/examples/word_count.py(55)__call__()
-> out_row = Row(node_name, self.schema, from_rows=[input_row])
  /Users/apple/Documents/research/hint/code/scope/model/row.py(21)__init__()
-> self.lnode_name = lnode_name
(Pdb) l.
 50  	    def __call__(self, input_row: Row, *args: Any, **kwargs: Any) -> Generator[Row, None, None]:
 51  	        node_name = kwargs['node_name']
 52  	        line, _ = input_row.pget(self.in_col)
 53  	        words = line.split(self.separator)
 54  	        for word in words:
 55  ->	            out_row = Row(node_name, self.schema, from_rows=[input_row])
 56  	            out_row.pset(self.out_col, word.strip(' \t\r\n,!?.'))
 57  	            yield out_row
 58
 59
 60  	class LowerCase(Processor):
(Pdb) d
> /Users/apple/Documents/research/hint/code/scope/model/row.py(21)__init__()
-> self.lnode_name = lnode_name
(Pdb) l.
 17  	    def __init__(self, lnode_name, schema, id = '*', data_dict = {}, read_only = False, from_rows = None):
 18  	        # type(str, Schema, str, Dict[bytes, bytes], bool, List[Row])
 19  	        if lnode_name == 'processor-1':
 20  	            from celery.contrib import  rdb; rdb.set_trace()
 21  ->	        self.lnode_name = lnode_name
 22  	        self._schema = schema
 23  	        self.id = id
 24  	        self.data_dict = data_dict
 25
 26  	        self.parents = RowRelations(self, RelationType.PARENT)
(Pdb) lnode_name
'processor-1'
(Pdb) data_dict
{b'line': b'When will you realize... Vienna waits for you?'}
(Pdb) from_rows
[<scope.model.row.Row object at 0x103201400>]
(Pdb) from_rows[0]
<scope.model.row.Row object at 0x103201400>
(Pdb) id
'*'
(Pdb) read_only
False
(Pdb)
```

----------
components: macOS
messages: 386864
nosy: ajindal, ned.deily, ronaldoussoren
priority: normal
severity: normal
status: open
title: Optional parameter got passed even when not in the call
type: behavior
versions: Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue43206>
_______________________________________


More information about the New-bugs-announce mailing list