← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~cjwatson/launchpad:schema-explicit-versions-soyuz into launchpad:master

 

Colin Watson has proposed merging ~cjwatson/launchpad:schema-explicit-versions-soyuz into launchpad:master.

Commit message:
Set explicit webservice versions for lp.soyuz

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad/+git/launchpad/+merge/425577

Similar to https://code.launchpad.net/~cjwatson/launchpad/+git/launchpad/+merge/423611.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~cjwatson/launchpad:schema-explicit-versions-soyuz into launchpad:master.
diff --git a/lib/lp/_schema_circular_imports.py b/lib/lp/_schema_circular_imports.py
index 53731e5..c621fef 100644
--- a/lib/lp/_schema_circular_imports.py
+++ b/lib/lp/_schema_circular_imports.py
@@ -141,9 +141,6 @@ from lp.soyuz.interfaces.archivedependency import IArchiveDependency
 from lp.soyuz.interfaces.archivepermission import IArchivePermission
 from lp.soyuz.interfaces.archivesubscriber import IArchiveSubscriber
 from lp.soyuz.interfaces.binarypackagebuild import IBinaryPackageBuild
-from lp.soyuz.interfaces.binarypackagerelease import (
-    IBinaryPackageReleaseDownloadCount,
-    )
 from lp.soyuz.interfaces.buildrecords import IHasBuildRecords
 from lp.soyuz.interfaces.distroarchseries import IDistroArchSeries
 from lp.soyuz.interfaces.distroarchseriesfilter import IDistroArchSeriesFilter
@@ -152,10 +149,7 @@ from lp.soyuz.interfaces.livefsbuild import (
     ILiveFSBuild,
     ILiveFSFile,
     )
-from lp.soyuz.interfaces.packageset import (
-    IPackageset,
-    IPackagesetSet,
-    )
+from lp.soyuz.interfaces.packageset import IPackageset
 from lp.soyuz.interfaces.publishing import (
     IBinaryPackagePublishingHistory,
     IBinaryPackagePublishingHistoryEdit,
@@ -690,42 +684,6 @@ patch_reference_property(IAccessToken, 'git_repository', IGitRepository)
 #
 ###
 
-# IArchive
-patch_entry_explicit_version(IArchive, 'beta')
-patch_operations_explicit_version(
-    IArchive, 'beta', "_checkUpload", "deleteComponentUploader",
-    "deletePackageUploader", "deletePackagesetUploader", "deleteQueueAdmin",
-    "getAllPublishedBinaries", "getArchiveDependency", "getBuildCounters",
-    "getBuildSummariesForSourceIds", "getComponentsForQueueAdmin",
-    "getPackagesetsForSource", "getPackagesetsForSourceUploader",
-    "getPackagesetsForUploader", "getPermissionsForPerson",
-    "api_getPublishedSources", "getQueueAdminsForComponent",
-    "getUploadersForComponent", "getUploadersForPackage",
-    "getUploadersForPackageset", "isSourceUploadAllowed",
-    "newComponentUploader", "newPackageUploader", "newPackagesetUploader",
-    "newQueueAdmin", "newSubscription", "syncSource", "syncSources")
-
-# IArchiveDependency
-patch_entry_explicit_version(IArchiveDependency, 'beta')
-
-# IArchivePermission
-patch_entry_explicit_version(IArchivePermission, 'beta')
-
-# IArchiveSubscriber
-patch_entry_explicit_version(IArchiveSubscriber, 'beta')
-
-# IBinaryPackageBuild
-patch_entry_explicit_version(IBinaryPackageBuild, 'beta')
-
-# IBinaryPackagePublishingHistory
-patch_entry_explicit_version(IBinaryPackagePublishingHistory, 'beta')
-patch_operations_explicit_version(
-    IBinaryPackagePublishingHistory, 'beta', "getDailyDownloadTotals",
-    "getDownloadCount", "getDownloadCounts")
-
-# IBinaryPackageReleaseDownloadCount
-patch_entry_explicit_version(IBinaryPackageReleaseDownloadCount, 'beta')
-
 # IBranch
 patch_entry_explicit_version(IBranch, 'beta')
 
@@ -768,9 +726,6 @@ patch_entry_explicit_version(ICountry, 'beta')
 patch_operations_explicit_version(
     ICountrySet, 'beta', "getByCode", "getByName")
 
-# IDistroArchSeries
-patch_entry_explicit_version(IDistroArchSeries, 'beta')
-
 # IHasTranslationImports
 patch_entry_explicit_version(IHasTranslationImports, 'beta')
 
@@ -789,30 +744,9 @@ patch_entry_explicit_version(IPOFile, 'beta')
 # IPOTemplate
 patch_entry_explicit_version(IPOTemplate, 'beta')
 
-# IPackageUpload
-patch_entry_explicit_version(IPackageUpload, 'beta')
-
-# IPackageset
-patch_entry_explicit_version(IPackageset, 'beta')
-patch_operations_explicit_version(
-    IPackageset, 'beta', "addSources", "addSubsets", "getSourcesIncluded",
-    "getSourcesNotSharedBy", "getSourcesSharedBy", "relatedSets",
-    "removeSources", "removeSubsets", "setsIncluded", "setsIncludedBy")
-
-# IPackagesetSet
-patch_operations_explicit_version(
-    IPackagesetSet, 'beta', "getByName", "new", "setsIncludingSource")
-
 # IPreviewDiff
 patch_entry_explicit_version(IPreviewDiff, 'beta')
 
-# ISourcePackagePublishingHistory
-patch_entry_explicit_version(ISourcePackagePublishingHistory, 'beta')
-patch_operations_explicit_version(
-    ISourcePackagePublishingHistory, 'beta', "api_requestDeletion",
-    "binaryFileUrls", "changesFileUrl", "getBuilds", "getPublishedBinaries",
-    "packageDiffUrl", "sourceFileUrls")
-
 # ISourcePackageRecipe
 patch_entry_explicit_version(ISourcePackageRecipe, 'beta')
 patch_operations_explicit_version(
diff --git a/lib/lp/soyuz/interfaces/archive.py b/lib/lp/soyuz/interfaces/archive.py
index fb2ef57..f165970 100644
--- a/lib/lp/soyuz/interfaces/archive.py
+++ b/lib/lp/soyuz/interfaces/archive.py
@@ -532,6 +532,7 @@ class IArchiveSubscriberView(Interface):
     # patch to avoid circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def api_getPublishedSources(name=None, version=None, status=None,
                                 distroseries=None, pocket=None,
                                 exact_match=False, created_since_date=None,
@@ -636,6 +637,7 @@ class IArchiveSubscriberView(Interface):
     @operation_returns_collection_of(Interface)
     @export_operation_as("getPublishedBinaries")
     @export_read_operation()
+    @operation_for_version("beta")
     def getAllPublishedBinaries(name=None, version=None, status=None,
                                 distroarchseries=None, pocket=None,
                                 exact_match=False, created_since_date=None,
@@ -974,6 +976,7 @@ class IArchiveView(IHasBuildRecords):
         )
     @export_operation_as("checkUpload")
     @export_read_operation()
+    @operation_for_version("beta")
     def _checkUpload(person, distroseries, sourcepackagename, component,
             pocket, strict_component=True):
         """Wrapper around checkUpload for the web service API."""
@@ -1118,6 +1121,7 @@ class IArchiveView(IHasBuildRecords):
     # circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getUploadersForPackageset(packageset, direct_permissions=True):
         """The `ArchivePermission` records for uploaders to the package set.
 
@@ -1136,6 +1140,7 @@ class IArchiveView(IHasBuildRecords):
     # circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getPackagesetsForUploader(person):
         """The `ArchivePermission` records for the person's package sets.
 
@@ -1176,6 +1181,7 @@ class IArchiveView(IHasBuildRecords):
     # circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getPackagesetsForSourceUploader(sourcepackagename, person):
         """The package set based permissions for a given source and uploader.
 
@@ -1206,6 +1212,7 @@ class IArchiveView(IHasBuildRecords):
     # circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getPackagesetsForSource(
         sourcepackagename, direct_permissions=True):
         """All package set based permissions for the given source.
@@ -1234,6 +1241,7 @@ class IArchiveView(IHasBuildRecords):
         distroseries=Reference(
             IDistroSeries, title=_("The distro series"), required=False))
     @export_read_operation()
+    @operation_for_version("beta")
     def isSourceUploadAllowed(sourcepackagename, person, distroseries=None):
         """True if the person is allowed to upload the given source package.
 
@@ -1285,6 +1293,7 @@ class IArchiveView(IHasBuildRecords):
         include_needsbuild=Bool(
             title=_("Include builds with state NEEDSBUILD"), required=False))
     @export_read_operation()
+    @operation_for_version("beta")
     def getBuildCounters(include_needsbuild=True):
         """Return a dictionary containing the build counters for an archive.
 
@@ -1314,6 +1323,7 @@ class IArchiveView(IHasBuildRecords):
             title=_("A list of source publishing history record ids."),
             value_type=Int()))
     @export_read_operation()
+    @operation_for_version("beta")
     def getBuildSummariesForSourceIds(source_ids):
         """Return a dictionary containing a summary of the build statuses.
 
@@ -1332,6 +1342,7 @@ class IArchiveView(IHasBuildRecords):
         dependency=Reference(schema=Interface))  # Really IArchive. See below.
     @operation_returns_entry(schema=Interface)  # Really IArchiveDependency.
     @export_read_operation()
+    @operation_for_version("beta")
     def getArchiveDependency(dependency):
         """Return the `IArchiveDependency` object for the given dependency.
 
@@ -1355,6 +1366,7 @@ class IArchiveView(IHasBuildRecords):
     # Really IArchivePermission, set below to avoid circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getPermissionsForPerson(person):
         """Return the `IArchivePermission` records applicable to the person.
 
@@ -1368,6 +1380,7 @@ class IArchiveView(IHasBuildRecords):
     # Really IArchivePermission, set below to avoid circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getUploadersForPackage(source_package_name):
         """Return `IArchivePermission` records for the package's uploaders.
 
@@ -1381,6 +1394,7 @@ class IArchiveView(IHasBuildRecords):
     # Really IArchivePermission, set below to avoid circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getUploadersForComponent(component_name=None):
         """Return `IArchivePermission` records for the component's uploaders.
 
@@ -1394,6 +1408,7 @@ class IArchiveView(IHasBuildRecords):
     # Really IArchivePermission, set below to avoid circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getQueueAdminsForComponent(component_name):
         """Return `IArchivePermission` records for authorized queue admins.
 
@@ -1406,6 +1421,7 @@ class IArchiveView(IHasBuildRecords):
     # Really IArchivePermission, set below to avoid circular import.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getComponentsForQueueAdmin(person):
         """Return `IArchivePermission` for the person's queue admin
         components.
@@ -1711,6 +1727,7 @@ class IArchiveAppend(Interface):
                           " this source"),
             required=False))
     @export_write_operation()
+    @operation_for_version("beta")
     # Source_names is a string because exporting a SourcePackageName is
     # rather nonsensical as it only has id and name columns.
     def syncSources(source_names, from_archive, to_pocket, to_series=None,
@@ -1766,6 +1783,7 @@ class IArchiveAppend(Interface):
                           " this source"),
             required=False))
     @export_write_operation()
+    @operation_for_version("beta")
     # XXX Julian 2008-11-05
     # This method takes source_name and version as strings because
     # SourcePackageRelease is not exported on the API yet.  When it is,
@@ -1819,6 +1837,7 @@ class IArchiveAppend(Interface):
             description=_("Free text describing this subscription.")))
     # Really IArchiveSubscriber, set below to avoid circular import.
     @export_factory_operation(Interface, [])
+    @operation_for_version("beta")
     def newSubscription(subscriber, registrant, date_expires=None,
                         description=None):
         """Create a new subscribtion to this archive.
@@ -1883,6 +1902,7 @@ class IArchiveEdit(Interface):
             title=_("Source Package Name"), required=True))
     # Really IArchivePermission, set below to avoid circular import.
     @export_factory_operation(Interface, [])
+    @operation_for_version("beta")
     def newPackageUploader(person, source_package_name):
         """Add permisson for a person to upload a package to this archive.
 
@@ -1899,6 +1919,7 @@ class IArchiveEdit(Interface):
             title=_("Component Name"), required=True))
     # Really IArchivePermission, set below to avoid circular import.
     @export_factory_operation(Interface, [])
+    @operation_for_version("beta")
     def newComponentUploader(person, component_name):
         """Add permission for a person to upload to a component.
 
@@ -1939,6 +1960,7 @@ class IArchiveEdit(Interface):
             title=_("Component Name"), required=True))
     # Really IArchivePermission, set below to avoid circular import.
     @export_factory_operation(Interface, [])
