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
1diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
2index 0f3d230..9a38809 100644
3--- a/.git-blame-ignore-revs
4+++ b/.git-blame-ignore-revs
5@@ -106,3 +106,5 @@ a0cc45d527f251438cff74b4134e7a66fba42ac7
6 9c7e734d893362de4461910d309d9891558c9634
7 # apply blackdoc on the complete codebase
8 78a72ed0e3f5be6c727f4981d6a09e978cde4b7e
9+# apply black's 2023 stable style
10+ee5977f514d584c64afe453ac9d2eaa0fdbc3afd
11diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
12index dab74e2..c4198d7 100644
13--- a/.pre-commit-config.yaml
14+++ b/.pre-commit-config.yaml
15@@ -36,7 +36,7 @@ repos:
16 |utilities/community-contributions\.py
17 )$
18 - repo: https://github.com/psf/black
19- rev: 22.12.0
20+ rev: 23.3.0
21 hooks:
22 - id: black
23 exclude: |
24diff --git a/cronscripts/update-bugzilla-remote-components.py b/cronscripts/update-bugzilla-remote-components.py
25index b98b467..e002dac 100755
26--- a/cronscripts/update-bugzilla-remote-components.py
27+++ b/cronscripts/update-bugzilla-remote-components.py
28@@ -35,7 +35,6 @@ class UpdateRemoteComponentsFromBugzilla(LaunchpadCronScript):
29
30
31 if __name__ == "__main__":
32-
33 updater = UpdateRemoteComponentsFromBugzilla(
34 "updatebugzillaremotecomponents",
35 dbuser=config.updatebugzillaremotecomponents.dbuser,
36diff --git a/lib/launchpad_loggerhead/app.py b/lib/launchpad_loggerhead/app.py
37index b7496ae..d05e207 100644
38--- a/lib/launchpad_loggerhead/app.py
39+++ b/lib/launchpad_loggerhead/app.py
40@@ -208,7 +208,6 @@ class RootApp:
41 )
42 lp_server.start_server()
43 try:
44-
45 try:
46 branchfs = self.get_branchfs()
47 transport_type, info, trail = branchfs.translatePath(
48diff --git a/lib/launchpad_loggerhead/session.py b/lib/launchpad_loggerhead/session.py
49index 48d213d..45e32fe 100644
50--- a/lib/launchpad_loggerhead/session.py
51+++ b/lib/launchpad_loggerhead/session.py
52@@ -13,7 +13,6 @@ from lp.services.config import config
53
54
55 class LaunchpadSecureCookie(SecureCookie):
56-
57 # The default of sha1 is a bit too weak.
58 hash_method = staticmethod(hashlib.sha256)
59
60diff --git a/lib/lp/answers/browser/person.py b/lib/lp/answers/browser/person.py
61index 6d06aa1..a684d11 100644
62--- a/lib/lp/answers/browser/person.py
63+++ b/lib/lp/answers/browser/person.py
64@@ -261,7 +261,6 @@ class PersonAnswerContactForView(LaunchpadView):
65
66
67 class PersonAnswersMenu(NavigationMenu):
68-
69 usedfor = IPerson
70 facet = "answers"
71 links = [
72diff --git a/lib/lp/answers/browser/tests/test_questionmessages.py b/lib/lp/answers/browser/tests/test_questionmessages.py
73index 0e1bb02..0911bd6 100644
74--- a/lib/lp/answers/browser/tests/test_questionmessages.py
75+++ b/lib/lp/answers/browser/tests/test_questionmessages.py
76@@ -19,7 +19,6 @@ from lp.testing.pages import find_tag_by_id
77 class TestQuestionMessageVisibility(
78 BrowserTestCase, TestMessageVisibilityMixin
79 ):
80-
81 layer = DatabaseFunctionalLayer
82
83 def makeHiddenMessage(self, comment_owner=None):
84@@ -44,7 +43,6 @@ class TestQuestionMessageVisibility(
85 class TestHideQuestionMessageControls(
86 BrowserTestCase, TestHideMessageControlMixin
87 ):
88-
89 layer = DatabaseFunctionalLayer
90
91 control_text = "mark-spam-0"
92diff --git a/lib/lp/answers/browser/tests/test_questiontarget.py b/lib/lp/answers/browser/tests/test_questiontarget.py
93index b9a8bd2..24a1261 100644
94--- a/lib/lp/answers/browser/tests/test_questiontarget.py
95+++ b/lib/lp/answers/browser/tests/test_questiontarget.py
96@@ -28,7 +28,6 @@ from lp.testing.views import create_initialized_view, create_view
97
98
99 class TestSearchQuestionsView(TestCaseWithFactory):
100-
101 layer = DatabaseFunctionalLayer
102
103 def test_matching_faqs_url__handles_non_ascii(self):
104@@ -65,7 +64,6 @@ class TestSearchQuestionsView(TestCaseWithFactory):
105
106
107 class TestSearchQuestionsViewCanConfigureAnswers(TestCaseWithFactory):
108-
109 layer = DatabaseFunctionalLayer
110
111 def test_cannot_configure_answers_product_no_edit_permission(self):
112diff --git a/lib/lp/answers/interfaces/faq.py b/lib/lp/answers/interfaces/faq.py
113index 7d18c7b..42d64d1 100644
114--- a/lib/lp/answers/interfaces/faq.py
115+++ b/lib/lp/answers/interfaces/faq.py
116@@ -35,7 +35,6 @@ class CannotDeleteFAQ(Exception):
117
118
119 class IFAQPublic(IHasOwner):
120-
121 id = exported(
122 Int(
123 title=_("FAQ Number"),
124diff --git a/lib/lp/answers/interfaces/questionjob.py b/lib/lp/answers/interfaces/questionjob.py
125index 5700e9a..21e218f 100644
126--- a/lib/lp/answers/interfaces/questionjob.py
127+++ b/lib/lp/answers/interfaces/questionjob.py
128@@ -49,7 +49,6 @@ class IQuestionJob(Interface):
129
130
131 class IQuestionEmailJob(IQuestionJob, IRunnableJob):
132-
133 user = Attribute("The `IPerson` who triggered the email.")
134
135 subject = Attribute("The subject of the email.")
136diff --git a/lib/lp/answers/model/tests/test_question.py b/lib/lp/answers/model/tests/test_question.py
137index 15ec010..6040354 100644
138--- a/lib/lp/answers/model/tests/test_question.py
139+++ b/lib/lp/answers/model/tests/test_question.py
140@@ -13,7 +13,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
141
142
143 class TestQuestionDirectSubscribers(TestCaseWithFactory):
144-
145 layer = DatabaseFunctionalLayer
146
147 def test_get_direct_subscribers(self):
148@@ -63,7 +62,6 @@ class TestQuestionDirectSubscribers(TestCaseWithFactory):
149
150
151 class TestQuestionInDirectSubscribers(TestCaseWithFactory):
152-
153 layer = DatabaseFunctionalLayer
154
155 def test_answerContactIsIndirectSubscriber(self):
156@@ -108,7 +106,6 @@ class TestQuestionInDirectSubscribers(TestCaseWithFactory):
157
158
159 class TestQuestionSet(TestCaseWithFactory):
160-
161 layer = DatabaseFunctionalLayer
162
163 def test_expiredQuestions(self):
164diff --git a/lib/lp/answers/publisher.py b/lib/lp/answers/publisher.py
165index 21d1443..6e61444 100644
166--- a/lib/lp/answers/publisher.py
167+++ b/lib/lp/answers/publisher.py
168@@ -24,7 +24,6 @@ from lp.services.webapp.servers import (
169
170 @implementer(IFacet)
171 class AnswersFacet:
172-
173 name = "answers"
174 rootsite = "answers"
175 text = "Questions"
176diff --git a/lib/lp/answers/tests/test_faq.py b/lib/lp/answers/tests/test_faq.py
177index 020cbaa..a50a432 100644
178--- a/lib/lp/answers/tests/test_faq.py
179+++ b/lib/lp/answers/tests/test_faq.py
180@@ -106,7 +106,6 @@ class TestFAQPermissions(TestCaseWithFactory):
181
182
183 class TestFAQ(TestCaseWithFactory):
184-
185 layer = DatabaseFunctionalLayer
186
187 def test_destroySelf(self):
188diff --git a/lib/lp/answers/tests/test_faq_webservice.py b/lib/lp/answers/tests/test_faq_webservice.py
189index bb69f3e..dc80564 100644
190--- a/lib/lp/answers/tests/test_faq_webservice.py
191+++ b/lib/lp/answers/tests/test_faq_webservice.py
192@@ -13,7 +13,6 @@ from lp.testing.pages import webservice_for_person
193
194
195 class TestFAQWebService(TestCaseWithFactory):
196-
197 layer = DatabaseFunctionalLayer
198
199 def test_representation(self):
200diff --git a/lib/lp/answers/tests/test_question.py b/lib/lp/answers/tests/test_question.py
201index 8e22dbd..29adfe5 100644
202--- a/lib/lp/answers/tests/test_question.py
203+++ b/lib/lp/answers/tests/test_question.py
204@@ -19,7 +19,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
205
206
207 class TestQuestionSecurity(TestCaseWithFactory):
208-
209 layer = DatabaseFunctionalLayer
210
211 def test_title_and_description_writes(self):
212diff --git a/lib/lp/answers/tests/test_question_webservice.py b/lib/lp/answers/tests/test_question_webservice.py
213index a5735b2..9378638 100644
214--- a/lib/lp/answers/tests/test_question_webservice.py
215+++ b/lib/lp/answers/tests/test_question_webservice.py
216@@ -275,7 +275,6 @@ class TestSetCommentVisibility(TestCaseWithFactory):
217
218
219 class TestQuestionWebServiceSubscription(TestCaseWithFactory):
220-
221 layer = DatabaseFunctionalLayer
222
223 def test_subscribe(self):
224@@ -325,7 +324,6 @@ class TestQuestionWebServiceSubscription(TestCaseWithFactory):
225
226
227 class TestQuestionSetWebService(TestCaseWithFactory):
228-
229 layer = DatabaseFunctionalLayer
230
231 def test_searchQuestions(self):
232diff --git a/lib/lp/answers/tests/test_question_workflow.py b/lib/lp/answers/tests/test_question_workflow.py
233index 733e24e..c0e61ce 100644
234--- a/lib/lp/answers/tests/test_question_workflow.py
235+++ b/lib/lp/answers/tests/test_question_workflow.py
236@@ -612,6 +612,7 @@ class LinkFAQTestCase(BaseAnswerTrackerWorkflowTestCase):
237 one of OPEN, NEEDSINFO or ANSWERED and check that it returns a
238 valid IQuestionMessage.
239 """
240+
241 # Do not check the edited_fields attributes since it
242 # changes based on departure state.
243 def checkFAQ(message):
244diff --git a/lib/lp/app/browser/launchpad.py b/lib/lp/app/browser/launchpad.py
245index a4eba0a..25b5c11 100644
246--- a/lib/lp/app/browser/launchpad.py
247+++ b/lib/lp/app/browser/launchpad.py
248@@ -565,7 +565,6 @@ class MaintenanceMessage:
249
250
251 class LaunchpadRootFacets(StandardLaunchpadFacets):
252-
253 usedfor = ILaunchpadRoot
254 enable_only = [
255 "overview",
256@@ -689,7 +688,6 @@ class LoginStatus:
257
258
259 class LaunchpadRootNavigation(Navigation):
260-
261 usedfor = ILaunchpadRoot
262
263 @stepto("support")
264@@ -1185,7 +1183,6 @@ class IAppFrontPageSearchForm(Interface):
265
266
267 class AppFrontPageSearchView(LaunchpadFormView):
268-
269 schema = IAppFrontPageSearchForm
270 custom_widget_scope = ProjectScopeWidget
271
272diff --git a/lib/lp/app/browser/launchpadform.py b/lib/lp/app/browser/launchpadform.py
273index 3578008..119bace 100644
274--- a/lib/lp/app/browser/launchpadform.py
275+++ b/lib/lp/app/browser/launchpadform.py
276@@ -57,7 +57,6 @@ _first_widget_marker = object()
277
278
279 class LaunchpadFormView(LaunchpadView):
280-
281 # The prefix used for all form inputs.
282 prefix = "field"
283
284@@ -472,7 +471,6 @@ class LaunchpadFormView(LaunchpadView):
285
286
287 class LaunchpadEditFormView(LaunchpadFormView):
288-
289 render_context = True
290
291 def updateContextFromData(self, data, context=None, notify_modified=True):
292diff --git a/lib/lp/app/browser/tales.py b/lib/lp/app/browser/tales.py
293index 44781e8..b8584c9 100644
294--- a/lib/lp/app/browser/tales.py
295+++ b/lib/lp/app/browser/tales.py
296@@ -1053,7 +1053,6 @@ class SpecificationImageDisplayAPI(ObjectImageDisplayAPI):
297 return '<span class="%s"></span>' % self.sprite_css()
298
299 def badges(self):
300-
301 badges = ""
302
303 if len(self._context.linked_branches) > 0:
304@@ -1778,7 +1777,6 @@ class BranchSubscriptionFormatterAPI(CustomizableFormatter):
305
306
307 class BranchMergeProposalFormatterAPI(CustomizableFormatter):
308-
309 _link_summary_template = _("%(title)s")
310
311 def _link_summary_values(self):
312@@ -1858,7 +1856,6 @@ class BugTaskFormatterAPI(CustomizableFormatter):
313
314
315 class BugAttachmentFormatterAPI(CustomizableFormatter):
316-
317 final_traversable_names = dict(
318 **CustomizableFormatter.final_traversable_names,
319 attachment_link="attachment_link",
320diff --git a/lib/lp/app/browser/tests/test_css_formatter.py b/lib/lp/app/browser/tests/test_css_formatter.py
321index c60af07..0cade3f 100644
322--- a/lib/lp/app/browser/tests/test_css_formatter.py
323+++ b/lib/lp/app/browser/tests/test_css_formatter.py
324@@ -10,7 +10,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
325
326
327 class TestCSSFormatter(TestCase):
328-
329 layer = DatabaseFunctionalLayer
330
331 def test_select(self):
332diff --git a/lib/lp/app/browser/tests/test_formatters.py b/lib/lp/app/browser/tests/test_formatters.py
333index b659677..c7eab52 100644
334--- a/lib/lp/app/browser/tests/test_formatters.py
335+++ b/lib/lp/app/browser/tests/test_formatters.py
336@@ -11,7 +11,6 @@ from lp.testing.views import create_view
337
338
339 class ObjectFormatterAPITestCase(TestCaseWithFactory, FakeAdapterMixin):
340-
341 layer = DatabaseFunctionalLayer
342
343 def test_pagetitle_top_level(self):
344@@ -109,7 +108,6 @@ class ObjectFormatterAPITestCase(TestCaseWithFactory, FakeAdapterMixin):
345
346
347 class TestPillarFormatterAPI(TestCaseWithFactory):
348-
349 layer = DatabaseFunctionalLayer
350
351 FORMATTER_CSS_CLASS = "sprite product"
352diff --git a/lib/lp/app/browser/tests/test_inlineeditpickerwidget.py b/lib/lp/app/browser/tests/test_inlineeditpickerwidget.py
353index c6fe5c9..4411353 100644
354--- a/lib/lp/app/browser/tests/test_inlineeditpickerwidget.py
355+++ b/lib/lp/app/browser/tests/test_inlineeditpickerwidget.py
356@@ -15,7 +15,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
357
358
359 class TestInlineEditPickerWidget(TestCaseWithFactory):
360-
361 layer = DatabaseFunctionalLayer
362
363 def getWidget(self, **kwargs):
364@@ -65,7 +64,6 @@ class TestInlineEditPickerWidget(TestCaseWithFactory):
365
366
367 class TestInlinePersonEditPickerWidget(TestCaseWithFactory):
368-
369 layer = DatabaseFunctionalLayer
370
371 def getWidget(self, widget_value, show_create_team=False, **kwargs):
372diff --git a/lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py b/lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py
373index 3222fa4..205640d 100644
374--- a/lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py
375+++ b/lib/lp/app/browser/tests/test_inlinemulticheckboxwidget.py
376@@ -25,7 +25,6 @@ class Alphabet(EnumeratedType):
377
378
379 class TestInlineMultiCheckboxWidget(TestCaseWithFactory):
380-
381 layer = DatabaseFunctionalLayer
382
383 def _getWidget(self, **kwargs):
384diff --git a/lib/lp/app/browser/tests/test_launchpad.py b/lib/lp/app/browser/tests/test_launchpad.py
385index 72605c3..e7cd7d9 100644
386--- a/lib/lp/app/browser/tests/test_launchpad.py
387+++ b/lib/lp/app/browser/tests/test_launchpad.py
388@@ -347,7 +347,6 @@ class TestBranchTraversal(TestCaseWithFactory, TraversalMixin):
389
390
391 class TestCodeTraversal(TestCaseWithFactory, TraversalMixin):
392-
393 layer = DatabaseFunctionalLayer
394
395 def traverse(self, path, **kwargs):
396@@ -606,7 +605,6 @@ class TestCodeTraversal(TestCaseWithFactory, TraversalMixin):
397
398
399 class TestPersonTraversal(TestCaseWithFactory, TraversalMixin):
400-
401 layer = DatabaseFunctionalLayer
402
403 def setUp(self):
404@@ -720,7 +718,6 @@ class TestPersonTraversal(TestCaseWithFactory, TraversalMixin):
405
406
407 class TestErrorViews(TestCaseWithFactory):
408-
409 layer = DatabaseFunctionalLayer
410
411 def test_GoneError(self):
412@@ -731,7 +728,6 @@ class TestErrorViews(TestCaseWithFactory):
413
414
415 class ExceptionHierarchyTestCase(TestCaseWithFactory):
416-
417 layer = FunctionalLayer
418
419 def test_exception(self):
420@@ -751,7 +747,6 @@ class ExceptionHierarchyTestCase(TestCaseWithFactory):
421
422
423 class TestIterViewRegistrations(TestCaseWithFactory):
424-
425 layer = FunctionalLayer
426
427 def test_iter_view_registrations(self):
428@@ -765,7 +760,6 @@ class TestIterViewRegistrations(TestCaseWithFactory):
429
430
431 class TestProductTraversal(TestCaseWithFactory, TraversalMixin):
432-
433 layer = DatabaseFunctionalLayer
434
435 def setUp(self):
436diff --git a/lib/lp/app/browser/tests/test_launchpadform.py b/lib/lp/app/browser/tests/test_launchpadform.py
437index 7ca3863..ff3aea2 100644
438--- a/lib/lp/app/browser/tests/test_launchpadform.py
439+++ b/lib/lp/app/browser/tests/test_launchpadform.py
440@@ -38,7 +38,6 @@ class TestView(LaunchpadFormView):
441
442
443 class TestHasStructuredDoc(TestCase):
444-
445 layer = FunctionalLayer
446
447 def _widget_annotation(self, widget):
448@@ -55,7 +54,6 @@ class TestHasStructuredDoc(TestCase):
449
450
451 class TestQueryTalesForHasStructuredDoc(TestCase):
452-
453 layer = FunctionalLayer
454
455 def test_query_tales(self):
456@@ -102,7 +100,6 @@ class TestHelpLinksView(LaunchpadFormView):
457
458
459 class TestHelpLinks(TestCaseWithFactory):
460-
461 layer = DatabaseFunctionalLayer
462
463 def test_help_links_on_widget(self):
464diff --git a/lib/lp/app/browser/tests/test_launchpadform_doc.py b/lib/lp/app/browser/tests/test_launchpadform_doc.py
465index 5e679ab..461df86 100644
466--- a/lib/lp/app/browser/tests/test_launchpadform_doc.py
467+++ b/lib/lp/app/browser/tests/test_launchpadform_doc.py
468@@ -17,7 +17,6 @@ from lp.testing.layers import FunctionalLayer
469
470
471 class LaunchpadFormTest(unittest.TestCase):
472-
473 layer = FunctionalLayer
474
475 def test_formLayout(self):
476diff --git a/lib/lp/app/browser/tests/test_launchpadroot.py b/lib/lp/app/browser/tests/test_launchpadroot.py
477index c5e5329..85faf0a 100644
478--- a/lib/lp/app/browser/tests/test_launchpadroot.py
479+++ b/lib/lp/app/browser/tests/test_launchpadroot.py
480@@ -127,7 +127,6 @@ class TestLaunchpadRootNavigation(TestCaseWithFactory):
481
482
483 class LaunchpadRootIndexViewTestCase(TestCaseWithFactory):
484-
485 layer = LaunchpadFunctionalLayer
486
487 def setUp(self):
488diff --git a/lib/lp/app/browser/tests/test_linkchecker.py b/lib/lp/app/browser/tests/test_linkchecker.py
489index 0215c41..f1b2fe9 100644
490--- a/lib/lp/app/browser/tests/test_linkchecker.py
491+++ b/lib/lp/app/browser/tests/test_linkchecker.py
492@@ -16,7 +16,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
493
494
495 class TestLinkCheckerAPI(TestCaseWithFactory):
496-
497 layer = DatabaseFunctionalLayer
498
499 BRANCH_URL_TEMPLATE = "/+code/%s"
500diff --git a/lib/lp/app/browser/tests/test_stringformatter.py b/lib/lp/app/browser/tests/test_stringformatter.py
501index d8f556e..78a332f 100644
502--- a/lib/lp/app/browser/tests/test_stringformatter.py
503+++ b/lib/lp/app/browser/tests/test_stringformatter.py
504@@ -167,7 +167,6 @@ class TestLinkifyingBugs(TestCase):
505
506
507 class TestLinkifyingProtocols(TestCaseWithFactory):
508-
509 layer = DatabaseFunctionalLayer
510
511 def test_normal_set(self):
512@@ -484,7 +483,6 @@ class TestParseDiff(TestCase):
513
514
515 class TestParseDiffErrors(TestCaseWithFactory):
516-
517 layer = ZopelessLayer
518
519 def assertParses(self, expected, diff):
520diff --git a/lib/lp/app/browser/tests/test_vocabulary.py b/lib/lp/app/browser/tests/test_vocabulary.py
521index c827743..81f80cf 100644
522--- a/lib/lp/app/browser/tests/test_vocabulary.py
523+++ b/lib/lp/app/browser/tests/test_vocabulary.py
524@@ -44,7 +44,6 @@ def get_picker_entry(item_subject, context_object, **kwargs):
525
526
527 class DefaultPickerEntrySourceAdapterTestCase(TestCaseWithFactory):
528-
529 layer = LaunchpadFunctionalLayer
530
531 def test_css_image_entry_without_icon(self):
532@@ -74,7 +73,6 @@ class DefaultPickerEntrySourceAdapterTestCase(TestCaseWithFactory):
533
534
535 class PersonPickerEntrySourceAdapterTestCase(TestCaseWithFactory):
536-
537 layer = DatabaseFunctionalLayer
538
539 def test_person_to_pickerentry(self):
540@@ -190,7 +188,6 @@ class PersonPickerEntrySourceAdapterTestCase(TestCaseWithFactory):
541 class TestDistributionSourcePackagePickerEntrySourceAdapter(
542 TestCaseWithFactory
543 ):
544-
545 layer = DatabaseFunctionalLayer
546
547 def getPickerEntry(self, dsp):
548@@ -270,7 +267,6 @@ class TestDistributionSourcePackagePickerEntrySourceAdapter(
549
550
551 class TestProductPickerEntrySourceAdapter(TestCaseWithFactory):
552-
553 layer = DatabaseFunctionalLayer
554
555 def getPickerEntry(self, product):
556@@ -352,7 +348,6 @@ class TestProductPickerEntrySourceAdapter(TestCaseWithFactory):
557
558
559 class TestProjectGroupPickerEntrySourceAdapter(TestCaseWithFactory):
560-
561 layer = DatabaseFunctionalLayer
562
563 def getPickerEntry(self, projectgroup):
564@@ -410,7 +405,6 @@ class TestProjectGroupPickerEntrySourceAdapter(TestCaseWithFactory):
565
566
567 class TestDistributionPickerEntrySourceAdapter(TestCaseWithFactory):
568-
569 layer = DatabaseFunctionalLayer
570
571 def getPickerEntry(self, distribution):
572@@ -544,7 +538,6 @@ class TestVocabularyFilter(VocabularyFilter):
573
574
575 class HugeVocabularyJSONViewTestCase(TestCaseWithFactory):
576-
577 layer = DatabaseFunctionalLayer
578
579 def setUp(self):
580diff --git a/lib/lp/app/browser/tests/test_webservice.py b/lib/lp/app/browser/tests/test_webservice.py
581index b1f72ad..2defa9d 100644
582--- a/lib/lp/app/browser/tests/test_webservice.py
583+++ b/lib/lp/app/browser/tests/test_webservice.py
584@@ -15,7 +15,6 @@ from lp.testing.pages import LaunchpadWebServiceCaller
585
586
587 class TestXHTMLRepresentations(TestCaseWithFactory):
588-
589 layer = DatabaseFunctionalLayer
590
591 def test_person(self):
592diff --git a/lib/lp/app/browser/vocabulary.py b/lib/lp/app/browser/vocabulary.py
593index 04d0599..0d0283f 100644
594--- a/lib/lp/app/browser/vocabulary.py
595+++ b/lib/lp/app/browser/vocabulary.py
596@@ -377,7 +377,6 @@ class ProductPickerEntrySourceAdapter(TargetPickerEntrySourceAdapter):
597
598 @adapter(IDistribution)
599 class DistributionPickerEntrySourceAdapter(TargetPickerEntrySourceAdapter):
600-
601 target_type = "distribution"
602
603 def getMaintainer(self, target):
604diff --git a/lib/lp/app/interfaces/informationtype.py b/lib/lp/app/interfaces/informationtype.py
605index 5ea95df..29bc077 100644
606--- a/lib/lp/app/interfaces/informationtype.py
607+++ b/lib/lp/app/interfaces/informationtype.py
608@@ -14,7 +14,6 @@ from lp.app.interfaces.launchpad import IPrivacy
609
610
611 class IInformationType(IPrivacy):
612-
613 information_type = exported(
614 Choice(
615 title=_("Information Type"),
616diff --git a/lib/lp/app/tests/test_launchpad.py b/lib/lp/app/tests/test_launchpad.py
617index 506f6ab..5a47167 100644
618--- a/lib/lp/app/tests/test_launchpad.py
619+++ b/lib/lp/app/tests/test_launchpad.py
620@@ -16,7 +16,6 @@ from lp.testing.layers import FunctionalLayer
621
622
623 class PrivacyTestCase(TestCase):
624-
625 layer = FunctionalLayer
626
627 def test_init(self):
628@@ -29,7 +28,6 @@ class PrivacyTestCase(TestCase):
629
630
631 class ExceptionPrivacyTestCase(TestCase):
632-
633 layer = FunctionalLayer
634
635 def test_exception(self):
636diff --git a/lib/lp/app/tests/test_security.py b/lib/lp/app/tests/test_security.py
637index 384fda1..0f70c4f 100644
638--- a/lib/lp/app/tests/test_security.py
639+++ b/lib/lp/app/tests/test_security.py
640@@ -47,7 +47,6 @@ class Fake:
641
642
643 class TestAuthorizationBase(TestCaseWithFactory):
644-
645 layer = ZopelessDatabaseLayer
646
647 def test_checkAuthenticated_for_full_fledged_account(self):
648diff --git a/lib/lp/app/tests/test_services.py b/lib/lp/app/tests/test_services.py
649index 76ac515..f84bbda 100644
650--- a/lib/lp/app/tests/test_services.py
651+++ b/lib/lp/app/tests/test_services.py
652@@ -25,7 +25,6 @@ class IFakeService(IService):
653
654 @implementer(IFakeService, IHTTPResource)
655 class FakeService:
656-
657 name = "fake_service"
658
659
660diff --git a/lib/lp/app/tests/test_yuitests.py b/lib/lp/app/tests/test_yuitests.py
661index 1f8537f..cfa0a8e 100644
662--- a/lib/lp/app/tests/test_yuitests.py
663+++ b/lib/lp/app/tests/test_yuitests.py
664@@ -11,7 +11,6 @@ __all__ = [] # type: List[str]
665
666
667 class AppYUIUnitTestCase(YUIUnitTestCase):
668-
669 layer = YUITestLayer
670 suite_name = "AppYUIUnitTests"
671
672diff --git a/lib/lp/app/validators/tests/test_validation.py b/lib/lp/app/validators/tests/test_validation.py
673index 3b14319..6d5c31c 100644
674--- a/lib/lp/app/validators/tests/test_validation.py
675+++ b/lib/lp/app/validators/tests/test_validation.py
676@@ -9,7 +9,6 @@ from lp.testing.layers import BaseLayer
677
678
679 class TestOCIBranchValidator(TestCase):
680-
681 layer = BaseLayer
682
683 def test_validate_oci_branch_name_with_leading_slash(self):
684diff --git a/lib/lp/app/webservice/tests/test_marshallers.py b/lib/lp/app/webservice/tests/test_marshallers.py
685index cd5def4..006a1bd 100644
686--- a/lib/lp/app/webservice/tests/test_marshallers.py
687+++ b/lib/lp/app/webservice/tests/test_marshallers.py
688@@ -29,7 +29,6 @@ def ws_url(bug):
689
690
691 class TestTextFieldMarshaller(TestCaseWithFactory):
692-
693 layer = DatabaseFunctionalLayer
694
695 def test_unmarshall_obfuscated(self):
696@@ -138,7 +137,6 @@ class TestWebServiceObfuscation(TestCaseWithFactory):
697
698
699 class IInlineExample(Interface):
700-
701 person = PersonChoice(vocabulary="ValidPersonOrTeam")
702
703 status = Choice(vocabulary=JobStatus)
704@@ -158,7 +156,6 @@ def inline_example_from_dict(template):
705
706
707 class TestInlineObjectFieldMarshaller(TestCaseWithFactory):
708-
709 layer = DatabaseFunctionalLayer
710
711 def test_unmarshall(self):
712diff --git a/lib/lp/app/widgets/date.py b/lib/lp/app/widgets/date.py
713index ce27881..a54e85f 100644
714--- a/lib/lp/app/widgets/date.py
715+++ b/lib/lp/app/widgets/date.py
716@@ -364,7 +364,7 @@ class DateTimeWidget(TextWidget):
717 for fmt in self.supported_input_formats:
718 try:
719 datetime.strptime(input.strip(), fmt)
720- except (ValueError) as e:
721+ except ValueError as e:
722 if "unconverted data remains" in str(e):
723 return
724 else:
725diff --git a/lib/lp/app/widgets/popup.py b/lib/lp/app/widgets/popup.py
726index b2524ef..0f443f0 100644
727--- a/lib/lp/app/widgets/popup.py
728+++ b/lib/lp/app/widgets/popup.py
729@@ -243,7 +243,6 @@ class VocabularyPickerWidget(SingleDataHelper, ItemsWidgetBase):
730
731
732 class PersonPickerWidget(VocabularyPickerWidget):
733-
734 show_assign_me_button = True
735 show_remove_button = False
736 picker_type = "person"
737@@ -267,7 +266,6 @@ class PersonPickerWidget(VocabularyPickerWidget):
738
739
740 class BugTrackerPickerWidget(VocabularyPickerWidget):
741-
742 __call__ = ViewPageTemplateFile("templates/bugtracker-picker.pt")
743 link_template = """
744 or (<a id="create-bugtracker-link"
745diff --git a/lib/lp/app/widgets/snapbuildchannels.py b/lib/lp/app/widgets/snapbuildchannels.py
746index d1da50b..c2a9172 100644
747--- a/lib/lp/app/widgets/snapbuildchannels.py
748+++ b/lib/lp/app/widgets/snapbuildchannels.py
749@@ -24,7 +24,6 @@ from lp.services.webapp.interfaces import (
750
751 @implementer(ISingleLineWidgetLayout, IAlwaysSubmittedWidget, IInputWidget)
752 class SnapBuildChannelsWidget(BrowserWidget, InputWidget):
753-
754 template = ViewPageTemplateFile("templates/snapbuildchannels.pt")
755 hint = False
756 _widgets_set_up = False
757diff --git a/lib/lp/app/widgets/tests/test_datetime.py b/lib/lp/app/widgets/tests/test_datetime.py
758index a6b39e9..0ae5ab8 100644
759--- a/lib/lp/app/widgets/tests/test_datetime.py
760+++ b/lib/lp/app/widgets/tests/test_datetime.py
761@@ -13,7 +13,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
762
763
764 class TestDateTimeWidget(TestCase):
765-
766 layer = DatabaseFunctionalLayer
767
768 def setUp(self):
769diff --git a/lib/lp/app/widgets/tests/test_itemswidgets.py b/lib/lp/app/widgets/tests/test_itemswidgets.py
770index 57bdae9..4a604b9 100644
771--- a/lib/lp/app/widgets/tests/test_itemswidgets.py
772+++ b/lib/lp/app/widgets/tests/test_itemswidgets.py
773@@ -278,7 +278,6 @@ class TestEnumChoiceWidget(TestCaseWithFactory):
774 layer = DatabaseFunctionalLayer
775
776 class ChoiceEnum(DBEnumeratedType):
777-
778 ITEM_A = DBItem(
779 1,
780 """
781diff --git a/lib/lp/app/widgets/tests/test_popup.py b/lib/lp/app/widgets/tests/test_popup.py
782index 0a4ce99..214e3a1 100644
783--- a/lib/lp/app/widgets/tests/test_popup.py
784+++ b/lib/lp/app/widgets/tests/test_popup.py
785@@ -44,7 +44,6 @@ class ITest(Interface, metaclass=TestMetaClass):
786
787
788 class TestVocabularyPickerWidget(TestCaseWithFactory):
789-
790 layer = DatabaseFunctionalLayer
791
792 def setUp(self):
793diff --git a/lib/lp/app/widgets/tests/test_snapbuildchannels.py b/lib/lp/app/widgets/tests/test_snapbuildchannels.py
794index 27462a7..107c023 100644
795--- a/lib/lp/app/widgets/tests/test_snapbuildchannels.py
796+++ b/lib/lp/app/widgets/tests/test_snapbuildchannels.py
797@@ -14,7 +14,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
798
799
800 class TestSnapBuildChannelsWidget(TestCaseWithFactory):
801-
802 layer = DatabaseFunctionalLayer
803
804 def setUp(self):
805diff --git a/lib/lp/archivepublisher/customupload.py b/lib/lp/archivepublisher/customupload.py
806index 533e488..2759c2f 100644
807--- a/lib/lp/archivepublisher/customupload.py
808+++ b/lib/lp/archivepublisher/customupload.py
809@@ -315,7 +315,6 @@ class CustomUpload:
810 assert self.tmpdir is not None, "Must extract tarfile first"
811 extracted = False
812 for dirpath, dirnames, filenames in os.walk(self.tmpdir):
813-
814 # Create symbolic links to directories.
815 for dirname in dirnames:
816 sourcepath, basepath, destpath = self._buildInstallPaths(
817diff --git a/lib/lp/archivepublisher/debversion.py b/lib/lp/archivepublisher/debversion.py
818index ddbecd9..cd409b4 100644
819--- a/lib/lp/archivepublisher/debversion.py
820+++ b/lib/lp/archivepublisher/debversion.py
821@@ -55,7 +55,6 @@ class Version(changelog.Version):
822 """
823
824 def __init__(self, ver):
825-
826 ver = str(ver)
827 if not len(ver):
828 raise BadInputError("Input cannot be empty")
829diff --git a/lib/lp/archivepublisher/model/ftparchive.py b/lib/lp/archivepublisher/model/ftparchive.py
830index a891a85..ba801ae 100644
831--- a/lib/lp/archivepublisher/model/ftparchive.py
832+++ b/lib/lp/archivepublisher/model/ftparchive.py
833@@ -889,7 +889,6 @@ class FTPArchiveHandler:
834 # each of the distroseries we've touched
835 for distroseries in self.distro.series:
836 for pocket in PackagePublishingPocket.items:
837-
838 if not fullpublish:
839 if not self.publisher.isDirty(distroseries, pocket):
840 self.log.debug(
841diff --git a/lib/lp/archivepublisher/publishing.py b/lib/lp/archivepublisher/publishing.py
842index 105a393..8eee4ed 100644
843--- a/lib/lp/archivepublisher/publishing.py
844+++ b/lib/lp/archivepublisher/publishing.py
845@@ -1882,10 +1882,10 @@ class DirectoryHash:
846 ]
847 with open(path, "rb") as in_file:
848 for chunk in iter(lambda: in_file.read(256 * 1024), b""):
849- for (checksum_file, hashobj) in hashes:
850+ for checksum_file, hashobj in hashes:
851 hashobj.update(chunk)
852
853- for (checksum_file, hashobj) in hashes:
854+ for checksum_file, hashobj in hashes:
855 checksum_line = "%s *%s\n" % (
856 hashobj.hexdigest(),
857 path[len(self.root) + 1 :],
858@@ -1899,5 +1899,5 @@ class DirectoryHash:
859 self.add(os.path.join(dirpath, filename))
860
861 def close(self):
862- for (checksum_path, checksum_file, archive_hash) in self.checksum_hash:
863+ for checksum_path, checksum_file, archive_hash in self.checksum_hash:
864 checksum_file.close()
865diff --git a/lib/lp/archivepublisher/scripts/copy_signingkeys.py b/lib/lp/archivepublisher/scripts/copy_signingkeys.py
866index 018b7aa..54b829b 100644
867--- a/lib/lp/archivepublisher/scripts/copy_signingkeys.py
868+++ b/lib/lp/archivepublisher/scripts/copy_signingkeys.py
869@@ -20,7 +20,6 @@ from lp.soyuz.interfaces.archive import IArchiveSet
870
871
872 class CopySigningKeysScript(LaunchpadScript):
873-
874 usage = "Usage: %prog [options] FROM_ARCHIVE TO_ARCHIVE"
875 description = "Copy signing keys between archives."
876
877diff --git a/lib/lp/archivepublisher/scripts/generate_contents_files.py b/lib/lp/archivepublisher/scripts/generate_contents_files.py
878index e4c25e5..bd4f5e3 100644
879--- a/lib/lp/archivepublisher/scripts/generate_contents_files.py
880+++ b/lib/lp/archivepublisher/scripts/generate_contents_files.py
881@@ -99,7 +99,6 @@ def execute(logger, command, args=None):
882
883
884 class GenerateContentsFiles(LaunchpadCronScript):
885-
886 distribution = None
887
888 def add_my_options(self):
889diff --git a/lib/lp/archivepublisher/scripts/processaccepted.py b/lib/lp/archivepublisher/scripts/processaccepted.py
890index 10f90f7..da27fb9 100644
891--- a/lib/lp/archivepublisher/scripts/processaccepted.py
892+++ b/lib/lp/archivepublisher/scripts/processaccepted.py
893@@ -128,7 +128,6 @@ class ProcessAccepted(PublisherScript):
894 )
895 try:
896 for distroseries in distribution.series:
897-
898 self.logger.debug(
899 "Processing queue for %s %s"
900 % (archive.reference, distroseries.name)
901diff --git a/lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py b/lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py
902index e4832f4..e51077a 100644
903--- a/lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py
904+++ b/lib/lp/archivepublisher/tests/test_archivegpgsigningkey.py
905@@ -50,7 +50,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
906
907
908 class TestSignableArchiveWithSigningKey(TestCaseWithFactory):
909-
910 layer = ZopelessDatabaseLayer
911 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
912
913@@ -223,7 +222,6 @@ class TestSignableArchiveWithSigningKey(TestCaseWithFactory):
914
915
916 class TestSignableArchiveWithRunParts(RunPartsMixin, TestCaseWithFactory):
917-
918 layer = ZopelessDatabaseLayer
919
920 def setUp(self):
921@@ -352,7 +350,6 @@ class TestSignableArchiveWithRunParts(RunPartsMixin, TestCaseWithFactory):
922
923
924 class TestArchiveGPGSigningKey(TestCaseWithFactory):
925-
926 layer = ZopelessDatabaseLayer
927 # treq.content doesn't close the connection before yielding control back
928 # to the test, so we need to spin the reactor at the end to finish
929diff --git a/lib/lp/archivepublisher/tests/test_artifactory.py b/lib/lp/archivepublisher/tests/test_artifactory.py
930index d91898e..d13a92d 100644
931--- a/lib/lp/archivepublisher/tests/test_artifactory.py
932+++ b/lib/lp/archivepublisher/tests/test_artifactory.py
933@@ -69,7 +69,6 @@ class ArtifactoryPoolTestingFile(PoolTestingFile):
934
935
936 class TestArtifactoryPool(TestCase):
937-
938 layer = BaseLayer
939
940 def setUp(self):
941@@ -492,7 +491,6 @@ class TestArtifactoryPool(TestCase):
942
943
944 class TestArtifactoryPoolFromLibrarian(TestCaseWithFactory):
945-
946 layer = LaunchpadZopelessLayer
947
948 def setUp(self):
949diff --git a/lib/lp/archivepublisher/tests/test_config.py b/lib/lp/archivepublisher/tests/test_config.py
950index dd85b75..a25accd 100644
951--- a/lib/lp/archivepublisher/tests/test_config.py
952+++ b/lib/lp/archivepublisher/tests/test_config.py
953@@ -27,7 +27,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
954
955
956 class TestGetPubConfig(TestCaseWithFactory):
957-
958 layer = ZopelessDatabaseLayer
959
960 def setUp(self):
961@@ -143,7 +142,6 @@ class TestGetPubConfig(TestCaseWithFactory):
962
963
964 class TestGetPubConfigPPA(TestCaseWithFactory):
965-
966 layer = ZopelessDatabaseLayer
967
968 def setUp(self):
969@@ -252,7 +250,6 @@ class TestGetPubConfigPPA(TestCaseWithFactory):
970
971
972 class TestGetPubConfigPPACompatUefi(TestCaseWithFactory):
973-
974 layer = ZopelessDatabaseLayer
975
976 def setUp(self):
977@@ -275,7 +272,6 @@ class TestGetPubConfigPPACompatUefi(TestCaseWithFactory):
978
979
980 class TestGetPubConfigPPARepositoryFormatPython(TestCaseWithFactory):
981-
982 layer = ZopelessDatabaseLayer
983
984 def setUp(self):
985diff --git a/lib/lp/archivepublisher/tests/test_copy_signingkeys.py b/lib/lp/archivepublisher/tests/test_copy_signingkeys.py
986index a31e85e..a2d5364 100644
987--- a/lib/lp/archivepublisher/tests/test_copy_signingkeys.py
988+++ b/lib/lp/archivepublisher/tests/test_copy_signingkeys.py
989@@ -21,7 +21,6 @@ from lp.testing.script import run_script
990
991
992 class TestCopySigningKeysScript(TestCaseWithFactory):
993-
994 layer = ZopelessDatabaseLayer
995
996 def makeScript(self, test_args=None, archives=None, expect_exit=False):
997diff --git a/lib/lp/archivepublisher/tests/test_customupload.py b/lib/lp/archivepublisher/tests/test_customupload.py
998index f077874..7a22882 100644
999--- a/lib/lp/archivepublisher/tests/test_customupload.py
1000+++ b/lib/lp/archivepublisher/tests/test_customupload.py
1001@@ -216,7 +216,6 @@ class TestTarfileVerification(TestCase):
1002
1003
1004 class TestSigning(TestCaseWithFactory, RunPartsMixin):
1005-
1006 layer = LaunchpadZopelessLayer
1007 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
1008
1009diff --git a/lib/lp/archivepublisher/tests/test_ddtp_tarball.py b/lib/lp/archivepublisher/tests/test_ddtp_tarball.py
1010index 873d22f..f2c4812 100644
1011--- a/lib/lp/archivepublisher/tests/test_ddtp_tarball.py
1012+++ b/lib/lp/archivepublisher/tests/test_ddtp_tarball.py
1013@@ -21,7 +21,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
1014
1015
1016 class TestDdtpTarball(TestCaseWithFactory):
1017-
1018 layer = ZopelessDatabaseLayer
1019
1020 def setUp(self):
1021diff --git a/lib/lp/archivepublisher/tests/test_deathrow.py b/lib/lp/archivepublisher/tests/test_deathrow.py
1022index 77bcf8b..f2d9ff1 100644
1023--- a/lib/lp/archivepublisher/tests/test_deathrow.py
1024+++ b/lib/lp/archivepublisher/tests/test_deathrow.py
1025@@ -20,7 +20,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
1026
1027
1028 class TestDeathRow(TestCase):
1029-
1030 layer = LaunchpadZopelessLayer
1031
1032 def getTestPublisher(self, distroseries):
1033diff --git a/lib/lp/archivepublisher/tests/test_debian_installer.py b/lib/lp/archivepublisher/tests/test_debian_installer.py
1034index a41785e..b04619c 100644
1035--- a/lib/lp/archivepublisher/tests/test_debian_installer.py
1036+++ b/lib/lp/archivepublisher/tests/test_debian_installer.py
1037@@ -28,7 +28,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
1038
1039
1040 class TestDebianInstaller(RunPartsMixin, TestCaseWithFactory):
1041-
1042 layer = ZopelessDatabaseLayer
1043
1044 def setUp(self):
1045diff --git a/lib/lp/archivepublisher/tests/test_dist_upgrader.py b/lib/lp/archivepublisher/tests/test_dist_upgrader.py
1046index 1584d60..ace7cdb 100644
1047--- a/lib/lp/archivepublisher/tests/test_dist_upgrader.py
1048+++ b/lib/lp/archivepublisher/tests/test_dist_upgrader.py
1049@@ -31,7 +31,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
1050
1051
1052 class TestDistUpgrader(RunPartsMixin, TestCaseWithFactory):
1053-
1054 layer = ZopelessDatabaseLayer
1055
1056 def setUp(self):
1057diff --git a/lib/lp/archivepublisher/tests/test_dominator.py b/lib/lp/archivepublisher/tests/test_dominator.py
1058index e689f3c..7c9e7ad 100644
1059--- a/lib/lp/archivepublisher/tests/test_dominator.py
1060+++ b/lib/lp/archivepublisher/tests/test_dominator.py
1061@@ -939,7 +939,6 @@ def jumble(ordered_list):
1062
1063
1064 class TestDominatorMethods(TestCaseWithFactory):
1065-
1066 layer = ZopelessDatabaseLayer
1067
1068 def makeDominator(self, publications):
1069diff --git a/lib/lp/archivepublisher/tests/test_indices.py b/lib/lp/archivepublisher/tests/test_indices.py
1070index e1dcfda..1397ffd 100644
1071--- a/lib/lp/archivepublisher/tests/test_indices.py
1072+++ b/lib/lp/archivepublisher/tests/test_indices.py
1073@@ -39,7 +39,6 @@ def get_field(stanza_fields, name):
1074
1075
1076 class TestNativeArchiveIndexes(TestNativePublishingBase):
1077-
1078 deb_md5 = "008409e7feb1c24a6ccab9f6a62d24c5"
1079 deb_sha1 = "30b7b4e583fa380772c5a40e428434628faef8cf"
1080 deb_sha256 = (
1081diff --git a/lib/lp/archivepublisher/tests/test_meta_data.py b/lib/lp/archivepublisher/tests/test_meta_data.py
1082index f3a93ba..e7beb8f 100644
1083--- a/lib/lp/archivepublisher/tests/test_meta_data.py
1084+++ b/lib/lp/archivepublisher/tests/test_meta_data.py
1085@@ -18,7 +18,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
1086
1087
1088 class TestMetaData(TestCaseWithFactory):
1089-
1090 layer = LaunchpadZopelessLayer
1091
1092 def test_ubuntu_ppa(self):
1093diff --git a/lib/lp/archivepublisher/tests/test_pool.py b/lib/lp/archivepublisher/tests/test_pool.py
1094index 1329e34..64e0890 100644
1095--- a/lib/lp/archivepublisher/tests/test_pool.py
1096+++ b/lib/lp/archivepublisher/tests/test_pool.py
1097@@ -72,7 +72,6 @@ class FakePackageRelease:
1098
1099
1100 class FakeReleaseType(EnumeratedType):
1101-
1102 SOURCE = Item("Source")
1103 BINARY = Item("Binary")
1104
1105diff --git a/lib/lp/archivepublisher/tests/test_processaccepted.py b/lib/lp/archivepublisher/tests/test_processaccepted.py
1106index 96afe95..34c459e 100644
1107--- a/lib/lp/archivepublisher/tests/test_processaccepted.py
1108+++ b/lib/lp/archivepublisher/tests/test_processaccepted.py
1109@@ -26,7 +26,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
1110
1111
1112 class TestProcessAccepted(TestCaseWithFactory):
1113-
1114 layer = LaunchpadZopelessLayer
1115 dbuser = config.uploadqueue.dbuser
1116
1117@@ -175,7 +174,6 @@ class TestProcessAccepted(TestCaseWithFactory):
1118 ]
1119
1120 class UploadCheckingSynchronizer:
1121-
1122 commit_count = 0
1123
1124 def beforeCompletion(inner_self, txn):
1125diff --git a/lib/lp/archivepublisher/tests/test_publisherconfig.py b/lib/lp/archivepublisher/tests/test_publisherconfig.py
1126index 4907178..7966d8b 100644
1127--- a/lib/lp/archivepublisher/tests/test_publisherconfig.py
1128+++ b/lib/lp/archivepublisher/tests/test_publisherconfig.py
1129@@ -70,7 +70,6 @@ class TestPublisherConfig(TestCaseWithFactory):
1130
1131
1132 class TestPublisherConfigSecurity(TestCaseWithFactory):
1133-
1134 layer = DatabaseFunctionalLayer
1135
1136 def test_only_admin(self):
1137diff --git a/lib/lp/archivepublisher/tests/test_rosetta_translations.py b/lib/lp/archivepublisher/tests/test_rosetta_translations.py
1138index ea41b4c..1d8fca7 100644
1139--- a/lib/lp/archivepublisher/tests/test_rosetta_translations.py
1140+++ b/lib/lp/archivepublisher/tests/test_rosetta_translations.py
1141@@ -40,7 +40,6 @@ from lp.translations.model.translationpackagingjob import (
1142
1143
1144 class TestRosettaTranslations(TestCaseWithFactory):
1145-
1146 layer = LaunchpadZopelessLayer
1147
1148 def makeTranslationsLFA(self, tar_content=None, filename=None):
1149diff --git a/lib/lp/archivepublisher/tests/test_signing.py b/lib/lp/archivepublisher/tests/test_signing.py
1150index 696053d..547c02f 100644
1151--- a/lib/lp/archivepublisher/tests/test_signing.py
1152+++ b/lib/lp/archivepublisher/tests/test_signing.py
1153@@ -183,7 +183,6 @@ class FakeMethodCallLog(FakeMethod):
1154
1155
1156 class TestSigningHelpers(TestCaseWithFactory):
1157-
1158 layer = ZopelessDatabaseLayer
1159 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
1160
1161diff --git a/lib/lp/archivepublisher/tests/test_sync_signingkeys.py b/lib/lp/archivepublisher/tests/test_sync_signingkeys.py
1162index 05a0d24..bf5a5a2 100644
1163--- a/lib/lp/archivepublisher/tests/test_sync_signingkeys.py
1164+++ b/lib/lp/archivepublisher/tests/test_sync_signingkeys.py
1165@@ -52,7 +52,6 @@ from lp.testing.script import run_script
1166
1167
1168 class TestSyncSigningKeysScript(TestCaseWithFactory):
1169-
1170 layer = ZopelessDatabaseLayer
1171 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
1172
1173diff --git a/lib/lp/archivepublisher/utils.py b/lib/lp/archivepublisher/utils.py
1174index 6156c2c..18d5f03 100644
1175--- a/lib/lp/archivepublisher/utils.py
1176+++ b/lib/lp/archivepublisher/utils.py
1177@@ -37,7 +37,6 @@ def get_ppa_reference(ppa):
1178
1179
1180 class PlainTempFile:
1181-
1182 # Enumerated identifier.
1183 compression_type = IndexCompressionType.UNCOMPRESSED
1184 # Filename suffix.
1185diff --git a/lib/lp/archiveuploader/nascentuploadfile.py b/lib/lp/archiveuploader/nascentuploadfile.py
1186index c7773f0..01b2243 100644
1187--- a/lib/lp/archiveuploader/nascentuploadfile.py
1188+++ b/lib/lp/archiveuploader/nascentuploadfile.py
1189@@ -545,7 +545,6 @@ class BaseBinaryUploadFile(PackageUploadFile):
1190 policy,
1191 logger,
1192 ):
1193-
1194 PackageUploadFile.__init__(
1195 self,
1196 filepath,
1197diff --git a/lib/lp/archiveuploader/tests/test_buildinfofile.py b/lib/lp/archiveuploader/tests/test_buildinfofile.py
1198index b54e4e4..acd0d02 100644
1199--- a/lib/lp/archiveuploader/tests/test_buildinfofile.py
1200+++ b/lib/lp/archiveuploader/tests/test_buildinfofile.py
1201@@ -14,7 +14,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
1202
1203
1204 class TestBuildInfoFile(PackageUploadFileTestCase):
1205-
1206 layer = LaunchpadZopelessLayer
1207
1208 def getBaseBuildInfo(self):
1209@@ -54,7 +53,7 @@ class TestBuildInfoFile(PackageUploadFileTestCase):
1210 def test_properties(self):
1211 buildinfo = self.getBaseBuildInfo()
1212 changes = self.getBaseChanges()
1213- for (arch, is_sourceful, is_binaryful, is_archindep) in (
1214+ for arch, is_sourceful, is_binaryful, is_archindep in (
1215 ("source", True, False, False),
1216 ("all", False, True, True),
1217 ("i386", False, True, False),
1218diff --git a/lib/lp/archiveuploader/tests/test_changesfile.py b/lib/lp/archiveuploader/tests/test_changesfile.py
1219index 16a4c42..067b6bf 100644
1220--- a/lib/lp/archiveuploader/tests/test_changesfile.py
1221+++ b/lib/lp/archiveuploader/tests/test_changesfile.py
1222@@ -426,7 +426,6 @@ class ChangesFileTests(TestCase):
1223
1224
1225 class TestSignatureVerification(TestCase):
1226-
1227 layer = ZopelessDatabaseLayer
1228
1229 def setUp(self):
1230diff --git a/lib/lp/archiveuploader/tests/test_dscfile.py b/lib/lp/archiveuploader/tests/test_dscfile.py
1231index 23a15ca..e2ddeaf 100644
1232--- a/lib/lp/archiveuploader/tests/test_dscfile.py
1233+++ b/lib/lp/archiveuploader/tests/test_dscfile.py
1234@@ -119,7 +119,6 @@ class FakeChangesFile:
1235
1236
1237 class TestDSCFileWithDatabase(TestCaseWithFactory):
1238-
1239 layer = ZopelessDatabaseLayer
1240
1241 def test_checkFiles_verifies_additional_hashes(self):
1242@@ -312,7 +311,6 @@ class BaseTestSourceFileVerification(TestCase):
1243
1244
1245 class Test10SourceFormatVerification(BaseTestSourceFileVerification):
1246-
1247 format = SourcePackageFormat.FORMAT_1_0
1248
1249 wrong_files_error = (
1250@@ -378,7 +376,6 @@ class Test10SourceFormatVerification(BaseTestSourceFileVerification):
1251
1252
1253 class Test30QuiltSourceFormatVerification(BaseTestSourceFileVerification):
1254-
1255 format = SourcePackageFormat.FORMAT_3_0_QUILT
1256
1257 wrong_files_error = (
1258@@ -428,7 +425,6 @@ class Test30QuiltSourceFormatVerification(BaseTestSourceFileVerification):
1259
1260
1261 class Test30NativeSourceFormatVerification(BaseTestSourceFileVerification):
1262-
1263 format = SourcePackageFormat.FORMAT_3_0_NATIVE
1264
1265 wrong_files_error = "foo_1.dsc: must have only a tar.*."
1266diff --git a/lib/lp/archiveuploader/tests/test_nascentupload.py b/lib/lp/archiveuploader/tests/test_nascentupload.py
1267index 0667e31..4047317 100644
1268--- a/lib/lp/archiveuploader/tests/test_nascentupload.py
1269+++ b/lib/lp/archiveuploader/tests/test_nascentupload.py
1270@@ -120,7 +120,6 @@ class TestOverrideDDEBs(TestMatchDDEBs):
1271
1272
1273 class TestNascentUpload(TestCase):
1274-
1275 layer = ZopelessDatabaseLayer
1276
1277 def test_hash_mismatch_rejects(self):
1278diff --git a/lib/lp/archiveuploader/tests/test_nascentuploadfile.py b/lib/lp/archiveuploader/tests/test_nascentuploadfile.py
1279index 6ddfadc..0de2157 100644
1280--- a/lib/lp/archiveuploader/tests/test_nascentuploadfile.py
1281+++ b/lib/lp/archiveuploader/tests/test_nascentuploadfile.py
1282@@ -79,7 +79,6 @@ class NascentUploadFileTestCase(TestCaseWithFactory):
1283
1284
1285 class TestNascentUploadFile(NascentUploadFileTestCase):
1286-
1287 layer = ZopelessDatabaseLayer
1288
1289 def test_checkSizeAndCheckSum_validates_size(self):
1290diff --git a/lib/lp/archiveuploader/tests/test_private_maintainers.py b/lib/lp/archiveuploader/tests/test_private_maintainers.py
1291index 7576d2c..00cf378 100644
1292--- a/lib/lp/archiveuploader/tests/test_private_maintainers.py
1293+++ b/lib/lp/archiveuploader/tests/test_private_maintainers.py
1294@@ -9,7 +9,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1295
1296
1297 class TestPrivateMaintainers(TestCaseWithFactory):
1298-
1299 layer = DatabaseFunctionalLayer
1300
1301 def test_private_team_maintainer(self):
1302diff --git a/lib/lp/archiveuploader/tests/test_sync_notification.py b/lib/lp/archiveuploader/tests/test_sync_notification.py
1303index 7e5ca9f..e1fd5ee 100644
1304--- a/lib/lp/archiveuploader/tests/test_sync_notification.py
1305+++ b/lib/lp/archiveuploader/tests/test_sync_notification.py
1306@@ -53,7 +53,6 @@ class FakeChangesFile:
1307
1308
1309 class TestSyncNotification(TestCaseWithFactory):
1310-
1311 layer = LaunchpadZopelessLayer
1312
1313 def makePersonWithEmail(self):
1314diff --git a/lib/lp/archiveuploader/tests/test_uploadpolicy.py b/lib/lp/archiveuploader/tests/test_uploadpolicy.py
1315index 042901f..71dd315 100644
1316--- a/lib/lp/archiveuploader/tests/test_uploadpolicy.py
1317+++ b/lib/lp/archiveuploader/tests/test_uploadpolicy.py
1318@@ -146,7 +146,6 @@ class TestUploadPolicy_validateUploadType(TestCase):
1319
1320
1321 class TestUploadPolicy(TestCaseWithFactory):
1322-
1323 layer = DatabaseFunctionalLayer
1324
1325 def test_getUtility_returns_class(self):
1326diff --git a/lib/lp/archiveuploader/uploadpolicy.py b/lib/lp/archiveuploader/uploadpolicy.py
1327index 1448e31..2a99076 100644
1328--- a/lib/lp/archiveuploader/uploadpolicy.py
1329+++ b/lib/lp/archiveuploader/uploadpolicy.py
1330@@ -46,7 +46,6 @@ class IArchiveUploadPolicy(Interface):
1331
1332
1333 class ArchiveUploadType(EnumeratedType):
1334-
1335 SOURCE_ONLY = Item("Source only")
1336 BINARY_ONLY = Item("Binary only")
1337 MIXED_ONLY = Item("Mixed only")
1338diff --git a/lib/lp/archiveuploader/utils.py b/lib/lp/archiveuploader/utils.py
1339index 5b3e176..c355ba4 100644
1340--- a/lib/lp/archiveuploader/utils.py
1341+++ b/lib/lp/archiveuploader/utils.py
1342@@ -52,7 +52,6 @@ class UploadWarning(Warning):
1343
1344
1345 class DpkgSourceError(Exception):
1346-
1347 _fmt = "Unable to unpack source package (%(result)s): %(output)s"
1348
1349 def __init__(self, command, output, result):
1350@@ -310,7 +309,7 @@ def merge_file_lists(files, checksums_sha1, checksums_sha256, changes=True):
1351 # that we see.
1352 file_hashes = defaultdict(dict)
1353 hash_files = defaultdict(lambda: defaultdict(int))
1354- for (algo, checksums) in [
1355+ for algo, checksums in [
1356 ("SHA1", checksums_sha1),
1357 ("SHA256", checksums_sha256),
1358 ]:
1359diff --git a/lib/lp/blueprints/browser/person.py b/lib/lp/blueprints/browser/person.py
1360index 4efa613..f3b322c 100644
1361--- a/lib/lp/blueprints/browser/person.py
1362+++ b/lib/lp/blueprints/browser/person.py
1363@@ -15,7 +15,6 @@ from lp.services.webapp.publisher import LaunchpadView
1364
1365
1366 class PersonSpecsMenu(NavigationMenu):
1367-
1368 usedfor = IPerson
1369 facet = "specifications"
1370 links = [
1371diff --git a/lib/lp/blueprints/browser/specification.py b/lib/lp/blueprints/browser/specification.py
1372index 92f61af..262b7d6 100644
1373--- a/lib/lp/blueprints/browser/specification.py
1374+++ b/lib/lp/blueprints/browser/specification.py
1375@@ -475,7 +475,6 @@ class NewSpecificationFromSprintView(NewSpecificationFromNonTargetView):
1376
1377
1378 class SpecificationNavigation(Navigation):
1379-
1380 usedfor = ISpecification
1381
1382 @stepthrough("+subscription")
1383@@ -513,14 +512,12 @@ class SpecificationEditLinksMixin:
1384
1385
1386 class SpecificationActionMenu(NavigationMenu, SpecificationEditLinksMixin):
1387-
1388 usedfor = ISpecification
1389 facet = "specifications"
1390 links = ("edit", "supersede", "retarget")
1391
1392
1393 class SpecificationContextMenu(ContextMenu, SpecificationEditLinksMixin):
1394-
1395 usedfor = ISpecification
1396 links = [
1397 "edit",
1398@@ -864,7 +861,6 @@ class SpecificationEditSchema(ISpecification):
1399
1400
1401 class SpecificationEditView(LaunchpadEditFormView):
1402-
1403 schema = SpecificationEditSchema
1404 field_names = ["name", "title", "specurl", "summary", "whiteboard"]
1405 next_url = None
1406@@ -1071,12 +1067,10 @@ class SpecificationGoalDecideView(LaunchpadFormView):
1407
1408
1409 class ISpecificationRetargetingSchema(Interface):
1410-
1411 target = copy_field(ISpecification["target"], readonly=False)
1412
1413
1414 class SpecificationRetargetingView(LaunchpadFormView):
1415-
1416 schema = ISpecificationRetargetingSchema
1417 field_names = ["target"]
1418 label = _("Move this blueprint to a different project")
1419@@ -1385,7 +1379,6 @@ class SpecGraph:
1420
1421
1422 class SpecificationSprintAddView(LaunchpadFormView):
1423-
1424 schema = ISprintSpecification
1425 label = _("Propose specification for meeting agenda")
1426 field_names = ["sprint"]
1427@@ -1564,7 +1557,6 @@ here = os.path.dirname(__file__)
1428
1429
1430 class SpecificationTreePNGView(SpecificationTreeGraphView):
1431-
1432 fail_over_image_path = os.path.join(
1433 config.root,
1434 "lib",
1435diff --git a/lib/lp/blueprints/browser/specificationdependency.py b/lib/lp/blueprints/browser/specificationdependency.py
1436index 513ac61..5955658 100644
1437--- a/lib/lp/blueprints/browser/specificationdependency.py
1438+++ b/lib/lp/blueprints/browser/specificationdependency.py
1439@@ -23,7 +23,6 @@ from lp.services.webapp import LaunchpadView, canonical_url
1440
1441
1442 class AddSpecificationDependencySchema(Interface):
1443-
1444 dependency = copy_field(
1445 ISpecificationDependency["dependency"],
1446 readonly=False,
1447@@ -89,7 +88,6 @@ class SpecificationDependencyRemoveView(LaunchpadFormView):
1448
1449
1450 class SpecificationDependencyTreeView(LaunchpadView):
1451-
1452 label = "Blueprint dependency tree"
1453
1454 @property
1455diff --git a/lib/lp/blueprints/browser/specificationsubscription.py b/lib/lp/blueprints/browser/specificationsubscription.py
1456index c4e15ae..c8f9432 100644
1457--- a/lib/lp/blueprints/browser/specificationsubscription.py
1458+++ b/lib/lp/blueprints/browser/specificationsubscription.py
1459@@ -113,7 +113,6 @@ class SpecificationSubscriptionDeleteView(LaunchpadFormView):
1460
1461
1462 class SpecificationSubscriptionEditView(LaunchpadEditFormView):
1463-
1464 schema = ISpecificationSubscription
1465 field_names = ["essential"]
1466
1467diff --git a/lib/lp/blueprints/browser/sprint.py b/lib/lp/blueprints/browser/sprint.py
1468index debe896..d7eb8d0 100644
1469--- a/lib/lp/blueprints/browser/sprint.py
1470+++ b/lib/lp/blueprints/browser/sprint.py
1471@@ -91,7 +91,6 @@ class SprintFacets(StandardLaunchpadFacets):
1472
1473
1474 class SprintNavigation(Navigation):
1475-
1476 usedfor = ISprint
1477
1478
1479@@ -159,7 +158,6 @@ class SprintSpecificationsMenu(NavigationMenu, HasSpecificationsMenuMixin):
1480
1481
1482 class SprintSetNavigation(GetitemNavigation):
1483-
1484 usedfor = ISprintSet
1485
1486
1487@@ -170,13 +168,11 @@ class SprintSetBreadcrumb(Breadcrumb):
1488
1489
1490 class HasSprintsView(LaunchpadView):
1491-
1492 page_title = "Events"
1493
1494
1495 @implementer(IMajorHeadingView)
1496 class SprintView(HasSpecificationsView):
1497-
1498 # XXX Michael Nelson 20090923 bug=435255
1499 # This class inherits a label from HasSpecificationsView, which causes
1500 # a second h1 to display. But as this view implements IMajorHeadingView
1501@@ -335,7 +331,6 @@ class SprintAddView(LaunchpadFormView):
1502
1503
1504 class SprintBrandingView(BrandingChangeView):
1505-
1506 schema = ISprint
1507 # sabdfl 2007-03-28 deliberately leaving icon off the list, i think it
1508 # would be overkill, we can add it later if people ask for it
1509@@ -543,7 +538,6 @@ class SprintMeetingExportView(LaunchpadView):
1510 for spec in self.context.specifications(
1511 self.user, filter=[SpecificationFilter.ACCEPTED]
1512 ):
1513-
1514 # Skip sprints with no priority or less than LOW.
1515 if spec.priority < SpecificationPriority.UNDEFINED:
1516 continue
1517diff --git a/lib/lp/blueprints/browser/sprintattendance.py b/lib/lp/blueprints/browser/sprintattendance.py
1518index baeea2f..acb8d48 100644
1519--- a/lib/lp/blueprints/browser/sprintattendance.py
1520+++ b/lib/lp/blueprints/browser/sprintattendance.py
1521@@ -22,7 +22,6 @@ from lp.services.webapp import canonical_url
1522
1523
1524 class BaseSprintAttendanceAddView(LaunchpadFormView):
1525-
1526 schema = ISprintAttendance
1527 custom_widget_time_starts = DateTimeWidget
1528 custom_widget_time_ends = DateTimeWidget
1529diff --git a/lib/lp/blueprints/browser/tests/test_hasspecifications.py b/lib/lp/blueprints/browser/tests/test_hasspecifications.py
1530index 501fc63..289ee9f 100644
1531--- a/lib/lp/blueprints/browser/tests/test_hasspecifications.py
1532+++ b/lib/lp/blueprints/browser/tests/test_hasspecifications.py
1533@@ -7,7 +7,6 @@ from lp.testing.views import create_initialized_view
1534
1535
1536 class TestPersonSpecWorkloadView(TestCaseWithFactory):
1537-
1538 layer = DatabaseFunctionalLayer
1539
1540 def setUp(self):
1541diff --git a/lib/lp/blueprints/browser/tests/test_person_upcomingwork.py b/lib/lp/blueprints/browser/tests/test_person_upcomingwork.py
1542index 917012d..3dc34df 100644
1543--- a/lib/lp/blueprints/browser/tests/test_person_upcomingwork.py
1544+++ b/lib/lp/blueprints/browser/tests/test_person_upcomingwork.py
1545@@ -25,7 +25,6 @@ from lp.testing.views import create_initialized_view
1546
1547
1548 class Test_getWorkItemsDueBefore(TestCaseWithFactory):
1549-
1550 layer = DatabaseFunctionalLayer
1551
1552 def setUp(self):
1553@@ -190,7 +189,6 @@ class Test_getWorkItemsDueBefore(TestCaseWithFactory):
1554
1555
1556 class TestGenericWorkItem(TestCaseWithFactory):
1557-
1558 layer = DatabaseFunctionalLayer
1559
1560 def setUp(self):
1561@@ -254,7 +252,6 @@ class TestWorkItemContainer(TestCase):
1562
1563
1564 class TestPersonUpcomingWork(BrowserTestCase):
1565-
1566 layer = DatabaseFunctionalLayer
1567
1568 def setUp(self):
1569@@ -474,7 +471,6 @@ class TestPersonUpcomingWork(BrowserTestCase):
1570
1571
1572 class TestPersonUpcomingWorkView(TestCaseWithFactory):
1573-
1574 layer = DatabaseFunctionalLayer
1575
1576 def setUp(self):
1577diff --git a/lib/lp/blueprints/browser/tests/test_specification.py b/lib/lp/blueprints/browser/tests/test_specification.py
1578index 4dd927b..3833820 100644
1579--- a/lib/lp/blueprints/browser/tests/test_specification.py
1580+++ b/lib/lp/blueprints/browser/tests/test_specification.py
1581@@ -55,7 +55,6 @@ from lp.testing.views import create_initialized_view
1582
1583
1584 class TestSpecificationSearch(TestCaseWithFactory):
1585-
1586 layer = DatabaseFunctionalLayer
1587
1588 def test_search_with_percent(self):
1589@@ -67,7 +66,6 @@ class TestSpecificationSearch(TestCaseWithFactory):
1590
1591
1592 class TestBranchTraversal(TestCaseWithFactory):
1593-
1594 layer = DatabaseFunctionalLayer
1595
1596 def setUp(self):
1597@@ -227,7 +225,6 @@ class TestSpecificationView(BrowserTestCase):
1598
1599
1600 class TestSpecificationSet(BrowserTestCase):
1601-
1602 layer = DatabaseFunctionalLayer
1603
1604 def test_index_with_proprietary(self):
1605@@ -264,7 +261,6 @@ class TestSpecificationSet(BrowserTestCase):
1606
1607
1608 class TestSpecificationInformationType(BrowserTestCase):
1609-
1610 layer = DatabaseFunctionalLayer
1611
1612 portlet_tag = soupmatchers.Tag(
1613@@ -398,7 +394,6 @@ NEW_SPEC_FROM_ROOT_URL = "http://blueprints.launchpad.test/specs/+new"
1614
1615
1616 class NewSpecificationTests:
1617-
1618 expected_keys = {"PROPRIETARY", "PUBLIC", "EMBARGOED"}
1619
1620 def _create_form_data(self, context):
1621@@ -445,7 +440,6 @@ class NewSpecificationTests:
1622 class TestNewSpecificationFromRootView(
1623 TestCaseWithFactory, NewSpecificationTests
1624 ):
1625-
1626 layer = DatabaseFunctionalLayer
1627
1628 def createInitializedView(self):
1629@@ -466,7 +460,6 @@ class TestNewSpecificationFromRootView(
1630 class TestNewSpecificationFromSprintView(
1631 TestCaseWithFactory, NewSpecificationTests
1632 ):
1633-
1634 layer = DatabaseFunctionalLayer
1635
1636 def createInitializedView(self):
1637@@ -487,7 +480,6 @@ class TestNewSpecificationFromSprintView(
1638 class TestNewSpecificationFromProjectGroupView(
1639 TestCaseWithFactory, NewSpecificationTests
1640 ):
1641-
1642 layer = DatabaseFunctionalLayer
1643
1644 def createInitializedView(self):
1645@@ -508,7 +500,6 @@ class TestNewSpecificationFromProjectGroupView(
1646 class TestNewSpecificationFromProductView(
1647 TestCaseWithFactory, NewSpecificationTests
1648 ):
1649-
1650 layer = DatabaseFunctionalLayer
1651
1652 expected_keys = {"PROPRIETARY", "EMBARGOED"}
1653@@ -530,7 +521,6 @@ class TestNewSpecificationFromProductView(
1654 class TestNewSpecificationFromDistributionView(
1655 TestCaseWithFactory, NewSpecificationTests
1656 ):
1657-
1658 layer = DatabaseFunctionalLayer
1659
1660 expected_keys = {"PUBLIC"}
1661@@ -541,7 +531,6 @@ class TestNewSpecificationFromDistributionView(
1662
1663
1664 class TestNewSpecificationInformationType(BrowserTestCase):
1665-
1666 layer = DatabaseFunctionalLayer
1667
1668 def setUp(self):
1669@@ -628,7 +617,6 @@ class TestNewSpecificationInformationType(BrowserTestCase):
1670
1671
1672 class BaseNewSpecificationInformationTypeDefaultMixin:
1673-
1674 layer = DatabaseFunctionalLayer
1675
1676 def _setUp(self):
1677@@ -917,7 +905,6 @@ class TestSecificationHelpers(unittest.TestCase):
1678
1679
1680 class TestSpecificationFieldXHTMLRepresentations(TestCaseWithFactory):
1681-
1682 layer = DatabaseFunctionalLayer
1683
1684 def test_starter_empty(self):
1685diff --git a/lib/lp/blueprints/browser/tests/test_specificationdependency.py b/lib/lp/blueprints/browser/tests/test_specificationdependency.py
1686index b42cfa7..0b49e3f 100644
1687--- a/lib/lp/blueprints/browser/tests/test_specificationdependency.py
1688+++ b/lib/lp/blueprints/browser/tests/test_specificationdependency.py
1689@@ -20,7 +20,6 @@ from lp.testing.views import create_view
1690
1691
1692 class TestAddDependency(BrowserTestCase):
1693-
1694 layer = DatabaseFunctionalLayer
1695
1696 def test_add_dependency_by_url(self):
1697@@ -42,7 +41,6 @@ class TestAddDependency(BrowserTestCase):
1698
1699
1700 class TestDepTree(TestCaseWithFactory):
1701-
1702 layer = DatabaseFunctionalLayer
1703
1704 def test_deptree_filters_dependencies(self):
1705diff --git a/lib/lp/blueprints/browser/tests/test_specificationtarget.py b/lib/lp/blueprints/browser/tests/test_specificationtarget.py
1706index 8d51ef1..931c046 100644
1707--- a/lib/lp/blueprints/browser/tests/test_specificationtarget.py
1708+++ b/lib/lp/blueprints/browser/tests/test_specificationtarget.py
1709@@ -123,7 +123,6 @@ class TestHasSpecificationsViewInvolvement(TestCaseWithFactory):
1710
1711
1712 class TestAssignments(TestCaseWithFactory):
1713-
1714 layer = DatabaseFunctionalLayer
1715
1716 def setUp(self):
1717@@ -217,7 +216,6 @@ class TestHasSpecificationsTemplates(TestCaseWithFactory):
1718
1719
1720 class TestHasSpecificationsConfiguration(TestCaseWithFactory):
1721-
1722 layer = DatabaseFunctionalLayer
1723
1724 def test_cannot_configure_blueprints_product_no_edit_permission(self):
1725@@ -320,7 +318,6 @@ class SpecificationSetViewTestCase(TestCaseWithFactory):
1726
1727
1728 class TestPrivacy(BrowserTestCase):
1729-
1730 layer = DatabaseFunctionalLayer
1731
1732 def test_product_specs(self):
1733diff --git a/lib/lp/blueprints/browser/tests/test_sprint.py b/lib/lp/blueprints/browser/tests/test_sprint.py
1734index 00d63f3..dadc252 100644
1735--- a/lib/lp/blueprints/browser/tests/test_sprint.py
1736+++ b/lib/lp/blueprints/browser/tests/test_sprint.py
1737@@ -22,7 +22,6 @@ from lp.testing.matchers import BrowsesWithQueryLimit, HasQueryCount
1738
1739
1740 class TestSprintIndex(BrowserTestCase):
1741-
1742 layer = DatabaseFunctionalLayer
1743
1744 def test_query_count(self):
1745@@ -64,7 +63,6 @@ class TestSprintIndex(BrowserTestCase):
1746
1747
1748 class TestSprintDeleteView(BrowserTestCase):
1749-
1750 layer = DatabaseFunctionalLayer
1751
1752 def makePopulatedSprint(self):
1753diff --git a/lib/lp/blueprints/browser/tests/test_views.py b/lib/lp/blueprints/browser/tests/test_views.py
1754index 1e2c49e..5acb18d 100644
1755--- a/lib/lp/blueprints/browser/tests/test_views.py
1756+++ b/lib/lp/blueprints/browser/tests/test_views.py
1757@@ -25,7 +25,6 @@ from lp.testing.systemdocs import LayeredDocFileSuite, setUp, tearDown
1758
1759
1760 class TestAssignments(TestCaseWithFactory):
1761-
1762 layer = DatabaseFunctionalLayer
1763
1764 def setUp(self):
1765diff --git a/lib/lp/blueprints/interfaces/specification.py b/lib/lp/blueprints/interfaces/specification.py
1766index b47f64d..6615407 100644
1767--- a/lib/lp/blueprints/interfaces/specification.py
1768+++ b/lib/lp/blueprints/interfaces/specification.py
1769@@ -83,7 +83,6 @@ class GoalProposeError(Exception):
1770
1771
1772 class SpecNameField(ContentNameField):
1773-
1774 errormessage = _("%s is already in use by another blueprint.")
1775
1776 @property
1777@@ -126,7 +125,6 @@ class SpecNameField(ContentNameField):
1778
1779
1780 class SpecURLField(TextLine):
1781-
1782 errormessage = _('%s is already registered by <a href="%s">%s</a>.')
1783
1784 def _validate(self, specurl):
1785diff --git a/lib/lp/blueprints/interfaces/sprint.py b/lib/lp/blueprints/interfaces/sprint.py
1786index 9809925..e9a52d4 100644
1787--- a/lib/lp/blueprints/interfaces/sprint.py
1788+++ b/lib/lp/blueprints/interfaces/sprint.py
1789@@ -32,7 +32,6 @@ from lp.services.fields import (
1790
1791
1792 class SprintNameField(ContentNameField):
1793-
1794 errormessage = _("%s is already in use by another sprint.")
1795
1796 @property
1797diff --git a/lib/lp/blueprints/model/specificationworkitem.py b/lib/lp/blueprints/model/specificationworkitem.py
1798index a7e5ec1..79f9316 100644
1799--- a/lib/lp/blueprints/model/specificationworkitem.py
1800+++ b/lib/lp/blueprints/model/specificationworkitem.py
1801@@ -24,7 +24,6 @@ from lp.services.helpers import backslashreplace
1802
1803 @implementer(ISpecificationWorkItem)
1804 class SpecificationWorkItem(StormBase):
1805-
1806 __storm_table__ = "SpecificationWorkItem"
1807 __storm_order__ = "id"
1808
1809diff --git a/lib/lp/blueprints/model/tests/test_specification.py b/lib/lp/blueprints/model/tests/test_specification.py
1810index 79f6b5c..f361df4 100644
1811--- a/lib/lp/blueprints/model/tests/test_specification.py
1812+++ b/lib/lp/blueprints/model/tests/test_specification.py
1813@@ -151,7 +151,6 @@ class TestSpecificationDependencies(TestCaseWithFactory):
1814
1815
1816 class TestSpecificationSubscriptionSort(TestCaseWithFactory):
1817-
1818 layer = DatabaseFunctionalLayer
1819
1820 def test_subscribers(self):
1821@@ -174,7 +173,6 @@ class TestSpecificationSubscriptionSort(TestCaseWithFactory):
1822
1823
1824 class TestSpecificationValidation(TestCaseWithFactory):
1825-
1826 layer = DatabaseFunctionalLayer
1827
1828 def test_specurl_validation_duplicate(self):
1829@@ -746,7 +744,6 @@ class TestSpecificationWorkItems(TestCaseWithFactory):
1830
1831
1832 class TestSpecificationInformationType(TestCaseWithFactory):
1833-
1834 layer = DatabaseFunctionalLayer
1835
1836 def test_transitionToInformationType(self):
1837diff --git a/lib/lp/blueprints/model/tests/test_sprint.py b/lib/lp/blueprints/model/tests/test_sprint.py
1838index 7fdbcc9..5c5ba93 100644
1839--- a/lib/lp/blueprints/model/tests/test_sprint.py
1840+++ b/lib/lp/blueprints/model/tests/test_sprint.py
1841@@ -27,7 +27,6 @@ def list_result(sprint, filter=None, user=None):
1842
1843
1844 class TestSpecifications(TestCaseWithFactory):
1845-
1846 layer = DatabaseFunctionalLayer
1847
1848 def setUp(self):
1849@@ -246,7 +245,6 @@ class TestSpecifications(TestCaseWithFactory):
1850
1851
1852 class TestSprintAttendancesSort(TestCaseWithFactory):
1853-
1854 layer = DatabaseFunctionalLayer
1855
1856 def test_attendances(self):
1857diff --git a/lib/lp/blueprints/publisher.py b/lib/lp/blueprints/publisher.py
1858index a138910..0f56d5b 100644
1859--- a/lib/lp/blueprints/publisher.py
1860+++ b/lib/lp/blueprints/publisher.py
1861@@ -24,7 +24,6 @@ from lp.services.webapp.servers import (
1862
1863 @implementer(IFacet)
1864 class SpecificationsFacet:
1865-
1866 name = "specifications"
1867 rootsite = "blueprints"
1868 text = "Blueprints"
1869diff --git a/lib/lp/blueprints/security.py b/lib/lp/blueprints/security.py
1870index a310438..76217f4 100644
1871--- a/lib/lp/blueprints/security.py
1872+++ b/lib/lp/blueprints/security.py
1873@@ -26,7 +26,6 @@ from lp.security import ModerateByRegistryExpertsOrAdmins
1874
1875
1876 class EditSpecificationBranch(AuthorizationBase):
1877-
1878 usedfor = ISpecificationBranch
1879 permission = "launchpad.Edit"
1880
1881@@ -39,7 +38,6 @@ class EditSpecificationBranch(AuthorizationBase):
1882
1883
1884 class ViewSpecificationBranch(EditSpecificationBranch):
1885-
1886 permission = "launchpad.View"
1887
1888 def checkUnauthenticated(self):
1889@@ -62,7 +60,6 @@ class AnonymousAccessToISpecificationPublic(AnonymousAuthorization):
1890
1891
1892 class ViewSpecification(AuthorizationBase):
1893-
1894 permission = "launchpad.LimitedView"
1895 usedfor = ISpecificationView
1896
1897diff --git a/lib/lp/blueprints/tests/test_hasspecifications.py b/lib/lp/blueprints/tests/test_hasspecifications.py
1898index 7082cd5..bd735d6 100644
1899--- a/lib/lp/blueprints/tests/test_hasspecifications.py
1900+++ b/lib/lp/blueprints/tests/test_hasspecifications.py
1901@@ -11,7 +11,6 @@ from lp.testing.matchers import DoesNotSnapshot
1902
1903
1904 class HasSpecificationsTests(TestCaseWithFactory):
1905-
1906 layer = DatabaseFunctionalLayer
1907
1908 def assertNamesOfSpecificationsAre(self, expected_names, specifications):
1909diff --git a/lib/lp/blueprints/tests/test_specification.py b/lib/lp/blueprints/tests/test_specification.py
1910index 2778005..728bcf5 100644
1911--- a/lib/lp/blueprints/tests/test_specification.py
1912+++ b/lib/lp/blueprints/tests/test_specification.py
1913@@ -52,7 +52,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
1914
1915
1916 class SpecificationTests(TestCaseWithFactory):
1917-
1918 layer = DatabaseFunctionalLayer
1919
1920 def test_target_driver_has_edit_rights(self):
1921@@ -721,7 +720,6 @@ class SpecificationTests(TestCaseWithFactory):
1922
1923
1924 class TestSpecificationSet(TestCaseWithFactory):
1925-
1926 layer = DatabaseFunctionalLayer
1927
1928 def setUp(self):
1929@@ -776,7 +774,6 @@ def list_result(context, filter=None, user=None):
1930
1931
1932 class TestSpecifications(TestCaseWithFactory):
1933-
1934 layer = DatabaseFunctionalLayer
1935
1936 def setUp(self):
1937@@ -1055,7 +1052,6 @@ class TestSpecifications(TestCaseWithFactory):
1938
1939
1940 class TestBugLinks(TestCaseWithFactory):
1941-
1942 layer = DatabaseFunctionalLayer
1943
1944 def test_link_and_unlink(self):
1945diff --git a/lib/lp/blueprints/tests/test_webservice.py b/lib/lp/blueprints/tests/test_webservice.py
1946index f0f1ae1..c7ffd6f 100644
1947--- a/lib/lp/blueprints/tests/test_webservice.py
1948+++ b/lib/lp/blueprints/tests/test_webservice.py
1949@@ -350,7 +350,6 @@ class SpecificationAttributeWebserviceTests(TestCaseWithFactory):
1950
1951
1952 class SpecificationMutationTests(TestCaseWithFactory):
1953-
1954 layer = DatabaseFunctionalLayer
1955
1956 def test_set_information_type(self):
1957@@ -569,7 +568,6 @@ class IHasSpecificationsTests(TestCaseWithFactory):
1958
1959
1960 class TestSpecificationSubscription(TestCaseWithFactory):
1961-
1962 layer = DatabaseFunctionalLayer
1963
1964 def test_subscribe(self):
1965@@ -636,7 +634,6 @@ class TestSpecificationSubscription(TestCaseWithFactory):
1966
1967
1968 class TestSpecificationBugLinks(TestCaseWithFactory):
1969-
1970 layer = DatabaseFunctionalLayer
1971
1972 def test_bug_linking(self):
1973@@ -713,7 +710,6 @@ class TestSpecificationBugLinks(TestCaseWithFactory):
1974
1975
1976 class TestSpecificationGoalHandling(TestCaseWithFactory):
1977-
1978 layer = DatabaseFunctionalLayer
1979
1980 def setUp(self):
1981diff --git a/lib/lp/bugs/adapters/tests/test_bugchange.py b/lib/lp/bugs/adapters/tests/test_bugchange.py
1982index 6a8c3b9..0e8515a 100644
1983--- a/lib/lp/bugs/adapters/tests/test_bugchange.py
1984+++ b/lib/lp/bugs/adapters/tests/test_bugchange.py
1985@@ -19,7 +19,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
1986
1987
1988 class BugChangeTestCase(TestCaseWithFactory):
1989-
1990 layer = ZopelessDatabaseLayer
1991
1992 def setUp(self):
1993@@ -42,7 +41,6 @@ class BugChangeTestCase(TestCaseWithFactory):
1994
1995
1996 class BugChangeLevelTestCase(TestCaseWithFactory):
1997-
1998 layer = ZopelessDatabaseLayer
1999
2000 def setUp(self):
2001diff --git a/lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py b/lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py
2002index b17527f..80aaf13 100644
2003--- a/lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py
2004+++ b/lib/lp/bugs/adapters/tests/test_bugsubscriptionfilter.py
2005@@ -14,7 +14,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
2006
2007
2008 class BugSubscriptionFilterTestCase(TestCaseWithFactory):
2009-
2010 layer = DatabaseFunctionalLayer
2011
2012 def test_bugsubscriptionfilter_to_product_with_product(self):
2013diff --git a/lib/lp/bugs/browser/bug.py b/lib/lp/bugs/browser/bug.py
2014index 717f39c..3a34c23 100644
2015--- a/lib/lp/bugs/browser/bug.py
2016+++ b/lib/lp/bugs/browser/bug.py
2017@@ -631,7 +631,6 @@ class BugView(LaunchpadView, BugViewMixin):
2018
2019
2020 class BugActivity(BugView):
2021-
2022 page_title = "Activity log"
2023
2024 @cachedproperty
2025@@ -1186,7 +1185,6 @@ class BugTextView(LaunchpadView):
2026 ]
2027
2028 def bug_text(self):
2029-
2030 """Return the bug information for text display."""
2031 bug = self.context
2032
2033diff --git a/lib/lp/bugs/browser/bugalsoaffects.py b/lib/lp/bugs/browser/bugalsoaffects.py
2034index 642dd90..3558dc4 100644
2035--- a/lib/lp/bugs/browser/bugalsoaffects.py
2036+++ b/lib/lp/bugs/browser/bugalsoaffects.py
2037@@ -344,7 +344,6 @@ class BugTaskCreationStep(AlsoAffectsStep):
2038
2039
2040 class IAddDistroBugTaskForm(IAddBugTaskForm):
2041-
2042 sourcepackagename = Choice(
2043 title=_("Source Package Name"),
2044 required=False,
2045@@ -777,7 +776,6 @@ class BugTrackerCreationStep(AlsoAffectsStep):
2046
2047
2048 class DistroBugTrackerCreationStep(BugTrackerCreationStep):
2049-
2050 _next_step = DistroBugTaskCreationStep
2051 _field_names = ["distribution", "sourcepackagename", "bug_url"]
2052 custom_widget_distribution = CustomWidgetFactory(
2053@@ -793,7 +791,6 @@ class DistroBugTrackerCreationStep(BugTrackerCreationStep):
2054
2055
2056 class UpstreamBugTrackerCreationStep(BugTrackerCreationStep):
2057-
2058 schema = IAddBugTaskWithUpstreamLinkForm
2059 _next_step = ProductBugTaskCreationStep
2060 _field_names = ["product", "bug_url", "link_upstream_how"]
2061diff --git a/lib/lp/bugs/browser/bugattachment.py b/lib/lp/bugs/browser/bugattachment.py
2062index 0588b51..65d782b 100644
2063--- a/lib/lp/bugs/browser/bugattachment.py
2064+++ b/lib/lp/bugs/browser/bugattachment.py
2065@@ -70,7 +70,6 @@ class BugAttachmentContentCheck:
2066
2067
2068 class BugAttachmentSetNavigation(GetitemNavigation):
2069-
2070 usedfor = IBugAttachmentSet
2071
2072
2073diff --git a/lib/lp/bugs/browser/bugmessage.py b/lib/lp/bugs/browser/bugmessage.py
2074index 45761fc..4f61fb6 100644
2075--- a/lib/lp/bugs/browser/bugmessage.py
2076+++ b/lib/lp/bugs/browser/bugmessage.py
2077@@ -53,7 +53,6 @@ class BugMessageAddFormView(LaunchpadFormView, BugAttachmentContentCheck):
2078 return "%s/+addcomment" % canonical_url(self.context)
2079
2080 def validate(self, data):
2081-
2082 # Ensure either a comment or filecontent or a URL was provided,
2083 # but only if no errors have already been noted.
2084 if len(self.errors) == 0:
2085@@ -113,7 +112,6 @@ class BugMessageAddFormView(LaunchpadFormView, BugAttachmentContentCheck):
2086 attachment_description = data.get("attachment_description")
2087
2088 if file_:
2089-
2090 # Slashes in filenames cause problems, convert them to dashes
2091 # instead.
2092 filename = file_.filename.replace("/", "-")
2093diff --git a/lib/lp/bugs/browser/bugnomination.py b/lib/lp/bugs/browser/bugnomination.py
2094index cf6c816..22d8941 100644
2095--- a/lib/lp/bugs/browser/bugnomination.py
2096+++ b/lib/lp/bugs/browser/bugnomination.py
2097@@ -28,7 +28,6 @@ from lp.services.webapp.interfaces import ILaunchBag
2098
2099
2100 class BugNominationView(LaunchpadFormView):
2101-
2102 schema = IBugNominationForm
2103 initial_focus_widget = None
2104 custom_widget_nominatable_series = LabeledMultiCheckBoxWidget
2105diff --git a/lib/lp/bugs/browser/bugtarget.py b/lib/lp/bugs/browser/bugtarget.py
2106index c706156..6e4b6f8 100644
2107--- a/lib/lp/bugs/browser/bugtarget.py
2108+++ b/lib/lp/bugs/browser/bugtarget.py
2109@@ -986,7 +986,6 @@ class FileBugAdvancedView(LaunchpadView):
2110
2111
2112 class IDistroBugAddForm(IBugAddForm):
2113-
2114 packagename = copy_field(
2115 IBugAddForm["packagename"], vocabularyName="DistributionSourcePackage"
2116 )
2117@@ -1076,7 +1075,6 @@ class FilebugShowSimilarBugsView(FileBugViewBase):
2118
2119
2120 class FileBugGuidedView(FilebugShowSimilarBugsView):
2121-
2122 page_title = "Report a bug"
2123
2124 _SEARCH_FOR_DUPES = ViewPageTemplateFile(
2125diff --git a/lib/lp/bugs/browser/bugtask.py b/lib/lp/bugs/browser/bugtask.py
2126index f30dea5..ad3a7a2 100644
2127--- a/lib/lp/bugs/browser/bugtask.py
2128+++ b/lib/lp/bugs/browser/bugtask.py
2129@@ -1158,7 +1158,6 @@ class BugTaskPrivilegeMixin:
2130
2131
2132 class IBugTaskEditForm(IBugTask):
2133-
2134 sourcepackagename = copy_field(
2135 IBugTask["sourcepackagename"],
2136 vocabularyName="DistributionSourcePackage",
2137diff --git a/lib/lp/bugs/browser/bugtracker.py b/lib/lp/bugs/browser/bugtracker.py
2138index 0c02abc..07389e1 100644
2139--- a/lib/lp/bugs/browser/bugtracker.py
2140+++ b/lib/lp/bugs/browser/bugtracker.py
2141@@ -84,12 +84,10 @@ NO_DIRECT_CREATION_TRACKERS = SINGLE_INSTANCE_TRACKERS + (
2142
2143
2144 class BugTrackerSetNavigation(GetitemNavigation):
2145-
2146 usedfor = IBugTrackerSet
2147
2148
2149 class BugTrackerSetContextMenu(ContextMenu):
2150-
2151 usedfor = IBugTrackerSet
2152
2153 links = ["newbugtracker"]
2154@@ -100,7 +98,6 @@ class BugTrackerSetContextMenu(ContextMenu):
2155
2156
2157 class BugTrackerAddView(LaunchpadFormView):
2158-
2159 page_title = "Register an external bug tracker"
2160 schema = IBugTracker
2161 label = page_title
2162@@ -216,7 +213,6 @@ class BugTrackerSetView(LaunchpadView):
2163
2164
2165 class BugTrackerView(LaunchpadView):
2166-
2167 usedfor = IBugTracker
2168
2169 @property
2170@@ -250,7 +246,6 @@ BUG_TRACKER_ACTIVE_VOCABULARY = SimpleVocabulary.fromItems(
2171
2172
2173 class BugTrackerEditView(LaunchpadEditFormView):
2174-
2175 schema = IBugTracker
2176 custom_widget_summary = CustomWidgetFactory(
2177 TextAreaWidget, width=30, height=5
2178@@ -469,7 +464,6 @@ class BugTrackerEditView(LaunchpadEditFormView):
2179
2180
2181 class BugTrackerNavigation(Navigation):
2182-
2183 usedfor = IBugTracker
2184
2185 def traverse(self, remotebug):
2186@@ -578,7 +572,6 @@ class BugTrackerEditComponentView(LaunchpadEditFormView):
2187
2188
2189 class BugTrackerComponentGroupNavigation(Navigation):
2190-
2191 usedfor = IBugTrackerComponentGroup
2192
2193 def traverse(self, id):
2194@@ -618,7 +611,6 @@ class RemoteBugView(LaunchpadView):
2195
2196
2197 class BugTrackerNavigationMenu(NavigationMenu):
2198-
2199 usedfor = BugTrackerView
2200 facet = "bugs"
2201 links = ["edit"]
2202diff --git a/lib/lp/bugs/browser/bugwatch.py b/lib/lp/bugs/browser/bugwatch.py
2203index 70ba5eb..d1d51bd 100644
2204--- a/lib/lp/bugs/browser/bugwatch.py
2205+++ b/lib/lp/bugs/browser/bugwatch.py
2206@@ -33,7 +33,6 @@ from lp.services.webapp.interfaces import ILaunchBag
2207
2208
2209 class BugWatchSetNavigation(GetitemNavigation):
2210-
2211 usedfor = IBugWatchSet
2212
2213
2214diff --git a/lib/lp/bugs/browser/cve.py b/lib/lp/bugs/browser/cve.py
2215index 1067612..5f42ed7 100644
2216--- a/lib/lp/bugs/browser/cve.py
2217+++ b/lib/lp/bugs/browser/cve.py
2218@@ -30,12 +30,10 @@ from lp.services.webapp.batching import BatchNavigator
2219
2220
2221 class CveSetNavigation(GetitemNavigation):
2222-
2223 usedfor = ICveSet
2224
2225
2226 class CveContextMenu(ContextMenu):
2227-
2228 usedfor = ICve
2229 links = ["linkbug", "unlinkbug"]
2230
2231@@ -50,7 +48,6 @@ class CveContextMenu(ContextMenu):
2232
2233
2234 class CveSetContextMenu(ContextMenu):
2235-
2236 usedfor = ICveSet
2237 links = ["findcve", "allcve"]
2238
2239diff --git a/lib/lp/bugs/browser/cvereport.py b/lib/lp/bugs/browser/cvereport.py
2240index e2f2f7d..2c5ae2d 100644
2241--- a/lib/lp/bugs/browser/cvereport.py
2242+++ b/lib/lp/bugs/browser/cvereport.py
2243@@ -84,7 +84,6 @@ class CVEReportView(LaunchpadView):
2244
2245 @cachedproperty
2246 def _bugtaskcves(self) -> BugTaskCves:
2247-
2248 bugtaskcves = BugTaskCves(open=[], resolved=[])
2249
2250 search_params = BugTaskSearchParams(self.user, has_cve=True)
2251diff --git a/lib/lp/bugs/browser/malone.py b/lib/lp/bugs/browser/malone.py
2252index ff178e8..6b72df5 100644
2253--- a/lib/lp/bugs/browser/malone.py
2254+++ b/lib/lp/bugs/browser/malone.py
2255@@ -25,7 +25,6 @@ from lp.services.webapp.menu import NavigationMenu
2256
2257
2258 class MaloneApplicationNavigation(Navigation):
2259-
2260 usedfor = IMaloneApplication
2261
2262 newlayer = BugsLayer
2263@@ -66,7 +65,6 @@ class MaloneApplicationNavigation(Navigation):
2264
2265
2266 class MaloneRelatedPages(NavigationMenu):
2267-
2268 facet = "bugs"
2269 title = "Related pages"
2270 usedfor = MaloneView
2271diff --git a/lib/lp/bugs/browser/person.py b/lib/lp/bugs/browser/person.py
2272index 3182f60..cb004b8 100644
2273--- a/lib/lp/bugs/browser/person.py
2274+++ b/lib/lp/bugs/browser/person.py
2275@@ -63,7 +63,6 @@ def get_package_search_url(dsp_bugs_url, extra_params=None):
2276
2277
2278 class PersonBugsMenu(NavigationMenu):
2279-
2280 usedfor = IPerson
2281 facet = "bugs"
2282 links = [
2283@@ -159,7 +158,6 @@ class RelevantMilestonesMixin:
2284
2285
2286 class BugSubscriberPackageBugsOverView(LaunchpadView):
2287-
2288 label = "Subscribed packages"
2289
2290 @cachedproperty
2291diff --git a/lib/lp/bugs/browser/structuralsubscription.py b/lib/lp/bugs/browser/structuralsubscription.py
2292index ddfa4d5..95e5145 100644
2293--- a/lib/lp/bugs/browser/structuralsubscription.py
2294+++ b/lib/lp/bugs/browser/structuralsubscription.py
2295@@ -54,7 +54,6 @@ from lp.services.webapp.publisher import (
2296
2297
2298 class StructuralSubscriptionNavigation(Navigation):
2299-
2300 usedfor = IStructuralSubscription
2301
2302 @stepthrough("+filter")
2303diff --git a/lib/lp/bugs/browser/tests/test_bug_context_menu.py b/lib/lp/bugs/browser/tests/test_bug_context_menu.py
2304index 2b2472d..d3a1dea 100644
2305--- a/lib/lp/bugs/browser/tests/test_bug_context_menu.py
2306+++ b/lib/lp/bugs/browser/tests/test_bug_context_menu.py
2307@@ -16,7 +16,6 @@ from lp.testing.views import create_initialized_view
2308
2309
2310 class TestBugContextMenu(TestCaseWithFactory):
2311-
2312 layer = DatabaseFunctionalLayer
2313
2314 def setUp(self):
2315diff --git a/lib/lp/bugs/browser/tests/test_bug_views.py b/lib/lp/bugs/browser/tests/test_bug_views.py
2316index 213887a..b4373ae 100644
2317--- a/lib/lp/bugs/browser/tests/test_bug_views.py
2318+++ b/lib/lp/bugs/browser/tests/test_bug_views.py
2319@@ -43,7 +43,6 @@ from lp.testing.views import create_initialized_view, create_view
2320
2321
2322 class TestPrivateBugLinks(BrowserTestCase):
2323-
2324 layer = DatabaseFunctionalLayer
2325
2326 def test_private_master_not_linked_without_permission(self):
2327@@ -227,7 +226,6 @@ class TestEmailObfuscated(BrowserTestCase):
2328
2329
2330 class TestBugPortletSubscribers(TestCaseWithFactory):
2331-
2332 layer = DatabaseFunctionalLayer
2333
2334 def setUp(self):
2335@@ -956,7 +954,6 @@ class TestBugMarkAsDuplicateView(TestCaseWithFactory):
2336
2337
2338 class TestBugActivityView(TestCaseWithFactory):
2339-
2340 layer = LaunchpadFunctionalLayer
2341
2342 def test_bug_activity_query_count(self):
2343@@ -986,7 +983,6 @@ class TestBugActivityView(TestCaseWithFactory):
2344
2345
2346 class TestMainBugView(BrowserTestCase):
2347-
2348 layer = DatabaseFunctionalLayer
2349
2350 def setUp(self):
2351diff --git a/lib/lp/bugs/browser/tests/test_bugalsoaffects.py b/lib/lp/bugs/browser/tests/test_bugalsoaffects.py
2352index d8c3f3a..0e49526 100644
2353--- a/lib/lp/bugs/browser/tests/test_bugalsoaffects.py
2354+++ b/lib/lp/bugs/browser/tests/test_bugalsoaffects.py
2355@@ -12,7 +12,6 @@ from lp.testing.pages import get_feedback_messages
2356
2357
2358 class TestBugAlsoAffectsDistribution(TestCaseWithFactory):
2359-
2360 layer = DatabaseFunctionalLayer
2361
2362 def setUp(self):
2363diff --git a/lib/lp/bugs/browser/tests/test_bugcomment.py b/lib/lp/bugs/browser/tests/test_bugcomment.py
2364index 24d664c..35b7436 100644
2365--- a/lib/lp/bugs/browser/tests/test_bugcomment.py
2366+++ b/lib/lp/bugs/browser/tests/test_bugcomment.py
2367@@ -64,7 +64,6 @@ class BugCommentStub:
2368
2369
2370 class PersonStub:
2371-
2372 ids = count(1)
2373
2374 def __init__(self):
2375@@ -218,7 +217,6 @@ class TestGroupCommentsWithActivities(TestCase):
2376
2377
2378 class TestBugCommentVisibility(BrowserTestCase, TestMessageVisibilityMixin):
2379-
2380 layer = DatabaseFunctionalLayer
2381
2382 def makeHiddenMessage(self, comment_owner=None):
2383@@ -240,7 +238,6 @@ class TestBugCommentVisibility(BrowserTestCase, TestMessageVisibilityMixin):
2384
2385
2386 class TestBugHideCommentControls(BrowserTestCase, TestHideMessageControlMixin):
2387-
2388 layer = DatabaseFunctionalLayer
2389
2390 def getContext(self, comment_owner=None):
2391@@ -283,7 +280,6 @@ class TestBugHideCommentControls(BrowserTestCase, TestHideMessageControlMixin):
2392
2393
2394 class TestBugCommentMicroformats(BrowserTestCase):
2395-
2396 layer = DatabaseFunctionalLayer
2397
2398 def test_bug_comment_metadata(self):
2399@@ -307,7 +303,6 @@ class TestBugCommentMicroformats(BrowserTestCase):
2400
2401
2402 class TestBugCommentImplementsInterface(TestCaseWithFactory):
2403-
2404 layer = DatabaseFunctionalLayer
2405
2406 def test_bug_comment_implements_interface(self):
2407@@ -346,7 +341,6 @@ def make_bug_comment(factory, *args, **kwargs):
2408
2409
2410 class TestBugCommentInBrowser(BrowserTestCase):
2411-
2412 layer = DatabaseFunctionalLayer
2413
2414 def test_excessive_comments_redirect_to_download(self):
2415diff --git a/lib/lp/bugs/browser/tests/test_buglisting.py b/lib/lp/bugs/browser/tests/test_buglisting.py
2416index 271dcf1..f11f586 100644
2417--- a/lib/lp/bugs/browser/tests/test_buglisting.py
2418+++ b/lib/lp/bugs/browser/tests/test_buglisting.py
2419@@ -27,7 +27,6 @@ from lp.testing.views import create_initialized_view, create_view
2420
2421
2422 class TestBugTaskSearchListingPage(BrowserTestCase):
2423-
2424 layer = DatabaseFunctionalLayer
2425
2426 def _makeDistributionSourcePackage(self):
2427@@ -314,7 +313,6 @@ class BugTargetTestCase(TestCaseWithFactory):
2428
2429
2430 class TestBugTaskSearchListingViewProduct(BugTargetTestCase):
2431-
2432 layer = DatabaseFunctionalLayer
2433
2434 def test_external_bugtracker_is_none(self):
2435@@ -409,7 +407,6 @@ class TestBugTaskSearchListingViewProduct(BugTargetTestCase):
2436
2437
2438 class TestBugTaskSearchListingViewDSP(BugTargetTestCase):
2439-
2440 layer = DatabaseFunctionalLayer
2441
2442 def _getBugTarget(self, obj):
2443diff --git a/lib/lp/bugs/browser/tests/test_bugnomination.py b/lib/lp/bugs/browser/tests/test_bugnomination.py
2444index 9732f71..b3b2eb6 100644
2445--- a/lib/lp/bugs/browser/tests/test_bugnomination.py
2446+++ b/lib/lp/bugs/browser/tests/test_bugnomination.py
2447@@ -174,7 +174,6 @@ class TestBugNominationView(TestCaseWithFactory):
2448
2449
2450 class TestBugEditLinks(TestCaseWithFactory):
2451-
2452 layer = DatabaseFunctionalLayer
2453
2454 edit_link_matcher = soupmatchers.HTMLContains(
2455diff --git a/lib/lp/bugs/browser/tests/test_bugsubscription_views.py b/lib/lp/bugs/browser/tests/test_bugsubscription_views.py
2456index 7f0fa3e..cb95564 100644
2457--- a/lib/lp/bugs/browser/tests/test_bugsubscription_views.py
2458+++ b/lib/lp/bugs/browser/tests/test_bugsubscription_views.py
2459@@ -37,7 +37,6 @@ from lp.testing.views import create_initialized_view
2460
2461
2462 class BugsubscriptionPrivacyTests(TestCaseWithFactory):
2463-
2464 layer = LaunchpadFunctionalLayer
2465
2466 def setUp(self):
2467@@ -77,7 +76,6 @@ class BugsubscriptionPrivacyTests(TestCaseWithFactory):
2468
2469
2470 class BugSubscriptionAdvancedFeaturesTestCase(TestCaseWithFactory):
2471-
2472 layer = LaunchpadFunctionalLayer
2473
2474 def setUp(self):
2475diff --git a/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py b/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
2476index 090cae7..0a14d23 100644
2477--- a/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
2478+++ b/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
2479@@ -49,7 +49,6 @@ class TestBugSubscriptionFilterBase:
2480 class TestBugSubscriptionFilterNavigation(
2481 TestBugSubscriptionFilterBase, TestCaseWithFactory
2482 ):
2483-
2484 layer = DatabaseFunctionalLayer
2485
2486 def test_canonical_url(self):
2487@@ -74,7 +73,6 @@ class TestBugSubscriptionFilterNavigation(
2488 class TestBugSubscriptionFilterAPI(
2489 TestBugSubscriptionFilterBase, TestCaseWithFactory
2490 ):
2491-
2492 layer = DatabaseFunctionalLayer
2493
2494 def test_visible_attributes(self):
2495@@ -138,7 +136,6 @@ class TestBugSubscriptionFilterAPI(
2496 class TestBugSubscriptionFilterAPIModifications(
2497 TestBugSubscriptionFilterBase, TestCaseWithFactory
2498 ):
2499-
2500 layer = DatabaseFunctionalLayer
2501
2502 def setUp(self):
2503@@ -246,7 +243,6 @@ class TestBugSubscriptionFilterAPIModifications(
2504 class TestBugSubscriptionFilterView(
2505 TestBugSubscriptionFilterBase, TestCaseWithFactory
2506 ):
2507-
2508 layer = DatabaseFunctionalLayer
2509
2510 def setUp(self):
2511@@ -473,7 +469,6 @@ class TestBugSubscriptionFilterView(
2512 class TestBugSubscriptionFilterEditView(
2513 TestBugSubscriptionFilterBase, TestCaseWithFactory
2514 ):
2515-
2516 layer = DatabaseFunctionalLayer
2517
2518 def test_view_properties(self):
2519@@ -587,7 +582,6 @@ class TestBugSubscriptionFilterAdvancedFeatures(TestCaseWithFactory):
2520
2521
2522 class TestBugSubscriptionFilterCreateView(TestCaseWithFactory):
2523-
2524 layer = DatabaseFunctionalLayer
2525
2526 def setUp(self):
2527diff --git a/lib/lp/bugs/browser/tests/test_bugsupervisor.py b/lib/lp/bugs/browser/tests/test_bugsupervisor.py
2528index 0bc50cd..b6d5c57 100644
2529--- a/lib/lp/bugs/browser/tests/test_bugsupervisor.py
2530+++ b/lib/lp/bugs/browser/tests/test_bugsupervisor.py
2531@@ -16,7 +16,6 @@ from lp.testing.views import create_initialized_view
2532
2533
2534 class TestBugSupervisorEditView(TestCaseWithFactory):
2535-
2536 layer = DatabaseFunctionalLayer
2537
2538 def setUp(self):
2539@@ -113,7 +112,6 @@ class TestBugSupervisorEditView(TestCaseWithFactory):
2540
2541
2542 class TestBugSupervisorLink(BrowserTestCase):
2543-
2544 layer = DatabaseFunctionalLayer
2545
2546 def test_with_no_access(self):
2547diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_configure.py b/lib/lp/bugs/browser/tests/test_bugtarget_configure.py
2548index 880853f..77d3dad 100644
2549--- a/lib/lp/bugs/browser/tests/test_bugtarget_configure.py
2550+++ b/lib/lp/bugs/browser/tests/test_bugtarget_configure.py
2551@@ -11,7 +11,6 @@ from lp.testing.views import create_initialized_view
2552
2553
2554 class TestProductBugConfigurationView(TestCaseWithFactory):
2555-
2556 layer = DatabaseFunctionalLayer
2557
2558 def setUp(self):
2559diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py b/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
2560index b101b86..0e1450d 100644
2561--- a/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
2562+++ b/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
2563@@ -41,7 +41,6 @@ from lp.testing.views import create_initialized_view, create_view
2564
2565
2566 class TestBugTargetFileBugConfirmationMessage(TestCaseWithFactory):
2567-
2568 layer = DatabaseFunctionalLayer
2569
2570 def setUp(self):
2571@@ -337,7 +336,6 @@ class FileBugViewMixin:
2572
2573
2574 class TestFileBugViewBase(FileBugViewMixin, TestCaseWithFactory):
2575-
2576 layer = DatabaseFunctionalLayer
2577
2578 def test_submit_comment_empty_error(self):
2579@@ -851,7 +849,6 @@ class FileBugViewBaseExtraDataTestCase(FileBugViewMixin, TestCaseWithFactory):
2580
2581
2582 class TestFileBugForNonBugSupervisors(TestCaseWithFactory):
2583-
2584 layer = DatabaseFunctionalLayer
2585
2586 def filebug_via_view(
2587@@ -914,7 +911,6 @@ class TestFileBugForNonBugSupervisors(TestCaseWithFactory):
2588
2589
2590 class TestFileBugSourcePackage(WithScenarios, TestCaseWithFactory):
2591-
2592 layer = DatabaseFunctionalLayer
2593
2594 scenarios = [
2595@@ -995,7 +991,6 @@ class TestFileBugSourcePackage(WithScenarios, TestCaseWithFactory):
2596
2597
2598 class ProjectGroupFileBugGuidedViewTestCase(TestCaseWithFactory):
2599-
2600 layer = DatabaseFunctionalLayer
2601
2602 def makeProjectGroupFileBugView(self, product_name, bug_title, tags=""):
2603diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py b/lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py
2604index ade633f..ca935ab 100644
2605--- a/lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py
2606+++ b/lib/lp/bugs/browser/tests/test_bugtarget_patches_view.py
2607@@ -12,7 +12,6 @@ from lp.testing.layers import LaunchpadFunctionalLayer
2608
2609
2610 class TestBugTargetPatchCountBase(TestCaseWithFactory):
2611-
2612 layer = LaunchpadFunctionalLayer
2613
2614 def setUp(self):
2615diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_tags.py b/lib/lp/bugs/browser/tests/test_bugtarget_tags.py
2616index eba3828..44a15ab 100644
2617--- a/lib/lp/bugs/browser/tests/test_bugtarget_tags.py
2618+++ b/lib/lp/bugs/browser/tests/test_bugtarget_tags.py
2619@@ -9,7 +9,6 @@ from lp.testing.views import create_view
2620
2621
2622 class TestBugTargetTags(WithScenarios, TestCaseWithFactory):
2623-
2624 layer = DatabaseFunctionalLayer
2625
2626 scenarios = [
2627diff --git a/lib/lp/bugs/browser/tests/test_bugtask.py b/lib/lp/bugs/browser/tests/test_bugtask.py
2628index 3bfbb38..af11290 100644
2629--- a/lib/lp/bugs/browser/tests/test_bugtask.py
2630+++ b/lib/lp/bugs/browser/tests/test_bugtask.py
2631@@ -87,7 +87,6 @@ def getFeedViewCache(target, feed_cls):
2632
2633
2634 class TestBugTaskView(TestCaseWithFactory):
2635-
2636 layer = LaunchpadFunctionalLayer
2637
2638 def test_rendered_query_counts_constant_with_team_memberships(self):
2639@@ -366,7 +365,6 @@ class TestBugTaskView(TestCaseWithFactory):
2640
2641
2642 class TestBugTasksNominationsView(TestCaseWithFactory):
2643-
2644 layer = DatabaseFunctionalLayer
2645
2646 def setUp(self):
2647@@ -627,7 +625,6 @@ class TestBugTasksNominationsView(TestCaseWithFactory):
2648
2649
2650 class TestBugTasksTableView(TestCaseWithFactory):
2651-
2652 layer = DatabaseFunctionalLayer
2653
2654 def setUp(self):
2655@@ -1474,7 +1471,6 @@ class TestBugTaskEditViewStatusField(TestCaseWithFactory):
2656
2657
2658 class TestBugTaskEditViewAssigneeField(TestCaseWithFactory):
2659-
2660 layer = DatabaseFunctionalLayer
2661
2662 def setUp(self):
2663@@ -2098,7 +2094,6 @@ class TestProjectGroupBugs(TestCaseWithFactory, BugTaskViewTestMixin):
2664
2665
2666 class TestBugActivityItem(TestCaseWithFactory):
2667-
2668 layer = DatabaseFunctionalLayer
2669
2670 def setAttribute(self, obj, attribute, value):
2671@@ -2521,7 +2516,6 @@ def make_bug_task_listing_item(
2672
2673
2674 class TestBugTaskSearchListingView(BrowserTestCase):
2675-
2676 layer = DatabaseFunctionalLayer
2677
2678 client_listing = soupmatchers.Tag(
2679@@ -2995,7 +2989,6 @@ class TestBugTaskExpirableListingView(BrowserTestCase):
2680
2681
2682 class TestBugListingBatchNavigator(TestCaseWithFactory):
2683-
2684 layer = DatabaseFunctionalLayer
2685
2686 def test_mustache_listings_escaped(self):
2687@@ -3006,7 +2999,6 @@ class TestBugListingBatchNavigator(TestCaseWithFactory):
2688
2689
2690 class TestBugTaskListingItem(TestCaseWithFactory):
2691-
2692 layer = DatabaseFunctionalLayer
2693
2694 def test_model(self):
2695diff --git a/lib/lp/bugs/browser/tests/test_bugtask_adding.py b/lib/lp/bugs/browser/tests/test_bugtask_adding.py
2696index 3e9f147..414d393 100644
2697--- a/lib/lp/bugs/browser/tests/test_bugtask_adding.py
2698+++ b/lib/lp/bugs/browser/tests/test_bugtask_adding.py
2699@@ -11,7 +11,6 @@ from lp.testing.views import create_initialized_view
2700
2701
2702 class TestProductBugTaskCreationStep(TestCaseWithFactory):
2703-
2704 layer = DatabaseFunctionalLayer
2705
2706 def setUp(self):
2707diff --git a/lib/lp/bugs/browser/tests/test_bugtask_navigation.py b/lib/lp/bugs/browser/tests/test_bugtask_navigation.py
2708index a3ce126..356f05d 100644
2709--- a/lib/lp/bugs/browser/tests/test_bugtask_navigation.py
2710+++ b/lib/lp/bugs/browser/tests/test_bugtask_navigation.py
2711@@ -13,7 +13,6 @@ from lp.testing.publication import test_traverse
2712
2713
2714 class TestBugTaskTraversal(TestCaseWithFactory):
2715-
2716 layer = DatabaseFunctionalLayer
2717
2718 def test_traversal_to_nonexistent_bugtask(self):
2719diff --git a/lib/lp/bugs/browser/tests/test_bugtracker_component.py b/lib/lp/bugs/browser/tests/test_bugtracker_component.py
2720index 8b6e9a2..c3d2bb9 100644
2721--- a/lib/lp/bugs/browser/tests/test_bugtracker_component.py
2722+++ b/lib/lp/bugs/browser/tests/test_bugtracker_component.py
2723@@ -13,7 +13,6 @@ from lp.testing.views import create_initialized_view
2724
2725
2726 class BugTrackerEditComponentViewTextCase(TestCaseWithFactory):
2727-
2728 layer = DatabaseFunctionalLayer
2729
2730 def setUp(self):
2731diff --git a/lib/lp/bugs/browser/tests/test_bugtracker_views.py b/lib/lp/bugs/browser/tests/test_bugtracker_views.py
2732index 521d6fa..642191b 100644
2733--- a/lib/lp/bugs/browser/tests/test_bugtracker_views.py
2734+++ b/lib/lp/bugs/browser/tests/test_bugtracker_views.py
2735@@ -15,7 +15,6 @@ from lp.testing.views import create_initialized_view
2736
2737
2738 class TestBugTrackerView(TestCaseWithFactory):
2739-
2740 layer = DatabaseFunctionalLayer
2741
2742 def test_related_projects(self):
2743@@ -53,7 +52,6 @@ class TestBugTrackerView(TestCaseWithFactory):
2744
2745
2746 class TestBugTrackerSetView(TestCaseWithFactory):
2747-
2748 layer = DatabaseFunctionalLayer
2749
2750 def test_trackers_are_batch_navigators(self):
2751diff --git a/lib/lp/bugs/browser/tests/test_bugview.py b/lib/lp/bugs/browser/tests/test_bugview.py
2752index 1124544..695b2f2 100644
2753--- a/lib/lp/bugs/browser/tests/test_bugview.py
2754+++ b/lib/lp/bugs/browser/tests/test_bugview.py
2755@@ -12,7 +12,6 @@ from lp.testing.layers import DatabaseFunctionalLayer, LaunchpadFunctionalLayer
2756
2757
2758 class TestBugView(TestCaseWithFactory):
2759-
2760 layer = LaunchpadFunctionalLayer
2761
2762 def setUp(self):
2763@@ -57,7 +56,6 @@ class TestBugView(TestCaseWithFactory):
2764
2765
2766 class TestBugInformationTypePortletView(TestCaseWithFactory):
2767-
2768 layer = DatabaseFunctionalLayer
2769
2770 def setUp(self):
2771diff --git a/lib/lp/bugs/browser/tests/test_bugwatch_views.py b/lib/lp/bugs/browser/tests/test_bugwatch_views.py
2772index 47c0cc0..9e2f4f2 100644
2773--- a/lib/lp/bugs/browser/tests/test_bugwatch_views.py
2774+++ b/lib/lp/bugs/browser/tests/test_bugwatch_views.py
2775@@ -17,7 +17,6 @@ from lp.testing.views import create_initialized_view
2776
2777
2778 class TestBugWatchEditView(TestCaseWithFactory):
2779-
2780 layer = LaunchpadFunctionalLayer
2781
2782 def setUp(self):
2783diff --git a/lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py b/lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py
2784index ab62e59..0f41faa 100644
2785--- a/lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py
2786+++ b/lib/lp/bugs/browser/tests/test_configure_bugtracker_links.py
2787@@ -14,7 +14,6 @@ from lp.testing.views import create_initialized_view
2788
2789
2790 class TestConfigureBugTrackerBase(TestCaseWithFactory):
2791-
2792 layer = LaunchpadFunctionalLayer
2793
2794 def setUp(self):
2795diff --git a/lib/lp/bugs/browser/tests/test_expose.py b/lib/lp/bugs/browser/tests/test_expose.py
2796index c52ca47..c846754 100644
2797--- a/lib/lp/bugs/browser/tests/test_expose.py
2798+++ b/lib/lp/bugs/browser/tests/test_expose.py
2799@@ -347,7 +347,6 @@ class TestStructuralSubscriptionHelpers(TestCase):
2800
2801
2802 class TestIntegrationExposeUserSubscriptionsToJS(TestCaseWithFactory):
2803-
2804 layer = DatabaseFunctionalLayer
2805
2806 def test_team_admin_subscription(self):
2807diff --git a/lib/lp/bugs/browser/tests/test_person_bugs.py b/lib/lp/bugs/browser/tests/test_person_bugs.py
2808index cc5f9a5..455eac1 100644
2809--- a/lib/lp/bugs/browser/tests/test_person_bugs.py
2810+++ b/lib/lp/bugs/browser/tests/test_person_bugs.py
2811@@ -9,7 +9,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
2812
2813
2814 class PersonBugsMenuTestCase(TestCaseWithFactory):
2815-
2816 layer = DatabaseFunctionalLayer
2817
2818 def test_user(self):
2819diff --git a/lib/lp/bugs/browser/tests/test_structuralsubscription.py b/lib/lp/bugs/browser/tests/test_structuralsubscription.py
2820index b8ee3cf..076de82 100644
2821--- a/lib/lp/bugs/browser/tests/test_structuralsubscription.py
2822+++ b/lib/lp/bugs/browser/tests/test_structuralsubscription.py
2823@@ -239,7 +239,6 @@ class TestSourcePackageStructuralSubscribersPortletView(
2824
2825
2826 class TestStructuralSubscriptionAPI(TestCaseWithFactory):
2827-
2828 layer = DatabaseFunctionalLayer
2829
2830 def setUp(self):
2831diff --git a/lib/lp/bugs/browser/widgets/tests/test_bug.py b/lib/lp/bugs/browser/widgets/tests/test_bug.py
2832index f61f245..cc7f2a4 100644
2833--- a/lib/lp/bugs/browser/widgets/tests/test_bug.py
2834+++ b/lib/lp/bugs/browser/widgets/tests/test_bug.py
2835@@ -9,7 +9,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
2836
2837
2838 class BugTagsWidgetTestCase(TestCaseWithFactory):
2839-
2840 layer = DatabaseFunctionalLayer
2841
2842 def get_widget(self, bug_target):
2843diff --git a/lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py b/lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py
2844index 03b3197..de2a217 100644
2845--- a/lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py
2846+++ b/lib/lp/bugs/externalbugtracker/tests/test_externalbugtracker.py
2847@@ -44,7 +44,6 @@ class CommentPushingExternalBugTracker(ExternalBugTracker):
2848
2849
2850 class TestCheckwatchesConfig(TestCase):
2851-
2852 layer = ZopelessDatabaseLayer
2853 base_url = "http://www.example.com/"
2854
2855diff --git a/lib/lp/bugs/externalbugtracker/tests/test_github.py b/lib/lp/bugs/externalbugtracker/tests/test_github.py
2856index 7ecc43b..870b706 100644
2857--- a/lib/lp/bugs/externalbugtracker/tests/test_github.py
2858+++ b/lib/lp/bugs/externalbugtracker/tests/test_github.py
2859@@ -52,7 +52,6 @@ def _add_rate_limit_response(
2860
2861
2862 class TestGitHubRateLimit(TestCase):
2863-
2864 layer = ZopelessLayer
2865
2866 def setUp(self):
2867@@ -130,7 +129,6 @@ class TestGitHubRateLimit(TestCase):
2868
2869
2870 class TestGitHub(TestCase):
2871-
2872 layer = ZopelessLayer
2873
2874 def setUp(self):
2875@@ -401,7 +399,6 @@ class TestGitHub(TestCase):
2876
2877
2878 class TestGitHubUpdateBugWatches(TestCaseWithFactory):
2879-
2880 layer = ZopelessDatabaseLayer
2881
2882 @responses.activate
2883diff --git a/lib/lp/bugs/externalbugtracker/tests/test_gitlab.py b/lib/lp/bugs/externalbugtracker/tests/test_gitlab.py
2884index a95b998..cb53149 100644
2885--- a/lib/lp/bugs/externalbugtracker/tests/test_gitlab.py
2886+++ b/lib/lp/bugs/externalbugtracker/tests/test_gitlab.py
2887@@ -32,7 +32,6 @@ from lp.testing.layers import ZopelessDatabaseLayer, ZopelessLayer
2888
2889
2890 class TestGitLab(TestCase):
2891-
2892 layer = ZopelessLayer
2893
2894 def setUp(self):
2895@@ -292,7 +291,6 @@ class TestGitLab(TestCase):
2896
2897
2898 class TestGitLabUpdateBugWatches(TestCaseWithFactory):
2899-
2900 layer = ZopelessDatabaseLayer
2901
2902 @responses.activate
2903diff --git a/lib/lp/bugs/interfaces/bugsupervisor.py b/lib/lp/bugs/interfaces/bugsupervisor.py
2904index 7d38ed5..48405fb 100644
2905--- a/lib/lp/bugs/interfaces/bugsupervisor.py
2906+++ b/lib/lp/bugs/interfaces/bugsupervisor.py
2907@@ -15,7 +15,6 @@ from lp.services.fields import PersonChoice
2908
2909
2910 class IHasBugSupervisor(Interface):
2911-
2912 bug_supervisor = exported(
2913 PersonChoice(
2914 title=_("Bug Supervisor"),
2915diff --git a/lib/lp/bugs/interfaces/bugtask.py b/lib/lp/bugs/interfaces/bugtask.py
2916index a8c4e45..3864b76 100644
2917--- a/lib/lp/bugs/interfaces/bugtask.py
2918+++ b/lib/lp/bugs/interfaces/bugtask.py
2919@@ -1301,7 +1301,6 @@ class IAddBugTaskForm(ILinkPackaging):
2920
2921
2922 class IAddBugTaskWithProductCreationForm(ILinkPackaging):
2923-
2924 bug_url = StrippedTextLine(
2925 title=_("Bug URL"),
2926 required=True,
2927diff --git a/lib/lp/bugs/interfaces/bugtasksearch.py b/lib/lp/bugs/interfaces/bugtasksearch.py
2928index f022a72..c78d1cc 100644
2929--- a/lib/lp/bugs/interfaces/bugtasksearch.py
2930+++ b/lib/lp/bugs/interfaces/bugtasksearch.py
2931@@ -191,7 +191,6 @@ class BugTaskSearchParams:
2932 ignore_privacy=False,
2933 ociproject=None,
2934 ):
2935-
2936 self.bug = bug
2937 self.searchtext = searchtext
2938 self.fast_searchtext = fast_searchtext
2939diff --git a/lib/lp/bugs/interfaces/bugtracker.py b/lib/lp/bugs/interfaces/bugtracker.py
2940index 3f383e3..6e88264 100644
2941--- a/lib/lp/bugs/interfaces/bugtracker.py
2942+++ b/lib/lp/bugs/interfaces/bugtracker.py
2943@@ -54,7 +54,6 @@ LOCATION_SCHEMES_ALLOWED = "http", "https", "mailto"
2944
2945
2946 class BugTrackerNameField(ContentNameField):
2947-
2948 errormessage = _("%s is already in use by another bugtracker.")
2949
2950 @property
2951diff --git a/lib/lp/bugs/interfaces/personsubscriptioninfo.py b/lib/lp/bugs/interfaces/personsubscriptioninfo.py
2952index 7fd8dd8..47060e2 100644
2953--- a/lib/lp/bugs/interfaces/personsubscriptioninfo.py
2954+++ b/lib/lp/bugs/interfaces/personsubscriptioninfo.py
2955@@ -21,7 +21,6 @@ from lp.services.fields import BugField, PersonChoice
2956
2957
2958 class IAbstractSubscriptionInfo(Interface):
2959-
2960 bug = BugField(
2961 title=_("Bug"),
2962 readonly=True,
2963@@ -45,7 +44,6 @@ class IAbstractSubscriptionInfo(Interface):
2964
2965
2966 class IRealSubscriptionInfo(IAbstractSubscriptionInfo):
2967-
2968 subscription = Attribute(
2969 "The bug subscription. Important attributes for our uses are the "
2970 "target and the bug_notification_level."
2971@@ -66,7 +64,6 @@ class IRealSubscriptionInfo(IAbstractSubscriptionInfo):
2972
2973
2974 class IVirtualSubscriptionInfo(IAbstractSubscriptionInfo):
2975-
2976 pillar = Attribute(
2977 """The pillar for the bugtask. Useful for owner and
2978 bug_supervisor"""
2979@@ -76,7 +73,6 @@ class IVirtualSubscriptionInfo(IAbstractSubscriptionInfo):
2980
2981
2982 class IAbstractSubscriptionInfoCollection(Interface):
2983-
2984 count = Attribute("The total number of contained subscriptions.")
2985
2986 personal = Attribute(
2987diff --git a/lib/lp/bugs/mail/tests/test_commands.py b/lib/lp/bugs/mail/tests/test_commands.py
2988index 2f775c0..10309a7 100644
2989--- a/lib/lp/bugs/mail/tests/test_commands.py
2990+++ b/lib/lp/bugs/mail/tests/test_commands.py
2991@@ -30,7 +30,6 @@ from lp.testing.layers import DatabaseFunctionalLayer, LaunchpadFunctionalLayer
2992
2993
2994 class AffectsEmailCommandTestCase(TestCaseWithFactory):
2995-
2996 layer = DatabaseFunctionalLayer
2997
2998 def test__splitPath_with_slashes(self):
2999@@ -360,7 +359,6 @@ class AffectsEmailCommandTestCase(TestCaseWithFactory):
3000
3001
3002 class BugEmailCommandTestCase(TestCaseWithFactory):
3003-
3004 layer = LaunchpadFunctionalLayer
3005
3006 def test_execute_bug_id(self):
3007@@ -406,7 +404,6 @@ class BugEmailCommandTestCase(TestCaseWithFactory):
3008
3009
3010 class PrivateEmailCommandTestCase(TestCaseWithFactory):
3011-
3012 layer = DatabaseFunctionalLayer
3013
3014 def test_execute_bug(self):
3015@@ -449,7 +446,6 @@ class PrivateEmailCommandTestCase(TestCaseWithFactory):
3016
3017
3018 class SecurityEmailCommandTestCase(TestCaseWithFactory):
3019-
3020 layer = DatabaseFunctionalLayer
3021
3022 def test_execute_bug(self):
3023@@ -476,7 +472,6 @@ class SecurityEmailCommandTestCase(TestCaseWithFactory):
3024
3025
3026 class InformationTypeEmailCommandTestCase(TestCaseWithFactory):
3027-
3028 layer = DatabaseFunctionalLayer
3029
3030 def test_execute_bug_params(self):
3031@@ -517,7 +512,6 @@ class InformationTypeEmailCommandTestCase(TestCaseWithFactory):
3032
3033
3034 class SubscribeEmailCommandTestCase(TestCaseWithFactory):
3035-
3036 layer = DatabaseFunctionalLayer
3037
3038 def test_execute_bug_with_user_name(self):
3039@@ -577,7 +571,6 @@ class SubscribeEmailCommandTestCase(TestCaseWithFactory):
3040
3041
3042 class UnsubscribeEmailCommandTestCase(TestCaseWithFactory):
3043-
3044 layer = DatabaseFunctionalLayer
3045
3046 def test_execute_bug_with_user_name(self):
3047@@ -618,7 +611,6 @@ class UnsubscribeEmailCommandTestCase(TestCaseWithFactory):
3048
3049
3050 class SummaryEmailCommandTestCase(TestCaseWithFactory):
3051-
3052 layer = DatabaseFunctionalLayer
3053
3054 def test_execute_bug(self):
3055@@ -643,7 +635,6 @@ class SummaryEmailCommandTestCase(TestCaseWithFactory):
3056
3057
3058 class DuplicateEmailCommandTestCase(TestCaseWithFactory):
3059-
3060 layer = DatabaseFunctionalLayer
3061
3062 def test_execute_bug(self):
3063@@ -670,7 +661,6 @@ class DuplicateEmailCommandTestCase(TestCaseWithFactory):
3064
3065
3066 class CVEEmailCommandTestCase(TestCaseWithFactory):
3067-
3068 layer = DatabaseFunctionalLayer
3069
3070 def test_execute_bug(self):
3071@@ -698,7 +688,6 @@ class CVEEmailCommandTestCase(TestCaseWithFactory):
3072
3073
3074 class TagEmailCommandTestCase(TestCaseWithFactory):
3075-
3076 layer = DatabaseFunctionalLayer
3077
3078 def test_execute_bug(self):
3079diff --git a/lib/lp/bugs/model/bug.py b/lib/lp/bugs/model/bug.py
3080index 5f20232..4ff9c08 100644
3081--- a/lib/lp/bugs/model/bug.py
3082+++ b/lib/lp/bugs/model/bug.py
3083@@ -2082,6 +2082,7 @@ class Bug(SQLBase, InformationTypeMixin):
3084
3085 def getNominations(self, target=None, nominations=None):
3086 """See `IBug`."""
3087+
3088 # Define the function used as a sort key.
3089 def by_bugtargetdisplayname(nomination):
3090 """Return the friendly sort key version of displayname."""
3091diff --git a/lib/lp/bugs/model/bugnomination.py b/lib/lp/bugs/model/bugnomination.py
3092index 0d3846c..53e6d99 100644
3093--- a/lib/lp/bugs/model/bugnomination.py
3094+++ b/lib/lp/bugs/model/bugnomination.py
3095@@ -39,7 +39,6 @@ from lp.services.features import getFeatureFlag
3096
3097 @implementer(IBugNomination)
3098 class BugNomination(StormBase):
3099-
3100 __storm_table__ = "BugNomination"
3101
3102 id = Int(primary=True)
3103diff --git a/lib/lp/bugs/model/bugtaskflat.py b/lib/lp/bugs/model/bugtaskflat.py
3104index 16ad071..833fe01 100644
3105--- a/lib/lp/bugs/model/bugtaskflat.py
3106+++ b/lib/lp/bugs/model/bugtaskflat.py
3107@@ -14,7 +14,6 @@ from lp.services.database.stormbase import StormBase
3108
3109
3110 class BugTaskFlat(StormBase):
3111-
3112 __storm_table__ = "BugTaskFlat"
3113
3114 bugtask_id = Int(name="bugtask", primary=True)
3115diff --git a/lib/lp/bugs/model/tests/test_bug.py b/lib/lp/bugs/model/tests/test_bug.py
3116index 1084734..86c291c 100644
3117--- a/lib/lp/bugs/model/tests/test_bug.py
3118+++ b/lib/lp/bugs/model/tests/test_bug.py
3119@@ -42,7 +42,6 @@ from lp.testing.matchers import Equals, HasQueryCount, LessThan
3120
3121
3122 class TestBug(TestCaseWithFactory):
3123-
3124 layer = DatabaseFunctionalLayer
3125
3126 def test_getNominationFor_sourcepackage(self):
3127@@ -678,7 +677,6 @@ class TestBug(TestCaseWithFactory):
3128
3129
3130 class TestBugPrivateAndSecurityRelatedUpdatesProject(TestCaseWithFactory):
3131-
3132 layer = DatabaseFunctionalLayer
3133
3134 def test_setPrivate_subscribes_person_who_makes_bug_private(self):
3135@@ -865,7 +863,6 @@ class TestBugPrivateAndSecurityRelatedUpdatesProject(TestCaseWithFactory):
3136
3137
3138 class TestBugPrivacy(TestCaseWithFactory):
3139-
3140 layer = DatabaseFunctionalLayer
3141
3142 def test_multipillar_proprietary_bugs_disallowed(self):
3143@@ -1062,7 +1059,6 @@ class TestBugPrivacy(TestCaseWithFactory):
3144
3145
3146 class TestBugPrivateAndSecurityRelatedUpdatesSpecialCase(TestCaseWithFactory):
3147-
3148 layer = DatabaseFunctionalLayer
3149
3150 def test_transition_special_cased_for_ubuntu(self):
3151@@ -1089,7 +1085,6 @@ class TestBugPrivateAndSecurityRelatedUpdatesSpecialCase(TestCaseWithFactory):
3152
3153
3154 class TestBugActivityMethods(TestCaseWithFactory):
3155-
3156 layer = DatabaseFunctionalLayer
3157
3158 def setUp(self):
3159diff --git a/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py b/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
3160index 28430c3..8acfa75 100644
3161--- a/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
3162+++ b/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
3163@@ -30,7 +30,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
3164
3165
3166 class TestBugSubscriptionFilter(TestCaseWithFactory):
3167-
3168 layer = DatabaseFunctionalLayer
3169
3170 def setUp(self):
3171@@ -391,7 +390,6 @@ class TestBugSubscriptionFilter(TestCaseWithFactory):
3172
3173
3174 class TestBugSubscriptionFilterPermissions(TestCaseWithFactory):
3175-
3176 layer = DatabaseFunctionalLayer
3177
3178 def setUp(self):
3179@@ -466,7 +464,6 @@ class TestBugSubscriptionFilterPermissions(TestCaseWithFactory):
3180
3181
3182 class TestBugSubscriptionFilterImportance(TestCaseWithFactory):
3183-
3184 layer = DatabaseFunctionalLayer
3185
3186 def setUp(self):
3187@@ -503,7 +500,6 @@ class TestBugSubscriptionFilterImportance(TestCaseWithFactory):
3188
3189
3190 class TestBugSubscriptionFilterStatus(TestCaseWithFactory):
3191-
3192 layer = DatabaseFunctionalLayer
3193
3194 def setUp(self):
3195@@ -538,7 +534,6 @@ class TestBugSubscriptionFilterStatus(TestCaseWithFactory):
3196
3197
3198 class TestBugSubscriptionFilterTag(TestCaseWithFactory):
3199-
3200 layer = DatabaseFunctionalLayer
3201
3202 def setUp(self):
3203@@ -586,7 +581,6 @@ class TestBugSubscriptionFilterTag(TestCaseWithFactory):
3204
3205
3206 class TestBugSubscriptionFilterInformationType(TestCaseWithFactory):
3207-
3208 layer = DatabaseFunctionalLayer
3209
3210 def setUp(self):
3211diff --git a/lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py b/lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py
3212index 34b9986..2497c45 100644
3213--- a/lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py
3214+++ b/lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py
3215@@ -125,7 +125,6 @@ class TestSubscriptionRelatedSets(TestCaseWithFactory):
3216
3217
3218 class TestBugSubscriptionInfo(TestCaseWithFactory):
3219-
3220 layer = DatabaseFunctionalLayer
3221
3222 def setUp(self):
3223@@ -442,7 +441,6 @@ class TestBugSubscriptionInfo(TestCaseWithFactory):
3224
3225
3226 class TestBugSubscriptionInfoPermissions(TestCaseWithFactory):
3227-
3228 layer = DatabaseFunctionalLayer
3229
3230 def test(self):
3231@@ -467,7 +465,6 @@ class TestBugSubscriptionInfoPermissions(TestCaseWithFactory):
3232
3233
3234 class TestBugSubscriptionInfoQueries(TestCaseWithFactory):
3235-
3236 layer = DatabaseFunctionalLayer
3237
3238 def setUp(self):
3239diff --git a/lib/lp/bugs/model/tests/test_bugsummary.py b/lib/lp/bugs/model/tests/test_bugsummary.py
3240index 459a6f0..cfa52d1 100644
3241--- a/lib/lp/bugs/model/tests/test_bugsummary.py
3242+++ b/lib/lp/bugs/model/tests/test_bugsummary.py
3243@@ -23,7 +23,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
3244
3245
3246 class TestBugSummary(TestCaseWithFactory):
3247-
3248 layer = LaunchpadZopelessLayer
3249
3250 def setUp(self):
3251diff --git a/lib/lp/bugs/model/tests/test_bugtask.py b/lib/lp/bugs/model/tests/test_bugtask.py
3252index c3eb248..77e979b 100644
3253--- a/lib/lp/bugs/model/tests/test_bugtask.py
3254+++ b/lib/lp/bugs/model/tests/test_bugtask.py
3255@@ -960,7 +960,6 @@ class TestBugTaskPrivacy(TestCaseWithFactory):
3256
3257
3258 class TestBugTaskDelta(TestCaseWithFactory):
3259-
3260 layer = DatabaseFunctionalLayer
3261
3262 def setUp(self):
3263@@ -1182,7 +1181,6 @@ class TestSimilarBugs(TestCaseWithFactory):
3264
3265
3266 class TestBugTaskPermissionsToSetAssigneeMixin:
3267-
3268 layer = DatabaseFunctionalLayer
3269
3270 def setUp(self, *args, **kwargs):
3271@@ -1663,7 +1661,6 @@ class TestBugTaskStatuses(TestCase):
3272
3273
3274 class TestBugTaskContributor(TestCaseWithFactory):
3275-
3276 layer = DatabaseFunctionalLayer
3277
3278 def test_non_contributor(self):
3279@@ -3337,7 +3334,6 @@ class ValidateTargetMixin:
3280
3281
3282 class TestValidateTarget(TestCaseWithFactory, ValidateTargetMixin):
3283-
3284 layer = DatabaseFunctionalLayer
3285
3286 multi_tenant_test_one_task_only = False
3287@@ -3590,7 +3586,6 @@ class TestValidateTarget(TestCaseWithFactory, ValidateTargetMixin):
3288
3289
3290 class TestValidateNewTarget(TestCaseWithFactory, ValidateTargetMixin):
3291-
3292 layer = DatabaseFunctionalLayer
3293
3294 multi_tenant_test_one_task_only = True
3295@@ -3689,7 +3684,6 @@ class TestWebservice(TestCaseWithFactory):
3296
3297
3298 class TestBugTaskUserHasBugSupervisorPrivileges(TestCaseWithFactory):
3299-
3300 layer = DatabaseFunctionalLayer
3301
3302 def setUp(self):
3303@@ -3780,7 +3774,6 @@ class TestBugTaskUserHasBugSupervisorPrivileges(TestCaseWithFactory):
3304
3305
3306 class TestBugTaskUserHasBugSupervisorPrivilegesContext(TestCaseWithFactory):
3307-
3308 layer = DatabaseFunctionalLayer
3309
3310 def assert_userHasBugSupervisorPrivilegesContext(self, obj):
3311diff --git a/lib/lp/bugs/model/tests/test_bugtasksearch.py b/lib/lp/bugs/model/tests/test_bugtasksearch.py
3312index 918dbdd..e16a56b 100644
3313--- a/lib/lp/bugs/model/tests/test_bugtasksearch.py
3314+++ b/lib/lp/bugs/model/tests/test_bugtasksearch.py
3315@@ -124,7 +124,6 @@ class TestProcessOrderBy(TestCase):
3316
3317
3318 class SearchTestBase:
3319-
3320 layer = LaunchpadFunctionalLayer
3321
3322 def setUp(self):
3323@@ -785,7 +784,6 @@ class TargetTests:
3324
3325
3326 class DeactivatedProductBugTaskTestCase(TestCaseWithFactory):
3327-
3328 layer = DatabaseFunctionalLayer
3329
3330 def setUp(self):
3331@@ -1867,7 +1865,6 @@ class QueryBugIDs:
3332
3333
3334 class TestMilestoneDueDateFiltering(TestCaseWithFactory):
3335-
3336 layer = LaunchpadFunctionalLayer
3337
3338 def test_milestone_date_filters(self):
3339@@ -2364,7 +2361,6 @@ class TestBugTaskTagSearchClauses(TestCase):
3340
3341
3342 class TestBugTaskSearch(TestCaseWithFactory):
3343-
3344 layer = DatabaseFunctionalLayer
3345
3346 def login(self):
3347@@ -2520,7 +2516,6 @@ class TestBugTaskSearch(TestCaseWithFactory):
3348
3349
3350 class BugTaskSetSearchTest(TestCaseWithFactory):
3351-
3352 layer = DatabaseFunctionalLayer
3353
3354 def test_explicit_blueprint_specified(self):
3355@@ -2567,7 +2562,6 @@ class TargetLessTestCase(TestCaseWithFactory):
3356
3357
3358 class BaseGetBugPrivacyFilterTermsTests:
3359-
3360 layer = DatabaseFunctionalLayer
3361
3362 def test_public(self):
3363diff --git a/lib/lp/bugs/model/tests/test_personsubscriptioninfo.py b/lib/lp/bugs/model/tests/test_personsubscriptioninfo.py
3364index 7011826..2671e9b 100644
3365--- a/lib/lp/bugs/model/tests/test_personsubscriptioninfo.py
3366+++ b/lib/lp/bugs/model/tests/test_personsubscriptioninfo.py
3367@@ -25,7 +25,6 @@ from lp.testing.matchers import HasQueryCount, Provides
3368
3369
3370 class TestPersonSubscriptionInfo(TestCaseWithFactory):
3371-
3372 layer = DatabaseFunctionalLayer
3373
3374 def setUp(self):
3375diff --git a/lib/lp/bugs/model/tests/test_vulnerability.py b/lib/lp/bugs/model/tests/test_vulnerability.py
3376index 138e23d..184b5d7 100644
3377--- a/lib/lp/bugs/model/tests/test_vulnerability.py
3378+++ b/lib/lp/bugs/model/tests/test_vulnerability.py
3379@@ -47,7 +47,6 @@ def grant_access_to_non_public_vulnerability(vulnerability, person):
3380
3381
3382 class TestVulnerability(TestCaseWithFactory):
3383-
3384 layer = DatabaseFunctionalLayer
3385
3386 def setUp(self):
3387@@ -490,7 +489,6 @@ class TestVulnerability(TestCaseWithFactory):
3388
3389
3390 class TestVulnerabilityActivity(TestCaseWithFactory):
3391-
3392 layer = DatabaseFunctionalLayer
3393
3394 def test_vulnerability_activity_changes(self):
3395@@ -506,7 +504,6 @@ class TestVulnerabilityActivity(TestCaseWithFactory):
3396
3397
3398 class TestVulnerabilitySet(TestCaseWithFactory):
3399-
3400 layer = DatabaseFunctionalLayer
3401
3402 def test_VulnerabilitySet_implements_IVulnerabilitySet(self):
3403diff --git a/lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py b/lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py
3404index 6d8124c..bcbb63d 100644
3405--- a/lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py
3406+++ b/lib/lp/bugs/model/tests/test_vulnerabilitysubscription.py
3407@@ -14,7 +14,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
3408
3409
3410 class TestVulnerabilitySubscription(TestCaseWithFactory):
3411-
3412 layer = DatabaseFunctionalLayer
3413
3414 def test_VulnerabilitySubscription_implements_its_interface(self):
3415diff --git a/lib/lp/bugs/publisher.py b/lib/lp/bugs/publisher.py
3416index bdbb00a..dbdc528 100644
3417--- a/lib/lp/bugs/publisher.py
3418+++ b/lib/lp/bugs/publisher.py
3419@@ -25,7 +25,6 @@ from lp.services.webapp.servers import (
3420
3421 @implementer(IFacet)
3422 class BugsFacet:
3423-
3424 name = "bugs"
3425 rootsite = "bugs"
3426 text = "Bugs"
3427diff --git a/lib/lp/bugs/scripts/bugsummaryrebuild.py b/lib/lp/bugs/scripts/bugsummaryrebuild.py
3428index 21003b4..088ce97 100644
3429--- a/lib/lp/bugs/scripts/bugsummaryrebuild.py
3430+++ b/lib/lp/bugs/scripts/bugsummaryrebuild.py
3431@@ -427,7 +427,6 @@ def calculate_bugsummary_rows(target):
3432
3433
3434 class BugSummaryRebuildTunableLoop(TunableLoop):
3435-
3436 maximum_chunk_size = 100
3437
3438 def __init__(self, log, dry_run, abort_time=None):
3439diff --git a/lib/lp/bugs/scripts/checkwatches/core.py b/lib/lp/bugs/scripts/checkwatches/core.py
3440index 63a4546..9589bd4 100644
3441--- a/lib/lp/bugs/scripts/checkwatches/core.py
3442+++ b/lib/lp/bugs/scripts/checkwatches/core.py
3443@@ -758,7 +758,7 @@ class SerialScheduler(BaseScheduler):
3444
3445 def run(self):
3446 jobs, self._jobs = self._jobs[:], []
3447- for (func, args, kwargs) in jobs:
3448+ for func, args, kwargs in jobs:
3449 func(*args, **kwargs)
3450
3451
3452diff --git a/lib/lp/bugs/scripts/checkwatches/tests/test_base.py b/lib/lp/bugs/scripts/checkwatches/tests/test_base.py
3453index bf6c274..791031c 100644
3454--- a/lib/lp/bugs/scripts/checkwatches/tests/test_base.py
3455+++ b/lib/lp/bugs/scripts/checkwatches/tests/test_base.py
3456@@ -31,7 +31,6 @@ class StubTransactionManager:
3457
3458
3459 class TestWorkingBase(TestCaseWithFactory):
3460-
3461 layer = LaunchpadZopelessLayer
3462
3463 def setUp(self):
3464@@ -147,7 +146,6 @@ class TestWorkingBase(TestCaseWithFactory):
3465
3466
3467 class TestWorkingBaseErrorReporting(TestCaseWithFactory):
3468-
3469 layer = LaunchpadZopelessLayer
3470
3471 @contextmanager
3472diff --git a/lib/lp/bugs/scripts/checkwatches/tests/test_core.py b/lib/lp/bugs/scripts/checkwatches/tests/test_core.py
3473index 7b6315c..6a73e33 100644
3474--- a/lib/lp/bugs/scripts/checkwatches/tests/test_core.py
3475+++ b/lib/lp/bugs/scripts/checkwatches/tests/test_core.py
3476@@ -78,7 +78,6 @@ class NoBugWatchesByRemoteBugUpdater(RemoteBugUpdater):
3477
3478
3479 class TestCheckwatchesWithSyncableGnomeProducts(TestCaseWithFactory):
3480-
3481 layer = LaunchpadZopelessLayer
3482
3483 def setUp(self):
3484@@ -166,7 +165,6 @@ class TestCheckwatchesWithSyncableGnomeProducts(TestCaseWithFactory):
3485
3486
3487 class BrokenCheckwatchesMaster(CheckwatchesMaster):
3488-
3489 error_code = None
3490
3491 def _getExternalBugTrackersAndWatches(self, bug_tracker, bug_watches):
3492@@ -176,7 +174,6 @@ class BrokenCheckwatchesMaster(CheckwatchesMaster):
3493
3494
3495 class TestCheckwatchesMaster(TestCaseWithFactory):
3496-
3497 layer = LaunchpadZopelessLayer
3498
3499 def setUp(self):
3500diff --git a/lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py b/lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py
3501index 4e322d9..0f36089 100644
3502--- a/lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py
3503+++ b/lib/lp/bugs/scripts/checkwatches/tests/test_remotebugupdater.py
3504@@ -36,7 +36,6 @@ class ImportanceConvertingExternalBugTracker(TestExternalBugTracker):
3505
3506
3507 class RemoteBugUpdaterTestCase(TestCaseWithFactory):
3508-
3509 layer = LaunchpadZopelessLayer
3510
3511 def makeUpdater(
3512diff --git a/lib/lp/bugs/scripts/tests/test_bugnotification.py b/lib/lp/bugs/scripts/tests/test_bugnotification.py
3513index a863751..99d9197 100644
3514--- a/lib/lp/bugs/scripts/tests/test_bugnotification.py
3515+++ b/lib/lp/bugs/scripts/tests/test_bugnotification.py
3516@@ -672,7 +672,6 @@ class TestNotificationBatches(unittest.TestCase):
3517
3518
3519 class EmailNotificationTestBase(TestCaseWithFactory):
3520-
3521 layer = LaunchpadZopelessLayer
3522
3523 def setUp(self):
3524@@ -726,7 +725,6 @@ class EmailNotificationTestBase(TestCaseWithFactory):
3525
3526
3527 class EmailNotificationsBugMixin:
3528-
3529 change_class = None # type: Optional[Type[Any]]
3530 change_name = None # type: Optional[str]
3531 old = None # type: Any
3532@@ -820,7 +818,6 @@ class EmailNotificationsBugTaskMixin(EmailNotificationsBugMixin):
3533
3534
3535 class EmailNotificationsAddedRemovedMixin:
3536-
3537 old = new = added_message = removed_message = b""
3538
3539 def add(self, item):
3540@@ -854,7 +851,6 @@ class EmailNotificationsAddedRemovedMixin:
3541 class TestEmailNotificationsBugTitle(
3542 EmailNotificationsBugMixin, EmailNotificationTestBase
3543 ):
3544-
3545 change_class = BugTitleChange
3546 change_name = "title"
3547 old = "Old summary"
3548@@ -866,7 +862,6 @@ class TestEmailNotificationsBugTitle(
3549 class TestEmailNotificationsBugTags(
3550 EmailNotificationsBugMixin, EmailNotificationTestBase
3551 ):
3552-
3553 change_class = BugTagsChange
3554 change_name = "tags"
3555 old = ["foo", "bar", "baz"]
3556@@ -885,7 +880,6 @@ class TestEmailNotificationsBugTags(
3557 class TestEmailNotificationsBugDuplicate(
3558 EmailNotificationsBugNotRequiredMixin, EmailNotificationTestBase
3559 ):
3560-
3561 change_class = BugDuplicateChange
3562 change_name = "duplicateof"
3563 unexpected_bytes = b"duplicate"
3564@@ -902,7 +896,6 @@ class TestEmailNotificationsBugDuplicate(
3565 class TestEmailNotificationsBugTaskStatus(
3566 EmailNotificationsBugTaskMixin, EmailNotificationTestBase
3567 ):
3568-
3569 change_class = BugTaskStatusChange
3570 change_name = "status"
3571 old = BugTaskStatus.TRIAGED
3572@@ -914,7 +907,6 @@ class TestEmailNotificationsBugTaskStatus(
3573 class TestEmailNotificationsBugWatch(
3574 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase
3575 ):
3576-
3577 # Note that this is for bugwatches added to bugs. Bugwatches added
3578 # to bugtasks are separate animals AIUI, and we don't try to combine
3579 # them here for notifications. Bugtasks have only zero or one
3580@@ -957,7 +949,6 @@ class TestEmailNotificationsBugWatch(
3581 class TestEmailNotificationsBranch(
3582 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase
3583 ):
3584-
3585 added_message = b"** Branch linked:"
3586 removed_message = b"** Branch unlinked:"
3587
3588@@ -988,7 +979,6 @@ class TestEmailNotificationsBranch(
3589 class TestEmailNotificationsCVE(
3590 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase
3591 ):
3592-
3593 added_message = b"** CVE added:"
3594 removed_message = b"** CVE removed:"
3595
3596@@ -1015,7 +1005,6 @@ class TestEmailNotificationsCVE(
3597 class TestEmailNotificationsAttachments(
3598 EmailNotificationsAddedRemovedMixin, EmailNotificationTestBase
3599 ):
3600-
3601 added_message = b"** Attachment added:"
3602 removed_message = b"** Attachment removed:"
3603
3604@@ -1316,7 +1305,6 @@ class TestEmailNotificationsWithFiltersWhenBugCreated(TestCaseWithFactory):
3605
3606
3607 class TestManageNotificationsMessage(TestCaseWithFactory):
3608-
3609 layer = LaunchpadZopelessLayer
3610
3611 def test_manage_notifications_message_is_included(self):
3612@@ -1355,7 +1343,6 @@ class TestNotificationSignatureSeparator(TestCase):
3613
3614
3615 class TestExpandedNotificationFooters(EmailNotificationTestBase):
3616-
3617 layer = LaunchpadZopelessLayer
3618
3619 def test_expanded_footer(self):
3620@@ -1392,7 +1379,6 @@ class TestExpandedNotificationFooters(EmailNotificationTestBase):
3621
3622
3623 class TestDeferredNotifications(TestCaseWithFactory):
3624-
3625 layer = LaunchpadZopelessLayer
3626
3627 def setUp(self):
3628@@ -1448,7 +1434,6 @@ class BrokenMailer(TestMailer):
3629
3630
3631 class TestSendBugNotifications(TestCaseWithFactory):
3632-
3633 layer = LaunchpadZopelessLayer
3634
3635 def setUp(self):
3636@@ -1575,7 +1560,6 @@ class TestSendBugNotifications(TestCaseWithFactory):
3637 )
3638
3639 def test_team_subscription_with_multiple_filters(self):
3640-
3641 team_owner = self.factory.makePerson(email="team-owner@canonical.com")
3642
3643 bug_watcher = self.factory.makePerson(
3644diff --git a/lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py b/lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py
3645index cf78d8c..0449135 100644
3646--- a/lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py
3647+++ b/lib/lp/bugs/scripts/tests/test_bugsummaryrebuild.py
3648@@ -74,7 +74,6 @@ def create_tasks(factory):
3649
3650
3651 class TestBugSummaryRebuild(TestCaseWithFactory):
3652-
3653 layer = ZopelessDatabaseLayer
3654
3655 def test_get_bugsummary_targets(self):
3656@@ -191,7 +190,6 @@ class TestBugSummaryRebuild(TestCaseWithFactory):
3657
3658
3659 class TestGetBugSummaryRows(TestCaseWithFactory):
3660-
3661 layer = ZopelessDatabaseLayer
3662
3663 def test_get_bugsummary_rows(self):
3664@@ -208,7 +206,6 @@ class TestGetBugSummaryRows(TestCaseWithFactory):
3665
3666
3667 class TestCalculateBugSummaryRows(TestCaseWithFactory):
3668-
3669 layer = LaunchpadZopelessLayer
3670
3671 def test_public_untagged(self):
3672@@ -498,7 +495,6 @@ class TestCalculateBugSummaryRows(TestCaseWithFactory):
3673
3674
3675 class TestFormatTarget(TestCaseWithFactory):
3676-
3677 layer = ZopelessDatabaseLayer
3678
3679 def test_product(self):
3680diff --git a/lib/lp/bugs/scripts/tests/test_uct.py b/lib/lp/bugs/scripts/tests/test_uct.py
3681index 737a89f..c6aa91f 100644
3682--- a/lib/lp/bugs/scripts/tests/test_uct.py
3683+++ b/lib/lp/bugs/scripts/tests/test_uct.py
3684@@ -30,7 +30,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
3685
3686
3687 class TestUCTRecord(TestCase):
3688-
3689 maxDiff = None
3690
3691 def test_load_save(self):
3692@@ -173,7 +172,6 @@ class TestUCTRecord(TestCase):
3693
3694
3695 class TestCVE(TestCaseWithFactory):
3696-
3697 layer = ZopelessDatabaseLayer
3698 maxDiff = None
3699
3700@@ -508,7 +506,6 @@ class TestCVE(TestCaseWithFactory):
3701
3702
3703 class TestUCTImporterExporter(TestCaseWithFactory):
3704-
3705 maxDiff = None
3706 layer = ZopelessDatabaseLayer
3707
3708diff --git a/lib/lp/bugs/scripts/uct/models.py b/lib/lp/bugs/scripts/uct/models.py
3709index d9f92a2..71f6c74 100644
3710--- a/lib/lp/bugs/scripts/uct/models.py
3711+++ b/lib/lp/bugs/scripts/uct/models.py
3712@@ -585,7 +585,6 @@ class CVE:
3713 )
3714
3715 for uct_package_status in uct_package.statuses:
3716-
3717 if uct_package_status.status not in cls.BUG_TASK_STATUS_MAP:
3718 logger.warning(
3719 "Can't find a suitable bug task status for %s",
3720diff --git a/lib/lp/bugs/security.py b/lib/lp/bugs/security.py
3721index 11d74e9..4d961ac 100644
3722--- a/lib/lp/bugs/security.py
3723+++ b/lib/lp/bugs/security.py
3724@@ -324,7 +324,6 @@ class ViewBugActivity(DelegatedAuthorization):
3725
3726
3727 class ViewBugSubscription(AnonymousAuthorization):
3728-
3729 usedfor = IBugSubscription
3730
3731
3732@@ -350,7 +349,6 @@ class EditBugSubscription(AuthorizationBase):
3733
3734
3735 class ViewBugMessage(AnonymousAuthorization):
3736-
3737 usedfor = IMessage
3738
3739
3740diff --git a/lib/lp/bugs/subscribers/tests/test_bug.py b/lib/lp/bugs/subscribers/tests/test_bug.py
3741index 7749c3b..f08f31b 100644
3742--- a/lib/lp/bugs/subscribers/tests/test_bug.py
3743+++ b/lib/lp/bugs/subscribers/tests/test_bug.py
3744@@ -23,7 +23,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
3745
3746
3747 class BugSubscriberTestCase(TestCaseWithFactory):
3748-
3749 layer = ZopelessDatabaseLayer
3750
3751 def setUp(self):
3752diff --git a/lib/lp/bugs/tests/test_apportjob.py b/lib/lp/bugs/tests/test_apportjob.py
3753index 96cd204..c22cfed 100644
3754--- a/lib/lp/bugs/tests/test_apportjob.py
3755+++ b/lib/lp/bugs/tests/test_apportjob.py
3756@@ -334,7 +334,6 @@ class ProcessApportBlobJobTestCase(TestCaseWithFactory):
3757
3758
3759 class TestViaCelery(TestCaseWithFactory):
3760-
3761 layer = CeleryJobLayer
3762
3763 def test_ProcessApportBlobJob(self):
3764diff --git a/lib/lp/bugs/tests/test_bug_messages_webservice.py b/lib/lp/bugs/tests/test_bug_messages_webservice.py
3765index d8a77a1..0e220ed 100644
3766--- a/lib/lp/bugs/tests/test_bug_messages_webservice.py
3767+++ b/lib/lp/bugs/tests/test_bug_messages_webservice.py
3768@@ -84,7 +84,6 @@ class TestMessageTraversal(TestCaseWithFactory):
3769
3770
3771 class TestBugMessage(TestCaseWithFactory):
3772-
3773 layer = LaunchpadFunctionalLayer
3774
3775 def test_attachments(self):
3776diff --git a/lib/lp/bugs/tests/test_bug_notification_recipients.py b/lib/lp/bugs/tests/test_bug_notification_recipients.py
3777index 7e99241..30f5a8f 100644
3778--- a/lib/lp/bugs/tests/test_bug_notification_recipients.py
3779+++ b/lib/lp/bugs/tests/test_bug_notification_recipients.py
3780@@ -23,7 +23,6 @@ from lp.testing.matchers import HasQueryCount
3781
3782
3783 class TestBugNotificationRecipients(TestCaseWithFactory):
3784-
3785 layer = DatabaseFunctionalLayer
3786
3787 def getFreshRecipients(self, bug):
3788diff --git a/lib/lp/bugs/tests/test_bugbranch.py b/lib/lp/bugs/tests/test_bugbranch.py
3789index 77a0934..76cacdc 100644
3790--- a/lib/lp/bugs/tests/test_bugbranch.py
3791+++ b/lib/lp/bugs/tests/test_bugbranch.py
3792@@ -19,7 +19,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
3793
3794
3795 class TestBugBranchSet(TestCaseWithFactory):
3796-
3797 layer = DatabaseFunctionalLayer
3798
3799 def test_bugbranchset_provides_IBugBranchSet(self):
3800@@ -148,7 +147,6 @@ class TestBugBranchSet(TestCaseWithFactory):
3801
3802
3803 class TestBugBranch(TestCaseWithFactory):
3804-
3805 layer = DatabaseFunctionalLayer
3806
3807 def setUp(self):
3808diff --git a/lib/lp/bugs/tests/test_bugchanges.py b/lib/lp/bugs/tests/test_bugchanges.py
3809index 3c55ed3..1067d89 100644
3810--- a/lib/lp/bugs/tests/test_bugchanges.py
3811+++ b/lib/lp/bugs/tests/test_bugchanges.py
3812@@ -31,7 +31,6 @@ from lp.testing.pages import webservice_for_person
3813
3814
3815 class TestBugChanges(TestCaseWithFactory):
3816-
3817 layer = LaunchpadFunctionalLayer
3818
3819 def setUp(self):
3820diff --git a/lib/lp/bugs/tests/test_bugnomination.py b/lib/lp/bugs/tests/test_bugnomination.py
3821index 7fa1c76..19c0a15 100644
3822--- a/lib/lp/bugs/tests/test_bugnomination.py
3823+++ b/lib/lp/bugs/tests/test_bugnomination.py
3824@@ -27,7 +27,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
3825
3826
3827 class BugNominationTestCase(TestCaseWithFactory):
3828-
3829 layer = DatabaseFunctionalLayer
3830
3831 def test_implementation(self):
3832@@ -307,7 +306,6 @@ class TestBugCanBeNominatedForDistroSeries(
3833
3834
3835 class TestCanApprove(TestCaseWithFactory):
3836-
3837 layer = DatabaseFunctionalLayer
3838
3839 def test_normal_user_cannot_approve(self):
3840@@ -458,7 +456,6 @@ class TestCanApprove(TestCaseWithFactory):
3841
3842
3843 class BugNominationSetTestCase(TestCaseWithFactory):
3844-
3845 layer = DatabaseFunctionalLayer
3846
3847 def test_get(self):
3848diff --git a/lib/lp/bugs/tests/test_bugs_webservice.py b/lib/lp/bugs/tests/test_bugs_webservice.py
3849index 29be4de..6851520 100644
3850--- a/lib/lp/bugs/tests/test_bugs_webservice.py
3851+++ b/lib/lp/bugs/tests/test_bugs_webservice.py
3852@@ -186,7 +186,6 @@ class TestBugCommentRepresentation(TestCaseWithFactory):
3853
3854
3855 class TestBugScaling(TestCaseWithFactory):
3856-
3857 layer = LaunchpadFunctionalLayer
3858
3859 def test_attachments_query_counts_constant(self):
3860@@ -265,7 +264,6 @@ class TestBugScaling(TestCaseWithFactory):
3861
3862
3863 class TestBugMessages(TestCaseWithFactory):
3864-
3865 layer = DatabaseFunctionalLayer
3866
3867 def setUp(self):
3868@@ -359,7 +357,6 @@ class TestPostBugWithLargeCollections(TestCaseWithFactory):
3869
3870
3871 class TestErrorHandling(TestCaseWithFactory):
3872-
3873 layer = LaunchpadFunctionalLayer
3874
3875 def test_add_duplicate_bugtask_for_project_gives_bad_request(self):
3876@@ -425,7 +422,6 @@ class TestErrorHandling(TestCaseWithFactory):
3877
3878
3879 class BugSetTestCase(TestCaseWithFactory):
3880-
3881 layer = DatabaseFunctionalLayer
3882
3883 def makeAPITarget(self, bug_policy):
3884@@ -481,7 +477,6 @@ class BugSetTestCase(TestCaseWithFactory):
3885
3886
3887 class TestBugDateLastUpdated(TestCaseWithFactory):
3888-
3889 layer = DatabaseFunctionalLayer
3890
3891 def make_old_bug(self):
3892diff --git a/lib/lp/bugs/tests/test_bugtaskfilter.py b/lib/lp/bugs/tests/test_bugtaskfilter.py
3893index 6c96281..fc87206 100644
3894--- a/lib/lp/bugs/tests/test_bugtaskfilter.py
3895+++ b/lib/lp/bugs/tests/test_bugtaskfilter.py
3896@@ -12,7 +12,6 @@ from lp.testing.matchers import HasQueryCount
3897
3898
3899 class TestFilterBugTasksByContext(TestCaseWithFactory):
3900-
3901 layer = DatabaseFunctionalLayer
3902
3903 def test_simple_case(self):
3904diff --git a/lib/lp/bugs/tests/test_bugtaskflat_triggers.py b/lib/lp/bugs/tests/test_bugtaskflat_triggers.py
3905index 8330111..c62f7eb 100644
3906--- a/lib/lp/bugs/tests/test_bugtaskflat_triggers.py
3907+++ b/lib/lp/bugs/tests/test_bugtaskflat_triggers.py
3908@@ -138,7 +138,6 @@ class BugTaskFlatTestMixin(TestCaseWithFactory):
3909
3910
3911 class TestBugTaskFlatten(BugTaskFlatTestMixin):
3912-
3913 layer = DatabaseFunctionalLayer
3914
3915 def test_create(self):
3916@@ -304,7 +303,6 @@ class TestBugTaskFlatten(BugTaskFlatTestMixin):
3917
3918
3919 class TestBugTaskFlatTriggers(BugTaskFlatTestMixin):
3920-
3921 layer = DatabaseFunctionalLayer
3922
3923 def test_bugtask_create(self):
3924diff --git a/lib/lp/bugs/tests/test_bugtracker.py b/lib/lp/bugs/tests/test_bugtracker.py
3925index 3d60dd7..6bb19ca 100644
3926--- a/lib/lp/bugs/tests/test_bugtracker.py
3927+++ b/lib/lp/bugs/tests/test_bugtracker.py
3928@@ -37,7 +37,6 @@ from lp.testing.sampledata import ADMIN_EMAIL
3929
3930
3931 class TestBugTrackerSet(TestCaseWithFactory):
3932-
3933 layer = DatabaseFunctionalLayer
3934
3935 def test_trackers(self):
3936diff --git a/lib/lp/bugs/tests/test_bugtracker_components.py b/lib/lp/bugs/tests/test_bugtracker_components.py
3937index 3194101..3da7150 100644
3938--- a/lib/lp/bugs/tests/test_bugtracker_components.py
3939+++ b/lib/lp/bugs/tests/test_bugtracker_components.py
3940@@ -13,7 +13,6 @@ __all__ = [] # type: List[str]
3941
3942
3943 class BugTrackerComponentTestCase(TestCaseWithFactory):
3944-
3945 layer = DatabaseFunctionalLayer
3946
3947 def setUp(self, *args, **kwargs):
3948@@ -99,7 +98,6 @@ class BugTrackerComponentTestCase(TestCaseWithFactory):
3949
3950
3951 class TestBugTrackerWithComponents(TestCaseWithFactory):
3952-
3953 layer = DatabaseFunctionalLayer
3954
3955 def setUp(self):
3956@@ -186,7 +184,6 @@ class TestBugTrackerWithComponents(TestCaseWithFactory):
3957
3958
3959 class TestWebservice(TestCaseWithFactory):
3960-
3961 layer = AppServerLayer
3962
3963 def setUp(self):
3964diff --git a/lib/lp/bugs/tests/test_bugtracker_vocabulary.py b/lib/lp/bugs/tests/test_bugtracker_vocabulary.py
3965index 57c8bfb..7b01697 100644
3966--- a/lib/lp/bugs/tests/test_bugtracker_vocabulary.py
3967+++ b/lib/lp/bugs/tests/test_bugtracker_vocabulary.py
3968@@ -11,7 +11,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
3969
3970
3971 class TestBugTrackerVocabulary(TestCaseWithFactory):
3972-
3973 layer = DatabaseFunctionalLayer
3974
3975 def setUp(self):
3976@@ -94,7 +93,6 @@ class TestBugTrackerVocabulary(TestCaseWithFactory):
3977
3978
3979 class TestWebBugTrackerVocabulary(TestCaseWithFactory):
3980-
3981 layer = DatabaseFunctionalLayer
3982
3983 def setUp(self):
3984diff --git a/lib/lp/bugs/tests/test_bugwatch.py b/lib/lp/bugs/tests/test_bugwatch.py
3985index 8cf900d..a684b0f 100644
3986--- a/lib/lp/bugs/tests/test_bugwatch.py
3987+++ b/lib/lp/bugs/tests/test_bugwatch.py
3988@@ -404,7 +404,6 @@ class EmailAddressExtractBugTrackerAndBugTest(ExtractBugTrackerAndBugTest):
3989
3990
3991 class TestBugWatch(TestCaseWithFactory):
3992-
3993 layer = LaunchpadZopelessLayer
3994
3995 def test_bugtasks_to_update(self):
3996@@ -671,7 +670,6 @@ class TestBugWatchSetBulkOperations(TestCaseWithFactory):
3997
3998
3999 class TestBugWatchBugTasks(TestCaseWithFactory):
4000-
4001 layer = DatabaseFunctionalLayer
4002
4003 def setUp(self):
4004@@ -725,7 +723,6 @@ class TestBugWatchActivityPruner(TestCaseWithFactory):
4005
4006
4007 class TestBugWatchResetting(TestCaseWithFactory):
4008-
4009 layer = LaunchpadFunctionalLayer
4010
4011 def setUp(self):
4012diff --git a/lib/lp/bugs/tests/test_bzremotecomponentfinder.py b/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
4013index 78abb69..47480f2 100644
4014--- a/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
4015+++ b/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
4016@@ -33,7 +33,6 @@ def read_test_file(name):
4017
4018
4019 class TestBugzillaRemoteComponentScraper(TestCaseWithFactory):
4020-
4021 layer = DatabaseFunctionalLayer
4022
4023 def setUp(self):
4024@@ -89,7 +88,6 @@ class TestBugzillaRemoteComponentScraper(TestCaseWithFactory):
4025
4026
4027 class TestBugzillaRemoteComponentFinder(TestCaseWithFactory):
4028-
4029 layer = DatabaseFunctionalLayer
4030
4031 def setUp(self):
4032diff --git a/lib/lp/bugs/tests/test_cve.py b/lib/lp/bugs/tests/test_cve.py
4033index c3e7c4f..e444ead 100644
4034--- a/lib/lp/bugs/tests/test_cve.py
4035+++ b/lib/lp/bugs/tests/test_cve.py
4036@@ -110,7 +110,6 @@ class TestCveSet(TestCaseWithFactory):
4037
4038
4039 class TestBugLinks(TestCaseWithFactory):
4040-
4041 layer = DatabaseFunctionalLayer
4042
4043 def test_link_and_unlink(self):
4044diff --git a/lib/lp/bugs/tests/test_structuralsubscription.py b/lib/lp/bugs/tests/test_structuralsubscription.py
4045index d839266..ce1f712 100644
4046--- a/lib/lp/bugs/tests/test_structuralsubscription.py
4047+++ b/lib/lp/bugs/tests/test_structuralsubscription.py
4048@@ -36,7 +36,6 @@ RESULT_SETS = ResultSet, EmptyResultSet, DecoratedResultSet
4049
4050
4051 class TestStructuralSubscription(TestCaseWithFactory):
4052-
4053 layer = DatabaseFunctionalLayer
4054
4055 def setUp(self):
4056@@ -485,7 +484,6 @@ class TestStructuralSubscriptionFiltersForProductSeries(
4057
4058
4059 class TestGetStructuralSubscriptionTargets(TestCaseWithFactory):
4060-
4061 layer = DatabaseFunctionalLayer
4062
4063 def test_product_target(self):
4064@@ -571,7 +569,6 @@ class TestGetStructuralSubscriptionTargets(TestCaseWithFactory):
4065
4066
4067 class TestGetStructuralSubscriptionsForBug(TestCaseWithFactory):
4068-
4069 layer = DatabaseFunctionalLayer
4070
4071 def setUp(self):
4072@@ -677,7 +674,6 @@ class TestGetStructuralSubscriptionsForBug(TestCaseWithFactory):
4073
4074
4075 class TestGetStructuralSubscriptions(TestCaseWithFactory):
4076-
4077 layer = DatabaseFunctionalLayer
4078
4079 def make_product_with_bug(self):
4080@@ -772,7 +768,6 @@ class TestGetStructuralSubscriptions(TestCaseWithFactory):
4081
4082
4083 class TestGetStructuralSubscribers(TestCaseWithFactory):
4084-
4085 layer = DatabaseFunctionalLayer
4086
4087 def make_product_with_bug(self):
4088diff --git a/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py b/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
4089index a9ee89a..9eb6933 100644
4090--- a/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
4091+++ b/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
4092@@ -190,7 +190,6 @@ class UnrestrictedStructuralSubscriptionTestBase(
4093 class TestStructuralSubscriptionForDistro(
4094 RestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
4095 ):
4096-
4097 layer = LaunchpadFunctionalLayer
4098
4099 def setUp(self):
4100@@ -266,7 +265,6 @@ class TestStructuralSubscriptionForDistro(
4101 class TestStructuralSubscriptionForProduct(
4102 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
4103 ):
4104-
4105 layer = LaunchpadFunctionalLayer
4106
4107 def setUp(self):
4108@@ -277,7 +275,6 @@ class TestStructuralSubscriptionForProduct(
4109 class TestStructuralSubscriptionForDistroSourcePackage(
4110 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
4111 ):
4112-
4113 layer = LaunchpadFunctionalLayer
4114
4115 def setUp(self):
4116@@ -289,7 +286,6 @@ class TestStructuralSubscriptionForDistroSourcePackage(
4117 class TestStructuralSubscriptionForMilestone(
4118 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
4119 ):
4120-
4121 layer = LaunchpadFunctionalLayer
4122
4123 def setUp(self):
4124@@ -301,7 +297,6 @@ class TestStructuralSubscriptionForMilestone(
4125 class TestStructuralSubscriptionForDistroSeries(
4126 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
4127 ):
4128-
4129 layer = LaunchpadFunctionalLayer
4130
4131 def setUp(self):
4132@@ -313,7 +308,6 @@ class TestStructuralSubscriptionForDistroSeries(
4133 class TestStructuralSubscriptionForProjectGroup(
4134 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
4135 ):
4136-
4137 layer = LaunchpadFunctionalLayer
4138
4139 def setUp(self):
4140@@ -325,7 +319,6 @@ class TestStructuralSubscriptionForProjectGroup(
4141 class TestStructuralSubscriptionForProductSeries(
4142 UnrestrictedStructuralSubscriptionTestBase, TestCaseWithFactory
4143 ):
4144-
4145 layer = LaunchpadFunctionalLayer
4146
4147 def setUp(self):
4148@@ -477,7 +470,6 @@ class TestStructuralSubscriptionTargetHelper(TestCaseWithFactory):
4149
4150
4151 class TestGetAllStructuralSubscriptionsForTarget(TestCaseWithFactory):
4152-
4153 layer = DatabaseFunctionalLayer
4154
4155 def setUp(self):
4156diff --git a/lib/lp/bugs/tests/test_vulnerability.py b/lib/lp/bugs/tests/test_vulnerability.py
4157index 3289b07..0cec967 100644
4158--- a/lib/lp/bugs/tests/test_vulnerability.py
4159+++ b/lib/lp/bugs/tests/test_vulnerability.py
4160@@ -19,7 +19,6 @@ from lp.testing.pages import webservice_for_person
4161
4162
4163 class TestVulnerabilityWebService(TestCaseWithFactory):
4164-
4165 layer = DatabaseFunctionalLayer
4166
4167 def test_editing_an_existing_vulnerability_attributes(self):
4168diff --git a/lib/lp/bugs/tests/test_yuitests.py b/lib/lp/bugs/tests/test_yuitests.py
4169index 431fbd9..7ba7c62 100644
4170--- a/lib/lp/bugs/tests/test_yuitests.py
4171+++ b/lib/lp/bugs/tests/test_yuitests.py
4172@@ -11,7 +11,6 @@ __all__ = [] # type: List[str]
4173
4174
4175 class BugsYUIUnitTestCase(YUIUnitTestCase):
4176-
4177 layer = YUITestLayer
4178 suite_name = "BugsYUIUnitTests"
4179
4180diff --git a/lib/lp/bugs/vocabularies.py b/lib/lp/bugs/vocabularies.py
4181index d6480bf..9b337e0 100644
4182--- a/lib/lp/bugs/vocabularies.py
4183+++ b/lib/lp/bugs/vocabularies.py
4184@@ -86,7 +86,6 @@ class UsesBugsDistributionVocabulary(DistributionVocabulary):
4185
4186
4187 class BugVocabulary(SQLObjectVocabularyBase):
4188-
4189 _table = Bug
4190 _orderBy = "id"
4191
4192diff --git a/lib/lp/buildmaster/browser/tests/test_builder.py b/lib/lp/buildmaster/browser/tests/test_builder.py
4193index e74b3ed..a582dc7 100644
4194--- a/lib/lp/buildmaster/browser/tests/test_builder.py
4195+++ b/lib/lp/buildmaster/browser/tests/test_builder.py
4196@@ -38,7 +38,6 @@ def builders_homepage_render():
4197
4198
4199 class TestBuilderSetNavigation(TestCaseWithFactory):
4200-
4201 layer = DatabaseFunctionalLayer
4202
4203 def test_binary_package_build_api_redirects(self):
4204@@ -122,7 +121,6 @@ class TestBuilderSetNavigation(TestCaseWithFactory):
4205
4206
4207 class TestBuildersHomepage(TestCaseWithFactory, BuildCreationMixin):
4208-
4209 layer = LaunchpadFunctionalLayer
4210
4211 def setUp(self):
4212diff --git a/lib/lp/buildmaster/browser/tests/test_builder_views.py b/lib/lp/buildmaster/browser/tests/test_builder_views.py
4213index 8bfb548..98446e2 100644
4214--- a/lib/lp/buildmaster/browser/tests/test_builder_views.py
4215+++ b/lib/lp/buildmaster/browser/tests/test_builder_views.py
4216@@ -34,7 +34,6 @@ from lp.translations.interfaces.translationtemplatesbuild import (
4217
4218
4219 class TestgetSpecificJobs(TestCaseWithFactory):
4220-
4221 layer = LaunchpadFunctionalLayer
4222
4223 def createTranslationTemplateBuild(self):
4224@@ -158,7 +157,6 @@ class BuildCreationMixin:
4225
4226
4227 class TestBuilderHistoryView(TestCaseWithFactory, BuildCreationMixin):
4228-
4229 layer = LaunchpadFunctionalLayer
4230
4231 nb_objects = 2
4232diff --git a/lib/lp/buildmaster/downloader.py b/lib/lp/buildmaster/downloader.py
4233index 4c9fa13..68aab4d 100644
4234--- a/lib/lp/buildmaster/downloader.py
4235+++ b/lib/lp/buildmaster/downloader.py
4236@@ -25,7 +25,6 @@ from twisted.protocols import amp
4237
4238
4239 class DownloadCommand(amp.Command):
4240-
4241 arguments = [
4242 (b"file_url", amp.Unicode()),
4243 (b"path_to_write", amp.Unicode()),
4244@@ -39,7 +38,6 @@ class DownloadCommand(amp.Command):
4245
4246
4247 class RequestProxyTokenCommand(amp.Command):
4248-
4249 arguments = [
4250 (b"url", amp.Unicode()),
4251 (b"auth_header", amp.String()),
4252diff --git a/lib/lp/buildmaster/enums.py b/lib/lp/buildmaster/enums.py
4253index ad32e14..ee1d90c 100644
4254--- a/lib/lp/buildmaster/enums.py
4255+++ b/lib/lp/buildmaster/enums.py
4256@@ -286,7 +286,6 @@ class BuildQueueStatus(DBEnumeratedType):
4257
4258
4259 class BuilderCleanStatus(DBEnumeratedType):
4260-
4261 CLEAN = DBItem(
4262 0,
4263 """
4264@@ -316,7 +315,6 @@ class BuilderCleanStatus(DBEnumeratedType):
4265
4266
4267 class BuilderResetProtocol(DBEnumeratedType):
4268-
4269 PROTO_1_1 = DBItem(
4270 11,
4271 """
4272diff --git a/lib/lp/buildmaster/interfaces/builder.py b/lib/lp/buildmaster/interfaces/builder.py
4273index afca0b3..d81c01c 100644
4274--- a/lib/lp/buildmaster/interfaces/builder.py
4275+++ b/lib/lp/buildmaster/interfaces/builder.py
4276@@ -119,7 +119,6 @@ class IBuilderModerateAttributes(Interface):
4277
4278
4279 class IBuilderView(IHasBuildRecords, IHasOwner):
4280-
4281 id = Attribute("Builder identifier")
4282
4283 processor = exported(
4284diff --git a/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py b/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
4285index 7fdf254..bdb07b6 100644
4286--- a/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
4287+++ b/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
4288@@ -149,7 +149,6 @@ BuildArgs = TypedDict(
4289
4290
4291 class IBuildFarmJobBehaviour(Interface):
4292-
4293 builder_type = Attribute(
4294 "The name of the builder type to use for this build, corresponding "
4295 "to a launchpad-buildd build manager tag."
4296diff --git a/lib/lp/buildmaster/manager.py b/lib/lp/buildmaster/manager.py
4297index 17c90a6..7f2b870 100644
4298--- a/lib/lp/buildmaster/manager.py
4299+++ b/lib/lp/buildmaster/manager.py
4300@@ -166,7 +166,6 @@ class PrefetchedBuildCandidates:
4301
4302
4303 class BaseBuilderFactory:
4304-
4305 date_updated = None
4306
4307 def update(self):
4308diff --git a/lib/lp/buildmaster/queuedepth.py b/lib/lp/buildmaster/queuedepth.py
4309index 702af11..05adfa1 100644
4310--- a/lib/lp/buildmaster/queuedepth.py
4311+++ b/lib/lp/buildmaster/queuedepth.py
4312@@ -228,6 +228,7 @@ def estimate_job_delay(bq, builder_stats):
4313 :return: An integer value holding the sum of delays (in seconds)
4314 caused by the jobs that are ahead of and competing with the JOI.
4315 """
4316+
4317 # XXX: This is broken with multi-Processor buildds, as it only
4318 # considers competition from the same processor.
4319 def jobs_compete_for_builders(a, b):
4320diff --git a/lib/lp/buildmaster/tests/test_builder.py b/lib/lp/buildmaster/tests/test_builder.py
4321index f122c43..333ca03 100644
4322--- a/lib/lp/buildmaster/tests/test_builder.py
4323+++ b/lib/lp/buildmaster/tests/test_builder.py
4324@@ -417,7 +417,6 @@ class TestFindBuildCandidatesGeneralCases(TestFindBuildCandidatesBase):
4325
4326
4327 class TestFindBuildCandidatesPPABase(TestFindBuildCandidatesBase):
4328-
4329 ppa_joe_private = False
4330 ppa_jim_private = False
4331
4332@@ -531,7 +530,6 @@ class TestFindBuildCandidatesPPA(TestFindBuildCandidatesPPABase):
4333
4334
4335 class TestFindBuildCandidatesPrivatePPA(TestFindBuildCandidatesPPABase):
4336-
4337 ppa_joe_private = True
4338
4339 def test_findBuildCandidate_for_private_ppa(self):
4340diff --git a/lib/lp/buildmaster/tests/test_buildfarmjob.py b/lib/lp/buildmaster/tests/test_buildfarmjob.py
4341index e0973fe..8b8739b 100644
4342--- a/lib/lp/buildmaster/tests/test_buildfarmjob.py
4343+++ b/lib/lp/buildmaster/tests/test_buildfarmjob.py
4344@@ -31,7 +31,6 @@ from lp.testing.layers import (
4345
4346
4347 class TestBuildFarmJobBase:
4348-
4349 layer = DatabaseFunctionalLayer # type: Type[BaseLayer]
4350
4351 def setUp(self, *args, **kwargs):
4352@@ -225,7 +224,6 @@ class TestBuildFarmJobMixin(TestCaseWithFactory):
4353
4354
4355 class TestBuildFarmJobSet(TestBuildFarmJobBase, TestCaseWithFactory):
4356-
4357 layer = LaunchpadFunctionalLayer
4358
4359 def setUp(self):
4360diff --git a/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py b/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
4361index a164b11..11c6a3e 100644
4362--- a/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
4363+++ b/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
4364@@ -173,7 +173,6 @@ class TestBuildFarmJobBehaviourBase(TestCaseWithFactory):
4365
4366
4367 class TestDispatchBuildToWorker(StatsMixin, TestCase):
4368-
4369 layer = ZopelessLayer
4370 run_tests_with = AsynchronousDeferredRunTest
4371
4372diff --git a/lib/lp/buildmaster/tests/test_interactor.py b/lib/lp/buildmaster/tests/test_interactor.py
4373index dc45dcc..d209b41 100644
4374--- a/lib/lp/buildmaster/tests/test_interactor.py
4375+++ b/lib/lp/buildmaster/tests/test_interactor.py
4376@@ -106,7 +106,6 @@ class MockBuilderFactory(BaseBuilderFactory):
4377
4378
4379 class TestBuilderInteractor(TestCase):
4380-
4381 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=30)
4382
4383 def setUp(self):
4384@@ -172,7 +171,6 @@ class TestBuilderInteractor(TestCase):
4385
4386
4387 class TestBuilderInteractorCleanWorker(TestCase):
4388-
4389 run_tests_with = AsynchronousDeferredRunTest
4390
4391 @defer.inlineCallbacks
4392diff --git a/lib/lp/buildmaster/tests/test_manager.py b/lib/lp/buildmaster/tests/test_manager.py
4393index a0edb84..b87e95c 100644
4394--- a/lib/lp/buildmaster/tests/test_manager.py
4395+++ b/lib/lp/buildmaster/tests/test_manager.py
4396@@ -697,7 +697,6 @@ class TestWorkerScannerScan(StatsMixin, TestCaseWithFactory):
4397
4398
4399 class TestWorkerScannerWithLibrarian(TestCaseWithFactory):
4400-
4401 layer = LaunchpadZopelessLayer
4402 run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=20)
4403
4404@@ -827,7 +826,6 @@ class TestWorkerScannerWithLibrarian(TestCaseWithFactory):
4405
4406
4407 class TestPrefetchedBuilderFactory(TestCaseWithFactory):
4408-
4409 layer = ZopelessDatabaseLayer
4410
4411 def test_get(self):
4412@@ -1021,7 +1019,6 @@ class FakeBuilddManager:
4413
4414
4415 class TestWorkerScannerWithoutDB(TestCase):
4416-
4417 layer = ZopelessDatabaseLayer
4418 run_tests_with = AsynchronousDeferredRunTest
4419
4420@@ -1320,7 +1317,6 @@ class TestCancellationChecking(TestCaseWithFactory):
4421
4422
4423 class TestBuilddManager(TestCase):
4424-
4425 layer = LaunchpadZopelessLayer
4426
4427 def _stub_out_scheduleNextScanCycle(self):
4428@@ -1386,7 +1382,6 @@ class TestBuilddManager(TestCase):
4429
4430
4431 class TestFailureAssessmentsAndStatsdMetrics(StatsMixin, TestCaseWithFactory):
4432-
4433 layer = ZopelessDatabaseLayer
4434
4435 def setUp(self):
4436@@ -1850,7 +1845,6 @@ def is_file_growing(filepath, poll_interval=1, poll_repeat=10):
4437
4438
4439 class TestBuilddManagerScript(TestCaseWithFactory):
4440-
4441 layer = LaunchpadScriptLayer
4442
4443 def testBuilddManagerRuns(self):
4444diff --git a/lib/lp/buildmaster/tests/test_vocabularies.py b/lib/lp/buildmaster/tests/test_vocabularies.py
4445index f644a43..f7de6a4 100644
4446--- a/lib/lp/buildmaster/tests/test_vocabularies.py
4447+++ b/lib/lp/buildmaster/tests/test_vocabularies.py
4448@@ -9,7 +9,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
4449
4450
4451 class TestBuilderResourceVocabulary(TestCaseWithFactory):
4452-
4453 layer = ZopelessDatabaseLayer
4454
4455 def test_provides_interface(self):
4456diff --git a/lib/lp/buildmaster/vocabularies.py b/lib/lp/buildmaster/vocabularies.py
4457index 154e445..d6a439c 100644
4458--- a/lib/lp/buildmaster/vocabularies.py
4459+++ b/lib/lp/buildmaster/vocabularies.py
4460@@ -22,7 +22,6 @@ from lp.services.webapp.vocabulary import NamedSQLObjectVocabulary
4461
4462
4463 class ProcessorVocabulary(NamedSQLObjectVocabulary):
4464-
4465 displayname = "Select a processor"
4466 _table = Processor
4467 _orderBy = "name"
4468diff --git a/lib/lp/charms/adapters/tests/test_buildarch.py b/lib/lp/charms/adapters/tests/test_buildarch.py
4469index c7659ba..a87528d 100644
4470--- a/lib/lp/charms/adapters/tests/test_buildarch.py
4471+++ b/lib/lp/charms/adapters/tests/test_buildarch.py
4472@@ -29,7 +29,6 @@ from lp.testing.layers import LaunchpadZopelessLayer
4473
4474
4475 class TestCharmBaseConfiguration(WithScenarios, TestCase):
4476-
4477 scenarios = [
4478 (
4479 "expanded",
4480@@ -118,7 +117,6 @@ class TestCharmBaseConfiguration(WithScenarios, TestCase):
4481
4482
4483 class TestDetermineInstancesToBuild(WithScenarios, TestCaseWithFactory):
4484-
4485 layer = LaunchpadZopelessLayer
4486
4487 # Scenarios taken from the charmcraft build providers specification:
4488diff --git a/lib/lp/charms/browser/charmrecipe.py b/lib/lp/charms/browser/charmrecipe.py
4489index aafa195..5183ce8 100644
4490--- a/lib/lp/charms/browser/charmrecipe.py
4491+++ b/lib/lp/charms/browser/charmrecipe.py
4492@@ -233,6 +233,7 @@ def builds_and_requests_for_recipe(recipe):
4493 Builds that the user does not have permission to see are excluded (by
4494 the model code).
4495 """
4496+
4497 # We need to interleave items of different types, so SQL can't do all
4498 # the sorting for us.
4499 def make_sort_key(*date_attrs):
4500@@ -425,7 +426,6 @@ class CharmRecipeAddView(CharmRecipeAuthorizeMixin, LaunchpadFormView):
4501 class BaseCharmRecipeEditView(
4502 CharmRecipeAuthorizeMixin, LaunchpadEditFormView
4503 ):
4504-
4505 schema = ICharmRecipeEditSchema
4506 next_url = None
4507
4508diff --git a/lib/lp/charms/browser/charmrecipelisting.py b/lib/lp/charms/browser/charmrecipelisting.py
4509index 4a47a81..384617b 100644
4510--- a/lib/lp/charms/browser/charmrecipelisting.py
4511+++ b/lib/lp/charms/browser/charmrecipelisting.py
4512@@ -22,7 +22,6 @@ from lp.services.webapp.batching import BatchNavigator
4513
4514
4515 class CharmRecipeListingView(LaunchpadView, FeedsMixin):
4516-
4517 feed_types = ()
4518
4519 source_enabled = True
4520@@ -54,7 +53,6 @@ class CharmRecipeListingView(LaunchpadView, FeedsMixin):
4521
4522
4523 class GitCharmRecipeListingView(CharmRecipeListingView):
4524-
4525 source_enabled = False
4526
4527 @property
4528@@ -65,7 +63,6 @@ class GitCharmRecipeListingView(CharmRecipeListingView):
4529
4530
4531 class PersonCharmRecipeListingView(CharmRecipeListingView):
4532-
4533 owner_enabled = False
4534
4535
4536diff --git a/lib/lp/charms/browser/tests/test_charmrecipe.py b/lib/lp/charms/browser/tests/test_charmrecipe.py
4537index 78bb21a..60c561e 100644
4538--- a/lib/lp/charms/browser/tests/test_charmrecipe.py
4539+++ b/lib/lp/charms/browser/tests/test_charmrecipe.py
4540@@ -76,7 +76,6 @@ from lp.testing.views import create_initialized_view, create_view
4541
4542
4543 class TestCharmRecipeNavigation(TestCaseWithFactory):
4544-
4545 layer = DatabaseFunctionalLayer
4546
4547 def setUp(self):
4548@@ -104,7 +103,6 @@ class TestCharmRecipeNavigation(TestCaseWithFactory):
4549
4550
4551 class BaseTestCharmRecipeView(BrowserTestCase):
4552-
4553 layer = LaunchpadFunctionalLayer
4554
4555 def setUp(self):
4556diff --git a/lib/lp/charms/browser/tests/test_charmrecipebuild.py b/lib/lp/charms/browser/tests/test_charmrecipebuild.py
4557index 83df915..a105e5d 100644
4558--- a/lib/lp/charms/browser/tests/test_charmrecipebuild.py
4559+++ b/lib/lp/charms/browser/tests/test_charmrecipebuild.py
4560@@ -41,7 +41,6 @@ from lp.testing.views import create_initialized_view
4561
4562
4563 class TestCanonicalUrlForCharmRecipeBuild(TestCaseWithFactory):
4564-
4565 layer = DatabaseFunctionalLayer
4566
4567 def setUp(self):
4568@@ -67,7 +66,6 @@ class TestCanonicalUrlForCharmRecipeBuild(TestCaseWithFactory):
4569
4570
4571 class TestCharmRecipeBuildView(TestCaseWithFactory):
4572-
4573 layer = LaunchpadFunctionalLayer
4574
4575 def setUp(self):
4576@@ -198,7 +196,6 @@ class TestCharmRecipeBuildView(TestCaseWithFactory):
4577
4578
4579 class TestCharmRecipeBuildOperations(BrowserTestCase):
4580-
4581 layer = DatabaseFunctionalLayer
4582
4583 def setUp(self):
4584diff --git a/lib/lp/charms/browser/tests/test_charmrecipelisting.py b/lib/lp/charms/browser/tests/test_charmrecipelisting.py
4585index 50e8b0a..a9baeea 100644
4586--- a/lib/lp/charms/browser/tests/test_charmrecipelisting.py
4587+++ b/lib/lp/charms/browser/tests/test_charmrecipelisting.py
4588@@ -28,7 +28,6 @@ from lp.testing.views import create_initialized_view
4589
4590
4591 class TestCharmRecipeListing(BrowserTestCase):
4592-
4593 layer = LaunchpadFunctionalLayer
4594
4595 def assertCharmRecipesLink(
4596diff --git a/lib/lp/charms/browser/tests/test_hascharmrecipes.py b/lib/lp/charms/browser/tests/test_hascharmrecipes.py
4597index 19adca7..8925eb1 100644
4598--- a/lib/lp/charms/browser/tests/test_hascharmrecipes.py
4599+++ b/lib/lp/charms/browser/tests/test_hascharmrecipes.py
4600@@ -26,7 +26,6 @@ def make_git_ref(test_case):
4601
4602
4603 class TestHasCharmRecipesView(WithScenarios, TestCaseWithFactory):
4604-
4605 layer = DatabaseFunctionalLayer
4606
4607 scenarios = [
4608@@ -89,7 +88,6 @@ class TestHasCharmRecipesView(WithScenarios, TestCaseWithFactory):
4609
4610
4611 class TestHasCharmRecipesMenu(WithScenarios, TestCaseWithFactory):
4612-
4613 layer = DatabaseFunctionalLayer
4614
4615 scenarios = [
4616diff --git a/lib/lp/charms/mail/charmrecipebuild.py b/lib/lp/charms/mail/charmrecipebuild.py
4617index 172d9af..25dd581 100644
4618--- a/lib/lp/charms/mail/charmrecipebuild.py
4619+++ b/lib/lp/charms/mail/charmrecipebuild.py
4620@@ -12,7 +12,6 @@ from lp.services.webapp import canonical_url
4621
4622
4623 class CharmRecipeBuildMailer(BaseMailer):
4624-
4625 app = "charms"
4626
4627 @classmethod
4628diff --git a/lib/lp/charms/tests/test_charmbase.py b/lib/lp/charms/tests/test_charmbase.py
4629index c49bdce..d392e33 100644
4630--- a/lib/lp/charms/tests/test_charmbase.py
4631+++ b/lib/lp/charms/tests/test_charmbase.py
4632@@ -26,7 +26,6 @@ from lp.testing.pages import webservice_for_person
4633
4634
4635 class TestCharmBase(TestCaseWithFactory):
4636-
4637 layer = ZopelessDatabaseLayer
4638
4639 def test_implements_interface(self):
4640@@ -54,7 +53,6 @@ class TestCharmBase(TestCaseWithFactory):
4641
4642
4643 class TestCharmBaseProcessors(TestCaseWithFactory):
4644-
4645 layer = ZopelessDatabaseLayer
4646
4647 def setUp(self):
4648@@ -108,7 +106,6 @@ class TestCharmBaseProcessors(TestCaseWithFactory):
4649
4650
4651 class TestCharmBaseSet(TestCaseWithFactory):
4652-
4653 layer = ZopelessDatabaseLayer
4654
4655 def test_getByDistroSeries(self):
4656@@ -133,7 +130,6 @@ class TestCharmBaseSet(TestCaseWithFactory):
4657
4658
4659 class TestCharmBaseWebservice(TestCaseWithFactory):
4660-
4661 layer = DatabaseFunctionalLayer
4662
4663 def test_new_unpriv(self):
4664diff --git a/lib/lp/charms/tests/test_charmhubclient.py b/lib/lp/charms/tests/test_charmhubclient.py
4665index b951718..c33a955 100644
4666--- a/lib/lp/charms/tests/test_charmhubclient.py
4667+++ b/lib/lp/charms/tests/test_charmhubclient.py
4668@@ -148,7 +148,6 @@ class RequestMatches(MatchesAll):
4669
4670
4671 class TestCharmhubClient(TestCaseWithFactory):
4672-
4673 layer = LaunchpadZopelessLayer
4674
4675 def setUp(self):
4676diff --git a/lib/lp/charms/tests/test_charmrecipe.py b/lib/lp/charms/tests/test_charmrecipe.py
4677index 0f3502b..f646124 100644
4678--- a/lib/lp/charms/tests/test_charmrecipe.py
4679+++ b/lib/lp/charms/tests/test_charmrecipe.py
4680@@ -119,7 +119,6 @@ from lp.testing.pages import webservice_for_person
4681
4682
4683 class TestCharmRecipeFeatureFlags(TestCaseWithFactory):
4684-
4685 layer = LaunchpadZopelessLayer
4686
4687 def test_feature_flag_disabled(self):
4688@@ -140,7 +139,6 @@ class TestCharmRecipeFeatureFlags(TestCaseWithFactory):
4689
4690
4691 class TestCharmRecipe(TestCaseWithFactory):
4692-
4693 layer = DatabaseFunctionalLayer
4694
4695 def setUp(self):
4696@@ -1020,7 +1018,6 @@ class TestCharmRecipe(TestCaseWithFactory):
4697
4698
4699 class TestCharmRecipeAuthorization(TestCaseWithFactory):
4700-
4701 layer = DatabaseFunctionalLayer
4702
4703 def setUp(self):
4704@@ -1215,7 +1212,6 @@ class TestCharmRecipeAuthorization(TestCaseWithFactory):
4705
4706
4707 class TestCharmRecipeDeleteWithBuilds(TestCaseWithFactory):
4708-
4709 layer = LaunchpadFunctionalLayer
4710
4711 def setUp(self):
4712@@ -1333,7 +1329,6 @@ class TestCharmRecipeDeleteWithBuilds(TestCaseWithFactory):
4713
4714
4715 class TestCharmRecipeSet(TestCaseWithFactory):
4716-
4717 layer = DatabaseFunctionalLayer
4718
4719 def setUp(self):
4720@@ -1830,7 +1825,6 @@ class TestCharmRecipeSet(TestCaseWithFactory):
4721
4722
4723 class TestCharmRecipeWebservice(TestCaseWithFactory):
4724-
4725 layer = LaunchpadFunctionalLayer
4726
4727 def setUp(self):
4728diff --git a/lib/lp/charms/tests/test_charmrecipebuild.py b/lib/lp/charms/tests/test_charmrecipebuild.py
4729index cde6235..e3816fe 100644
4730--- a/lib/lp/charms/tests/test_charmrecipebuild.py
4731+++ b/lib/lp/charms/tests/test_charmrecipebuild.py
4732@@ -78,7 +78,6 @@ expected_body = """\
4733
4734
4735 class TestCharmRecipeBuild(TestCaseWithFactory):
4736-
4737 layer = LaunchpadZopelessLayer
4738
4739 def setUp(self):
4740@@ -805,7 +804,6 @@ class TestCharmRecipeBuild(TestCaseWithFactory):
4741
4742
4743 class TestCharmRecipeBuildSet(TestCaseWithFactory):
4744-
4745 layer = LaunchpadZopelessLayer
4746
4747 def setUp(self):
4748@@ -868,7 +866,6 @@ class TestCharmRecipeBuildSet(TestCaseWithFactory):
4749
4750
4751 class TestCharmRecipeBuildWebservice(TestCaseWithFactory):
4752-
4753 layer = LaunchpadFunctionalLayer
4754
4755 def setUp(self):
4756diff --git a/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py b/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
4757index 2851a9f..07eb6e8 100644
4758--- a/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
4759+++ b/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
4760@@ -78,7 +78,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
4761
4762
4763 class TestCharmRecipeBuildBehaviourBase(TestCaseWithFactory):
4764-
4765 layer = ZopelessDatabaseLayer
4766
4767 def setUp(self):
4768@@ -160,7 +159,6 @@ class TestCharmRecipeBuildBehaviour(TestCharmRecipeBuildBehaviourBase):
4769 class TestAsyncCharmRecipeBuildBehaviour(
4770 StatsMixin, TestCharmRecipeBuildBehaviourBase
4771 ):
4772-
4773 run_tests_with = AsynchronousDeferredRunTestForBrokenTwisted.make_factory(
4774 timeout=30
4775 )
4776diff --git a/lib/lp/charms/tests/test_charmrecipebuildjob.py b/lib/lp/charms/tests/test_charmrecipebuildjob.py
4777index 0d671f0..87ee452 100644
4778--- a/lib/lp/charms/tests/test_charmrecipebuildjob.py
4779+++ b/lib/lp/charms/tests/test_charmrecipebuildjob.py
4780@@ -95,7 +95,6 @@ class FileUploaded(MatchesListwise):
4781
4782
4783 class TestCharmRecipeBuildJob(TestCaseWithFactory):
4784-
4785 layer = DatabaseFunctionalLayer
4786
4787 def setUp(self):
4788@@ -114,7 +113,6 @@ class TestCharmRecipeBuildJob(TestCaseWithFactory):
4789
4790
4791 class TestCharmhubUploadJob(TestCaseWithFactory):
4792-
4793 layer = LaunchpadZopelessLayer
4794
4795 def setUp(self):
4796diff --git a/lib/lp/charms/tests/test_charmrecipejob.py b/lib/lp/charms/tests/test_charmrecipejob.py
4797index 53e4bca..2b33d2e 100644
4798--- a/lib/lp/charms/tests/test_charmrecipejob.py
4799+++ b/lib/lp/charms/tests/test_charmrecipejob.py
4800@@ -46,7 +46,6 @@ from lp.testing.layers import ZopelessDatabaseLayer
4801
4802
4803 class TestCharmRecipeJob(TestCaseWithFactory):
4804-
4805 layer = ZopelessDatabaseLayer
4806
4807 def setUp(self):
4808@@ -63,7 +62,6 @@ class TestCharmRecipeJob(TestCaseWithFactory):
4809
4810
4811 class TestCharmRecipeRequestBuildsJob(TestCaseWithFactory):
4812-
4813 layer = ZopelessDatabaseLayer
4814
4815 def setUp(self):
4816diff --git a/lib/lp/code/adapters/tests/test_branch.py b/lib/lp/code/adapters/tests/test_branch.py
4817index 4d83ca1..3bbd844 100644
4818--- a/lib/lp/code/adapters/tests/test_branch.py
4819+++ b/lib/lp/code/adapters/tests/test_branch.py
4820@@ -13,7 +13,6 @@ from lp.testing.layers import LaunchpadFunctionalLayer
4821
4822
4823 class TestBranchMergeProposalDelta(TestCase):
4824-
4825 layer = LaunchpadFunctionalLayer
4826
4827 def setUp(self):
4828diff --git a/lib/lp/code/adapters/tests/test_branchcollection.py b/lib/lp/code/adapters/tests/test_branchcollection.py
4829index a2fdbaa..c547bcd 100644
4830--- a/lib/lp/code/adapters/tests/test_branchcollection.py
4831+++ b/lib/lp/code/adapters/tests/test_branchcollection.py
4832@@ -10,7 +10,6 @@ from lp.testing.layers import DatabaseFunctionalLayer
4833
4834
4835 class TestPersonProduct(TestCaseWithFactory):
4836-
4837 layer = DatabaseFunctionalLayer
4838
4839 def test_person_product(self):
4840diff --git a/lib/lp/code/adapters/tests/test_gitrepository.py b/lib/lp/code/adapters/tests/test_gitrepository.py
4841index 94282d4..5fc0de1 100644
4842--- a/lib/lp/code/adapters/tests/test_gitrepository.py
4843+++ b/lib/lp/code/adapters/tests/test_gitrepository.py
4844@@ -11,7 +11,6 @@ from lp.testing.layers import LaunchpadFunctionalLayer
4845
4846
4847 class TestGitRepositoryDelta(TestCaseWithFactory):
4848-
4849 layer = LaunchpadFunctionalLayer
4850
4851 def test_no_modification(self):
4852diff --git a/lib/lp/code/browser/bazaar.py b/lib/lp/code/browser/bazaar.py
4853index 9a65327..1a751fd 100644
4854--- a/lib/lp/code/browser/bazaar.py
4855+++ b/lib/lp/code/browser/bazaar.py
4856@@ -25,7 +25,6 @@ from lp.services.webapp.authorization import precache_permission_for_objects
4857
4858
4859 class BazaarApplicationView(LaunchpadView):
4860-
4861 page_title = "Launchpad Branches"
4862
4863 @property
4864diff --git a/lib/lp/code/browser/branch.py b/lib/lp/code/browser/branch.py
4865index ae6115a..467a1bc 100644
4866--- a/lib/lp/code/browser/branch.py
4867+++ b/lib/lp/code/browser/branch.py
4868@@ -139,7 +139,6 @@ class BranchBreadcrumb(NameBreadcrumb):
4869
4870
4871 class BranchNavigation(WebhookTargetNavigationMixin, Navigation):
4872-
4873 usedfor = IBranch
4874
4875 @stepthrough("+bug")
4876@@ -392,7 +391,6 @@ class BranchView(
4877 HasSnapsViewMixin,
4878 CodeImportTargetMixin,
4879 ):
4880-
4881 feed_types = (BranchFeedLink,)
4882
4883 @property
4884@@ -642,7 +640,6 @@ class BranchView(
4885
4886
4887 class BranchRescanView(LaunchpadEditFormView):
4888-
4889 schema = Interface
4890 field_names = []
4891 next_url = None
4892@@ -1425,7 +1422,6 @@ class RegisterBranchMergeProposalView(LaunchpadFormView):
4893
4894 @implementer(IBrowserPublisher)
4895 class BranchDiffView(DataDownloadView):
4896-
4897 content_type = "text/x-patch"
4898
4899 def __init__(self, context, request, new, old=None):
4900diff --git a/lib/lp/code/browser/branchlisting.py b/lib/lp/code/browser/branchlisting.py
4901index a6a8581..f4b5533 100644
4902--- a/lib/lp/code/browser/branchlisting.py
4903+++ b/lib/lp/code/browser/branchlisting.py
4904@@ -814,7 +814,6 @@ class RecentlyChangedBranchesView(NoContextBranchListingView):
4905
4906
4907 class PersonBranchesMenu(ApplicationMenu):
4908-
4909 usedfor = IPerson
4910 facet = "branches"
4911 links = ["branches", "active_reviews", "source_package_recipes", "snaps"]
4912@@ -847,7 +846,6 @@ class PersonBranchesMenu(ApplicationMenu):
4913
4914
4915 class PersonProductBranchesMenu(PersonBranchesMenu):
4916-
4917 usedfor = IPersonProduct
4918 links = ["branches", "active_reviews", "source_package_recipes", "snaps"]
4919
4920@@ -1025,7 +1023,6 @@ class PersonProductCodeSummaryView(PersonCodeSummaryView):
4921
4922
4923 class ProductBranchesMenu(ApplicationMenu):
4924-
4925 usedfor = IProduct
4926 facet = "branches"
4927 links = [
4928diff --git a/lib/lp/code/browser/branchmergeproposal.py b/lib/lp/code/browser/branchmergeproposal.py
4929index 6631a94..1e6bda0 100644
4930--- a/lib/lp/code/browser/branchmergeproposal.py
4931+++ b/lib/lp/code/browser/branchmergeproposal.py
4932@@ -1038,7 +1038,6 @@ class BranchMergeProposalVoteView(LaunchpadView):
4933
4934
4935 class BranchMergeProposalScheduleUpdateDiffView(LaunchpadEditFormView):
4936-
4937 schema = Interface
4938 field_names = []
4939 next_url = None
4940@@ -1130,7 +1129,6 @@ class MergeProposalEditView(
4941
4942
4943 class ResubmitSchema(IBranchMergeProposal):
4944-
4945 break_link = Bool(
4946 title="Start afresh",
4947 description=(
4948@@ -1423,7 +1421,6 @@ class BranchMergeProposalSubscribersView(LaunchpadView):
4949 class BranchMergeProposalChangeStatusView(
4950 MergeProposalEditView, BranchMergeProposalStatusMixin
4951 ):
4952-
4953 page_title = label = "Change merge proposal status"
4954 schema = IBranchMergeProposal
4955 field_names = []
4956diff --git a/lib/lp/code/browser/branchref.py b/lib/lp/code/browser/branchref.py
4957index 5d440ca..8723f98 100644
4958--- a/lib/lp/code/browser/branchref.py
4959+++ b/lib/lp/code/browser/branchref.py
4960@@ -30,7 +30,6 @@ class BranchRef:
4961
4962
4963 class BranchRefNavigation(Navigation):
4964-
4965 usedfor = IBranchRef
4966
4967 @stepto("branch-format")
4968diff --git a/lib/lp/code/browser/branchsubscription.py b/lib/lp/code/browser/branchsubscription.py
4969index 2881b03..46b53a5 100644
4970--- a/lib/lp/code/browser/branchsubscription.py
4971+++ b/lib/lp/code/browser/branchsubscription.py
4972@@ -113,7 +113,6 @@ class _BranchSubscriptionView(LaunchpadFormView):
4973
4974
4975 class BranchSubscriptionAddView(_BranchSubscriptionView):
4976-
4977 page_title = label = "Subscribe to branch"
4978
4979 @action("Subscribe")
4980diff --git a/lib/lp/code/browser/diff.py b/lib/lp/code/browser/diff.py
4981index 0e4fd79..cdb7996 100644
4982--- a/lib/lp/code/browser/diff.py
4983+++ b/lib/lp/code/browser/diff.py
4984@@ -19,7 +19,6 @@ from lp.services.webapp.publisher import canonical_url
4985
4986
4987 class PreviewDiffNavigation(Navigation, FileNavigationMixin):
4988-
4989 usedfor = IPreviewDiff
4990
4991
4992diff --git a/lib/lp/code/browser/gitlisting.py b/lib/lp/code/browser/gitlisting.py
4993index f5415f1..2be0c24 100644
4994--- a/lib/lp/code/browser/gitlisting.py
4995+++ b/lib/lp/code/browser/gitlisting.py
4996@@ -110,7 +110,6 @@ class BaseGitListingView(LaunchpadView):
4997
4998
4999 class TargetGitListingView(BaseGitListingView):
5000-
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to status/vote changes: