Automatically add new users to default groups

Review Request #7165 — Created April 4, 2015 and submitted

Information

Review Board
master
5366233...

Reviewers

This change is to make a new user to be a member of default groups, when the user is registered or added to a local-site.

Works done are:
1. handle newly registered user
1) catch user_registered djblets.auth.signals.user_registered signal invoked when a new user is registered
2) add the new user to default groups
2. handle new LocalSite-User relation
1) catch m2m_changed (many-to-many relation changed) signal invoked when a LocalSite-User relation changed
2) invoke local_site_user_added for new relations between LocalSite and User
3) make a receiver of local_site_user_added, to add this newly added user to the LocalSite's default groups

Browser tests done:

  1. make new local site
  2. make new group, addign local the local site to it, and make it a default group
  3. make new group and addign local the local site to it (do not make it default group)
  4. add a user to the local site
  5. see if the user is added to group created in #2
  6. see if the user is not added to group created in #3

Unit Tests done:

  1. check if _add_default_groups signal handler is called properly when a user is registered
  2. check if _add_default_groups signal handler is called properly when local_site.users.add(user)
  3. check if _add_default_groups signal handler is called properly when user.local_site.add(local_site)
  4. check if _add_default_groups adds global default review_groups when a user is registered
  5. check if _add_default_groups adds a local_site's default groups when local_site.users.add(user) or user.local_site.add(local_site)

Edge cases:

  1. there's no default group
  2. there's no non-default group
Description From Last Updated

"to a LocalSite"

chipx86chipx86

"to the default groups"

chipx86chipx86

The start of this file must be: from __future__ import unicode_literals <other imports here>

chipx86chipx86

No hyphen in "local site"

brenniebrennie

No comma.

brenniebrennie

This also needs from __future__ import unicode_literals.

brenniebrennie

Single quotes.

brenniebrennie

This is still LocalSite-specific. You're going to need a version for new users registered on the site. We have a …

chipx86chipx86

You don't need to re-save a model when adding to a ManyToManyField relation.

chipx86chipx86

This is still referring to Local Sites.

chipx86chipx86

I suspect this function will fail to do the right thing if you do: user.local_sites.add(...)

chipx86chipx86

Is there a reason we need to do this, and can't simply trust pk_set in a post_add call?

chipx86chipx86

No blank line here.

chipx86chipx86

Two blank lines here.

chipx86chipx86

Docstrings should be of the form: """Single line summary. Multi-line description. """ The summary should be written in the imperative …

brenniebrennie

This should be in the imperative mood, e.g.: "Handle a many-to-many relationship changing between LocalSites and Users."

brenniebrennie

'_on_local_site_users_changed' imported but unused

reviewbotreviewbot

local variable 'group' is assigned to but never used

reviewbotreviewbot

local variable 'group' is assigned to but never used

reviewbotreviewbot

This needs to all fit on the first line.

brenniebrennie

How about "triggers" instead of "reaches" ?

brenniebrennie