+    @operation_for_version("beta")
     def newQueueAdmin(person, component_name):
         """Add permission for a person to administer a distroseries queue.
 
@@ -1987,6 +2009,7 @@ class IArchiveEdit(Interface):
     # Really IArchivePermission, set in _schema_circular_imports to avoid
     # circular import.
     @export_factory_operation(Interface, [])
+    @operation_for_version("beta")
     def newPackagesetUploader(person, packageset, explicit=False):
         """Add a package set based permission for a person.
 
@@ -2004,6 +2027,7 @@ class IArchiveEdit(Interface):
         source_package_name=TextLine(
             title=_("Source Package Name"), required=True))
     @export_write_operation()
+    @operation_for_version("beta")
     def deletePackageUploader(person, source_package_name):
         """Revoke permission for the person to upload the package.
 
@@ -2017,6 +2041,7 @@ class IArchiveEdit(Interface):
         component_name=TextLine(
             title=_("Component Name"), required=True))
     @export_write_operation()
+    @operation_for_version("beta")
     def deleteComponentUploader(person, component_name):
         """Revoke permission for the person to upload to the component.
 
@@ -2046,6 +2071,7 @@ class IArchiveEdit(Interface):
         component_name=TextLine(
             title=_("Component Name"), required=True))
     @export_write_operation()
+    @operation_for_version("beta")
     def deleteQueueAdmin(person, component_name):
         """Revoke permission for the person to administer distroseries queues.
 
@@ -2087,6 +2113,7 @@ class IArchiveEdit(Interface):
         explicit=Bool(
             title=_("Explicit"), required=False))
     @export_write_operation()
+    @operation_for_version("beta")
     def deletePackagesetUploader(person, packageset, explicit=False):
         """Revoke upload permissions for a person.
 
@@ -2309,7 +2336,7 @@ class IArchiveRestricted(Interface):
             "with a higher score will build sooner.")))
 
 
-@exported_as_webservice_entry()
+@exported_as_webservice_entry(as_of="beta")
 class IArchive(IArchivePublic, IArchiveAppend, IArchiveEdit, IArchiveDelete,
                IArchiveSubscriberView, IArchiveView, IArchiveAdmin,
                IArchiveRestricted):
diff --git a/lib/lp/soyuz/interfaces/archivedependency.py b/lib/lp/soyuz/interfaces/archivedependency.py
index f61b20b..a6653cc 100644
--- a/lib/lp/soyuz/interfaces/archivedependency.py
+++ b/lib/lp/soyuz/interfaces/archivedependency.py
@@ -28,7 +28,7 @@ from lp.registry.interfaces.pocket import PackagePublishingPocket
 from lp.soyuz.interfaces.archive import IArchive
 
 
-@exported_as_webservice_entry(publish_web_link=False)
+@exported_as_webservice_entry(as_of="beta", publish_web_link=False)
 class IArchiveDependency(Interface):
     """ArchiveDependency interface."""
 
diff --git a/lib/lp/soyuz/interfaces/archivepermission.py b/lib/lp/soyuz/interfaces/archivepermission.py
index 09a06fc..801f751 100644
--- a/lib/lp/soyuz/interfaces/archivepermission.py
+++ b/lib/lp/soyuz/interfaces/archivepermission.py
@@ -37,7 +37,7 @@ from lp.soyuz.interfaces.component import IComponent
 from lp.soyuz.interfaces.packageset import IPackageset
 
 
-@exported_as_webservice_entry(publish_web_link=False)
+@exported_as_webservice_entry(as_of="beta", publish_web_link=False)
 class IArchivePermission(Interface):
     """The interface for `ArchivePermission`."""
 
diff --git a/lib/lp/soyuz/interfaces/archivesubscriber.py b/lib/lp/soyuz/interfaces/archivesubscriber.py
index 555f873..3da8a6b 100644
--- a/lib/lp/soyuz/interfaces/archivesubscriber.py
+++ b/lib/lp/soyuz/interfaces/archivesubscriber.py
@@ -120,7 +120,7 @@ class IArchiveSubscriberEdit(Interface):
         """
 
 
-@exported_as_webservice_entry()
+@exported_as_webservice_entry(as_of="beta")
 class IArchiveSubscriber(IArchiveSubscriberView, IArchiveSubscriberEdit):
     """An interface for archive subscribers."""
 
diff --git a/lib/lp/soyuz/interfaces/binarypackagebuild.py b/lib/lp/soyuz/interfaces/binarypackagebuild.py
index edc245f..d92ac4b 100644
--- a/lib/lp/soyuz/interfaces/binarypackagebuild.py
+++ b/lib/lp/soyuz/interfaces/binarypackagebuild.py
@@ -274,7 +274,8 @@ class IBinaryPackageBuildAdmin(IBuildFarmJobAdmin):
         """Change the build's score."""
 
 
-@exported_as_webservice_entry(singular_name='build', plural_name='builds')
+@exported_as_webservice_entry(
+    singular_name="build", plural_name="builds", as_of="beta")
 class IBinaryPackageBuild(
     IBinaryPackageBuildView, IBinaryPackageBuildEdit,
     IBinaryPackageBuildRestricted, IBinaryPackageBuildAdmin,
diff --git a/lib/lp/soyuz/interfaces/binarypackagerelease.py b/lib/lp/soyuz/interfaces/binarypackagerelease.py
index bffca64..2019b88 100644
--- a/lib/lp/soyuz/interfaces/binarypackagerelease.py
+++ b/lib/lp/soyuz/interfaces/binarypackagerelease.py
@@ -121,7 +121,7 @@ class IBinaryPackageRelease(Interface):
         """
 
 
-@exported_as_webservice_entry()
+@exported_as_webservice_entry(as_of="beta")
 class IBinaryPackageReleaseDownloadCount(Interface):
     """Daily download count of a binary package release in an archive."""
 
diff --git a/lib/lp/soyuz/interfaces/distroarchseries.py b/lib/lp/soyuz/interfaces/distroarchseries.py
index 0d0ffc4..1c3d0f6 100644
--- a/lib/lp/soyuz/interfaces/distroarchseries.py
+++ b/lib/lp/soyuz/interfaces/distroarchseries.py
@@ -347,7 +347,7 @@ class IDistroArchSeriesModerate(Interface):
         """
 
 
-@exported_as_webservice_entry()
+@exported_as_webservice_entry(as_of="beta")
 class IDistroArchSeries(IDistroArchSeriesPublic, IDistroArchSeriesModerate):
     """An architecture for a distroseries."""
 
diff --git a/lib/lp/soyuz/interfaces/packageset.py b/lib/lp/soyuz/interfaces/packageset.py
index c1254cf..61ec541 100644
--- a/lib/lp/soyuz/interfaces/packageset.py
+++ b/lib/lp/soyuz/interfaces/packageset.py
@@ -57,7 +57,6 @@ class DuplicatePackagesetName(Exception):
     """Raised for packagesets with the same name and distroseries."""
 
 
-@exported_as_webservice_entry(publish_web_link=False)
 class IPackagesetViewOnly(IHasOwner):
     """A read-only interface for package sets."""
 
@@ -108,6 +107,7 @@ class IPackagesetViewOnly(IHasOwner):
         direct_inclusion=Bool(required=False))
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def setsIncludedBy(direct_inclusion=False):
         """Get all package sets that include this one.
 
@@ -122,6 +122,7 @@ class IPackagesetViewOnly(IHasOwner):
         direct_inclusion=Bool(required=False))
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def setsIncluded(direct_inclusion=False):
         """Get all package sets that are included by this one.
 
@@ -162,6 +163,7 @@ class IPackagesetViewOnly(IHasOwner):
     @operation_parameters(
         direct_inclusion=Bool(required=False))
     @export_read_operation()
+    @operation_for_version("beta")
     def getSourcesIncluded(direct_inclusion=False):
         """Get all source names associated with this package set.
 
@@ -196,6 +198,7 @@ class IPackagesetViewOnly(IHasOwner):
             title=_('The package set we are comparing to.'), required=True),
         direct_inclusion=Bool(required=False))
     @export_read_operation()
+    @operation_for_version("beta")
     def getSourcesSharedBy(other_package_set, direct_inclusion=False):
         """Get source package names also included by another package set.
 
@@ -220,6 +223,7 @@ class IPackagesetViewOnly(IHasOwner):
             title=_('The package set we are comparing to.'), required=True),
         direct_inclusion=Bool(required=False))
     @export_read_operation()
+    @operation_for_version("beta")
     def getSourcesNotSharedBy(other_package_set, direct_inclusion=False):
         """Get source package names not included by another package set.
 
@@ -240,6 +244,7 @@ class IPackagesetViewOnly(IHasOwner):
 
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def relatedSets():
         """Get all other package sets in this set's `PackagesetGroup`.
 
@@ -250,7 +255,6 @@ class IPackagesetViewOnly(IHasOwner):
         """
 
 
-@exported_as_webservice_entry(publish_web_link=False)
 class IPackagesetEdit(Interface):
     """A writeable interface for package sets."""
 
@@ -281,6 +285,7 @@ class IPackagesetEdit(Interface):
         names=List(
         title=_("A list of source package names."), value_type=TextLine()))
     @export_write_operation()
+    @operation_for_version("beta")
     def addSources(names):
         """Add the named source packages to this package set.
 
@@ -303,6 +308,7 @@ class IPackagesetEdit(Interface):
         names=List(
         title=_("A list of source package names."), value_type=TextLine()))
     @export_write_operation()
+    @operation_for_version("beta")
     def removeSources(names):
         """Remove the named source packages from this package set.
 
@@ -320,6 +326,7 @@ class IPackagesetEdit(Interface):
         names=List(
         title=_("A list of package set names."), value_type=TextLine()))
     @export_write_operation()
+    @operation_for_version("beta")
     def addSubsets(names):
         """Add the named package sets as subsets to this package set.
 
@@ -341,6 +348,7 @@ class IPackagesetEdit(Interface):
         names=List(
         title=_("A list of package set names."), value_type=TextLine()))
     @export_write_operation()
+    @operation_for_version("beta")
     def removeSubsets(names):
         """Remove the named package subsets from this package set.
 
@@ -360,7 +368,6 @@ class IPackagesetEdit(Interface):
         """Delete the package set."""
 
 
-@exported_as_webservice_entry(publish_web_link=False)
 class IPackagesetRestricted(Interface):
     """A writeable interface for restricted attributes of package sets."""
 
@@ -369,7 +376,7 @@ class IPackagesetRestricted(Interface):
         description=_("Build score bonus for packages in this package set.")))
 
 
-@exported_as_webservice_entry(publish_web_link=False)
+@exported_as_webservice_entry(publish_web_link=False, as_of="beta")
 class IPackageset(IPackagesetViewOnly, IPackagesetEdit, IPackagesetRestricted):
     """An interface for package sets."""
 
@@ -395,6 +402,7 @@ class IPackagesetSetEdit(Interface):
                 "The new package set will share the package set group "
                 "with this one.")))
     @export_factory_operation(IPackageset, [])
+    @operation_for_version("beta")
     def new(name, description, owner, distroseries, related_set=None):
         """Create a new package set.
 
@@ -421,6 +429,7 @@ class IPackagesetSet(IPackagesetSetEdit):
         distroseries=copy_field(IPackageset['distroseries']))
     @operation_returns_entry(IPackageset)
     @export_read_operation()
+    @operation_for_version("beta")
     def getByName(distroseries, name):
         """Return the single package set with the given name (if any).
 
@@ -481,6 +490,7 @@ class IPackagesetSet(IPackagesetSetEdit):
         direct_inclusion=Bool(required=False))
     @operation_returns_collection_of(IPackageset)
     @export_read_operation()
+    @operation_for_version("beta")
     def setsIncludingSource(sourcepackagename, distroseries=None,
                             direct_inclusion=False):
         """Get the package sets that include this source package.
diff --git a/lib/lp/soyuz/interfaces/publishing.py b/lib/lp/soyuz/interfaces/publishing.py
index 3ddd772..be55014 100644
--- a/lib/lp/soyuz/interfaces/publishing.py
+++ b/lib/lp/soyuz/interfaces/publishing.py
@@ -195,6 +195,7 @@ class IPublishingEdit(Interface):
         removal_comment=TextLine(title=_("Removal comment"), required=False))
     @export_operation_as("requestDeletion")
     @export_write_operation()
+    @operation_for_version("beta")
     def api_requestDeletion(removed_by, removal_comment=None):
         """Delete this source and its binaries.
 
@@ -418,6 +419,7 @@ class ISourcePackagePublishingHistoryPublic(IPublishingView):
     # Really IBinaryPackagePublishingHistory, see below.
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getPublishedBinaries():
         """Return all resulted `IBinaryPackagePublishingHistory`.
 
@@ -451,6 +453,7 @@ class ISourcePackagePublishingHistoryPublic(IPublishingView):
     # Really IBuild (fixed in _schema_circular_imports.py)
     @operation_returns_collection_of(Interface)
     @export_read_operation()
+    @operation_for_version("beta")
     def getBuilds():
         """Return a list of `IBuild` objects in this publishing context.
 
@@ -466,6 +469,7 @@ class ISourcePackagePublishingHistoryPublic(IPublishingView):
         """
 
     @export_read_operation()
+    @operation_for_version("beta")
     def changesFileUrl():
         """The .changes file URL for this source publication.
 
@@ -551,6 +555,7 @@ class ISourcePackagePublishingHistoryPublic(IPublishingView):
     @export_read_operation()
     @operation_parameters(
         include_meta=Bool(title=_("Include Metadata"), required=False))
+    @operation_for_version("beta")
     def sourceFileUrls(include_meta=False):
         """URLs for this source publication's uploaded source files.
 
@@ -560,6 +565,7 @@ class ISourcePackagePublishingHistoryPublic(IPublishingView):
         """
 
     @export_read_operation()
+    @operation_for_version("beta")
     def binaryFileUrls():
         """URLs for this source publication's binary files.
 
@@ -569,6 +575,7 @@ class ISourcePackagePublishingHistoryPublic(IPublishingView):
     @export_read_operation()
     @operation_parameters(
         to_version=TextLine(title=_("To Version"), required=True))
+    @operation_for_version("beta")
     def packageDiffUrl(to_version):
         """URL of the debdiff file between this and the supplied version.
 
@@ -600,7 +607,7 @@ class ISourcePackagePublishingHistoryEdit(IPublishingEdit):
         """
 
 
-@exported_as_webservice_entry(publish_web_link=False)
+@exported_as_webservice_entry(as_of="beta", publish_web_link=False)
 class ISourcePackagePublishingHistory(ISourcePackagePublishingHistoryPublic,
                                       ISourcePackagePublishingHistoryEdit):
     """A source package publishing history record."""
@@ -845,6 +852,7 @@ class IBinaryPackagePublishingHistoryPublic(IPublishingView):
         """
 
     @export_read_operation()
+    @operation_for_version("beta")
     def getDownloadCount():
         """Get the download count of this binary package in this archive.
 
@@ -855,6 +863,7 @@ class IBinaryPackagePublishingHistoryPublic(IPublishingView):
         end_date=Date(title=_("End date"), required=False))
     @operation_returns_collection_of(IBinaryPackageReleaseDownloadCount)
     @export_read_operation()
+    @operation_for_version("beta")
     def getDownloadCounts(start_date=None, end_date=None):
         """Get detailed download counts for this binary.
 
@@ -866,6 +875,7 @@ class IBinaryPackagePublishingHistoryPublic(IPublishingView):
         start_date=Date(title=_("Start date"), required=False),
         end_date=Date(title=_("End date"), required=False))
     @export_read_operation()
+    @operation_for_version("beta")
     def getDailyDownloadTotals(start_date=None, end_date=None):
         """Get the daily download counts for this binary.
 
@@ -921,7 +931,7 @@ class IBinaryPackagePublishingHistoryEdit(IPublishingEdit):
         """
 
 
-@exported_as_webservice_entry(publish_web_link=False)
+@exported_as_webservice_entry(as_of="beta", publish_web_link=False)
 class IBinaryPackagePublishingHistory(IBinaryPackagePublishingHistoryPublic,
                                       IBinaryPackagePublishingHistoryEdit):
     """A binary package publishing record."""
diff --git a/lib/lp/soyuz/interfaces/queue.py b/lib/lp/soyuz/interfaces/queue.py
index 89d36a3..6f81095 100644
--- a/lib/lp/soyuz/interfaces/queue.py
+++ b/lib/lp/soyuz/interfaces/queue.py
@@ -153,7 +153,7 @@ class IPackageUploadLog(Interface):
             required=False, readonly=True))
 
 
-@exported_as_webservice_entry(publish_web_link=False)
+@exported_as_webservice_entry(publish_web_link=False, as_of="beta")
 class IPackageUpload(Interface):
     """A Queue item for the archive uploader."""
 
@@ -240,7 +240,7 @@ class IPackageUpload(Interface):
             value_type=TextLine(),
             required=False,
             readonly=True),
-        ("devel", dict(exported=False)), exported=True)
+        ("devel", dict(exported=False)), as_of="beta", exported=True)
 
     copy_source_archive = exported(
         Reference(