← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~bac/launchpad/bug-602773 into lp:launchpad

 

Brad Crittenden has proposed merging lp:~bac/launchpad/bug-602773 into lp:launchpad.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)
Related bugs:
  #602773 Remove PMT enum
  https://bugs.launchpad.net/bugs/602773


= Summary =

Private membership teams can now be replaced by PRIVATE teams.  Having
both does nothing but cause confusion.

Sorry for the super-big branch.  It didn't make sense to do this piecemeal.

== Proposed fix ==

The UI was previously fixed to not allow the creation of new PMTs.  This
follow-on branch removes the dbenum and all uses of PMTs.

All PMTs in the production database were converted to private teams.  It
is no longer possible to create new ones if using the UI on edge.  All
members of commerical-admins have been notified and asked not to create
new ones on lpnet.

Before the next rollout we must ensure no PMTs have crept back into the
database.

== Pre-implementation notes ==

Chats with Curtis.

== Implementation details ==

As above.

== Tests ==

make check

== Demo and Q/A ==

No real way to demo since the UI changes landed earlier.

= Launchpad lint =

I'll look into these lint issues but I suspect many are false.

Checking for conflicts and issues in changed files.

Linting changed files:
  lib/lp/code/model/branchvisibilitypolicy.py
  lib/lp/soyuz/model/archivesubscriber.py
  lib/lp/translations/interfaces/potemplate.py
  database/sampledata/current.sql
  database/sampledata/current-dev.sql
  lib/lp/bugs/model/bugsubscription.py
  lib/canonical/launchpad/security.py
  lib/lp/registry/vocabularies.py
  lib/lp/registry/model/productseries.py
  lib/lp/registry/interfaces/productrelease.py
  lib/lp/registry/tests/test_user_vocabularies.py
  lib/lp/code/interfaces/branch.py
  lib/lp/soyuz/interfaces/archive.py
  lib/lp/registry/model/productrelease.py
  lib/lp/registry/doc/private-team-roles.txt
  lib/lp/registry/browser/team.py
  lib/lp/registry/browser/tests/mailinglist-views.txt
  lib/lp/translations/model/translationimportqueue.py
  lib/lp/registry/interfaces/product.py
  lib/lp/registry/interfaces/structuralsubscription.py
  lib/lp/registry/doc/private-team-visibility.txt
  lib/lp/soyuz/interfaces/archivesubscriber.py
  lib/lp/registry/doc/vocabularies.txt
  lib/canonical/launchpad/fields/__init__.py
  lib/canonical/launchpad/doc/tales.txt
  lib/lp/code/model/branchsubscription.py
  lib/lp/soyuz/browser/archivesubscription.py
  lib/lp/code/model/branch.py
  lib/lp/registry/interfaces/productseries.py
  lib/lp/bugs/model/bugactivity.py
  lib/lp/bugs/interfaces/bugsubscription.py
  lib/lp/registry/model/structuralsubscription.py
  lib/lp/bugs/browser/bugtask.py
  lib/lp/registry/doc/person.txt
  lib/lp/registry/interfaces/person.py
  lib/lp/registry/model/product.py
  lib/lp/soyuz/model/archive.py
  lib/lp/bugs/interfaces/bugsupervisor.py
  lib/lp/code/interfaces/sourcepackagerecipe.py
  lib/lp/registry/browser/person.py
  lib/lp/registry/model/person.py
  lib/lp/code/interfaces/branchvisibilitypolicy.py
  lib/lp/registry/tests/test_person.py
  lib/lp/registry/tests/mailinglists_helper.py
  lib/lp/code/interfaces/branchsubscription.py
  lib/lp/bugs/model/bugtask.py
  lib/lp/registry/model/distribution.py
  lib/lp/bugs/interfaces/bugtask.py
  lib/lp/translations/interfaces/translationimportqueue.py
  lib/lp/soyuz/browser/archive.py

./lib/lp/translations/interfaces/potemplate.py
     736: E301 expected 1 blank line, found 2
     750: E301 expected 1 blank line, found 2
./lib/lp/bugs/model/bugsubscription.py
      31: E202 whitespace before ')'
      38: E202 whitespace before ')'
./lib/canonical/launchpad/security.py
     645: E302 expected 2 blank lines, found 1
    1261: E302 expected 2 blank lines, found 1
    1485: E302 expected 2 blank lines, found 1
./lib/lp/registry/vocabularies.py
     180: E302 expected 2 blank lines, found 1
     223: E202 whitespace before ')'
     231: E302 expected 2 blank lines, found 1
     271: E202 whitespace before ')'
     549: E202 whitespace before ')'
     631: E302 expected 2 blank lines, found 1
     984: E202 whitespace before ')'
    1272: E202 whitespace before ']'
    1411: E202 whitespace before ')'
    1429: E202 whitespace before ')'
    1508: E301 expected 1 blank line, found 0
./lib/lp/registry/interfaces/productrelease.py
     213: E202 whitespace before ')'
     260: E202 whitespace before ')'
     269: E202 whitespace before ')'
     277: E202 whitespace before ')'
     301: E202 whitespace before ')'
     307: E202 whitespace before ')'
     323: E202 whitespace before ')'
     360: E302 expected 2 blank lines, found 1
./lib/lp/code/interfaces/branch.py
    1113: Line exceeds 78 characters.
./lib/lp/soyuz/interfaces/archive.py
     528: E301 expected 1 blank line, found 0
     545: E202 whitespace before ')'
     570: E501 line too long (81 characters)
     572: E501 line too long (80 characters)
     577: E501 line too long (81 characters)
     580: E501 line too long (80 characters)
     655: E301 expected 1 blank line, found 0
     678: E301 expected 1 blank line, found 0
     701: E301 expected 1 blank line, found 0
     801: E301 expected 1 blank line, found 0
    1138: E302 expected 2 blank lines, found 1
    1435: E301 expected 1 blank line, found 2
    1664: E303 too many blank lines (3)
     521: Line exceeds 78 characters.
     570: Line exceeds 78 characters.
     572: Line exceeds 78 characters.
     577: Line exceeds 78 characters.
     580: Line exceeds 78 characters.
    1449: Line exceeds 78 characters.
./lib/lp/registry/browser/team.py
     128: E241 multiple spaces after ','
./lib/lp/translations/model/translationimportqueue.py
    1235: E202 whitespace before ']'
./lib/lp/registry/interfaces/product.py
     899: E301 expected 1 blank line, found 2
./lib/lp/registry/interfaces/structuralsubscription.py
      52: E501 line too long (106 characters)
      58: E501 line too long (130 characters)
      64: E501 line too long (149 characters)
      83: E501 line too long (125 characters)
      89: E501 line too long (143 characters)
      52: Line exceeds 78 characters.
      58: Line exceeds 78 characters.
      64: Line exceeds 78 characters.
      83: Line exceeds 78 characters.
      89: Line exceeds 78 characters.
./lib/lp/registry/doc/private-team-visibility.txt
      41: want exceeds 78 characters.
      46: want exceeds 78 characters.
      66: want exceeds 78 characters.
      92: want exceeds 78 characters.
./lib/lp/soyuz/interfaces/archivesubscriber.py
      15: E202 whitespace before ']'
     112: E302 expected 2 blank lines, found 1
./lib/lp/registry/doc/vocabularies.txt
       0: narrative uses a moin header.
      23: narrative uses a moin header.
     181: narrative uses a moin header.
     225: narrative uses a moin header.
     311: narrative uses a moin header.
     336: narrative uses a moin header.
     494: narrative uses a moin header.
     508: narrative uses a moin header.
     542: narrative uses a moin header.
     583: narrative uses a moin header.
     601: narrative uses a moin header.
     692: narrative uses a moin header.
     711: narrative uses a moin header.
     743: narrative uses a moin header.
     949: narrative uses a moin header.
    1050: narrative uses a moin header.
    1101: narrative uses a moin header.
    1143: narrative uses a moin header.
    1187: narrative uses a moin header.
    1248: narrative uses a moin header.
    1311: narrative uses a moin header.
    1346: narrative uses a moin header.
./lib/canonical/launchpad/fields/__init__.py
      89: E302 expected 2 blank lines, found 1
     218: E302 expected 2 blank lines, found 1
     238: E302 expected 2 blank lines, found 1
     244: E302 expected 2 blank lines, found 1
     254: E302 expected 2 blank lines, found 1
     265: E302 expected 2 blank lines, found 1
     341: E301 expected 1 blank line, found 0
     545: E302 expected 2 blank lines, found 1
     174: Line exceeds 78 characters.
./lib/lp/soyuz/browser/archivesubscription.py
     204: E202 whitespace before ')'
     316: E202 whitespace before '}'
./lib/lp/registry/model/structuralsubscription.py
     108: W602 deprecated form of raising exception
     113: E301 expected 1 blank line, found 0
     241: E231 missing whitespace after ','
./lib/lp/bugs/browser/bugtask.py
     174: E301 expected 1 blank line, found 0
     183: E302 expected 2 blank lines, found 1
     187: E301 expected 1 blank line, found 0
     197: E302 expected 2 blank lines, found 1
     208: E302 expected 2 blank lines, found 1
     221: W601 .has_key() is deprecated, use 'in'
     989: E202 whitespace before '}'
    1357: E231 missing whitespace after ','
    1732: E241 multiple spaces after ','
    2173: E301 expected 1 blank line, found 2
    2254: E231 missing whitespace after ','
    2818: E203 whitespace before ':'
    2971: E302 expected 2 blank lines, found 3
    3035: E231 missing whitespace after ','
    3292: E202 whitespace before ')'
    3771: E301 expected 1 blank line, found 0
    1115: Line exceeds 78 characters.
    2096: Line exceeds 78 characters.
./lib/lp/registry/interfaces/person.py
     134: E301 expected 1 blank line, found 0
     447: E302 expected 2 blank lines, found 1
./lib/lp/registry/model/product.py
      83: 'IBranchSet' imported but unused
      81: 'shortlist' imported but unused
./lib/lp/soyuz/model/archive.py
     338: E203 whitespace before ':'
     433: E231 missing whitespace after ','
     503: E231 missing whitespace after ','
     545: E231 missing whitespace after ','
     570: E211 whitespace before '('
     617: E231 missing whitespace after ','
     626: E231 missing whitespace after ','
     650: E203 whitespace before ','
     722: E202 whitespace before ']'
     752: E203 whitespace before ':'
     777: E301 expected 1 blank line, found 0
     916: E202 whitespace before ')'
     924: E202 whitespace before ')'
     957: E202 whitespace before '}'
    1671: E301 expected 1 blank line, found 2
    1780: E301 expected 1 blank line, found 2
    1854: E231 missing whitespace after ','
    1979: E231 missing whitespace after ','
./lib/lp/code/interfaces/sourcepackagerecipe.py
      31: E202 whitespace before ')'
      58: E231 missing whitespace after ','
     135: E202 whitespace before ')'
     135: E231 missing whitespace after ','
./lib/lp/registry/tests/test_person.py
      29: 'BugSubscription' imported but unused
      29: 'BugTask' imported but unused
./lib/lp/registry/tests/mailinglists_helper.py
      48: E301 expected 1 blank line, found 0
./lib/lp/code/interfaces/branchsubscription.py
      75: E202 whitespace before ')'
./lib/lp/bugs/model/bugtask.py
      96: E241 multiple spaces after ':'
      96: E222 multiple spaces after operator
     147: E302 expected 2 blank lines, found 1
     194: E301 expected 1 blank line, found 0
     399: E202 whitespace before '}'
     415: E301 expected 1 blank line, found 0
     481: E231 missing whitespace after ','
     527: E221 multiple spaces before operator
     588: E222 multiple spaces after operator
     774: W602 deprecated form of raising exception
     833: E231 missing whitespace after ','
    1103: E222 multiple spaces after operator
    1105: E222 multiple spaces after operator
    1669: E501 line too long (80 characters)
    1645: E201 whitespace after '('
    1746: E501 line too long (80 characters)
    1838: E231 missing whitespace after ','
    1669: Line exceeds 78 characters.
    1672: Line exceeds 78 characters.
    1746: Line exceeds 78 characters.
./lib/lp/registry/model/distribution.py
     204: E301 expected 1 blank line, found 2
     450: E203 whitespace before ':'
     665: E222 multiple spaces after operator
     990: E202 whitespace before ')'
     998: E202 whitespace before ']'
    1039: E202 whitespace before ')'
    1059: E202 whitespace before ')'
    1092: E231 missing whitespace after ','
    1096: E231 missing whitespace after ','
    1108: E231 missing whitespace after ','
    1124: E202 whitespace before ')'
    1372: E203 whitespace before ':'
./lib/lp/soyuz/browser/archive.py
     295: E301 expected 1 blank line, found 0
     374: E301 expected 1 blank line, found 0
     525: E301 expected 1 blank line, found 0
     633: E301 expected 1 blank line, found 2
     740: W601 .has_key() is deprecated, use 'in'
     921: E202 whitespace before '}'
    1163: E302 expected 2 blank lines, found 1
    1863: E302 expected 2 blank lines, found 1
    1919: E222 multiple spaces after operator
-- 
https://code.launchpad.net/~bac/launchpad/bug-602773/+merge/31162
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~bac/launchpad/bug-602773 into lp:launchpad.
=== modified file 'database/sampledata/current-dev.sql'
--- database/sampledata/current-dev.sql	2010-07-27 18:36:16 +0000
+++ database/sampledata/current-dev.sql	2010-07-28 15:06:10 +0000
@@ -4180,7 +4180,7 @@
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243609, 'Katie', NULL, NULL, 'katie', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-07 13:43:20.393704', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 8, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243609);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243610, 'Gold Member', NULL, NULL, 'member', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 1, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243610);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243611, 'Owner', NULL, NULL, 'owner', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 1, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243611);
-INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243612, 'My Team', 243611, NULL, 'myteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 20, false, NULL);
+INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243612, 'My Team', 243611, NULL, 'myteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 30, false, NULL);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243613, 'Other Team', 243611, NULL, 'otherteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, NULL);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243614, 'josh', NULL, NULL, 'jbuhl-nospam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-18 16:31:34.790641', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 15, 'when the comments for debbugs #308994 were imported into Launchpad.', 62, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243614);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243615, 'Sjoerd Simons', NULL, NULL, 'sjoerd', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-18 16:31:34.790641', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 15, 'when the comments for debbugs #308994 were imported into Launchpad.', 62, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243615);
@@ -5467,7 +5467,7 @@
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243609, 'Katie', NULL, NULL, 'katie', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-07 13:43:20.393704', NULL, NULL, NULL, false, 8, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243609);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243610, 'Gold Member', NULL, NULL, 'member', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, 1, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243610);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243611, 'Owner', NULL, NULL, 'owner', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, 1, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243611);
-INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243612, 'My Team', 243611, NULL, 'myteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 20, false, NULL);
+INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243612, 'My Team', 243611, NULL, 'myteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 30, false, NULL);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243613, 'Other Team', 243611, NULL, 'otherteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, NULL);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243614, 'josh', NULL, NULL, 'jbuhl-nospam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-18 16:31:34.790641', NULL, NULL, NULL, false, 15, 'when the comments for debbugs #308994 were imported into Launchpad.', 62, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243614);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243615, 'Sjoerd Simons', NULL, NULL, 'sjoerd', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-18 16:31:34.790641', NULL, NULL, NULL, false, 15, 'when the comments for debbugs #308994 were imported into Launchpad.', 62, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 243615);

=== modified file 'database/sampledata/current.sql'
--- database/sampledata/current.sql	2010-07-27 18:36:16 +0000
+++ database/sampledata/current.sql	2010-07-28 15:06:10 +0000
@@ -4139,7 +4139,7 @@
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243609, 'Katie', NULL, NULL, 'katie', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-07 13:43:20.393704', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 8, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436091);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243610, 'Gold Member', NULL, NULL, 'member', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 1, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436101);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243611, 'Owner', NULL, NULL, 'owner', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 1, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436111);
-INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243612, 'My Team', 243611, NULL, 'myteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 20, false, NULL);
+INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243612, 'My Team', 243611, NULL, 'myteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 30, false, NULL);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243613, 'Other Team', 243611, NULL, 'otherteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, NULL);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243614, 'josh', NULL, NULL, 'jbuhl-nospam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-18 16:31:34.790641', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 15, 'when the comments for debbugs #308994 were imported into Launchpad.', 62, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436141);
 INSERT INTO lp_person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, addressline1, addressline2, organization, city, province, country, postcode, phone, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243615, 'Sjoerd Simons', NULL, NULL, 'sjoerd', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-18 16:31:34.790641', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, 15, 'when the comments for debbugs #308994 were imported into Launchpad.', 62, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436151);
@@ -5374,7 +5374,7 @@
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243609, 'Katie', NULL, NULL, 'katie', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-07 13:43:20.393704', NULL, NULL, NULL, false, 8, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436091);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243610, 'Gold Member', NULL, NULL, 'member', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, 1, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436101);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243611, 'Owner', NULL, NULL, 'owner', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, 1, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436111);
-INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243612, 'My Team', 243611, NULL, 'myteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 20, false, NULL);
+INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243612, 'My Team', 243611, NULL, 'myteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 30, false, NULL);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243613, 'Other Team', 243611, NULL, 'otherteam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-14 16:52:15.403833', NULL, NULL, NULL, false, NULL, NULL, NULL, NULL, 10, 0, NULL, NULL, 1, true, 1, false, NULL);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243614, 'josh', NULL, NULL, 'jbuhl-nospam', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-18 16:31:34.790641', NULL, NULL, NULL, false, 15, 'when the comments for debbugs #308994 were imported into Launchpad.', 62, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436141);
 INSERT INTO person (id, displayname, teamowner, teamdescription, name, language, fti, defaultmembershipperiod, defaultrenewalperiod, subscriptionpolicy, merged, datecreated, homepage_content, icon, mugshot, hide_email_addresses, creation_rationale, creation_comment, registrant, logo, renewal_policy, personal_standing, personal_standing_reason, mail_resumption_date, mailing_list_auto_subscribe_policy, mailing_list_receive_duplicates, visibility, verbose_bugnotifications, account) VALUES (243615, 'Sjoerd Simons', NULL, NULL, 'sjoerd', NULL, NULL, NULL, NULL, 1, NULL, '2007-12-18 16:31:34.790641', NULL, NULL, NULL, false, 15, 'when the comments for debbugs #308994 were imported into Launchpad.', 62, NULL, 10, 0, NULL, NULL, 1, true, 1, false, 2436151);

=== modified file 'lib/canonical/launchpad/doc/tales.txt'
--- lib/canonical/launchpad/doc/tales.txt	2010-07-15 08:38:19 +0000
+++ lib/canonical/launchpad/doc/tales.txt	2010-07-28 15:06:10 +0000
@@ -1566,7 +1566,7 @@
 data for link, displayname, and unique_displayname if the current user
 has the appropriate privileges.
 
-The team 'myteam' is a private membership team so only the team members
+The team 'myteam' is a private team so only the team members
 and Launchpad admins can see the details.
 
 Foo Bar is an administrator so he can see all.

=== modified file 'lib/canonical/launchpad/fields/__init__.py'
--- lib/canonical/launchpad/fields/__init__.py	2010-07-22 12:17:41 +0000
+++ lib/canonical/launchpad/fields/__init__.py	2010-07-28 15:06:10 +0000
@@ -34,7 +34,6 @@
     'MugshotImageUpload',
     'NoneableDescription',
     'NoneableTextLine',
-    'ParticipatingPersonChoice',
     'PasswordField',
     'PersonChoice',
     'PillarAliases',
@@ -53,7 +52,6 @@
     'URIField',
     'UniqueField',
     'Whiteboard',
-    'is_private_membership_person',
     'is_public_person',
     ]
 
@@ -766,14 +764,6 @@
     return person.visibility == PersonVisibility.PUBLIC
 
 
-def is_private_membership_person(person):
-    """True if the person/team has private membership visibility."""
-    from canonical.launchpad.interfaces import IPerson, PersonVisibility
-    if not IPerson.providedBy(person):
-        return False
-    return person.visibility == PersonVisibility.PRIVATE_MEMBERSHIP
-
-
 class PrivateTeamNotAllowed(ConstraintNotSatisfied):
     __doc__ = _("A private team is not allowed.")
 
@@ -801,20 +791,3 @@
         else:
             # The vocabulary prevents the revealing of private team names.
             raise PrivateTeamNotAllowed(value)
-
-
-class ParticipatingPersonChoice(PersonChoice):
-    """A person or team who is not a private membership team.
-
-    A person can participate in all contexts.  A PRIVATE team can participate
-    in many contexts, depending up on the permissions of the logged in
-    user.  A PRIVATE MEMBERSHIP team is severely limited in the roles in which
-    it can participate.
-    """
-
-    def constraint(self, value):
-        if not is_private_membership_person(value):
-            return True
-        else:
-            # The vocabulary prevents the revealing of private team names.
-            raise PrivateMembershipTeamNotAllowed(value)

=== modified file 'lib/canonical/launchpad/security.py'
--- lib/canonical/launchpad/security.py	2010-07-26 19:22:16 +0000
+++ lib/canonical/launchpad/security.py	2010-07-28 15:06:10 +0000
@@ -654,7 +654,7 @@
         """Verify that the user can view the team's membership.
 
         Anyone can see a public team's membership. Only a team member or
-        a Launchpad admin can view a private membership.
+        a Launchpad admin can view a private team.
         """
         if self.obj.team.visibility == PersonVisibility.PUBLIC:
             return True
@@ -708,9 +708,9 @@
 
 
 class ViewPublicOrPrivateTeamMembers(AuthorizationBase):
-    """Restrict viewing of private memberships of teams.
+    """Restrict viewing of private teams.
 
-    Only members of a team with a private membership can view the
+    Only members of a private team can view the
     membership list.
     """
     permission = 'launchpad.View'
@@ -726,7 +726,7 @@
         """Verify that the user can view the team's membership.
 
         Anyone can see a public team's membership. Only a team member
-        or a Launchpad admin can view a private membership.
+        or a Launchpad admin can view a private team's members.
         """
         if self.obj.visibility == PersonVisibility.PUBLIC:
             return True
@@ -2068,8 +2068,7 @@
 class ViewArchive(AuthorizationBase):
     """Restrict viewing of private archives.
 
