slackapi / bolt-python

A framework to build Slack apps using Python
https://slack.dev/bolt-python/
MIT License
1.03k stars 237 forks source link

Rename `logger` to `logger_` in `slack_bolt.kwargs_injection.args.Args` #1032

Closed ChrisHills463 closed 5 months ago

ChrisHills463 commented 5 months ago

It is common practice to define a variable called logger in a script. However, the slack_bolt.kwargs_injection.args.Args function used as a decorator also defines logger, so if you want to call your normal logger in your script you have to give it a different name. It can also be unexpected behaviour, as the author may think they are calling the logger from their module, but actually they are calling a different logger instance altogether.

I understand this would be a breaking change, but I think it would improve usability.

Category (place an x in each of the [ ])

Requirements

Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.

srajiang commented 5 months ago

Hi @ChrisHills463 - Thank you for writing in with this suggestion! Your point about improving usability seems reasonable to me, but I'll defer to @WilliamBergamin or @seratch on tradeoffs regarding making a change like this.

seratch commented 5 months ago

We have resolved the same issue with next function this way: https://github.com/slackapi/bolt-python/pull/394

Adding an alias in the similar way should be a reasonable solution for this need. No breaking change at all.

ChrisHills463 commented 5 months ago

We have resolved the same issue with next function this way: #394

Adding an alias in the similar way should be a reasonable solution for this need. No breaking change at all.

Thanks for the feedback! I think that there is a slight difference in that unlike next, logger is not a Python built-in but rather a common convention, which is why I think it should be renamed to logger_ since when an author refers to logger they are likely thinking that they are referring to their local module variable rather than that of the (decorated) function.

seratch commented 5 months ago

Yeah, there is a difference, but we never bring breaking changes to this SDK (considering the number of existing apps for enterprise companies). Thus, the only option we can think of is to add an alias to support your use case.

ChrisHills463 commented 5 months ago

Yeah, there is a difference, but we never bring breaking changes to this SDK (considering the number of existing apps for enterprise companies). Thus, the only option we can think of is to add an alias to support your use case.

Understood, but adding an alias would be pointless because the original logger is already overwritten at this point, so I think at this point there is no alternative to the author using a name other than logger, or providing their own alias to it.

seratch commented 5 months ago

Just to clarify, bolt-python's keyword argument injection mechanism adds arguments only when you give the name in the argument list (see https://github.com/slackapi/bolt-python/blob/main/slack_bolt/kwargs_injection/utils.py to learn how it works).

Therefore, when you have logger outside the listener function and you give only logger_ in the listener method's argument list, you can use both the global logger and bolt's logger as logger_ within the listener function. If this does not work for your use case, we may not add such change because we've never received this feedback from other developers.

ChrisHills463 commented 5 months ago

Just to clarify, bolt-python's keyword argument injection mechanism adds arguments only when you give the name in the argument list (see https://github.com/slackapi/bolt-python/blob/main/slack_bolt/kwargs_injection/utils.py to learn how it works).

Therefore, when you have logger outside the listener function and you give only logger_ in the listener method's argument list, you can use both the global logger and bolt's logger as logger_ within the listener function. If this does not work for your use case, we may not add such change because we've never received this feedback from other developers.

Thank you for the clarification! This has cleared up my misunderstanding.