The first sentence of a docstring must fit on the first line. How about: """Handle the m2m_changed event for LocalSite …

brenniebrennie

I think this wording needs a bit of work. How about: "This function handles both the case where users are …

brenniebrennie

Either the second sentence should begin on the previous line, or put a blank line between these.

brenniebrennie

This should probably only choose default groups where local_site is None. Otherwise all new users will additionally be added to …

daviddavid
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. 
      
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. 
      
chipx86
  1. Generally-speaking, this looks good. However, this change should not be limited to Local Sites. It must support Local Sites, but also must work in the standard case of one global site. As such, the docs, help text, comments, etc. should not be LocalSite-specific.

  2. reviewboard/accounts/models.py (Diff revision 2)
     
     
    Show all issues

    "to a LocalSite"

  3. reviewboard/accounts/models.py (Diff revision 2)
     
     
    Show all issues

    "to the default groups"

  4. Show all issues

    The start of this file must be:

    from __future__ import unicode_literals
    
    <other imports here>
    
  5. 
      
brennie
  1. 
      
  2. reviewboard/reviews/models/group.py (Diff revision 2)
     
     
     
     
     
    Show all issues

    No hyphen in "local site"

  3. reviewboard/reviews/models/group.py (Diff revision 2)
     
     
    Show all issues

    No comma.

  4. reviewboard/site/signals.py (Diff revision 2)
     
     
    Show all issues

    This also needs from __future__ import unicode_literals.

  5. reviewboard/site/signals.py (Diff revision 2)
     
     
    Show all issues

    Single quotes.

  6. 
      
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. 
      
chipx86
  1. This is still LocalSite-specific. It needs to be updated to work with the main global site.

    Also, we'll need unit tests as part of this that cover:

    • Newly registered users not on a LocalSite without having any default non-LocalSite groups (just normal groups)
    • Newly registered users not on a LocalSite with having default non-LocalSite groups.
    • Newly registered users not on a LocalSite with having default LocalSite groups.
    • Newly registered users immediately added to a LocalSite, without having any LocalSite default groups (just normal groups).
    • Newly registered users immediately added to a LocalSite, with having default LocalSite default groups.
    • Newly registered users immediately added to a LocalSite, with having default non-LocalSite default groups.
    • Existing users added to a LocalSite, without having any default non-LocalSite groups (just normal groups).
    • Existing users added to a LocalSite, with having default non-LocalSite groups.
    • Existing users added to a LocalSite, with having default LocalSite groups.
    • Actions on either side of that M2M relation.
    • Anything else you can think of that's relevant.
  2. reviewboard/accounts/models.py (Diff revision 3)
     
     
     
     
     
     
     
     
     
     
     
     
     
    Show all issues

    This is still LocalSite-specific. You're going to need a version for new users registered on the site. We have a signal for this in djblets.auth.signals.

  3. reviewboard/accounts/models.py (Diff revision 3)
     
     
     
    Show all issues

    You don't need to re-save a model when adding to a ManyToManyField relation.

  4. reviewboard/reviews/models/group.py (Diff revision 3)
     
     
     
     
     
    Show all issues

    This is still referring to Local Sites.

  5. reviewboard/site/models.py (Diff revision 3)
     
     
     
     
     
     
     
     
     
    Show all issues

    I suspect this function will fail to do the right thing if you do:

    user.local_sites.add(...)
    
  6. reviewboard/site/models.py (Diff revision 3)
     
     
     
     
    Show all issues

    Is there a reason we need to do this, and can't simply trust pk_set in a post_add call?

  7. reviewboard/site/models.py (Diff revision 3)
     
     
     
     
    Show all issues

    No blank line here.

  8. reviewboard/site/signals.py (Diff revision 3)
     
     
     
     
    Show all issues

    Two blank lines here.

  9. 
      
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. 
      
brennie
  1. 
      
  2. reviewboard/accounts/models.py (Diff revision 4)
     
     
     
     
     
    Show all issues

    Docstrings should be of the form:

    """Single line summary.

    Multi-line description.
    """

    The summary should be written in the imperative mood (e.g., "Handle ...").

  3. reviewboard/site/models.py (Diff revision 4)
     
     
     
    Show all issues

    This should be in the imperative mood, e.g.:

    "Handle a many-to-many relationship changing between LocalSites and Users."

  4. 
      
YY
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. reviewboard/reviews/tests.py (Diff revision 5)
     
     
    Show all issues
     '_on_local_site_users_changed' imported but unused
    
  3. reviewboard/reviews/tests.py (Diff revision 5)
     
     
    Show all issues
     local variable 'group' is assigned to but never used
    
  4. reviewboard/reviews/tests.py (Diff revision 5)
     
     
    Show all issues
     local variable 'group' is assigned to but never used
    
  5. 
      
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. 
      
brennie
  1. 
      
  2. reviewboard/accounts/models.py (Diff revision 6)
     
     
     
    Show all issues

    This needs to all fit on the first line.

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

    How about "triggers" instead of "reaches" ?

  4. reviewboard/site/models.py (Diff revision 6)
     
     
     
    Show all issues

    The first sentence of a docstring must fit on the first line.

    How about:
    """Handle the m2m_changed event for LocalSite and User."""

  5. reviewboard/site/models.py (Diff revision 6)
     
     
    Show all issues

    I think this wording needs a bit of work. How about:

    "This function handles both the case where users are added to local sites and local sites are added to the set of a user's local sites. In both of these cases, the local_site_user_added signal is dispatched.

  6. 
      
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. 
      
brennie
  1. This looks good to me!

    I'm going to wait on a review from someone more familiar with signals before landing this.

  2. reviewboard/accounts/models.py (Diff revision 7)
     
     
     
    Show all issues

    Either the second sentence should begin on the previous line, or put a blank line between these.

  3. 
      
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. 
      
david
  1. 
      
  2. reviewboard/accounts/models.py (Diff revision 8)
     
     
    Show all issues

    This should probably only choose default groups where local_site is None. Otherwise all new users will additionally be added to local-site specific groups even if they're not a member of that local site.

  3. 
      
YY
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/testing/testcase.py
        reviewboard/site/signals.py
        reviewboard/reviews/evolutions/__init__.py
        reviewboard/reviews/tests.py
        reviewboard/reviews/models/group.py
        reviewboard/reviews/admin.py
        reviewboard/site/models.py
        reviewboard/accounts/models.py
        reviewboard/reviews/evolutions/is_default_group.py
    
    
  2. 
      
david
  1. I'm going to make some slight changes to the documentation and push this. Thanks!

  2. 
      
YY
Review request changed
Status:
Completed
Change Summary:
Pushed to release-2.5.x (dbc39c4)