Add an extension for notifying Slack.com

Review Request #6024 — Created June 23, 2014 and submitted

Information

rb-extension-pack
e851f7b...

Reviewers

Slack.com is a popular business chat service which targets software developers.
One of its neat features is that it integrates with a lot of third-party
services, allowing them to send notifications.

This change adds a new extension which integrates Review Board with Slack,
using their "incoming webhooks" integration. This will notify for all of the
usual events, including links to the affected review requests.

Configured this extension in my local devserver and ran through the motions.

Description From Last Updated

Col: 80 E501 line too long (99 > 79 characters)

reviewbotreviewbot

Col: 80 E501 line too long (80 > 79 characters)

reviewbotreviewbot

Col: 80 E501 line too long (82 > 79 characters)

reviewbotreviewbot

Shouldn't we copyright Beanbag, Inc.?

chipx86chipx86

No blank line here.

chipx86chipx86

Col: 80 E501 line too long (99 > 79 characters)

reviewbotreviewbot

This is going to break as soon as we do an update that in any way modifies the file. If …

chipx86chipx86

You shouldn't need the default, since RB already defaults to http, and get() will fall back on that.

chipx86chipx86

Do we also need to escape the path?

chipx86chipx86

Since type is a reserved word, we should probably use status or something.

chipx86chipx86

Can we use the ReviewRequest.* constants, like SUBMITTED?

chipx86chipx86

Should compare with BaseComment.OPEN.

chipx86chipx86

No blank line.

chipx86chipx86

Missing periods in the help text. Is there any URL we can link to for finding the webhook URL? The …

chipx86chipx86

We should use from reviewboard.extensions.packaging import setup here.

chipx86chipx86

Let's add the version stuff to rbslack/__init__.py, for consistency and for releases with the new build stuff.

chipx86chipx86

We should attribute this to Beanbag, like the other extensions have.

chipx86chipx86

Col: 80 E501 line too long (91 > 79 characters)

reviewbotreviewbot

We should switch to "Slack" here and all other places where we refer to their name. The logo shows "#slack," …

chipx86chipx86

We should set released to False up until we do the release. Also, before we label this 1.0, I want …

chipx86chipx86

Should we make this a hidden setting (just an entry in default_settings)? We could then set it to "RBCommons" when …

chipx86chipx86

The wording feels odd. Maybe something like "The name of the channel review request updates are sent to."?

chipx86chipx86

No need for this anymore.

chipx86chipx86

We should also add classifiers to this. There's a brand new classifier we should also provide: Framework :: Review Board

chipx86chipx86

This should be "Slack".

chipx86chipx86
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/extension.py
        rbslack/rbslack/forms.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/extension.py
        rbslack/rbslack/forms.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
  2. rbslack/rbslack/extension.py (Diff revision 1)
     
     
    Show all issues
    Col: 80
     E501 line too long (99 > 79 characters)
    
  3. rbslack/rbslack/extension.py (Diff revision 1)
     
     
    Show all issues
    Col: 80
     E501 line too long (80 > 79 characters)
    
  4. rbslack/rbslack/forms.py (Diff revision 1)
     
     
    Show all issues
    Col: 80
     E501 line too long (82 > 79 characters)
    
  5. 
      
david
reviewbot
  1. Tool: PEP8 Style Checker
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/extension.py
        rbslack/rbslack/forms.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
    
    Tool: Pyflakes
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/extension.py
        rbslack/rbslack/forms.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
  2. rbslack/rbslack/extension.py (Diff revision 2)
     
     
    Show all issues
    Col: 80
     E501 line too long (99 > 79 characters)
    
  3. 
      
chipx86
  1. Can't wait to use this :D

  2. rbslack/COPYING (Diff revision 2)
     
     
    Show all issues

    Shouldn't we copyright Beanbag, Inc.?

  3. rbslack/rbslack/extension.py (Diff revision 2)
     
     
     
     
    Show all issues

    No blank line here.

  4. rbslack/rbslack/extension.py (Diff revision 2)
     
     
    Show all issues

    This is going to break as soon as we do an update that in any way modifies the file.

    If we need to ship a stable logo image for this somewhere, I'd say let's just stick this in a reliable place in an S3 bucket. Probably the images.reviewboard.org bucket somewhere, maybe under a rbslack path so that we don't forget why it's there.

  5. rbslack/rbslack/extension.py (Diff revision 2)
     
     
    Show all issues

    You shouldn't need the default, since RB already defaults to http, and get() will fall back on that.

  6. rbslack/rbslack/extension.py (Diff revision 2)
     
     
    Show all issues

    Do we also need to escape the path?

    1. Path is part of the URL, so no.

  7. rbslack/rbslack/extension.py (Diff revision 2)
     
     
    Show all issues

    Since type is a reserved word, we should probably use status or something.

    1. I'd love to, but the signal uses 'type' as a kwarg.

  8. rbslack/rbslack/extension.py (Diff revision 2)
     
     
     
     
    Show all issues

    Can we use the ReviewRequest.* constants, like SUBMITTED?

  9. rbslack/rbslack/extension.py (Diff revision 2)
     
     
    Show all issues

    Should compare with BaseComment.OPEN.

  10. rbslack/rbslack/forms.py (Diff revision 2)
     
     
     
     
    Show all issues

    No blank line.

  11. rbslack/rbslack/forms.py (Diff revision 2)
     
     
     
     
     
    Show all issues

    Missing periods in the help text.

    Is there any URL we can link to for finding the webhook URL? The account page somehow?

    1. Nothing that can be linked (It's something like "https://beanbag.slack.com/services/2412829182"). Even the account pages include their account name in the URL.

  12. rbslack/setup.py (Diff revision 2)
     
     
    Show all issues

    We should use from reviewboard.extensions.packaging import setup here.

  13. rbslack/setup.py (Diff revision 2)
     
     
    Show all issues

    Let's add the version stuff to rbslack/__init__.py, for consistency and for releases with the new build stuff.

  14. rbslack/setup.py (Diff revision 2)
     
     
    Show all issues

    We should attribute this to Beanbag, like the other extensions have.

  15. 
      
david
reviewbot
  1. Tool: PEP8 Style Checker
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/__init__.py
        rbslack/rbslack/forms.py
        rbslack/rbslack/extension.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
    
    Tool: Pyflakes
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/__init__.py
        rbslack/rbslack/forms.py
        rbslack/rbslack/extension.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
  2. rbslack/rbslack/extension.py (Diff revision 3)
     
     
    Show all issues
    Col: 80
     E501 line too long (91 > 79 characters)
    
    1. I just set things up so that http://images.reviewboard.org/rbslack/logo.png will work.

  3. 
      
david
reviewbot
  1. Tool: PEP8 Style Checker
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/__init__.py
        rbslack/rbslack/forms.py
        rbslack/rbslack/extension.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
    
    Tool: Pyflakes
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/__init__.py
        rbslack/rbslack/forms.py
        rbslack/rbslack/extension.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
  2. 
      
chipx86
  1. 
      
  2. rbslack/README.md (Diff revision 4)
     
     
    Show all issues

    We should switch to "Slack" here and all other places where we refer to their name. The logo shows "#slack," but all text on their site referencing their service uses "Slack."

  3. rbslack/rbslack/__init__.py (Diff revision 4)
     
     
    Show all issues

    We should set released to False up until we do the release.

    Also, before we label this 1.0, I want to spend some more time using this and testing it in production, and also figure out how we can make this all work well with RBCommons.

  4. rbslack/rbslack/extension.py (Diff revision 4)
     
     
    Show all issues

    Should we make this a hidden setting (just an entry in default_settings)? We could then set it to "RBCommons" when we get it working there.

  5. rbslack/rbslack/forms.py (Diff revision 4)
     
     
     
    Show all issues

    The wording feels odd. Maybe something like "The name of the channel review request updates are sent to."?

  6. rbslack/setup.py (Diff revision 4)
     
     
    Show all issues

    No need for this anymore.

  7. 
      
chipx86
  1. 
      
  2. rbslack/setup.py (Diff revision 4)
     
     
    Show all issues

    We should also add classifiers to this.

    There's a brand new classifier we should also provide:

    Framework :: Review Board
    
  3. 
      
david
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/__init__.py
        rbslack/rbslack/forms.py
        rbslack/rbslack/extension.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        rbslack/rbslack/admin_urls.py
        rbslack/rbslack/__init__.py
        rbslack/rbslack/forms.py
        rbslack/rbslack/extension.py
        rbslack/setup.py
    
    Ignored Files:
        rbslack/README.md
        rbslack/COPYING
    
    
  2. 
      
chipx86
  1. 
      
  2. rbslack/README.md (Diff revision 5)
     
     
    Show all issues

    This should be "Slack".

  3. 
      
david
Review request changed
Status:
Completed
Change Summary:
Pushed to master (3af20cd).