Support not sending e-mails on WebAPI token creation

Review Request #9258 — Created Oct. 10, 2017 and submitted

Information

Review Board
release-3.0.x
de65698...

Reviewers

Currently when a WebAPI token is created, we always send an e-mail
notifying the user of its creation. However, this is not always ideal.
Some extensions and/or integrations require a WebAPI token in order to
communicate with Review Board from some external service (such as
CircleCI). In this case, we do not need to bother the user with a
notification that the token was created.

Djblets now has support for token update and create signals (via
/r/9275). We use these signals to determine if the token generated was
auto-generated. The notifications module has been modified to listen
to the new signals (instead of the generic post_save signal it was
listening to before) and not send e-mails when the token in question
is auto-generated.

Ran unit tests.

Description From Last Updated

F841 local variable 'webapi_token' is assigned to but never used

reviewbotreviewbot

F401 'reviewboard.webapi.signals.webapi_token_created' imported but unused

reviewbotreviewbot

At this point it might be nice to turn this into a table with signal, handler, sender and then iterate …

daviddavid

We could just have a signal for this in djblets. It's definitely possible that other consumers of djblets.webapi will have …

daviddavid

F401 'reviewboard.webapi.managers.WebAPITokenManager' imported but unused

reviewbotreviewbot

F401 'reviewboard.webapi.signals.webapi_token_updated' imported but unused

reviewbotreviewbot

Maybe a list of tuples?

daviddavid

This docstring needs to be updated now.

daviddavid

The outbox should default to [] at the beginning of every test. I think you can get rid of this …

daviddavid

I think other things assertEqual(len(mail.outbox), 0)

daviddavid

This can fit on one line.

chipx86chipx86

"WebAPIToken"

chipx86chipx86
Checks run (1 failed, 1 succeeded)
flake8 failed.
JSHint passed.

flake8

brennie
david
  1. 
      
  2. reviewboard/notifications/email/__init__.py (Diff revision 2)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    Show all issues

    At this point it might be nice to turn this into a table with signal, handler, sender and then iterate that to do all the connections.

  3. reviewboard/webapi/managers.py (Diff revision 2)
     
     
    Show all issues

    We could just have a signal for this in djblets. It's definitely possible that other consumers of djblets.webapi will have similar wants.

    1. I feel like the wanting email or not is kinda specific to RB itself?

    2. I mean the created signal, not the handler.

    3. Yeah but we are adding the signal basically only for this reason. We have to have the args the signal will accept ahead of time, and having send_email be one of those is weird. Perhaps it would be better to rename this to autogenerated? I would be comfortable with that in djblets.

  4. 
      
brennie
brennie
Review request changed
Change Summary:

Move signals into /r/9275/

Description:
   

Currently when a WebAPI token is created, we always send an e-mail

    notifying the user of its creation. However, this is not always ideal.
    Some extensions and/or integrations require a WebAPI token in order to
    communicate with Review Board from some external service (such as
    CircleCI). In this case, we do not need to bother the user with a
    notification that the token was created.

   
~  

To accomplish this, we now have specific WebAPI creation/update signals,

~   as well as a more specialized manager for the WebAPIToken class so
~   that we may specify at creation time whether or not an e-mail will be
~   sent. Currently the only way to not send an e-mail is via this manager.

~  
~  

The notifications module has been modified to listen to these new

  ~

Djblets now has support for token update and create signals (via

  ~ /r/9275). We use these signals to determine if the token generated was
  ~ auto-generated. The notifications module has been modified to listen
  ~ to the new signals (instead of the generic post_save signal it was
  ~ listening to before) and not send e-mails when the token in question
  ~ is auto-generated.

-   signals (instead of the generic post_save signal it was listening to
-   before) and conditionally not send e-mails when requested.

-  
-  

Testing done:

-   Ran unit tests.

Commit:
5be1a7f85d2dcfc9176275ce31195acb8f272eac
23b1d7a8157d2c7c4840d9506fe3b52286a7729a

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

brennie
brennie
david
  1. 
      
  2. Show all issues

    Maybe a list of tuples?

  3. reviewboard/notifications/tests.py (Diff revision 5)
     
     
    Show all issues

    This docstring needs to be updated now.

  4. reviewboard/notifications/tests.py (Diff revision 5)
     
     
    Show all issues

    The outbox should default to [] at the beginning of every test. I think you can get rid of this line.

  5. reviewboard/notifications/tests.py (Diff revision 5)
     
     
    Show all issues

    I think other things assertEqual(len(mail.outbox), 0)

  6. 
      
brennie
chipx86
  1. 
      
  2. reviewboard/notifications/email/__init__.py (Diff revision 6)
     
     
     
    Show all issues

    This can fit on one line.

  3. reviewboard/notifications/tests.py (Diff revision 6)
     
     
    Show all issues

    "WebAPIToken"

  4. 
      
brennie
chipx86
  1. Ship It!
  2. 
      
brennie
Review request changed
Status:
Completed
Change Summary:
Pushed to release-3.0.x (4c22dec)