-    Only admins or members of a team with a private membership can
-    view the archive.
+    Only admins or members of a private team can view the archive.
     """
     permission = 'launchpad.View'
     usedfor = IArchive

=== modified file 'lib/lp/bugs/browser/bugtask.py'
--- lib/lp/bugs/browser/bugtask.py	2010-07-15 07:39:09 +0000
+++ lib/lp/bugs/browser/bugtask.py	2010-07-28 15:06:10 +0000
@@ -88,7 +88,7 @@
 from canonical.database.sqlbase import cursor
 from canonical.launchpad import _
 from canonical.cachedproperty import cachedproperty
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 from canonical.launchpad.mailnotification import get_unified_diff
 from canonical.launchpad.validators import LaunchpadValidationError
 from canonical.launchpad.webapp import (
@@ -1502,7 +1502,7 @@
             self.form_fields.get('assignee', False)):
             # Make the assignee field editable
             self.form_fields = self.form_fields.omit('assignee')
-            self.form_fields += formlib.form.Fields(ParticipatingPersonChoice(
+            self.form_fields += formlib.form.Fields(PersonChoice(
                 __name__='assignee', title=_('Assigned to'), required=False,
                 vocabulary=get_assignee_vocabulary(self.context),
                 readonly=False))

=== modified file 'lib/lp/bugs/interfaces/bugsubscription.py'
--- lib/lp/bugs/interfaces/bugsubscription.py	2010-03-22 23:02:50 +0000
+++ lib/lp/bugs/interfaces/bugsubscription.py	2010-07-28 15:06:10 +0000
@@ -14,7 +14,7 @@
 from zope.interface import Interface, Attribute
 from zope.schema import Int, Datetime
 from canonical.launchpad import _
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 from lp.bugs.interfaces.bug import IBug
 
 from lazr.restful.declarations import (
@@ -22,13 +22,14 @@
     export_read_operation, exported)
 from lazr.restful.fields import Reference
 
+
 class IBugSubscription(Interface):
     """The relationship between a person and a bug."""
 
     export_as_webservice_entry()
 
     id = Int(title=_('ID'), readonly=True, required=True)
-    person = exported(ParticipatingPersonChoice(
+    person = exported(PersonChoice(
         title=_('Person'), required=True, vocabulary='ValidPersonOrTeam',
         readonly=True, description=_("The person's Launchpad ID or "
         "e-mail address.")))
@@ -36,7 +37,7 @@
         IBug, title=_("Bug"), required=True, readonly=True))
     date_created = exported(
         Datetime(title=_('Date subscribed'), required=True, readonly=True))
-    subscribed_by = exported(ParticipatingPersonChoice(
+    subscribed_by = exported(PersonChoice(
         title=_('Subscribed by'), required=True,
         vocabulary='ValidPersonOrTeam', readonly=True,
         description=_("The person who created this subscription.")))

=== modified file 'lib/lp/bugs/interfaces/bugsupervisor.py'
--- lib/lp/bugs/interfaces/bugsupervisor.py	2010-06-16 17:55:37 +0000
+++ lib/lp/bugs/interfaces/bugsupervisor.py	2010-07-28 15:06:10 +0000
@@ -12,7 +12,7 @@
     ]
 
 from canonical.launchpad import _
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 
 from zope.interface import Interface
 
@@ -24,7 +24,7 @@
 
 class IHasBugSupervisor(Interface):
 
-    bug_supervisor = exported(ParticipatingPersonChoice(
+    bug_supervisor = exported(PersonChoice(
         title=_("Bug Supervisor"),
         description=_(
             "The Launchpad id of the person or team (preferred) responsible "

=== modified file 'lib/lp/bugs/interfaces/bugtask.py'
--- lib/lp/bugs/interfaces/bugtask.py	2010-07-26 12:49:23 +0000
+++ lib/lp/bugs/interfaces/bugtask.py	2010-07-28 15:06:10 +0000
@@ -57,7 +57,7 @@
 
 from canonical.launchpad import _
 from canonical.launchpad.fields import (
-    BugField, ParticipatingPersonChoice, ProductNameField, SearchTag,
+    BugField, PersonChoice, ProductNameField, SearchTag,
     StrippedTextLine, Summary)
 from lp.bugs.interfaces.bugwatch import (
     IBugWatch, IBugWatchSet, NoBugTrackerFound, UnrecognizedBugTrackerURL)
@@ -437,7 +437,7 @@
     statusexplanation = Text(
         title=_("Status notes (optional)"), required=False)
     assignee = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_('Assigned to'), required=False,
             vocabulary='ValidAssignee',
             readonly=True))

=== modified file 'lib/lp/bugs/model/bugactivity.py'
--- lib/lp/bugs/model/bugactivity.py	2009-06-25 00:40:31 +0000
+++ lib/lp/bugs/model/bugactivity.py	2010-07-28 15:06:10 +0000
@@ -14,8 +14,7 @@
 from lp.bugs.interfaces.bugactivity import IBugActivity, IBugActivitySet
 from canonical.database.sqlbase import SQLBase
 from canonical.database.datetimecol import UtcDateTimeCol
-from lp.registry.interfaces.person import (
-    validate_person_not_private_membership)
+from lp.registry.interfaces.person import validate_person
 
 
 class BugActivity(SQLBase):
@@ -28,7 +27,7 @@
     datechanged = UtcDateTimeCol(notNull=True)
     person = ForeignKey(
         dbName='person', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=True)
     whatchanged = StringCol(notNull=True)
     oldvalue = StringCol(default=None)

=== modified file 'lib/lp/bugs/model/bugsubscription.py'
--- lib/lp/bugs/model/bugsubscription.py	2010-03-22 23:02:50 +0000
+++ lib/lp/bugs/model/bugsubscription.py	2010-07-28 15:06:10 +0000
@@ -15,8 +15,7 @@
 from canonical.database.sqlbase import SQLBase
 
 from lp.bugs.interfaces.bugsubscription import IBugSubscription
-from lp.registry.interfaces.person import (
-    validate_person_not_private_membership)
+from lp.registry.interfaces.person import validate_person
 
 
 class BugSubscription(SQLBase):
@@ -28,14 +27,14 @@
 
     person = ForeignKey(
         dbName='person', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=True
         )
     bug = ForeignKey(dbName='bug', foreignKey='Bug', notNull=True)
     date_created = UtcDateTimeCol(notNull=True, default=UTC_NOW)
     subscribed_by = ForeignKey(
         dbName='subscribed_by', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=True
         )
 

=== modified file 'lib/lp/bugs/model/bugtask.py'
--- lib/lp/bugs/model/bugtask.py	2010-07-21 08:15:49 +0000
+++ lib/lp/bugs/model/bugtask.py	2010-07-28 15:06:10 +0000
@@ -88,8 +88,7 @@
 from canonical.launchpad.searchbuilder import (
     all, any, greater_than, NULL, not_equals)
 from lp.registry.interfaces.person import (
-    IPerson, validate_person_not_private_membership,
-    validate_public_person)
+    IPerson, validate_person, validate_public_person)
 from canonical.launchpad.webapp.interfaces import (
     IStoreSelector, DEFAULT_FLAVOR, MAIN_STORE, SLAVE_FLAVOR, NotFoundError)
 
@@ -455,7 +454,7 @@
 def validate_assignee(self, attr, value):
     value = validate_conjoined_attribute(self, attr, value)
     # Check if this assignee is public.
-    return validate_person_not_private_membership(self, attr, value)
+    return validate_person(self, attr, value)
 
 
 @block_implicit_flushes

=== modified file 'lib/lp/code/interfaces/branch.py'
--- lib/lp/code/interfaces/branch.py	2010-07-26 09:15:31 +0000
+++ lib/lp/code/interfaces/branch.py	2010-07-28 15:06:10 +0000
@@ -56,7 +56,7 @@
 
 from canonical.launchpad import _
 from canonical.launchpad.fields import (
-    ParticipatingPersonChoice, PublicPersonChoice, URIField, Whiteboard)
+    PersonChoice, PublicPersonChoice, URIField, Whiteboard)
 from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
 from canonical.launchpad.validators import LaunchpadValidationError
 from canonical.launchpad.webapp.interfaces import (
@@ -361,7 +361,7 @@
             vocabulary='ValidPersonOrTeam'))
 
     owner = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_('Owner'),
             required=True, readonly=True,
             vocabulary='UserTeamsParticipationPlusSelf',

=== modified file 'lib/lp/code/interfaces/branchsubscription.py'
--- lib/lp/code/interfaces/branchsubscription.py	2010-05-28 04:18:17 +0000
+++ lib/lp/code/interfaces/branchsubscription.py	2010-07-28 15:06:10 +0000
@@ -19,7 +19,7 @@
     BranchSubscriptionDiffSize, BranchSubscriptionNotificationLevel,
     CodeReviewNotificationLevel)
 from lp.code.interfaces.branch import IBranch
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 from lazr.restful.declarations import (
     REQUEST_USER, call_with, export_as_webservice_entry,
     export_read_operation, exported)
@@ -32,7 +32,7 @@
 
     id = Int(title=_('ID'), readonly=True, required=True)
     person = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_('Person'), required=True, vocabulary='ValidPersonOrTeam',
             readonly=True, description=_('Enter the launchpad id, or email '
             'address of the person you wish to subscribe to this branch. '
@@ -75,7 +75,7 @@
                 'notifications.'
                 )))
 
-    subscribed_by = exported(ParticipatingPersonChoice(
+    subscribed_by = exported(PersonChoice(
         title=_('Subscribed by'), required=True,
         vocabulary='ValidPersonOrTeam', readonly=True,
         description=_("The person who created this subscription.")))

=== modified file 'lib/lp/code/interfaces/branchvisibilitypolicy.py'
--- lib/lp/code/interfaces/branchvisibilitypolicy.py	2010-04-16 15:06:55 +0000
+++ lib/lp/code/interfaces/branchvisibilitypolicy.py	2010-07-28 15:06:10 +0000
@@ -17,7 +17,7 @@
 from zope.schema import Choice
 
 from canonical.launchpad import _
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 from lp.code.enums import TeamBranchVisibilityRule
 
 
@@ -89,7 +89,7 @@
     The team may be null, in which case the rule applies to everyone.
     """
 
-    team = ParticipatingPersonChoice(
+    team = PersonChoice(
         title=_('Team'), required=True, vocabulary='ValidPersonOrTeam',
         description=_("Specifies the team that the policy applies to. "
                       "If None then the policy applies to everyone."))

=== modified file 'lib/lp/code/interfaces/sourcepackagerecipe.py'
--- lib/lp/code/interfaces/sourcepackagerecipe.py	2010-06-18 07:54:36 +0000
+++ lib/lp/code/interfaces/sourcepackagerecipe.py	2010-07-28 15:06:10 +0000
@@ -28,7 +28,7 @@
 
 from canonical.launchpad import _
 from canonical.launchpad.fields import (
-    ParticipatingPersonChoice, PublicPersonChoice
+    PersonChoice, PublicPersonChoice
 )
 from canonical.launchpad.validators.name import name_validator
 
@@ -84,7 +84,7 @@
             vocabulary='ValidPersonOrTeam'))
 
     owner = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_('Owner'),
             required=True, readonly=False,
             vocabulary='UserTeamsParticipationPlusSelf',

=== modified file 'lib/lp/code/model/branch.py'
--- lib/lp/code/model/branch.py	2010-07-26 09:15:31 +0000
+++ lib/lp/code/model/branch.py	2010-07-28 15:06:10 +0000
@@ -80,7 +80,7 @@
     IFindOfficialBranchLinks)
 from lp.codehosting.bzrutils import safe_open
 from lp.registry.interfaces.person import (
-    validate_person_not_private_membership, validate_public_person)
+    validate_person, validate_public_person)
 from lp.services.database.prejoin import prejoin
 from lp.services.job.interfaces.job import JobStatus
 from lp.services.mail.notificationrecipientset import (
@@ -127,7 +127,7 @@
         storm_validator=validate_public_person, notNull=True)
     owner = ForeignKey(
         dbName='owner', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership, notNull=True)
+        storm_validator=validate_person, notNull=True)
 
     def setOwner(self, new_owner, user):
         """See `IBranch`."""

=== modified file 'lib/lp/code/model/branchsubscription.py'
--- lib/lp/code/model/branchsubscription.py	2010-05-28 04:18:17 +0000
+++ lib/lp/code/model/branchsubscription.py	2010-07-28 15:06:10 +0000
@@ -21,8 +21,7 @@
 from lp.code.interfaces.branch import IBranchNavigationMenu
 from lp.code.interfaces.branchtarget import IHasBranchTarget
 from lp.code.security import BranchSubscriptionEdit
-from lp.registry.interfaces.person import (
-    validate_person_not_private_membership)
+from lp.registry.interfaces.person import validate_person
 
 
 class BranchSubscription(SQLBase):
@@ -34,7 +33,7 @@
 
     person = ForeignKey(
         dbName='person', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership, notNull=True)
+        storm_validator=validate_person, notNull=True)
     branch = ForeignKey(dbName='branch', foreignKey='Branch', notNull=True)
     notification_level = EnumCol(enum=BranchSubscriptionNotificationLevel,
                                  notNull=True, default=DEFAULT)
@@ -44,7 +43,7 @@
                                  notNull=True, default=DEFAULT)
     subscribed_by = ForeignKey(
         dbName='subscribed_by', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership, notNull=True)
+        storm_validator=validate_person, notNull=True)
 
     @property
     def target(self):

=== modified file 'lib/lp/code/model/branchvisibilitypolicy.py'
--- lib/lp/code/model/branchvisibilitypolicy.py	2010-04-19 09:39:29 +0000
+++ lib/lp/code/model/branchvisibilitypolicy.py	2010-07-28 15:06:10 +0000
@@ -25,8 +25,7 @@
 from lp.code.enums import BranchVisibilityRule
 from lp.code.interfaces.branchvisibilitypolicy import (
     IBranchVisibilityTeamPolicy, InvalidVisibilityPolicy)
-from lp.registry.interfaces.person import (
-    validate_person_not_private_membership)
+from lp.registry.interfaces.person import validate_person
 from lp.registry.interfaces.product import IProduct
 from lp.registry.interfaces.projectgroup import IProjectGroup
 
@@ -41,7 +40,7 @@
     product = ForeignKey(dbName='product', foreignKey='Product')
     team = ForeignKey(
         dbName='team', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         default=None)
     rule = EnumCol(
         dbName="policy", enum=BranchVisibilityRule, notNull=True,

=== modified file 'lib/lp/registry/browser/person.py'
--- lib/lp/registry/browser/person.py	2010-07-16 16:14:39 +0000
+++ lib/lp/registry/browser/person.py	2010-07-28 15:06:10 +0000
@@ -3326,8 +3326,6 @@
     def visibility_info(self):
         if self.context.visibility == PersonVisibility.PRIVATE:
             return 'Private team'
-        elif self.context.visibility == PersonVisibility.PRIVATE_MEMBERSHIP:
-            return 'Team membership is viewable by team members'
         else:
             return 'Public team'
 
@@ -3599,8 +3597,8 @@
 
     def add_ssh(self):
         sshkey = self.request.form.get('sshkey')
-	try:
-      	    getUtility(ISSHKeySet).new(self.user, sshkey)
+        try:
+            getUtility(ISSHKeySet).new(self.user, sshkey)
         except SSHKeyAdditionError:
             self.error_message = structured('Invalid public key')
         except SSHKeyCompromisedError:
@@ -4004,12 +4002,11 @@
         and this team's visibility is either None or PUBLIC.
         """
         # Joining a moderated team will put you on the proposed_members
-        # list. If it is a private membership team, you are not allowed
-        # to view the proposed_members attribute until you are an
-        # active member; therefore, it would look like the join button
-        # is broken. Either private membership teams should always have a
-        # restricted subscription policy, or we need a more complicated
-        # permission model.
+        # list. If it is a private team, you are not allowed to view the
+        # proposed_members attribute until you are an active member;
+        # therefore, it would look like the join button is broken. Either
+        # private teams should always have a restricted subscription policy,
+        # or we need a more complicated permission model.
         if not (self.context.visibility is None
                 or self.context.visibility == PersonVisibility.PUBLIC):
             return False

=== modified file 'lib/lp/registry/browser/team.py'
--- lib/lp/registry/browser/team.py	2010-07-16 16:14:39 +0000
+++ lib/lp/registry/browser/team.py	2010-07-28 15:06:10 +0000
@@ -166,28 +166,6 @@
         """Remove the visibility field if not authorized."""
         if not check_permission('launchpad.Commercial', self.context):
             self.form_fields = self.form_fields.omit('visibility')
-        else:
-            # XXX: BradCrittenden 2010-07-12 bug=602773:  This code can be
-            # removed when PRIVATE_MEMBERSHIP disappears fully.
-
-            # Remove the visibility selector and replace with one with a more
-            # limited vocabulary.
-            terms = [SimpleTerm(PersonVisibility.PUBLIC,
-                                PersonVisibility.PUBLIC.name,
-                                PersonVisibility.PUBLIC.title),
-                     SimpleTerm(PersonVisibility.PRIVATE,
-                                PersonVisibility.PRIVATE.name,
-                                PersonVisibility.PRIVATE.title),
-                     ]
-            visibility = self.form_fields['visibility'].field
-            field = Choice(
-                __name__=visibility.getName(),
-                title=visibility.title,
-                source=SimpleVocabulary(terms))
-            self.form_fields = (
-                self.form_fields.omit('visibility') +
-                form.Fields(field))
-            self.form_fields = self.form_fields.select(*self.field_names)
 
 
 class TeamEditView(TeamFormMixin, HasRenewalPolicyMixin,

=== modified file 'lib/lp/registry/browser/tests/mailinglist-views.txt'
--- lib/lp/registry/browser/tests/mailinglist-views.txt	2010-07-12 16:29:33 +0000
+++ lib/lp/registry/browser/tests/mailinglist-views.txt	2010-07-28 15:06:10 +0000
@@ -186,7 +186,7 @@
 generates an Unauthorized exception which is turned into a NotFound in
 publication so as to fool the wily hackers.
 
-    >>> # Create a private membership team.
+    >>> # Create a private team.
     >>> owner = person_set.getByEmail('owner@xxxxxxxxxxxxx')
     >>> login('foo.bar@xxxxxxxxxxxxx')
     >>> from lp.registry.interfaces.person import PersonVisibility

=== modified file 'lib/lp/registry/doc/person.txt'
--- lib/lp/registry/doc/person.txt	2010-07-16 13:34:38 +0000
+++ lib/lp/registry/doc/person.txt	2010-07-28 15:06:10 +0000
@@ -919,7 +919,7 @@
     Warty Gnome Team (warty-gnome): []
     Warty Security Team (name20): []
 
-The Owner user is a member of the private membership team 'myteam' so
+The Owner user is a member of the private team 'myteam' so
 the previous search will include myteam in the results.
 
     >>> login('owner@xxxxxxxxxxxxx')

=== modified file 'lib/lp/registry/doc/private-team-roles.txt'
--- lib/lp/registry/doc/private-team-roles.txt	2010-07-14 07:32:46 +0000
+++ lib/lp/registry/doc/private-team-roles.txt	2010-07-28 15:06:10 +0000
@@ -315,7 +315,7 @@
     >>> private = PersonVisibility.PRIVATE
 
     >>> visibility_list = list(PersonVisibility.items)
-    >>> visibility_list.remove(PersonVisibility.PRIVATE_MEMBERSHIP)
+
     >>> for joined in visibility_list:
     ...     for joiner in visibility_list:
     ...         join_team(joined, joiner)

=== modified file 'lib/lp/registry/doc/private-team-visibility.txt'
--- lib/lp/registry/doc/private-team-visibility.txt	2010-01-05 17:46:08 +0000
+++ lib/lp/registry/doc/private-team-visibility.txt	2010-07-28 15:06:10 +0000
@@ -2,9 +2,8 @@
  Private team visibility
 =========================
 
-Private and private membership teams restrict the visibility of their
-attributes to select sets of users in order to prevent leaking
-confidential data.
+Private teams restrict the visibility of their attributes to select
+sets of users in order to prevent leaking confidential data.
 
 Private teams restrict the viewing of the membership list
 to team administrators, other members of the team, and Launchpad

=== modified file 'lib/lp/registry/doc/vocabularies.txt'
--- lib/lp/registry/doc/vocabularies.txt	2010-07-20 10:08:02 +0000
+++ lib/lp/registry/doc/vocabularies.txt	2010-07-28 15:06:10 +0000
@@ -769,7 +769,7 @@
 
 Almost all teams have the word 'team' as part of their names, so a search
 for 'team' should give us some of them.  Notice that the
-PRIVATE_MEMBERSHIP_TEAM 'myteam' is not included in the results.
+PRIVATE_TEAM 'myteam' is not included in the results.
 
     >>> login_person(sample_person)
     >>> ephemeral = factory.makeTeam(owner=foo_bar, name='ephemeral-team')
@@ -791,15 +791,6 @@
      u'testing-spanish-team', u'ubuntu-security', u'ubuntu-team',
      u'warty-gnome']
 
-Logging in as 'owner', who is a member of myteam shows that the token
-lookup still omits myteam.
-
-    >>> login('owner@xxxxxxxxxxxxx')
-    >>> sorted(person.name for person in vocab.search('team'))
-    [u'hwdb-team', u'name18', u'name20', u'name21', u'no-team-memberships',
-     u'otherteam', u'simple-team', u'testing-spanish-team',
-     u'ubuntu-security', u'ubuntu-team', u'warty-gnome']
-
 A PRIVATE team is displayed when the logged in user is a member of the team.
 
     >>> commercial = person_set.getByEmail('commercial-member@xxxxxxxxxxxxx')
@@ -836,9 +827,10 @@
 
     >>> login('owner@xxxxxxxxxxxxx')
     >>> sorted(person.name for person in vocab.search('team'))
-    [u'hwdb-team', u'name18', u'name20', u'name21', u'no-team-memberships',
-     u'otherteam', u'simple-team', u'testing-spanish-team',
-     u'ubuntu-security', u'ubuntu-team', u'warty-gnome']
+    [u'hwdb-team', u'myteam', u'name18', u'name20', u'name21',
+     u'no-team-memberships', u'otherteam', u'simple-team',
+     u'testing-spanish-team', u'ubuntu-security', u'ubuntu-team',
+     u'warty-gnome']
 
 The anonymous user will not see the private team either.
 

=== modified file 'lib/lp/registry/interfaces/person.py'
--- lib/lp/registry/interfaces/person.py	2010-07-16 21:55:55 +0000
+++ lib/lp/registry/interfaces/person.py	2010-07-28 15:06:10 +0000
@@ -37,7 +37,7 @@
     'TeamContactMethod',
     'TeamMembershipRenewalPolicy',
     'TeamSubscriptionPolicy',
-    'validate_person_not_private_membership',
+    'validate_person',
     'validate_public_person',
     ]
 
@@ -67,7 +67,7 @@
 from canonical.launchpad.fields import (
     BlacklistableContentNameField, IconImageUpload, LogoImageUpload,
     MugshotImageUpload, PasswordField, PersonChoice, PublicPersonChoice,
-    StrippedTextLine, is_private_membership_person, is_public_person)
+    StrippedTextLine, is_public_person)
 from canonical.launchpad.interfaces.account import AccountStatus, IAccount
 from canonical.launchpad.interfaces.emailaddress import IEmailAddress
 from canonical.launchpad.interfaces.launchpad import (
@@ -110,7 +110,7 @@
 
 
 @block_implicit_flushes
-def validate_person(obj, attr, value, validate_func):
+def validate_person_common(obj, attr, value, validate_func):
     """Validate the person using the supplied function."""
     if value is None:
         return None
@@ -121,7 +121,7 @@
     # DB. This needs cleaning up.
     from lp.registry.model.person import Person
     person = Person.get(value)
-    if validate_func(person):
+    if not validate_func(person):
         raise PrivatePersonLinkageError(
             "Cannot link person (name=%s, visibility=%s) to %s (name=%s)"
             % (person.name, person.visibility.name,
@@ -129,18 +129,20 @@
     return value
 
 
+def validate_person(obj, attr, value):
+    """Validate the person is a real person with no other restrictions."""
+    def validate(person):
+        return IPerson.providedBy(person)
+    return validate_person_common(obj, attr, value, validate)
+
+
 def validate_public_person(obj, attr, value):
     """Validate that the person identified by value is public."""
 
     def validate(person):
-        return not is_public_person(person)
-
-    return validate_person(obj, attr, value, validate)
-
-
-def validate_person_not_private_membership(obj, attr, value):
-    """Validate that the person (value) is not a private membership team."""
-    return validate_person(obj, attr, value, is_private_membership_person)
+        return is_public_person(person)
+
+    return validate_person_common(obj, attr, value, validate)
 
 
 class PersonalStanding(DBEnumeratedType):
@@ -378,14 +380,6 @@
         Everyone can view all the attributes of this person.
         """)
 
-    PRIVATE_MEMBERSHIP = DBItem(20, """
-        Private Membership
-
-        Only Launchpad admins and team members can view the
-        membership list for this team. The team is severely restricted in the
-        roles it can assume.
-        """)
-
     PRIVATE = DBItem(30, """
         Private
 

=== modified file 'lib/lp/registry/interfaces/product.py'
--- lib/lp/registry/interfaces/product.py	2010-07-09 10:22:32 +0000
+++ lib/lp/registry/interfaces/product.py	2010-07-28 15:06:10 +0000
@@ -36,7 +36,7 @@
 from canonical.launchpad import _
 from canonical.launchpad.fields import (
     Description, IconImageUpload, LogoImageUpload, MugshotImageUpload,
-    ParticipatingPersonChoice, ProductBugTracker, ProductNameField,
+    PersonChoice, ProductBugTracker, ProductNameField,
     PublicPersonChoice, Summary, Title, URIField)
 from lp.bugs.interfaces.bugsupervisor import IHasBugSupervisor
 from lp.bugs.interfaces.securitycontact import IHasSecurityContact
@@ -373,7 +373,7 @@
         exported_as='project_group')
 
     owner = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_('Maintainer'),
             required=True,
             vocabulary='ValidOwner',
@@ -390,7 +390,7 @@
                           "Launchpad.")))
 
     driver = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_("Driver"),
             description=_(
                 "This person or team will be able to set feature goals for "

=== modified file 'lib/lp/registry/interfaces/productrelease.py'
--- lib/lp/registry/interfaces/productrelease.py	2009-10-26 18:40:04 +0000
+++ lib/lp/registry/interfaces/productrelease.py	2010-07-28 15:06:10 +0000
@@ -28,7 +28,7 @@
 from canonical.launchpad import _
 from canonical.launchpad.validators.version import sane_version
 from canonical.launchpad.fields import (
-    ContentNameField, ParticipatingPersonChoice)
+    ContentNameField, PersonChoice)
 from canonical.launchpad.validators import LaunchpadValidationError
 
 from lazr.restful.fields import CollectionField, Reference, ReferenceChoice
@@ -270,7 +270,7 @@
         )
 
     owner = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=u"The owner of this release.",
             required=True,
             vocabulary='ValidOwner',

=== modified file 'lib/lp/registry/interfaces/productseries.py'
--- lib/lp/registry/interfaces/productseries.py	2010-06-11 18:05:59 +0000
+++ lib/lp/registry/interfaces/productseries.py	2010-07-28 15:06:10 +0000
@@ -19,7 +19,7 @@
 from zope.interface import Interface, Attribute
 
 from canonical.launchpad.fields import (
-    ContentNameField, ParticipatingPersonChoice, Title)
+    ContentNameField, PersonChoice, Title)
 from lp.registry.interfaces.structuralsubscription import (
     IStructuralSubscriptionTarget)
 from lp.code.interfaces.branch import IBranch
@@ -129,12 +129,12 @@
         exported_as='date_created')
 
     owner = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_('Owner'), required=True, vocabulary='ValidOwner',
             description=_('Project owner, either a valid Person or Team')))
 
     driver = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_("Release manager"),
             description=_(
                 "The person or team responsible for decisions about features "

=== modified file 'lib/lp/registry/interfaces/structuralsubscription.py'
--- lib/lp/registry/interfaces/structuralsubscription.py	2010-04-19 08:11:52 +0000
+++ lib/lp/registry/interfaces/structuralsubscription.py	2010-07-28 15:06:10 +0000
@@ -23,7 +23,7 @@
 
 from canonical.launchpad import _
 from canonical.launchpad.fields import (
-    ParticipatingPersonChoice, PublicPersonChoice)
+    PersonChoice, PublicPersonChoice)
 from lp.registry.interfaces.person import IPerson
 
 from lazr.restful.declarations import (
@@ -105,7 +105,7 @@
         title=_('Distribution series'), required=False, readonly=True)
     sourcepackagename = Int(
         title=_('Source package name'), required=False, readonly=True)
-    subscriber = exported(ParticipatingPersonChoice(
+    subscriber = exported(PersonChoice(
         title=_('Subscriber'), required=True, vocabulary='ValidPersonOrTeam',
         readonly=True, description=_("The person subscribed.")))
     subscribed_by = exported(PublicPersonChoice(

=== modified file 'lib/lp/registry/model/distribution.py'
--- lib/lp/registry/model/distribution.py	2010-06-29 10:17:06 +0000
+++ lib/lp/registry/model/distribution.py	2010-07-28 15:06:10 +0000
@@ -108,7 +108,7 @@
 from canonical.launchpad.validators.name import sanitize_name, valid_name
 from canonical.launchpad.webapp.interfaces import NotFoundError
 from lp.registry.interfaces.person import (
-    validate_person_not_private_membership, validate_public_person)
+    validate_person, validate_public_person)
 from canonical.launchpad.webapp.url import urlparse
 
 from lp.answers.model.question import (
@@ -152,7 +152,7 @@
         storm_validator=validate_public_person, notNull=True)
     bug_supervisor = ForeignKey(
         dbName='bug_supervisor', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=False,
         default=None)
     bug_reporting_guidelines = StringCol(default=None)
@@ -774,7 +774,7 @@
 
     def getSeriesByStatus(self, status):
         """See `IDistribution`."""
-        return Store.of(self).find(DistroSeries, 
+        return Store.of(self).find(DistroSeries,
             DistroSeries.distribution == self,
             DistroSeries.status == status)
 

=== modified file 'lib/lp/registry/model/person.py'
--- lib/lp/registry/model/person.py	2010-07-24 00:39:29 +0000
+++ lib/lp/registry/model/person.py	2010-07-28 15:06:10 +0000
@@ -191,17 +191,10 @@
 def validate_person_visibility(person, attr, value):
     """Validate changes in visibility.
 
-    * Prevent teams with inconsistent connections from being made private
-    * Prevent private membership teams with mailing lists from going public.
+    * Prevent teams with inconsistent connections from being made private.
     * Prevent private teams from any transition.
     """
 
-    # XXX: BradCrittenden 2010-07-12 bug=602773: Private membership teams are
-    # deprecated and new ones may not be created.
-    if value == PersonVisibility.PRIVATE_MEMBERSHIP:
-        raise AssertionError(
-            "Private membership teams are deprecated.")
-
     # Prohibit any visibility changes for private teams.  This rule is
     # recognized to be Draconian and may be relaxed in the future.
     if person.visibility == PersonVisibility.PRIVATE:

=== modified file 'lib/lp/registry/model/product.py'
--- lib/lp/registry/model/product.py	2010-07-09 10:22:32 +0000
+++ lib/lp/registry/model/product.py	2010-07-28 15:06:10 +0000
@@ -58,7 +58,7 @@
 from lp.registry.model.milestone import (
     HasMilestonesMixin, Milestone)
 from lp.registry.interfaces.person import (
-    validate_person_not_private_membership, validate_public_person)
+    validate_person, validate_public_person)
 from lp.registry.model.announcement import MakesAnnouncements
 from lp.registry.model.packaging import Packaging
 from lp.registry.model.pillar import HasAliasMixin
@@ -189,7 +189,7 @@
         default=None)
     _owner = ForeignKey(
         dbName="owner", foreignKey="Person",
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=True)
     registrant = ForeignKey(
         dbName="registrant", foreignKey="Person",
@@ -197,7 +197,7 @@
         notNull=True)
     bug_supervisor = ForeignKey(
         dbName='bug_supervisor', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=False,
         default=None)
     security_contact = ForeignKey(
@@ -206,7 +206,7 @@
         default=None)
     driver = ForeignKey(
         dbName="driver", foreignKey="Person",
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=False, default=None)
     name = StringCol(
         dbName='name', notNull=True, alternateID=True, unique=True)

=== modified file 'lib/lp/registry/model/productrelease.py'
--- lib/lp/registry/model/productrelease.py	2009-11-24 21:27:17 +0000
+++ lib/lp/registry/model/productrelease.py	2010-07-28 15:06:10 +0000
@@ -31,7 +31,7 @@
     UpstreamFileType)
 from canonical.launchpad.interfaces.librarian import ILibraryFileAliasSet
 from lp.registry.interfaces.person import (
-    validate_person_not_private_membership, validate_public_person)
+    validate_person, validate_public_person)
 from canonical.launchpad.webapp.interfaces import (
     DEFAULT_FLAVOR, IStoreSelector, MAIN_STORE)
 
@@ -52,7 +52,7 @@
         dbName='datecreated', notNull=True, default=UTC_NOW)
     owner = ForeignKey(
         dbName="owner", foreignKey="Person",
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=True)
     milestone = ForeignKey(dbName='milestone', foreignKey='Milestone')
 

=== modified file 'lib/lp/registry/model/productseries.py'
--- lib/lp/registry/model/productseries.py	2010-07-15 15:01:18 +0000
+++ lib/lp/registry/model/productseries.py	2010-07-28 15:06:10 +0000
@@ -35,8 +35,7 @@
 from lp.registry.model.milestone import (
     HasMilestonesMixin, Milestone)
 from lp.registry.model.packaging import Packaging
-from lp.registry.interfaces.person import (
-    validate_person_not_private_membership)
+from lp.registry.interfaces.person import validate_person
 from lp.translations.model.pofile import POFile
 from lp.translations.model.potemplate import (
     HasTranslationTemplatesMixin,
@@ -95,12 +94,12 @@
     datecreated = UtcDateTimeCol(notNull=True, default=UTC_NOW)
     owner = ForeignKey(
         dbName="owner", foreignKey="Person",
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=True)
 
     driver = ForeignKey(
         dbName="driver", foreignKey="Person",
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=False, default=None)
     branch = ForeignKey(foreignKey='Branch', dbName='branch',
                              default=None)

=== modified file 'lib/lp/registry/model/structuralsubscription.py'
--- lib/lp/registry/model/structuralsubscription.py	2010-04-19 09:39:29 +0000
+++ lib/lp/registry/model/structuralsubscription.py	2010-07-28 15:06:10 +0000
@@ -29,7 +29,7 @@
     IStructuralSubscription, IStructuralSubscriptionTarget,
     UserCannotSubscribePerson)
 from lp.registry.interfaces.person import (
-    validate_public_person, validate_person_not_private_membership)
+    validate_person, validate_public_person)
 
 
 class StructuralSubscription(SQLBase):
@@ -61,7 +61,7 @@
         notNull=False, default=None)
     subscriber = ForeignKey(
         dbName='subscriber', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership, notNull=True)
+        storm_validator=validate_person, notNull=True)
     subscribed_by = ForeignKey(
         dbName='subscribed_by', foreignKey='Person',
         storm_validator=validate_public_person, notNull=True)

=== modified file 'lib/lp/registry/tests/mailinglists_helper.py'
--- lib/lp/registry/tests/mailinglists_helper.py	2009-12-04 17:16:39 +0000
+++ lib/lp/registry/tests/mailinglists_helper.py	2010-07-28 15:06:10 +0000
@@ -194,7 +194,7 @@
     browser.getControl(name='field.name').value = team_name
     browser.getControl('Display Name').value = displayname
     if private:
-        browser.getControl('Visibility').value = ['PRIVATE_MEMBERSHIP']
+        browser.getControl('Visibility').value = ['PRIVATE']
         browser.getControl(name='field.subscriptionpolicy').value = [
             'RESTRICTED']
     else:

=== modified file 'lib/lp/registry/tests/test_person.py'
--- lib/lp/registry/tests/test_person.py	2010-07-14 16:08:24 +0000
+++ lib/lp/registry/tests/test_person.py	2010-07-28 15:06:10 +0000
@@ -115,19 +115,6 @@
                 PrivatePersonLinkageError,
                 setattr, bug, attr_name, self.myteam)
 
-    def test_BugTask_person_validator(self):
-        bug_task = BugTask.select(limit=1)[0]
-        for attr_name in ['assignee', 'owner']:
-            self.assertRaises(
-                PrivatePersonLinkageError,
-                setattr, bug_task, attr_name, self.myteam)
-
-    def test_BugSubscription_person_validator(self):
-        bug_subscription = BugSubscription.select(limit=1)[0]
-        self.assertRaises(
-            PrivatePersonLinkageError,
-            setattr, bug_subscription, 'person', self.myteam)
-
     def test_Specification_person_validator(self):
         specification = Specification.select(limit=1)[0]
         for attr_name in ['assignee', 'drafter', 'approver', 'owner',

=== modified file 'lib/lp/registry/tests/test_user_vocabularies.py'
--- lib/lp/registry/tests/test_user_vocabularies.py	2010-07-14 14:35:59 +0000
+++ lib/lp/registry/tests/test_user_vocabularies.py	2010-07-28 15:06:10 +0000
@@ -127,7 +127,7 @@
         login_person(team_owner)
         team = self.factory.makeTeam(owner=team_owner)
         team.addMember(person=user, reviewer=team_owner)
-        # Launchpad admin rights are needed to set private membership.
+        # Launchpad admin rights are needed to create private teams.
         login('foo.bar@xxxxxxxxxxxxx')
         team.visibility = PersonVisibility.PRIVATE
         login_person(user)

=== modified file 'lib/lp/registry/vocabularies.py'
--- lib/lp/registry/vocabularies.py	2010-06-04 09:31:21 +0000
+++ lib/lp/registry/vocabularies.py	2010-07-28 15:06:10 +0000
@@ -442,8 +442,7 @@
                 private_query = AND(
                     Not(Person.teamowner == None),
                     OR(
-                        Person.visibility == PersonVisibility.PRIVATE,
-                        Person.visibility == PersonVisibility.PRIVATE_MEMBERSHIP))
+                        Person.visibility == PersonVisibility.PRIVATE))
             else:
                 private_query = AND(
                     TeamParticipation.person == logged_in_user.id,

=== modified file 'lib/lp/soyuz/browser/archive.py'
--- lib/lp/soyuz/browser/archive.py	2010-07-20 10:25:51 +0000
+++ lib/lp/soyuz/browser/archive.py	2010-07-28 15:06:10 +0000
@@ -1809,8 +1809,7 @@
     def is_private_team(self):
         """Is the person a private team?
 
-        :return: True only if visibility is PRIVATE.  False is returned when
-        the visibility is PUBLIC and PRIVATE_MEMBERSHIP.
+        :return: True only if visibility is PRIVATE.
         :rtype: bool
         """
         return self.context.visibility == PersonVisibility.PRIVATE
@@ -1881,7 +1880,7 @@
     def updateContextFromData(self, data):
         """Update context from form data.
 
-        If the user did not specify a buildd secret but marked the 
+        If the user did not specify a buildd secret but marked the
         archive as private, generate a secret for them.
         """
         if data['private'] and data['buildd_secret'] is None:
@@ -1958,8 +1957,7 @@
     def owner_is_private_team(self):
         """Is the owner a private team?
 
-        :return: True only if visibility is PRIVATE.  False is returned when
-        the visibility is PUBLIC and PRIVATE_MEMBERSHIP.
+        :return: True only if visibility is PRIVATE.
         :rtype: bool
         """
         return self.context.owner.visibility == PersonVisibility.PRIVATE
@@ -2028,4 +2026,3 @@
         self.request.response.addInfoNotification(
             "Deletion of '%s' has been requested and the repository will be "
             "removed shortly." % self.context.title)
-

=== modified file 'lib/lp/soyuz/browser/archivesubscription.py'
--- lib/lp/soyuz/browser/archivesubscription.py	2010-03-08 18:01:33 +0000
+++ lib/lp/soyuz/browser/archivesubscription.py	2010-07-28 15:06:10 +0000
@@ -11,7 +11,7 @@
     'ArchiveSubscribersView',
     'PersonArchiveSubscriptionView',
     'PersonArchiveSubscriptionsView',
-    'traverse_archive_subscription_for_subscriber'
+    'traverse_archive_subscription_for_subscriber',
     ]
 
 import datetime
@@ -27,7 +27,7 @@
 
 from canonical.cachedproperty import cachedproperty
 from canonical.launchpad import _
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 from lp.soyuz.browser.sourceslist import (
     SourcesListEntries, SourcesListEntriesView)
 from lp.soyuz.interfaces.archive import IArchiveSet
@@ -93,7 +93,7 @@
     we simply want to use a date field when users create or edit new
     subscriptions.
     """
-    subscriber = ParticipatingPersonChoice(
+    subscriber = PersonChoice(
         title=_("Subscriber"), required=True, vocabulary='ValidPersonOrTeam',
         description=_("The person or team to grant access."))
 
@@ -383,6 +383,3 @@
         token_set = getUtility(IArchiveAuthTokenSet)
         return token_set.getActiveTokenForArchiveAndPerson(
             self.context.archive, self.context.subscriber)
-
-
-

=== modified file 'lib/lp/soyuz/interfaces/archive.py'
--- lib/lp/soyuz/interfaces/archive.py	2010-07-27 12:28:46 +0000
+++ lib/lp/soyuz/interfaces/archive.py	2010-07-28 15:06:10 +0000
@@ -53,7 +53,7 @@
 
 from canonical.launchpad import _
 from canonical.launchpad.fields import (
-    ParticipatingPersonChoice, PublicPersonChoice, StrippedTextLine)
+    PersonChoice, PublicPersonChoice, StrippedTextLine)
 from canonical.launchpad.interfaces.launchpad import IPrivacy
 from lp.registry.interfaces.role import IHasOwner
 from lp.soyuz.interfaces.buildrecords import IHasBuildRecords
@@ -227,7 +227,7 @@
     id = Attribute("The archive ID.")
 
     owner = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_('Owner'), required=True, vocabulary='ValidOwner',
             description=_("""The archive owner.""")))
 

=== modified file 'lib/lp/soyuz/interfaces/archivesubscriber.py'
--- lib/lp/soyuz/interfaces/archivesubscriber.py	2009-09-11 10:52:54 +0000
+++ lib/lp/soyuz/interfaces/archivesubscriber.py	2010-07-28 15:06:10 +0000
@@ -20,7 +20,7 @@
 from lazr.enum import DBEnumeratedType, DBItem
 
 from canonical.launchpad import _
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 from lp.soyuz.interfaces.archive import IArchive
 from lp.registry.interfaces.person import IPerson
 from lazr.restful.declarations import export_as_webservice_entry, exported
@@ -71,7 +71,7 @@
         title=_("Date Created"), required=True, readonly=True,
         description=_("The timestamp when the subscription was created.")))
 
-    subscriber = exported(ParticipatingPersonChoice(
+    subscriber = exported(PersonChoice(
         title=_("Subscriber"), required=True, readonly=True,
         vocabulary='ValidPersonOrTeam',
         description=_("The person who is subscribed.")))

=== modified file 'lib/lp/soyuz/model/archive.py'
--- lib/lp/soyuz/model/archive.py	2010-07-27 12:53:24 +0000
+++ lib/lp/soyuz/model/archive.py	2010-07-28 15:06:10 +0000
@@ -102,8 +102,7 @@
     IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR)
 from canonical.launchpad.webapp.url import urlappend
 from canonical.launchpad.validators.name import valid_name
-from lp.registry.interfaces.person import (
-    validate_person_not_private_membership)
+from lp.registry.interfaces.person import validate_person
 
 
 class Archive(SQLBase):
@@ -113,7 +112,7 @@
 
     owner = ForeignKey(
         dbName='owner', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership, notNull=True)
+        storm_validator=validate_person, notNull=True)
 
     def _validate_archive_name(self, attr, value):
         """Only allow renaming of COPY archives.

=== modified file 'lib/lp/soyuz/model/archivesubscriber.py'
--- lib/lp/soyuz/model/archivesubscriber.py	2009-12-24 06:44:57 +0000
+++ lib/lp/soyuz/model/archivesubscriber.py	2010-07-28 15:06:10 +0000
@@ -22,8 +22,7 @@
 from canonical.database.enumcol import DBEnum
 from lp.soyuz.interfaces.archiveauthtoken import IArchiveAuthTokenSet
 from lp.soyuz.model.archiveauthtoken import ArchiveAuthToken
-from lp.registry.interfaces.person import (
-    validate_person_not_private_membership)
+from lp.registry.interfaces.person import validate_person
 from lp.registry.model.teammembership import TeamParticipation
 from lp.soyuz.interfaces.archivesubscriber import (
     ArchiveSubscriberStatus, IArchiveSubscriber)
@@ -47,7 +46,7 @@
 
     subscriber_id = Int(
         name='subscriber', allow_none=False,
-        validator=validate_person_not_private_membership)
+        validator=validate_person)
     subscriber = Reference(subscriber_id, 'Person.id')
 
     date_expires = DateTime(

=== modified file 'lib/lp/translations/interfaces/potemplate.py'
--- lib/lp/translations/interfaces/potemplate.py	2010-07-22 14:59:48 +0000
+++ lib/lp/translations/interfaces/potemplate.py	2010-07-28 15:06:10 +0000
@@ -12,7 +12,7 @@
     exported, export_as_webservice_entry, export_read_operation,
     operation_returns_collection_of)
 
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 from canonical.launchpad.interfaces.launchpad import NotFoundError
 from canonical.launchpad.interfaces.librarian import ILibraryFileAlias
 from lp.registry.interfaces.distribution import IDistribution
@@ -124,7 +124,7 @@
         required=True,
         default=True), exported_as='active')
 
-    owner = exported(ParticipatingPersonChoice(
+    owner = exported(PersonChoice(
         title=_("Owner"),
         required=True,
         description=_(

=== modified file 'lib/lp/translations/interfaces/translationimportqueue.py'
--- lib/lp/translations/interfaces/translationimportqueue.py	2010-06-04 07:29:20 +0000
+++ lib/lp/translations/interfaces/translationimportqueue.py	2010-07-28 15:06:10 +0000
@@ -12,7 +12,7 @@
 from lazr.enum import DBEnumeratedType, DBItem, EnumeratedType, Item
 
 from canonical.launchpad import _
-from canonical.launchpad.fields import ParticipatingPersonChoice
+from canonical.launchpad.fields import PersonChoice
 from lp.registry.interfaces.sourcepackage import ISourcePackage
 from lp.translations.interfaces.translationfileformat import (
     TranslationFileFormat)
@@ -189,7 +189,7 @@
             required=True))
 
     importer = exported(
-        ParticipatingPersonChoice(
+        PersonChoice(
             title=_("Uploader"),
             required=True,
             readonly=True,

=== modified file 'lib/lp/translations/model/translationimportqueue.py'
--- lib/lp/translations/model/translationimportqueue.py	2010-07-23 14:50:50 +0000
+++ lib/lp/translations/model/translationimportqueue.py	2010-07-28 15:06:10 +0000
@@ -40,7 +40,7 @@
 from lp.registry.interfaces.series import SeriesStatus
 from lp.registry.interfaces.distroseries import IDistroSeries
 from lp.registry.interfaces.person import (
-    IPerson, validate_person_not_private_membership)
+    IPerson, validate_person)
 from lp.registry.interfaces.product import IProduct
 from lp.registry.interfaces.productseries import IProductSeries
 from lp.registry.interfaces.sourcepackage import ISourcePackage
@@ -115,7 +115,7 @@
         notNull=False)
     importer = ForeignKey(
         dbName='importer', foreignKey='Person',
-        storm_validator=validate_person_not_private_membership,
+        storm_validator=validate_person,
         notNull=True)
     dateimported = UtcDateTimeCol(dbName='dateimported', notNull=True,
         default=DEFAULT)