Merge ~cjwatson/launchpad:snappy-future-imports into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 941573e977e872cf5486819b6e6012def056b95e
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:snappy-future-imports
Merge into: launchpad:master
Diff against target: 415 lines (+68/-38)
15 files modified
lib/lp/snappy/browser/hassnaps.py (+2/-0)
lib/lp/snappy/browser/snap.py (+29/-27)
lib/lp/snappy/browser/snapbuild.py (+2/-0)
lib/lp/snappy/browser/snaplisting.py (+2/-0)
lib/lp/snappy/browser/widgets/snaparchive.py (+3/-1)
lib/lp/snappy/browser/widgets/storechannels.py (+5/-3)
lib/lp/snappy/interfaces/snap.py (+8/-6)
lib/lp/snappy/interfaces/snapbuild.py (+2/-0)
lib/lp/snappy/interfaces/webservice.py (+2/-0)
lib/lp/snappy/mail/snapbuild.py (+2/-0)
lib/lp/snappy/model/snap.py (+2/-0)
lib/lp/snappy/model/snapbuild.py (+2/-0)
lib/lp/snappy/model/snapbuildbehaviour.py (+3/-1)
lib/lp/snappy/validators/channels.py (+2/-0)
lib/lp/snappy/vocabularies.py (+2/-0)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Kristian Glass (community) Approve
Review via email: mp+373696@code.launchpad.net

Commit message

Convert lp.snappy to preferred __future__ imports

To post a comment you must log in.
Revision history for this message
Kristian Glass (doismellburning) :
review: Approve
Revision history for this message
Otto Co-Pilot (otto-copilot) wrote :
Revision history for this message
Colin Watson (cjwatson) wrote :

Self-approving to work around incorrect repository reviewer (which I've now fixed).

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/lib/lp/snappy/browser/hassnaps.py b/lib/lp/snappy/browser/hassnaps.py
index 2e2d1b0..9fa983d 100644
--- a/lib/lp/snappy/browser/hassnaps.py
+++ b/lib/lp/snappy/browser/hassnaps.py
@@ -3,6 +3,8 @@
33
4"""Mixins for browser classes for objects that implement IHasSnaps."""4"""Mixins for browser classes for objects that implement IHasSnaps."""
55
6from __future__ import absolute_import, print_function, unicode_literals
7
6__metaclass__ = type8__metaclass__ = type
7__all__ = [9__all__ = [
8 'HasSnapsMenuMixin',10 'HasSnapsMenuMixin',
diff --git a/lib/lp/snappy/browser/snap.py b/lib/lp/snappy/browser/snap.py
index 557adfe..2461b29 100644
--- a/lib/lp/snappy/browser/snap.py
+++ b/lib/lp/snappy/browser/snap.py
@@ -3,6 +3,8 @@
33
4"""Snap views."""4"""Snap views."""
55
6from __future__ import absolute_import, print_function, unicode_literals
7
6__metaclass__ = type8__metaclass__ = type
7__all__ = [9__all__ = [
8 'SnapAddView',10 'SnapAddView',
@@ -266,21 +268,21 @@ class SnapRequestBuildsView(LaunchpadFormView):
266 class schema(Interface):268 class schema(Interface):
267 """Schema for requesting a build."""269 """Schema for requesting a build."""
268270
269 archive = Reference(IArchive, title=u'Source archive', required=True)271 archive = Reference(IArchive, title='Source archive', required=True)
270 distro_arch_series = List(272 distro_arch_series = List(
271 Choice(vocabulary='SnapDistroArchSeries'),273 Choice(vocabulary='SnapDistroArchSeries'),
272 title=u'Architectures', required=True,274 title='Architectures', required=True,
273 description=(275 description=(
274 u'If you do not explicitly select any architectures, then '276 'If you do not explicitly select any architectures, then the '
275 u'the snap package will be built for all architectures '277 'snap package will be built for all architectures allowed by '
276 u'allowed by its configuration.'))278 'its configuration.'))
277 pocket = Choice(279 pocket = Choice(
278 title=u'Pocket', vocabulary=PackagePublishingPocket, required=True,280 title='Pocket', vocabulary=PackagePublishingPocket, required=True,
279 description=(281 description=(
280 u'The package stream within the source distribution series '282 'The package stream within the source distribution series to '
281 u'to use when building the snap package.'))283 'use when building the snap package.'))
282 channels = Dict(284 channels = Dict(
283 title=u'Source snap channels', key_type=TextLine(), required=True,285 title='Source snap channels', key_type=TextLine(), required=True,
284 description=ISnap['auto_build_channels'].description)286 description=ISnap['auto_build_channels'].description)
285287
286 custom_widget_archive = SnapArchiveWidget288 custom_widget_archive = SnapArchiveWidget
@@ -289,7 +291,7 @@ class SnapRequestBuildsView(LaunchpadFormView):
289 custom_widget_channels = SnapBuildChannelsWidget291 custom_widget_channels = SnapBuildChannelsWidget
290292
291 help_links = {293 help_links = {
292 "pocket": u"/+help-snappy/snap-build-pocket.html",294 "pocket": "/+help-snappy/snap-build-pocket.html",
293 }295 }
294296
295 @property297 @property
@@ -343,8 +345,8 @@ class ISnapEditSchema(Interface):
343 ])345 ])
344 store_distro_series = Choice(346 store_distro_series = Choice(
345 vocabulary='BuildableSnappyDistroSeries', required=True,347 vocabulary='BuildableSnappyDistroSeries', required=True,
346 title=u'Series')348 title='Series')
347 vcs = Choice(vocabulary=VCSType, required=True, title=u'VCS')349 vcs = Choice(vocabulary=VCSType, required=True, title='VCS')
348350
349 # Each of these is only required if vcs has an appropriate value. Later351 # Each of these is only required if vcs has an appropriate value. Later
350 # validation takes care of adjusting the required attribute.352 # validation takes care of adjusting the required attribute.
@@ -408,7 +410,7 @@ class SnapAddView(
408 custom_widget_store_channels = StoreChannelsWidget410 custom_widget_store_channels = StoreChannelsWidget
409411
410 help_links = {412 help_links = {
411 "auto_build_pocket": u"/+help-snappy/snap-build-pocket.html",413 "auto_build_pocket": "/+help-snappy/snap-build-pocket.html",
412 }414 }
413415
414 def initialize(self):416 def initialize(self):
@@ -427,9 +429,9 @@ class SnapAddView(
427 super(SnapAddView, self).setUpFields()429 super(SnapAddView, self).setUpFields()
428 self.form_fields += self.createEnabledProcessors(430 self.form_fields += self.createEnabledProcessors(
429 getUtility(IProcessorSet).getAll(),431 getUtility(IProcessorSet).getAll(),
430 u"The architectures that this snap package builds for. Some "432 "The architectures that this snap package builds for. Some "
431 u"architectures are restricted and may only be enabled or "433 "architectures are restricted and may only be enabled or "
432 u"disabled by administrators.")434 "disabled by administrators.")
433435
434 def setUpWidgets(self):436 def setUpWidgets(self):
435 """See `LaunchpadFormView`."""437 """See `LaunchpadFormView`."""
@@ -608,19 +610,19 @@ class BaseSnapEditView(LaunchpadEditFormView, SnapAuthorizeMixin):
608 if owner is not None and owner.private:610 if owner is not None and owner.private:
609 self.setFieldError(611 self.setFieldError(
610 'private' if 'private' in data else 'owner',612 'private' if 'private' in data else 'owner',
611 u'A public snap cannot have a private owner.')613 'A public snap cannot have a private owner.')
612 if 'private' in data or 'branch' in data:614 if 'private' in data or 'branch' in data:
613 branch = data.get('branch', self.context.branch)615 branch = data.get('branch', self.context.branch)
614 if branch is not None and branch.private:616 if branch is not None and branch.private:
615 self.setFieldError(617 self.setFieldError(
616 'private' if 'private' in data else 'branch',618 'private' if 'private' in data else 'branch',
617 u'A public snap cannot have a private branch.')619 'A public snap cannot have a private branch.')
618 if 'private' in data or 'git_ref' in data:620 if 'private' in data or 'git_ref' in data:
619 ref = data.get('git_ref', self.context.git_ref)621 ref = data.get('git_ref', self.context.git_ref)
620 if ref is not None and ref.private:622 if ref is not None and ref.private:
621 self.setFieldError(623 self.setFieldError(
622 'private' if 'private' in data else 'git_ref',624 'private' if 'private' in data else 'git_ref',
623 u'A public snap cannot have a private repository.')625 'A public snap cannot have a private repository.')
624626
625 def _needStoreReauth(self, data):627 def _needStoreReauth(self, data):
626 """Does this change require reauthorizing to the store?"""628 """Does this change require reauthorizing to the store?"""
@@ -696,7 +698,7 @@ class SnapAdminView(BaseSnapEditView):
696 if not getFeatureFlag(SNAP_PRIVATE_FEATURE_FLAG):698 if not getFeatureFlag(SNAP_PRIVATE_FEATURE_FLAG):
697 self.setFieldError(699 self.setFieldError(
698 'private',700 'private',
699 u'You do not have permission to create private snaps.')701 'You do not have permission to create private snaps.')
700702
701703
702class SnapEditView(BaseSnapEditView, EnableProcessorsMixin):704class SnapEditView(BaseSnapEditView, EnableProcessorsMixin):
@@ -734,7 +736,7 @@ class SnapEditView(BaseSnapEditView, EnableProcessorsMixin):
734 custom_widget_store_channels = StoreChannelsWidget736 custom_widget_store_channels = StoreChannelsWidget
735737
736 help_links = {738 help_links = {
737 "auto_build_pocket": u"/+help-snappy/snap-build-pocket.html",739 "auto_build_pocket": "/+help-snappy/snap-build-pocket.html",
738 }740 }
739741
740 def setUpFields(self):742 def setUpFields(self):
@@ -742,9 +744,9 @@ class SnapEditView(BaseSnapEditView, EnableProcessorsMixin):
742 super(SnapEditView, self).setUpFields()744 super(SnapEditView, self).setUpFields()
743 self.form_fields += self.createEnabledProcessors(745 self.form_fields += self.createEnabledProcessors(
744 self.context.available_processors,746 self.context.available_processors,
745 u"The architectures that this snap package builds for. Some "747 "The architectures that this snap package builds for. Some "
746 u"architectures are restricted and may only be enabled or "748 "architectures are restricted and may only be enabled or "
747 u"disabled by administrators.")749 "disabled by administrators.")
748750
749 @property751 @property
750 def initial_values(self):752 def initial_values(self):
@@ -804,7 +806,7 @@ class SnapAuthorizeView(LaunchpadEditFormView):
804 """Schema for authorizing snap package uploads to the store."""806 """Schema for authorizing snap package uploads to the store."""
805807
806 discharge_macaroon = TextLine(808 discharge_macaroon = TextLine(
807 title=u'Serialized discharge macaroon', required=True)809 title='Serialized discharge macaroon', required=True)
808810
809 render_context = False811 render_context = False
810812
@@ -842,13 +844,13 @@ class SnapAuthorizeView(LaunchpadEditFormView):
842 def complete_action(self, action, data):844 def complete_action(self, action, data):
843 if not data.get('discharge_macaroon'):845 if not data.get('discharge_macaroon'):
844 self.addError(structured(846 self.addError(structured(
845 _(u'Uploads of %(snap)s to the store were not authorized.'),847 _('Uploads of %(snap)s to the store were not authorized.'),
846 snap=self.context.name))848 snap=self.context.name))
847 return849 return
848 self.context.completeAuthorization(850 self.context.completeAuthorization(
849 discharge_macaroon=data['discharge_macaroon'])851 discharge_macaroon=data['discharge_macaroon'])
850 self.request.response.addInfoNotification(structured(852 self.request.response.addInfoNotification(structured(
851 _(u'Uploads of %(snap)s to the store are now authorized.'),853 _('Uploads of %(snap)s to the store are now authorized.'),
852 snap=self.context.name))854 snap=self.context.name))
853 self.request.response.redirect(canonical_url(self.context))855 self.request.response.redirect(canonical_url(self.context))
854856
diff --git a/lib/lp/snappy/browser/snapbuild.py b/lib/lp/snappy/browser/snapbuild.py
index 190d07c..a485afd 100644
--- a/lib/lp/snappy/browser/snapbuild.py
+++ b/lib/lp/snappy/browser/snapbuild.py
@@ -3,6 +3,8 @@
33
4"""SnapBuild views."""4"""SnapBuild views."""
55
6from __future__ import absolute_import, print_function, unicode_literals
7
6__metaclass__ = type8__metaclass__ = type
7__all__ = [9__all__ = [
8 'SnapBuildContextMenu',10 'SnapBuildContextMenu',
diff --git a/lib/lp/snappy/browser/snaplisting.py b/lib/lp/snappy/browser/snaplisting.py
index 608bece..e59fd29 100644
--- a/lib/lp/snappy/browser/snaplisting.py
+++ b/lib/lp/snappy/browser/snaplisting.py
@@ -3,6 +3,8 @@
33
4"""Base class view for snap listings."""4"""Base class view for snap listings."""
55
6from __future__ import absolute_import, print_function, unicode_literals
7
6__metaclass__ = type8__metaclass__ = type
79
8__all__ = [10__all__ = [
diff --git a/lib/lp/snappy/browser/widgets/snaparchive.py b/lib/lp/snappy/browser/widgets/snaparchive.py
index 441013f..e138664 100644
--- a/lib/lp/snappy/browser/widgets/snaparchive.py
+++ b/lib/lp/snappy/browser/widgets/snaparchive.py
@@ -1,6 +1,8 @@
1# Copyright 2015-2019 Canonical Ltd. This software is licensed under the1# Copyright 2015-2019 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4from __future__ import absolute_import, print_function, unicode_literals
5
4__metaclass__ = type6__metaclass__ = type
57
6__all__ = [8__all__ = [
@@ -48,7 +50,7 @@ class SnapArchiveWidget(BrowserWidget, InputWidget):
48 return50 return
49 fields = [51 fields = [
50 Choice(52 Choice(
51 __name__="ppa", title=u"PPA", required=True, vocabulary="PPA"),53 __name__="ppa", title="PPA", required=True, vocabulary="PPA"),
52 ]54 ]
53 for field in fields:55 for field in fields:
54 setUpWidget(56 setUpWidget(
diff --git a/lib/lp/snappy/browser/widgets/storechannels.py b/lib/lp/snappy/browser/widgets/storechannels.py
index b7e84db..2d4d665 100644
--- a/lib/lp/snappy/browser/widgets/storechannels.py
+++ b/lib/lp/snappy/browser/widgets/storechannels.py
@@ -1,6 +1,8 @@
1# Copyright 2017-2018 Canonical Ltd. This software is licensed under the1# Copyright 2017-2018 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4from __future__ import absolute_import, print_function, unicode_literals
5
4__metaclass__ = type6__metaclass__ = type
57
6__all__ = [8__all__ = [
@@ -59,17 +61,17 @@ class StoreChannelsWidget(BrowserWidget, InputWidget):
59 return61 return
60 fields = [62 fields = [
61 TextLine(63 TextLine(
62 __name__="track", title=u"Track", required=False,64 __name__="track", title="Track", required=False,
63 description=_(65 description=_(
64 "Track defines a series for your software. "66 "Track defines a series for your software. "
65 "If not specified, the default track ('latest') is "67 "If not specified, the default track ('latest') is "
66 "assumed.")),68 "assumed.")),
67 List(69 List(
68 __name__="risks", title=u"Risk", required=False,70 __name__="risks", title="Risk", required=False,
69 value_type=Choice(vocabulary="SnapStoreChannel"),71 value_type=Choice(vocabulary="SnapStoreChannel"),
70 description=_("Risks denote the stability of your software.")),72 description=_("Risks denote the stability of your software.")),
71 TextLine(73 TextLine(
72 __name__="branch", title=u"Branch", required=False,74 __name__="branch", title="Branch", required=False,
73 description=_(75 description=_(
74 "Branches provide users with an easy way to test bug "76 "Branches provide users with an easy way to test bug "
75 "fixes. They are temporary and created on demand. If "77 "fixes. They are temporary and created on demand. If "
diff --git a/lib/lp/snappy/interfaces/snap.py b/lib/lp/snappy/interfaces/snap.py
index 4471b79..70626c9 100644
--- a/lib/lp/snappy/interfaces/snap.py
+++ b/lib/lp/snappy/interfaces/snap.py
@@ -3,6 +3,8 @@
33
4"""Snap package interfaces."""4"""Snap package interfaces."""
55
6from __future__ import absolute_import, print_function, unicode_literals
7
6__metaclass__ = type8__metaclass__ = type
79
8__all__ = [10__all__ = [
@@ -112,14 +114,14 @@ from lp.soyuz.interfaces.archive import IArchive
112from lp.soyuz.interfaces.distroarchseries import IDistroArchSeries114from lp.soyuz.interfaces.distroarchseries import IDistroArchSeries
113115
114116
115SNAP_PRIVATE_FEATURE_FLAG = u"snap.allow_private"117SNAP_PRIVATE_FEATURE_FLAG = "snap.allow_private"
116SNAP_SNAPCRAFT_CHANNEL_FEATURE_FLAG = u"snap.channels.snapcraft"118SNAP_SNAPCRAFT_CHANNEL_FEATURE_FLAG = "snap.channels.snapcraft"
117SNAP_WEBHOOKS_FEATURE_FLAG = u"snap.webhooks.enabled"119SNAP_WEBHOOKS_FEATURE_FLAG = "snap.webhooks.enabled"
118120
119121
120SNAP_TESTING_FLAGS = {122SNAP_TESTING_FLAGS = {
121 SNAP_PRIVATE_FEATURE_FLAG: u"on",123 SNAP_PRIVATE_FEATURE_FLAG: "on",
122 SNAP_WEBHOOKS_FEATURE_FLAG: u"on",124 SNAP_WEBHOOKS_FEATURE_FLAG: "on",
123 }125 }
124126
125127
@@ -330,7 +332,7 @@ class ISnapBuildRequest(Interface):
330332
331 archive = Reference(333 archive = Reference(
332 IArchive,334 IArchive,
333 title=u"The source archive for builds produced by this request",335 title="The source archive for builds produced by this request",
334 required=True, readonly=True)336 required=True, readonly=True)
335337
336 channels = Dict(338 channels = Dict(
diff --git a/lib/lp/snappy/interfaces/snapbuild.py b/lib/lp/snappy/interfaces/snapbuild.py
index 3eaaae8..fdd9c86 100644
--- a/lib/lp/snappy/interfaces/snapbuild.py
+++ b/lib/lp/snappy/interfaces/snapbuild.py
@@ -3,6 +3,8 @@
33
4"""Snap package build interfaces."""4"""Snap package build interfaces."""
55
6from __future__ import absolute_import, print_function, unicode_literals
7
6__metaclass__ = type8__metaclass__ = type
79
8__all__ = [10__all__ = [
diff --git a/lib/lp/snappy/interfaces/webservice.py b/lib/lp/snappy/interfaces/webservice.py
index 30def61..b978965 100644
--- a/lib/lp/snappy/interfaces/webservice.py
+++ b/lib/lp/snappy/interfaces/webservice.py
@@ -9,6 +9,8 @@ There is a declaration in ZCML somewhere that looks like:
9which tells `lazr.restful` that it should look for webservice exports here.9which tells `lazr.restful` that it should look for webservice exports here.
10"""10"""
1111
12from __future__ import absolute_import, print_function, unicode_literals
13
12__all__ = [14__all__ = [
13 'ISnap',15 'ISnap',
14 'ISnapBase',16 'ISnapBase',
diff --git a/lib/lp/snappy/mail/snapbuild.py b/lib/lp/snappy/mail/snapbuild.py
index fa85a34..1f36e75 100644
--- a/lib/lp/snappy/mail/snapbuild.py
+++ b/lib/lp/snappy/mail/snapbuild.py
@@ -1,6 +1,8 @@
1# Copyright 2015-2017 Canonical Ltd. This software is licensed under the1# Copyright 2015-2017 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4from __future__ import absolute_import, print_function, unicode_literals
5
4__metaclass__ = type6__metaclass__ = type
5__all__ = [7__all__ = [
6 'SnapBuildMailer',8 'SnapBuildMailer',
diff --git a/lib/lp/snappy/model/snap.py b/lib/lp/snappy/model/snap.py
index 681b735..18eee6e 100644
--- a/lib/lp/snappy/model/snap.py
+++ b/lib/lp/snappy/model/snap.py
@@ -1,6 +1,8 @@
1# Copyright 2015-2019 Canonical Ltd. This software is licensed under the1# Copyright 2015-2019 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4from __future__ import absolute_import, print_function, unicode_literals
5
4__metaclass__ = type6__metaclass__ = type
5__all__ = [7__all__ = [
6 'Snap',8 'Snap',
diff --git a/lib/lp/snappy/model/snapbuild.py b/lib/lp/snappy/model/snapbuild.py
index f21d4c7..0415c66 100644
--- a/lib/lp/snappy/model/snapbuild.py
+++ b/lib/lp/snappy/model/snapbuild.py
@@ -1,6 +1,8 @@
1# Copyright 2015-2019 Canonical Ltd. This software is licensed under the1# Copyright 2015-2019 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4from __future__ import absolute_import, print_function, unicode_literals
5
4__metaclass__ = type6__metaclass__ = type
5__all__ = [7__all__ = [
6 'SnapBuild',8 'SnapBuild',
diff --git a/lib/lp/snappy/model/snapbuildbehaviour.py b/lib/lp/snappy/model/snapbuildbehaviour.py
index 8e61925..cda3cff 100644
--- a/lib/lp/snappy/model/snapbuildbehaviour.py
+++ b/lib/lp/snappy/model/snapbuildbehaviour.py
@@ -6,6 +6,8 @@
6Dispatches snap package build jobs to build-farm slaves.6Dispatches snap package build jobs to build-farm slaves.
7"""7"""
88
9from __future__ import absolute_import, print_function, unicode_literals
10
9__metaclass__ = type11__metaclass__ = type
10__all__ = [12__all__ = [
11 'SnapBuildBehaviour',13 'SnapBuildBehaviour',
@@ -169,7 +171,7 @@ class SnapBuildBehaviour(BuildFarmJobBehaviourBase):
169 # "git clone -b" doesn't accept full ref names. If this becomes171 # "git clone -b" doesn't accept full ref names. If this becomes
170 # a problem then we could change launchpad-buildd to do "git172 # a problem then we could change launchpad-buildd to do "git
171 # clone" followed by "git checkout" instead.173 # clone" followed by "git checkout" instead.
172 if build.snap.git_path != u"HEAD":174 if build.snap.git_path != "HEAD":
173 args["git_path"] = build.snap.git_ref.name175 args["git_path"] = build.snap.git_ref.name
174 else:176 else:
175 raise CannotBuild(177 raise CannotBuild(
diff --git a/lib/lp/snappy/validators/channels.py b/lib/lp/snappy/validators/channels.py
index f6ed93e..f091857 100644
--- a/lib/lp/snappy/validators/channels.py
+++ b/lib/lp/snappy/validators/channels.py
@@ -3,6 +3,8 @@
33
4"""Validators for the .store_channels attribute."""4"""Validators for the .store_channels attribute."""
55
6from __future__ import absolute_import, print_function, unicode_literals
7
6__metaclass__ = type8__metaclass__ = type
79
8from zope.schema.vocabulary import getVocabularyRegistry10from zope.schema.vocabulary import getVocabularyRegistry
diff --git a/lib/lp/snappy/vocabularies.py b/lib/lp/snappy/vocabularies.py
index 61e5872..331088a 100644
--- a/lib/lp/snappy/vocabularies.py
+++ b/lib/lp/snappy/vocabularies.py
@@ -3,6 +3,8 @@
33
4"""Snappy vocabularies."""4"""Snappy vocabularies."""
55
6from __future__ import absolute_import, print_function, unicode_literals
7
6__metaclass__ = type8__metaclass__ = type
79
8__all__ = [10__all__ = [

Subscribers

People subscribed via source and target branches

to status/vote changes: