~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/soyuz/model/archive.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-05-06 00:44:24 UTC
  • mfrom: (12981.1.7 change-perm-sync2)
  • Revision ID: launchpad@pqm.canonical.com-20110506004424-fbb56unie8rqkmnp
[r=jcsackett][bug=773261] Fix the permission check used to sync
        packages (It previously used lp.edit on the series and now
        checks upload permissions for every synced package).

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
    Desc,
29
29
    Or,
30
30
    Select,
 
31
    SQL,
31
32
    Sum,
32
 
    SQL,
33
33
    )
34
34
from storm.locals import (
35
35
    Count,
1001
1001
        permission_set = getUtility(IArchivePermissionSet)
1002
1002
        return permission_set.componentsForQueueAdmin(self, person)
1003
1003
 
 
1004
    def hasAnyPermission(self, person):
 
1005
        """See `IArchive`."""
 
1006
        # Avoiding circular imports.
 
1007
        from lp.soyuz.model.archivepermission import ArchivePermission
 
1008
 
 
1009
        any_perm_on_archive = Store.of(self).find(
 
1010
            TeamParticipation,
 
1011
            ArchivePermission.archive == self.id,
 
1012
            TeamParticipation.person == person.id,
 
1013
            TeamParticipation.teamID == ArchivePermission.personID,
 
1014
            )
 
1015
        return not any_perm_on_archive.is_empty()
 
1016
 
1004
1017
    def getBuildCounters(self, include_needsbuild=True):
1005
1018
        """See `IArchiveSet`."""
1006
1019
 
1176
1189
            strict_component)
1177
1190
 
1178
1191
    def verifyUpload(self, person, sourcepackagename, component,
1179
 
                      distroseries, strict_component=True):
 
1192
                     distroseries, strict_component=True):
1180
1193
        """See `IArchive`."""
1181
1194
        if not self.enabled:
1182
1195
            return ArchiveDisabled(self.displayname)
1435
1448
            reason)
1436
1449
 
1437
1450
    def syncSources(self, source_names, from_archive, to_pocket,
1438
 
                    to_series=None, include_binaries=False):
 
1451
                    to_series=None, include_binaries=False, person=None):
1439
1452
        """See `IArchive`."""
1440
1453
        # Find and validate the source package names in source_names.
1441
1454
        sources = self._collectLatestPublishedSources(
1442
1455
            from_archive, source_names)
1443
 
        self._copySources(sources, to_pocket, to_series, include_binaries)
 
1456
        self._copySources(
 
1457
            sources, to_pocket, to_series, include_binaries,
 
1458
            person=person)
1444
1459
 
1445
1460
    def syncSource(self, source_name, version, from_archive, to_pocket,
1446
 
                   to_series=None, include_binaries=False):
 
1461
                   to_series=None, include_binaries=False, person=None):
1447
1462
        """See `IArchive`."""
1448
1463
        # Check to see if the source package exists, and raise a useful error
1449
1464
        # if it doesn't.
1452
1467
        source = from_archive.getPublishedSources(
1453
1468
            name=source_name, version=version, exact_match=True).first()
1454
1469
 
1455
 
        self._copySources([source], to_pocket, to_series, include_binaries)
 
1470
        self._copySources(
 
1471
            [source], to_pocket, to_series, include_binaries,
 
1472
            person=person)
1456
1473
 
1457
1474
    def _collectLatestPublishedSources(self, from_archive, source_names):
1458
1475
        """Private helper to collect the latest published sources for an
1478
1495
        return sources
1479
1496
 
1480
1497
    def _copySources(self, sources, to_pocket, to_series=None,
1481
 
                     include_binaries=False):
 
1498
                     include_binaries=False, person=None):
1482
1499
        """Private helper function to copy sources to this archive.
1483
1500
 
1484
1501
        It takes a list of SourcePackagePublishingHistory but the other args
1507
1524
            series = None
1508
1525
 
1509
1526
        # Perform the copy, may raise CannotCopy.
1510
 
        do_copy(sources, self, series, pocket, include_binaries)
 
1527
        do_copy(
 
1528
            sources, self, series, pocket, include_binaries, person=person)
1511
1529
 
1512
1530
    def getAuthToken(self, person):
1513
1531
        """See `IArchive`."""