Merge lp:~michael.nelson/launchpad/distro-series-difference-basic-model into lp:launchpad/db-devel

Proposed by Michael Nelson
Status: Merged
Approved by: Michael Nelson
Approved revision: no longer in the source branch.
Merged at revision: 9724
Proposed branch: lp:~michael.nelson/launchpad/distro-series-difference-basic-model
Merge into: lp:launchpad/db-devel
Prerequisite: lp:~michael.nelson/launchpad/distro-series-difference-schema
Diff against target: 531 lines (+462/-0)
7 files modified
lib/lp/registry/configure.zcml (+11/-0)
lib/lp/registry/enum.py (+57/-0)
lib/lp/registry/exceptions.py (+17/-0)
lib/lp/registry/interfaces/distroseriesdifference.py (+108/-0)
lib/lp/registry/model/distroseriesdifference.py (+117/-0)
lib/lp/registry/tests/test_distroseriesdifference.py (+110/-0)
lib/lp/testing/factory.py (+42/-0)
To merge this branch: bzr merge lp:~michael.nelson/launchpad/distro-series-difference-basic-model
Reviewer Review Type Date Requested Status
Abel Deuring (community) code Approve
Review via email: mp+33885@code.launchpad.net

Commit message

Adds basic model functionality for the DistroSeriesDifference model (for https://dev.launchpad.net/LEP/DerivativeDistributions)

Description of the change

Overview
========

This branch continues on from:

https://code.edge.launchpad.net/~michael.nelson/launchpad/distro-series-difference-schema/+merge/33515

and implements the basic model, enums and tests for representing the distroseriesdifference pages such as:

https://dev.launchpad.net/LEP/DerivativeDistributions?action=AttachFile&do=get&target=derived-series-diffs_5.png

Details
=======

I've set the status and activity_log fields as readonly as a following branch will adds more functionality to the model including security for the status and activity_log fields.

Test with:
bin/test -vvm lp.registry.tests.test_distroseriesdifference

To post a comment you must log in.
Revision history for this message
Abel Deuring (adeuring) wrote :

Hi Michael,

nice work! I have just two nitpicks:

> === added file 'lib/lp/registry/interfaces/distroseriesdifference.py'
> --- lib/lp/registry/interfaces/distroseriesdifference.py 1970-01-01 00:00:00 +0000
> +++ lib/lp/registry/interfaces/distroseriesdifference.py 2010-08-27 09:31:04 +0000

[...]

> + activity_log = Text(
> + title=_('A log of activity and comments for this difference'),
> + required=False, readonly=True)

s/difference/difference./

> === added file 'lib/lp/registry/tests/test_distroseriesdifference.py'
> --- lib/lp/registry/tests/test_distroseriesdifference.py 1970-01-01 00:00:00 +0000
> +++ lib/lp/registry/tests/test_distroseriesdifference.py 2010-08-27 09:31:04 +0000

[...]

> + def test_new_non_derived_series(self):
> + # A DistroSeriesDifference cannot be created with a non-derived
> + # series.
> + distro_series = self.factory.makeDistroSeries()
> + self.assertRaises(
> + NotADerivedSeriesError,
> + self.factory.makeDistroSeriesDifference,
> + derived_series=distro_series)

I would prefer something like

    distroseriesdifferencesource_factory = getUtility(IDistroSeriesDifferenceSource)
    self.assertRaises(
        NotADerivedSeriesError, distroseriesdifferencesource_factory.new, ...)

This makes it a bit more explicit which method is tested.

review: Approve (code)
Revision history for this message
Michael Nelson (michael.nelson) wrote :

On Fri, Aug 27, 2010 at 1:39 PM, Abel Deuring
<email address hidden> wrote:
> Review: Approve code
> Hi Michael,
>
> nice work! I have just two nitpicks:

Thanks Abel, incremental attached. In addition to the changes you
mentioned, I've switched the activity_log to be a property rather than
a db field due to a schema change.

Cheers,
Michael

=== modified file 'lib/lp/registry/interfaces/distroseriesdifference.py'
--- lib/lp/registry/interfaces/distroseriesdifference.py 2010-08-27 09:28:03 +0000
+++ lib/lp/registry/interfaces/distroseriesdifference.py 2010-08-27 12:29:55 +0000
@@ -54,7 +54,7 @@
54 "The most recently generated package diff for this difference."))54 "The most recently generated package diff for this difference."))
5555
56 activity_log = Text(56 activity_log = Text(
57 title=_('A log of activity and comments for this difference'),57 title=_('A log of activity and comments for this difference.'),
58 required=False, readonly=True)58 required=False, readonly=True)
5959
60 status = Choice(60 status = Choice(
6161
=== modified file 'lib/lp/registry/model/distroseriesdifference.py'
--- lib/lp/registry/model/distroseriesdifference.py 2010-08-27 09:02:40 +0000
+++ lib/lp/registry/model/distroseriesdifference.py 2010-08-27 12:38:58 +0000
@@ -56,7 +56,6 @@
56 last_package_diff = Reference(56 last_package_diff = Reference(
57 last_package_diff_id, 'PackageDiff.id')57 last_package_diff_id, 'PackageDiff.id')
5858
59 activity_log = Unicode(name='activity_log', allow_none=True)
60 status = DBEnum(name='status', allow_none=False,59 status = DBEnum(name='status', allow_none=False,
61 enum=DistroSeriesDifferenceStatus)60 enum=DistroSeriesDifferenceStatus)
62 difference_type = DBEnum(name='difference_type', allow_none=False,61 difference_type = DBEnum(name='difference_type', allow_none=False,
@@ -88,6 +87,11 @@
88 """See `IDistroSeriesDifference`."""87 """See `IDistroSeriesDifference`."""
89 return self._getLatestSourcePub(for_parent=True)88 return self._getLatestSourcePub(for_parent=True)
9089
90 @property
91 def activity_log(self):
92 """See `IDistroSeriesDifference`."""
93 return u""
94
91 def _getLatestSourcePub(self, for_parent=False):95 def _getLatestSourcePub(self, for_parent=False):
92 """Helper to keep source_pub/parent_source_pub DRY."""96 """Helper to keep source_pub/parent_source_pub DRY."""
93 distro_series = self.derived_series97 distro_series = self.derived_series
9498
=== modified file 'lib/lp/registry/tests/test_distroseriesdifference.py'
--- lib/lp/registry/tests/test_distroseriesdifference.py 2010-08-27 09:02:40 +0000
+++ lib/lp/registry/tests/test_distroseriesdifference.py 2010-08-27 12:37:35 +0000
@@ -44,10 +44,15 @@
44 # A DistroSeriesDifference cannot be created with a non-derived44 # A DistroSeriesDifference cannot be created with a non-derived
45 # series.45 # series.
46 distro_series = self.factory.makeDistroSeries()46 distro_series = self.factory.makeDistroSeries()
47 source_package_name = self.factory.makeSourcePackageName('myfoo')
48 distroseriesdifference_factory = getUtility(
49 IDistroSeriesDifferenceSource)
50
47 self.assertRaises(51 self.assertRaises(
48 NotADerivedSeriesError,52 NotADerivedSeriesError, distroseriesdifference_factory.new,
49 self.factory.makeDistroSeriesDifference,53 distro_series, source_package_name,
50 derived_series=distro_series)54 DistroSeriesDifferenceType.UNIQUE_TO_DERIVED_SERIES
55 )
5156
52 def test_source_pub(self):57 def test_source_pub(self):
53 # The related source pub is returned for the derived series.58 # The related source pub is returned for the derived series.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/registry/configure.zcml'
--- lib/lp/registry/configure.zcml 2010-08-23 03:25:20 +0000
+++ lib/lp/registry/configure.zcml 2010-08-31 07:47:46 +0000
@@ -102,6 +102,17 @@
102 date_last_modified102 date_last_modified
103 person"/>103 person"/>
104 </class>104 </class>
105
106 <!-- DistroSeriesDifference -->
107 <securedutility
108 component="lp.registry.model.distroseriesdifference.DistroSeriesDifference"
109 provides="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferenceSource">
110 <allow interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferenceSource"/>
111 </securedutility>
112 <class
113 class="lp.registry.model.distroseriesdifference.DistroSeriesDifference">
114 <allow interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifference"/>
115 </class>
105 <class116 <class
106 class="lp.registry.model.distroseries.DistroSeries">117 class="lp.registry.model.distroseries.DistroSeries">
107 <allow118 <allow
108119
=== modified file 'lib/lp/registry/enum.py'
--- lib/lp/registry/enum.py 2010-08-20 20:31:18 +0000
+++ lib/lp/registry/enum.py 2010-08-31 07:47:46 +0000
@@ -6,6 +6,8 @@
6__metaclass__ = type6__metaclass__ = type
7__all__ = [7__all__ = [
8 'BugNotificationLevel',8 'BugNotificationLevel',
9 'DistroSeriesDifferenceStatus',
10 'DistroSeriesDifferenceType',
9 ]11 ]
1012
11from lazr.enum import (13from lazr.enum import (
@@ -47,3 +49,58 @@
47 notifications about new events in the bugs's discussion, like new49 notifications about new events in the bugs's discussion, like new
48 comments.50 comments.
49 """)51 """)
52
53
54class DistroSeriesDifferenceStatus(DBEnumeratedType):
55 """Distribution series difference status.
56
57 The status of a package difference between two DistroSeries.
58 """
59
60 NEEDS_ATTENTION = DBItem(1, """
61 Needs attention
62
63 This difference is current and needs attention.
64 """)
65
66 IGNORED = DBItem(2, """
67 Ignored
68
69 This difference is being ignored until a new package is uploaded
70 or the status is manually updated.
71 """)
72
73 IGNORED_ALWAYS = DBItem(3, """
74 Ignored always
75
76 This difference should always be ignored.
77 """)
78
79 RESOLVED = DBItem(4, """
80 Resolved
81
82 This difference has been resolved and versions are now equal.
83 """)
84
85class DistroSeriesDifferenceType(DBEnumeratedType):
86 """Distribution series difference type."""
87
88 UNIQUE_TO_DERIVED_SERIES = DBItem(1, """
89 Unique to derived series
90
91 This package is present in the derived series but not the parent
92 series.
93 """)
94
95 MISSING_FROM_DERIVED_SERIES = DBItem(2, """
96 Missing from derived series
97
98 This package is present in the parent series but missing from the
99 derived series.
100 """)
101
102 DIFFERENT_VERSIONS = DBItem(3, """
103 Different versions
104
105 This package is present in both series with different versions.
106 """)
50107
=== added file 'lib/lp/registry/exceptions.py'
--- lib/lp/registry/exceptions.py 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/exceptions.py 2010-08-31 07:47:46 +0000
@@ -0,0 +1,17 @@
1# Copyright 2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4"""Exceptions for the Registry app."""
5
6__metaclass__ = type
7__all__ = [
8 'NotADerivedSeriesError',
9 ]
10
11
12class NotADerivedSeriesError(Exception):
13 """A distro series difference must be created with a derived series.
14
15 This is raised when a DistroSeriesDifference is created with a
16 non-derived series - that is, a distroseries with a null Parent."""
17
018
=== added file 'lib/lp/registry/interfaces/distroseriesdifference.py'
--- lib/lp/registry/interfaces/distroseriesdifference.py 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/interfaces/distroseriesdifference.py 2010-08-31 07:47:46 +0000
@@ -0,0 +1,108 @@
1# Copyright 2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4"""Interface classes for a difference between two distribution series."""
5
6__metaclass__ = type
7
8
9__all__ = [
10 'IDistroSeriesDifference',
11 'IDistroSeriesDifferenceSource',
12 ]
13
14from lazr.restful.fields import Reference
15from zope.interface import Interface
16from zope.schema import (
17 Choice,
18 Int,
19 Text,
20 )
21
22from canonical.launchpad import _
23from lp.registry.enum import (
24 DistroSeriesDifferenceStatus,
25 DistroSeriesDifferenceType,
26 )
27from lp.registry.interfaces.distroseries import IDistroSeries
28from lp.registry.interfaces.sourcepackagename import ISourcePackageName
29from lp.soyuz.interfaces.packagediff import IPackageDiff
30from lp.soyuz.interfaces.publishing import ISourcePackagePublishingHistory
31
32
33class IDistroSeriesDifference(Interface):
34 """An interface for a package difference between two distroseries."""
35
36 id = Int(title=_('ID'), required=True, readonly=True)
37
38 derived_series = Reference(
39 IDistroSeries, title=_("Derived series"), required=True,
40 readonly=True, description=_(
41 "The distribution series which, together with its parent, "
42 "identifies the two series with the difference."))
43
44 source_package_name = Reference(
45 ISourcePackageName,
46 title=_("Source package name"), required=True, readonly=True,
47 description=_(
48 "The package with a difference between the derived series "
49 "and its parent."))
50
51 package_diff = Reference(
52 IPackageDiff, title=_("Package diff"), required=False,
53 readonly=True, description=_(
54 "The most recently generated package diff for this difference."))
55
56 activity_log = Text(
57 title=_('A log of activity and comments for this difference.'),
58 required=False, readonly=True)
59
60 status = Choice(
61 title=_('Distro series difference status.'),
62 description=_('The current status of this difference.'),
63 vocabulary=DistroSeriesDifferenceStatus,
64 required=True, readonly=True)
65
66 difference_type = Choice(
67 title=_('Difference type'),
68 description=_('The type of difference for this package.'),
69 vocabulary=DistroSeriesDifferenceType,
70 required=True, readonly=True)
71
72 source_pub = Reference(
73 ISourcePackagePublishingHistory,
74 title=_("Derived source pub"), readonly=True,
75 description=_(
76 "The most recent published version in the derived series."))
77
78 parent_source_pub = Reference(
79 ISourcePackagePublishingHistory,
80 title=_("Parent source pub"), readonly=True,
81 description=_(
82 "The most recent published version in the parent series."))
83
84
85class IDistroSeriesDifferenceSource(Interface):
86 """A utility of this interface can be used to create differences."""
87
88 def new(derived_series, source_package_name, difference_type,
89 status=DistroSeriesDifferenceStatus.NEEDS_ATTENTION):
90 """Create an `IDistroSeriesDifference`.
91
92 :param derived_series: The distribution series which was derived
93 from a parent. If a series without a parent is passed an
94 exception is raised.
95 :type derived_series: `IDistroSeries`.
96 :param source_package_name: A source package name identifying the
97 package with a difference.
98 :type source_package_name: `ISourcePackageName`.
99 :param difference_type: Indicates the type of difference represented
100 by this record.
101 :type difference_type: `DistroSeriesDifferenceType`.
102 :param status: The current status of this difference.
103 :type status: `DistorSeriesDifferenceStatus`.
104 :raises NotADerivedSeriesError: When the passed distro series
105 is not a derived series.
106 :return: A new `DistroSeriesDifference` object.
107 """
108
0109
=== added file 'lib/lp/registry/model/distroseriesdifference.py'
--- lib/lp/registry/model/distroseriesdifference.py 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/model/distroseriesdifference.py 2010-08-31 07:47:46 +0000
@@ -0,0 +1,117 @@
1# Copyright 2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4"""Database classes for a difference between two distribution series."""
5
6__metaclass__ = type
7
8__all__ = [
9 'DistroSeriesDifference',
10 ]
11
12
13from storm.locals import (
14 Int,
15 Reference,
16 Storm,
17 Unicode,
18 )
19from zope.interface import (
20 classProvides,
21 implements,
22 )
23
24from canonical.database.enumcol import DBEnum
25from canonical.launchpad.interfaces.lpstorm import IMasterStore
26from lp.registry.enum import (
27 DistroSeriesDifferenceStatus,
28 DistroSeriesDifferenceType,
29 )
30from lp.registry.exceptions import NotADerivedSeriesError
31from lp.registry.interfaces.distroseriesdifference import (
32 IDistroSeriesDifference,
33 IDistroSeriesDifferenceSource,
34 )
35
36
37class DistroSeriesDifference(Storm):
38 """See `DistroSeriesDifference`."""
39 implements(IDistroSeriesDifference)
40 classProvides(IDistroSeriesDifferenceSource)
41 __storm_table__ = 'DistroSeriesDifference'
42
43 id = Int(primary=True)
44
45 derived_series_id = Int(name='derived_series', allow_none=False)
46 derived_series = Reference(
47 derived_series_id, 'DistroSeries.id')
48
49 source_package_name_id = Int(
50 name='source_package_name', allow_none=False)
51 source_package_name = Reference(
52 source_package_name_id, 'SourcePackageName.id')
53
54 package_diff_id = Int(
55 name='package_diff', allow_none=True)
56 package_diff = Reference(
57 package_diff_id, 'PackageDiff.id')
58
59 status = DBEnum(name='status', allow_none=False,
60 enum=DistroSeriesDifferenceStatus)
61 difference_type = DBEnum(name='difference_type', allow_none=False,
62 enum=DistroSeriesDifferenceType)
63
64 @staticmethod
65 def new(derived_series, source_package_name, difference_type,
66 status=DistroSeriesDifferenceStatus.NEEDS_ATTENTION):
67 """See `IDistroSeriesDifferenceSource`."""
68 if derived_series.parent_series is None:
69 raise NotADerivedSeriesError()
70
71 store = IMasterStore(DistroSeriesDifference)
72 diff = DistroSeriesDifference()
73 diff.derived_series = derived_series
74 diff.source_package_name = source_package_name
75 diff.status = status
76 diff.difference_type = difference_type
77
78 return store.add(diff)
79
80 @property
81 def source_pub(self):
82 """See `IDistroSeriesDifference`."""
83 return self._getLatestSourcePub()
84
85 @property
86 def parent_source_pub(self):
87 """See `IDistroSeriesDifference`."""
88 return self._getLatestSourcePub(for_parent=True)
89
90 @property
91 def activity_log(self):
92 """See `IDistroSeriesDifference`."""
93 return u""
94
95 def _getLatestSourcePub(self, for_parent=False):
96 """Helper to keep source_pub/parent_source_pub DRY."""
97 distro_series = self.derived_series
98 if for_parent:
99 distro_series = self.derived_series.parent_series
100
101 pubs = distro_series.getPublishedSources(
102 self.source_package_name, include_pending=True)
103
104 # The most recent published source is the first one.
105 if pubs:
106 return pubs[0]
107 else:
108 return None
109
110 def _getVersions(self):
111 """Helper method returning versions string."""
112 src_pub_ver = parent_src_pub_ver = "-"
113 if self.source_pub:
114 src_pub_ver = self.source_pub.source_package_version
115 if self.parent_source_pub is not None:
116 parent_src_pub_ver = self.parent_source_pub.source_package_version
117 return parent_src_pub_ver + "/" + src_pub_ver
0118
=== added file 'lib/lp/registry/tests/test_distroseriesdifference.py'
--- lib/lp/registry/tests/test_distroseriesdifference.py 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/tests/test_distroseriesdifference.py 2010-08-31 07:47:46 +0000
@@ -0,0 +1,110 @@
1# Copyright 2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4"""Model tests for the DistroSeriesDifference class."""
5
6__metaclass__ = type
7
8import unittest
9
10from storm.store import Store
11from zope.component import getUtility
12
13from canonical.launchpad.webapp.testing import verifyObject
14from canonical.testing import DatabaseFunctionalLayer
15from lp.testing import TestCaseWithFactory
16from lp.registry.enum import DistroSeriesDifferenceType
17from lp.registry.exceptions import NotADerivedSeriesError
18from lp.registry.interfaces.distroseriesdifference import (
19 IDistroSeriesDifference,
20 IDistroSeriesDifferenceSource,
21 )
22from lp.soyuz.interfaces.publishing import PackagePublishingStatus
23
24
25class DistroSeriesDifferenceTestCase(TestCaseWithFactory):
26
27 layer = DatabaseFunctionalLayer
28
29 def test_implements_interface(self):
30 # The implementation implements the interface correctly.
31 ds_diff = self.factory.makeDistroSeriesDifference()
32 # Flush the store to ensure db constraints are triggered.
33 Store.of(ds_diff).flush()
34
35 verifyObject(IDistroSeriesDifference, ds_diff)
36
37 def test_source_implements_interface(self):
38 # The utility for creating differences implements its interface.
39 utility = getUtility(IDistroSeriesDifferenceSource)
40
41 verifyObject(IDistroSeriesDifferenceSource, utility)
42
43 def test_new_non_derived_series(self):
44 # A DistroSeriesDifference cannot be created with a non-derived
45 # series.
46 distro_series = self.factory.makeDistroSeries()
47 source_package_name = self.factory.makeSourcePackageName('myfoo')
48 distroseriesdifference_factory = getUtility(
49 IDistroSeriesDifferenceSource)
50
51 self.assertRaises(
52 NotADerivedSeriesError, distroseriesdifference_factory.new,
53 distro_series, source_package_name,
54 DistroSeriesDifferenceType.UNIQUE_TO_DERIVED_SERIES
55 )
56
57 def test_source_pub(self):
58 # The related source pub is returned for the derived series.
59 ds_diff = self.factory.makeDistroSeriesDifference(
60 source_package_name_str="foonew")
61
62 self.assertEqual(
63 'foonew', ds_diff.source_pub.source_package_name)
64 self.assertEqual(
65 ds_diff.derived_series, ds_diff.source_pub.distroseries)
66
67 def test_source_pub_gets_latest_pending(self):
68 # The most recent publication is always returned, even if its pending.
69 ds_diff = self.factory.makeDistroSeriesDifference(
70 source_package_name_str="foonew")
71 pending_pub = self.factory.makeSourcePackagePublishingHistory(
72 sourcepackagename=ds_diff.source_package_name,
73 distroseries=ds_diff.derived_series,
74 status=PackagePublishingStatus.PENDING)
75
76 self.assertEqual(pending_pub, ds_diff.source_pub)
77
78 def test_source_pub_returns_none(self):
79 # None is returned when there is no source pub.
80 ds_diff = self.factory.makeDistroSeriesDifference(
81 difference_type=(
82 DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES))
83
84 self.assertIs(None, ds_diff.source_pub)
85
86 def test_parent_source_pub(self):
87 # The related source pub for the parent distro series is returned.
88 ds_diff = self.factory.makeDistroSeriesDifference(
89 source_package_name_str="foonew")
90
91 self.assertEqual(
92 'foonew', ds_diff.parent_source_pub.source_package_name)
93 self.assertEqual(
94 ds_diff.derived_series.parent_series,
95 ds_diff.parent_source_pub.distroseries)
96
97 def test_paren_source_pub_gets_latest_pending(self):
98 # The most recent publication is always returned, even if its pending.
99 ds_diff = self.factory.makeDistroSeriesDifference(
100 source_package_name_str="foonew")
101 pending_pub = self.factory.makeSourcePackagePublishingHistory(
102 sourcepackagename=ds_diff.source_package_name,
103 distroseries=ds_diff.derived_series.parent_series,
104 status=PackagePublishingStatus.PENDING)
105
106 self.assertEqual(pending_pub, ds_diff.parent_source_pub)
107
108
109def test_suite():
110 return unittest.TestLoader().loadTestsFromName(__name__)
0111
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-08-30 16:32:53 +0000
+++ lib/lp/testing/factory.py 2010-08-31 07:47:46 +0000
@@ -154,12 +154,16 @@
154 IHWSubmissionDeviceSet,154 IHWSubmissionDeviceSet,
155 IHWSubmissionSet,155 IHWSubmissionSet,
156 )156 )
157from lp.registry.enum import DistroSeriesDifferenceType
157from lp.registry.interfaces.distribution import IDistributionSet158from lp.registry.interfaces.distribution import IDistributionSet
158from lp.registry.interfaces.distributionmirror import (159from lp.registry.interfaces.distributionmirror import (
159 MirrorContent,160 MirrorContent,
160 MirrorSpeed,161 MirrorSpeed,
161 )162 )
162from lp.registry.interfaces.distroseries import IDistroSeries163from lp.registry.interfaces.distroseries import IDistroSeries
164from lp.registry.interfaces.distroseriesdifference import (
165 IDistroSeriesDifferenceSource,
166 )
163from lp.registry.interfaces.gpg import (167from lp.registry.interfaces.gpg import (
164 GPGKeyAlgorithm,168 GPGKeyAlgorithm,
165 IGPGKeySet,169 IGPGKeySet,
@@ -1817,6 +1821,44 @@
1817 # Most people think of distro releases as distro series.1821 # Most people think of distro releases as distro series.
1818 makeDistroSeries = makeDistroRelease1822 makeDistroSeries = makeDistroRelease
18191823
1824 def makeDistroSeriesDifference(
1825 self, derived_series=None, source_package_name_str=None,
1826 versions=None,
1827 difference_type=DistroSeriesDifferenceType.DIFFERENT_VERSIONS):
1828 """Create a new distro series source package difference."""
1829 if derived_series is None:
1830 parent_series = self.makeDistroSeries()
1831 derived_series = self.makeDistroSeries(
1832 parent_series=parent_series)
1833
1834 if source_package_name_str is None:
1835 source_package_name_str = self.getUniqueString('src-name')
1836
1837 source_package_name = self.getOrMakeSourcePackageName(
1838 source_package_name_str)
1839
1840 if versions is None:
1841 versions = {}
1842
1843 if difference_type is not (
1844 DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES):
1845
1846 source_pub = self.makeSourcePackagePublishingHistory(
1847 distroseries=derived_series,
1848 version=versions.get('derived'),
1849 sourcepackagename=source_package_name)
1850
1851 if difference_type is not (
1852 DistroSeriesDifferenceType.UNIQUE_TO_DERIVED_SERIES):
1853
1854 source_pub = self.makeSourcePackagePublishingHistory(
1855 distroseries=derived_series.parent_series,
1856 version=versions.get('parent'),
1857 sourcepackagename=source_package_name)
1858
1859 return getUtility(IDistroSeriesDifferenceSource).new(
1860 derived_series, source_package_name, difference_type)
1861
1820 def makeDistroArchSeries(self, distroseries=None,1862 def makeDistroArchSeries(self, distroseries=None,
1821 architecturetag=None, processorfamily=None,1863 architecturetag=None, processorfamily=None,
1822 official=True, owner=None,1864 official=True, owner=None,

Subscribers

People subscribed via source and target branches

to status/vote changes: