= Summary = Bug 429802 and bug 255798 address the issue of having merged teams included in lists of valid teams. After a team is merged it is an artifact with no value and should not be seen or heard from again. == Proposed fix == Fix the query in getAdministratedTeams and the vocabulary to exclude teams where Person.merged is not null. == Pre-implementation notes == None but a brief discussion with Curtis. == Implementation details == As above. == Tests == bin/test -vvm lp.registry -t teammembershipt.txt -t vocabularies.txt == Demo and Q/A == As mark, go to https://launchpad.dev/people and click on the merge teams link. Merge hoary team into the guada team. Then go to https://lauchpad.dev/~guadamen/+add-my-teams and ensure the hoary team is not listed. For QA, follow the instructions in bug 429802 and ensure (by hovering) that none of the teams shown have names that end in "-merge". = Launchpad lint = Checking for conflicts. and issues in doctests and templates. Running jslint, xmllint, pyflakes, and pylint. Using normal rules. Linting changed files: lib/lp/registry/doc/teammembership.txt lib/lp/registry/vocabularies.py lib/lp/registry/doc/vocabularies.txt lib/lp/registry/interfaces/person.py lib/lp/registry/model/person.py == Pyflakes Doctest notices == lib/lp/registry/doc/teammembership.txt 135: 'Unauthorized' imported but unused == Pylint notices == The following lint issues are crack. lib/lp/registry/interfaces/person.py 52: [F0401] Unable to import 'lazr.enum' (No module named enum) 54: [F0401] Unable to import 'lazr.restful.interface' (No module named restful) 55: [F0401] Unable to import 'lazr.restful.declarations' (No module named restful) 62: [F0401] Unable to import 'lazr.restful.fields' (No module named restful) 406: [E1002, PersonNameField._validate] Use super on an old style class 1384: [C0322, IPersonEditRestricted.addMember] Operator not preceded by a space status=copy_field(ITeamMembership['status']), ^ comment=Text(required=False)) @export_write_operation() def addMember(person, reviewer, status=TeamMembershipStatus.APPROVED, comment=None, force_team_add=False, may_subscribe_to_list=True): 1416: [C0322, IPersonEditRestricted.acceptInvitationToBeMemberOf] Operator not preceded by a space comment=Text()) ^ @export_write_operation() def acceptInvitationToBeMemberOf(team, comment): 1428: [C0322, IPersonEditRestricted.declineInvitationToBeMemberOf] Operator not preceded by a space comment=Text()) ^ @export_write_operation() def declineInvitationToBeMemberOf(team, comment): 1720: [C0322, IPersonSet.newTeam] Operator not preceded by a space defaultmembershipperiod='default_membership_period', ^ defaultrenewalperiod='default_renewal_period') @operation_parameters( subscriptionpolicy=Choice( title=_('Subscription policy'), vocabulary=TeamSubscriptionPolicy, required=False, default=TeamSubscriptionPolicy.MODERATED)) @export_factory_operation( ITeam, ['name', 'displayname', 'teamdescription', 'defaultmembershipperiod', 'defaultrenewalperiod']) def newTeam(teamowner, name, displayname, teamdescription=None, subscriptionpolicy=TeamSubscriptionPolicy.MODERATED, defaultmembershipperiod=None, defaultrenewalperiod=None):