Merge ~cjwatson/launchpad:black-23.3.0 into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 1c73c9947c5dc114bd4fd95384970814d99dcb3e
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:black-23.3.0
Merge into: launchpad:master
Diff against target: 17629 lines (+48/-1793)
832 files modified
.git-blame-ignore-revs (+2/-0)
.pre-commit-config.yaml (+1/-1)
cronscripts/update-bugzilla-remote-components.py (+0/-1)
lib/launchpad_loggerhead/app.py (+0/-1)
lib/launchpad_loggerhead/session.py (+0/-1)
lib/lp/answers/browser/person.py (+0/-1)
lib/lp/answers/browser/tests/test_questionmessages.py (+0/-2)
lib/lp/answers/browser/tests/test_questiontarget.py (+0/-2)
lib/lp/answers/interfaces/faq.py (+0/-1)
lib/lp/answers/interfaces/questionjob.py (+0/-1)
lib/lp/answers/model/tests/test_question.py (+0/-3)
lib/lp/answers/publisher.py (+0/-1)
lib/lp/answers/tests/test_faq.py (+0/-1)
lib/lp/answers/tests/test_faq_webservice.py (+0/-1)
lib/lp/answers/tests/test_question.py (+0/-1)
lib/lp/answers/tests/test_question_webservice.py (+0/-2)
lib/lp/answers/tests/test_question_workflow.py (+1/-0)
lib/lp/app/browser/launchpad.py (+0/-3)
lib/lp/app/browser/launchpadform.py (+0/-2)
lib/lp/app/browser/tales.py (+0/-3)
lib/lp/app/browser/tests/test_css_formatter.py (+0/-1)
lib/lp/app/browser/tests/test_formatters.py (+0/-2)
lib/lp/app/browser/tests/test_inlineeditpickerwidget.py (+0/-2)
lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py (+0/-1)
lib/lp/app/browser/tests/test_launchpad.py (+0/-6)
lib/lp/app/browser/tests/test_launchpadform.py (+0/-3)
lib/lp/app/browser/tests/test_launchpadform_doc.py (+0/-1)
lib/lp/app/browser/tests/test_launchpadroot.py (+0/-1)
lib/lp/app/browser/tests/test_linkchecker.py (+0/-1)
lib/lp/app/browser/tests/test_stringformatter.py (+0/-2)
lib/lp/app/browser/tests/test_vocabulary.py (+0/-7)
lib/lp/app/browser/tests/test_webservice.py (+0/-1)
lib/lp/app/browser/vocabulary.py (+0/-1)
lib/lp/app/interfaces/informationtype.py (+0/-1)
lib/lp/app/tests/test_launchpad.py (+0/-2)
lib/lp/app/tests/test_security.py (+0/-1)
lib/lp/app/tests/test_services.py (+0/-1)
lib/lp/app/tests/test_yuitests.py (+0/-1)
lib/lp/app/validators/tests/test_validation.py (+0/-1)
lib/lp/app/webservice/tests/test_marshallers.py (+0/-3)
lib/lp/app/widgets/date.py (+1/-1)
lib/lp/app/widgets/popup.py (+0/-2)
lib/lp/app/widgets/snapbuildchannels.py (+0/-1)
lib/lp/app/widgets/tests/test_datetime.py (+0/-1)
lib/lp/app/widgets/tests/test_itemswidgets.py (+0/-1)
lib/lp/app/widgets/tests/test_popup.py (+0/-1)
lib/lp/app/widgets/tests/test_snapbuildchannels.py (+0/-1)
lib/lp/archivepublisher/customupload.py (+0/-1)
lib/lp/archivepublisher/debversion.py (+0/-1)
lib/lp/archivepublisher/model/ftparchive.py (+0/-1)
lib/lp/archivepublisher/publishing.py (+3/-3)
lib/lp/archivepublisher/scripts/copy_signingkeys.py (+0/-1)
lib/lp/archivepublisher/scripts/generate_contents_files.py (+0/-1)
lib/lp/archivepublisher/scripts/processaccepted.py (+0/-1)
lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py (+0/-3)
lib/lp/archivepublisher/tests/test_artifactory.py (+0/-2)
lib/lp/archivepublisher/tests/test_config.py (+0/-4)
lib/lp/archivepublisher/tests/test_copy_signingkeys.py (+0/-1)
lib/lp/archivepublisher/tests/test_customupload.py (+0/-1)
lib/lp/archivepublisher/tests/test_ddtp_tarball.py (+0/-1)
lib/lp/archivepublisher/tests/test_deathrow.py (+0/-1)
lib/lp/archivepublisher/tests/test_debian_installer.py (+0/-1)
lib/lp/archivepublisher/tests/test_dist_upgrader.py (+0/-1)
lib/lp/archivepublisher/tests/test_dominator.py (+0/-1)
lib/lp/archivepublisher/tests/test_indices.py (+0/-1)
lib/lp/archivepublisher/tests/test_meta_data.py (+0/-1)
lib/lp/archivepublisher/tests/test_pool.py (+0/-1)
lib/lp/archivepublisher/tests/test_processaccepted.py (+0/-2)
lib/lp/archivepublisher/tests/test_publisherconfig.py (+0/-1)
lib/lp/archivepublisher/tests/test_rosetta_translations.py (+0/-1)
lib/lp/archivepublisher/tests/test_signing.py (+0/-1)
lib/lp/archivepublisher/tests/test_sync_signingkeys.py (+0/-1)
lib/lp/archivepublisher/utils.py (+0/-1)
lib/lp/archiveuploader/nascentuploadfile.py (+0/-1)
lib/lp/archiveuploader/tests/test_buildinfofile.py (+1/-2)
lib/lp/archiveuploader/tests/test_changesfile.py (+0/-1)
lib/lp/archiveuploader/tests/test_dscfile.py (+0/-4)
lib/lp/archiveuploader/tests/test_nascentupload.py (+0/-1)
lib/lp/archiveuploader/tests/test_nascentuploadfile.py (+0/-1)
lib/lp/archiveuploader/tests/test_private_maintainers.py (+0/-1)
lib/lp/archiveuploader/tests/test_sync_notification.py (+0/-1)
lib/lp/archiveuploader/tests/test_uploadpolicy.py (+0/-1)
lib/lp/archiveuploader/uploadpolicy.py (+0/-1)
lib/lp/archiveuploader/utils.py (+1/-2)
lib/lp/blueprints/browser/person.py (+0/-1)
lib/lp/blueprints/browser/specification.py (+0/-8)
lib/lp/blueprints/browser/specificationdependency.py (+0/-2)
lib/lp/blueprints/browser/specificationsubscription.py (+0/-1)
lib/lp/blueprints/browser/sprint.py (+0/-6)
lib/lp/blueprints/browser/sprintattendance.py (+0/-1)
lib/lp/blueprints/browser/tests/test_hasspecifications.py (+0/-1)
lib/lp/blueprints/browser/tests/test_person_upcomingwork.py (+0/-4)
lib/lp/blueprints/browser/tests/test_specification.py (+0/-13)
lib/lp/blueprints/browser/tests/test_specificationdependency.py (+0/-2)
lib/lp/blueprints/browser/tests/test_specificationtarget.py (+0/-3)
lib/lp/blueprints/browser/tests/test_sprint.py (+0/-2)
lib/lp/blueprints/browser/tests/test_views.py (+0/-1)
lib/lp/blueprints/interfaces/specification.py (+0/-2)
lib/lp/blueprints/interfaces/sprint.py (+0/-1)
lib/lp/blueprints/model/specificationworkitem.py (+0/-1)
lib/lp/blueprints/model/tests/test_specification.py (+0/-3)
lib/lp/blueprints/model/tests/test_sprint.py (+0/-2)
lib/lp/blueprints/publisher.py (+0/-1)
lib/lp/blueprints/security.py (+0/-3)
lib/lp/blueprints/tests/test_hasspecifications.py (+0/-1)
lib/lp/blueprints/tests/test_specification.py (+0/-4)
lib/lp/blueprints/tests/test_webservice.py (+0/-4)
lib/lp/bugs/adapters/tests/test_bugchange.py (+0/-2)
lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py (+0/-1)
lib/lp/bugs/browser/bug.py (+0/-2)
lib/lp/bugs/browser/bugalsoaffects.py (+0/-3)
lib/lp/bugs/browser/bugattachment.py (+0/-1)
lib/lp/bugs/browser/bugmessage.py (+0/-2)
lib/lp/bugs/browser/bugnomination.py (+0/-1)
lib/lp/bugs/browser/bugtarget.py (+0/-2)
lib/lp/bugs/browser/bugtask.py (+0/-1)
lib/lp/bugs/browser/bugtracker.py (+0/-8)
lib/lp/bugs/browser/bugwatch.py (+0/-1)
lib/lp/bugs/browser/cve.py (+0/-3)
lib/lp/bugs/browser/cvereport.py (+0/-1)
lib/lp/bugs/browser/malone.py (+0/-2)
lib/lp/bugs/browser/person.py (+0/-2)
lib/lp/bugs/browser/structuralsubscription.py (+0/-1)
lib/lp/bugs/browser/tests/test_bug_context_menu.py (+0/-1)
lib/lp/bugs/browser/tests/test_bug_views.py (+0/-4)
lib/lp/bugs/browser/tests/test_bugalsoaffects.py (+0/-1)
lib/lp/bugs/browser/tests/test_bugcomment.py (+0/-6)
lib/lp/bugs/browser/tests/test_buglisting.py (+0/-3)
lib/lp/bugs/browser/tests/test_bugnomination.py (+0/-1)
lib/lp/bugs/browser/tests/test_bugsubscription_views.py (+0/-2)
lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py (+0/-6)
lib/lp/bugs/browser/tests/test_bugsupervisor.py (+0/-2)
lib/lp/bugs/browser/tests/test_bugtarget_configure.py (+0/-1)
lib/lp/bugs/browser/tests/test_bugtarget_filebug.py (+0/-5)
lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py (+0/-1)
lib/lp/bugs/browser/tests/test_bugtarget_tags.py (+0/-1)
lib/lp/bugs/browser/tests/test_bugtask.py (+0/-8)
lib/lp/bugs/browser/tests/test_bugtask_adding.py (+0/-1)
lib/lp/bugs/browser/tests/test_bugtask_navigation.py (+0/-1)
lib/lp/bugs/browser/tests/test_bugtracker_component.py (+0/-1)
lib/lp/bugs/browser/tests/test_bugtracker_views.py (+0/-2)
lib/lp/bugs/browser/tests/test_bugview.py (+0/-2)
lib/lp/bugs/browser/tests/test_bugwatch_views.py (+0/-1)
lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py (+0/-1)
lib/lp/bugs/browser/tests/test_expose.py (+0/-1)
lib/lp/bugs/browser/tests/test_person_bugs.py (+0/-1)
lib/lp/bugs/browser/tests/test_structuralsubscription.py (+0/-1)
lib/lp/bugs/browser/widgets/tests/test_bug.py (+0/-1)
lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py (+0/-1)
lib/lp/bugs/externalbugtracker/tests/test_github.py (+0/-3)
lib/lp/bugs/externalbugtracker/tests/test_gitlab.py (+0/-2)
lib/lp/bugs/interfaces/bugsupervisor.py (+0/-1)
lib/lp/bugs/interfaces/bugtask.py (+0/-1)
lib/lp/bugs/interfaces/bugtasksearch.py (+0/-1)
lib/lp/bugs/interfaces/bugtracker.py (+0/-1)
lib/lp/bugs/interfaces/personsubscriptioninfo.py (+0/-4)
lib/lp/bugs/mail/tests/test_commands.py (+0/-11)
lib/lp/bugs/model/bug.py (+1/-0)
lib/lp/bugs/model/bugnomination.py (+0/-1)
lib/lp/bugs/model/bugtaskflat.py (+0/-1)
lib/lp/bugs/model/tests/test_bug.py (+0/-5)
lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py (+0/-6)
lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py (+0/-3)
lib/lp/bugs/model/tests/test_bugsummary.py (+0/-1)
lib/lp/bugs/model/tests/test_bugtask.py (+0/-7)
lib/lp/bugs/model/tests/test_bugtasksearch.py (+0/-6)
lib/lp/bugs/model/tests/test_personsubscriptioninfo.py (+0/-1)
lib/lp/bugs/model/tests/test_vulnerability.py (+0/-3)
lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py (+0/-1)
lib/lp/bugs/publisher.py (+0/-1)
lib/lp/bugs/scripts/bugsummaryrebuild.py (+0/-1)
lib/lp/bugs/scripts/checkwatches/core.py (+1/-1)
lib/lp/bugs/scripts/checkwatches/tests/test_base.py (+0/-2)
lib/lp/bugs/scripts/checkwatches/tests/test_core.py (+0/-3)
lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py (+0/-1)
lib/lp/bugs/scripts/tests/test_bugnotification.py (+0/-16)
lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py (+0/-4)
lib/lp/bugs/scripts/tests/test_uct.py (+0/-3)
lib/lp/bugs/scripts/uct/models.py (+0/-1)
lib/lp/bugs/security.py (+0/-2)
lib/lp/bugs/subscribers/tests/test_bug.py (+0/-1)
lib/lp/bugs/tests/test_apportjob.py (+0/-1)
lib/lp/bugs/tests/test_bug_messages_webservice.py (+0/-1)
lib/lp/bugs/tests/test_bug_notification_recipients.py (+0/-1)
lib/lp/bugs/tests/test_bugbranch.py (+0/-2)
lib/lp/bugs/tests/test_bugchanges.py (+0/-1)
lib/lp/bugs/tests/test_bugnomination.py (+0/-3)
lib/lp/bugs/tests/test_bugs_webservice.py (+0/-5)
lib/lp/bugs/tests/test_bugtaskfilter.py (+0/-1)
lib/lp/bugs/tests/test_bugtaskflat_triggers.py (+0/-2)
lib/lp/bugs/tests/test_bugtracker.py (+0/-1)
lib/lp/bugs/tests/test_bugtracker_components.py (+0/-3)
lib/lp/bugs/tests/test_bugtracker_vocabulary.py (+0/-2)
lib/lp/bugs/tests/test_bugwatch.py (+0/-3)
lib/lp/bugs/tests/test_bzremotecomponentfinder.py (+0/-2)
lib/lp/bugs/tests/test_cve.py (+0/-1)
lib/lp/bugs/tests/test_structuralsubscription.py (+0/-5)
lib/lp/bugs/tests/test_structuralsubscriptiontarget.py (+0/-8)
lib/lp/bugs/tests/test_vulnerability.py (+0/-1)
lib/lp/bugs/tests/test_yuitests.py (+0/-1)
lib/lp/bugs/vocabularies.py (+0/-1)
lib/lp/buildmaster/browser/tests/test_builder.py (+0/-2)
lib/lp/buildmaster/browser/tests/test_builder_views.py (+0/-2)
lib/lp/buildmaster/downloader.py (+0/-2)
lib/lp/buildmaster/enums.py (+0/-2)
lib/lp/buildmaster/interfaces/builder.py (+0/-1)
lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py (+0/-1)
lib/lp/buildmaster/manager.py (+0/-1)
lib/lp/buildmaster/queuedepth.py (+1/-0)
lib/lp/buildmaster/tests/test_builder.py (+0/-2)
lib/lp/buildmaster/tests/test_buildfarmjob.py (+0/-2)
lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py (+0/-1)
lib/lp/buildmaster/tests/test_interactor.py (+0/-2)
lib/lp/buildmaster/tests/test_manager.py (+0/-6)
lib/lp/buildmaster/tests/test_vocabularies.py (+0/-1)
lib/lp/buildmaster/vocabularies.py (+0/-1)
lib/lp/charms/adapters/tests/test_buildarch.py (+0/-2)
lib/lp/charms/browser/charmrecipe.py (+1/-1)
lib/lp/charms/browser/charmrecipelisting.py (+0/-3)
lib/lp/charms/browser/tests/test_charmrecipe.py (+0/-2)
lib/lp/charms/browser/tests/test_charmrecipebuild.py (+0/-3)
lib/lp/charms/browser/tests/test_charmrecipelisting.py (+0/-1)
lib/lp/charms/browser/tests/test_hascharmrecipes.py (+0/-2)
lib/lp/charms/mail/charmrecipebuild.py (+0/-1)
lib/lp/charms/tests/test_charmbase.py (+0/-4)
lib/lp/charms/tests/test_charmhubclient.py (+0/-1)
lib/lp/charms/tests/test_charmrecipe.py (+0/-6)
lib/lp/charms/tests/test_charmrecipebuild.py (+0/-3)
lib/lp/charms/tests/test_charmrecipebuildbehaviour.py (+0/-2)
lib/lp/charms/tests/test_charmrecipebuildjob.py (+0/-2)
lib/lp/charms/tests/test_charmrecipejob.py (+0/-2)
lib/lp/code/adapters/tests/test_branch.py (+0/-1)
lib/lp/code/adapters/tests/test_branchcollection.py (+0/-1)
lib/lp/code/adapters/tests/test_gitrepository.py (+0/-1)
lib/lp/code/browser/bazaar.py (+0/-1)
lib/lp/code/browser/branch.py (+0/-4)
lib/lp/code/browser/branchlisting.py (+0/-3)
lib/lp/code/browser/branchmergeproposal.py (+0/-3)
lib/lp/code/browser/branchref.py (+0/-1)
lib/lp/code/browser/branchsubscription.py (+0/-1)
lib/lp/code/browser/diff.py (+0/-1)
lib/lp/code/browser/gitlisting.py (+0/-6)
lib/lp/code/browser/gitref.py (+0/-1)
lib/lp/code/browser/gitrepository.py (+0/-8)
lib/lp/code/browser/gitsubscription.py (+0/-1)
lib/lp/code/browser/sourcepackagerecipe.py (+0/-1)
lib/lp/code/browser/sourcepackagerecipebuild.py (+0/-1)
lib/lp/code/browser/sourcepackagerecipelisting.py (+0/-3)
lib/lp/code/browser/tests/test_branch.py (+0/-7)
lib/lp/code/browser/tests/test_branchlisting.py (+0/-5)
lib/lp/code/browser/tests/test_branchmergeproposal.py (+0/-9)
lib/lp/code/browser/tests/test_branchmergeproposallisting.py (+0/-31)
lib/lp/code/browser/tests/test_branchsubscription.py (+0/-1)
lib/lp/code/browser/tests/test_cibuild.py (+0/-3)
lib/lp/code/browser/tests/test_codeimport.py (+0/-1)
lib/lp/code/browser/tests/test_codereviewcomment.py (+0/-2)
lib/lp/code/browser/tests/test_diff.py (+0/-1)
lib/lp/code/browser/tests/test_gitlisting.py (+0/-3)
lib/lp/code/browser/tests/test_gitref.py (+0/-2)
lib/lp/code/browser/tests/test_gitrepository.py (+0/-11)
lib/lp/code/browser/tests/test_gitsubscription.py (+0/-2)
lib/lp/code/browser/tests/test_product.py (+0/-2)
lib/lp/code/browser/tests/test_sourcepackagerecipe.py (+0/-8)
lib/lp/code/browser/tests/test_sourcepackagerecipebuild.py (+0/-1)
lib/lp/code/browser/tests/test_sourcepackagerecipelisting.py (+0/-1)
lib/lp/code/browser/widgets/gitgrantee.py (+0/-1)
lib/lp/code/browser/widgets/gitref.py (+0/-2)
lib/lp/code/browser/widgets/gitrepositorytarget.py (+0/-1)
lib/lp/code/browser/widgets/tests/test_gitgrantee.py (+0/-1)
lib/lp/code/browser/widgets/tests/test_gitrefwidget.py (+0/-1)
lib/lp/code/browser/widgets/tests/test_gitrepositorytargetwidget.py (+0/-1)
lib/lp/code/feed/branch.py (+0/-1)
lib/lp/code/interfaces/branch.py (+0/-1)
lib/lp/code/interfaces/branchmergeproposal.py (+0/-2)
lib/lp/code/interfaces/codereviewinlinecomment.py (+0/-1)
lib/lp/code/mail/cibuild.py (+0/-1)
lib/lp/code/mail/sourcepackagerecipebuild.py (+0/-1)
lib/lp/code/mail/tests/test_sourcepackagerecipebuild.py (+0/-1)
lib/lp/code/model/branchtarget.py (+0/-1)
lib/lp/code/model/cibuild.py (+0/-1)
lib/lp/code/model/codeimportjob.py (+0/-1)
lib/lp/code/model/gitrepository.py (+0/-2)
lib/lp/code/model/revision.py (+0/-1)
lib/lp/code/model/sourcepackagerecipebuild.py (+0/-1)
lib/lp/code/model/tests/test_branch.py (+0/-8)
lib/lp/code/model/tests/test_branchcloud.py (+0/-1)
lib/lp/code/model/tests/test_branchcollection.py (+0/-6)
lib/lp/code/model/tests/test_branchhosting.py (+0/-1)
lib/lp/code/model/tests/test_branchjob.py (+0/-3)
lib/lp/code/model/tests/test_branchlookup.py (+0/-2)
lib/lp/code/model/tests/test_branchmergeproposal.py (+0/-11)
lib/lp/code/model/tests/test_branchmergeproposaljobs.py (+0/-10)
lib/lp/code/model/tests/test_branchnamespace.py (+0/-1)
lib/lp/code/model/tests/test_branchpuller.py (+0/-1)
lib/lp/code/model/tests/test_branchset.py (+0/-1)
lib/lp/code/model/tests/test_branchtarget.py (+0/-3)
lib/lp/code/model/tests/test_cibuild.py (+0/-5)
lib/lp/code/model/tests/test_cibuildbehaviour.py (+0/-2)
lib/lp/code/model/tests/test_codeimport.py (+0/-1)
lib/lp/code/model/tests/test_codeimportjob.py (+0/-1)
lib/lp/code/model/tests/test_codeimportresult.py (+0/-1)
lib/lp/code/model/tests/test_codereviewcomment.py (+0/-1)
lib/lp/code/model/tests/test_codereviewvote.py (+0/-1)
lib/lp/code/model/tests/test_diff.py (+0/-2)
lib/lp/code/model/tests/test_gitactivity.py (+0/-1)
lib/lp/code/model/tests/test_gitcollection.py (+0/-5)
lib/lp/code/model/tests/test_githosting.py (+0/-1)
lib/lp/code/model/tests/test_gitnamespace.py (+0/-1)
lib/lp/code/model/tests/test_gitref.py (+0/-1)
lib/lp/code/model/tests/test_gitrepository.py (+0/-13)
lib/lp/code/model/tests/test_gitrule.py (+0/-2)
lib/lp/code/model/tests/test_hasbranches.py (+0/-1)
lib/lp/code/model/tests/test_linkedbranch.py (+0/-6)
lib/lp/code/model/tests/test_recipebuilder.py (+0/-3)
lib/lp/code/model/tests/test_sourcepackagerecipe.py (+0/-2)
lib/lp/code/model/tests/test_sourcepackagerecipebuild.py (+0/-1)
lib/lp/code/publisher.py (+0/-1)
lib/lp/code/scripts/tests/test_merge_proposal_jobs.py (+0/-1)
lib/lp/code/scripts/tests/test_reclaim_branch_space.py (+0/-1)
lib/lp/code/scripts/tests/test_repack_git_repositories.py (+0/-1)
lib/lp/code/scripts/tests/test_request_daily_builds.py (+0/-1)
lib/lp/code/scripts/tests/test_sendbranchmail.py (+0/-1)
lib/lp/code/scripts/tests/test_upgrade_branches.py (+0/-1)
lib/lp/code/security.py (+0/-3)
lib/lp/code/tests/test_branch.py (+0/-2)
lib/lp/code/tests/test_branch_webservice.py (+0/-5)
lib/lp/code/tests/test_branchmergeproposal.py (+0/-1)
lib/lp/code/tests/test_directbranchcommit.py (+0/-1)
lib/lp/code/tests/test_project.py (+0/-1)
lib/lp/code/tests/test_yuitests.py (+0/-1)
lib/lp/code/vocabularies/sourcepackagerecipe.py (+0/-1)
lib/lp/code/vocabularies/tests/test_gitref_vocabularies.py (+0/-2)
lib/lp/code/vocabularies/tests/test_gitrule_vocabularies.py (+0/-1)
lib/lp/code/xmlrpc/tests/test_codeimportscheduler.py (+0/-1)
lib/lp/code/xmlrpc/tests/test_git.py (+0/-1)
lib/lp/codehosting/puller/tests/test_scheduler.py (+0/-2)
lib/lp/codehosting/scanner/bzrsync.py (+1/-1)
lib/lp/codehosting/scanner/tests/test_buglinks.py (+0/-1)
lib/lp/codehosting/scanner/tests/test_email.py (+0/-2)
lib/lp/codehosting/scripts/tests/test_sync_branches.py (+0/-1)
lib/lp/codehosting/scripts/tests/test_upgrade_all_branches.py (+0/-1)
lib/lp/codehosting/sshserver/session.py (+0/-2)
lib/lp/codehosting/tests/test_acceptance.py (+0/-1)
lib/lp/codehosting/tests/test_rewrite.py (+0/-1)
lib/lp/codehosting/tests/test_sftp.py (+0/-1)
lib/lp/codehosting/tests/test_upgrade.py (+0/-1)
lib/lp/codehosting/vfs/tests/test_branchfs.py (+0/-3)
lib/lp/coop/answersbugs/tests/test_questionbug.py (+0/-1)
lib/lp/coop/answersbugs/visibility.py (+0/-2)
lib/lp/oci/browser/ocirecipe.py (+0/-2)
lib/lp/oci/browser/ocirecipebuild.py (+0/-1)
lib/lp/oci/browser/ocirecipesubscription.py (+0/-1)
lib/lp/oci/browser/tests/test_ocirecipe.py (+0/-2)
lib/lp/oci/browser/tests/test_ocirecipebuild.py (+0/-3)
lib/lp/oci/browser/tests/test_ocirecipesubscription.py (+0/-1)
lib/lp/oci/interfaces/ociregistrycredentials.py (+0/-2)
lib/lp/oci/model/ocipushrule.py (+0/-1)
lib/lp/oci/model/ocirecipe.py (+0/-1)
lib/lp/oci/model/ocirecipebuild.py (+0/-3)
lib/lp/oci/model/ocirecipebuildbehaviour.py (+0/-1)
lib/lp/oci/model/ociregistrycredentials.py (+0/-1)
lib/lp/oci/tests/test_ocipushrule.py (+0/-2)
lib/lp/oci/tests/test_ocirecipe.py (+0/-3)
lib/lp/oci/tests/test_ocirecipebuild.py (+0/-4)
lib/lp/oci/tests/test_ocirecipebuildbehaviour.py (+0/-4)
lib/lp/oci/tests/test_ocirecipebuildjob.py (+0/-3)
lib/lp/oci/tests/test_ocirecipejob.py (+0/-1)
lib/lp/oci/tests/test_ociregistryclient.py (+0/-1)
lib/lp/oci/tests/test_ociregistrycredentials.py (+0/-2)
lib/lp/oci/vocabularies.py (+0/-1)
lib/lp/registry/browser/codeofconduct.py (+0/-6)
lib/lp/registry/browser/distribution.py (+0/-15)
lib/lp/registry/browser/distributionmirror.py (+0/-5)
lib/lp/registry/browser/distributionsourcepackage.py (+0/-5)
lib/lp/registry/browser/distroseries.py (+0/-5)
lib/lp/registry/browser/karma.py (+0/-2)
lib/lp/registry/browser/nameblocklist.py (+0/-1)
lib/lp/registry/browser/ociproject.py (+0/-3)
lib/lp/registry/browser/person.py (+0/-13)
lib/lp/registry/browser/personociproject.py (+0/-1)
lib/lp/registry/browser/pillar.py (+0/-2)
lib/lp/registry/browser/poll.py (+0/-2)
lib/lp/registry/browser/product.py (+2/-6)
lib/lp/registry/browser/productrelease.py (+0/-2)
lib/lp/registry/browser/productseries.py (+0/-1)
lib/lp/registry/browser/project.py (+0/-10)
lib/lp/registry/browser/sourcepackage.py (+0/-2)
lib/lp/registry/browser/team.py (+0/-7)
lib/lp/registry/browser/tests/test_announcements.py (+0/-1)
lib/lp/registry/browser/tests/test_branding.py (+0/-1)
lib/lp/registry/browser/tests/test_codeofconduct.py (+0/-2)
lib/lp/registry/browser/tests/test_distribution.py (+0/-1)
lib/lp/registry/browser/tests/test_distribution_views.py (+0/-5)
lib/lp/registry/browser/tests/test_distributionsourcepackage.py (+0/-4)
lib/lp/registry/browser/tests/test_distroseries.py (+0/-4)
lib/lp/registry/browser/tests/test_distroseries_webservice.py (+0/-1)
lib/lp/registry/browser/tests/test_distroseriesdifference_views.py (+0/-2)
lib/lp/registry/browser/tests/test_distroseriesdifference_webservice.py (+0/-1)
lib/lp/registry/browser/tests/test_gpgkey.py (+0/-2)
lib/lp/registry/browser/tests/test_milestone.py (+0/-7)
lib/lp/registry/browser/tests/test_milestonetag.py (+0/-1)
lib/lp/registry/browser/tests/test_ociproject.py (+0/-6)
lib/lp/registry/browser/tests/test_peoplemerge.py (+0/-1)
lib/lp/registry/browser/tests/test_person.py (+0/-8)
lib/lp/registry/browser/tests/test_person_webservice.py (+0/-5)
lib/lp/registry/browser/tests/test_pillar_sharing.py (+0/-3)
lib/lp/registry/browser/tests/test_poll.py (+0/-2)
lib/lp/registry/browser/tests/test_product.py (+0/-5)
lib/lp/registry/browser/tests/test_productrelease.py (+0/-1)
lib/lp/registry/browser/tests/test_productseries_views.py (+0/-2)
lib/lp/registry/browser/tests/test_projectgroup.py (+0/-1)
lib/lp/registry/browser/tests/test_rdf.py (+0/-1)
lib/lp/registry/browser/tests/test_reassign_team_view.py (+0/-2)
lib/lp/registry/browser/tests/test_sourcepackage_views.py (+0/-4)
lib/lp/registry/browser/tests/test_sshkey.py (+0/-2)
lib/lp/registry/browser/tests/test_team.py (+0/-12)
lib/lp/registry/browser/tests/test_team_activate_ppa.py (+0/-1)
lib/lp/registry/browser/tests/test_teammembership.py (+0/-1)
lib/lp/registry/browser/widgets/ocicredentialswidget.py (+0/-1)
lib/lp/registry/browser/widgets/tests/test_ocicredentialswidget.py (+0/-1)
lib/lp/registry/enums.py (+0/-3)
lib/lp/registry/interfaces/distroseries.py (+3/-3)
lib/lp/registry/interfaces/person.py (+0/-1)
lib/lp/registry/interfaces/pillar.py (+0/-1)
lib/lp/registry/interfaces/poll.py (+0/-2)
lib/lp/registry/interfaces/product.py (+0/-2)
lib/lp/registry/interfaces/productrelease.py (+0/-1)
lib/lp/registry/interfaces/productseries.py (+0/-1)
lib/lp/registry/mail/teammembership.py (+0/-1)
lib/lp/registry/model/accesspolicy.py (+1/-6)
lib/lp/registry/model/commercialsubscription.py (+0/-1)
lib/lp/registry/model/distroseries.py (+0/-1)
lib/lp/registry/model/gpgkey.py (+0/-1)
lib/lp/registry/model/mailinglist.py (+0/-1)
lib/lp/registry/model/milestone.py (+0/-2)
lib/lp/registry/model/person.py (+1/-2)
lib/lp/registry/model/pillar.py (+0/-1)
lib/lp/registry/model/productjob.py (+0/-1)
lib/lp/registry/model/teammembership.py (+1/-2)
lib/lp/registry/scripts/closeaccount.py (+0/-1)
lib/lp/registry/scripts/createbotaccount.py (+0/-1)
lib/lp/registry/scripts/distributionmirror_prober.py (+0/-4)
lib/lp/registry/scripts/productreleasefinder/filter.py (+2/-2)
lib/lp/registry/scripts/suspendbotaccount.py (+0/-1)
lib/lp/registry/scripts/teamparticipation.py (+2/-2)
lib/lp/registry/scripts/tests/test_closeaccount.py (+0/-2)
lib/lp/registry/scripts/tests/test_populate_distroseriesdiff.py (+0/-1)
lib/lp/registry/security.py (+0/-1)
lib/lp/registry/services/sharingservice.py (+2/-2)
lib/lp/registry/services/tests/test_sharingservice.py (+1/-1)
lib/lp/registry/tests/test_accesspolicy.py (+0/-2)
lib/lp/registry/tests/test_adapters.py (+0/-1)
lib/lp/registry/tests/test_codeofconduct.py (+0/-1)
lib/lp/registry/tests/test_distribution.py (+0/-6)
lib/lp/registry/tests/test_distributionmirror_prober.py (+0/-3)
lib/lp/registry/tests/test_distributionsourcepackage.py (+0/-3)
lib/lp/registry/tests/test_distroseries.py (+0/-4)
lib/lp/registry/tests/test_distroseriesdifference.py (+0/-4)
lib/lp/registry/tests/test_distroseriesdifferencecomment.py (+0/-2)
lib/lp/registry/tests/test_distroseriesparent.py (+0/-1)
lib/lp/registry/tests/test_gpgkey.py (+0/-1)
lib/lp/registry/tests/test_initderiveddistroseries.py (+0/-2)
lib/lp/registry/tests/test_mailinglist.py (+0/-2)
lib/lp/registry/tests/test_mailinglistapi.py (+0/-1)
lib/lp/registry/tests/test_membership_notification_job.py (+0/-2)
lib/lp/registry/tests/test_milestone_vocabularies.py (+0/-1)
lib/lp/registry/tests/test_nameblocklist.py (+0/-2)
lib/lp/registry/tests/test_nickname.py (+0/-1)
lib/lp/registry/tests/test_notification.py (+0/-1)
lib/lp/registry/tests/test_ociproject.py (+0/-2)
lib/lp/registry/tests/test_ociprojectname.py (+0/-2)
lib/lp/registry/tests/test_ociprojectseries.py (+0/-1)
lib/lp/registry/tests/test_oopsreferences.py (+0/-1)
lib/lp/registry/tests/test_packaging.py (+0/-1)
lib/lp/registry/tests/test_person.py (+0/-7)
lib/lp/registry/tests/test_person_close_account_job.py (+0/-2)
lib/lp/registry/tests/test_person_deactivate_job.py (+0/-1)
lib/lp/registry/tests/test_person_merge_job.py (+0/-1)
lib/lp/registry/tests/test_person_sort_key.py (+0/-1)
lib/lp/registry/tests/test_person_vocabularies.py (+0/-1)
lib/lp/registry/tests/test_personmerge.py (+0/-1)
lib/lp/registry/tests/test_personset.py (+0/-10)
lib/lp/registry/tests/test_pillar.py (+0/-2)
lib/lp/registry/tests/test_pillaraffiliation.py (+0/-8)
lib/lp/registry/tests/test_prf_finder.py (+0/-3)
lib/lp/registry/tests/test_product.py (+0/-5)
lib/lp/registry/tests/test_productjob.py (+0/-1)
lib/lp/registry/tests/test_projectgroup.py (+0/-4)
lib/lp/registry/tests/test_service_usage.py (+0/-2)
lib/lp/registry/tests/test_sourcepackage.py (+0/-1)
lib/lp/registry/tests/test_sourcepackagename.py (+0/-1)
lib/lp/registry/tests/test_sourcepackagename_vocabulary.py (+0/-1)
lib/lp/registry/tests/test_subscribers.py (+0/-3)
lib/lp/registry/tests/test_suitesourcepackage.py (+0/-1)
lib/lp/registry/tests/test_team.py (+0/-5)
lib/lp/registry/tests/test_team_webservice.py (+0/-2)
lib/lp/registry/tests/test_teammembership.py (+0/-3)
lib/lp/registry/tests/test_teammembership_webservice.py (+0/-1)
lib/lp/registry/tests/test_xmlrpc.py (+0/-3)
lib/lp/registry/tests/test_yuitests.py (+0/-1)
lib/lp/registry/vocabularies.py (+0/-1)
lib/lp/scripts/garbo.py (+0/-2)
lib/lp/scripts/utilities/tests/test_audit_security_settings.py (+0/-1)
lib/lp/services/auth/browser.py (+0/-1)
lib/lp/services/auth/tests/test_browser.py (+0/-1)
lib/lp/services/auth/tests/test_model.py (+0/-3)
lib/lp/services/auth/tests/test_yuitests.py (+0/-1)
lib/lp/services/authserver/tests/test_authserver.py (+0/-3)
lib/lp/services/config/tests/test_database_config.py (+0/-1)
lib/lp/services/config/tests/test_zcml.py (+0/-1)
lib/lp/services/crypto/tests/test_model.py (+0/-1)
lib/lp/services/database/locking.py (+0/-1)
lib/lp/services/database/multitablecopy.py (+0/-1)
lib/lp/services/database/policy.py (+0/-1)
lib/lp/services/database/stormexpr.py (+0/-2)
lib/lp/services/database/tests/test_bulk.py (+0/-2)
lib/lp/services/database/tests/test_collection.py (+0/-1)
lib/lp/services/database/tests/test_isolation.py (+0/-1)
lib/lp/services/database/tests/test_sqlbase.py (+0/-1)
lib/lp/services/database/tests/test_stormbase.py (+0/-2)
lib/lp/services/database/tests/test_stormexpr.py (+0/-1)
lib/lp/services/features/browser/changelog.py (+0/-1)
lib/lp/services/features/browser/tests/test_feature_editor.py (+0/-1)
lib/lp/services/features/browser/tests/test_feature_info.py (+0/-1)
lib/lp/services/features/rulesource.py (+3/-3)
lib/lp/services/features/tests/test_db_settings.py (+0/-1)
lib/lp/services/features/tests/test_flags.py (+0/-3)
lib/lp/services/features/tests/test_scopes.py (+0/-4)
lib/lp/services/features/tests/test_webapp.py (+0/-3)
lib/lp/services/features/tests/test_xmlrpc.py (+0/-1)
lib/lp/services/fields/__init__.py (+0/-3)
lib/lp/services/fields/tests/test_fields.py (+0/-2)
lib/lp/services/fields/tests/test_tag_fields.py (+0/-2)
lib/lp/services/identity/interfaces/account.py (+0/-1)
lib/lp/services/identity/model/emailaddress.py (+0/-1)
lib/lp/services/identity/tests/test_account.py (+0/-1)
lib/lp/services/job/interfaces/job.py (+0/-1)
lib/lp/services/job/runner.py (+0/-1)
lib/lp/services/job/tests/test_celery.py (+0/-1)
lib/lp/services/job/tests/test_celeryjob.py (+0/-1)
lib/lp/services/job/tests/test_job.py (+0/-1)
lib/lp/services/job/tests/test_runner.py (+0/-8)
lib/lp/services/librarian/tests/fakeserver.tac (+0/-1)
lib/lp/services/librarian/tests/test_timelimitedtoken.py (+0/-1)
lib/lp/services/librarian/tests/test_utils.py (+0/-1)
lib/lp/services/librarianserver/librariangc.py (+0/-3)
lib/lp/services/librarianserver/swift.py (+0/-1)
lib/lp/services/librarianserver/testing/tests/test_server_fixture.py (+0/-1)
lib/lp/services/librarianserver/tests/test_db.py (+0/-1)
lib/lp/services/librarianserver/tests/test_sigdumpmem.py (+0/-1)
lib/lp/services/librarianserver/tests/test_storage_db.py (+0/-1)
lib/lp/services/librarianserver/tests/test_web.py (+0/-5)
lib/lp/services/librarianserver/web.py (+0/-1)
lib/lp/services/looptuner.py (+0/-1)
lib/lp/services/mail/incoming.py (+0/-1)
lib/lp/services/mail/tests/test_basemailer.py (+0/-1)
lib/lp/services/mail/tests/test_helpers.py (+0/-1)
lib/lp/services/mail/tests/test_incoming.py (+0/-3)
lib/lp/services/mail/tests/test_notificationrecipients.py (+0/-1)
lib/lp/services/memcache/tests/test_memcache_client.py (+0/-2)
lib/lp/services/messages/model/message.py (+0/-2)
lib/lp/services/messages/tests/scenarios.py (+0/-1)
lib/lp/services/messages/tests/test_yuitests.py (+0/-1)
lib/lp/services/oauth/tests/test_tokens.py (+0/-1)
lib/lp/services/openid/extensions/tests/test_macaroon.py (+0/-3)
lib/lp/services/openid/tests/test_openid_adapters.py (+0/-1)
lib/lp/services/profile/profile.py (+1/-3)
lib/lp/services/profile/tests.py (+0/-2)
lib/lp/services/rabbit/tests/test_server.py (+0/-1)
lib/lp/services/scripts/model/scriptactivity.py (+0/-1)
lib/lp/services/signing/enums.py (+0/-1)
lib/lp/services/signing/testing/fixture.py (+0/-1)
lib/lp/services/signing/tests/test_signingkey.py (+0/-1)
lib/lp/services/statsd/tests/test_numbercruncher.py (+0/-1)
lib/lp/services/statsd/tests/test_statsd_client.py (+0/-1)
lib/lp/services/testing/tests/test_customresult.py (+0/-1)
lib/lp/services/tests/test_channels.py (+0/-1)
lib/lp/services/tests/test_stacktrace.py (+0/-1)
lib/lp/services/tests/test_utils.py (+0/-1)
lib/lp/services/timeline/tests/test_requesttimeline.py (+0/-1)
lib/lp/services/verification/browser/logintoken.py (+0/-6)
lib/lp/services/verification/tests/test_logintoken.py (+0/-1)
lib/lp/services/webapp/adapter.py (+0/-1)
lib/lp/services/webapp/candid.py (+0/-1)
lib/lp/services/webapp/error.py (+0/-7)
lib/lp/services/webapp/errorlog.py (+0/-2)
lib/lp/services/webapp/interfaces.py (+0/-2)
lib/lp/services/webapp/launchbag.py (+0/-1)
lib/lp/services/webapp/login.py (+0/-3)
lib/lp/services/webapp/metazcml.py (+0/-4)
lib/lp/services/webapp/notifications.py (+0/-1)
lib/lp/services/webapp/pgsession.py (+0/-1)
lib/lp/services/webapp/servers.py (+1/-2)
lib/lp/services/webapp/tests/test_adapter.py (+0/-1)
lib/lp/services/webapp/tests/test_authentication.py (+0/-1)
lib/lp/services/webapp/tests/test_authorization.py (+0/-2)
lib/lp/services/webapp/tests/test_authutility.py (+0/-1)
lib/lp/services/webapp/tests/test_candid.py (+0/-3)
lib/lp/services/webapp/tests/test_error.py (+0/-2)
lib/lp/services/webapp/tests/test_errorlog.py (+0/-1)
lib/lp/services/webapp/tests/test_initialization.py (+0/-1)
lib/lp/services/webapp/tests/test_notifications.py (+0/-3)
lib/lp/services/webapp/tests/test_publication.py (+0/-4)
lib/lp/services/webapp/tests/test_publisher.py (+0/-1)
lib/lp/services/webapp/tests/test_servers.py (+0/-1)
lib/lp/services/webapp/tests/test_session.py (+0/-1)
lib/lp/services/webapp/tests/test_snapshot.py (+0/-2)
lib/lp/services/webapp/tests/test_statementtracer.py (+0/-1)
lib/lp/services/webapp/tests/test_status.py (+0/-2)
lib/lp/services/webapp/tests/test_view_model.py (+0/-1)
lib/lp/services/webapp/tests/test_vocabulary.py (+0/-1)
lib/lp/services/webapp/wsgi.py (+0/-1)
lib/lp/services/webhooks/browser.py (+0/-5)
lib/lp/services/webhooks/interfaces.py (+0/-2)
lib/lp/services/webhooks/tests/test_browser.py (+0/-41)
lib/lp/services/webhooks/tests/test_job.py (+0/-3)
lib/lp/services/webhooks/tests/test_model.py (+0/-10)
lib/lp/services/webhooks/tests/test_payload.py (+0/-1)
lib/lp/services/webhooks/tests/test_webservice.py (+0/-9)
lib/lp/services/webhooks/tests/test_yuitests.py (+0/-1)
lib/lp/services/webservice/configuration.py (+0/-1)
lib/lp/services/worlddata/model/language.py (+0/-1)
lib/lp/services/worlddata/tests/test_helpers.py (+0/-3)
lib/lp/services/xref/tests/test_model.py (+0/-1)
lib/lp/snappy/adapters/tests/test_buildarch.py (+0/-2)
lib/lp/snappy/browser/snap.py (+1/-1)
lib/lp/snappy/browser/snaplisting.py (+0/-4)
lib/lp/snappy/browser/snapsubscription.py (+0/-1)
lib/lp/snappy/browser/tests/test_hassnaps.py (+0/-2)
lib/lp/snappy/browser/tests/test_snap.py (+0/-3)
lib/lp/snappy/browser/tests/test_snapbuild.py (+0/-3)
lib/lp/snappy/browser/tests/test_snaplisting.py (+0/-1)
lib/lp/snappy/browser/tests/test_snapsubscription.py (+0/-1)
lib/lp/snappy/browser/widgets/snaparchive.py (+0/-1)
lib/lp/snappy/browser/widgets/storechannels.py (+0/-1)
lib/lp/snappy/browser/widgets/tests/test_snaparchivewidget.py (+0/-1)
lib/lp/snappy/mail/snapbuild.py (+0/-1)
lib/lp/snappy/model/snapbuild.py (+0/-1)
lib/lp/snappy/tests/test_snap.py (+0/-8)
lib/lp/snappy/tests/test_snapbase.py (+0/-4)
lib/lp/snappy/tests/test_snapbuild.py (+0/-3)
lib/lp/snappy/tests/test_snapbuildbehaviour.py (+0/-1)
lib/lp/snappy/tests/test_snapbuildjob.py (+0/-2)
lib/lp/snappy/tests/test_snapjob.py (+0/-2)
lib/lp/snappy/tests/test_snappyseries.py (+0/-4)
lib/lp/snappy/tests/test_snapstoreclient.py (+0/-1)
lib/lp/snappy/tests/test_yuitests.py (+0/-1)
lib/lp/snappy/validators/tests/test_channels.py (+0/-1)
lib/lp/soyuz/adapters/overrides.py (+1/-1)
lib/lp/soyuz/adapters/tests/test_copypolicy.py (+0/-1)
lib/lp/soyuz/adapters/tests/test_gomodparser.py (+0/-1)
lib/lp/soyuz/adapters/tests/test_overrides.py (+0/-5)
lib/lp/soyuz/browser/archive.py (+0/-3)
lib/lp/soyuz/browser/distroarchseries.py (+0/-2)
lib/lp/soyuz/browser/distroarchseriesbinarypackage.py (+0/-1)
lib/lp/soyuz/browser/distroseriesbinarypackage.py (+0/-1)
lib/lp/soyuz/browser/livefs.py (+0/-1)
lib/lp/soyuz/browser/sourceslist.py (+0/-1)
lib/lp/soyuz/browser/tests/test_archive.py (+0/-3)
lib/lp/soyuz/browser/tests/test_archive_admin_view.py (+0/-1)
lib/lp/soyuz/browser/tests/test_archive_packages.py (+0/-3)
lib/lp/soyuz/browser/tests/test_archive_webservice.py (+0/-2)
lib/lp/soyuz/browser/tests/test_distributionsourcepackagerelease.py (+0/-1)
lib/lp/soyuz/browser/tests/test_distroarchseries_view.py (+0/-1)
lib/lp/soyuz/browser/tests/test_livefs.py (+0/-7)
lib/lp/soyuz/browser/tests/test_livefsbuild.py (+0/-3)
lib/lp/soyuz/browser/tests/test_personal_archive_subscription.py (+0/-1)
lib/lp/soyuz/browser/tests/test_publishing_webservice.py (+0/-2)
lib/lp/soyuz/browser/tests/test_queue.py (+0/-1)
lib/lp/soyuz/browser/tests/test_sourcepackagerelease.py (+0/-1)
lib/lp/soyuz/enums.py (+0/-1)
lib/lp/soyuz/interfaces/archive.py (+0/-1)
lib/lp/soyuz/interfaces/distributionjob.py (+0/-1)
lib/lp/soyuz/interfaces/distributionsourcepackagecache.py (+0/-1)
lib/lp/soyuz/interfaces/distroarchseriesbinarypackage.py (+0/-1)
lib/lp/soyuz/interfaces/distroseriespackagecache.py (+0/-1)
lib/lp/soyuz/interfaces/packagecopyjob.py (+0/-1)
lib/lp/soyuz/mail/binarypackagebuild.py (+0/-1)
lib/lp/soyuz/mail/livefsbuild.py (+0/-1)
lib/lp/soyuz/mail/packageupload.py (+0/-1)
lib/lp/soyuz/mail/tests/test_packageupload.py (+0/-2)
lib/lp/soyuz/model/archivejob.py (+0/-2)
lib/lp/soyuz/model/archivesubscriber.py (+0/-1)
lib/lp/soyuz/model/binarypackagebuild.py (+1/-1)
lib/lp/soyuz/model/distroseriespackagecache.py (+1/-1)
lib/lp/soyuz/model/initializedistroseriesjob.py (+0/-1)
lib/lp/soyuz/model/livefsbuild.py (+0/-1)
lib/lp/soyuz/model/packagecloner.py (+1/-1)
lib/lp/soyuz/model/packagediffjob.py (+0/-1)
lib/lp/soyuz/model/packagetranslationsuploadjob.py (+0/-1)
lib/lp/soyuz/scripts/gina/archive.py (+0/-2)
lib/lp/soyuz/scripts/ppakeygenerator.py (+0/-1)
lib/lp/soyuz/scripts/ppareport.py (+0/-1)
lib/lp/soyuz/scripts/retrydepwait.py (+0/-1)
lib/lp/soyuz/scripts/tests/test_copypackage.py (+0/-2)
lib/lp/soyuz/scripts/tests/test_gina.py (+0/-8)
lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py (+0/-1)
lib/lp/soyuz/scripts/tests/test_retrydepwait.py (+0/-1)
lib/lp/soyuz/scripts/tests/test_update_pkgcache.py (+0/-1)
lib/lp/soyuz/tests/test_archive.py (+0/-28)
lib/lp/soyuz/tests/test_archive_agent.py (+0/-1)
lib/lp/soyuz/tests/test_archive_privacy.py (+0/-2)
lib/lp/soyuz/tests/test_archive_subscriptions.py (+0/-1)
lib/lp/soyuz/tests/test_archivefile.py (+0/-1)
lib/lp/soyuz/tests/test_archivejob.py (+0/-5)
lib/lp/soyuz/tests/test_binarypackagebuild.py (+0/-6)
lib/lp/soyuz/tests/test_binarypackagename.py (+0/-1)
lib/lp/soyuz/tests/test_binarysourcereference.py (+0/-1)
lib/lp/soyuz/tests/test_build.py (+0/-1)
lib/lp/soyuz/tests/test_build_depwait.py (+0/-1)
lib/lp/soyuz/tests/test_build_notify.py (+0/-1)
lib/lp/soyuz/tests/test_build_privacy.py (+0/-1)
lib/lp/soyuz/tests/test_build_set.py (+0/-1)
lib/lp/soyuz/tests/test_build_start_estimation.py (+0/-1)
lib/lp/soyuz/tests/test_distroarchseriesfilter.py (+0/-2)
lib/lp/soyuz/tests/test_distroseriesbinarypackage.py (+0/-1)
lib/lp/soyuz/tests/test_distroseriesdifferencejob.py (+0/-2)
lib/lp/soyuz/tests/test_distroseriesqueue_rosetta_translations.py (+0/-1)
lib/lp/soyuz/tests/test_initializedistroseriesjob.py (+0/-1)
lib/lp/soyuz/tests/test_livefs.py (+0/-4)
lib/lp/soyuz/tests/test_livefsbuild.py (+0/-4)
lib/lp/soyuz/tests/test_livefsbuildbehaviour.py (+0/-2)
lib/lp/soyuz/tests/test_packagecloner.py (+0/-1)
lib/lp/soyuz/tests/test_packagecopyjob.py (+0/-1)
lib/lp/soyuz/tests/test_packagediffjob.py (+0/-1)
lib/lp/soyuz/tests/test_packageset.py (+0/-5)
lib/lp/soyuz/tests/test_packagetranslationsuploadjob.py (+0/-1)
lib/lp/soyuz/tests/test_packageupload.py (+0/-2)
lib/lp/soyuz/tests/test_processacceptedbugsjob.py (+0/-2)
lib/lp/soyuz/tests/test_publishing.py (+0/-3)
lib/lp/soyuz/tests/test_publishing_models.py (+0/-2)
lib/lp/soyuz/tests/test_sourcepackagerelease.py (+0/-1)
lib/lp/soyuz/tests/test_vocabularies.py (+0/-1)
lib/lp/soyuz/tests/test_yuitests.py (+0/-1)
lib/lp/soyuz/vocabularies.py (+0/-2)
lib/lp/soyuz/wsgi/tests/test_archiveauth.py (+0/-1)
lib/lp/soyuz/xmlrpc/tests/test_archive.py (+0/-1)
lib/lp/systemhomes.py (+0/-3)
lib/lp/testing/__init__.py (+1/-3)
lib/lp/testing/breadcrumbs.py (+0/-1)
lib/lp/testing/keyserver/tests/test_inprocess.py (+0/-1)
lib/lp/testing/keyserver/tests/test_web.py (+0/-1)
lib/lp/testing/keyserver/web.py (+0/-1)
lib/lp/testing/pgsql.py (+0/-1)
lib/lp/testing/swift/fixture.py (+0/-1)
lib/lp/testing/tests/test_dbuser.py (+0/-1)
lib/lp/testing/tests/test_factory.py (+0/-3)
lib/lp/testing/tests/test_fixture.py (+0/-5)
lib/lp/testing/tests/test_login.py (+0/-1)
lib/lp/testing/tests/test_matchers.py (+0/-1)
lib/lp/testing/tests/test_pgsql.py (+0/-1)
lib/lp/testing/tests/test_standard_test_template.py (+0/-1)
lib/lp/testing/tests/test_testing.py (+0/-1)
lib/lp/testing/yuixhr.py (+0/-1)
lib/lp/testopenid/tests/test_interfaces.py (+0/-1)
lib/lp/translations/browser/distribution.py (+0/-1)
lib/lp/translations/browser/distroseries.py (+0/-2)
lib/lp/translations/browser/person.py (+0/-1)
lib/lp/translations/browser/pofile.py (+0/-2)
lib/lp/translations/browser/potemplate.py (+0/-7)
lib/lp/translations/browser/product.py (+0/-2)
lib/lp/translations/browser/project.py (+0/-1)
lib/lp/translations/browser/tests/test_baseexportview.py (+0/-1)
lib/lp/translations/browser/tests/test_hastranslationimports.py (+0/-1)
lib/lp/translations/browser/tests/test_persontranslationview.py (+0/-1)
lib/lp/translations/browser/tests/test_pofile_view.py (+0/-2)
lib/lp/translations/browser/tests/test_potemplate_views.py (+0/-1)
lib/lp/translations/browser/tests/test_product_view.py (+0/-1)
lib/lp/translations/browser/tests/test_productseries.py (+0/-1)
lib/lp/translations/browser/tests/test_seriestemplatesview.py (+0/-1)
lib/lp/translations/browser/tests/test_sharing_details.py (+0/-2)
lib/lp/translations/browser/tests/test_translationgroup.py (+0/-1)
lib/lp/translations/browser/tests/test_translationmessage_view.py (+0/-3)
lib/lp/translations/browser/tests/test_translationtemplatesbuild.py (+0/-1)
lib/lp/translations/browser/translationgroup.py (+0/-2)
lib/lp/translations/browser/translationimportqueue.py (+0/-2)
lib/lp/translations/browser/translationmessage.py (+1/-1)
lib/lp/translations/browser/translations.py (+0/-1)
lib/lp/translations/browser/widgets/tests/test_potemplate.py (+0/-2)
lib/lp/translations/browser/widgets/tests/test_translationimportqueue.py (+0/-1)
lib/lp/translations/interfaces/translationsharingjob.py (+0/-1)
lib/lp/translations/model/approver.py (+0/-1)
lib/lp/translations/model/currenttranslations.py (+0/-2)
lib/lp/translations/model/languagepack.py (+0/-1)
lib/lp/translations/model/poexportrequest.py (+0/-1)
lib/lp/translations/model/pofile.py (+1/-2)
lib/lp/translations/model/pomsgid.py (+0/-1)
lib/lp/translations/model/potemplate.py (+0/-2)
lib/lp/translations/model/potmsgset.py (+0/-1)
lib/lp/translations/model/potranslation.py (+0/-1)
lib/lp/translations/model/translationgroup.py (+0/-1)
lib/lp/translations/model/translationimportqueue.py (+0/-1)
lib/lp/translations/model/translationmessage.py (+0/-1)
lib/lp/translations/model/translationrelicensingagreement.py (+0/-1)
lib/lp/translations/model/translationsoverview.py (+2/-3)
lib/lp/translations/pottery/tests/test_detect_intltool.py (+0/-1)
lib/lp/translations/publisher.py (+0/-1)
lib/lp/translations/scripts/po_export_queue.py (+0/-1)
lib/lp/translations/scripts/remove_translations.py (+2/-2)
lib/lp/translations/scripts/tests/test_merge_existing_packagings.py (+0/-1)
lib/lp/translations/scripts/tests/test_packaging_translations.py (+0/-1)
lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py (+0/-1)
lib/lp/translations/scripts/tests/test_translations_approval.py (+0/-1)
lib/lp/translations/scripts/tests/test_translations_import.py (+0/-1)
lib/lp/translations/scripts/tests/test_translations_to_branch.py (+0/-1)
lib/lp/translations/tests/test_autoapproval.py (+0/-1)
lib/lp/translations/tests/test_distroseries_translations_copy.py (+0/-1)
lib/lp/translations/tests/test_exportresult.py (+0/-1)
lib/lp/translations/tests/test_pofilestatsjob.py (+0/-2)
lib/lp/translations/tests/test_setcurrenttranslation.py (+0/-1)
lib/lp/translations/tests/test_translationbranchapprover.py (+0/-1)
lib/lp/translations/tests/test_translationbuildapprover.py (+0/-1)
lib/lp/translations/tests/test_translationmessage.py (+0/-2)
lib/lp/translations/tests/test_translationpackagingjob.py (+0/-5)
lib/lp/translations/tests/test_translationsplitter.py (+0/-2)
lib/lp/translations/tests/test_translationtemplatesbuild.py (+0/-1)
lib/lp/translations/tests/test_yuitests.py (+0/-1)
lib/lp/translations/utilities/tests/test_file_importer.py (+1/-1)
lib/lp/translations/utilities/translationmerger.py (+0/-1)
lib/lp/translations/vocabularies.py (+0/-2)
lib/lp/xmlrpc/faults.py (+0/-1)
lib/lp/xmlrpc/tests/test_xmlrpc_selftest.py (+0/-1)
scripts/branch-rewrite.py (+0/-1)
scripts/bug-export.py (+0/-1)
scripts/bug-import.py (+0/-1)
scripts/convert-person-to-team.py (+0/-1)
scripts/fix-translations-opening.py (+0/-1)
scripts/ftpmaster-tools/buildd-mass-retry.py (+0/-1)
scripts/list-team-members (+0/-2)
scripts/uct-export.py (+0/-1)
utilities/pglogwatch.py (+0/-1)
utilities/soyuz-sampledata-setup.py (+0/-1)
Reviewer Review Type Date Requested Status
Guruprasad Approve
Review via email: mp+445882@code.launchpad.net

Commit message

Upgrade to black 23.3.0

Description of the change

This introduces the 2023 stable style.

To post a comment you must log in.
Revision history for this message
Guruprasad (lgp171188) wrote :

LGTM 👍

review: Approve
Revision history for this message
Otto Co-Pilot (otto-copilot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index 0f3d230..9a38809 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -106,3 +106,5 @@ a0cc45d527f251438cff74b4134e7a66fba42ac7
1069c7e734d893362de4461910d309d9891558c96341069c7e734d893362de4461910d309d9891558c9634
107# apply blackdoc on the complete codebase107# apply blackdoc on the complete codebase
10878a72ed0e3f5be6c727f4981d6a09e978cde4b7e10878a72ed0e3f5be6c727f4981d6a09e978cde4b7e
109# apply black's 2023 stable style
110ee5977f514d584c64afe453ac9d2eaa0fdbc3afd
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index dab74e2..c4198d7 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -36,7 +36,7 @@ repos:
36 |utilities/community-contributions\.py36 |utilities/community-contributions\.py
37 )$37 )$
38- repo: https://github.com/psf/black38- repo: https://github.com/psf/black
39 rev: 22.12.039 rev: 23.3.0
40 hooks:40 hooks:
41 - id: black41 - id: black
42 exclude: |42 exclude: |
diff --git a/cronscripts/update-bugzilla-remote-components.py b/cronscripts/update-bugzilla-remote-components.py
index b98b467..e002dac 100755
--- a/cronscripts/update-bugzilla-remote-components.py
+++ b/cronscripts/update-bugzilla-remote-components.py
@@ -35,7 +35,6 @@ class UpdateRemoteComponentsFromBugzilla(LaunchpadCronScript):
3535
3636
37if __name__ == "__main__":37if __name__ == "__main__":
38
39 updater = UpdateRemoteComponentsFromBugzilla(38 updater = UpdateRemoteComponentsFromBugzilla(
40 "updatebugzillaremotecomponents",39 "updatebugzillaremotecomponents",
41 dbuser=config.updatebugzillaremotecomponents.dbuser,40 dbuser=config.updatebugzillaremotecomponents.dbuser,
diff --git a/lib/launchpad_loggerhead/app.py b/lib/launchpad_loggerhead/app.py
index b7496ae..d05e207 100644
--- a/lib/launchpad_loggerhead/app.py
+++ b/lib/launchpad_loggerhead/app.py
@@ -208,7 +208,6 @@ class RootApp:
208 )208 )
209 lp_server.start_server()209 lp_server.start_server()
210 try:210 try:
211
212 try:211 try:
213 branchfs = self.get_branchfs()212 branchfs = self.get_branchfs()
214 transport_type, info, trail = branchfs.translatePath(213 transport_type, info, trail = branchfs.translatePath(
diff --git a/lib/launchpad_loggerhead/session.py b/lib/launchpad_loggerhead/session.py
index 48d213d..45e32fe 100644
--- a/lib/launchpad_loggerhead/session.py
+++ b/lib/launchpad_loggerhead/session.py
@@ -13,7 +13,6 @@ from lp.services.config import config
1313
1414
15class LaunchpadSecureCookie(SecureCookie):15class LaunchpadSecureCookie(SecureCookie):
16
17 # The default of sha1 is a bit too weak.16 # The default of sha1 is a bit too weak.
18 hash_method = staticmethod(hashlib.sha256)17 hash_method = staticmethod(hashlib.sha256)
1918
diff --git a/lib/lp/answers/browser/person.py b/lib/lp/answers/browser/person.py
index 6d06aa1..a684d11 100644
--- a/lib/lp/answers/browser/person.py
+++ b/lib/lp/answers/browser/person.py
@@ -261,7 +261,6 @@ class PersonAnswerContactForView(LaunchpadView):
261261
262262
263class PersonAnswersMenu(NavigationMenu):263class PersonAnswersMenu(NavigationMenu):
264
265 usedfor = IPerson264 usedfor = IPerson
266 facet = "answers"265 facet = "answers"
267 links = [266 links = [
diff --git a/lib/lp/answers/browser/tests/test_questionmessages.py b/lib/lp/answers/browser/tests/test_questionmessages.py
index 0e1bb02..0911bd6 100644
--- a/lib/lp/answers/browser/tests/test_questionmessages.py
+++ b/lib/lp/answers/browser/tests/test_questionmessages.py
@@ -19,7 +19,6 @@ from lp.testing.pages import find_tag_by_id
19class TestQuestionMessageVisibility(19class TestQuestionMessageVisibility(
20 BrowserTestCase, TestMessageVisibilityMixin20 BrowserTestCase, TestMessageVisibilityMixin
21):21):
22
23 layer = DatabaseFunctionalLayer22 layer = DatabaseFunctionalLayer
2423
25 def makeHiddenMessage(self, comment_owner=None):24 def makeHiddenMessage(self, comment_owner=None):
@@ -44,7 +43,6 @@ class TestQuestionMessageVisibility(
44class TestHideQuestionMessageControls(43class TestHideQuestionMessageControls(
45 BrowserTestCase, TestHideMessageControlMixin44 BrowserTestCase, TestHideMessageControlMixin
46):45):
47
48 layer = DatabaseFunctionalLayer46 layer = DatabaseFunctionalLayer
4947
50 control_text = "mark-spam-0"48 control_text = "mark-spam-0"
diff --git a/lib/lp/answers/browser/tests/test_questiontarget.py b/lib/lp/answers/browser/tests/test_questiontarget.py
index b9a8bd2..24a1261 100644
--- a/lib/lp/answers/browser/tests/test_questiontarget.py
+++ b/lib/lp/answers/browser/tests/test_questiontarget.py
@@ -28,7 +28,6 @@ from lp.testing.views import create_initialized_view, create_view
2828
2929
30class TestSearchQuestionsView(TestCaseWithFactory):30class TestSearchQuestionsView(TestCaseWithFactory):
31
32 layer = DatabaseFunctionalLayer31 layer = DatabaseFunctionalLayer
3332
34 def test_matching_faqs_url__handles_non_ascii(self):33 def test_matching_faqs_url__handles_non_ascii(self):
@@ -65,7 +64,6 @@ class TestSearchQuestionsView(TestCaseWithFactory):
6564
6665
67class TestSearchQuestionsViewCanConfigureAnswers(TestCaseWithFactory):66class TestSearchQuestionsViewCanConfigureAnswers(TestCaseWithFactory):
68
69 layer = DatabaseFunctionalLayer67 layer = DatabaseFunctionalLayer
7068
71 def test_cannot_configure_answers_product_no_edit_permission(self):69 def test_cannot_configure_answers_product_no_edit_permission(self):
diff --git a/lib/lp/answers/interfaces/faq.py b/lib/lp/answers/interfaces/faq.py
index 7d18c7b..42d64d1 100644
--- a/lib/lp/answers/interfaces/faq.py
+++ b/lib/lp/answers/interfaces/faq.py
@@ -35,7 +35,6 @@ class CannotDeleteFAQ(Exception):
3535
3636
37class IFAQPublic(IHasOwner):37class IFAQPublic(IHasOwner):
38
39 id = exported(38 id = exported(
40 Int(39 Int(
41 title=_("FAQ Number"),40 title=_("FAQ Number"),
diff --git a/lib/lp/answers/interfaces/questionjob.py b/lib/lp/answers/interfaces/questionjob.py
index 5700e9a..21e218f 100644
--- a/lib/lp/answers/interfaces/questionjob.py
+++ b/lib/lp/answers/interfaces/questionjob.py
@@ -49,7 +49,6 @@ class IQuestionJob(Interface):
4949
5050
51class IQuestionEmailJob(IQuestionJob, IRunnableJob):51class IQuestionEmailJob(IQuestionJob, IRunnableJob):
52
53 user = Attribute("The `IPerson` who triggered the email.")52 user = Attribute("The `IPerson` who triggered the email.")
5453
55 subject = Attribute("The subject of the email.")54 subject = Attribute("The subject of the email.")
diff --git a/lib/lp/answers/model/tests/test_question.py b/lib/lp/answers/model/tests/test_question.py
index 15ec010..6040354 100644
--- a/lib/lp/answers/model/tests/test_question.py
+++ b/lib/lp/answers/model/tests/test_question.py
@@ -13,7 +13,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1313
1414
15class TestQuestionDirectSubscribers(TestCaseWithFactory):15class TestQuestionDirectSubscribers(TestCaseWithFactory):
16
17 layer = DatabaseFunctionalLayer16 layer = DatabaseFunctionalLayer
1817
19 def test_get_direct_subscribers(self):18 def test_get_direct_subscribers(self):
@@ -63,7 +62,6 @@ class TestQuestionDirectSubscribers(TestCaseWithFactory):
6362
6463
65class TestQuestionInDirectSubscribers(TestCaseWithFactory):64class TestQuestionInDirectSubscribers(TestCaseWithFactory):
66
67 layer = DatabaseFunctionalLayer65 layer = DatabaseFunctionalLayer
6866
69 def test_answerContactIsIndirectSubscriber(self):67 def test_answerContactIsIndirectSubscriber(self):
@@ -108,7 +106,6 @@ class TestQuestionInDirectSubscribers(TestCaseWithFactory):
108106
109107
110class TestQuestionSet(TestCaseWithFactory):108class TestQuestionSet(TestCaseWithFactory):
111
112 layer = DatabaseFunctionalLayer109 layer = DatabaseFunctionalLayer
113110
114 def test_expiredQuestions(self):111 def test_expiredQuestions(self):
diff --git a/lib/lp/answers/publisher.py b/lib/lp/answers/publisher.py
index 21d1443..6e61444 100644
--- a/lib/lp/answers/publisher.py
+++ b/lib/lp/answers/publisher.py
@@ -24,7 +24,6 @@ from lp.services.webapp.servers import (
2424
25@implementer(IFacet)25@implementer(IFacet)
26class AnswersFacet:26class AnswersFacet:
27
28 name = "answers"27 name = "answers"
29 rootsite = "answers"28 rootsite = "answers"
30 text = "Questions"29 text = "Questions"
diff --git a/lib/lp/answers/tests/test_faq.py b/lib/lp/answers/tests/test_faq.py
index 020cbaa..a50a432 100644
--- a/lib/lp/answers/tests/test_faq.py
+++ b/lib/lp/answers/tests/test_faq.py
@@ -106,7 +106,6 @@ class TestFAQPermissions(TestCaseWithFactory):
106106
107107
108class TestFAQ(TestCaseWithFactory):108class TestFAQ(TestCaseWithFactory):
109
110 layer = DatabaseFunctionalLayer109 layer = DatabaseFunctionalLayer
111110
112 def test_destroySelf(self):111 def test_destroySelf(self):
diff --git a/lib/lp/answers/tests/test_faq_webservice.py b/lib/lp/answers/tests/test_faq_webservice.py
index bb69f3e..dc80564 100644
--- a/lib/lp/answers/tests/test_faq_webservice.py
+++ b/lib/lp/answers/tests/test_faq_webservice.py
@@ -13,7 +13,6 @@ from lp.testing.pages import webservice_for_person
1313
1414
15class TestFAQWebService(TestCaseWithFactory):15class TestFAQWebService(TestCaseWithFactory):
16
17 layer = DatabaseFunctionalLayer16 layer = DatabaseFunctionalLayer
1817
19 def test_representation(self):18 def test_representation(self):
diff --git a/lib/lp/answers/tests/test_question.py b/lib/lp/answers/tests/test_question.py
index 8e22dbd..29adfe5 100644
--- a/lib/lp/answers/tests/test_question.py
+++ b/lib/lp/answers/tests/test_question.py
@@ -19,7 +19,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1919
2020
21class TestQuestionSecurity(TestCaseWithFactory):21class TestQuestionSecurity(TestCaseWithFactory):
22
23 layer = DatabaseFunctionalLayer22 layer = DatabaseFunctionalLayer
2423
25 def test_title_and_description_writes(self):24 def test_title_and_description_writes(self):
diff --git a/lib/lp/answers/tests/test_question_webservice.py b/lib/lp/answers/tests/test_question_webservice.py
index a5735b2..9378638 100644
--- a/lib/lp/answers/tests/test_question_webservice.py
+++ b/lib/lp/answers/tests/test_question_webservice.py
@@ -275,7 +275,6 @@ class TestSetCommentVisibility(TestCaseWithFactory):
275275
276276
277class TestQuestionWebServiceSubscription(TestCaseWithFactory):277class TestQuestionWebServiceSubscription(TestCaseWithFactory):
278
279 layer = DatabaseFunctionalLayer278 layer = DatabaseFunctionalLayer
280279
281 def test_subscribe(self):280 def test_subscribe(self):
@@ -325,7 +324,6 @@ class TestQuestionWebServiceSubscription(TestCaseWithFactory):
325324
326325
327class TestQuestionSetWebService(TestCaseWithFactory):326class TestQuestionSetWebService(TestCaseWithFactory):
328
329 layer = DatabaseFunctionalLayer327 layer = DatabaseFunctionalLayer
330328
331 def test_searchQuestions(self):329 def test_searchQuestions(self):
diff --git a/lib/lp/answers/tests/test_question_workflow.py b/lib/lp/answers/tests/test_question_workflow.py
index 733e24e..c0e61ce 100644
--- a/lib/lp/answers/tests/test_question_workflow.py
+++ b/lib/lp/answers/tests/test_question_workflow.py
@@ -612,6 +612,7 @@ class LinkFAQTestCase(BaseAnswerTrackerWorkflowTestCase):
612 one of OPEN, NEEDSINFO or ANSWERED and check that it returns a612 one of OPEN, NEEDSINFO or ANSWERED and check that it returns a
613 valid IQuestionMessage.613 valid IQuestionMessage.
614 """614 """
615
615 # Do not check the edited_fields attributes since it616 # Do not check the edited_fields attributes since it
616 # changes based on departure state.617 # changes based on departure state.
617 def checkFAQ(message):618 def checkFAQ(message):
diff --git a/lib/lp/app/browser/launchpad.py b/lib/lp/app/browser/launchpad.py
index a4eba0a..25b5c11 100644
--- a/lib/lp/app/browser/launchpad.py
+++ b/lib/lp/app/browser/launchpad.py
@@ -565,7 +565,6 @@ class MaintenanceMessage:
565565
566566
567class LaunchpadRootFacets(StandardLaunchpadFacets):567class LaunchpadRootFacets(StandardLaunchpadFacets):
568
569 usedfor = ILaunchpadRoot568 usedfor = ILaunchpadRoot
570 enable_only = [569 enable_only = [
571 "overview",570 "overview",
@@ -689,7 +688,6 @@ class LoginStatus:
689688
690689
691class LaunchpadRootNavigation(Navigation):690class LaunchpadRootNavigation(Navigation):
692
693 usedfor = ILaunchpadRoot691 usedfor = ILaunchpadRoot
694692
695 @stepto("support")693 @stepto("support")
@@ -1185,7 +1183,6 @@ class IAppFrontPageSearchForm(Interface):
11851183
11861184
1187class AppFrontPageSearchView(LaunchpadFormView):1185class AppFrontPageSearchView(LaunchpadFormView):
1188
1189 schema = IAppFrontPageSearchForm1186 schema = IAppFrontPageSearchForm
1190 custom_widget_scope = ProjectScopeWidget1187 custom_widget_scope = ProjectScopeWidget
11911188
diff --git a/lib/lp/app/browser/launchpadform.py b/lib/lp/app/browser/launchpadform.py
index 3578008..119bace 100644
--- a/lib/lp/app/browser/launchpadform.py
+++ b/lib/lp/app/browser/launchpadform.py
@@ -57,7 +57,6 @@ _first_widget_marker = object()
5757
5858
59class LaunchpadFormView(LaunchpadView):59class LaunchpadFormView(LaunchpadView):
60
61 # The prefix used for all form inputs.60 # The prefix used for all form inputs.
62 prefix = "field"61 prefix = "field"
6362
@@ -472,7 +471,6 @@ class LaunchpadFormView(LaunchpadView):
472471
473472
474class LaunchpadEditFormView(LaunchpadFormView):473class LaunchpadEditFormView(LaunchpadFormView):
475
476 render_context = True474 render_context = True
477475
478 def updateContextFromData(self, data, context=None, notify_modified=True):476 def updateContextFromData(self, data, context=None, notify_modified=True):
diff --git a/lib/lp/app/browser/tales.py b/lib/lp/app/browser/tales.py
index 44781e8..b8584c9 100644
--- a/lib/lp/app/browser/tales.py
+++ b/lib/lp/app/browser/tales.py
@@ -1053,7 +1053,6 @@ class SpecificationImageDisplayAPI(ObjectImageDisplayAPI):
1053 return '<span class="%s"></span>' % self.sprite_css()1053 return '<span class="%s"></span>' % self.sprite_css()
10541054
1055 def badges(self):1055 def badges(self):
1056
1057 badges = ""1056 badges = ""
10581057
1059 if len(self._context.linked_branches) > 0:1058 if len(self._context.linked_branches) > 0:
@@ -1778,7 +1777,6 @@ class BranchSubscriptionFormatterAPI(CustomizableFormatter):
17781777
17791778
1780class BranchMergeProposalFormatterAPI(CustomizableFormatter):1779class BranchMergeProposalFormatterAPI(CustomizableFormatter):
1781
1782 _link_summary_template = _("%(title)s")1780 _link_summary_template = _("%(title)s")
17831781
1784 def _link_summary_values(self):1782 def _link_summary_values(self):
@@ -1858,7 +1856,6 @@ class BugTaskFormatterAPI(CustomizableFormatter):
18581856
18591857
1860class BugAttachmentFormatterAPI(CustomizableFormatter):1858class BugAttachmentFormatterAPI(CustomizableFormatter):
1861
1862 final_traversable_names = dict(1859 final_traversable_names = dict(
1863 **CustomizableFormatter.final_traversable_names,1860 **CustomizableFormatter.final_traversable_names,
1864 attachment_link="attachment_link",1861 attachment_link="attachment_link",
diff --git a/lib/lp/app/browser/tests/test_css_formatter.py b/lib/lp/app/browser/tests/test_css_formatter.py
index c60af07..0cade3f 100644
--- a/lib/lp/app/browser/tests/test_css_formatter.py
+++ b/lib/lp/app/browser/tests/test_css_formatter.py
@@ -10,7 +10,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1010
1111
12class TestCSSFormatter(TestCase):12class TestCSSFormatter(TestCase):
13
14 layer = DatabaseFunctionalLayer13 layer = DatabaseFunctionalLayer
1514
16 def test_select(self):15 def test_select(self):
diff --git a/lib/lp/app/browser/tests/test_formatters.py b/lib/lp/app/browser/tests/test_formatters.py
index b659677..c7eab52 100644
--- a/lib/lp/app/browser/tests/test_formatters.py
+++ b/lib/lp/app/browser/tests/test_formatters.py
@@ -11,7 +11,6 @@ from lp.testing.views import create_view
1111
1212
13class ObjectFormatterAPITestCase(TestCaseWithFactory, FakeAdapterMixin):13class ObjectFormatterAPITestCase(TestCaseWithFactory, FakeAdapterMixin):
14
15 layer = DatabaseFunctionalLayer14 layer = DatabaseFunctionalLayer
1615
17 def test_pagetitle_top_level(self):16 def test_pagetitle_top_level(self):
@@ -109,7 +108,6 @@ class ObjectFormatterAPITestCase(TestCaseWithFactory, FakeAdapterMixin):
109108
110109
111class TestPillarFormatterAPI(TestCaseWithFactory):110class TestPillarFormatterAPI(TestCaseWithFactory):
112
113 layer = DatabaseFunctionalLayer111 layer = DatabaseFunctionalLayer
114112
115 FORMATTER_CSS_CLASS = "sprite product"113 FORMATTER_CSS_CLASS = "sprite product"
diff --git a/lib/lp/app/browser/tests/test_inlineeditpickerwidget.py b/lib/lp/app/browser/tests/test_inlineeditpickerwidget.py
index c6fe5c9..4411353 100644
--- a/lib/lp/app/browser/tests/test_inlineeditpickerwidget.py
+++ b/lib/lp/app/browser/tests/test_inlineeditpickerwidget.py
@@ -15,7 +15,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1515
1616
17class TestInlineEditPickerWidget(TestCaseWithFactory):17class TestInlineEditPickerWidget(TestCaseWithFactory):
18
19 layer = DatabaseFunctionalLayer18 layer = DatabaseFunctionalLayer
2019
21 def getWidget(self, **kwargs):20 def getWidget(self, **kwargs):
@@ -65,7 +64,6 @@ class TestInlineEditPickerWidget(TestCaseWithFactory):
6564
6665
67class TestInlinePersonEditPickerWidget(TestCaseWithFactory):66class TestInlinePersonEditPickerWidget(TestCaseWithFactory):
68
69 layer = DatabaseFunctionalLayer67 layer = DatabaseFunctionalLayer
7068
71 def getWidget(self, widget_value, show_create_team=False, **kwargs):69 def getWidget(self, widget_value, show_create_team=False, **kwargs):
diff --git a/lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py b/lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py
index 3222fa4..205640d 100644
--- a/lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py
+++ b/lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py
@@ -25,7 +25,6 @@ class Alphabet(EnumeratedType):
2525
2626
27class TestInlineMultiCheckboxWidget(TestCaseWithFactory):27class TestInlineMultiCheckboxWidget(TestCaseWithFactory):
28
29 layer = DatabaseFunctionalLayer28 layer = DatabaseFunctionalLayer
3029
31 def _getWidget(self, **kwargs):30 def _getWidget(self, **kwargs):
diff --git a/lib/lp/app/browser/tests/test_launchpad.py b/lib/lp/app/browser/tests/test_launchpad.py
index 72605c3..e7cd7d9 100644
--- a/lib/lp/app/browser/tests/test_launchpad.py
+++ b/lib/lp/app/browser/tests/test_launchpad.py
@@ -347,7 +347,6 @@ class TestBranchTraversal(TestCaseWithFactory, TraversalMixin):
347347
348348
349class TestCodeTraversal(TestCaseWithFactory, TraversalMixin):349class TestCodeTraversal(TestCaseWithFactory, TraversalMixin):
350
351 layer = DatabaseFunctionalLayer350 layer = DatabaseFunctionalLayer
352351
353 def traverse(self, path, **kwargs):352 def traverse(self, path, **kwargs):
@@ -606,7 +605,6 @@ class TestCodeTraversal(TestCaseWithFactory, TraversalMixin):
606605
607606
608class TestPersonTraversal(TestCaseWithFactory, TraversalMixin):607class TestPersonTraversal(TestCaseWithFactory, TraversalMixin):
609
610 layer = DatabaseFunctionalLayer608 layer = DatabaseFunctionalLayer
611609
612 def setUp(self):610 def setUp(self):
@@ -720,7 +718,6 @@ class TestPersonTraversal(TestCaseWithFactory, TraversalMixin):
720718
721719
722class TestErrorViews(TestCaseWithFactory):720class TestErrorViews(TestCaseWithFactory):
723
724 layer = DatabaseFunctionalLayer721 layer = DatabaseFunctionalLayer
725722
726 def test_GoneError(self):723 def test_GoneError(self):
@@ -731,7 +728,6 @@ class TestErrorViews(TestCaseWithFactory):
731728
732729
733class ExceptionHierarchyTestCase(TestCaseWithFactory):730class ExceptionHierarchyTestCase(TestCaseWithFactory):
734
735 layer = FunctionalLayer731 layer = FunctionalLayer
736732
737 def test_exception(self):733 def test_exception(self):
@@ -751,7 +747,6 @@ class ExceptionHierarchyTestCase(TestCaseWithFactory):
751747
752748
753class TestIterViewRegistrations(TestCaseWithFactory):749class TestIterViewRegistrations(TestCaseWithFactory):
754
755 layer = FunctionalLayer750 layer = FunctionalLayer
756751
757 def test_iter_view_registrations(self):752 def test_iter_view_registrations(self):
@@ -765,7 +760,6 @@ class TestIterViewRegistrations(TestCaseWithFactory):
765760
766761
767class TestProductTraversal(TestCaseWithFactory, TraversalMixin):762class TestProductTraversal(TestCaseWithFactory, TraversalMixin):
768
769 layer = DatabaseFunctionalLayer763 layer = DatabaseFunctionalLayer
770764
771 def setUp(self):765 def setUp(self):
diff --git a/lib/lp/app/browser/tests/test_launchpadform.py b/lib/lp/app/browser/tests/test_launchpadform.py
index 7ca3863..ff3aea2 100644
--- a/lib/lp/app/browser/tests/test_launchpadform.py
+++ b/lib/lp/app/browser/tests/test_launchpadform.py
@@ -38,7 +38,6 @@ class TestView(LaunchpadFormView):
3838
3939
40class TestHasStructuredDoc(TestCase):40class TestHasStructuredDoc(TestCase):
41
42 layer = FunctionalLayer41 layer = FunctionalLayer
4342
44 def _widget_annotation(self, widget):43 def _widget_annotation(self, widget):
@@ -55,7 +54,6 @@ class TestHasStructuredDoc(TestCase):
5554
5655
57class TestQueryTalesForHasStructuredDoc(TestCase):56class TestQueryTalesForHasStructuredDoc(TestCase):
58
59 layer = FunctionalLayer57 layer = FunctionalLayer
6058
61 def test_query_tales(self):59 def test_query_tales(self):
@@ -102,7 +100,6 @@ class TestHelpLinksView(LaunchpadFormView):
102100
103101
104class TestHelpLinks(TestCaseWithFactory):102class TestHelpLinks(TestCaseWithFactory):
105
106 layer = DatabaseFunctionalLayer103 layer = DatabaseFunctionalLayer
107104
108 def test_help_links_on_widget(self):105 def test_help_links_on_widget(self):
diff --git a/lib/lp/app/browser/tests/test_launchpadform_doc.py b/lib/lp/app/browser/tests/test_launchpadform_doc.py
index 5e679ab..461df86 100644
--- a/lib/lp/app/browser/tests/test_launchpadform_doc.py
+++ b/lib/lp/app/browser/tests/test_launchpadform_doc.py
@@ -17,7 +17,6 @@ from lp.testing.layers import FunctionalLayer
1717
1818
19class LaunchpadFormTest(unittest.TestCase):19class LaunchpadFormTest(unittest.TestCase):
20
21 layer = FunctionalLayer20 layer = FunctionalLayer
2221
23 def test_formLayout(self):22 def test_formLayout(self):
diff --git a/lib/lp/app/browser/tests/test_launchpadroot.py b/lib/lp/app/browser/tests/test_launchpadroot.py
index c5e5329..85faf0a 100644
--- a/lib/lp/app/browser/tests/test_launchpadroot.py
+++ b/lib/lp/app/browser/tests/test_launchpadroot.py
@@ -127,7 +127,6 @@ class TestLaunchpadRootNavigation(TestCaseWithFactory):
127127
128128
129class LaunchpadRootIndexViewTestCase(TestCaseWithFactory):129class LaunchpadRootIndexViewTestCase(TestCaseWithFactory):
130
131 layer = LaunchpadFunctionalLayer130 layer = LaunchpadFunctionalLayer
132131
133 def setUp(self):132 def setUp(self):
diff --git a/lib/lp/app/browser/tests/test_linkchecker.py b/lib/lp/app/browser/tests/test_linkchecker.py
index 0215c41..f1b2fe9 100644
--- a/lib/lp/app/browser/tests/test_linkchecker.py
+++ b/lib/lp/app/browser/tests/test_linkchecker.py
@@ -16,7 +16,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1616
1717
18class TestLinkCheckerAPI(TestCaseWithFactory):18class TestLinkCheckerAPI(TestCaseWithFactory):
19
20 layer = DatabaseFunctionalLayer19 layer = DatabaseFunctionalLayer
2120
22 BRANCH_URL_TEMPLATE = "/+code/%s"21 BRANCH_URL_TEMPLATE = "/+code/%s"
diff --git a/lib/lp/app/browser/tests/test_stringformatter.py b/lib/lp/app/browser/tests/test_stringformatter.py
index d8f556e..78a332f 100644
--- a/lib/lp/app/browser/tests/test_stringformatter.py
+++ b/lib/lp/app/browser/tests/test_stringformatter.py
@@ -167,7 +167,6 @@ class TestLinkifyingBugs(TestCase):
167167
168168
169class TestLinkifyingProtocols(TestCaseWithFactory):169class TestLinkifyingProtocols(TestCaseWithFactory):
170
171 layer = DatabaseFunctionalLayer170 layer = DatabaseFunctionalLayer
172171
173 def test_normal_set(self):172 def test_normal_set(self):
@@ -484,7 +483,6 @@ class TestParseDiff(TestCase):
484483
485484
486class TestParseDiffErrors(TestCaseWithFactory):485class TestParseDiffErrors(TestCaseWithFactory):
487
488 layer = ZopelessLayer486 layer = ZopelessLayer
489487
490 def assertParses(self, expected, diff):488 def assertParses(self, expected, diff):
diff --git a/lib/lp/app/browser/tests/test_vocabulary.py b/lib/lp/app/browser/tests/test_vocabulary.py
index c827743..81f80cf 100644
--- a/lib/lp/app/browser/tests/test_vocabulary.py
+++ b/lib/lp/app/browser/tests/test_vocabulary.py
@@ -44,7 +44,6 @@ def get_picker_entry(item_subject, context_object, **kwargs):
4444
4545
46class DefaultPickerEntrySourceAdapterTestCase(TestCaseWithFactory):46class DefaultPickerEntrySourceAdapterTestCase(TestCaseWithFactory):
47
48 layer = LaunchpadFunctionalLayer47 layer = LaunchpadFunctionalLayer
4948
50 def test_css_image_entry_without_icon(self):49 def test_css_image_entry_without_icon(self):
@@ -74,7 +73,6 @@ class DefaultPickerEntrySourceAdapterTestCase(TestCaseWithFactory):
7473
7574
76class PersonPickerEntrySourceAdapterTestCase(TestCaseWithFactory):75class PersonPickerEntrySourceAdapterTestCase(TestCaseWithFactory):
77
78 layer = DatabaseFunctionalLayer76 layer = DatabaseFunctionalLayer
7977
80 def test_person_to_pickerentry(self):78 def test_person_to_pickerentry(self):
@@ -190,7 +188,6 @@ class PersonPickerEntrySourceAdapterTestCase(TestCaseWithFactory):
190class TestDistributionSourcePackagePickerEntrySourceAdapter(188class TestDistributionSourcePackagePickerEntrySourceAdapter(
191 TestCaseWithFactory189 TestCaseWithFactory
192):190):
193
194 layer = DatabaseFunctionalLayer191 layer = DatabaseFunctionalLayer
195192
196 def getPickerEntry(self, dsp):193 def getPickerEntry(self, dsp):
@@ -270,7 +267,6 @@ class TestDistributionSourcePackagePickerEntrySourceAdapter(
270267
271268
272class TestProductPickerEntrySourceAdapter(TestCaseWithFactory):269class TestProductPickerEntrySourceAdapter(TestCaseWithFactory):
273
274 layer = DatabaseFunctionalLayer270 layer = DatabaseFunctionalLayer
275271
276 def getPickerEntry(self, product):272 def getPickerEntry(self, product):
@@ -352,7 +348,6 @@ class TestProductPickerEntrySourceAdapter(TestCaseWithFactory):
352348
353349
354class TestProjectGroupPickerEntrySourceAdapter(TestCaseWithFactory):350class TestProjectGroupPickerEntrySourceAdapter(TestCaseWithFactory):
355
356 layer = DatabaseFunctionalLayer351 layer = DatabaseFunctionalLayer
357352
358 def getPickerEntry(self, projectgroup):353 def getPickerEntry(self, projectgroup):
@@ -410,7 +405,6 @@ class TestProjectGroupPickerEntrySourceAdapter(TestCaseWithFactory):
410405
411406
412class TestDistributionPickerEntrySourceAdapter(TestCaseWithFactory):407class TestDistributionPickerEntrySourceAdapter(TestCaseWithFactory):
413
414 layer = DatabaseFunctionalLayer408 layer = DatabaseFunctionalLayer
415409
416 def getPickerEntry(self, distribution):410 def getPickerEntry(self, distribution):
@@ -544,7 +538,6 @@ class TestVocabularyFilter(VocabularyFilter):
544538
545539
546class HugeVocabularyJSONViewTestCase(TestCaseWithFactory):540class HugeVocabularyJSONViewTestCase(TestCaseWithFactory):
547
548 layer = DatabaseFunctionalLayer541 layer = DatabaseFunctionalLayer
549542
550 def setUp(self):543 def setUp(self):
diff --git a/lib/lp/app/browser/tests/test_webservice.py b/lib/lp/app/browser/tests/test_webservice.py
index b1f72ad..2defa9d 100644
--- a/lib/lp/app/browser/tests/test_webservice.py
+++ b/lib/lp/app/browser/tests/test_webservice.py
@@ -15,7 +15,6 @@ from lp.testing.pages import LaunchpadWebServiceCaller
1515
1616
17class TestXHTMLRepresentations(TestCaseWithFactory):17class TestXHTMLRepresentations(TestCaseWithFactory):
18
19 layer = DatabaseFunctionalLayer18 layer = DatabaseFunctionalLayer
2019
21 def test_person(self):20 def test_person(self):
diff --git a/lib/lp/app/browser/vocabulary.py b/lib/lp/app/browser/vocabulary.py
index 04d0599..0d0283f 100644
--- a/lib/lp/app/browser/vocabulary.py
+++ b/lib/lp/app/browser/vocabulary.py
@@ -377,7 +377,6 @@ class ProductPickerEntrySourceAdapter(TargetPickerEntrySourceAdapter):
377377
378@adapter(IDistribution)378@adapter(IDistribution)
379class DistributionPickerEntrySourceAdapter(TargetPickerEntrySourceAdapter):379class DistributionPickerEntrySourceAdapter(TargetPickerEntrySourceAdapter):
380
381 target_type = "distribution"380 target_type = "distribution"
382381
383 def getMaintainer(self, target):382 def getMaintainer(self, target):
diff --git a/lib/lp/app/interfaces/informationtype.py b/lib/lp/app/interfaces/informationtype.py
index 5ea95df..29bc077 100644
--- a/lib/lp/app/interfaces/informationtype.py
+++ b/lib/lp/app/interfaces/informationtype.py
@@ -14,7 +14,6 @@ from lp.app.interfaces.launchpad import IPrivacy
1414
1515
16class IInformationType(IPrivacy):16class IInformationType(IPrivacy):
17
18 information_type = exported(17 information_type = exported(
19 Choice(18 Choice(
20 title=_("Information Type"),19 title=_("Information Type"),
diff --git a/lib/lp/app/tests/test_launchpad.py b/lib/lp/app/tests/test_launchpad.py
index 506f6ab..5a47167 100644
--- a/lib/lp/app/tests/test_launchpad.py
+++ b/lib/lp/app/tests/test_launchpad.py
@@ -16,7 +16,6 @@ from lp.testing.layers import FunctionalLayer
1616
1717
18class PrivacyTestCase(TestCase):18class PrivacyTestCase(TestCase):
19
20 layer = FunctionalLayer19 layer = FunctionalLayer
2120
22 def test_init(self):21 def test_init(self):
@@ -29,7 +28,6 @@ class PrivacyTestCase(TestCase):
2928
3029
31class ExceptionPrivacyTestCase(TestCase):30class ExceptionPrivacyTestCase(TestCase):
32
33 layer = FunctionalLayer31 layer = FunctionalLayer
3432
35 def test_exception(self):33 def test_exception(self):
diff --git a/lib/lp/app/tests/test_security.py b/lib/lp/app/tests/test_security.py
index 384fda1..0f70c4f 100644
--- a/lib/lp/app/tests/test_security.py
+++ b/lib/lp/app/tests/test_security.py
@@ -47,7 +47,6 @@ class Fake:
4747
4848
49class TestAuthorizationBase(TestCaseWithFactory):49class TestAuthorizationBase(TestCaseWithFactory):
50
51 layer = ZopelessDatabaseLayer50 layer = ZopelessDatabaseLayer
5251
53 def test_checkAuthenticated_for_full_fledged_account(self):52 def test_checkAuthenticated_for_full_fledged_account(self):
diff --git a/lib/lp/app/tests/test_services.py b/lib/lp/app/tests/test_services.py
index 76ac515..f84bbda 100644
--- a/lib/lp/app/tests/test_services.py
+++ b/lib/lp/app/tests/test_services.py
@@ -25,7 +25,6 @@ class IFakeService(IService):
2525
26@implementer(IFakeService, IHTTPResource)26@implementer(IFakeService, IHTTPResource)
27class FakeService:27class FakeService:
28
29 name = "fake_service"28 name = "fake_service"
3029
3130
diff --git a/lib/lp/app/tests/test_yuitests.py b/lib/lp/app/tests/test_yuitests.py
index 1f8537f..cfa0a8e 100644
--- a/lib/lp/app/tests/test_yuitests.py
+++ b/lib/lp/app/tests/test_yuitests.py
@@ -11,7 +11,6 @@ __all__ = [] # type: List[str]
1111
1212
13class AppYUIUnitTestCase(YUIUnitTestCase):13class AppYUIUnitTestCase(YUIUnitTestCase):
14
15 layer = YUITestLayer14 layer = YUITestLayer
16 suite_name = "AppYUIUnitTests"15 suite_name = "AppYUIUnitTests"
1716
diff --git a/lib/lp/app/validators/tests/test_validation.py b/lib/lp/app/validators/tests/test_validation.py
index 3b14319..6d5c31c 100644
--- a/lib/lp/app/validators/tests/test_validation.py
+++ b/lib/lp/app/validators/tests/test_validation.py
@@ -9,7 +9,6 @@ from lp.testing.layers import BaseLayer
99
1010
11class TestOCIBranchValidator(TestCase):11class TestOCIBranchValidator(TestCase):
12
13 layer = BaseLayer12 layer = BaseLayer
1413
15 def test_validate_oci_branch_name_with_leading_slash(self):14 def test_validate_oci_branch_name_with_leading_slash(self):
diff --git a/lib/lp/app/webservice/tests/test_marshallers.py b/lib/lp/app/webservice/tests/test_marshallers.py
index cd5def4..006a1bd 100644
--- a/lib/lp/app/webservice/tests/test_marshallers.py
+++ b/lib/lp/app/webservice/tests/test_marshallers.py
@@ -29,7 +29,6 @@ def ws_url(bug):
2929
3030
31class TestTextFieldMarshaller(TestCaseWithFactory):31class TestTextFieldMarshaller(TestCaseWithFactory):
32
33 layer = DatabaseFunctionalLayer32 layer = DatabaseFunctionalLayer
3433
35 def test_unmarshall_obfuscated(self):34 def test_unmarshall_obfuscated(self):
@@ -138,7 +137,6 @@ class TestWebServiceObfuscation(TestCaseWithFactory):
138137
139138
140class IInlineExample(Interface):139class IInlineExample(Interface):
141
142 person = PersonChoice(vocabulary="ValidPersonOrTeam")140 person = PersonChoice(vocabulary="ValidPersonOrTeam")
143141
144 status = Choice(vocabulary=JobStatus)142 status = Choice(vocabulary=JobStatus)
@@ -158,7 +156,6 @@ def inline_example_from_dict(template):
158156
159157
160class TestInlineObjectFieldMarshaller(TestCaseWithFactory):158class TestInlineObjectFieldMarshaller(TestCaseWithFactory):
161
162 layer = DatabaseFunctionalLayer159 layer = DatabaseFunctionalLayer
163160
164 def test_unmarshall(self):161 def test_unmarshall(self):
diff --git a/lib/lp/app/widgets/date.py b/lib/lp/app/widgets/date.py
index ce27881..a54e85f 100644
--- a/lib/lp/app/widgets/date.py
+++ b/lib/lp/app/widgets/date.py
@@ -364,7 +364,7 @@ class DateTimeWidget(TextWidget):
364 for fmt in self.supported_input_formats:364 for fmt in self.supported_input_formats:
365 try:365 try:
366 datetime.strptime(input.strip(), fmt)366 datetime.strptime(input.strip(), fmt)
367 except (ValueError) as e:367 except ValueError as e:
368 if "unconverted data remains" in str(e):368 if "unconverted data remains" in str(e):
369 return369 return
370 else:370 else:
diff --git a/lib/lp/app/widgets/popup.py b/lib/lp/app/widgets/popup.py
index b2524ef..0f443f0 100644
--- a/lib/lp/app/widgets/popup.py
+++ b/lib/lp/app/widgets/popup.py
@@ -243,7 +243,6 @@ class VocabularyPickerWidget(SingleDataHelper, ItemsWidgetBase):
243243
244244
245class PersonPickerWidget(VocabularyPickerWidget):245class PersonPickerWidget(VocabularyPickerWidget):
246
247 show_assign_me_button = True246 show_assign_me_button = True
248 show_remove_button = False247 show_remove_button = False
249 picker_type = "person"248 picker_type = "person"
@@ -267,7 +266,6 @@ class PersonPickerWidget(VocabularyPickerWidget):
267266
268267
269class BugTrackerPickerWidget(VocabularyPickerWidget):268class BugTrackerPickerWidget(VocabularyPickerWidget):
270
271 __call__ = ViewPageTemplateFile("templates/bugtracker-picker.pt")269 __call__ = ViewPageTemplateFile("templates/bugtracker-picker.pt")
272 link_template = """270 link_template = """
273 or (<a id="create-bugtracker-link"271 or (<a id="create-bugtracker-link"
diff --git a/lib/lp/app/widgets/snapbuildchannels.py b/lib/lp/app/widgets/snapbuildchannels.py
index d1da50b..c2a9172 100644
--- a/lib/lp/app/widgets/snapbuildchannels.py
+++ b/lib/lp/app/widgets/snapbuildchannels.py
@@ -24,7 +24,6 @@ from lp.services.webapp.interfaces import (
2424
25@implementer(ISingleLineWidgetLayout, IAlwaysSubmittedWidget, IInputWidget)25@implementer(ISingleLineWidgetLayout, IAlwaysSubmittedWidget, IInputWidget)
26class SnapBuildChannelsWidget(BrowserWidget, InputWidget):26class SnapBuildChannelsWidget(BrowserWidget, InputWidget):
27
28 template = ViewPageTemplateFile("templates/snapbuildchannels.pt")27 template = ViewPageTemplateFile("templates/snapbuildchannels.pt")
29 hint = False28 hint = False
30 _widgets_set_up = False29 _widgets_set_up = False
diff --git a/lib/lp/app/widgets/tests/test_datetime.py b/lib/lp/app/widgets/tests/test_datetime.py
index a6b39e9..0ae5ab8 100644
--- a/lib/lp/app/widgets/tests/test_datetime.py
+++ b/lib/lp/app/widgets/tests/test_datetime.py
@@ -13,7 +13,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1313
1414
15class TestDateTimeWidget(TestCase):15class TestDateTimeWidget(TestCase):
16
17 layer = DatabaseFunctionalLayer16 layer = DatabaseFunctionalLayer
1817
19 def setUp(self):18 def setUp(self):
diff --git a/lib/lp/app/widgets/tests/test_itemswidgets.py b/lib/lp/app/widgets/tests/test_itemswidgets.py
index 57bdae9..4a604b9 100644
--- a/lib/lp/app/widgets/tests/test_itemswidgets.py
+++ b/lib/lp/app/widgets/tests/test_itemswidgets.py
@@ -278,7 +278,6 @@ class TestEnumChoiceWidget(TestCaseWithFactory):
278 layer = DatabaseFunctionalLayer278 layer = DatabaseFunctionalLayer
279279
280 class ChoiceEnum(DBEnumeratedType):280 class ChoiceEnum(DBEnumeratedType):
281
282 ITEM_A = DBItem(281 ITEM_A = DBItem(
283 1,282 1,
284 """283 """
diff --git a/lib/lp/app/widgets/tests/test_popup.py b/lib/lp/app/widgets/tests/test_popup.py
index 0a4ce99..214e3a1 100644
--- a/lib/lp/app/widgets/tests/test_popup.py
+++ b/lib/lp/app/widgets/tests/test_popup.py
@@ -44,7 +44,6 @@ class ITest(Interface, metaclass=TestMetaClass):
4444
4545
46class TestVocabularyPickerWidget(TestCaseWithFactory):46class TestVocabularyPickerWidget(TestCaseWithFactory):
47
48 layer = DatabaseFunctionalLayer47 layer = DatabaseFunctionalLayer
4948
50 def setUp(self):49 def setUp(self):
diff --git a/lib/lp/app/widgets/tests/test_snapbuildchannels.py b/lib/lp/app/widgets/tests/test_snapbuildchannels.py
index 27462a7..107c023 100644
--- a/lib/lp/app/widgets/tests/test_snapbuildchannels.py
+++ b/lib/lp/app/widgets/tests/test_snapbuildchannels.py
@@ -14,7 +14,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1414
1515
16class TestSnapBuildChannelsWidget(TestCaseWithFactory):16class TestSnapBuildChannelsWidget(TestCaseWithFactory):
17
18 layer = DatabaseFunctionalLayer17 layer = DatabaseFunctionalLayer
1918
20 def setUp(self):19 def setUp(self):
diff --git a/lib/lp/archivepublisher/customupload.py b/lib/lp/archivepublisher/customupload.py
index 533e488..2759c2f 100644
--- a/lib/lp/archivepublisher/customupload.py
+++ b/lib/lp/archivepublisher/customupload.py
@@ -315,7 +315,6 @@ class CustomUpload:
315 assert self.tmpdir is not None, "Must extract tarfile first"315 assert self.tmpdir is not None, "Must extract tarfile first"
316 extracted = False316 extracted = False
317 for dirpath, dirnames, filenames in os.walk(self.tmpdir):317 for dirpath, dirnames, filenames in os.walk(self.tmpdir):
318
319 # Create symbolic links to directories.318 # Create symbolic links to directories.
320 for dirname in dirnames:319 for dirname in dirnames:
321 sourcepath, basepath, destpath = self._buildInstallPaths(320 sourcepath, basepath, destpath = self._buildInstallPaths(
diff --git a/lib/lp/archivepublisher/debversion.py b/lib/lp/archivepublisher/debversion.py
index ddbecd9..cd409b4 100644
--- a/lib/lp/archivepublisher/debversion.py
+++ b/lib/lp/archivepublisher/debversion.py
@@ -55,7 +55,6 @@ class Version(changelog.Version):
55 """55 """
5656
57 def __init__(self, ver):57 def __init__(self, ver):
58
59 ver = str(ver)58 ver = str(ver)
60 if not len(ver):59 if not len(ver):
61 raise BadInputError("Input cannot be empty")60 raise BadInputError("Input cannot be empty")
diff --git a/lib/lp/archivepublisher/model/ftparchive.py b/lib/lp/archivepublisher/model/ftparchive.py
index a891a85..ba801ae 100644
--- a/lib/lp/archivepublisher/model/ftparchive.py
+++ b/lib/lp/archivepublisher/model/ftparchive.py
@@ -889,7 +889,6 @@ class FTPArchiveHandler:
889 # each of the distroseries we've touched889 # each of the distroseries we've touched
890 for distroseries in self.distro.series:890 for distroseries in self.distro.series:
891 for pocket in PackagePublishingPocket.items:891 for pocket in PackagePublishingPocket.items:
892
893 if not fullpublish:892 if not fullpublish:
894 if not self.publisher.isDirty(distroseries, pocket):893 if not self.publisher.isDirty(distroseries, pocket):
895 self.log.debug(894 self.log.debug(
diff --git a/lib/lp/archivepublisher/publishing.py b/lib/lp/archivepublisher/publishing.py
index 105a393..8eee4ed 100644
--- a/lib/lp/archivepublisher/publishing.py
+++ b/lib/lp/archivepublisher/publishing.py
@@ -1882,10 +1882,10 @@ class DirectoryHash:
1882 ]1882 ]
1883 with open(path, "rb") as in_file:1883 with open(path, "rb") as in_file:
1884 for chunk in iter(lambda: in_file.read(256 * 1024), b""):1884 for chunk in iter(lambda: in_file.read(256 * 1024), b""):
1885 for (checksum_file, hashobj) in hashes:1885 for checksum_file, hashobj in hashes:
1886 hashobj.update(chunk)1886 hashobj.update(chunk)
18871887
1888 for (checksum_file, hashobj) in hashes:1888 for checksum_file, hashobj in hashes:
1889 checksum_line = "%s *%s\n" % (1889 checksum_line = "%s *%s\n" % (
1890 hashobj.hexdigest(),1890 hashobj.hexdigest(),
1891 path[len(self.root) + 1 :],1891 path[len(self.root) + 1 :],
@@ -1899,5 +1899,5 @@ class DirectoryHash:
1899 self.add(os.path.join(dirpath, filename))1899 self.add(os.path.join(dirpath, filename))
19001900
1901 def close(self):1901 def close(self):
1902 for (checksum_path, checksum_file, archive_hash) in self.checksum_hash:1902 for checksum_path, checksum_file, archive_hash in self.checksum_hash:
1903 checksum_file.close()1903 checksum_file.close()
diff --git a/lib/lp/archivepublisher/scripts/copy_signingkeys.py b/lib/lp/archivepublisher/scripts/copy_signingkeys.py
index 018b7aa..54b829b 100644
--- a/lib/lp/archivepublisher/scripts/copy_signingkeys.py
+++ b/lib/lp/archivepublisher/scripts/copy_signingkeys.py
@@ -20,7 +20,6 @@ from lp.soyuz.interfaces.archive import IArchiveSet
2020
2121
22class CopySigningKeysScript(LaunchpadScript):22class CopySigningKeysScript(LaunchpadScript):
23
24 usage = "Usage: %prog [options] FROM_ARCHIVE TO_ARCHIVE"23 usage = "Usage: %prog [options] FROM_ARCHIVE TO_ARCHIVE"
25 description = "Copy signing keys between archives."24 description = "Copy signing keys between archives."
2625
diff --git a/lib/lp/archivepublisher/scripts/generate_contents_files.py b/lib/lp/archivepublisher/scripts/generate_contents_files.py
index e4c25e5..bd4f5e3 100644
--- a/lib/lp/archivepublisher/scripts/generate_contents_files.py
+++ b/lib/lp/archivepublisher/scripts/generate_contents_files.py
@@ -99,7 +99,6 @@ def execute(logger, command, args=None):
9999
100100
101class GenerateContentsFiles(LaunchpadCronScript):101class GenerateContentsFiles(LaunchpadCronScript):
102
103 distribution = None102 distribution = None
104103
105 def add_my_options(self):104 def add_my_options(self):
diff --git a/lib/lp/archivepublisher/scripts/processaccepted.py b/lib/lp/archivepublisher/scripts/processaccepted.py
index 10f90f7..da27fb9 100644
--- a/lib/lp/archivepublisher/scripts/processaccepted.py
+++ b/lib/lp/archivepublisher/scripts/processaccepted.py
@@ -128,7 +128,6 @@ class ProcessAccepted(PublisherScript):
128 )128 )
129 try:129 try:
130 for distroseries in distribution.series:130 for distroseries in distribution.series:
131
132 self.logger.debug(131 self.logger.debug(
133 "Processing queue for %s %s"132 "Processing queue for %s %s"
134 % (archive.reference, distroseries.name)133 % (archive.reference, distroseries.name)
diff --git a/lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py b/lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py
index e4832f4..e51077a 100644
--- a/lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py
+++ b/lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py
@@ -50,7 +50,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
5050
5151
52class TestSignableArchiveWithSigningKey(TestCaseWithFactory):52class TestSignableArchiveWithSigningKey(TestCaseWithFactory):
53
54 layer = ZopelessDatabaseLayer53 layer = ZopelessDatabaseLayer
55 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)54 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
5655
@@ -223,7 +222,6 @@ class TestSignableArchiveWithSigningKey(TestCaseWithFactory):
223222
224223
225class TestSignableArchiveWithRunParts(RunPartsMixin, TestCaseWithFactory):224class TestSignableArchiveWithRunParts(RunPartsMixin, TestCaseWithFactory):
226
227 layer = ZopelessDatabaseLayer225 layer = ZopelessDatabaseLayer
228226
229 def setUp(self):227 def setUp(self):
@@ -352,7 +350,6 @@ class TestSignableArchiveWithRunParts(RunPartsMixin, TestCaseWithFactory):
352350
353351
354class TestArchiveGPGSigningKey(TestCaseWithFactory):352class TestArchiveGPGSigningKey(TestCaseWithFactory):
355
356 layer = ZopelessDatabaseLayer353 layer = ZopelessDatabaseLayer
357 # treq.content doesn't close the connection before yielding control back354 # treq.content doesn't close the connection before yielding control back
358 # to the test, so we need to spin the reactor at the end to finish355 # to the test, so we need to spin the reactor at the end to finish
diff --git a/lib/lp/archivepublisher/tests/test_artifactory.py b/lib/lp/archivepublisher/tests/test_artifactory.py
index d91898e..d13a92d 100644
--- a/lib/lp/archivepublisher/tests/test_artifactory.py
+++ b/lib/lp/archivepublisher/tests/test_artifactory.py
@@ -69,7 +69,6 @@ class ArtifactoryPoolTestingFile(PoolTestingFile):
6969
7070
71class TestArtifactoryPool(TestCase):71class TestArtifactoryPool(TestCase):
72
73 layer = BaseLayer72 layer = BaseLayer
7473
75 def setUp(self):74 def setUp(self):
@@ -492,7 +491,6 @@ class TestArtifactoryPool(TestCase):
492491
493492
494class TestArtifactoryPoolFromLibrarian(TestCaseWithFactory):493class TestArtifactoryPoolFromLibrarian(TestCaseWithFactory):
495
496 layer = LaunchpadZopelessLayer494 layer = LaunchpadZopelessLayer
497495
498 def setUp(self):496 def setUp(self):
diff --git a/lib/lp/archivepublisher/tests/test_config.py b/lib/lp/archivepublisher/tests/test_config.py
index dd85b75..a25accd 100644
--- a/lib/lp/archivepublisher/tests/test_config.py
+++ b/lib/lp/archivepublisher/tests/test_config.py
@@ -27,7 +27,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
2727
2828
29class TestGetPubConfig(TestCaseWithFactory):29class TestGetPubConfig(TestCaseWithFactory):
30
31 layer = ZopelessDatabaseLayer30 layer = ZopelessDatabaseLayer
3231
33 def setUp(self):32 def setUp(self):
@@ -143,7 +142,6 @@ class TestGetPubConfig(TestCaseWithFactory):
143142
144143
145class TestGetPubConfigPPA(TestCaseWithFactory):144class TestGetPubConfigPPA(TestCaseWithFactory):
146
147 layer = ZopelessDatabaseLayer145 layer = ZopelessDatabaseLayer
148146
149 def setUp(self):147 def setUp(self):
@@ -252,7 +250,6 @@ class TestGetPubConfigPPA(TestCaseWithFactory):
252250
253251
254class TestGetPubConfigPPACompatUefi(TestCaseWithFactory):252class TestGetPubConfigPPACompatUefi(TestCaseWithFactory):
255
256 layer = ZopelessDatabaseLayer253 layer = ZopelessDatabaseLayer
257254
258 def setUp(self):255 def setUp(self):
@@ -275,7 +272,6 @@ class TestGetPubConfigPPACompatUefi(TestCaseWithFactory):
275272
276273
277class TestGetPubConfigPPARepositoryFormatPython(TestCaseWithFactory):274class TestGetPubConfigPPARepositoryFormatPython(TestCaseWithFactory):
278
279 layer = ZopelessDatabaseLayer275 layer = ZopelessDatabaseLayer
280276
281 def setUp(self):277 def setUp(self):
diff --git a/lib/lp/archivepublisher/tests/test_copy_signingkeys.py b/lib/lp/archivepublisher/tests/test_copy_signingkeys.py
index a31e85e..a2d5364 100644
--- a/lib/lp/archivepublisher/tests/test_copy_signingkeys.py
+++ b/lib/lp/archivepublisher/tests/test_copy_signingkeys.py
@@ -21,7 +21,6 @@ from lp.testing.script import run_script
2121
2222
23class TestCopySigningKeysScript(TestCaseWithFactory):23class TestCopySigningKeysScript(TestCaseWithFactory):
24
25 layer = ZopelessDatabaseLayer24 layer = ZopelessDatabaseLayer
2625
27 def makeScript(self, test_args=None, archives=None, expect_exit=False):26 def makeScript(self, test_args=None, archives=None, expect_exit=False):
diff --git a/lib/lp/archivepublisher/tests/test_customupload.py b/lib/lp/archivepublisher/tests/test_customupload.py
index f077874..7a22882 100644
--- a/lib/lp/archivepublisher/tests/test_customupload.py
+++ b/lib/lp/archivepublisher/tests/test_customupload.py
@@ -216,7 +216,6 @@ class TestTarfileVerification(TestCase):
216216
217217
218class TestSigning(TestCaseWithFactory, RunPartsMixin):218class TestSigning(TestCaseWithFactory, RunPartsMixin):
219
220 layer = LaunchpadZopelessLayer219 layer = LaunchpadZopelessLayer
221 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)220 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
222221
diff --git a/lib/lp/archivepublisher/tests/test_ddtp_tarball.py b/lib/lp/archivepublisher/tests/test_ddtp_tarball.py
index 873d22f..f2c4812 100644
--- a/lib/lp/archivepublisher/tests/test_ddtp_tarball.py
+++ b/lib/lp/archivepublisher/tests/test_ddtp_tarball.py
@@ -21,7 +21,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
2121
2222
23class TestDdtpTarball(TestCaseWithFactory):23class TestDdtpTarball(TestCaseWithFactory):
24
25 layer = ZopelessDatabaseLayer24 layer = ZopelessDatabaseLayer
2625
27 def setUp(self):26 def setUp(self):
diff --git a/lib/lp/archivepublisher/tests/test_deathrow.py b/lib/lp/archivepublisher/tests/test_deathrow.py
index 77bcf8b..f2d9ff1 100644
--- a/lib/lp/archivepublisher/tests/test_deathrow.py
+++ b/lib/lp/archivepublisher/tests/test_deathrow.py
@@ -20,7 +20,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
2020
2121
22class TestDeathRow(TestCase):22class TestDeathRow(TestCase):
23
24 layer = LaunchpadZopelessLayer23 layer = LaunchpadZopelessLayer
2524
26 def getTestPublisher(self, distroseries):25 def getTestPublisher(self, distroseries):
diff --git a/lib/lp/archivepublisher/tests/test_debian_installer.py b/lib/lp/archivepublisher/tests/test_debian_installer.py
index a41785e..b04619c 100644
--- a/lib/lp/archivepublisher/tests/test_debian_installer.py
+++ b/lib/lp/archivepublisher/tests/test_debian_installer.py
@@ -28,7 +28,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
2828
2929
30class TestDebianInstaller(RunPartsMixin, TestCaseWithFactory):30class TestDebianInstaller(RunPartsMixin, TestCaseWithFactory):
31
32 layer = ZopelessDatabaseLayer31 layer = ZopelessDatabaseLayer
3332
34 def setUp(self):33 def setUp(self):
diff --git a/lib/lp/archivepublisher/tests/test_dist_upgrader.py b/lib/lp/archivepublisher/tests/test_dist_upgrader.py
index 1584d60..ace7cdb 100644
--- a/lib/lp/archivepublisher/tests/test_dist_upgrader.py
+++ b/lib/lp/archivepublisher/tests/test_dist_upgrader.py
@@ -31,7 +31,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
3131
3232
33class TestDistUpgrader(RunPartsMixin, TestCaseWithFactory):33class TestDistUpgrader(RunPartsMixin, TestCaseWithFactory):
34
35 layer = ZopelessDatabaseLayer34 layer = ZopelessDatabaseLayer
3635
37 def setUp(self):36 def setUp(self):
diff --git a/lib/lp/archivepublisher/tests/test_dominator.py b/lib/lp/archivepublisher/tests/test_dominator.py
index e689f3c..7c9e7ad 100644
--- a/lib/lp/archivepublisher/tests/test_dominator.py
+++ b/lib/lp/archivepublisher/tests/test_dominator.py
@@ -939,7 +939,6 @@ def jumble(ordered_list):
939939
940940
941class TestDominatorMethods(TestCaseWithFactory):941class TestDominatorMethods(TestCaseWithFactory):
942
943 layer = ZopelessDatabaseLayer942 layer = ZopelessDatabaseLayer
944943
945 def makeDominator(self, publications):944 def makeDominator(self, publications):
diff --git a/lib/lp/archivepublisher/tests/test_indices.py b/lib/lp/archivepublisher/tests/test_indices.py
index e1dcfda..1397ffd 100644
--- a/lib/lp/archivepublisher/tests/test_indices.py
+++ b/lib/lp/archivepublisher/tests/test_indices.py
@@ -39,7 +39,6 @@ def get_field(stanza_fields, name):
3939
4040
41class TestNativeArchiveIndexes(TestNativePublishingBase):41class TestNativeArchiveIndexes(TestNativePublishingBase):
42
43 deb_md5 = "008409e7feb1c24a6ccab9f6a62d24c5"42 deb_md5 = "008409e7feb1c24a6ccab9f6a62d24c5"
44 deb_sha1 = "30b7b4e583fa380772c5a40e428434628faef8cf"43 deb_sha1 = "30b7b4e583fa380772c5a40e428434628faef8cf"
45 deb_sha256 = (44 deb_sha256 = (
diff --git a/lib/lp/archivepublisher/tests/test_meta_data.py b/lib/lp/archivepublisher/tests/test_meta_data.py
index f3a93ba..e7beb8f 100644
--- a/lib/lp/archivepublisher/tests/test_meta_data.py
+++ b/lib/lp/archivepublisher/tests/test_meta_data.py
@@ -18,7 +18,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
1818
1919
20class TestMetaData(TestCaseWithFactory):20class TestMetaData(TestCaseWithFactory):
21
22 layer = LaunchpadZopelessLayer21 layer = LaunchpadZopelessLayer
2322
24 def test_ubuntu_ppa(self):23 def test_ubuntu_ppa(self):
diff --git a/lib/lp/archivepublisher/tests/test_pool.py b/lib/lp/archivepublisher/tests/test_pool.py
index 1329e34..64e0890 100644
--- a/lib/lp/archivepublisher/tests/test_pool.py
+++ b/lib/lp/archivepublisher/tests/test_pool.py
@@ -72,7 +72,6 @@ class FakePackageRelease:
7272
7373
74class FakeReleaseType(EnumeratedType):74class FakeReleaseType(EnumeratedType):
75
76 SOURCE = Item("Source")75 SOURCE = Item("Source")
77 BINARY = Item("Binary")76 BINARY = Item("Binary")
7877
diff --git a/lib/lp/archivepublisher/tests/test_processaccepted.py b/lib/lp/archivepublisher/tests/test_processaccepted.py
index 96afe95..34c459e 100644
--- a/lib/lp/archivepublisher/tests/test_processaccepted.py
+++ b/lib/lp/archivepublisher/tests/test_processaccepted.py
@@ -26,7 +26,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
2626
2727
28class TestProcessAccepted(TestCaseWithFactory):28class TestProcessAccepted(TestCaseWithFactory):
29
30 layer = LaunchpadZopelessLayer29 layer = LaunchpadZopelessLayer
31 dbuser = config.uploadqueue.dbuser30 dbuser = config.uploadqueue.dbuser
3231
@@ -175,7 +174,6 @@ class TestProcessAccepted(TestCaseWithFactory):
175 ]174 ]
176175
177 class UploadCheckingSynchronizer:176 class UploadCheckingSynchronizer:
178
179 commit_count = 0177 commit_count = 0
180178
181 def beforeCompletion(inner_self, txn):179 def beforeCompletion(inner_self, txn):
diff --git a/lib/lp/archivepublisher/tests/test_publisherconfig.py b/lib/lp/archivepublisher/tests/test_publisherconfig.py
index 4907178..7966d8b 100644
--- a/lib/lp/archivepublisher/tests/test_publisherconfig.py
+++ b/lib/lp/archivepublisher/tests/test_publisherconfig.py
@@ -70,7 +70,6 @@ class TestPublisherConfig(TestCaseWithFactory):
7070
7171
72class TestPublisherConfigSecurity(TestCaseWithFactory):72class TestPublisherConfigSecurity(TestCaseWithFactory):
73
74 layer = DatabaseFunctionalLayer73 layer = DatabaseFunctionalLayer
7574
76 def test_only_admin(self):75 def test_only_admin(self):
diff --git a/lib/lp/archivepublisher/tests/test_rosetta_translations.py b/lib/lp/archivepublisher/tests/test_rosetta_translations.py
index ea41b4c..1d8fca7 100644
--- a/lib/lp/archivepublisher/tests/test_rosetta_translations.py
+++ b/lib/lp/archivepublisher/tests/test_rosetta_translations.py
@@ -40,7 +40,6 @@ from lp.translations.model.translationpackagingjob import (
4040
4141
42class TestRosettaTranslations(TestCaseWithFactory):42class TestRosettaTranslations(TestCaseWithFactory):
43
44 layer = LaunchpadZopelessLayer43 layer = LaunchpadZopelessLayer
4544
46 def makeTranslationsLFA(self, tar_content=None, filename=None):45 def makeTranslationsLFA(self, tar_content=None, filename=None):
diff --git a/lib/lp/archivepublisher/tests/test_signing.py b/lib/lp/archivepublisher/tests/test_signing.py
index 696053d..547c02f 100644
--- a/lib/lp/archivepublisher/tests/test_signing.py
+++ b/lib/lp/archivepublisher/tests/test_signing.py
@@ -183,7 +183,6 @@ class FakeMethodCallLog(FakeMethod):
183183
184184
185class TestSigningHelpers(TestCaseWithFactory):185class TestSigningHelpers(TestCaseWithFactory):
186
187 layer = ZopelessDatabaseLayer186 layer = ZopelessDatabaseLayer
188 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)187 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
189188
diff --git a/lib/lp/archivepublisher/tests/test_sync_signingkeys.py b/lib/lp/archivepublisher/tests/test_sync_signingkeys.py
index 05a0d24..bf5a5a2 100644
--- a/lib/lp/archivepublisher/tests/test_sync_signingkeys.py
+++ b/lib/lp/archivepublisher/tests/test_sync_signingkeys.py
@@ -52,7 +52,6 @@ from lp.testing.script import run_script
5252
5353
54class TestSyncSigningKeysScript(TestCaseWithFactory):54class TestSyncSigningKeysScript(TestCaseWithFactory):
55
56 layer = ZopelessDatabaseLayer55 layer = ZopelessDatabaseLayer
57 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)56 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
5857
diff --git a/lib/lp/archivepublisher/utils.py b/lib/lp/archivepublisher/utils.py
index 6156c2c..18d5f03 100644
--- a/lib/lp/archivepublisher/utils.py
+++ b/lib/lp/archivepublisher/utils.py
@@ -37,7 +37,6 @@ def get_ppa_reference(ppa):
3737
3838
39class PlainTempFile:39class PlainTempFile:
40
41 # Enumerated identifier.40 # Enumerated identifier.
42 compression_type = IndexCompressionType.UNCOMPRESSED41 compression_type = IndexCompressionType.UNCOMPRESSED
43 # Filename suffix.42 # Filename suffix.
diff --git a/lib/lp/archiveuploader/nascentuploadfile.py b/lib/lp/archiveuploader/nascentuploadfile.py
index c7773f0..01b2243 100644
--- a/lib/lp/archiveuploader/nascentuploadfile.py
+++ b/lib/lp/archiveuploader/nascentuploadfile.py
@@ -545,7 +545,6 @@ class BaseBinaryUploadFile(PackageUploadFile):
545 policy,545 policy,
546 logger,546 logger,
547 ):547 ):
548
549 PackageUploadFile.__init__(548 PackageUploadFile.__init__(
550 self,549 self,
551 filepath,550 filepath,
diff --git a/lib/lp/archiveuploader/tests/test_buildinfofile.py b/lib/lp/archiveuploader/tests/test_buildinfofile.py
index b54e4e4..acd0d02 100644
--- a/lib/lp/archiveuploader/tests/test_buildinfofile.py
+++ b/lib/lp/archiveuploader/tests/test_buildinfofile.py
@@ -14,7 +14,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
1414
1515
16class TestBuildInfoFile(PackageUploadFileTestCase):16class TestBuildInfoFile(PackageUploadFileTestCase):
17
18 layer = LaunchpadZopelessLayer17 layer = LaunchpadZopelessLayer
1918
20 def getBaseBuildInfo(self):19 def getBaseBuildInfo(self):
@@ -54,7 +53,7 @@ class TestBuildInfoFile(PackageUploadFileTestCase):
54 def test_properties(self):53 def test_properties(self):
55 buildinfo = self.getBaseBuildInfo()54 buildinfo = self.getBaseBuildInfo()
56 changes = self.getBaseChanges()55 changes = self.getBaseChanges()
57 for (arch, is_sourceful, is_binaryful, is_archindep) in (56 for arch, is_sourceful, is_binaryful, is_archindep in (
58 ("source", True, False, False),57 ("source", True, False, False),
59 ("all", False, True, True),58 ("all", False, True, True),
60 ("i386", False, True, False),59 ("i386", False, True, False),
diff --git a/lib/lp/archiveuploader/tests/test_changesfile.py b/lib/lp/archiveuploader/tests/test_changesfile.py
index 16a4c42..067b6bf 100644
--- a/lib/lp/archiveuploader/tests/test_changesfile.py
+++ b/lib/lp/archiveuploader/tests/test_changesfile.py
@@ -426,7 +426,6 @@ class ChangesFileTests(TestCase):
426426
427427
428class TestSignatureVerification(TestCase):428class TestSignatureVerification(TestCase):
429
430 layer = ZopelessDatabaseLayer429 layer = ZopelessDatabaseLayer
431430
432 def setUp(self):431 def setUp(self):
diff --git a/lib/lp/archiveuploader/tests/test_dscfile.py b/lib/lp/archiveuploader/tests/test_dscfile.py
index 23a15ca..e2ddeaf 100644
--- a/lib/lp/archiveuploader/tests/test_dscfile.py
+++ b/lib/lp/archiveuploader/tests/test_dscfile.py
@@ -119,7 +119,6 @@ class FakeChangesFile:
119119
120120
121class TestDSCFileWithDatabase(TestCaseWithFactory):121class TestDSCFileWithDatabase(TestCaseWithFactory):
122
123 layer = ZopelessDatabaseLayer122 layer = ZopelessDatabaseLayer
124123
125 def test_checkFiles_verifies_additional_hashes(self):124 def test_checkFiles_verifies_additional_hashes(self):
@@ -312,7 +311,6 @@ class BaseTestSourceFileVerification(TestCase):
312311
313312
314class Test10SourceFormatVerification(BaseTestSourceFileVerification):313class Test10SourceFormatVerification(BaseTestSourceFileVerification):
315
316 format = SourcePackageFormat.FORMAT_1_0314 format = SourcePackageFormat.FORMAT_1_0
317315
318 wrong_files_error = (316 wrong_files_error = (
@@ -378,7 +376,6 @@ class Test10SourceFormatVerification(BaseTestSourceFileVerification):
378376
379377
380class Test30QuiltSourceFormatVerification(BaseTestSourceFileVerification):378class Test30QuiltSourceFormatVerification(BaseTestSourceFileVerification):
381
382 format = SourcePackageFormat.FORMAT_3_0_QUILT379 format = SourcePackageFormat.FORMAT_3_0_QUILT
383380
384 wrong_files_error = (381 wrong_files_error = (
@@ -428,7 +425,6 @@ class Test30QuiltSourceFormatVerification(BaseTestSourceFileVerification):
428425
429426
430class Test30NativeSourceFormatVerification(BaseTestSourceFileVerification):427class Test30NativeSourceFormatVerification(BaseTestSourceFileVerification):
431
432 format = SourcePackageFormat.FORMAT_3_0_NATIVE428 format = SourcePackageFormat.FORMAT_3_0_NATIVE
433429
434 wrong_files_error = "foo_1.dsc: must have only a tar.*."430 wrong_files_error = "foo_1.dsc: must have only a tar.*."
diff --git a/lib/lp/archiveuploader/tests/test_nascentupload.py b/lib/lp/archiveuploader/tests/test_nascentupload.py
index 0667e31..4047317 100644
--- a/lib/lp/archiveuploader/tests/test_nascentupload.py
+++ b/lib/lp/archiveuploader/tests/test_nascentupload.py
@@ -120,7 +120,6 @@ class TestOverrideDDEBs(TestMatchDDEBs):
120120
121121
122class TestNascentUpload(TestCase):122class TestNascentUpload(TestCase):
123
124 layer = ZopelessDatabaseLayer123 layer = ZopelessDatabaseLayer
125124
126 def test_hash_mismatch_rejects(self):125 def test_hash_mismatch_rejects(self):
diff --git a/lib/lp/archiveuploader/tests/test_nascentuploadfile.py b/lib/lp/archiveuploader/tests/test_nascentuploadfile.py
index 6ddfadc..0de2157 100644
--- a/lib/lp/archiveuploader/tests/test_nascentuploadfile.py
+++ b/lib/lp/archiveuploader/tests/test_nascentuploadfile.py
@@ -79,7 +79,6 @@ class NascentUploadFileTestCase(TestCaseWithFactory):
7979
8080
81class TestNascentUploadFile(NascentUploadFileTestCase):81class TestNascentUploadFile(NascentUploadFileTestCase):
82
83 layer = ZopelessDatabaseLayer82 layer = ZopelessDatabaseLayer
8483
85 def test_checkSizeAndCheckSum_validates_size(self):84 def test_checkSizeAndCheckSum_validates_size(self):
diff --git a/lib/lp/archiveuploader/tests/test_private_maintainers.py b/lib/lp/archiveuploader/tests/test_private_maintainers.py
index 7576d2c..00cf378 100644
--- a/lib/lp/archiveuploader/tests/test_private_maintainers.py
+++ b/lib/lp/archiveuploader/tests/test_private_maintainers.py
@@ -9,7 +9,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
99
1010
11class TestPrivateMaintainers(TestCaseWithFactory):11class TestPrivateMaintainers(TestCaseWithFactory):
12
13 layer = DatabaseFunctionalLayer12 layer = DatabaseFunctionalLayer
1413
15 def test_private_team_maintainer(self):14 def test_private_team_maintainer(self):
diff --git a/lib/lp/archiveuploader/tests/test_sync_notification.py b/lib/lp/archiveuploader/tests/test_sync_notification.py
index 7e5ca9f..e1fd5ee 100644
--- a/lib/lp/archiveuploader/tests/test_sync_notification.py
+++ b/lib/lp/archiveuploader/tests/test_sync_notification.py
@@ -53,7 +53,6 @@ class FakeChangesFile:
5353
5454
55class TestSyncNotification(TestCaseWithFactory):55class TestSyncNotification(TestCaseWithFactory):
56
57 layer = LaunchpadZopelessLayer56 layer = LaunchpadZopelessLayer
5857
59 def makePersonWithEmail(self):58 def makePersonWithEmail(self):
diff --git a/lib/lp/archiveuploader/tests/test_uploadpolicy.py b/lib/lp/archiveuploader/tests/test_uploadpolicy.py
index 042901f..71dd315 100644
--- a/lib/lp/archiveuploader/tests/test_uploadpolicy.py
+++ b/lib/lp/archiveuploader/tests/test_uploadpolicy.py
@@ -146,7 +146,6 @@ class TestUploadPolicy_validateUploadType(TestCase):
146146
147147
148class TestUploadPolicy(TestCaseWithFactory):148class TestUploadPolicy(TestCaseWithFactory):
149
150 layer = DatabaseFunctionalLayer149 layer = DatabaseFunctionalLayer
151150
152 def test_getUtility_returns_class(self):151 def test_getUtility_returns_class(self):
diff --git a/lib/lp/archiveuploader/uploadpolicy.py b/lib/lp/archiveuploader/uploadpolicy.py
index 1448e31..2a99076 100644
--- a/lib/lp/archiveuploader/uploadpolicy.py
+++ b/lib/lp/archiveuploader/uploadpolicy.py
@@ -46,7 +46,6 @@ class IArchiveUploadPolicy(Interface):
4646
4747
48class ArchiveUploadType(EnumeratedType):48class ArchiveUploadType(EnumeratedType):
49
50 SOURCE_ONLY = Item("Source only")49 SOURCE_ONLY = Item("Source only")
51 BINARY_ONLY = Item("Binary only")50 BINARY_ONLY = Item("Binary only")
52 MIXED_ONLY = Item("Mixed only")51 MIXED_ONLY = Item("Mixed only")
diff --git a/lib/lp/archiveuploader/utils.py b/lib/lp/archiveuploader/utils.py
index 5b3e176..c355ba4 100644
--- a/lib/lp/archiveuploader/utils.py
+++ b/lib/lp/archiveuploader/utils.py
@@ -52,7 +52,6 @@ class UploadWarning(Warning):
5252
5353
54class DpkgSourceError(Exception):54class DpkgSourceError(Exception):
55
56 _fmt = "Unable to unpack source package (%(result)s): %(output)s"55 _fmt = "Unable to unpack source package (%(result)s): %(output)s"
5756
58 def __init__(self, command, output, result):57 def __init__(self, command, output, result):
@@ -310,7 +309,7 @@ def merge_file_lists(files, checksums_sha1, checksums_sha256, changes=True):
310 # that we see.309 # that we see.
311 file_hashes = defaultdict(dict)310 file_hashes = defaultdict(dict)
312 hash_files = defaultdict(lambda: defaultdict(int))311 hash_files = defaultdict(lambda: defaultdict(int))
313 for (algo, checksums) in [312 for algo, checksums in [
314 ("SHA1", checksums_sha1),313 ("SHA1", checksums_sha1),
315 ("SHA256", checksums_sha256),314 ("SHA256", checksums_sha256),
316 ]:315 ]:
diff --git a/lib/lp/blueprints/browser/person.py b/lib/lp/blueprints/browser/person.py
index 4efa613..f3b322c 100644
--- a/lib/lp/blueprints/browser/person.py
+++ b/lib/lp/blueprints/browser/person.py
@@ -15,7 +15,6 @@ from lp.services.webapp.publisher import LaunchpadView
1515
1616
17class PersonSpecsMenu(NavigationMenu):17class PersonSpecsMenu(NavigationMenu):
18
19 usedfor = IPerson18 usedfor = IPerson
20 facet = "specifications"19 facet = "specifications"
21 links = [20 links = [
diff --git a/lib/lp/blueprints/browser/specification.py b/lib/lp/blueprints/browser/specification.py
index 92f61af..262b7d6 100644
--- a/lib/lp/blueprints/browser/specification.py
+++ b/lib/lp/blueprints/browser/specification.py
@@ -475,7 +475,6 @@ class NewSpecificationFromSprintView(NewSpecificationFromNonTargetView):
475475
476476
477class SpecificationNavigation(Navigation):477class SpecificationNavigation(Navigation):
478
479 usedfor = ISpecification478 usedfor = ISpecification
480479
481 @stepthrough("+subscription")480 @stepthrough("+subscription")
@@ -513,14 +512,12 @@ class SpecificationEditLinksMixin:
513512
514513
515class SpecificationActionMenu(NavigationMenu, SpecificationEditLinksMixin):514class SpecificationActionMenu(NavigationMenu, SpecificationEditLinksMixin):
516
517 usedfor = ISpecification515 usedfor = ISpecification
518 facet = "specifications"516 facet = "specifications"
519 links = ("edit", "supersede", "retarget")517 links = ("edit", "supersede", "retarget")
520518
521519
522class SpecificationContextMenu(ContextMenu, SpecificationEditLinksMixin):520class SpecificationContextMenu(ContextMenu, SpecificationEditLinksMixin):
523
524 usedfor = ISpecification521 usedfor = ISpecification
525 links = [522 links = [
526 "edit",523 "edit",
@@ -864,7 +861,6 @@ class SpecificationEditSchema(ISpecification):
864861
865862
866class SpecificationEditView(LaunchpadEditFormView):863class SpecificationEditView(LaunchpadEditFormView):
867
868 schema = SpecificationEditSchema864 schema = SpecificationEditSchema
869 field_names = ["name", "title", "specurl", "summary", "whiteboard"]865 field_names = ["name", "title", "specurl", "summary", "whiteboard"]
870 next_url = None866 next_url = None
@@ -1071,12 +1067,10 @@ class SpecificationGoalDecideView(LaunchpadFormView):
10711067
10721068
1073class ISpecificationRetargetingSchema(Interface):1069class ISpecificationRetargetingSchema(Interface):
1074
1075 target = copy_field(ISpecification["target"], readonly=False)1070 target = copy_field(ISpecification["target"], readonly=False)
10761071
10771072
1078class SpecificationRetargetingView(LaunchpadFormView):1073class SpecificationRetargetingView(LaunchpadFormView):
1079
1080 schema = ISpecificationRetargetingSchema1074 schema = ISpecificationRetargetingSchema
1081 field_names = ["target"]1075 field_names = ["target"]
1082 label = _("Move this blueprint to a different project")1076 label = _("Move this blueprint to a different project")
@@ -1385,7 +1379,6 @@ class SpecGraph:
13851379
13861380
1387class SpecificationSprintAddView(LaunchpadFormView):1381class SpecificationSprintAddView(LaunchpadFormView):
1388
1389 schema = ISprintSpecification1382 schema = ISprintSpecification
1390 label = _("Propose specification for meeting agenda")1383 label = _("Propose specification for meeting agenda")
1391 field_names = ["sprint"]1384 field_names = ["sprint"]
@@ -1564,7 +1557,6 @@ here = os.path.dirname(__file__)
15641557
15651558
1566class SpecificationTreePNGView(SpecificationTreeGraphView):1559class SpecificationTreePNGView(SpecificationTreeGraphView):
1567
1568 fail_over_image_path = os.path.join(1560 fail_over_image_path = os.path.join(
1569 config.root,1561 config.root,
1570 "lib",1562 "lib",
diff --git a/lib/lp/blueprints/browser/specificationdependency.py b/lib/lp/blueprints/browser/specificationdependency.py
index 513ac61..5955658 100644
--- a/lib/lp/blueprints/browser/specificationdependency.py
+++ b/lib/lp/blueprints/browser/specificationdependency.py
@@ -23,7 +23,6 @@ from lp.services.webapp import LaunchpadView, canonical_url
2323
2424
25class AddSpecificationDependencySchema(Interface):25class AddSpecificationDependencySchema(Interface):
26
27 dependency = copy_field(26 dependency = copy_field(
28 ISpecificationDependency["dependency"],27 ISpecificationDependency["dependency"],
29 readonly=False,28 readonly=False,
@@ -89,7 +88,6 @@ class SpecificationDependencyRemoveView(LaunchpadFormView):
8988
9089
91class SpecificationDependencyTreeView(LaunchpadView):90class SpecificationDependencyTreeView(LaunchpadView):
92
93 label = "Blueprint dependency tree"91 label = "Blueprint dependency tree"
9492
95 @property93 @property
diff --git a/lib/lp/blueprints/browser/specificationsubscription.py b/lib/lp/blueprints/browser/specificationsubscription.py
index c4e15ae..c8f9432 100644
--- a/lib/lp/blueprints/browser/specificationsubscription.py
+++ b/lib/lp/blueprints/browser/specificationsubscription.py
@@ -113,7 +113,6 @@ class SpecificationSubscriptionDeleteView(LaunchpadFormView):
113113
114114
115class SpecificationSubscriptionEditView(LaunchpadEditFormView):115class SpecificationSubscriptionEditView(LaunchpadEditFormView):
116
117 schema = ISpecificationSubscription116 schema = ISpecificationSubscription
118 field_names = ["essential"]117 field_names = ["essential"]
119118
diff --git a/lib/lp/blueprints/browser/sprint.py b/lib/lp/blueprints/browser/sprint.py
index debe896..d7eb8d0 100644
--- a/lib/lp/blueprints/browser/sprint.py
+++ b/lib/lp/blueprints/browser/sprint.py
@@ -91,7 +91,6 @@ class SprintFacets(StandardLaunchpadFacets):
9191
9292
93class SprintNavigation(Navigation):93class SprintNavigation(Navigation):
94
95 usedfor = ISprint94 usedfor = ISprint
9695
9796
@@ -159,7 +158,6 @@ class SprintSpecificationsMenu(NavigationMenu, HasSpecificationsMenuMixin):
159158
160159
161class SprintSetNavigation(GetitemNavigation):160class SprintSetNavigation(GetitemNavigation):
162
163 usedfor = ISprintSet161 usedfor = ISprintSet
164162
165163
@@ -170,13 +168,11 @@ class SprintSetBreadcrumb(Breadcrumb):
170168
171169
172class HasSprintsView(LaunchpadView):170class HasSprintsView(LaunchpadView):
173
174 page_title = "Events"171 page_title = "Events"
175172
176173
177@implementer(IMajorHeadingView)174@implementer(IMajorHeadingView)
178class SprintView(HasSpecificationsView):175class SprintView(HasSpecificationsView):
179
180 # XXX Michael Nelson 20090923 bug=435255176 # XXX Michael Nelson 20090923 bug=435255
181 # This class inherits a label from HasSpecificationsView, which causes177 # This class inherits a label from HasSpecificationsView, which causes
182 # a second h1 to display. But as this view implements IMajorHeadingView178 # a second h1 to display. But as this view implements IMajorHeadingView
@@ -335,7 +331,6 @@ class SprintAddView(LaunchpadFormView):
335331
336332
337class SprintBrandingView(BrandingChangeView):333class SprintBrandingView(BrandingChangeView):
338
339 schema = ISprint334 schema = ISprint
340 # sabdfl 2007-03-28 deliberately leaving icon off the list, i think it335 # sabdfl 2007-03-28 deliberately leaving icon off the list, i think it
341 # would be overkill, we can add it later if people ask for it336 # would be overkill, we can add it later if people ask for it
@@ -543,7 +538,6 @@ class SprintMeetingExportView(LaunchpadView):
543 for spec in self.context.specifications(538 for spec in self.context.specifications(
544 self.user, filter=[SpecificationFilter.ACCEPTED]539 self.user, filter=[SpecificationFilter.ACCEPTED]
545 ):540 ):
546
547 # Skip sprints with no priority or less than LOW.541 # Skip sprints with no priority or less than LOW.
548 if spec.priority < SpecificationPriority.UNDEFINED:542 if spec.priority < SpecificationPriority.UNDEFINED:
549 continue543 continue
diff --git a/lib/lp/blueprints/browser/sprintattendance.py b/lib/lp/blueprints/browser/sprintattendance.py
index baeea2f..acb8d48 100644
--- a/lib/lp/blueprints/browser/sprintattendance.py
+++ b/lib/lp/blueprints/browser/sprintattendance.py
@@ -22,7 +22,6 @@ from lp.services.webapp import canonical_url
2222
2323
24class BaseSprintAttendanceAddView(LaunchpadFormView):24class BaseSprintAttendanceAddView(LaunchpadFormView):
25
26 schema = ISprintAttendance25 schema = ISprintAttendance
27 custom_widget_time_starts = DateTimeWidget26 custom_widget_time_starts = DateTimeWidget
28 custom_widget_time_ends = DateTimeWidget27 custom_widget_time_ends = DateTimeWidget
diff --git a/lib/lp/blueprints/browser/tests/test_hasspecifications.py b/lib/lp/blueprints/browser/tests/test_hasspecifications.py
index 501fc63..289ee9f 100644
--- a/lib/lp/blueprints/browser/tests/test_hasspecifications.py
+++ b/lib/lp/blueprints/browser/tests/test_hasspecifications.py
@@ -7,7 +7,6 @@ from lp.testing.views import create_initialized_view
77
88
9class TestPersonSpecWorkloadView(TestCaseWithFactory):9class TestPersonSpecWorkloadView(TestCaseWithFactory):
10
11 layer = DatabaseFunctionalLayer10 layer = DatabaseFunctionalLayer
1211
13 def setUp(self):12 def setUp(self):
diff --git a/lib/lp/blueprints/browser/tests/test_person_upcomingwork.py b/lib/lp/blueprints/browser/tests/test_person_upcomingwork.py
index 917012d..3dc34df 100644
--- a/lib/lp/blueprints/browser/tests/test_person_upcomingwork.py
+++ b/lib/lp/blueprints/browser/tests/test_person_upcomingwork.py
@@ -25,7 +25,6 @@ from lp.testing.views import create_initialized_view
2525
2626
27class Test_getWorkItemsDueBefore(TestCaseWithFactory):27class Test_getWorkItemsDueBefore(TestCaseWithFactory):
28
29 layer = DatabaseFunctionalLayer28 layer = DatabaseFunctionalLayer
3029
31 def setUp(self):30 def setUp(self):
@@ -190,7 +189,6 @@ class Test_getWorkItemsDueBefore(TestCaseWithFactory):
190189
191190
192class TestGenericWorkItem(TestCaseWithFactory):191class TestGenericWorkItem(TestCaseWithFactory):
193
194 layer = DatabaseFunctionalLayer192 layer = DatabaseFunctionalLayer
195193
196 def setUp(self):194 def setUp(self):
@@ -254,7 +252,6 @@ class TestWorkItemContainer(TestCase):
254252
255253
256class TestPersonUpcomingWork(BrowserTestCase):254class TestPersonUpcomingWork(BrowserTestCase):
257
258 layer = DatabaseFunctionalLayer255 layer = DatabaseFunctionalLayer
259256
260 def setUp(self):257 def setUp(self):
@@ -474,7 +471,6 @@ class TestPersonUpcomingWork(BrowserTestCase):
474471
475472
476class TestPersonUpcomingWorkView(TestCaseWithFactory):473class TestPersonUpcomingWorkView(TestCaseWithFactory):
477
478 layer = DatabaseFunctionalLayer474 layer = DatabaseFunctionalLayer
479475
480 def setUp(self):476 def setUp(self):
diff --git a/lib/lp/blueprints/browser/tests/test_specification.py b/lib/lp/blueprints/browser/tests/test_specification.py
index 4dd927b..3833820 100644
--- a/lib/lp/blueprints/browser/tests/test_specification.py
+++ b/lib/lp/blueprints/browser/tests/test_specification.py
@@ -55,7 +55,6 @@ from lp.testing.views import create_initialized_view
5555
5656
57class TestSpecificationSearch(TestCaseWithFactory):57class TestSpecificationSearch(TestCaseWithFactory):
58
59 layer = DatabaseFunctionalLayer58 layer = DatabaseFunctionalLayer
6059
61 def test_search_with_percent(self):60 def test_search_with_percent(self):
@@ -67,7 +66,6 @@ class TestSpecificationSearch(TestCaseWithFactory):
6766
6867
69class TestBranchTraversal(TestCaseWithFactory):68class TestBranchTraversal(TestCaseWithFactory):
70
71 layer = DatabaseFunctionalLayer69 layer = DatabaseFunctionalLayer
7270
73 def setUp(self):71 def setUp(self):
@@ -227,7 +225,6 @@ class TestSpecificationView(BrowserTestCase):
227225
228226
229class TestSpecificationSet(BrowserTestCase):227class TestSpecificationSet(BrowserTestCase):
230
231 layer = DatabaseFunctionalLayer228 layer = DatabaseFunctionalLayer
232229
233 def test_index_with_proprietary(self):230 def test_index_with_proprietary(self):
@@ -264,7 +261,6 @@ class TestSpecificationSet(BrowserTestCase):
264261
265262
266class TestSpecificationInformationType(BrowserTestCase):263class TestSpecificationInformationType(BrowserTestCase):
267
268 layer = DatabaseFunctionalLayer264 layer = DatabaseFunctionalLayer
269265
270 portlet_tag = soupmatchers.Tag(266 portlet_tag = soupmatchers.Tag(
@@ -398,7 +394,6 @@ NEW_SPEC_FROM_ROOT_URL = "http://blueprints.launchpad.test/specs/+new"
398394
399395
400class NewSpecificationTests:396class NewSpecificationTests:
401
402 expected_keys = {"PROPRIETARY", "PUBLIC", "EMBARGOED"}397 expected_keys = {"PROPRIETARY", "PUBLIC", "EMBARGOED"}
403398
404 def _create_form_data(self, context):399 def _create_form_data(self, context):
@@ -445,7 +440,6 @@ class NewSpecificationTests:
445class TestNewSpecificationFromRootView(440class TestNewSpecificationFromRootView(
446 TestCaseWithFactory, NewSpecificationTests441 TestCaseWithFactory, NewSpecificationTests
447):442):
448
449 layer = DatabaseFunctionalLayer443 layer = DatabaseFunctionalLayer
450444
451 def createInitializedView(self):445 def createInitializedView(self):
@@ -466,7 +460,6 @@ class TestNewSpecificationFromRootView(
466class TestNewSpecificationFromSprintView(460class TestNewSpecificationFromSprintView(
467 TestCaseWithFactory, NewSpecificationTests461 TestCaseWithFactory, NewSpecificationTests
468):462):
469
470 layer = DatabaseFunctionalLayer463 layer = DatabaseFunctionalLayer
471464
472 def createInitializedView(self):465 def createInitializedView(self):
@@ -487,7 +480,6 @@ class TestNewSpecificationFromSprintView(
487class TestNewSpecificationFromProjectGroupView(480class TestNewSpecificationFromProjectGroupView(
488 TestCaseWithFactory, NewSpecificationTests481 TestCaseWithFactory, NewSpecificationTests
489):482):
490
491 layer = DatabaseFunctionalLayer483 layer = DatabaseFunctionalLayer
492484
493 def createInitializedView(self):485 def createInitializedView(self):
@@ -508,7 +500,6 @@ class TestNewSpecificationFromProjectGroupView(
508class TestNewSpecificationFromProductView(500class TestNewSpecificationFromProductView(
509 TestCaseWithFactory, NewSpecificationTests501 TestCaseWithFactory, NewSpecificationTests
510):502):
511
512 layer = DatabaseFunctionalLayer503 layer = DatabaseFunctionalLayer
513504
514 expected_keys = {"PROPRIETARY", "EMBARGOED"}505 expected_keys = {"PROPRIETARY", "EMBARGOED"}
@@ -530,7 +521,6 @@ class TestNewSpecificationFromProductView(
530class TestNewSpecificationFromDistributionView(521class TestNewSpecificationFromDistributionView(
531 TestCaseWithFactory, NewSpecificationTests522 TestCaseWithFactory, NewSpecificationTests
532):523):
533
534 layer = DatabaseFunctionalLayer524 layer = DatabaseFunctionalLayer
535525
536 expected_keys = {"PUBLIC"}526 expected_keys = {"PUBLIC"}
@@ -541,7 +531,6 @@ class TestNewSpecificationFromDistributionView(
541531
542532
543class TestNewSpecificationInformationType(BrowserTestCase):533class TestNewSpecificationInformationType(BrowserTestCase):
544
545 layer = DatabaseFunctionalLayer534 layer = DatabaseFunctionalLayer
546535
547 def setUp(self):536 def setUp(self):
@@ -628,7 +617,6 @@ class TestNewSpecificationInformationType(BrowserTestCase):
628617
629618
630class BaseNewSpecificationInformationTypeDefaultMixin:619class BaseNewSpecificationInformationTypeDefaultMixin:
631
632 layer = DatabaseFunctionalLayer620 layer = DatabaseFunctionalLayer
633621
634 def _setUp(self):622 def _setUp(self):
@@ -917,7 +905,6 @@ class TestSecificationHelpers(unittest.TestCase):
917905
918906
919class TestSpecificationFieldXHTMLRepresentations(TestCaseWithFactory):907class TestSpecificationFieldXHTMLRepresentations(TestCaseWithFactory):
920
921 layer = DatabaseFunctionalLayer908 layer = DatabaseFunctionalLayer
922909
923 def test_starter_empty(self):910 def test_starter_empty(self):
diff --git a/lib/lp/blueprints/browser/tests/test_specificationdependency.py b/lib/lp/blueprints/browser/tests/test_specificationdependency.py
index b42cfa7..0b49e3f 100644
--- a/lib/lp/blueprints/browser/tests/test_specificationdependency.py
+++ b/lib/lp/blueprints/browser/tests/test_specificationdependency.py
@@ -20,7 +20,6 @@ from lp.testing.views import create_view
2020
2121
22class TestAddDependency(BrowserTestCase):22class TestAddDependency(BrowserTestCase):
23
24 layer = DatabaseFunctionalLayer23 layer = DatabaseFunctionalLayer
2524
26 def test_add_dependency_by_url(self):25 def test_add_dependency_by_url(self):
@@ -42,7 +41,6 @@ class TestAddDependency(BrowserTestCase):
4241
4342
44class TestDepTree(TestCaseWithFactory):43class TestDepTree(TestCaseWithFactory):
45
46 layer = DatabaseFunctionalLayer44 layer = DatabaseFunctionalLayer
4745
48 def test_deptree_filters_dependencies(self):46 def test_deptree_filters_dependencies(self):
diff --git a/lib/lp/blueprints/browser/tests/test_specificationtarget.py b/lib/lp/blueprints/browser/tests/test_specificationtarget.py
index 8d51ef1..931c046 100644
--- a/lib/lp/blueprints/browser/tests/test_specificationtarget.py
+++ b/lib/lp/blueprints/browser/tests/test_specificationtarget.py
@@ -123,7 +123,6 @@ class TestHasSpecificationsViewInvolvement(TestCaseWithFactory):
123123
124124
125class TestAssignments(TestCaseWithFactory):125class TestAssignments(TestCaseWithFactory):
126
127 layer = DatabaseFunctionalLayer126 layer = DatabaseFunctionalLayer
128127
129 def setUp(self):128 def setUp(self):
@@ -217,7 +216,6 @@ class TestHasSpecificationsTemplates(TestCaseWithFactory):
217216
218217
219class TestHasSpecificationsConfiguration(TestCaseWithFactory):218class TestHasSpecificationsConfiguration(TestCaseWithFactory):
220
221 layer = DatabaseFunctionalLayer219 layer = DatabaseFunctionalLayer
222220
223 def test_cannot_configure_blueprints_product_no_edit_permission(self):221 def test_cannot_configure_blueprints_product_no_edit_permission(self):
@@ -320,7 +318,6 @@ class SpecificationSetViewTestCase(TestCaseWithFactory):
320318
321319
322class TestPrivacy(BrowserTestCase):320class TestPrivacy(BrowserTestCase):
323
324 layer = DatabaseFunctionalLayer321 layer = DatabaseFunctionalLayer
325322
326 def test_product_specs(self):323 def test_product_specs(self):
diff --git a/lib/lp/blueprints/browser/tests/test_sprint.py b/lib/lp/blueprints/browser/tests/test_sprint.py
index 00d63f3..dadc252 100644
--- a/lib/lp/blueprints/browser/tests/test_sprint.py
+++ b/lib/lp/blueprints/browser/tests/test_sprint.py
@@ -22,7 +22,6 @@ from lp.testing.matchers import BrowsesWithQueryLimit, HasQueryCount
2222
2323
24class TestSprintIndex(BrowserTestCase):24class TestSprintIndex(BrowserTestCase):
25
26 layer = DatabaseFunctionalLayer25 layer = DatabaseFunctionalLayer
2726
28 def test_query_count(self):27 def test_query_count(self):
@@ -64,7 +63,6 @@ class TestSprintIndex(BrowserTestCase):
6463
6564
66class TestSprintDeleteView(BrowserTestCase):65class TestSprintDeleteView(BrowserTestCase):
67
68 layer = DatabaseFunctionalLayer66 layer = DatabaseFunctionalLayer
6967
70 def makePopulatedSprint(self):68 def makePopulatedSprint(self):
diff --git a/lib/lp/blueprints/browser/tests/test_views.py b/lib/lp/blueprints/browser/tests/test_views.py
index 1e2c49e..5acb18d 100644
--- a/lib/lp/blueprints/browser/tests/test_views.py
+++ b/lib/lp/blueprints/browser/tests/test_views.py
@@ -25,7 +25,6 @@ from lp.testing.systemdocs import LayeredDocFileSuite, setUp, tearDown
2525
2626
27class TestAssignments(TestCaseWithFactory):27class TestAssignments(TestCaseWithFactory):
28
29 layer = DatabaseFunctionalLayer28 layer = DatabaseFunctionalLayer
3029
31 def setUp(self):30 def setUp(self):
diff --git a/lib/lp/blueprints/interfaces/specification.py b/lib/lp/blueprints/interfaces/specification.py
index b47f64d..6615407 100644
--- a/lib/lp/blueprints/interfaces/specification.py
+++ b/lib/lp/blueprints/interfaces/specification.py
@@ -83,7 +83,6 @@ class GoalProposeError(Exception):
8383
8484
85class SpecNameField(ContentNameField):85class SpecNameField(ContentNameField):
86
87 errormessage = _("%s is already in use by another blueprint.")86 errormessage = _("%s is already in use by another blueprint.")
8887
89 @property88 @property
@@ -126,7 +125,6 @@ class SpecNameField(ContentNameField):
126125
127126
128class SpecURLField(TextLine):127class SpecURLField(TextLine):
129
130 errormessage = _('%s is already registered by <a href="%s">%s</a>.')128 errormessage = _('%s is already registered by <a href="%s">%s</a>.')
131129
132 def _validate(self, specurl):130 def _validate(self, specurl):
diff --git a/lib/lp/blueprints/interfaces/sprint.py b/lib/lp/blueprints/interfaces/sprint.py
index 9809925..e9a52d4 100644
--- a/lib/lp/blueprints/interfaces/sprint.py
+++ b/lib/lp/blueprints/interfaces/sprint.py
@@ -32,7 +32,6 @@ from lp.services.fields import (
3232
3333
34class SprintNameField(ContentNameField):34class SprintNameField(ContentNameField):
35
36 errormessage = _("%s is already in use by another sprint.")35 errormessage = _("%s is already in use by another sprint.")
3736
38 @property37 @property
diff --git a/lib/lp/blueprints/model/specificationworkitem.py b/lib/lp/blueprints/model/specificationworkitem.py
index a7e5ec1..79f9316 100644
--- a/lib/lp/blueprints/model/specificationworkitem.py
+++ b/lib/lp/blueprints/model/specificationworkitem.py
@@ -24,7 +24,6 @@ from lp.services.helpers import backslashreplace
2424
25@implementer(ISpecificationWorkItem)25@implementer(ISpecificationWorkItem)
26class SpecificationWorkItem(StormBase):26class SpecificationWorkItem(StormBase):
27
28 __storm_table__ = "SpecificationWorkItem"27 __storm_table__ = "SpecificationWorkItem"
29 __storm_order__ = "id"28 __storm_order__ = "id"
3029
diff --git a/lib/lp/blueprints/model/tests/test_specification.py b/lib/lp/blueprints/model/tests/test_specification.py
index 79f6b5c..f361df4 100644
--- a/lib/lp/blueprints/model/tests/test_specification.py
+++ b/lib/lp/blueprints/model/tests/test_specification.py
@@ -151,7 +151,6 @@ class TestSpecificationDependencies(TestCaseWithFactory):
151151
152152
153class TestSpecificationSubscriptionSort(TestCaseWithFactory):153class TestSpecificationSubscriptionSort(TestCaseWithFactory):
154
155 layer = DatabaseFunctionalLayer154 layer = DatabaseFunctionalLayer
156155
157 def test_subscribers(self):156 def test_subscribers(self):
@@ -174,7 +173,6 @@ class TestSpecificationSubscriptionSort(TestCaseWithFactory):
174173
175174
176class TestSpecificationValidation(TestCaseWithFactory):175class TestSpecificationValidation(TestCaseWithFactory):
177
178 layer = DatabaseFunctionalLayer176 layer = DatabaseFunctionalLayer
179177
180 def test_specurl_validation_duplicate(self):178 def test_specurl_validation_duplicate(self):
@@ -746,7 +744,6 @@ class TestSpecificationWorkItems(TestCaseWithFactory):
746744
747745
748class TestSpecificationInformationType(TestCaseWithFactory):746class TestSpecificationInformationType(TestCaseWithFactory):
749
750 layer = DatabaseFunctionalLayer747 layer = DatabaseFunctionalLayer
751748
752 def test_transitionToInformationType(self):749 def test_transitionToInformationType(self):
diff --git a/lib/lp/blueprints/model/tests/test_sprint.py b/lib/lp/blueprints/model/tests/test_sprint.py
index 7fdbcc9..5c5ba93 100644
--- a/lib/lp/blueprints/model/tests/test_sprint.py
+++ b/lib/lp/blueprints/model/tests/test_sprint.py
@@ -27,7 +27,6 @@ def list_result(sprint, filter=None, user=None):
2727
2828
29class TestSpecifications(TestCaseWithFactory):29class TestSpecifications(TestCaseWithFactory):
30
31 layer = DatabaseFunctionalLayer30 layer = DatabaseFunctionalLayer
3231
33 def setUp(self):32 def setUp(self):
@@ -246,7 +245,6 @@ class TestSpecifications(TestCaseWithFactory):
246245
247246
248class TestSprintAttendancesSort(TestCaseWithFactory):247class TestSprintAttendancesSort(TestCaseWithFactory):
249
250 layer = DatabaseFunctionalLayer248 layer = DatabaseFunctionalLayer
251249
252 def test_attendances(self):250 def test_attendances(self):
diff --git a/lib/lp/blueprints/publisher.py b/lib/lp/blueprints/publisher.py
index a138910..0f56d5b 100644
--- a/lib/lp/blueprints/publisher.py
+++ b/lib/lp/blueprints/publisher.py
@@ -24,7 +24,6 @@ from lp.services.webapp.servers import (
2424
25@implementer(IFacet)25@implementer(IFacet)
26class SpecificationsFacet:26class SpecificationsFacet:
27
28 name = "specifications"27 name = "specifications"
29 rootsite = "blueprints"28 rootsite = "blueprints"
30 text = "Blueprints"29 text = "Blueprints"
diff --git a/lib/lp/blueprints/security.py b/lib/lp/blueprints/security.py
index a310438..76217f4 100644
--- a/lib/lp/blueprints/security.py
+++ b/lib/lp/blueprints/security.py
@@ -26,7 +26,6 @@ from lp.security import ModerateByRegistryExpertsOrAdmins
2626
2727
28class EditSpecificationBranch(AuthorizationBase):28class EditSpecificationBranch(AuthorizationBase):
29
30 usedfor = ISpecificationBranch29 usedfor = ISpecificationBranch
31 permission = "launchpad.Edit"30 permission = "launchpad.Edit"
3231
@@ -39,7 +38,6 @@ class EditSpecificationBranch(AuthorizationBase):
3938
4039
41class ViewSpecificationBranch(EditSpecificationBranch):40class ViewSpecificationBranch(EditSpecificationBranch):
42
43 permission = "launchpad.View"41 permission = "launchpad.View"
4442
45 def checkUnauthenticated(self):43 def checkUnauthenticated(self):
@@ -62,7 +60,6 @@ class AnonymousAccessToISpecificationPublic(AnonymousAuthorization):
6260
6361
64class ViewSpecification(AuthorizationBase):62class ViewSpecification(AuthorizationBase):
65
66 permission = "launchpad.LimitedView"63 permission = "launchpad.LimitedView"
67 usedfor = ISpecificationView64 usedfor = ISpecificationView
6865
diff --git a/lib/lp/blueprints/tests/test_hasspecifications.py b/lib/lp/blueprints/tests/test_hasspecifications.py
index 7082cd5..bd735d6 100644
--- a/lib/lp/blueprints/tests/test_hasspecifications.py
+++ b/lib/lp/blueprints/tests/test_hasspecifications.py
@@ -11,7 +11,6 @@ from lp.testing.matchers import DoesNotSnapshot
1111
1212
13class HasSpecificationsTests(TestCaseWithFactory):13class HasSpecificationsTests(TestCaseWithFactory):
14
15 layer = DatabaseFunctionalLayer14 layer = DatabaseFunctionalLayer
1615
17 def assertNamesOfSpecificationsAre(self, expected_names, specifications):16 def assertNamesOfSpecificationsAre(self, expected_names, specifications):
diff --git a/lib/lp/blueprints/tests/test_specification.py b/lib/lp/blueprints/tests/test_specification.py
index 2778005..728bcf5 100644
--- a/lib/lp/blueprints/tests/test_specification.py
+++ b/lib/lp/blueprints/tests/test_specification.py
@@ -52,7 +52,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
5252
5353
54class SpecificationTests(TestCaseWithFactory):54class SpecificationTests(TestCaseWithFactory):
55
56 layer = DatabaseFunctionalLayer55 layer = DatabaseFunctionalLayer
5756
58 def test_target_driver_has_edit_rights(self):57 def test_target_driver_has_edit_rights(self):
@@ -721,7 +720,6 @@ class SpecificationTests(TestCaseWithFactory):
721720
722721
723class TestSpecificationSet(TestCaseWithFactory):722class TestSpecificationSet(TestCaseWithFactory):
724
725 layer = DatabaseFunctionalLayer723 layer = DatabaseFunctionalLayer
726724
727 def setUp(self):725 def setUp(self):
@@ -776,7 +774,6 @@ def list_result(context, filter=None, user=None):
776774
777775
778class TestSpecifications(TestCaseWithFactory):776class TestSpecifications(TestCaseWithFactory):
779
780 layer = DatabaseFunctionalLayer777 layer = DatabaseFunctionalLayer
781778
782 def setUp(self):779 def setUp(self):
@@ -1055,7 +1052,6 @@ class TestSpecifications(TestCaseWithFactory):
10551052
10561053
1057class TestBugLinks(TestCaseWithFactory):1054class TestBugLinks(TestCaseWithFactory):
1058
1059 layer = DatabaseFunctionalLayer1055 layer = DatabaseFunctionalLayer
10601056
1061 def test_link_and_unlink(self):1057 def test_link_and_unlink(self):
diff --git a/lib/lp/blueprints/tests/test_webservice.py b/lib/lp/blueprints/tests/test_webservice.py
index f0f1ae1..c7ffd6f 100644
--- a/lib/lp/blueprints/tests/test_webservice.py
+++ b/lib/lp/blueprints/tests/test_webservice.py
@@ -350,7 +350,6 @@ class SpecificationAttributeWebserviceTests(TestCaseWithFactory):
350350
351351
352class SpecificationMutationTests(TestCaseWithFactory):352class SpecificationMutationTests(TestCaseWithFactory):
353
354 layer = DatabaseFunctionalLayer353 layer = DatabaseFunctionalLayer
355354
356 def test_set_information_type(self):355 def test_set_information_type(self):
@@ -569,7 +568,6 @@ class IHasSpecificationsTests(TestCaseWithFactory):
569568
570569
571class TestSpecificationSubscription(TestCaseWithFactory):570class TestSpecificationSubscription(TestCaseWithFactory):
572
573 layer = DatabaseFunctionalLayer571 layer = DatabaseFunctionalLayer
574572
575 def test_subscribe(self):573 def test_subscribe(self):
@@ -636,7 +634,6 @@ class TestSpecificationSubscription(TestCaseWithFactory):
636634
637635
638class TestSpecificationBugLinks(TestCaseWithFactory):636class TestSpecificationBugLinks(TestCaseWithFactory):
639
640 layer = DatabaseFunctionalLayer637 layer = DatabaseFunctionalLayer
641638
642 def test_bug_linking(self):639 def test_bug_linking(self):
@@ -713,7 +710,6 @@ class TestSpecificationBugLinks(TestCaseWithFactory):
713710
714711
715class TestSpecificationGoalHandling(TestCaseWithFactory):712class TestSpecificationGoalHandling(TestCaseWithFactory):
716
717 layer = DatabaseFunctionalLayer713 layer = DatabaseFunctionalLayer
718714
719 def setUp(self):715 def setUp(self):
diff --git a/lib/lp/bugs/adapters/tests/test_bugchange.py b/lib/lp/bugs/adapters/tests/test_bugchange.py
index 6a8c3b9..0e8515a 100644
--- a/lib/lp/bugs/adapters/tests/test_bugchange.py
+++ b/lib/lp/bugs/adapters/tests/test_bugchange.py
@@ -19,7 +19,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
1919
2020
21class BugChangeTestCase(TestCaseWithFactory):21class BugChangeTestCase(TestCaseWithFactory):
22
23 layer = ZopelessDatabaseLayer22 layer = ZopelessDatabaseLayer
2423
25 def setUp(self):24 def setUp(self):
@@ -42,7 +41,6 @@ class BugChangeTestCase(TestCaseWithFactory):
4241
4342
44class BugChangeLevelTestCase(TestCaseWithFactory):43class BugChangeLevelTestCase(TestCaseWithFactory):
45
46 layer = ZopelessDatabaseLayer44 layer = ZopelessDatabaseLayer
4745
48 def setUp(self):46 def setUp(self):
diff --git a/lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py b/lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py
index b17527f..80aaf13 100644
--- a/lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py
+++ b/lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py
@@ -14,7 +14,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1414
1515
16class BugSubscriptionFilterTestCase(TestCaseWithFactory):16class BugSubscriptionFilterTestCase(TestCaseWithFactory):
17
18 layer = DatabaseFunctionalLayer17 layer = DatabaseFunctionalLayer
1918
20 def test_bugsubscriptionfilter_to_product_with_product(self):19 def test_bugsubscriptionfilter_to_product_with_product(self):
diff --git a/lib/lp/bugs/browser/bug.py b/lib/lp/bugs/browser/bug.py
index 717f39c..3a34c23 100644
--- a/lib/lp/bugs/browser/bug.py
+++ b/lib/lp/bugs/browser/bug.py
@@ -631,7 +631,6 @@ class BugView(LaunchpadView, BugViewMixin):
631631
632632
633class BugActivity(BugView):633class BugActivity(BugView):
634
635 page_title = "Activity log"634 page_title = "Activity log"
636635
637 @cachedproperty636 @cachedproperty
@@ -1186,7 +1185,6 @@ class BugTextView(LaunchpadView):
1186 ]1185 ]
11871186
1188 def bug_text(self):1187 def bug_text(self):
1189
1190 """Return the bug information for text display."""1188 """Return the bug information for text display."""
1191 bug = self.context1189 bug = self.context
11921190
diff --git a/lib/lp/bugs/browser/bugalsoaffects.py b/lib/lp/bugs/browser/bugalsoaffects.py
index 642dd90..3558dc4 100644
--- a/lib/lp/bugs/browser/bugalsoaffects.py
+++ b/lib/lp/bugs/browser/bugalsoaffects.py
@@ -344,7 +344,6 @@ class BugTaskCreationStep(AlsoAffectsStep):
344344
345345
346class IAddDistroBugTaskForm(IAddBugTaskForm):346class IAddDistroBugTaskForm(IAddBugTaskForm):
347
348 sourcepackagename = Choice(347 sourcepackagename = Choice(
349 title=_("Source Package Name"),348 title=_("Source Package Name"),
350 required=False,349 required=False,
@@ -777,7 +776,6 @@ class BugTrackerCreationStep(AlsoAffectsStep):
777776
778777
779class DistroBugTrackerCreationStep(BugTrackerCreationStep):778class DistroBugTrackerCreationStep(BugTrackerCreationStep):
780
781 _next_step = DistroBugTaskCreationStep779 _next_step = DistroBugTaskCreationStep
782 _field_names = ["distribution", "sourcepackagename", "bug_url"]780 _field_names = ["distribution", "sourcepackagename", "bug_url"]
783 custom_widget_distribution = CustomWidgetFactory(781 custom_widget_distribution = CustomWidgetFactory(
@@ -793,7 +791,6 @@ class DistroBugTrackerCreationStep(BugTrackerCreationStep):
793791
794792
795class UpstreamBugTrackerCreationStep(BugTrackerCreationStep):793class UpstreamBugTrackerCreationStep(BugTrackerCreationStep):
796
797 schema = IAddBugTaskWithUpstreamLinkForm794 schema = IAddBugTaskWithUpstreamLinkForm
798 _next_step = ProductBugTaskCreationStep795 _next_step = ProductBugTaskCreationStep
799 _field_names = ["product", "bug_url", "link_upstream_how"]796 _field_names = ["product", "bug_url", "link_upstream_how"]
diff --git a/lib/lp/bugs/browser/bugattachment.py b/lib/lp/bugs/browser/bugattachment.py
index 0588b51..65d782b 100644
--- a/lib/lp/bugs/browser/bugattachment.py
+++ b/lib/lp/bugs/browser/bugattachment.py
@@ -70,7 +70,6 @@ class BugAttachmentContentCheck:
7070
7171
72class BugAttachmentSetNavigation(GetitemNavigation):72class BugAttachmentSetNavigation(GetitemNavigation):
73
74 usedfor = IBugAttachmentSet73 usedfor = IBugAttachmentSet
7574
7675
diff --git a/lib/lp/bugs/browser/bugmessage.py b/lib/lp/bugs/browser/bugmessage.py
index 45761fc..4f61fb6 100644
--- a/lib/lp/bugs/browser/bugmessage.py
+++ b/lib/lp/bugs/browser/bugmessage.py
@@ -53,7 +53,6 @@ class BugMessageAddFormView(LaunchpadFormView, BugAttachmentContentCheck):
53 return "%s/+addcomment" % canonical_url(self.context)53 return "%s/+addcomment" % canonical_url(self.context)
5454
55 def validate(self, data):55 def validate(self, data):
56
57 # Ensure either a comment or filecontent or a URL was provided,56 # Ensure either a comment or filecontent or a URL was provided,
58 # but only if no errors have already been noted.57 # but only if no errors have already been noted.
59 if len(self.errors) == 0:58 if len(self.errors) == 0:
@@ -113,7 +112,6 @@ class BugMessageAddFormView(LaunchpadFormView, BugAttachmentContentCheck):
113 attachment_description = data.get("attachment_description")112 attachment_description = data.get("attachment_description")
114113
115 if file_:114 if file_:
116
117 # Slashes in filenames cause problems, convert them to dashes115 # Slashes in filenames cause problems, convert them to dashes
118 # instead.116 # instead.
119 filename = file_.filename.replace("/", "-")117 filename = file_.filename.replace("/", "-")
diff --git a/lib/lp/bugs/browser/bugnomination.py b/lib/lp/bugs/browser/bugnomination.py
index cf6c816..22d8941 100644
--- a/lib/lp/bugs/browser/bugnomination.py
+++ b/lib/lp/bugs/browser/bugnomination.py
@@ -28,7 +28,6 @@ from lp.services.webapp.interfaces import ILaunchBag
2828
2929
30class BugNominationView(LaunchpadFormView):30class BugNominationView(LaunchpadFormView):
31
32 schema = IBugNominationForm31 schema = IBugNominationForm
33 initial_focus_widget = None32 initial_focus_widget = None
34 custom_widget_nominatable_series = LabeledMultiCheckBoxWidget33 custom_widget_nominatable_series = LabeledMultiCheckBoxWidget
diff --git a/lib/lp/bugs/browser/bugtarget.py b/lib/lp/bugs/browser/bugtarget.py
index c706156..6e4b6f8 100644
--- a/lib/lp/bugs/browser/bugtarget.py
+++ b/lib/lp/bugs/browser/bugtarget.py
@@ -986,7 +986,6 @@ class FileBugAdvancedView(LaunchpadView):
986986
987987
988class IDistroBugAddForm(IBugAddForm):988class IDistroBugAddForm(IBugAddForm):
989
990 packagename = copy_field(989 packagename = copy_field(
991 IBugAddForm["packagename"], vocabularyName="DistributionSourcePackage"990 IBugAddForm["packagename"], vocabularyName="DistributionSourcePackage"
992 )991 )
@@ -1076,7 +1075,6 @@ class FilebugShowSimilarBugsView(FileBugViewBase):
10761075
10771076
1078class FileBugGuidedView(FilebugShowSimilarBugsView):1077class FileBugGuidedView(FilebugShowSimilarBugsView):
1079
1080 page_title = "Report a bug"1078 page_title = "Report a bug"
10811079
1082 _SEARCH_FOR_DUPES = ViewPageTemplateFile(1080 _SEARCH_FOR_DUPES = ViewPageTemplateFile(
diff --git a/lib/lp/bugs/browser/bugtask.py b/lib/lp/bugs/browser/bugtask.py
index f30dea5..ad3a7a2 100644
--- a/lib/lp/bugs/browser/bugtask.py
+++ b/lib/lp/bugs/browser/bugtask.py
@@ -1158,7 +1158,6 @@ class BugTaskPrivilegeMixin:
11581158
11591159
1160class IBugTaskEditForm(IBugTask):1160class IBugTaskEditForm(IBugTask):
1161
1162 sourcepackagename = copy_field(1161 sourcepackagename = copy_field(
1163 IBugTask["sourcepackagename"],1162 IBugTask["sourcepackagename"],
1164 vocabularyName="DistributionSourcePackage",1163 vocabularyName="DistributionSourcePackage",
diff --git a/lib/lp/bugs/browser/bugtracker.py b/lib/lp/bugs/browser/bugtracker.py
index 0c02abc..07389e1 100644
--- a/lib/lp/bugs/browser/bugtracker.py
+++ b/lib/lp/bugs/browser/bugtracker.py
@@ -84,12 +84,10 @@ NO_DIRECT_CREATION_TRACKERS = SINGLE_INSTANCE_TRACKERS + (
8484
8585
86class BugTrackerSetNavigation(GetitemNavigation):86class BugTrackerSetNavigation(GetitemNavigation):
87
88 usedfor = IBugTrackerSet87 usedfor = IBugTrackerSet
8988
9089
91class BugTrackerSetContextMenu(ContextMenu):90class BugTrackerSetContextMenu(ContextMenu):
92
93 usedfor = IBugTrackerSet91 usedfor = IBugTrackerSet
9492
95 links = ["newbugtracker"]93 links = ["newbugtracker"]
@@ -100,7 +98,6 @@ class BugTrackerSetContextMenu(ContextMenu):
10098
10199
102class BugTrackerAddView(LaunchpadFormView):100class BugTrackerAddView(LaunchpadFormView):
103
104 page_title = "Register an external bug tracker"101 page_title = "Register an external bug tracker"
105 schema = IBugTracker102 schema = IBugTracker
106 label = page_title103 label = page_title
@@ -216,7 +213,6 @@ class BugTrackerSetView(LaunchpadView):
216213
217214
218class BugTrackerView(LaunchpadView):215class BugTrackerView(LaunchpadView):
219
220 usedfor = IBugTracker216 usedfor = IBugTracker
221217
222 @property218 @property
@@ -250,7 +246,6 @@ BUG_TRACKER_ACTIVE_VOCABULARY = SimpleVocabulary.fromItems(
250246
251247
252class BugTrackerEditView(LaunchpadEditFormView):248class BugTrackerEditView(LaunchpadEditFormView):
253
254 schema = IBugTracker249 schema = IBugTracker
255 custom_widget_summary = CustomWidgetFactory(250 custom_widget_summary = CustomWidgetFactory(
256 TextAreaWidget, width=30, height=5251 TextAreaWidget, width=30, height=5
@@ -469,7 +464,6 @@ class BugTrackerEditView(LaunchpadEditFormView):
469464
470465
471class BugTrackerNavigation(Navigation):466class BugTrackerNavigation(Navigation):
472
473 usedfor = IBugTracker467 usedfor = IBugTracker
474468
475 def traverse(self, remotebug):469 def traverse(self, remotebug):
@@ -578,7 +572,6 @@ class BugTrackerEditComponentView(LaunchpadEditFormView):
578572
579573
580class BugTrackerComponentGroupNavigation(Navigation):574class BugTrackerComponentGroupNavigation(Navigation):
581
582 usedfor = IBugTrackerComponentGroup575 usedfor = IBugTrackerComponentGroup
583576
584 def traverse(self, id):577 def traverse(self, id):
@@ -618,7 +611,6 @@ class RemoteBugView(LaunchpadView):
618611
619612
620class BugTrackerNavigationMenu(NavigationMenu):613class BugTrackerNavigationMenu(NavigationMenu):
621
622 usedfor = BugTrackerView614 usedfor = BugTrackerView
623 facet = "bugs"615 facet = "bugs"
624 links = ["edit"]616 links = ["edit"]
diff --git a/lib/lp/bugs/browser/bugwatch.py b/lib/lp/bugs/browser/bugwatch.py
index 70ba5eb..d1d51bd 100644
--- a/lib/lp/bugs/browser/bugwatch.py
+++ b/lib/lp/bugs/browser/bugwatch.py
@@ -33,7 +33,6 @@ from lp.services.webapp.interfaces import ILaunchBag
3333
3434
35class BugWatchSetNavigation(GetitemNavigation):35class BugWatchSetNavigation(GetitemNavigation):
36
37 usedfor = IBugWatchSet36 usedfor = IBugWatchSet
3837
3938
diff --git a/lib/lp/bugs/browser/cve.py b/lib/lp/bugs/browser/cve.py
index 1067612..5f42ed7 100644
--- a/lib/lp/bugs/browser/cve.py
+++ b/lib/lp/bugs/browser/cve.py
@@ -30,12 +30,10 @@ from lp.services.webapp.batching import BatchNavigator
3030
3131
32class CveSetNavigation(GetitemNavigation):32class CveSetNavigation(GetitemNavigation):
33
34 usedfor = ICveSet33 usedfor = ICveSet
3534
3635
37class CveContextMenu(ContextMenu):36class CveContextMenu(ContextMenu):
38
39 usedfor = ICve37 usedfor = ICve
40 links = ["linkbug", "unlinkbug"]38 links = ["linkbug", "unlinkbug"]
4139
@@ -50,7 +48,6 @@ class CveContextMenu(ContextMenu):
5048
5149
52class CveSetContextMenu(ContextMenu):50class CveSetContextMenu(ContextMenu):
53
54 usedfor = ICveSet51 usedfor = ICveSet
55 links = ["findcve", "allcve"]52 links = ["findcve", "allcve"]
5653
diff --git a/lib/lp/bugs/browser/cvereport.py b/lib/lp/bugs/browser/cvereport.py
index e2f2f7d..2c5ae2d 100644
--- a/lib/lp/bugs/browser/cvereport.py
+++ b/lib/lp/bugs/browser/cvereport.py
@@ -84,7 +84,6 @@ class CVEReportView(LaunchpadView):
8484
85 @cachedproperty85 @cachedproperty
86 def _bugtaskcves(self) -> BugTaskCves:86 def _bugtaskcves(self) -> BugTaskCves:
87
88 bugtaskcves = BugTaskCves(open=[], resolved=[])87 bugtaskcves = BugTaskCves(open=[], resolved=[])
8988
90 search_params = BugTaskSearchParams(self.user, has_cve=True)89 search_params = BugTaskSearchParams(self.user, has_cve=True)
diff --git a/lib/lp/bugs/browser/malone.py b/lib/lp/bugs/browser/malone.py
index ff178e8..6b72df5 100644
--- a/lib/lp/bugs/browser/malone.py
+++ b/lib/lp/bugs/browser/malone.py
@@ -25,7 +25,6 @@ from lp.services.webapp.menu import NavigationMenu
2525
2626
27class MaloneApplicationNavigation(Navigation):27class MaloneApplicationNavigation(Navigation):
28
29 usedfor = IMaloneApplication28 usedfor = IMaloneApplication
3029
31 newlayer = BugsLayer30 newlayer = BugsLayer
@@ -66,7 +65,6 @@ class MaloneApplicationNavigation(Navigation):
6665
6766
68class MaloneRelatedPages(NavigationMenu):67class MaloneRelatedPages(NavigationMenu):
69
70 facet = "bugs"68 facet = "bugs"
71 title = "Related pages"69 title = "Related pages"
72 usedfor = MaloneView70 usedfor = MaloneView
diff --git a/lib/lp/bugs/browser/person.py b/lib/lp/bugs/browser/person.py
index 3182f60..cb004b8 100644
--- a/lib/lp/bugs/browser/person.py
+++ b/lib/lp/bugs/browser/person.py
@@ -63,7 +63,6 @@ def get_package_search_url(dsp_bugs_url, extra_params=None):
6363
6464
65class PersonBugsMenu(NavigationMenu):65class PersonBugsMenu(NavigationMenu):
66
67 usedfor = IPerson66 usedfor = IPerson
68 facet = "bugs"67 facet = "bugs"
69 links = [68 links = [
@@ -159,7 +158,6 @@ class RelevantMilestonesMixin:
159158
160159
161class BugSubscriberPackageBugsOverView(LaunchpadView):160class BugSubscriberPackageBugsOverView(LaunchpadView):
162
163 label = "Subscribed packages"161 label = "Subscribed packages"
164162
165 @cachedproperty163 @cachedproperty
diff --git a/lib/lp/bugs/browser/structuralsubscription.py b/lib/lp/bugs/browser/structuralsubscription.py
index ddfa4d5..95e5145 100644
--- a/lib/lp/bugs/browser/structuralsubscription.py
+++ b/lib/lp/bugs/browser/structuralsubscription.py
@@ -54,7 +54,6 @@ from lp.services.webapp.publisher import (
5454
5555
56class StructuralSubscriptionNavigation(Navigation):56class StructuralSubscriptionNavigation(Navigation):
57
58 usedfor = IStructuralSubscription57 usedfor = IStructuralSubscription
5958
60 @stepthrough("+filter")59 @stepthrough("+filter")
diff --git a/lib/lp/bugs/browser/tests/test_bug_context_menu.py b/lib/lp/bugs/browser/tests/test_bug_context_menu.py
index 2b2472d..d3a1dea 100644
--- a/lib/lp/bugs/browser/tests/test_bug_context_menu.py
+++ b/lib/lp/bugs/browser/tests/test_bug_context_menu.py
@@ -16,7 +16,6 @@ from lp.testing.views import create_initialized_view
1616
1717
18class TestBugContextMenu(TestCaseWithFactory):18class TestBugContextMenu(TestCaseWithFactory):
19
20 layer = DatabaseFunctionalLayer19 layer = DatabaseFunctionalLayer
2120
22 def setUp(self):21 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bug_views.py b/lib/lp/bugs/browser/tests/test_bug_views.py
index 213887a..b4373ae 100644
--- a/lib/lp/bugs/browser/tests/test_bug_views.py
+++ b/lib/lp/bugs/browser/tests/test_bug_views.py
@@ -43,7 +43,6 @@ from lp.testing.views import create_initialized_view, create_view
4343
4444
45class TestPrivateBugLinks(BrowserTestCase):45class TestPrivateBugLinks(BrowserTestCase):
46
47 layer = DatabaseFunctionalLayer46 layer = DatabaseFunctionalLayer
4847
49 def test_private_master_not_linked_without_permission(self):48 def test_private_master_not_linked_without_permission(self):
@@ -227,7 +226,6 @@ class TestEmailObfuscated(BrowserTestCase):
227226
228227
229class TestBugPortletSubscribers(TestCaseWithFactory):228class TestBugPortletSubscribers(TestCaseWithFactory):
230
231 layer = DatabaseFunctionalLayer229 layer = DatabaseFunctionalLayer
232230
233 def setUp(self):231 def setUp(self):
@@ -956,7 +954,6 @@ class TestBugMarkAsDuplicateView(TestCaseWithFactory):
956954
957955
958class TestBugActivityView(TestCaseWithFactory):956class TestBugActivityView(TestCaseWithFactory):
959
960 layer = LaunchpadFunctionalLayer957 layer = LaunchpadFunctionalLayer
961958
962 def test_bug_activity_query_count(self):959 def test_bug_activity_query_count(self):
@@ -986,7 +983,6 @@ class TestBugActivityView(TestCaseWithFactory):
986983
987984
988class TestMainBugView(BrowserTestCase):985class TestMainBugView(BrowserTestCase):
989
990 layer = DatabaseFunctionalLayer986 layer = DatabaseFunctionalLayer
991987
992 def setUp(self):988 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugalsoaffects.py b/lib/lp/bugs/browser/tests/test_bugalsoaffects.py
index d8c3f3a..0e49526 100644
--- a/lib/lp/bugs/browser/tests/test_bugalsoaffects.py
+++ b/lib/lp/bugs/browser/tests/test_bugalsoaffects.py
@@ -12,7 +12,6 @@ from lp.testing.pages import get_feedback_messages
1212
1313
14class TestBugAlsoAffectsDistribution(TestCaseWithFactory):14class TestBugAlsoAffectsDistribution(TestCaseWithFactory):
15
16 layer = DatabaseFunctionalLayer15 layer = DatabaseFunctionalLayer
1716
18 def setUp(self):17 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugcomment.py b/lib/lp/bugs/browser/tests/test_bugcomment.py
index 24d664c..35b7436 100644
--- a/lib/lp/bugs/browser/tests/test_bugcomment.py
+++ b/lib/lp/bugs/browser/tests/test_bugcomment.py
@@ -64,7 +64,6 @@ class BugCommentStub:
6464
6565
66class PersonStub:66class PersonStub:
67
68 ids = count(1)67 ids = count(1)
6968
70 def __init__(self):69 def __init__(self):
@@ -218,7 +217,6 @@ class TestGroupCommentsWithActivities(TestCase):
218217
219218
220class TestBugCommentVisibility(BrowserTestCase, TestMessageVisibilityMixin):219class TestBugCommentVisibility(BrowserTestCase, TestMessageVisibilityMixin):
221
222 layer = DatabaseFunctionalLayer220 layer = DatabaseFunctionalLayer
223221
224 def makeHiddenMessage(self, comment_owner=None):222 def makeHiddenMessage(self, comment_owner=None):
@@ -240,7 +238,6 @@ class TestBugCommentVisibility(BrowserTestCase, TestMessageVisibilityMixin):
240238
241239
242class TestBugHideCommentControls(BrowserTestCase, TestHideMessageControlMixin):240class TestBugHideCommentControls(BrowserTestCase, TestHideMessageControlMixin):
243
244 layer = DatabaseFunctionalLayer241 layer = DatabaseFunctionalLayer
245242
246 def getContext(self, comment_owner=None):243 def getContext(self, comment_owner=None):
@@ -283,7 +280,6 @@ class TestBugHideCommentControls(BrowserTestCase, TestHideMessageControlMixin):
283280
284281
285class TestBugCommentMicroformats(BrowserTestCase):282class TestBugCommentMicroformats(BrowserTestCase):
286
287 layer = DatabaseFunctionalLayer283 layer = DatabaseFunctionalLayer
288284
289 def test_bug_comment_metadata(self):285 def test_bug_comment_metadata(self):
@@ -307,7 +303,6 @@ class TestBugCommentMicroformats(BrowserTestCase):
307303
308304
309class TestBugCommentImplementsInterface(TestCaseWithFactory):305class TestBugCommentImplementsInterface(TestCaseWithFactory):
310
311 layer = DatabaseFunctionalLayer306 layer = DatabaseFunctionalLayer
312307
313 def test_bug_comment_implements_interface(self):308 def test_bug_comment_implements_interface(self):
@@ -346,7 +341,6 @@ def make_bug_comment(factory, *args, **kwargs):
346341
347342
348class TestBugCommentInBrowser(BrowserTestCase):343class TestBugCommentInBrowser(BrowserTestCase):
349
350 layer = DatabaseFunctionalLayer344 layer = DatabaseFunctionalLayer
351345
352 def test_excessive_comments_redirect_to_download(self):346 def test_excessive_comments_redirect_to_download(self):
diff --git a/lib/lp/bugs/browser/tests/test_buglisting.py b/lib/lp/bugs/browser/tests/test_buglisting.py
index 271dcf1..f11f586 100644
--- a/lib/lp/bugs/browser/tests/test_buglisting.py
+++ b/lib/lp/bugs/browser/tests/test_buglisting.py
@@ -27,7 +27,6 @@ from lp.testing.views import create_initialized_view, create_view
2727
2828
29class TestBugTaskSearchListingPage(BrowserTestCase):29class TestBugTaskSearchListingPage(BrowserTestCase):
30
31 layer = DatabaseFunctionalLayer30 layer = DatabaseFunctionalLayer
3231
33 def _makeDistributionSourcePackage(self):32 def _makeDistributionSourcePackage(self):
@@ -314,7 +313,6 @@ class BugTargetTestCase(TestCaseWithFactory):
314313
315314
316class TestBugTaskSearchListingViewProduct(BugTargetTestCase):315class TestBugTaskSearchListingViewProduct(BugTargetTestCase):
317
318 layer = DatabaseFunctionalLayer316 layer = DatabaseFunctionalLayer
319317
320 def test_external_bugtracker_is_none(self):318 def test_external_bugtracker_is_none(self):
@@ -409,7 +407,6 @@ class TestBugTaskSearchListingViewProduct(BugTargetTestCase):
409407
410408
411class TestBugTaskSearchListingViewDSP(BugTargetTestCase):409class TestBugTaskSearchListingViewDSP(BugTargetTestCase):
412
413 layer = DatabaseFunctionalLayer410 layer = DatabaseFunctionalLayer
414411
415 def _getBugTarget(self, obj):412 def _getBugTarget(self, obj):
diff --git a/lib/lp/bugs/browser/tests/test_bugnomination.py b/lib/lp/bugs/browser/tests/test_bugnomination.py
index 9732f71..b3b2eb6 100644
--- a/lib/lp/bugs/browser/tests/test_bugnomination.py
+++ b/lib/lp/bugs/browser/tests/test_bugnomination.py
@@ -174,7 +174,6 @@ class TestBugNominationView(TestCaseWithFactory):
174174
175175
176class TestBugEditLinks(TestCaseWithFactory):176class TestBugEditLinks(TestCaseWithFactory):
177
178 layer = DatabaseFunctionalLayer177 layer = DatabaseFunctionalLayer
179178
180 edit_link_matcher = soupmatchers.HTMLContains(179 edit_link_matcher = soupmatchers.HTMLContains(
diff --git a/lib/lp/bugs/browser/tests/test_bugsubscription_views.py b/lib/lp/bugs/browser/tests/test_bugsubscription_views.py
index 7f0fa3e..cb95564 100644
--- a/lib/lp/bugs/browser/tests/test_bugsubscription_views.py
+++ b/lib/lp/bugs/browser/tests/test_bugsubscription_views.py
@@ -37,7 +37,6 @@ from lp.testing.views import create_initialized_view
3737
3838
39class BugsubscriptionPrivacyTests(TestCaseWithFactory):39class BugsubscriptionPrivacyTests(TestCaseWithFactory):
40
41 layer = LaunchpadFunctionalLayer40 layer = LaunchpadFunctionalLayer
4241
43 def setUp(self):42 def setUp(self):
@@ -77,7 +76,6 @@ class BugsubscriptionPrivacyTests(TestCaseWithFactory):
7776
7877
79class BugSubscriptionAdvancedFeaturesTestCase(TestCaseWithFactory):78class BugSubscriptionAdvancedFeaturesTestCase(TestCaseWithFactory):
80
81 layer = LaunchpadFunctionalLayer79 layer = LaunchpadFunctionalLayer
8280
83 def setUp(self):81 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py b/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
index 090cae7..0a14d23 100644
--- a/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
+++ b/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
@@ -49,7 +49,6 @@ class TestBugSubscriptionFilterBase:
49class TestBugSubscriptionFilterNavigation(49class TestBugSubscriptionFilterNavigation(
50 TestBugSubscriptionFilterBase, TestCaseWithFactory50 TestBugSubscriptionFilterBase, TestCaseWithFactory
51):51):
52
53 layer = DatabaseFunctionalLayer52 layer = DatabaseFunctionalLayer
5453
55 def test_canonical_url(self):54 def test_canonical_url(self):
@@ -74,7 +73,6 @@ class TestBugSubscriptionFilterNavigation(
74class TestBugSubscriptionFilterAPI(73class TestBugSubscriptionFilterAPI(
75 TestBugSubscriptionFilterBase, TestCaseWithFactory74 TestBugSubscriptionFilterBase, TestCaseWithFactory
76):75):
77
78 layer = DatabaseFunctionalLayer76 layer = DatabaseFunctionalLayer
7977
80 def test_visible_attributes(self):78 def test_visible_attributes(self):
@@ -138,7 +136,6 @@ class TestBugSubscriptionFilterAPI(
138class TestBugSubscriptionFilterAPIModifications(136class TestBugSubscriptionFilterAPIModifications(
139 TestBugSubscriptionFilterBase, TestCaseWithFactory137 TestBugSubscriptionFilterBase, TestCaseWithFactory
140):138):
141
142 layer = DatabaseFunctionalLayer139 layer = DatabaseFunctionalLayer
143140
144 def setUp(self):141 def setUp(self):
@@ -246,7 +243,6 @@ class TestBugSubscriptionFilterAPIModifications(
246class TestBugSubscriptionFilterView(243class TestBugSubscriptionFilterView(
247 TestBugSubscriptionFilterBase, TestCaseWithFactory244 TestBugSubscriptionFilterBase, TestCaseWithFactory
248):245):
249
250 layer = DatabaseFunctionalLayer246 layer = DatabaseFunctionalLayer
251247
252 def setUp(self):248 def setUp(self):
@@ -473,7 +469,6 @@ class TestBugSubscriptionFilterView(
473class TestBugSubscriptionFilterEditView(469class TestBugSubscriptionFilterEditView(
474 TestBugSubscriptionFilterBase, TestCaseWithFactory470 TestBugSubscriptionFilterBase, TestCaseWithFactory
475):471):
476
477 layer = DatabaseFunctionalLayer472 layer = DatabaseFunctionalLayer
478473
479 def test_view_properties(self):474 def test_view_properties(self):
@@ -587,7 +582,6 @@ class TestBugSubscriptionFilterAdvancedFeatures(TestCaseWithFactory):
587582
588583
589class TestBugSubscriptionFilterCreateView(TestCaseWithFactory):584class TestBugSubscriptionFilterCreateView(TestCaseWithFactory):
590
591 layer = DatabaseFunctionalLayer585 layer = DatabaseFunctionalLayer
592586
593 def setUp(self):587 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugsupervisor.py b/lib/lp/bugs/browser/tests/test_bugsupervisor.py
index 0bc50cd..b6d5c57 100644
--- a/lib/lp/bugs/browser/tests/test_bugsupervisor.py
+++ b/lib/lp/bugs/browser/tests/test_bugsupervisor.py
@@ -16,7 +16,6 @@ from lp.testing.views import create_initialized_view
1616
1717
18class TestBugSupervisorEditView(TestCaseWithFactory):18class TestBugSupervisorEditView(TestCaseWithFactory):
19
20 layer = DatabaseFunctionalLayer19 layer = DatabaseFunctionalLayer
2120
22 def setUp(self):21 def setUp(self):
@@ -113,7 +112,6 @@ class TestBugSupervisorEditView(TestCaseWithFactory):
113112
114113
115class TestBugSupervisorLink(BrowserTestCase):114class TestBugSupervisorLink(BrowserTestCase):
116
117 layer = DatabaseFunctionalLayer115 layer = DatabaseFunctionalLayer
118116
119 def test_with_no_access(self):117 def test_with_no_access(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_configure.py b/lib/lp/bugs/browser/tests/test_bugtarget_configure.py
index 880853f..77d3dad 100644
--- a/lib/lp/bugs/browser/tests/test_bugtarget_configure.py
+++ b/lib/lp/bugs/browser/tests/test_bugtarget_configure.py
@@ -11,7 +11,6 @@ from lp.testing.views import create_initialized_view
1111
1212
13class TestProductBugConfigurationView(TestCaseWithFactory):13class TestProductBugConfigurationView(TestCaseWithFactory):
14
15 layer = DatabaseFunctionalLayer14 layer = DatabaseFunctionalLayer
1615
17 def setUp(self):16 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py b/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
index b101b86..0e1450d 100644
--- a/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
+++ b/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
@@ -41,7 +41,6 @@ from lp.testing.views import create_initialized_view, create_view
4141
4242
43class TestBugTargetFileBugConfirmationMessage(TestCaseWithFactory):43class TestBugTargetFileBugConfirmationMessage(TestCaseWithFactory):
44
45 layer = DatabaseFunctionalLayer44 layer = DatabaseFunctionalLayer
4645
47 def setUp(self):46 def setUp(self):
@@ -337,7 +336,6 @@ class FileBugViewMixin:
337336
338337
339class TestFileBugViewBase(FileBugViewMixin, TestCaseWithFactory):338class TestFileBugViewBase(FileBugViewMixin, TestCaseWithFactory):
340
341 layer = DatabaseFunctionalLayer339 layer = DatabaseFunctionalLayer
342340
343 def test_submit_comment_empty_error(self):341 def test_submit_comment_empty_error(self):
@@ -851,7 +849,6 @@ class FileBugViewBaseExtraDataTestCase(FileBugViewMixin, TestCaseWithFactory):
851849
852850
853class TestFileBugForNonBugSupervisors(TestCaseWithFactory):851class TestFileBugForNonBugSupervisors(TestCaseWithFactory):
854
855 layer = DatabaseFunctionalLayer852 layer = DatabaseFunctionalLayer
856853
857 def filebug_via_view(854 def filebug_via_view(
@@ -914,7 +911,6 @@ class TestFileBugForNonBugSupervisors(TestCaseWithFactory):
914911
915912
916class TestFileBugSourcePackage(WithScenarios, TestCaseWithFactory):913class TestFileBugSourcePackage(WithScenarios, TestCaseWithFactory):
917
918 layer = DatabaseFunctionalLayer914 layer = DatabaseFunctionalLayer
919915
920 scenarios = [916 scenarios = [
@@ -995,7 +991,6 @@ class TestFileBugSourcePackage(WithScenarios, TestCaseWithFactory):
995991
996992
997class ProjectGroupFileBugGuidedViewTestCase(TestCaseWithFactory):993class ProjectGroupFileBugGuidedViewTestCase(TestCaseWithFactory):
998
999 layer = DatabaseFunctionalLayer994 layer = DatabaseFunctionalLayer
1000995
1001 def makeProjectGroupFileBugView(self, product_name, bug_title, tags=""):996 def makeProjectGroupFileBugView(self, product_name, bug_title, tags=""):
diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py b/lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py
index ade633f..ca935ab 100644
--- a/lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py
+++ b/lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py
@@ -12,7 +12,6 @@ from lp.testing.layers import LaunchpadFunctionalLayer
1212
1313
14class TestBugTargetPatchCountBase(TestCaseWithFactory):14class TestBugTargetPatchCountBase(TestCaseWithFactory):
15
16 layer = LaunchpadFunctionalLayer15 layer = LaunchpadFunctionalLayer
1716
18 def setUp(self):17 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_tags.py b/lib/lp/bugs/browser/tests/test_bugtarget_tags.py
index eba3828..44a15ab 100644
--- a/lib/lp/bugs/browser/tests/test_bugtarget_tags.py
+++ b/lib/lp/bugs/browser/tests/test_bugtarget_tags.py
@@ -9,7 +9,6 @@ from lp.testing.views import create_view
99
1010
11class TestBugTargetTags(WithScenarios, TestCaseWithFactory):11class TestBugTargetTags(WithScenarios, TestCaseWithFactory):
12
13 layer = DatabaseFunctionalLayer12 layer = DatabaseFunctionalLayer
1413
15 scenarios = [14 scenarios = [
diff --git a/lib/lp/bugs/browser/tests/test_bugtask.py b/lib/lp/bugs/browser/tests/test_bugtask.py
index 3bfbb38..af11290 100644
--- a/lib/lp/bugs/browser/tests/test_bugtask.py
+++ b/lib/lp/bugs/browser/tests/test_bugtask.py
@@ -87,7 +87,6 @@ def getFeedViewCache(target, feed_cls):
8787
8888
89class TestBugTaskView(TestCaseWithFactory):89class TestBugTaskView(TestCaseWithFactory):
90
91 layer = LaunchpadFunctionalLayer90 layer = LaunchpadFunctionalLayer
9291
93 def test_rendered_query_counts_constant_with_team_memberships(self):92 def test_rendered_query_counts_constant_with_team_memberships(self):
@@ -366,7 +365,6 @@ class TestBugTaskView(TestCaseWithFactory):
366365
367366
368class TestBugTasksNominationsView(TestCaseWithFactory):367class TestBugTasksNominationsView(TestCaseWithFactory):
369
370 layer = DatabaseFunctionalLayer368 layer = DatabaseFunctionalLayer
371369
372 def setUp(self):370 def setUp(self):
@@ -627,7 +625,6 @@ class TestBugTasksNominationsView(TestCaseWithFactory):
627625
628626
629class TestBugTasksTableView(TestCaseWithFactory):627class TestBugTasksTableView(TestCaseWithFactory):
630
631 layer = DatabaseFunctionalLayer628 layer = DatabaseFunctionalLayer
632629
633 def setUp(self):630 def setUp(self):
@@ -1474,7 +1471,6 @@ class TestBugTaskEditViewStatusField(TestCaseWithFactory):
14741471
14751472
1476class TestBugTaskEditViewAssigneeField(TestCaseWithFactory):1473class TestBugTaskEditViewAssigneeField(TestCaseWithFactory):
1477
1478 layer = DatabaseFunctionalLayer1474 layer = DatabaseFunctionalLayer
14791475
1480 def setUp(self):1476 def setUp(self):
@@ -2098,7 +2094,6 @@ class TestProjectGroupBugs(TestCaseWithFactory, BugTaskViewTestMixin):
20982094
20992095
2100class TestBugActivityItem(TestCaseWithFactory):2096class TestBugActivityItem(TestCaseWithFactory):
2101
2102 layer = DatabaseFunctionalLayer2097 layer = DatabaseFunctionalLayer
21032098
2104 def setAttribute(self, obj, attribute, value):2099 def setAttribute(self, obj, attribute, value):
@@ -2521,7 +2516,6 @@ def make_bug_task_listing_item(
25212516
25222517
2523class TestBugTaskSearchListingView(BrowserTestCase):2518class TestBugTaskSearchListingView(BrowserTestCase):
2524
2525 layer = DatabaseFunctionalLayer2519 layer = DatabaseFunctionalLayer
25262520
2527 client_listing = soupmatchers.Tag(2521 client_listing = soupmatchers.Tag(
@@ -2995,7 +2989,6 @@ class TestBugTaskExpirableListingView(BrowserTestCase):
29952989
29962990
2997class TestBugListingBatchNavigator(TestCaseWithFactory):2991class TestBugListingBatchNavigator(TestCaseWithFactory):
2998
2999 layer = DatabaseFunctionalLayer2992 layer = DatabaseFunctionalLayer
30002993
3001 def test_mustache_listings_escaped(self):2994 def test_mustache_listings_escaped(self):
@@ -3006,7 +2999,6 @@ class TestBugListingBatchNavigator(TestCaseWithFactory):
30062999
30073000
3008class TestBugTaskListingItem(TestCaseWithFactory):3001class TestBugTaskListingItem(TestCaseWithFactory):
3009
3010 layer = DatabaseFunctionalLayer3002 layer = DatabaseFunctionalLayer
30113003
3012 def test_model(self):3004 def test_model(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugtask_adding.py b/lib/lp/bugs/browser/tests/test_bugtask_adding.py
index 3e9f147..414d393 100644
--- a/lib/lp/bugs/browser/tests/test_bugtask_adding.py
+++ b/lib/lp/bugs/browser/tests/test_bugtask_adding.py
@@ -11,7 +11,6 @@ from lp.testing.views import create_initialized_view
1111
1212
13class TestProductBugTaskCreationStep(TestCaseWithFactory):13class TestProductBugTaskCreationStep(TestCaseWithFactory):
14
15 layer = DatabaseFunctionalLayer14 layer = DatabaseFunctionalLayer
1615
17 def setUp(self):16 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugtask_navigation.py b/lib/lp/bugs/browser/tests/test_bugtask_navigation.py
index a3ce126..356f05d 100644
--- a/lib/lp/bugs/browser/tests/test_bugtask_navigation.py
+++ b/lib/lp/bugs/browser/tests/test_bugtask_navigation.py
@@ -13,7 +13,6 @@ from lp.testing.publication import test_traverse
1313
1414
15class TestBugTaskTraversal(TestCaseWithFactory):15class TestBugTaskTraversal(TestCaseWithFactory):
16
17 layer = DatabaseFunctionalLayer16 layer = DatabaseFunctionalLayer
1817
19 def test_traversal_to_nonexistent_bugtask(self):18 def test_traversal_to_nonexistent_bugtask(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugtracker_component.py b/lib/lp/bugs/browser/tests/test_bugtracker_component.py
index 8b6e9a2..c3d2bb9 100644
--- a/lib/lp/bugs/browser/tests/test_bugtracker_component.py
+++ b/lib/lp/bugs/browser/tests/test_bugtracker_component.py
@@ -13,7 +13,6 @@ from lp.testing.views import create_initialized_view
1313
1414
15class BugTrackerEditComponentViewTextCase(TestCaseWithFactory):15class BugTrackerEditComponentViewTextCase(TestCaseWithFactory):
16
17 layer = DatabaseFunctionalLayer16 layer = DatabaseFunctionalLayer
1817
19 def setUp(self):18 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugtracker_views.py b/lib/lp/bugs/browser/tests/test_bugtracker_views.py
index 521d6fa..642191b 100644
--- a/lib/lp/bugs/browser/tests/test_bugtracker_views.py
+++ b/lib/lp/bugs/browser/tests/test_bugtracker_views.py
@@ -15,7 +15,6 @@ from lp.testing.views import create_initialized_view
1515
1616
17class TestBugTrackerView(TestCaseWithFactory):17class TestBugTrackerView(TestCaseWithFactory):
18
19 layer = DatabaseFunctionalLayer18 layer = DatabaseFunctionalLayer
2019
21 def test_related_projects(self):20 def test_related_projects(self):
@@ -53,7 +52,6 @@ class TestBugTrackerView(TestCaseWithFactory):
5352
5453
55class TestBugTrackerSetView(TestCaseWithFactory):54class TestBugTrackerSetView(TestCaseWithFactory):
56
57 layer = DatabaseFunctionalLayer55 layer = DatabaseFunctionalLayer
5856
59 def test_trackers_are_batch_navigators(self):57 def test_trackers_are_batch_navigators(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugview.py b/lib/lp/bugs/browser/tests/test_bugview.py
index 1124544..695b2f2 100644
--- a/lib/lp/bugs/browser/tests/test_bugview.py
+++ b/lib/lp/bugs/browser/tests/test_bugview.py
@@ -12,7 +12,6 @@ from lp.testing.layers import DatabaseFunctionalLayer, LaunchpadFunctionalLayer
1212
1313
14class TestBugView(TestCaseWithFactory):14class TestBugView(TestCaseWithFactory):
15
16 layer = LaunchpadFunctionalLayer15 layer = LaunchpadFunctionalLayer
1716
18 def setUp(self):17 def setUp(self):
@@ -57,7 +56,6 @@ class TestBugView(TestCaseWithFactory):
5756
5857
59class TestBugInformationTypePortletView(TestCaseWithFactory):58class TestBugInformationTypePortletView(TestCaseWithFactory):
60
61 layer = DatabaseFunctionalLayer59 layer = DatabaseFunctionalLayer
6260
63 def setUp(self):61 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_bugwatch_views.py b/lib/lp/bugs/browser/tests/test_bugwatch_views.py
index 47c0cc0..9e2f4f2 100644
--- a/lib/lp/bugs/browser/tests/test_bugwatch_views.py
+++ b/lib/lp/bugs/browser/tests/test_bugwatch_views.py
@@ -17,7 +17,6 @@ from lp.testing.views import create_initialized_view
1717
1818
19class TestBugWatchEditView(TestCaseWithFactory):19class TestBugWatchEditView(TestCaseWithFactory):
20
21 layer = LaunchpadFunctionalLayer20 layer = LaunchpadFunctionalLayer
2221
23 def setUp(self):22 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py b/lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py
index ab62e59..0f41faa 100644
--- a/lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py
+++ b/lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py
@@ -14,7 +14,6 @@ from lp.testing.views import create_initialized_view
1414
1515
16class TestConfigureBugTrackerBase(TestCaseWithFactory):16class TestConfigureBugTrackerBase(TestCaseWithFactory):
17
18 layer = LaunchpadFunctionalLayer17 layer = LaunchpadFunctionalLayer
1918
20 def setUp(self):19 def setUp(self):
diff --git a/lib/lp/bugs/browser/tests/test_expose.py b/lib/lp/bugs/browser/tests/test_expose.py
index c52ca47..c846754 100644
--- a/lib/lp/bugs/browser/tests/test_expose.py
+++ b/lib/lp/bugs/browser/tests/test_expose.py
@@ -347,7 +347,6 @@ class TestStructuralSubscriptionHelpers(TestCase):
347347
348348
349class TestIntegrationExposeUserSubscriptionsToJS(TestCaseWithFactory):349class TestIntegrationExposeUserSubscriptionsToJS(TestCaseWithFactory):
350
351 layer = DatabaseFunctionalLayer350 layer = DatabaseFunctionalLayer
352351
353 def test_team_admin_subscription(self):352 def test_team_admin_subscription(self):
diff --git a/lib/lp/bugs/browser/tests/test_person_bugs.py b/lib/lp/bugs/browser/tests/test_person_bugs.py
index cc5f9a5..455eac1 100644
--- a/lib/lp/bugs/browser/tests/test_person_bugs.py
+++ b/lib/lp/bugs/browser/tests/test_person_bugs.py
@@ -9,7 +9,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
99
1010
11class PersonBugsMenuTestCase(TestCaseWithFactory):11class PersonBugsMenuTestCase(TestCaseWithFactory):
12
13 layer = DatabaseFunctionalLayer12 layer = DatabaseFunctionalLayer
1413
15 def test_user(self):14 def test_user(self):
diff --git a/lib/lp/bugs/browser/tests/test_structuralsubscription.py b/lib/lp/bugs/browser/tests/test_structuralsubscription.py
index b8ee3cf..076de82 100644
--- a/lib/lp/bugs/browser/tests/test_structuralsubscription.py
+++ b/lib/lp/bugs/browser/tests/test_structuralsubscription.py
@@ -239,7 +239,6 @@ class TestSourcePackageStructuralSubscribersPortletView(
239239
240240
241class TestStructuralSubscriptionAPI(TestCaseWithFactory):241class TestStructuralSubscriptionAPI(TestCaseWithFactory):
242
243 layer = DatabaseFunctionalLayer242 layer = DatabaseFunctionalLayer
244243
245 def setUp(self):244 def setUp(self):
diff --git a/lib/lp/bugs/browser/widgets/tests/test_bug.py b/lib/lp/bugs/browser/widgets/tests/test_bug.py
index f61f245..cc7f2a4 100644
--- a/lib/lp/bugs/browser/widgets/tests/test_bug.py
+++ b/lib/lp/bugs/browser/widgets/tests/test_bug.py
@@ -9,7 +9,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
99
1010
11class BugTagsWidgetTestCase(TestCaseWithFactory):11class BugTagsWidgetTestCase(TestCaseWithFactory):
12
13 layer = DatabaseFunctionalLayer12 layer = DatabaseFunctionalLayer
1413
15 def get_widget(self, bug_target):14 def get_widget(self, bug_target):
diff --git a/lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py b/lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py
index 03b3197..de2a217 100644
--- a/lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py
+++ b/lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py
@@ -44,7 +44,6 @@ class CommentPushingExternalBugTracker(ExternalBugTracker):
4444
4545
46class TestCheckwatchesConfig(TestCase):46class TestCheckwatchesConfig(TestCase):
47
48 layer = ZopelessDatabaseLayer47 layer = ZopelessDatabaseLayer
49 base_url = "http://www.example.com/"48 base_url = "http://www.example.com/"
5049
diff --git a/lib/lp/bugs/externalbugtracker/tests/test_github.py b/lib/lp/bugs/externalbugtracker/tests/test_github.py
index 7ecc43b..870b706 100644
--- a/lib/lp/bugs/externalbugtracker/tests/test_github.py
+++ b/lib/lp/bugs/externalbugtracker/tests/test_github.py
@@ -52,7 +52,6 @@ def _add_rate_limit_response(
5252
5353
54class TestGitHubRateLimit(TestCase):54class TestGitHubRateLimit(TestCase):
55
56 layer = ZopelessLayer55 layer = ZopelessLayer
5756
58 def setUp(self):57 def setUp(self):
@@ -130,7 +129,6 @@ class TestGitHubRateLimit(TestCase):
130129
131130
132class TestGitHub(TestCase):131class TestGitHub(TestCase):
133
134 layer = ZopelessLayer132 layer = ZopelessLayer
135133
136 def setUp(self):134 def setUp(self):
@@ -401,7 +399,6 @@ class TestGitHub(TestCase):
401399
402400
403class TestGitHubUpdateBugWatches(TestCaseWithFactory):401class TestGitHubUpdateBugWatches(TestCaseWithFactory):
404
405 layer = ZopelessDatabaseLayer402 layer = ZopelessDatabaseLayer
406403
407 @responses.activate404 @responses.activate
diff --git a/lib/lp/bugs/externalbugtracker/tests/test_gitlab.py b/lib/lp/bugs/externalbugtracker/tests/test_gitlab.py
index a95b998..cb53149 100644
--- a/lib/lp/bugs/externalbugtracker/tests/test_gitlab.py
+++ b/lib/lp/bugs/externalbugtracker/tests/test_gitlab.py
@@ -32,7 +32,6 @@ from lp.testing.layers import ZopelessDatabaseLayer, ZopelessLayer
3232
3333
34class TestGitLab(TestCase):34class TestGitLab(TestCase):
35
36 layer = ZopelessLayer35 layer = ZopelessLayer
3736
38 def setUp(self):37 def setUp(self):
@@ -292,7 +291,6 @@ class TestGitLab(TestCase):
292291
293292
294class TestGitLabUpdateBugWatches(TestCaseWithFactory):293class TestGitLabUpdateBugWatches(TestCaseWithFactory):
295
296 layer = ZopelessDatabaseLayer294 layer = ZopelessDatabaseLayer
297295
298 @responses.activate296 @responses.activate
diff --git a/lib/lp/bugs/interfaces/bugsupervisor.py b/lib/lp/bugs/interfaces/bugsupervisor.py
index 7d38ed5..48405fb 100644
--- a/lib/lp/bugs/interfaces/bugsupervisor.py
+++ b/lib/lp/bugs/interfaces/bugsupervisor.py
@@ -15,7 +15,6 @@ from lp.services.fields import PersonChoice
1515
1616
17class IHasBugSupervisor(Interface):17class IHasBugSupervisor(Interface):
18
19 bug_supervisor = exported(18 bug_supervisor = exported(
20 PersonChoice(19 PersonChoice(
21 title=_("Bug Supervisor"),20 title=_("Bug Supervisor"),
diff --git a/lib/lp/bugs/interfaces/bugtask.py b/lib/lp/bugs/interfaces/bugtask.py
index a8c4e45..3864b76 100644
--- a/lib/lp/bugs/interfaces/bugtask.py
+++ b/lib/lp/bugs/interfaces/bugtask.py
@@ -1301,7 +1301,6 @@ class IAddBugTaskForm(ILinkPackaging):
13011301
13021302
1303class IAddBugTaskWithProductCreationForm(ILinkPackaging):1303class IAddBugTaskWithProductCreationForm(ILinkPackaging):
1304
1305 bug_url = StrippedTextLine(1304 bug_url = StrippedTextLine(
1306 title=_("Bug URL"),1305 title=_("Bug URL"),
1307 required=True,1306 required=True,
diff --git a/lib/lp/bugs/interfaces/bugtasksearch.py b/lib/lp/bugs/interfaces/bugtasksearch.py
index f022a72..c78d1cc 100644
--- a/lib/lp/bugs/interfaces/bugtasksearch.py
+++ b/lib/lp/bugs/interfaces/bugtasksearch.py
@@ -191,7 +191,6 @@ class BugTaskSearchParams:
191 ignore_privacy=False,191 ignore_privacy=False,
192 ociproject=None,192 ociproject=None,
193 ):193 ):
194
195 self.bug = bug194 self.bug = bug
196 self.searchtext = searchtext195 self.searchtext = searchtext
197 self.fast_searchtext = fast_searchtext196 self.fast_searchtext = fast_searchtext
diff --git a/lib/lp/bugs/interfaces/bugtracker.py b/lib/lp/bugs/interfaces/bugtracker.py
index 3f383e3..6e88264 100644
--- a/lib/lp/bugs/interfaces/bugtracker.py
+++ b/lib/lp/bugs/interfaces/bugtracker.py
@@ -54,7 +54,6 @@ LOCATION_SCHEMES_ALLOWED = "http", "https", "mailto"
5454
5555
56class BugTrackerNameField(ContentNameField):56class BugTrackerNameField(ContentNameField):
57
58 errormessage = _("%s is already in use by another bugtracker.")57 errormessage = _("%s is already in use by another bugtracker.")
5958
60 @property59 @property
diff --git a/lib/lp/bugs/interfaces/personsubscriptioninfo.py b/lib/lp/bugs/interfaces/personsubscriptioninfo.py
index 7fd8dd8..47060e2 100644
--- a/lib/lp/bugs/interfaces/personsubscriptioninfo.py
+++ b/lib/lp/bugs/interfaces/personsubscriptioninfo.py
@@ -21,7 +21,6 @@ from lp.services.fields import BugField, PersonChoice
2121
2222
23class IAbstractSubscriptionInfo(Interface):23class IAbstractSubscriptionInfo(Interface):
24
25 bug = BugField(24 bug = BugField(
26 title=_("Bug"),25 title=_("Bug"),
27 readonly=True,26 readonly=True,
@@ -45,7 +44,6 @@ class IAbstractSubscriptionInfo(Interface):
4544
4645
47class IRealSubscriptionInfo(IAbstractSubscriptionInfo):46class IRealSubscriptionInfo(IAbstractSubscriptionInfo):
48
49 subscription = Attribute(47 subscription = Attribute(
50 "The bug subscription. Important attributes for our uses are the "48 "The bug subscription. Important attributes for our uses are the "
51 "target and the bug_notification_level."49 "target and the bug_notification_level."
@@ -66,7 +64,6 @@ class IRealSubscriptionInfo(IAbstractSubscriptionInfo):
6664
6765
68class IVirtualSubscriptionInfo(IAbstractSubscriptionInfo):66class IVirtualSubscriptionInfo(IAbstractSubscriptionInfo):
69
70 pillar = Attribute(67 pillar = Attribute(
71 """The pillar for the bugtask. Useful for owner and68 """The pillar for the bugtask. Useful for owner and
72 bug_supervisor"""69 bug_supervisor"""
@@ -76,7 +73,6 @@ class IVirtualSubscriptionInfo(IAbstractSubscriptionInfo):
7673
7774
78class IAbstractSubscriptionInfoCollection(Interface):75class IAbstractSubscriptionInfoCollection(Interface):
79
80 count = Attribute("The total number of contained subscriptions.")76 count = Attribute("The total number of contained subscriptions.")
8177
82 personal = Attribute(78 personal = Attribute(
diff --git a/lib/lp/bugs/mail/tests/test_commands.py b/lib/lp/bugs/mail/tests/test_commands.py
index 2f775c0..10309a7 100644
--- a/lib/lp/bugs/mail/tests/test_commands.py
+++ b/lib/lp/bugs/mail/tests/test_commands.py
@@ -30,7 +30,6 @@ from lp.testing.layers import DatabaseFunctionalLayer, LaunchpadFunctionalLayer
3030
3131
32class AffectsEmailCommandTestCase(TestCaseWithFactory):32class AffectsEmailCommandTestCase(TestCaseWithFactory):
33
34 layer = DatabaseFunctionalLayer33 layer = DatabaseFunctionalLayer
3534
36 def test__splitPath_with_slashes(self):35 def test__splitPath_with_slashes(self):
@@ -360,7 +359,6 @@ class AffectsEmailCommandTestCase(TestCaseWithFactory):
360359
361360
362class BugEmailCommandTestCase(TestCaseWithFactory):361class BugEmailCommandTestCase(TestCaseWithFactory):
363
364 layer = LaunchpadFunctionalLayer362 layer = LaunchpadFunctionalLayer
365363
366 def test_execute_bug_id(self):364 def test_execute_bug_id(self):
@@ -406,7 +404,6 @@ class BugEmailCommandTestCase(TestCaseWithFactory):
406404
407405
408class PrivateEmailCommandTestCase(TestCaseWithFactory):406class PrivateEmailCommandTestCase(TestCaseWithFactory):
409
410 layer = DatabaseFunctionalLayer407 layer = DatabaseFunctionalLayer
411408
412 def test_execute_bug(self):409 def test_execute_bug(self):
@@ -449,7 +446,6 @@ class PrivateEmailCommandTestCase(TestCaseWithFactory):
449446
450447
451class SecurityEmailCommandTestCase(TestCaseWithFactory):448class SecurityEmailCommandTestCase(TestCaseWithFactory):
452
453 layer = DatabaseFunctionalLayer449 layer = DatabaseFunctionalLayer
454450
455 def test_execute_bug(self):451 def test_execute_bug(self):
@@ -476,7 +472,6 @@ class SecurityEmailCommandTestCase(TestCaseWithFactory):
476472
477473
478class InformationTypeEmailCommandTestCase(TestCaseWithFactory):474class InformationTypeEmailCommandTestCase(TestCaseWithFactory):
479
480 layer = DatabaseFunctionalLayer475 layer = DatabaseFunctionalLayer
481476
482 def test_execute_bug_params(self):477 def test_execute_bug_params(self):
@@ -517,7 +512,6 @@ class InformationTypeEmailCommandTestCase(TestCaseWithFactory):
517512
518513
519class SubscribeEmailCommandTestCase(TestCaseWithFactory):514class SubscribeEmailCommandTestCase(TestCaseWithFactory):
520
521 layer = DatabaseFunctionalLayer515 layer = DatabaseFunctionalLayer
522516
523 def test_execute_bug_with_user_name(self):517 def test_execute_bug_with_user_name(self):
@@ -577,7 +571,6 @@ class SubscribeEmailCommandTestCase(TestCaseWithFactory):
577571
578572
579class UnsubscribeEmailCommandTestCase(TestCaseWithFactory):573class UnsubscribeEmailCommandTestCase(TestCaseWithFactory):
580
581 layer = DatabaseFunctionalLayer574 layer = DatabaseFunctionalLayer
582575
583 def test_execute_bug_with_user_name(self):576 def test_execute_bug_with_user_name(self):
@@ -618,7 +611,6 @@ class UnsubscribeEmailCommandTestCase(TestCaseWithFactory):
618611
619612
620class SummaryEmailCommandTestCase(TestCaseWithFactory):613class SummaryEmailCommandTestCase(TestCaseWithFactory):
621
622 layer = DatabaseFunctionalLayer614 layer = DatabaseFunctionalLayer
623615
624 def test_execute_bug(self):616 def test_execute_bug(self):
@@ -643,7 +635,6 @@ class SummaryEmailCommandTestCase(TestCaseWithFactory):
643635
644636
645class DuplicateEmailCommandTestCase(TestCaseWithFactory):637class DuplicateEmailCommandTestCase(TestCaseWithFactory):
646
647 layer = DatabaseFunctionalLayer638 layer = DatabaseFunctionalLayer
648639
649 def test_execute_bug(self):640 def test_execute_bug(self):
@@ -670,7 +661,6 @@ class DuplicateEmailCommandTestCase(TestCaseWithFactory):
670661
671662
672class CVEEmailCommandTestCase(TestCaseWithFactory):663class CVEEmailCommandTestCase(TestCaseWithFactory):
673
674 layer = DatabaseFunctionalLayer664 layer = DatabaseFunctionalLayer
675665
676 def test_execute_bug(self):666 def test_execute_bug(self):
@@ -698,7 +688,6 @@ class CVEEmailCommandTestCase(TestCaseWithFactory):
698688
699689
700class TagEmailCommandTestCase(TestCaseWithFactory):690class TagEmailCommandTestCase(TestCaseWithFactory):
701
702 layer = DatabaseFunctionalLayer691 layer = DatabaseFunctionalLayer
703692
704 def test_execute_bug(self):693 def test_execute_bug(self):
diff --git a/lib/lp/bugs/model/bug.py b/lib/lp/bugs/model/bug.py
index 5f20232..4ff9c08 100644
--- a/lib/lp/bugs/model/bug.py
+++ b/lib/lp/bugs/model/bug.py
@@ -2082,6 +2082,7 @@ class Bug(SQLBase, InformationTypeMixin):
20822082
2083 def getNominations(self, target=None, nominations=None):2083 def getNominations(self, target=None, nominations=None):
2084 """See `IBug`."""2084 """See `IBug`."""
2085
2085 # Define the function used as a sort key.2086 # Define the function used as a sort key.
2086 def by_bugtargetdisplayname(nomination):2087 def by_bugtargetdisplayname(nomination):
2087 """Return the friendly sort key version of displayname."""2088 """Return the friendly sort key version of displayname."""
diff --git a/lib/lp/bugs/model/bugnomination.py b/lib/lp/bugs/model/bugnomination.py
index 0d3846c..53e6d99 100644
--- a/lib/lp/bugs/model/bugnomination.py
+++ b/lib/lp/bugs/model/bugnomination.py
@@ -39,7 +39,6 @@ from lp.services.features import getFeatureFlag
3939
40@implementer(IBugNomination)40@implementer(IBugNomination)
41class BugNomination(StormBase):41class BugNomination(StormBase):
42
43 __storm_table__ = "BugNomination"42 __storm_table__ = "BugNomination"
4443
45 id = Int(primary=True)44 id = Int(primary=True)
diff --git a/lib/lp/bugs/model/bugtaskflat.py b/lib/lp/bugs/model/bugtaskflat.py
index 16ad071..833fe01 100644
--- a/lib/lp/bugs/model/bugtaskflat.py
+++ b/lib/lp/bugs/model/bugtaskflat.py
@@ -14,7 +14,6 @@ from lp.services.database.stormbase import StormBase
1414
1515
16class BugTaskFlat(StormBase):16class BugTaskFlat(StormBase):
17
18 __storm_table__ = "BugTaskFlat"17 __storm_table__ = "BugTaskFlat"
1918
20 bugtask_id = Int(name="bugtask", primary=True)19 bugtask_id = Int(name="bugtask", primary=True)
diff --git a/lib/lp/bugs/model/tests/test_bug.py b/lib/lp/bugs/model/tests/test_bug.py
index 1084734..86c291c 100644
--- a/lib/lp/bugs/model/tests/test_bug.py
+++ b/lib/lp/bugs/model/tests/test_bug.py
@@ -42,7 +42,6 @@ from lp.testing.matchers import Equals, HasQueryCount, LessThan
4242
4343
44class TestBug(TestCaseWithFactory):44class TestBug(TestCaseWithFactory):
45
46 layer = DatabaseFunctionalLayer45 layer = DatabaseFunctionalLayer
4746
48 def test_getNominationFor_sourcepackage(self):47 def test_getNominationFor_sourcepackage(self):
@@ -678,7 +677,6 @@ class TestBug(TestCaseWithFactory):
678677
679678
680class TestBugPrivateAndSecurityRelatedUpdatesProject(TestCaseWithFactory):679class TestBugPrivateAndSecurityRelatedUpdatesProject(TestCaseWithFactory):
681
682 layer = DatabaseFunctionalLayer680 layer = DatabaseFunctionalLayer
683681
684 def test_setPrivate_subscribes_person_who_makes_bug_private(self):682 def test_setPrivate_subscribes_person_who_makes_bug_private(self):
@@ -865,7 +863,6 @@ class TestBugPrivateAndSecurityRelatedUpdatesProject(TestCaseWithFactory):
865863
866864
867class TestBugPrivacy(TestCaseWithFactory):865class TestBugPrivacy(TestCaseWithFactory):
868
869 layer = DatabaseFunctionalLayer866 layer = DatabaseFunctionalLayer
870867
871 def test_multipillar_proprietary_bugs_disallowed(self):868 def test_multipillar_proprietary_bugs_disallowed(self):
@@ -1062,7 +1059,6 @@ class TestBugPrivacy(TestCaseWithFactory):
10621059
10631060
1064class TestBugPrivateAndSecurityRelatedUpdatesSpecialCase(TestCaseWithFactory):1061class TestBugPrivateAndSecurityRelatedUpdatesSpecialCase(TestCaseWithFactory):
1065
1066 layer = DatabaseFunctionalLayer1062 layer = DatabaseFunctionalLayer
10671063
1068 def test_transition_special_cased_for_ubuntu(self):1064 def test_transition_special_cased_for_ubuntu(self):
@@ -1089,7 +1085,6 @@ class TestBugPrivateAndSecurityRelatedUpdatesSpecialCase(TestCaseWithFactory):
10891085
10901086
1091class TestBugActivityMethods(TestCaseWithFactory):1087class TestBugActivityMethods(TestCaseWithFactory):
1092
1093 layer = DatabaseFunctionalLayer1088 layer = DatabaseFunctionalLayer
10941089
1095 def setUp(self):1090 def setUp(self):
diff --git a/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py b/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
index 28430c3..8acfa75 100644
--- a/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
+++ b/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
@@ -30,7 +30,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
3030
3131
32class TestBugSubscriptionFilter(TestCaseWithFactory):32class TestBugSubscriptionFilter(TestCaseWithFactory):
33
34 layer = DatabaseFunctionalLayer33 layer = DatabaseFunctionalLayer
3534
36 def setUp(self):35 def setUp(self):
@@ -391,7 +390,6 @@ class TestBugSubscriptionFilter(TestCaseWithFactory):
391390
392391
393class TestBugSubscriptionFilterPermissions(TestCaseWithFactory):392class TestBugSubscriptionFilterPermissions(TestCaseWithFactory):
394
395 layer = DatabaseFunctionalLayer393 layer = DatabaseFunctionalLayer
396394
397 def setUp(self):395 def setUp(self):
@@ -466,7 +464,6 @@ class TestBugSubscriptionFilterPermissions(TestCaseWithFactory):
466464
467465
468class TestBugSubscriptionFilterImportance(TestCaseWithFactory):466class TestBugSubscriptionFilterImportance(TestCaseWithFactory):
469
470 layer = DatabaseFunctionalLayer467 layer = DatabaseFunctionalLayer
471468
472 def setUp(self):469 def setUp(self):
@@ -503,7 +500,6 @@ class TestBugSubscriptionFilterImportance(TestCaseWithFactory):
503500
504501
505class TestBugSubscriptionFilterStatus(TestCaseWithFactory):502class TestBugSubscriptionFilterStatus(TestCaseWithFactory):
506
507 layer = DatabaseFunctionalLayer503 layer = DatabaseFunctionalLayer
508504
509 def setUp(self):505 def setUp(self):
@@ -538,7 +534,6 @@ class TestBugSubscriptionFilterStatus(TestCaseWithFactory):
538534
539535
540class TestBugSubscriptionFilterTag(TestCaseWithFactory):536class TestBugSubscriptionFilterTag(TestCaseWithFactory):
541
542 layer = DatabaseFunctionalLayer537 layer = DatabaseFunctionalLayer
543538
544 def setUp(self):539 def setUp(self):
@@ -586,7 +581,6 @@ class TestBugSubscriptionFilterTag(TestCaseWithFactory):
586581
587582
588class TestBugSubscriptionFilterInformationType(TestCaseWithFactory):583class TestBugSubscriptionFilterInformationType(TestCaseWithFactory):
589
590 layer = DatabaseFunctionalLayer584 layer = DatabaseFunctionalLayer
591585
592 def setUp(self):586 def setUp(self):
diff --git a/lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py b/lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py
index 34b9986..2497c45 100644
--- a/lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py
+++ b/lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py
@@ -125,7 +125,6 @@ class TestSubscriptionRelatedSets(TestCaseWithFactory):
125125
126126
127class TestBugSubscriptionInfo(TestCaseWithFactory):127class TestBugSubscriptionInfo(TestCaseWithFactory):
128
129 layer = DatabaseFunctionalLayer128 layer = DatabaseFunctionalLayer
130129
131 def setUp(self):130 def setUp(self):
@@ -442,7 +441,6 @@ class TestBugSubscriptionInfo(TestCaseWithFactory):
442441
443442
444class TestBugSubscriptionInfoPermissions(TestCaseWithFactory):443class TestBugSubscriptionInfoPermissions(TestCaseWithFactory):
445
446 layer = DatabaseFunctionalLayer444 layer = DatabaseFunctionalLayer
447445
448 def test(self):446 def test(self):
@@ -467,7 +465,6 @@ class TestBugSubscriptionInfoPermissions(TestCaseWithFactory):
467465
468466
469class TestBugSubscriptionInfoQueries(TestCaseWithFactory):467class TestBugSubscriptionInfoQueries(TestCaseWithFactory):
470
471 layer = DatabaseFunctionalLayer468 layer = DatabaseFunctionalLayer
472469
473 def setUp(self):470 def setUp(self):
diff --git a/lib/lp/bugs/model/tests/test_bugsummary.py b/lib/lp/bugs/model/tests/test_bugsummary.py
index 459a6f0..cfa52d1 100644
--- a/lib/lp/bugs/model/tests/test_bugsummary.py
+++ b/lib/lp/bugs/model/tests/test_bugsummary.py
@@ -23,7 +23,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
2323
2424
25class TestBugSummary(TestCaseWithFactory):25class TestBugSummary(TestCaseWithFactory):
26
27 layer = LaunchpadZopelessLayer26 layer = LaunchpadZopelessLayer
2827
29 def setUp(self):28 def setUp(self):
diff --git a/lib/lp/bugs/model/tests/test_bugtask.py b/lib/lp/bugs/model/tests/test_bugtask.py
index c3eb248..77e979b 100644
--- a/lib/lp/bugs/model/tests/test_bugtask.py
+++ b/lib/lp/bugs/model/tests/test_bugtask.py
@@ -960,7 +960,6 @@ class TestBugTaskPrivacy(TestCaseWithFactory):
960960
961961
962class TestBugTaskDelta(TestCaseWithFactory):962class TestBugTaskDelta(TestCaseWithFactory):
963
964 layer = DatabaseFunctionalLayer963 layer = DatabaseFunctionalLayer
965964
966 def setUp(self):965 def setUp(self):
@@ -1182,7 +1181,6 @@ class TestSimilarBugs(TestCaseWithFactory):
11821181
11831182
1184class TestBugTaskPermissionsToSetAssigneeMixin:1183class TestBugTaskPermissionsToSetAssigneeMixin:
1185
1186 layer = DatabaseFunctionalLayer1184 layer = DatabaseFunctionalLayer
11871185
1188 def setUp(self, *args, **kwargs):1186 def setUp(self, *args, **kwargs):
@@ -1663,7 +1661,6 @@ class TestBugTaskStatuses(TestCase):
16631661
16641662
1665class TestBugTaskContributor(TestCaseWithFactory):1663class TestBugTaskContributor(TestCaseWithFactory):
1666
1667 layer = DatabaseFunctionalLayer1664 layer = DatabaseFunctionalLayer
16681665
1669 def test_non_contributor(self):1666 def test_non_contributor(self):
@@ -3337,7 +3334,6 @@ class ValidateTargetMixin:
33373334
33383335
3339class TestValidateTarget(TestCaseWithFactory, ValidateTargetMixin):3336class TestValidateTarget(TestCaseWithFactory, ValidateTargetMixin):
3340
3341 layer = DatabaseFunctionalLayer3337 layer = DatabaseFunctionalLayer
33423338
3343 multi_tenant_test_one_task_only = False3339 multi_tenant_test_one_task_only = False
@@ -3590,7 +3586,6 @@ class TestValidateTarget(TestCaseWithFactory, ValidateTargetMixin):
35903586
35913587
3592class TestValidateNewTarget(TestCaseWithFactory, ValidateTargetMixin):3588class TestValidateNewTarget(TestCaseWithFactory, ValidateTargetMixin):
3593
3594 layer = DatabaseFunctionalLayer3589 layer = DatabaseFunctionalLayer
35953590
3596 multi_tenant_test_one_task_only = True3591 multi_tenant_test_one_task_only = True
@@ -3689,7 +3684,6 @@ class TestWebservice(TestCaseWithFactory):
36893684
36903685
3691class TestBugTaskUserHasBugSupervisorPrivileges(TestCaseWithFactory):3686class TestBugTaskUserHasBugSupervisorPrivileges(TestCaseWithFactory):
3692
3693 layer = DatabaseFunctionalLayer3687 layer = DatabaseFunctionalLayer
36943688
3695 def setUp(self):3689 def setUp(self):
@@ -3780,7 +3774,6 @@ class TestBugTaskUserHasBugSupervisorPrivileges(TestCaseWithFactory):
37803774
37813775
3782class TestBugTaskUserHasBugSupervisorPrivilegesContext(TestCaseWithFactory):3776class TestBugTaskUserHasBugSupervisorPrivilegesContext(TestCaseWithFactory):
3783
3784 layer = DatabaseFunctionalLayer3777 layer = DatabaseFunctionalLayer
37853778
3786 def assert_userHasBugSupervisorPrivilegesContext(self, obj):3779 def assert_userHasBugSupervisorPrivilegesContext(self, obj):
diff --git a/lib/lp/bugs/model/tests/test_bugtasksearch.py b/lib/lp/bugs/model/tests/test_bugtasksearch.py
index 918dbdd..e16a56b 100644
--- a/lib/lp/bugs/model/tests/test_bugtasksearch.py
+++ b/lib/lp/bugs/model/tests/test_bugtasksearch.py
@@ -124,7 +124,6 @@ class TestProcessOrderBy(TestCase):
124124
125125
126class SearchTestBase:126class SearchTestBase:
127
128 layer = LaunchpadFunctionalLayer127 layer = LaunchpadFunctionalLayer
129128
130 def setUp(self):129 def setUp(self):
@@ -785,7 +784,6 @@ class TargetTests:
785784
786785
787class DeactivatedProductBugTaskTestCase(TestCaseWithFactory):786class DeactivatedProductBugTaskTestCase(TestCaseWithFactory):
788
789 layer = DatabaseFunctionalLayer787 layer = DatabaseFunctionalLayer
790788
791 def setUp(self):789 def setUp(self):
@@ -1867,7 +1865,6 @@ class QueryBugIDs:
18671865
18681866
1869class TestMilestoneDueDateFiltering(TestCaseWithFactory):1867class TestMilestoneDueDateFiltering(TestCaseWithFactory):
1870
1871 layer = LaunchpadFunctionalLayer1868 layer = LaunchpadFunctionalLayer
18721869
1873 def test_milestone_date_filters(self):1870 def test_milestone_date_filters(self):
@@ -2364,7 +2361,6 @@ class TestBugTaskTagSearchClauses(TestCase):
23642361
23652362
2366class TestBugTaskSearch(TestCaseWithFactory):2363class TestBugTaskSearch(TestCaseWithFactory):
2367
2368 layer = DatabaseFunctionalLayer2364 layer = DatabaseFunctionalLayer
23692365
2370 def login(self):2366 def login(self):
@@ -2520,7 +2516,6 @@ class TestBugTaskSearch(TestCaseWithFactory):
25202516
25212517
2522class BugTaskSetSearchTest(TestCaseWithFactory):2518class BugTaskSetSearchTest(TestCaseWithFactory):
2523
2524 layer = DatabaseFunctionalLayer2519 layer = DatabaseFunctionalLayer
25252520
2526 def test_explicit_blueprint_specified(self):2521 def test_explicit_blueprint_specified(self):
@@ -2567,7 +2562,6 @@ class TargetLessTestCase(TestCaseWithFactory):
25672562
25682563
2569class BaseGetBugPrivacyFilterTermsTests:2564class BaseGetBugPrivacyFilterTermsTests:
2570
2571 layer = DatabaseFunctionalLayer2565 layer = DatabaseFunctionalLayer
25722566
2573 def test_public(self):2567 def test_public(self):
diff --git a/lib/lp/bugs/model/tests/test_personsubscriptioninfo.py b/lib/lp/bugs/model/tests/test_personsubscriptioninfo.py
index 7011826..2671e9b 100644
--- a/lib/lp/bugs/model/tests/test_personsubscriptioninfo.py
+++ b/lib/lp/bugs/model/tests/test_personsubscriptioninfo.py
@@ -25,7 +25,6 @@ from lp.testing.matchers import HasQueryCount, Provides
2525
2626
27class TestPersonSubscriptionInfo(TestCaseWithFactory):27class TestPersonSubscriptionInfo(TestCaseWithFactory):
28
29 layer = DatabaseFunctionalLayer28 layer = DatabaseFunctionalLayer
3029
31 def setUp(self):30 def setUp(self):
diff --git a/lib/lp/bugs/model/tests/test_vulnerability.py b/lib/lp/bugs/model/tests/test_vulnerability.py
index 138e23d..184b5d7 100644
--- a/lib/lp/bugs/model/tests/test_vulnerability.py
+++ b/lib/lp/bugs/model/tests/test_vulnerability.py
@@ -47,7 +47,6 @@ def grant_access_to_non_public_vulnerability(vulnerability, person):
4747
4848
49class TestVulnerability(TestCaseWithFactory):49class TestVulnerability(TestCaseWithFactory):
50
51 layer = DatabaseFunctionalLayer50 layer = DatabaseFunctionalLayer
5251
53 def setUp(self):52 def setUp(self):
@@ -490,7 +489,6 @@ class TestVulnerability(TestCaseWithFactory):
490489
491490
492class TestVulnerabilityActivity(TestCaseWithFactory):491class TestVulnerabilityActivity(TestCaseWithFactory):
493
494 layer = DatabaseFunctionalLayer492 layer = DatabaseFunctionalLayer
495493
496 def test_vulnerability_activity_changes(self):494 def test_vulnerability_activity_changes(self):
@@ -506,7 +504,6 @@ class TestVulnerabilityActivity(TestCaseWithFactory):
506504
507505
508class TestVulnerabilitySet(TestCaseWithFactory):506class TestVulnerabilitySet(TestCaseWithFactory):
509
510 layer = DatabaseFunctionalLayer507 layer = DatabaseFunctionalLayer
511508
512 def test_VulnerabilitySet_implements_IVulnerabilitySet(self):509 def test_VulnerabilitySet_implements_IVulnerabilitySet(self):
diff --git a/lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py b/lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py
index 6d8124c..bcbb63d 100644
--- a/lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py
+++ b/lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py
@@ -14,7 +14,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1414
1515
16class TestVulnerabilitySubscription(TestCaseWithFactory):16class TestVulnerabilitySubscription(TestCaseWithFactory):
17
18 layer = DatabaseFunctionalLayer17 layer = DatabaseFunctionalLayer
1918
20 def test_VulnerabilitySubscription_implements_its_interface(self):19 def test_VulnerabilitySubscription_implements_its_interface(self):
diff --git a/lib/lp/bugs/publisher.py b/lib/lp/bugs/publisher.py
index bdbb00a..dbdc528 100644
--- a/lib/lp/bugs/publisher.py
+++ b/lib/lp/bugs/publisher.py
@@ -25,7 +25,6 @@ from lp.services.webapp.servers import (
2525
26@implementer(IFacet)26@implementer(IFacet)
27class BugsFacet:27class BugsFacet:
28
29 name = "bugs"28 name = "bugs"
30 rootsite = "bugs"29 rootsite = "bugs"
31 text = "Bugs"30 text = "Bugs"
diff --git a/lib/lp/bugs/scripts/bugsummaryrebuild.py b/lib/lp/bugs/scripts/bugsummaryrebuild.py
index 21003b4..088ce97 100644
--- a/lib/lp/bugs/scripts/bugsummaryrebuild.py
+++ b/lib/lp/bugs/scripts/bugsummaryrebuild.py
@@ -427,7 +427,6 @@ def calculate_bugsummary_rows(target):
427427
428428
429class BugSummaryRebuildTunableLoop(TunableLoop):429class BugSummaryRebuildTunableLoop(TunableLoop):
430
431 maximum_chunk_size = 100430 maximum_chunk_size = 100
432431
433 def __init__(self, log, dry_run, abort_time=None):432 def __init__(self, log, dry_run, abort_time=None):
diff --git a/lib/lp/bugs/scripts/checkwatches/core.py b/lib/lp/bugs/scripts/checkwatches/core.py
index 63a4546..9589bd4 100644
--- a/lib/lp/bugs/scripts/checkwatches/core.py
+++ b/lib/lp/bugs/scripts/checkwatches/core.py
@@ -758,7 +758,7 @@ class SerialScheduler(BaseScheduler):
758758
759 def run(self):759 def run(self):
760 jobs, self._jobs = self._jobs[:], []760 jobs, self._jobs = self._jobs[:], []
761 for (func, args, kwargs) in jobs:761 for func, args, kwargs in jobs:
762 func(*args, **kwargs)762 func(*args, **kwargs)
763763
764764
diff --git a/lib/lp/bugs/scripts/checkwatches/tests/test_base.py b/lib/lp/bugs/scripts/checkwatches/tests/test_base.py
index bf6c274..791031c 100644
--- a/lib/lp/bugs/scripts/checkwatches/tests/test_base.py
+++ b/lib/lp/bugs/scripts/checkwatches/tests/test_base.py
@@ -31,7 +31,6 @@ class StubTransactionManager:
3131
3232
33class TestWorkingBase(TestCaseWithFactory):33class TestWorkingBase(TestCaseWithFactory):
34
35 layer = LaunchpadZopelessLayer34 layer = LaunchpadZopelessLayer
3635
37 def setUp(self):36 def setUp(self):
@@ -147,7 +146,6 @@ class TestWorkingBase(TestCaseWithFactory):
147146
148147
149class TestWorkingBaseErrorReporting(TestCaseWithFactory):148class TestWorkingBaseErrorReporting(TestCaseWithFactory):
150
151 layer = LaunchpadZopelessLayer149 layer = LaunchpadZopelessLayer
152150
153 @contextmanager151 @contextmanager
diff --git a/lib/lp/bugs/scripts/checkwatches/tests/test_core.py b/lib/lp/bugs/scripts/checkwatches/tests/test_core.py
index 7b6315c..6a73e33 100644
--- a/lib/lp/bugs/scripts/checkwatches/tests/test_core.py
+++ b/lib/lp/bugs/scripts/checkwatches/tests/test_core.py
@@ -78,7 +78,6 @@ class NoBugWatchesByRemoteBugUpdater(RemoteBugUpdater):
7878
7979
80class TestCheckwatchesWithSyncableGnomeProducts(TestCaseWithFactory):80class TestCheckwatchesWithSyncableGnomeProducts(TestCaseWithFactory):
81
82 layer = LaunchpadZopelessLayer81 layer = LaunchpadZopelessLayer
8382
84 def setUp(self):83 def setUp(self):
@@ -166,7 +165,6 @@ class TestCheckwatchesWithSyncableGnomeProducts(TestCaseWithFactory):
166165
167166
168class BrokenCheckwatchesMaster(CheckwatchesMaster):167class BrokenCheckwatchesMaster(CheckwatchesMaster):
169
170 error_code = None168 error_code = None
171169
172 def _getExternalBugTrackersAndWatches(self, bug_tracker, bug_watches):170 def _getExternalBugTrackersAndWatches(self, bug_tracker, bug_watches):
@@ -176,7 +174,6 @@ class BrokenCheckwatchesMaster(CheckwatchesMaster):
176174
177175
178class TestCheckwatchesMaster(TestCaseWithFactory):176class TestCheckwatchesMaster(TestCaseWithFactory):
179
180 layer = LaunchpadZopelessLayer177 layer = LaunchpadZopelessLayer
181178
182 def setUp(self):179 def setUp(self):
diff --git a/lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py b/lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py
index 4e322d9..0f36089 100644
--- a/lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py
+++ b/lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py
@@ -36,7 +36,6 @@ class ImportanceConvertingExternalBugTracker(TestExternalBugTracker):
3636
3737
38class RemoteBugUpdaterTestCase(TestCaseWithFactory):38class RemoteBugUpdaterTestCase(TestCaseWithFactory):
39
40 layer = LaunchpadZopelessLayer39 layer = LaunchpadZopelessLayer
4140
42 def makeUpdater(41 def makeUpdater(
diff --git a/lib/lp/bugs/scripts/tests/test_bugnotification.py b/lib/lp/bugs/scripts/tests/test_bugnotification.py
index a863751..99d9197 100644
--- a/lib/lp/bugs/scripts/tests/test_bugnotification.py
+++ b/lib/lp/bugs/scripts/tests/test_bugnotification.py
@@ -672,7 +672,6 @@ class TestNotificationBatches(unittest.TestCase):
672672
673673
674class EmailNotificationTestBase(TestCaseWithFactory):674class EmailNotificationTestBase(TestCaseWithFactory):
675
676 layer = LaunchpadZopelessLayer675 layer = LaunchpadZopelessLayer
677676
678 def setUp(self):677 def setUp(self):
@@ -726,7 +725,6 @@ class EmailNotificationTestBase(TestCaseWithFactory):
726725
727726
728class EmailNotificationsBugMixin:727class EmailNotificationsBugMixin:
729
730 change_class = None # type: Optional[Type[Any]]728 change_class = None # type: Optional[Type[Any]]
731 change_name = None # type: Optional[str]729 change_name = None # type: Optional[str]
732 old = None # type: Any730 old = None # type: Any
@@ -820,7 +818,6 @@ class EmailNotificationsBugTaskMixin(EmailNotificationsBugMixin):
820818
821819
822class EmailNotificationsAddedRemovedMixin:820class EmailNotificationsAddedRemovedMixin:
823
824 old = new = added_message = removed_message = b""821 old = new = added_message = removed_message = b""
825822
826 def add(self, item):823 def add(self, item):
@@ -854,7 +851,6 @@ class EmailNotificationsAddedRemovedMixin:
854class TestEmailNotificationsBugTitle(851class TestEmailNotificationsBugTitle(
855 EmailNotificationsBugMixin, EmailNotificationTestBase852 EmailNotificationsBugMixin, EmailNotificationTestBase
856):853):
857
858 change_class = BugTitleChange854 change_class = BugTitleChange
859 change_name = "title"855 change_name = "title"
860 old = "Old summary"856 old = "Old summary"
@@ -866,7 +862,6 @@ class TestEmailNotificationsBugTitle(
866class TestEmailNotificationsBugTags(862class TestEmailNotificationsBugTags(
867 EmailNotificationsBugMixin, EmailNotificationTestBase863 EmailNotificationsBugMixin, EmailNotificationTestBase
868):864):
869
870 change_class = BugTagsChange865 change_class = BugTagsChange
871 change_name = "tags"866 change_name = "tags"
872 old = ["foo", "bar", "baz"]867 old = ["foo", "bar", "baz"]
@@ -885,7 +880,6 @@ class TestEmailNotificationsBugTags(
885class TestEmailNotificationsBugDuplicate(880class TestEmailNotificationsBugDuplicate(
886 EmailNotificationsBugNotRequiredMixin, EmailNotificationTestBase881 EmailNotificationsBugNotRequiredMixin, EmailNotificationTestBase
887):882):
888
889 change_class = BugDuplicateChange883 change_class = BugDuplicateChange
890 change_name = "duplicateof"884 change_name = "duplicateof"
891 unexpected_bytes = b"duplicate"885 unexpected_bytes = b"duplicate"
@@ -902,7 +896,6 @@ class TestEmailNotificationsBugDuplicate(
902class TestEmailNotificationsBugTaskStatus(896class TestEmailNotificationsBugTaskStatus(
903 EmailNotificationsBugTaskMixin, EmailNotificationTestBase897 EmailNotificationsBugTaskMixin, EmailNotificationTestBase
904):898):
905
906 change_class = BugTaskStatusChange899 change_class = BugTaskStatusChange
907 change_name = "status"900 change_name = "status"
908 old = BugTaskStatus.TRIAGED901 old = BugTaskStatus.TRIAGED
@@ -914,7 +907,6 @@ class TestEmailNotificationsBugTaskStatus(
914class TestEmailNotificationsBugWatch(907class TestEmailNotificationsBugWatch(
915 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase908 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase
916):909):
917
918 # Note that this is for bugwatches added to bugs. Bugwatches added910 # Note that this is for bugwatches added to bugs. Bugwatches added
919 # to bugtasks are separate animals AIUI, and we don't try to combine911 # to bugtasks are separate animals AIUI, and we don't try to combine
920 # them here for notifications. Bugtasks have only zero or one912 # them here for notifications. Bugtasks have only zero or one
@@ -957,7 +949,6 @@ class TestEmailNotificationsBugWatch(
957class TestEmailNotificationsBranch(949class TestEmailNotificationsBranch(
958 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase950 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase
959):951):
960
961 added_message = b"** Branch linked:"952 added_message = b"** Branch linked:"
962 removed_message = b"** Branch unlinked:"953 removed_message = b"** Branch unlinked:"
963954
@@ -988,7 +979,6 @@ class TestEmailNotificationsBranch(
988class TestEmailNotificationsCVE(979class TestEmailNotificationsCVE(
989 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase980 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase
990):981):
991
992 added_message = b"** CVE added:"982 added_message = b"** CVE added:"
993 removed_message = b"** CVE removed:"983 removed_message = b"** CVE removed:"
994984
@@ -1015,7 +1005,6 @@ class TestEmailNotificationsCVE(
1015class TestEmailNotificationsAttachments(1005class TestEmailNotificationsAttachments(
1016 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase1006 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase
1017):1007):
1018
1019 added_message = b"** Attachment added:"1008 added_message = b"** Attachment added:"
1020 removed_message = b"** Attachment removed:"1009 removed_message = b"** Attachment removed:"
10211010
@@ -1316,7 +1305,6 @@ class TestEmailNotificationsWithFiltersWhenBugCreated(TestCaseWithFactory):
13161305
13171306
1318class TestManageNotificationsMessage(TestCaseWithFactory):1307class TestManageNotificationsMessage(TestCaseWithFactory):
1319
1320 layer = LaunchpadZopelessLayer1308 layer = LaunchpadZopelessLayer
13211309
1322 def test_manage_notifications_message_is_included(self):1310 def test_manage_notifications_message_is_included(self):
@@ -1355,7 +1343,6 @@ class TestNotificationSignatureSeparator(TestCase):
13551343
13561344
1357class TestExpandedNotificationFooters(EmailNotificationTestBase):1345class TestExpandedNotificationFooters(EmailNotificationTestBase):
1358
1359 layer = LaunchpadZopelessLayer1346 layer = LaunchpadZopelessLayer
13601347
1361 def test_expanded_footer(self):1348 def test_expanded_footer(self):
@@ -1392,7 +1379,6 @@ class TestExpandedNotificationFooters(EmailNotificationTestBase):
13921379
13931380
1394class TestDeferredNotifications(TestCaseWithFactory):1381class TestDeferredNotifications(TestCaseWithFactory):
1395
1396 layer = LaunchpadZopelessLayer1382 layer = LaunchpadZopelessLayer
13971383
1398 def setUp(self):1384 def setUp(self):
@@ -1448,7 +1434,6 @@ class BrokenMailer(TestMailer):
14481434
14491435
1450class TestSendBugNotifications(TestCaseWithFactory):1436class TestSendBugNotifications(TestCaseWithFactory):
1451
1452 layer = LaunchpadZopelessLayer1437 layer = LaunchpadZopelessLayer
14531438
1454 def setUp(self):1439 def setUp(self):
@@ -1575,7 +1560,6 @@ class TestSendBugNotifications(TestCaseWithFactory):
1575 )1560 )
15761561
1577 def test_team_subscription_with_multiple_filters(self):1562 def test_team_subscription_with_multiple_filters(self):
1578
1579 team_owner = self.factory.makePerson(email="team-owner@canonical.com")1563 team_owner = self.factory.makePerson(email="team-owner@canonical.com")
15801564
1581 bug_watcher = self.factory.makePerson(1565 bug_watcher = self.factory.makePerson(
diff --git a/lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py b/lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py
index cf78d8c..0449135 100644
--- a/lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py
+++ b/lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py
@@ -74,7 +74,6 @@ def create_tasks(factory):
7474
7575
76class TestBugSummaryRebuild(TestCaseWithFactory):76class TestBugSummaryRebuild(TestCaseWithFactory):
77
78 layer = ZopelessDatabaseLayer77 layer = ZopelessDatabaseLayer
7978
80 def test_get_bugsummary_targets(self):79 def test_get_bugsummary_targets(self):
@@ -191,7 +190,6 @@ class TestBugSummaryRebuild(TestCaseWithFactory):
191190
192191
193class TestGetBugSummaryRows(TestCaseWithFactory):192class TestGetBugSummaryRows(TestCaseWithFactory):
194
195 layer = ZopelessDatabaseLayer193 layer = ZopelessDatabaseLayer
196194
197 def test_get_bugsummary_rows(self):195 def test_get_bugsummary_rows(self):
@@ -208,7 +206,6 @@ class TestGetBugSummaryRows(TestCaseWithFactory):
208206
209207
210class TestCalculateBugSummaryRows(TestCaseWithFactory):208class TestCalculateBugSummaryRows(TestCaseWithFactory):
211
212 layer = LaunchpadZopelessLayer209 layer = LaunchpadZopelessLayer
213210
214 def test_public_untagged(self):211 def test_public_untagged(self):
@@ -498,7 +495,6 @@ class TestCalculateBugSummaryRows(TestCaseWithFactory):
498495
499496
500class TestFormatTarget(TestCaseWithFactory):497class TestFormatTarget(TestCaseWithFactory):
501
502 layer = ZopelessDatabaseLayer498 layer = ZopelessDatabaseLayer
503499
504 def test_product(self):500 def test_product(self):
diff --git a/lib/lp/bugs/scripts/tests/test_uct.py b/lib/lp/bugs/scripts/tests/test_uct.py
index 737a89f..c6aa91f 100644
--- a/lib/lp/bugs/scripts/tests/test_uct.py
+++ b/lib/lp/bugs/scripts/tests/test_uct.py
@@ -30,7 +30,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
3030
3131
32class TestUCTRecord(TestCase):32class TestUCTRecord(TestCase):
33
34 maxDiff = None33 maxDiff = None
3534
36 def test_load_save(self):35 def test_load_save(self):
@@ -173,7 +172,6 @@ class TestUCTRecord(TestCase):
173172
174173
175class TestCVE(TestCaseWithFactory):174class TestCVE(TestCaseWithFactory):
176
177 layer = ZopelessDatabaseLayer175 layer = ZopelessDatabaseLayer
178 maxDiff = None176 maxDiff = None
179177
@@ -508,7 +506,6 @@ class TestCVE(TestCaseWithFactory):
508506
509507
510class TestUCTImporterExporter(TestCaseWithFactory):508class TestUCTImporterExporter(TestCaseWithFactory):
511
512 maxDiff = None509 maxDiff = None
513 layer = ZopelessDatabaseLayer510 layer = ZopelessDatabaseLayer
514511
diff --git a/lib/lp/bugs/scripts/uct/models.py b/lib/lp/bugs/scripts/uct/models.py
index d9f92a2..71f6c74 100644
--- a/lib/lp/bugs/scripts/uct/models.py
+++ b/lib/lp/bugs/scripts/uct/models.py
@@ -585,7 +585,6 @@ class CVE:
585 )585 )
586586
587 for uct_package_status in uct_package.statuses:587 for uct_package_status in uct_package.statuses:
588
589 if uct_package_status.status not in cls.BUG_TASK_STATUS_MAP:588 if uct_package_status.status not in cls.BUG_TASK_STATUS_MAP:
590 logger.warning(589 logger.warning(
591 "Can't find a suitable bug task status for %s",590 "Can't find a suitable bug task status for %s",
diff --git a/lib/lp/bugs/security.py b/lib/lp/bugs/security.py
index 11d74e9..4d961ac 100644
--- a/lib/lp/bugs/security.py
+++ b/lib/lp/bugs/security.py
@@ -324,7 +324,6 @@ class ViewBugActivity(DelegatedAuthorization):
324324
325325
326class ViewBugSubscription(AnonymousAuthorization):326class ViewBugSubscription(AnonymousAuthorization):
327
328 usedfor = IBugSubscription327 usedfor = IBugSubscription
329328
330329
@@ -350,7 +349,6 @@ class EditBugSubscription(AuthorizationBase):
350349
351350
352class ViewBugMessage(AnonymousAuthorization):351class ViewBugMessage(AnonymousAuthorization):
353
354 usedfor = IMessage352 usedfor = IMessage
355353
356354
diff --git a/lib/lp/bugs/subscribers/tests/test_bug.py b/lib/lp/bugs/subscribers/tests/test_bug.py
index 7749c3b..f08f31b 100644
--- a/lib/lp/bugs/subscribers/tests/test_bug.py
+++ b/lib/lp/bugs/subscribers/tests/test_bug.py
@@ -23,7 +23,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
2323
2424
25class BugSubscriberTestCase(TestCaseWithFactory):25class BugSubscriberTestCase(TestCaseWithFactory):
26
27 layer = ZopelessDatabaseLayer26 layer = ZopelessDatabaseLayer
2827
29 def setUp(self):28 def setUp(self):
diff --git a/lib/lp/bugs/tests/test_apportjob.py b/lib/lp/bugs/tests/test_apportjob.py
index 96cd204..c22cfed 100644
--- a/lib/lp/bugs/tests/test_apportjob.py
+++ b/lib/lp/bugs/tests/test_apportjob.py
@@ -334,7 +334,6 @@ class ProcessApportBlobJobTestCase(TestCaseWithFactory):
334334
335335
336class TestViaCelery(TestCaseWithFactory):336class TestViaCelery(TestCaseWithFactory):
337
338 layer = CeleryJobLayer337 layer = CeleryJobLayer
339338
340 def test_ProcessApportBlobJob(self):339 def test_ProcessApportBlobJob(self):
diff --git a/lib/lp/bugs/tests/test_bug_messages_webservice.py b/lib/lp/bugs/tests/test_bug_messages_webservice.py
index d8a77a1..0e220ed 100644
--- a/lib/lp/bugs/tests/test_bug_messages_webservice.py
+++ b/lib/lp/bugs/tests/test_bug_messages_webservice.py
@@ -84,7 +84,6 @@ class TestMessageTraversal(TestCaseWithFactory):
8484
8585
86class TestBugMessage(TestCaseWithFactory):86class TestBugMessage(TestCaseWithFactory):
87
88 layer = LaunchpadFunctionalLayer87 layer = LaunchpadFunctionalLayer
8988
90 def test_attachments(self):89 def test_attachments(self):
diff --git a/lib/lp/bugs/tests/test_bug_notification_recipients.py b/lib/lp/bugs/tests/test_bug_notification_recipients.py
index 7e99241..30f5a8f 100644
--- a/lib/lp/bugs/tests/test_bug_notification_recipients.py
+++ b/lib/lp/bugs/tests/test_bug_notification_recipients.py
@@ -23,7 +23,6 @@ from lp.testing.matchers import HasQueryCount
2323
2424
25class TestBugNotificationRecipients(TestCaseWithFactory):25class TestBugNotificationRecipients(TestCaseWithFactory):
26
27 layer = DatabaseFunctionalLayer26 layer = DatabaseFunctionalLayer
2827
29 def getFreshRecipients(self, bug):28 def getFreshRecipients(self, bug):
diff --git a/lib/lp/bugs/tests/test_bugbranch.py b/lib/lp/bugs/tests/test_bugbranch.py
index 77a0934..76cacdc 100644
--- a/lib/lp/bugs/tests/test_bugbranch.py
+++ b/lib/lp/bugs/tests/test_bugbranch.py
@@ -19,7 +19,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1919
2020
21class TestBugBranchSet(TestCaseWithFactory):21class TestBugBranchSet(TestCaseWithFactory):
22
23 layer = DatabaseFunctionalLayer22 layer = DatabaseFunctionalLayer
2423
25 def test_bugbranchset_provides_IBugBranchSet(self):24 def test_bugbranchset_provides_IBugBranchSet(self):
@@ -148,7 +147,6 @@ class TestBugBranchSet(TestCaseWithFactory):
148147
149148
150class TestBugBranch(TestCaseWithFactory):149class TestBugBranch(TestCaseWithFactory):
151
152 layer = DatabaseFunctionalLayer150 layer = DatabaseFunctionalLayer
153151
154 def setUp(self):152 def setUp(self):
diff --git a/lib/lp/bugs/tests/test_bugchanges.py b/lib/lp/bugs/tests/test_bugchanges.py
index 3c55ed3..1067d89 100644
--- a/lib/lp/bugs/tests/test_bugchanges.py
+++ b/lib/lp/bugs/tests/test_bugchanges.py
@@ -31,7 +31,6 @@ from lp.testing.pages import webservice_for_person
3131
3232
33class TestBugChanges(TestCaseWithFactory):33class TestBugChanges(TestCaseWithFactory):
34
35 layer = LaunchpadFunctionalLayer34 layer = LaunchpadFunctionalLayer
3635
37 def setUp(self):36 def setUp(self):
diff --git a/lib/lp/bugs/tests/test_bugnomination.py b/lib/lp/bugs/tests/test_bugnomination.py
index 7fa1c76..19c0a15 100644
--- a/lib/lp/bugs/tests/test_bugnomination.py
+++ b/lib/lp/bugs/tests/test_bugnomination.py
@@ -27,7 +27,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
2727
2828
29class BugNominationTestCase(TestCaseWithFactory):29class BugNominationTestCase(TestCaseWithFactory):
30
31 layer = DatabaseFunctionalLayer30 layer = DatabaseFunctionalLayer
3231
33 def test_implementation(self):32 def test_implementation(self):
@@ -307,7 +306,6 @@ class TestBugCanBeNominatedForDistroSeries(
307306
308307
309class TestCanApprove(TestCaseWithFactory):308class TestCanApprove(TestCaseWithFactory):
310
311 layer = DatabaseFunctionalLayer309 layer = DatabaseFunctionalLayer
312310
313 def test_normal_user_cannot_approve(self):311 def test_normal_user_cannot_approve(self):
@@ -458,7 +456,6 @@ class TestCanApprove(TestCaseWithFactory):
458456
459457
460class BugNominationSetTestCase(TestCaseWithFactory):458class BugNominationSetTestCase(TestCaseWithFactory):
461
462 layer = DatabaseFunctionalLayer459 layer = DatabaseFunctionalLayer
463460
464 def test_get(self):461 def test_get(self):
diff --git a/lib/lp/bugs/tests/test_bugs_webservice.py b/lib/lp/bugs/tests/test_bugs_webservice.py
index 29be4de..6851520 100644
--- a/lib/lp/bugs/tests/test_bugs_webservice.py
+++ b/lib/lp/bugs/tests/test_bugs_webservice.py
@@ -186,7 +186,6 @@ class TestBugCommentRepresentation(TestCaseWithFactory):
186186
187187
188class TestBugScaling(TestCaseWithFactory):188class TestBugScaling(TestCaseWithFactory):
189
190 layer = LaunchpadFunctionalLayer189 layer = LaunchpadFunctionalLayer
191190
192 def test_attachments_query_counts_constant(self):191 def test_attachments_query_counts_constant(self):
@@ -265,7 +264,6 @@ class TestBugScaling(TestCaseWithFactory):
265264
266265
267class TestBugMessages(TestCaseWithFactory):266class TestBugMessages(TestCaseWithFactory):
268
269 layer = DatabaseFunctionalLayer267 layer = DatabaseFunctionalLayer
270268
271 def setUp(self):269 def setUp(self):
@@ -359,7 +357,6 @@ class TestPostBugWithLargeCollections(TestCaseWithFactory):
359357
360358
361class TestErrorHandling(TestCaseWithFactory):359class TestErrorHandling(TestCaseWithFactory):
362
363 layer = LaunchpadFunctionalLayer360 layer = LaunchpadFunctionalLayer
364361
365 def test_add_duplicate_bugtask_for_project_gives_bad_request(self):362 def test_add_duplicate_bugtask_for_project_gives_bad_request(self):
@@ -425,7 +422,6 @@ class TestErrorHandling(TestCaseWithFactory):
425422
426423
427class BugSetTestCase(TestCaseWithFactory):424class BugSetTestCase(TestCaseWithFactory):
428
429 layer = DatabaseFunctionalLayer425 layer = DatabaseFunctionalLayer
430426
431 def makeAPITarget(self, bug_policy):427 def makeAPITarget(self, bug_policy):
@@ -481,7 +477,6 @@ class BugSetTestCase(TestCaseWithFactory):
481477
482478
483class TestBugDateLastUpdated(TestCaseWithFactory):479class TestBugDateLastUpdated(TestCaseWithFactory):
484
485 layer = DatabaseFunctionalLayer480 layer = DatabaseFunctionalLayer
486481
487 def make_old_bug(self):482 def make_old_bug(self):
diff --git a/lib/lp/bugs/tests/test_bugtaskfilter.py b/lib/lp/bugs/tests/test_bugtaskfilter.py
index 6c96281..fc87206 100644
--- a/lib/lp/bugs/tests/test_bugtaskfilter.py
+++ b/lib/lp/bugs/tests/test_bugtaskfilter.py
@@ -12,7 +12,6 @@ from lp.testing.matchers import HasQueryCount
1212
1313
14class TestFilterBugTasksByContext(TestCaseWithFactory):14class TestFilterBugTasksByContext(TestCaseWithFactory):
15
16 layer = DatabaseFunctionalLayer15 layer = DatabaseFunctionalLayer
1716
18 def test_simple_case(self):17 def test_simple_case(self):
diff --git a/lib/lp/bugs/tests/test_bugtaskflat_triggers.py b/lib/lp/bugs/tests/test_bugtaskflat_triggers.py
index 8330111..c62f7eb 100644
--- a/lib/lp/bugs/tests/test_bugtaskflat_triggers.py
+++ b/lib/lp/bugs/tests/test_bugtaskflat_triggers.py
@@ -138,7 +138,6 @@ class BugTaskFlatTestMixin(TestCaseWithFactory):
138138
139139
140class TestBugTaskFlatten(BugTaskFlatTestMixin):140class TestBugTaskFlatten(BugTaskFlatTestMixin):
141
142 layer = DatabaseFunctionalLayer141 layer = DatabaseFunctionalLayer
143142
144 def test_create(self):143 def test_create(self):
@@ -304,7 +303,6 @@ class TestBugTaskFlatten(BugTaskFlatTestMixin):
304303
305304
306class TestBugTaskFlatTriggers(BugTaskFlatTestMixin):305class TestBugTaskFlatTriggers(BugTaskFlatTestMixin):
307
308 layer = DatabaseFunctionalLayer306 layer = DatabaseFunctionalLayer
309307
310 def test_bugtask_create(self):308 def test_bugtask_create(self):
diff --git a/lib/lp/bugs/tests/test_bugtracker.py b/lib/lp/bugs/tests/test_bugtracker.py
index 3d60dd7..6bb19ca 100644
--- a/lib/lp/bugs/tests/test_bugtracker.py
+++ b/lib/lp/bugs/tests/test_bugtracker.py
@@ -37,7 +37,6 @@ from lp.testing.sampledata import ADMIN_EMAIL
3737
3838
39class TestBugTrackerSet(TestCaseWithFactory):39class TestBugTrackerSet(TestCaseWithFactory):
40
41 layer = DatabaseFunctionalLayer40 layer = DatabaseFunctionalLayer
4241
43 def test_trackers(self):42 def test_trackers(self):
diff --git a/lib/lp/bugs/tests/test_bugtracker_components.py b/lib/lp/bugs/tests/test_bugtracker_components.py
index 3194101..3da7150 100644
--- a/lib/lp/bugs/tests/test_bugtracker_components.py
+++ b/lib/lp/bugs/tests/test_bugtracker_components.py
@@ -13,7 +13,6 @@ __all__ = [] # type: List[str]
1313
1414
15class BugTrackerComponentTestCase(TestCaseWithFactory):15class BugTrackerComponentTestCase(TestCaseWithFactory):
16
17 layer = DatabaseFunctionalLayer16 layer = DatabaseFunctionalLayer
1817
19 def setUp(self, *args, **kwargs):18 def setUp(self, *args, **kwargs):
@@ -99,7 +98,6 @@ class BugTrackerComponentTestCase(TestCaseWithFactory):
9998
10099
101class TestBugTrackerWithComponents(TestCaseWithFactory):100class TestBugTrackerWithComponents(TestCaseWithFactory):
102
103 layer = DatabaseFunctionalLayer101 layer = DatabaseFunctionalLayer
104102
105 def setUp(self):103 def setUp(self):
@@ -186,7 +184,6 @@ class TestBugTrackerWithComponents(TestCaseWithFactory):
186184
187185
188class TestWebservice(TestCaseWithFactory):186class TestWebservice(TestCaseWithFactory):
189
190 layer = AppServerLayer187 layer = AppServerLayer
191188
192 def setUp(self):189 def setUp(self):
diff --git a/lib/lp/bugs/tests/test_bugtracker_vocabulary.py b/lib/lp/bugs/tests/test_bugtracker_vocabulary.py
index 57c8bfb..7b01697 100644
--- a/lib/lp/bugs/tests/test_bugtracker_vocabulary.py
+++ b/lib/lp/bugs/tests/test_bugtracker_vocabulary.py
@@ -11,7 +11,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1111
1212
13class TestBugTrackerVocabulary(TestCaseWithFactory):13class TestBugTrackerVocabulary(TestCaseWithFactory):
14
15 layer = DatabaseFunctionalLayer14 layer = DatabaseFunctionalLayer
1615
17 def setUp(self):16 def setUp(self):
@@ -94,7 +93,6 @@ class TestBugTrackerVocabulary(TestCaseWithFactory):
9493
9594
96class TestWebBugTrackerVocabulary(TestCaseWithFactory):95class TestWebBugTrackerVocabulary(TestCaseWithFactory):
97
98 layer = DatabaseFunctionalLayer96 layer = DatabaseFunctionalLayer
9997
100 def setUp(self):98 def setUp(self):
diff --git a/lib/lp/bugs/tests/test_bugwatch.py b/lib/lp/bugs/tests/test_bugwatch.py
index 8cf900d..a684b0f 100644
--- a/lib/lp/bugs/tests/test_bugwatch.py
+++ b/lib/lp/bugs/tests/test_bugwatch.py
@@ -404,7 +404,6 @@ class EmailAddressExtractBugTrackerAndBugTest(ExtractBugTrackerAndBugTest):
404404
405405
406class TestBugWatch(TestCaseWithFactory):406class TestBugWatch(TestCaseWithFactory):
407
408 layer = LaunchpadZopelessLayer407 layer = LaunchpadZopelessLayer
409408
410 def test_bugtasks_to_update(self):409 def test_bugtasks_to_update(self):
@@ -671,7 +670,6 @@ class TestBugWatchSetBulkOperations(TestCaseWithFactory):
671670
672671
673class TestBugWatchBugTasks(TestCaseWithFactory):672class TestBugWatchBugTasks(TestCaseWithFactory):
674
675 layer = DatabaseFunctionalLayer673 layer = DatabaseFunctionalLayer
676674
677 def setUp(self):675 def setUp(self):
@@ -725,7 +723,6 @@ class TestBugWatchActivityPruner(TestCaseWithFactory):
725723
726724
727class TestBugWatchResetting(TestCaseWithFactory):725class TestBugWatchResetting(TestCaseWithFactory):
728
729 layer = LaunchpadFunctionalLayer726 layer = LaunchpadFunctionalLayer
730727
731 def setUp(self):728 def setUp(self):
diff --git a/lib/lp/bugs/tests/test_bzremotecomponentfinder.py b/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
index 78abb69..47480f2 100644
--- a/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
+++ b/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
@@ -33,7 +33,6 @@ def read_test_file(name):
3333
3434
35class TestBugzillaRemoteComponentScraper(TestCaseWithFactory):35class TestBugzillaRemoteComponentScraper(TestCaseWithFactory):
36
37 layer = DatabaseFunctionalLayer36 layer = DatabaseFunctionalLayer
3837
39 def setUp(self):38 def setUp(self):
@@ -89,7 +88,6 @@ class TestBugzillaRemoteComponentScraper(TestCaseWithFactory):
8988
9089
91class TestBugzillaRemoteComponentFinder(TestCaseWithFactory):90class TestBugzillaRemoteComponentFinder(TestCaseWithFactory):
92
93 layer = DatabaseFunctionalLayer91 layer = DatabaseFunctionalLayer
9492
95 def setUp(self):93 def setUp(self):
diff --git a/lib/lp/bugs/tests/test_cve.py b/lib/lp/bugs/tests/test_cve.py
index c3e7c4f..e444ead 100644
--- a/lib/lp/bugs/tests/test_cve.py
+++ b/lib/lp/bugs/tests/test_cve.py
@@ -110,7 +110,6 @@ class TestCveSet(TestCaseWithFactory):
110110
111111
112class TestBugLinks(TestCaseWithFactory):112class TestBugLinks(TestCaseWithFactory):
113
114 layer = DatabaseFunctionalLayer113 layer = DatabaseFunctionalLayer
115114
116 def test_link_and_unlink(self):115 def test_link_and_unlink(self):
diff --git a/lib/lp/bugs/tests/test_structuralsubscription.py b/lib/lp/bugs/tests/test_structuralsubscription.py
index d839266..ce1f712 100644
--- a/lib/lp/bugs/tests/test_structuralsubscription.py
+++ b/lib/lp/bugs/tests/test_structuralsubscription.py
@@ -36,7 +36,6 @@ RESULT_SETS = ResultSet, EmptyResultSet, DecoratedResultSet
3636
3737
38class TestStructuralSubscription(TestCaseWithFactory):38class TestStructuralSubscription(TestCaseWithFactory):
39
40 layer = DatabaseFunctionalLayer39 layer = DatabaseFunctionalLayer
4140
42 def setUp(self):41 def setUp(self):
@@ -485,7 +484,6 @@ class TestStructuralSubscriptionFiltersForProductSeries(
485484
486485
487class TestGetStructuralSubscriptionTargets(TestCaseWithFactory):486class TestGetStructuralSubscriptionTargets(TestCaseWithFactory):
488
489 layer = DatabaseFunctionalLayer487 layer = DatabaseFunctionalLayer
490488
491 def test_product_target(self):489 def test_product_target(self):
@@ -571,7 +569,6 @@ class TestGetStructuralSubscriptionTargets(TestCaseWithFactory):
571569
572570
573class TestGetStructuralSubscriptionsForBug(TestCaseWithFactory):571class TestGetStructuralSubscriptionsForBug(TestCaseWithFactory):
574
575 layer = DatabaseFunctionalLayer572 layer = DatabaseFunctionalLayer
576573
577 def setUp(self):574 def setUp(self):
@@ -677,7 +674,6 @@ class TestGetStructuralSubscriptionsForBug(TestCaseWithFactory):
677674
678675
679class TestGetStructuralSubscriptions(TestCaseWithFactory):676class TestGetStructuralSubscriptions(TestCaseWithFactory):
680
681 layer = DatabaseFunctionalLayer677 layer = DatabaseFunctionalLayer
682678
683 def make_product_with_bug(self):679 def make_product_with_bug(self):
@@ -772,7 +768,6 @@ class TestGetStructuralSubscriptions(TestCaseWithFactory):
772768
773769
774class TestGetStructuralSubscribers(TestCaseWithFactory):770class TestGetStructuralSubscribers(TestCaseWithFactory):
775
776 layer = DatabaseFunctionalLayer771 layer = DatabaseFunctionalLayer
777772
778 def make_product_with_bug(self):773 def make_product_with_bug(self):
diff --git a/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py b/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
index a9ee89a..9eb6933 100644
--- a/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
+++ b/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
@@ -190,7 +190,6 @@ class UnrestrictedStructuralSubscriptionTestBase(
190class TestStructuralSubscriptionForDistro(190class TestStructuralSubscriptionForDistro(
191 RestrictedStructuralSubscriptionTestBase, TestCaseWithFactory191 RestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
192):192):
193
194 layer = LaunchpadFunctionalLayer193 layer = LaunchpadFunctionalLayer
195194
196 def setUp(self):195 def setUp(self):
@@ -266,7 +265,6 @@ class TestStructuralSubscriptionForDistro(
266class TestStructuralSubscriptionForProduct(265class TestStructuralSubscriptionForProduct(
267 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory266 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
268):267):
269
270 layer = LaunchpadFunctionalLayer268 layer = LaunchpadFunctionalLayer
271269
272 def setUp(self):270 def setUp(self):
@@ -277,7 +275,6 @@ class TestStructuralSubscriptionForProduct(
277class TestStructuralSubscriptionForDistroSourcePackage(275class TestStructuralSubscriptionForDistroSourcePackage(
278 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory276 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
279):277):
280
281 layer = LaunchpadFunctionalLayer278 layer = LaunchpadFunctionalLayer
282279
283 def setUp(self):280 def setUp(self):
@@ -289,7 +286,6 @@ class TestStructuralSubscriptionForDistroSourcePackage(
289class TestStructuralSubscriptionForMilestone(286class TestStructuralSubscriptionForMilestone(
290 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory287 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
291):288):
292
293 layer = LaunchpadFunctionalLayer289 layer = LaunchpadFunctionalLayer
294290
295 def setUp(self):291 def setUp(self):
@@ -301,7 +297,6 @@ class TestStructuralSubscriptionForMilestone(
301class TestStructuralSubscriptionForDistroSeries(297class TestStructuralSubscriptionForDistroSeries(
302 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory298 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
303):299):
304
305 layer = LaunchpadFunctionalLayer300 layer = LaunchpadFunctionalLayer
306301
307 def setUp(self):302 def setUp(self):
@@ -313,7 +308,6 @@ class TestStructuralSubscriptionForDistroSeries(
313class TestStructuralSubscriptionForProjectGroup(308class TestStructuralSubscriptionForProjectGroup(
314 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory309 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
315):310):
316
317 layer = LaunchpadFunctionalLayer311 layer = LaunchpadFunctionalLayer
318312
319 def setUp(self):313 def setUp(self):
@@ -325,7 +319,6 @@ class TestStructuralSubscriptionForProjectGroup(
325class TestStructuralSubscriptionForProductSeries(319class TestStructuralSubscriptionForProductSeries(
326 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory320 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
327):321):
328
329 layer = LaunchpadFunctionalLayer322 layer = LaunchpadFunctionalLayer
330323
331 def setUp(self):324 def setUp(self):
@@ -477,7 +470,6 @@ class TestStructuralSubscriptionTargetHelper(TestCaseWithFactory):
477470
478471
479class TestGetAllStructuralSubscriptionsForTarget(TestCaseWithFactory):472class TestGetAllStructuralSubscriptionsForTarget(TestCaseWithFactory):
480
481 layer = DatabaseFunctionalLayer473 layer = DatabaseFunctionalLayer
482474
483 def setUp(self):475 def setUp(self):
diff --git a/lib/lp/bugs/tests/test_vulnerability.py b/lib/lp/bugs/tests/test_vulnerability.py
index 3289b07..0cec967 100644
--- a/lib/lp/bugs/tests/test_vulnerability.py
+++ b/lib/lp/bugs/tests/test_vulnerability.py
@@ -19,7 +19,6 @@ from lp.testing.pages import webservice_for_person
1919
2020
21class TestVulnerabilityWebService(TestCaseWithFactory):21class TestVulnerabilityWebService(TestCaseWithFactory):
22
23 layer = DatabaseFunctionalLayer22 layer = DatabaseFunctionalLayer
2423
25 def test_editing_an_existing_vulnerability_attributes(self):24 def test_editing_an_existing_vulnerability_attributes(self):
diff --git a/lib/lp/bugs/tests/test_yuitests.py b/lib/lp/bugs/tests/test_yuitests.py
index 431fbd9..7ba7c62 100644
--- a/lib/lp/bugs/tests/test_yuitests.py
+++ b/lib/lp/bugs/tests/test_yuitests.py
@@ -11,7 +11,6 @@ __all__ = [] # type: List[str]
1111
1212
13class BugsYUIUnitTestCase(YUIUnitTestCase):13class BugsYUIUnitTestCase(YUIUnitTestCase):
14
15 layer = YUITestLayer14 layer = YUITestLayer
16 suite_name = "BugsYUIUnitTests"15 suite_name = "BugsYUIUnitTests"
1716
diff --git a/lib/lp/bugs/vocabularies.py b/lib/lp/bugs/vocabularies.py
index d6480bf..9b337e0 100644
--- a/lib/lp/bugs/vocabularies.py
+++ b/lib/lp/bugs/vocabularies.py
@@ -86,7 +86,6 @@ class UsesBugsDistributionVocabulary(DistributionVocabulary):
8686
8787
88class BugVocabulary(SQLObjectVocabularyBase):88class BugVocabulary(SQLObjectVocabularyBase):
89
90 _table = Bug89 _table = Bug
91 _orderBy = "id"90 _orderBy = "id"
9291
diff --git a/lib/lp/buildmaster/browser/tests/test_builder.py b/lib/lp/buildmaster/browser/tests/test_builder.py
index e74b3ed..a582dc7 100644
--- a/lib/lp/buildmaster/browser/tests/test_builder.py
+++ b/lib/lp/buildmaster/browser/tests/test_builder.py
@@ -38,7 +38,6 @@ def builders_homepage_render():
3838
3939
40class TestBuilderSetNavigation(TestCaseWithFactory):40class TestBuilderSetNavigation(TestCaseWithFactory):
41
42 layer = DatabaseFunctionalLayer41 layer = DatabaseFunctionalLayer
4342
44 def test_binary_package_build_api_redirects(self):43 def test_binary_package_build_api_redirects(self):
@@ -122,7 +121,6 @@ class TestBuilderSetNavigation(TestCaseWithFactory):
122121
123122
124class TestBuildersHomepage(TestCaseWithFactory, BuildCreationMixin):123class TestBuildersHomepage(TestCaseWithFactory, BuildCreationMixin):
125
126 layer = LaunchpadFunctionalLayer124 layer = LaunchpadFunctionalLayer
127125
128 def setUp(self):126 def setUp(self):
diff --git a/lib/lp/buildmaster/browser/tests/test_builder_views.py b/lib/lp/buildmaster/browser/tests/test_builder_views.py
index 8bfb548..98446e2 100644
--- a/lib/lp/buildmaster/browser/tests/test_builder_views.py
+++ b/lib/lp/buildmaster/browser/tests/test_builder_views.py
@@ -34,7 +34,6 @@ from lp.translations.interfaces.translationtemplatesbuild import (
3434
3535
36class TestgetSpecificJobs(TestCaseWithFactory):36class TestgetSpecificJobs(TestCaseWithFactory):
37
38 layer = LaunchpadFunctionalLayer37 layer = LaunchpadFunctionalLayer
3938
40 def createTranslationTemplateBuild(self):39 def createTranslationTemplateBuild(self):
@@ -158,7 +157,6 @@ class BuildCreationMixin:
158157
159158
160class TestBuilderHistoryView(TestCaseWithFactory, BuildCreationMixin):159class TestBuilderHistoryView(TestCaseWithFactory, BuildCreationMixin):
161
162 layer = LaunchpadFunctionalLayer160 layer = LaunchpadFunctionalLayer
163161
164 nb_objects = 2162 nb_objects = 2
diff --git a/lib/lp/buildmaster/downloader.py b/lib/lp/buildmaster/downloader.py
index 4c9fa13..68aab4d 100644
--- a/lib/lp/buildmaster/downloader.py
+++ b/lib/lp/buildmaster/downloader.py
@@ -25,7 +25,6 @@ from twisted.protocols import amp
2525
2626
27class DownloadCommand(amp.Command):27class DownloadCommand(amp.Command):
28
29 arguments = [28 arguments = [
30 (b"file_url", amp.Unicode()),29 (b"file_url", amp.Unicode()),
31 (b"path_to_write", amp.Unicode()),30 (b"path_to_write", amp.Unicode()),
@@ -39,7 +38,6 @@ class DownloadCommand(amp.Command):
3938
4039
41class RequestProxyTokenCommand(amp.Command):40class RequestProxyTokenCommand(amp.Command):
42
43 arguments = [41 arguments = [
44 (b"url", amp.Unicode()),42 (b"url", amp.Unicode()),
45 (b"auth_header", amp.String()),43 (b"auth_header", amp.String()),
diff --git a/lib/lp/buildmaster/enums.py b/lib/lp/buildmaster/enums.py
index ad32e14..ee1d90c 100644
--- a/lib/lp/buildmaster/enums.py
+++ b/lib/lp/buildmaster/enums.py
@@ -286,7 +286,6 @@ class BuildQueueStatus(DBEnumeratedType):
286286
287287
288class BuilderCleanStatus(DBEnumeratedType):288class BuilderCleanStatus(DBEnumeratedType):
289
290 CLEAN = DBItem(289 CLEAN = DBItem(
291 0,290 0,
292 """291 """
@@ -316,7 +315,6 @@ class BuilderCleanStatus(DBEnumeratedType):
316315
317316
318class BuilderResetProtocol(DBEnumeratedType):317class BuilderResetProtocol(DBEnumeratedType):
319
320 PROTO_1_1 = DBItem(318 PROTO_1_1 = DBItem(
321 11,319 11,
322 """320 """
diff --git a/lib/lp/buildmaster/interfaces/builder.py b/lib/lp/buildmaster/interfaces/builder.py
index afca0b3..d81c01c 100644
--- a/lib/lp/buildmaster/interfaces/builder.py
+++ b/lib/lp/buildmaster/interfaces/builder.py
@@ -119,7 +119,6 @@ class IBuilderModerateAttributes(Interface):
119119
120120
121class IBuilderView(IHasBuildRecords, IHasOwner):121class IBuilderView(IHasBuildRecords, IHasOwner):
122
123 id = Attribute("Builder identifier")122 id = Attribute("Builder identifier")
124123
125 processor = exported(124 processor = exported(
diff --git a/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py b/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
index 7fdf254..bdb07b6 100644
--- a/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
+++ b/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
@@ -149,7 +149,6 @@ BuildArgs = TypedDict(
149149
150150
151class IBuildFarmJobBehaviour(Interface):151class IBuildFarmJobBehaviour(Interface):
152
153 builder_type = Attribute(152 builder_type = Attribute(
154 "The name of the builder type to use for this build, corresponding "153 "The name of the builder type to use for this build, corresponding "
155 "to a launchpad-buildd build manager tag."154 "to a launchpad-buildd build manager tag."
diff --git a/lib/lp/buildmaster/manager.py b/lib/lp/buildmaster/manager.py
index 17c90a6..7f2b870 100644
--- a/lib/lp/buildmaster/manager.py
+++ b/lib/lp/buildmaster/manager.py
@@ -166,7 +166,6 @@ class PrefetchedBuildCandidates:
166166
167167
168class BaseBuilderFactory:168class BaseBuilderFactory:
169
170 date_updated = None169 date_updated = None
171170
172 def update(self):171 def update(self):
diff --git a/lib/lp/buildmaster/queuedepth.py b/lib/lp/buildmaster/queuedepth.py
index 702af11..05adfa1 100644
--- a/lib/lp/buildmaster/queuedepth.py
+++ b/lib/lp/buildmaster/queuedepth.py
@@ -228,6 +228,7 @@ def estimate_job_delay(bq, builder_stats):
228 :return: An integer value holding the sum of delays (in seconds)228 :return: An integer value holding the sum of delays (in seconds)
229 caused by the jobs that are ahead of and competing with the JOI.229 caused by the jobs that are ahead of and competing with the JOI.
230 """230 """
231
231 # XXX: This is broken with multi-Processor buildds, as it only232 # XXX: This is broken with multi-Processor buildds, as it only
232 # considers competition from the same processor.233 # considers competition from the same processor.
233 def jobs_compete_for_builders(a, b):234 def jobs_compete_for_builders(a, b):
diff --git a/lib/lp/buildmaster/tests/test_builder.py b/lib/lp/buildmaster/tests/test_builder.py
index f122c43..333ca03 100644
--- a/lib/lp/buildmaster/tests/test_builder.py
+++ b/lib/lp/buildmaster/tests/test_builder.py
@@ -417,7 +417,6 @@ class TestFindBuildCandidatesGeneralCases(TestFindBuildCandidatesBase):
417417
418418
419class TestFindBuildCandidatesPPABase(TestFindBuildCandidatesBase):419class TestFindBuildCandidatesPPABase(TestFindBuildCandidatesBase):
420
421 ppa_joe_private = False420 ppa_joe_private = False
422 ppa_jim_private = False421 ppa_jim_private = False
423422
@@ -531,7 +530,6 @@ class TestFindBuildCandidatesPPA(TestFindBuildCandidatesPPABase):
531530
532531
533class TestFindBuildCandidatesPrivatePPA(TestFindBuildCandidatesPPABase):532class TestFindBuildCandidatesPrivatePPA(TestFindBuildCandidatesPPABase):
534
535 ppa_joe_private = True533 ppa_joe_private = True
536534
537 def test_findBuildCandidate_for_private_ppa(self):535 def test_findBuildCandidate_for_private_ppa(self):
diff --git a/lib/lp/buildmaster/tests/test_buildfarmjob.py b/lib/lp/buildmaster/tests/test_buildfarmjob.py
index e0973fe..8b8739b 100644
--- a/lib/lp/buildmaster/tests/test_buildfarmjob.py
+++ b/lib/lp/buildmaster/tests/test_buildfarmjob.py
@@ -31,7 +31,6 @@ from lp.testing.layers import (
3131
3232
33class TestBuildFarmJobBase:33class TestBuildFarmJobBase:
34
35 layer = DatabaseFunctionalLayer # type: Type[BaseLayer]34 layer = DatabaseFunctionalLayer # type: Type[BaseLayer]
3635
37 def setUp(self, *args, **kwargs):36 def setUp(self, *args, **kwargs):
@@ -225,7 +224,6 @@ class TestBuildFarmJobMixin(TestCaseWithFactory):
225224
226225
227class TestBuildFarmJobSet(TestBuildFarmJobBase, TestCaseWithFactory):226class TestBuildFarmJobSet(TestBuildFarmJobBase, TestCaseWithFactory):
228
229 layer = LaunchpadFunctionalLayer227 layer = LaunchpadFunctionalLayer
230228
231 def setUp(self):229 def setUp(self):
diff --git a/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py b/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
index a164b11..11c6a3e 100644
--- a/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
+++ b/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
@@ -173,7 +173,6 @@ class TestBuildFarmJobBehaviourBase(TestCaseWithFactory):
173173
174174
175class TestDispatchBuildToWorker(StatsMixin, TestCase):175class TestDispatchBuildToWorker(StatsMixin, TestCase):
176
177 layer = ZopelessLayer176 layer = ZopelessLayer
178 run_tests_with = AsynchronousDeferredRunTest177 run_tests_with = AsynchronousDeferredRunTest
179178
diff --git a/lib/lp/buildmaster/tests/test_interactor.py b/lib/lp/buildmaster/tests/test_interactor.py
index dc45dcc..d209b41 100644
--- a/lib/lp/buildmaster/tests/test_interactor.py
+++ b/lib/lp/buildmaster/tests/test_interactor.py
@@ -106,7 +106,6 @@ class MockBuilderFactory(BaseBuilderFactory):
106106
107107
108class TestBuilderInteractor(TestCase):108class TestBuilderInteractor(TestCase):
109
110 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)109 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
111110
112 def setUp(self):111 def setUp(self):
@@ -172,7 +171,6 @@ class TestBuilderInteractor(TestCase):
172171
173172
174class TestBuilderInteractorCleanWorker(TestCase):173class TestBuilderInteractorCleanWorker(TestCase):
175
176 run_tests_with = AsynchronousDeferredRunTest174 run_tests_with = AsynchronousDeferredRunTest
177175
178 @defer.inlineCallbacks176 @defer.inlineCallbacks
diff --git a/lib/lp/buildmaster/tests/test_manager.py b/lib/lp/buildmaster/tests/test_manager.py
index a0edb84..b87e95c 100644
--- a/lib/lp/buildmaster/tests/test_manager.py
+++ b/lib/lp/buildmaster/tests/test_manager.py
@@ -697,7 +697,6 @@ class TestWorkerScannerScan(StatsMixin, TestCaseWithFactory):
697697
698698
699class TestWorkerScannerWithLibrarian(TestCaseWithFactory):699class TestWorkerScannerWithLibrarian(TestCaseWithFactory):
700
701 layer = LaunchpadZopelessLayer700 layer = LaunchpadZopelessLayer
702 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=20)701 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=20)
703702
@@ -827,7 +826,6 @@ class TestWorkerScannerWithLibrarian(TestCaseWithFactory):
827826
828827
829class TestPrefetchedBuilderFactory(TestCaseWithFactory):828class TestPrefetchedBuilderFactory(TestCaseWithFactory):
830
831 layer = ZopelessDatabaseLayer829 layer = ZopelessDatabaseLayer
832830
833 def test_get(self):831 def test_get(self):
@@ -1021,7 +1019,6 @@ class FakeBuilddManager:
10211019
10221020
1023class TestWorkerScannerWithoutDB(TestCase):1021class TestWorkerScannerWithoutDB(TestCase):
1024
1025 layer = ZopelessDatabaseLayer1022 layer = ZopelessDatabaseLayer
1026 run_tests_with = AsynchronousDeferredRunTest1023 run_tests_with = AsynchronousDeferredRunTest
10271024
@@ -1320,7 +1317,6 @@ class TestCancellationChecking(TestCaseWithFactory):
13201317
13211318
1322class TestBuilddManager(TestCase):1319class TestBuilddManager(TestCase):
1323
1324 layer = LaunchpadZopelessLayer1320 layer = LaunchpadZopelessLayer
13251321
1326 def _stub_out_scheduleNextScanCycle(self):1322 def _stub_out_scheduleNextScanCycle(self):
@@ -1386,7 +1382,6 @@ class TestBuilddManager(TestCase):
13861382
13871383
1388class TestFailureAssessmentsAndStatsdMetrics(StatsMixin, TestCaseWithFactory):1384class TestFailureAssessmentsAndStatsdMetrics(StatsMixin, TestCaseWithFactory):
1389
1390 layer = ZopelessDatabaseLayer1385 layer = ZopelessDatabaseLayer
13911386
1392 def setUp(self):1387 def setUp(self):
@@ -1850,7 +1845,6 @@ def is_file_growing(filepath, poll_interval=1, poll_repeat=10):
18501845
18511846
1852class TestBuilddManagerScript(TestCaseWithFactory):1847class TestBuilddManagerScript(TestCaseWithFactory):
1853
1854 layer = LaunchpadScriptLayer1848 layer = LaunchpadScriptLayer
18551849
1856 def testBuilddManagerRuns(self):1850 def testBuilddManagerRuns(self):
diff --git a/lib/lp/buildmaster/tests/test_vocabularies.py b/lib/lp/buildmaster/tests/test_vocabularies.py
index f644a43..f7de6a4 100644
--- a/lib/lp/buildmaster/tests/test_vocabularies.py
+++ b/lib/lp/buildmaster/tests/test_vocabularies.py
@@ -9,7 +9,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
99
1010
11class TestBuilderResourceVocabulary(TestCaseWithFactory):11class TestBuilderResourceVocabulary(TestCaseWithFactory):
12
13 layer = ZopelessDatabaseLayer12 layer = ZopelessDatabaseLayer
1413
15 def test_provides_interface(self):14 def test_provides_interface(self):
diff --git a/lib/lp/buildmaster/vocabularies.py b/lib/lp/buildmaster/vocabularies.py
index 154e445..d6a439c 100644
--- a/lib/lp/buildmaster/vocabularies.py
+++ b/lib/lp/buildmaster/vocabularies.py
@@ -22,7 +22,6 @@ from lp.services.webapp.vocabulary import NamedSQLObjectVocabulary
2222
2323
24class ProcessorVocabulary(NamedSQLObjectVocabulary):24class ProcessorVocabulary(NamedSQLObjectVocabulary):
25
26 displayname = "Select a processor"25 displayname = "Select a processor"
27 _table = Processor26 _table = Processor
28 _orderBy = "name"27 _orderBy = "name"
diff --git a/lib/lp/charms/adapters/tests/test_buildarch.py b/lib/lp/charms/adapters/tests/test_buildarch.py
index c7659ba..a87528d 100644
--- a/lib/lp/charms/adapters/tests/test_buildarch.py
+++ b/lib/lp/charms/adapters/tests/test_buildarch.py
@@ -29,7 +29,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
2929
3030
31class TestCharmBaseConfiguration(WithScenarios, TestCase):31class TestCharmBaseConfiguration(WithScenarios, TestCase):
32
33 scenarios = [32 scenarios = [
34 (33 (
35 "expanded",34 "expanded",
@@ -118,7 +117,6 @@ class TestCharmBaseConfiguration(WithScenarios, TestCase):
118117
119118
120class TestDetermineInstancesToBuild(WithScenarios, TestCaseWithFactory):119class TestDetermineInstancesToBuild(WithScenarios, TestCaseWithFactory):
121
122 layer = LaunchpadZopelessLayer120 layer = LaunchpadZopelessLayer
123121
124 # Scenarios taken from the charmcraft build providers specification:122 # Scenarios taken from the charmcraft build providers specification:
diff --git a/lib/lp/charms/browser/charmrecipe.py b/lib/lp/charms/browser/charmrecipe.py
index aafa195..5183ce8 100644
--- a/lib/lp/charms/browser/charmrecipe.py
+++ b/lib/lp/charms/browser/charmrecipe.py
@@ -233,6 +233,7 @@ def builds_and_requests_for_recipe(recipe):
233 Builds that the user does not have permission to see are excluded (by233 Builds that the user does not have permission to see are excluded (by
234 the model code).234 the model code).
235 """235 """
236
236 # We need to interleave items of different types, so SQL can't do all237 # We need to interleave items of different types, so SQL can't do all
237 # the sorting for us.238 # the sorting for us.
238 def make_sort_key(*date_attrs):239 def make_sort_key(*date_attrs):
@@ -425,7 +426,6 @@ class CharmRecipeAddView(CharmRecipeAuthorizeMixin, LaunchpadFormView):
425class BaseCharmRecipeEditView(426class BaseCharmRecipeEditView(
426 CharmRecipeAuthorizeMixin, LaunchpadEditFormView427 CharmRecipeAuthorizeMixin, LaunchpadEditFormView
427):428):
428
429 schema = ICharmRecipeEditSchema429 schema = ICharmRecipeEditSchema
430 next_url = None430 next_url = None
431431
diff --git a/lib/lp/charms/browser/charmrecipelisting.py b/lib/lp/charms/browser/charmrecipelisting.py
index 4a47a81..384617b 100644
--- a/lib/lp/charms/browser/charmrecipelisting.py
+++ b/lib/lp/charms/browser/charmrecipelisting.py
@@ -22,7 +22,6 @@ from lp.services.webapp.batching import BatchNavigator
2222
2323
24class CharmRecipeListingView(LaunchpadView, FeedsMixin):24class CharmRecipeListingView(LaunchpadView, FeedsMixin):
25
26 feed_types = ()25 feed_types = ()
2726
28 source_enabled = True27 source_enabled = True
@@ -54,7 +53,6 @@ class CharmRecipeListingView(LaunchpadView, FeedsMixin):
5453
5554
56class GitCharmRecipeListingView(CharmRecipeListingView):55class GitCharmRecipeListingView(CharmRecipeListingView):
57
58 source_enabled = False56 source_enabled = False
5957
60 @property58 @property
@@ -65,7 +63,6 @@ class GitCharmRecipeListingView(CharmRecipeListingView):
6563
6664
67class PersonCharmRecipeListingView(CharmRecipeListingView):65class PersonCharmRecipeListingView(CharmRecipeListingView):
68
69 owner_enabled = False66 owner_enabled = False
7067
7168
diff --git a/lib/lp/charms/browser/tests/test_charmrecipe.py b/lib/lp/charms/browser/tests/test_charmrecipe.py
index 78bb21a..60c561e 100644
--- a/lib/lp/charms/browser/tests/test_charmrecipe.py
+++ b/lib/lp/charms/browser/tests/test_charmrecipe.py
@@ -76,7 +76,6 @@ from lp.testing.views import create_initialized_view, create_view
7676
7777
78class TestCharmRecipeNavigation(TestCaseWithFactory):78class TestCharmRecipeNavigation(TestCaseWithFactory):
79
80 layer = DatabaseFunctionalLayer79 layer = DatabaseFunctionalLayer
8180
82 def setUp(self):81 def setUp(self):
@@ -104,7 +103,6 @@ class TestCharmRecipeNavigation(TestCaseWithFactory):
104103
105104
106class BaseTestCharmRecipeView(BrowserTestCase):105class BaseTestCharmRecipeView(BrowserTestCase):
107
108 layer = LaunchpadFunctionalLayer106 layer = LaunchpadFunctionalLayer
109107
110 def setUp(self):108 def setUp(self):
diff --git a/lib/lp/charms/browser/tests/test_charmrecipebuild.py b/lib/lp/charms/browser/tests/test_charmrecipebuild.py
index 83df915..a105e5d 100644
--- a/lib/lp/charms/browser/tests/test_charmrecipebuild.py
+++ b/lib/lp/charms/browser/tests/test_charmrecipebuild.py
@@ -41,7 +41,6 @@ from lp.testing.views import create_initialized_view
4141
4242
43class TestCanonicalUrlForCharmRecipeBuild(TestCaseWithFactory):43class TestCanonicalUrlForCharmRecipeBuild(TestCaseWithFactory):
44
45 layer = DatabaseFunctionalLayer44 layer = DatabaseFunctionalLayer
4645
47 def setUp(self):46 def setUp(self):
@@ -67,7 +66,6 @@ class TestCanonicalUrlForCharmRecipeBuild(TestCaseWithFactory):
6766
6867
69class TestCharmRecipeBuildView(TestCaseWithFactory):68class TestCharmRecipeBuildView(TestCaseWithFactory):
70
71 layer = LaunchpadFunctionalLayer69 layer = LaunchpadFunctionalLayer
7270
73 def setUp(self):71 def setUp(self):
@@ -198,7 +196,6 @@ class TestCharmRecipeBuildView(TestCaseWithFactory):
198196
199197
200class TestCharmRecipeBuildOperations(BrowserTestCase):198class TestCharmRecipeBuildOperations(BrowserTestCase):
201
202 layer = DatabaseFunctionalLayer199 layer = DatabaseFunctionalLayer
203200
204 def setUp(self):201 def setUp(self):
diff --git a/lib/lp/charms/browser/tests/test_charmrecipelisting.py b/lib/lp/charms/browser/tests/test_charmrecipelisting.py
index 50e8b0a..a9baeea 100644
--- a/lib/lp/charms/browser/tests/test_charmrecipelisting.py
+++ b/lib/lp/charms/browser/tests/test_charmrecipelisting.py
@@ -28,7 +28,6 @@ from lp.testing.views import create_initialized_view
2828
2929
30class TestCharmRecipeListing(BrowserTestCase):30class TestCharmRecipeListing(BrowserTestCase):
31
32 layer = LaunchpadFunctionalLayer31 layer = LaunchpadFunctionalLayer
3332
34 def assertCharmRecipesLink(33 def assertCharmRecipesLink(
diff --git a/lib/lp/charms/browser/tests/test_hascharmrecipes.py b/lib/lp/charms/browser/tests/test_hascharmrecipes.py
index 19adca7..8925eb1 100644
--- a/lib/lp/charms/browser/tests/test_hascharmrecipes.py
+++ b/lib/lp/charms/browser/tests/test_hascharmrecipes.py
@@ -26,7 +26,6 @@ def make_git_ref(test_case):
2626
2727
28class TestHasCharmRecipesView(WithScenarios, TestCaseWithFactory):28class TestHasCharmRecipesView(WithScenarios, TestCaseWithFactory):
29
30 layer = DatabaseFunctionalLayer29 layer = DatabaseFunctionalLayer
3130
32 scenarios = [31 scenarios = [
@@ -89,7 +88,6 @@ class TestHasCharmRecipesView(WithScenarios, TestCaseWithFactory):
8988
9089
91class TestHasCharmRecipesMenu(WithScenarios, TestCaseWithFactory):90class TestHasCharmRecipesMenu(WithScenarios, TestCaseWithFactory):
92
93 layer = DatabaseFunctionalLayer91 layer = DatabaseFunctionalLayer
9492
95 scenarios = [93 scenarios = [
diff --git a/lib/lp/charms/mail/charmrecipebuild.py b/lib/lp/charms/mail/charmrecipebuild.py
index 172d9af..25dd581 100644
--- a/lib/lp/charms/mail/charmrecipebuild.py
+++ b/lib/lp/charms/mail/charmrecipebuild.py
@@ -12,7 +12,6 @@ from lp.services.webapp import canonical_url
1212
1313
14class CharmRecipeBuildMailer(BaseMailer):14class CharmRecipeBuildMailer(BaseMailer):
15
16 app = "charms"15 app = "charms"
1716
18 @classmethod17 @classmethod
diff --git a/lib/lp/charms/tests/test_charmbase.py b/lib/lp/charms/tests/test_charmbase.py
index c49bdce..d392e33 100644
--- a/lib/lp/charms/tests/test_charmbase.py
+++ b/lib/lp/charms/tests/test_charmbase.py
@@ -26,7 +26,6 @@ from lp.testing.pages import webservice_for_person
2626
2727
28class TestCharmBase(TestCaseWithFactory):28class TestCharmBase(TestCaseWithFactory):
29
30 layer = ZopelessDatabaseLayer29 layer = ZopelessDatabaseLayer
3130
32 def test_implements_interface(self):31 def test_implements_interface(self):
@@ -54,7 +53,6 @@ class TestCharmBase(TestCaseWithFactory):
5453
5554
56class TestCharmBaseProcessors(TestCaseWithFactory):55class TestCharmBaseProcessors(TestCaseWithFactory):
57
58 layer = ZopelessDatabaseLayer56 layer = ZopelessDatabaseLayer
5957
60 def setUp(self):58 def setUp(self):
@@ -108,7 +106,6 @@ class TestCharmBaseProcessors(TestCaseWithFactory):
108106
109107
110class TestCharmBaseSet(TestCaseWithFactory):108class TestCharmBaseSet(TestCaseWithFactory):
111
112 layer = ZopelessDatabaseLayer109 layer = ZopelessDatabaseLayer
113110
114 def test_getByDistroSeries(self):111 def test_getByDistroSeries(self):
@@ -133,7 +130,6 @@ class TestCharmBaseSet(TestCaseWithFactory):
133130
134131
135class TestCharmBaseWebservice(TestCaseWithFactory):132class TestCharmBaseWebservice(TestCaseWithFactory):
136
137 layer = DatabaseFunctionalLayer133 layer = DatabaseFunctionalLayer
138134
139 def test_new_unpriv(self):135 def test_new_unpriv(self):
diff --git a/lib/lp/charms/tests/test_charmhubclient.py b/lib/lp/charms/tests/test_charmhubclient.py
index b951718..c33a955 100644
--- a/lib/lp/charms/tests/test_charmhubclient.py
+++ b/lib/lp/charms/tests/test_charmhubclient.py
@@ -148,7 +148,6 @@ class RequestMatches(MatchesAll):
148148
149149
150class TestCharmhubClient(TestCaseWithFactory):150class TestCharmhubClient(TestCaseWithFactory):
151
152 layer = LaunchpadZopelessLayer151 layer = LaunchpadZopelessLayer
153152
154 def setUp(self):153 def setUp(self):
diff --git a/lib/lp/charms/tests/test_charmrecipe.py b/lib/lp/charms/tests/test_charmrecipe.py
index 0f3502b..f646124 100644
--- a/lib/lp/charms/tests/test_charmrecipe.py
+++ b/lib/lp/charms/tests/test_charmrecipe.py
@@ -119,7 +119,6 @@ from lp.testing.pages import webservice_for_person
119119
120120
121class TestCharmRecipeFeatureFlags(TestCaseWithFactory):121class TestCharmRecipeFeatureFlags(TestCaseWithFactory):
122
123 layer = LaunchpadZopelessLayer122 layer = LaunchpadZopelessLayer
124123
125 def test_feature_flag_disabled(self):124 def test_feature_flag_disabled(self):
@@ -140,7 +139,6 @@ class TestCharmRecipeFeatureFlags(TestCaseWithFactory):
140139
141140
142class TestCharmRecipe(TestCaseWithFactory):141class TestCharmRecipe(TestCaseWithFactory):
143
144 layer = DatabaseFunctionalLayer142 layer = DatabaseFunctionalLayer
145143
146 def setUp(self):144 def setUp(self):
@@ -1020,7 +1018,6 @@ class TestCharmRecipe(TestCaseWithFactory):
10201018
10211019
1022class TestCharmRecipeAuthorization(TestCaseWithFactory):1020class TestCharmRecipeAuthorization(TestCaseWithFactory):
1023
1024 layer = DatabaseFunctionalLayer1021 layer = DatabaseFunctionalLayer
10251022
1026 def setUp(self):1023 def setUp(self):
@@ -1215,7 +1212,6 @@ class TestCharmRecipeAuthorization(TestCaseWithFactory):
12151212
12161213
1217class TestCharmRecipeDeleteWithBuilds(TestCaseWithFactory):1214class TestCharmRecipeDeleteWithBuilds(TestCaseWithFactory):
1218
1219 layer = LaunchpadFunctionalLayer1215 layer = LaunchpadFunctionalLayer
12201216
1221 def setUp(self):1217 def setUp(self):
@@ -1333,7 +1329,6 @@ class TestCharmRecipeDeleteWithBuilds(TestCaseWithFactory):
13331329
13341330
1335class TestCharmRecipeSet(TestCaseWithFactory):1331class TestCharmRecipeSet(TestCaseWithFactory):
1336
1337 layer = DatabaseFunctionalLayer1332 layer = DatabaseFunctionalLayer
13381333
1339 def setUp(self):1334 def setUp(self):
@@ -1830,7 +1825,6 @@ class TestCharmRecipeSet(TestCaseWithFactory):
18301825
18311826
1832class TestCharmRecipeWebservice(TestCaseWithFactory):1827class TestCharmRecipeWebservice(TestCaseWithFactory):
1833
1834 layer = LaunchpadFunctionalLayer1828 layer = LaunchpadFunctionalLayer
18351829
1836 def setUp(self):1830 def setUp(self):
diff --git a/lib/lp/charms/tests/test_charmrecipebuild.py b/lib/lp/charms/tests/test_charmrecipebuild.py
index cde6235..e3816fe 100644
--- a/lib/lp/charms/tests/test_charmrecipebuild.py
+++ b/lib/lp/charms/tests/test_charmrecipebuild.py
@@ -78,7 +78,6 @@ expected_body = """\
7878
7979
80class TestCharmRecipeBuild(TestCaseWithFactory):80class TestCharmRecipeBuild(TestCaseWithFactory):
81
82 layer = LaunchpadZopelessLayer81 layer = LaunchpadZopelessLayer
8382
84 def setUp(self):83 def setUp(self):
@@ -805,7 +804,6 @@ class TestCharmRecipeBuild(TestCaseWithFactory):
805804
806805
807class TestCharmRecipeBuildSet(TestCaseWithFactory):806class TestCharmRecipeBuildSet(TestCaseWithFactory):
808
809 layer = LaunchpadZopelessLayer807 layer = LaunchpadZopelessLayer
810808
811 def setUp(self):809 def setUp(self):
@@ -868,7 +866,6 @@ class TestCharmRecipeBuildSet(TestCaseWithFactory):
868866
869867
870class TestCharmRecipeBuildWebservice(TestCaseWithFactory):868class TestCharmRecipeBuildWebservice(TestCaseWithFactory):
871
872 layer = LaunchpadFunctionalLayer869 layer = LaunchpadFunctionalLayer
873870
874 def setUp(self):871 def setUp(self):
diff --git a/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py b/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
index 2851a9f..07eb6e8 100644
--- a/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
+++ b/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
@@ -78,7 +78,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
7878
7979
80class TestCharmRecipeBuildBehaviourBase(TestCaseWithFactory):80class TestCharmRecipeBuildBehaviourBase(TestCaseWithFactory):
81
82 layer = ZopelessDatabaseLayer81 layer = ZopelessDatabaseLayer
8382
84 def setUp(self):83 def setUp(self):
@@ -160,7 +159,6 @@ class TestCharmRecipeBuildBehaviour(TestCharmRecipeBuildBehaviourBase):
160class TestAsyncCharmRecipeBuildBehaviour(159class TestAsyncCharmRecipeBuildBehaviour(
161 StatsMixin, TestCharmRecipeBuildBehaviourBase160 StatsMixin, TestCharmRecipeBuildBehaviourBase
162):161):
163
164 run_tests_with = AsynchronousDeferredRunTestForBrokenTwisted.make_factory(162 run_tests_with = AsynchronousDeferredRunTestForBrokenTwisted.make_factory(
165 timeout=30163 timeout=30
166 )164 )
diff --git a/lib/lp/charms/tests/test_charmrecipebuildjob.py b/lib/lp/charms/tests/test_charmrecipebuildjob.py
index 0d671f0..87ee452 100644
--- a/lib/lp/charms/tests/test_charmrecipebuildjob.py
+++ b/lib/lp/charms/tests/test_charmrecipebuildjob.py
@@ -95,7 +95,6 @@ class FileUploaded(MatchesListwise):
9595
9696
97class TestCharmRecipeBuildJob(TestCaseWithFactory):97class TestCharmRecipeBuildJob(TestCaseWithFactory):
98
99 layer = DatabaseFunctionalLayer98 layer = DatabaseFunctionalLayer
10099
101 def setUp(self):100 def setUp(self):
@@ -114,7 +113,6 @@ class TestCharmRecipeBuildJob(TestCaseWithFactory):
114113
115114
116class TestCharmhubUploadJob(TestCaseWithFactory):115class TestCharmhubUploadJob(TestCaseWithFactory):
117
118 layer = LaunchpadZopelessLayer116 layer = LaunchpadZopelessLayer
119117
120 def setUp(self):118 def setUp(self):
diff --git a/lib/lp/charms/tests/test_charmrecipejob.py b/lib/lp/charms/tests/test_charmrecipejob.py
index 53e4bca..2b33d2e 100644
--- a/lib/lp/charms/tests/test_charmrecipejob.py
+++ b/lib/lp/charms/tests/test_charmrecipejob.py
@@ -46,7 +46,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
4646
4747
48class TestCharmRecipeJob(TestCaseWithFactory):48class TestCharmRecipeJob(TestCaseWithFactory):
49
50 layer = ZopelessDatabaseLayer49 layer = ZopelessDatabaseLayer
5150
52 def setUp(self):51 def setUp(self):
@@ -63,7 +62,6 @@ class TestCharmRecipeJob(TestCaseWithFactory):
6362
6463
65class TestCharmRecipeRequestBuildsJob(TestCaseWithFactory):64class TestCharmRecipeRequestBuildsJob(TestCaseWithFactory):
66
67 layer = ZopelessDatabaseLayer65 layer = ZopelessDatabaseLayer
6866
69 def setUp(self):67 def setUp(self):
diff --git a/lib/lp/code/adapters/tests/test_branch.py b/lib/lp/code/adapters/tests/test_branch.py
index 4d83ca1..3bbd844 100644
--- a/lib/lp/code/adapters/tests/test_branch.py
+++ b/lib/lp/code/adapters/tests/test_branch.py
@@ -13,7 +13,6 @@ from lp.testing.layers import LaunchpadFunctionalLayer
1313
1414
15class TestBranchMergeProposalDelta(TestCase):15class TestBranchMergeProposalDelta(TestCase):
16
17 layer = LaunchpadFunctionalLayer16 layer = LaunchpadFunctionalLayer
1817
19 def setUp(self):18 def setUp(self):
diff --git a/lib/lp/code/adapters/tests/test_branchcollection.py b/lib/lp/code/adapters/tests/test_branchcollection.py
index a2fdbaa..c547bcd 100644
--- a/lib/lp/code/adapters/tests/test_branchcollection.py
+++ b/lib/lp/code/adapters/tests/test_branchcollection.py
@@ -10,7 +10,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1010
1111
12class TestPersonProduct(TestCaseWithFactory):12class TestPersonProduct(TestCaseWithFactory):
13
14 layer = DatabaseFunctionalLayer13 layer = DatabaseFunctionalLayer
1514
16 def test_person_product(self):15 def test_person_product(self):
diff --git a/lib/lp/code/adapters/tests/test_gitrepository.py b/lib/lp/code/adapters/tests/test_gitrepository.py
index 94282d4..5fc0de1 100644
--- a/lib/lp/code/adapters/tests/test_gitrepository.py
+++ b/lib/lp/code/adapters/tests/test_gitrepository.py
@@ -11,7 +11,6 @@ from lp.testing.layers import LaunchpadFunctionalLayer
1111
1212
13class TestGitRepositoryDelta(TestCaseWithFactory):13class TestGitRepositoryDelta(TestCaseWithFactory):
14
15 layer = LaunchpadFunctionalLayer14 layer = LaunchpadFunctionalLayer
1615
17 def test_no_modification(self):16 def test_no_modification(self):
diff --git a/lib/lp/code/browser/bazaar.py b/lib/lp/code/browser/bazaar.py
index 9a65327..1a751fd 100644
--- a/lib/lp/code/browser/bazaar.py
+++ b/lib/lp/code/browser/bazaar.py
@@ -25,7 +25,6 @@ from lp.services.webapp.authorization import precache_permission_for_objects
2525
2626
27class BazaarApplicationView(LaunchpadView):27class BazaarApplicationView(LaunchpadView):
28
29 page_title = "Launchpad Branches"28 page_title = "Launchpad Branches"
3029
31 @property30 @property
diff --git a/lib/lp/code/browser/branch.py b/lib/lp/code/browser/branch.py
index ae6115a..467a1bc 100644
--- a/lib/lp/code/browser/branch.py
+++ b/lib/lp/code/browser/branch.py
@@ -139,7 +139,6 @@ class BranchBreadcrumb(NameBreadcrumb):
139139
140140
141class BranchNavigation(WebhookTargetNavigationMixin, Navigation):141class BranchNavigation(WebhookTargetNavigationMixin, Navigation):
142
143 usedfor = IBranch142 usedfor = IBranch
144143
145 @stepthrough("+bug")144 @stepthrough("+bug")
@@ -392,7 +391,6 @@ class BranchView(
392 HasSnapsViewMixin,391 HasSnapsViewMixin,
393 CodeImportTargetMixin,392 CodeImportTargetMixin,
394):393):
395
396 feed_types = (BranchFeedLink,)394 feed_types = (BranchFeedLink,)
397395
398 @property396 @property
@@ -642,7 +640,6 @@ class BranchView(
642640
643641
644class BranchRescanView(LaunchpadEditFormView):642class BranchRescanView(LaunchpadEditFormView):
645
646 schema = Interface643 schema = Interface
647 field_names = []644 field_names = []
648 next_url = None645 next_url = None
@@ -1425,7 +1422,6 @@ class RegisterBranchMergeProposalView(LaunchpadFormView):
14251422
1426@implementer(IBrowserPublisher)1423@implementer(IBrowserPublisher)
1427class BranchDiffView(DataDownloadView):1424class BranchDiffView(DataDownloadView):
1428
1429 content_type = "text/x-patch"1425 content_type = "text/x-patch"
14301426
1431 def __init__(self, context, request, new, old=None):1427 def __init__(self, context, request, new, old=None):
diff --git a/lib/lp/code/browser/branchlisting.py b/lib/lp/code/browser/branchlisting.py
index a6a8581..f4b5533 100644
--- a/lib/lp/code/browser/branchlisting.py
+++ b/lib/lp/code/browser/branchlisting.py
@@ -814,7 +814,6 @@ class RecentlyChangedBranchesView(NoContextBranchListingView):
814814
815815
816class PersonBranchesMenu(ApplicationMenu):816class PersonBranchesMenu(ApplicationMenu):
817
818 usedfor = IPerson817 usedfor = IPerson
819 facet = "branches"818 facet = "branches"
820 links = ["branches", "active_reviews", "source_package_recipes", "snaps"]819 links = ["branches", "active_reviews", "source_package_recipes", "snaps"]
@@ -847,7 +846,6 @@ class PersonBranchesMenu(ApplicationMenu):
847846
848847
849class PersonProductBranchesMenu(PersonBranchesMenu):848class PersonProductBranchesMenu(PersonBranchesMenu):
850
851 usedfor = IPersonProduct849 usedfor = IPersonProduct
852 links = ["branches", "active_reviews", "source_package_recipes", "snaps"]850 links = ["branches", "active_reviews", "source_package_recipes", "snaps"]
853851
@@ -1025,7 +1023,6 @@ class PersonProductCodeSummaryView(PersonCodeSummaryView):
10251023
10261024
1027class ProductBranchesMenu(ApplicationMenu):1025class ProductBranchesMenu(ApplicationMenu):
1028
1029 usedfor = IProduct1026 usedfor = IProduct
1030 facet = "branches"1027 facet = "branches"
1031 links = [1028 links = [
diff --git a/lib/lp/code/browser/branchmergeproposal.py b/lib/lp/code/browser/branchmergeproposal.py
index 6631a94..1e6bda0 100644
--- a/lib/lp/code/browser/branchmergeproposal.py
+++ b/lib/lp/code/browser/branchmergeproposal.py
@@ -1038,7 +1038,6 @@ class BranchMergeProposalVoteView(LaunchpadView):
10381038
10391039
1040class BranchMergeProposalScheduleUpdateDiffView(LaunchpadEditFormView):1040class BranchMergeProposalScheduleUpdateDiffView(LaunchpadEditFormView):
1041
1042 schema = Interface1041 schema = Interface
1043 field_names = []1042 field_names = []
1044 next_url = None1043 next_url = None
@@ -1130,7 +1129,6 @@ class MergeProposalEditView(
11301129
11311130
1132class ResubmitSchema(IBranchMergeProposal):1131class ResubmitSchema(IBranchMergeProposal):
1133
1134 break_link = Bool(1132 break_link = Bool(
1135 title="Start afresh",1133 title="Start afresh",
1136 description=(1134 description=(
@@ -1423,7 +1421,6 @@ class BranchMergeProposalSubscribersView(LaunchpadView):
1423class BranchMergeProposalChangeStatusView(1421class BranchMergeProposalChangeStatusView(
1424 MergeProposalEditView, BranchMergeProposalStatusMixin1422 MergeProposalEditView, BranchMergeProposalStatusMixin
1425):1423):
1426
1427 page_title = label = "Change merge proposal status"1424 page_title = label = "Change merge proposal status"
1428 schema = IBranchMergeProposal1425 schema = IBranchMergeProposal
1429 field_names = []1426 field_names = []
diff --git a/lib/lp/code/browser/branchref.py b/lib/lp/code/browser/branchref.py
index 5d440ca..8723f98 100644
--- a/lib/lp/code/browser/branchref.py
+++ b/lib/lp/code/browser/branchref.py
@@ -30,7 +30,6 @@ class BranchRef:
3030
3131
32class BranchRefNavigation(Navigation):32class BranchRefNavigation(Navigation):
33
34 usedfor = IBranchRef33 usedfor = IBranchRef
3534
36 @stepto("branch-format")35 @stepto("branch-format")
diff --git a/lib/lp/code/browser/branchsubscription.py b/lib/lp/code/browser/branchsubscription.py
index 2881b03..46b53a5 100644
--- a/lib/lp/code/browser/branchsubscription.py
+++ b/lib/lp/code/browser/branchsubscription.py
@@ -113,7 +113,6 @@ class _BranchSubscriptionView(LaunchpadFormView):
113113
114114
115class BranchSubscriptionAddView(_BranchSubscriptionView):115class BranchSubscriptionAddView(_BranchSubscriptionView):
116
117 page_title = label = "Subscribe to branch"116 page_title = label = "Subscribe to branch"
118117
119 @action("Subscribe")118 @action("Subscribe")
diff --git a/lib/lp/code/browser/diff.py b/lib/lp/code/browser/diff.py
index 0e4fd79..cdb7996 100644
--- a/lib/lp/code/browser/diff.py
+++ b/lib/lp/code/browser/diff.py
@@ -19,7 +19,6 @@ from lp.services.webapp.publisher import canonical_url
1919
2020
21class PreviewDiffNavigation(Navigation, FileNavigationMixin):21class PreviewDiffNavigation(Navigation, FileNavigationMixin):
22
23 usedfor = IPreviewDiff22 usedfor = IPreviewDiff
2423
2524
diff --git a/lib/lp/code/browser/gitlisting.py b/lib/lp/code/browser/gitlisting.py
index f5415f1..2be0c24 100644
--- a/lib/lp/code/browser/gitlisting.py
+++ b/lib/lp/code/browser/gitlisting.py
@@ -110,7 +110,6 @@ class BaseGitListingView(LaunchpadView):
110110
111111
112class TargetGitListingView(BaseGitListingView):112class TargetGitListingView(BaseGitListingView):
113
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to status/vote changes: