launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #01559
[Merge] lp:~allenap/launchpad/check-mappings-and-sets-for-proxy into lp:launchpad/devel
Gavin Panella has proposed merging lp:~allenap/launchpad/check-mappings-and-sets-for-proxy into lp:launchpad/devel.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
This makes is_security_proxied_or_harmless() check set, frozenset and mapping types for proxied objects. Previously objects of these types would be considered okay.
I have also removed a superfluous makePackageDiff() method in the object factory. There are two methods with than name in a single class, so I removed the earlier one because it is obviously unused.
--
https://code.launchpad.net/~allenap/launchpad/check-mappings-and-sets-for-proxy/+merge/38539
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~allenap/launchpad/check-mappings-and-sets-for-proxy into lp:launchpad/devel.
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-10-14 12:57:25 +0000
+++ lib/lp/testing/factory.py 2010-10-15 13:56:49 +0000
@@ -33,7 +33,10 @@
make_msgid,
)
from itertools import count
-from operator import isSequenceType
+from operator import (
+ isMappingType,
+ isSequenceType,
+ )
import os
from random import randint
from StringIO import StringIO
@@ -237,17 +240,13 @@
from lp.soyuz.interfaces.component import IComponentSet
from lp.soyuz.interfaces.packageset import IPackagesetSet
from lp.soyuz.interfaces.processor import IProcessorFamilySet
-from lp.soyuz.interfaces.publishing import (
- IPublishingSet,
- )
+from lp.soyuz.interfaces.publishing import IPublishingSet
from lp.soyuz.interfaces.section import ISectionSet
from lp.soyuz.model.files import (
BinaryPackageFile,
SourcePackageReleaseFile,
)
-from lp.soyuz.model.packagediff import (
- PackageDiff,
- )
+from lp.soyuz.model.packagediff import PackageDiff
from lp.soyuz.model.processor import ProcessorFamilySet
from lp.testing import (
ANONYMOUS,
@@ -1844,22 +1843,6 @@
expires=expires, restricted=restricted)
return library_file_alias
- def makePackageDiff(self, from_spr=None, to_spr=None):
- """Make a completed package diff."""
- if from_spr is None:
- from_spr = self.makeSourcePackageRelease()
- if to_spr is None:
- to_spr = self.makeSourcePackageRelease()
-
- diff = from_spr.requestDiffTo(
- from_spr.creator, to_spr)
-
- naked_diff = removeSecurityProxy(diff)
- naked_diff.status = PackageDiffStatus.COMPLETED
- naked_diff.diff_content = self.makeLibraryFileAlias()
- naked_diff.date_fulfilled = UTC_NOW
- return diff
-
def makeDistribution(self, name=None, displayname=None, owner=None,
members=None, title=None, aliases=None):
"""Make a new distribution."""
@@ -3180,9 +3163,17 @@
# Some factory methods return simple Python types. We don't add
# security wrappers for them, as well as for objects created by
# other Python libraries.
-unwrapped_types = (
- BaseRecipeBranch, DSCFile, InstanceType, MergeDirective2, Message,
- datetime, int, str, unicode)
+unwrapped_types = frozenset((
+ BaseRecipeBranch,
+ DSCFile,
+ InstanceType,
+ MergeDirective2,
+ Message,
+ datetime,
+ int,
+ str,
+ unicode,
+ ))
def is_security_proxied_or_harmless(obj):
@@ -3193,11 +3184,15 @@
return True
if type(obj) in unwrapped_types:
return True
- if isSequenceType(obj):
- for element in obj:
- if not is_security_proxied_or_harmless(element):
- return False
- return True
+ if isSequenceType(obj) or isinstance(obj, (set, frozenset)):
+ return all(
+ is_security_proxied_or_harmless(element)
+ for element in obj)
+ if isMappingType(obj):
+ return all(
+ (is_security_proxied_or_harmless(key) and
+ is_security_proxied_or_harmless(obj[key]))
+ for key in obj)
return False
=== modified file 'lib/lp/testing/tests/test_factory.py'
--- lib/lp/testing/tests/test_factory.py 2010-09-21 18:43:27 +0000
+++ lib/lp/testing/tests/test_factory.py 2010-10-15 13:56:49 +0000
@@ -27,8 +27,6 @@
from lp.registry.interfaces.sourcepackage import SourcePackageFileType
from lp.registry.interfaces.suitesourcepackage import ISuiteSourcePackage
from lp.services.worlddata.interfaces.language import ILanguage
-from lp.soyuz.interfaces.binarypackagebuild import IBinaryPackageBuild
-from lp.soyuz.interfaces.binarypackagename import IBinaryPackageName
from lp.soyuz.enums import (
BinaryPackageFileType,
BinaryPackageFormat,
@@ -36,9 +34,9 @@
PackagePublishingStatus,
PackageUploadStatus,
)
-from lp.soyuz.interfaces.binarypackagerelease import (
- IBinaryPackageRelease,
- )
+from lp.soyuz.interfaces.binarypackagebuild import IBinaryPackageBuild
+from lp.soyuz.interfaces.binarypackagename import IBinaryPackageName
+from lp.soyuz.interfaces.binarypackagerelease import IBinaryPackageRelease
from lp.soyuz.interfaces.files import (
IBinaryPackageFile,
ISourcePackageReleaseFile,
@@ -48,9 +46,7 @@
ISourcePackagePublishingHistory,
PackagePublishingPocket,
)
-from lp.soyuz.interfaces.queue import (
- IPackageUpload,
- )
+from lp.soyuz.interfaces.queue import IPackageUpload
from lp.soyuz.interfaces.sourcepackagerelease import ISourcePackageRelease
from lp.testing import TestCaseWithFactory
from lp.testing.factory import is_security_proxied_or_harmless
@@ -643,20 +639,50 @@
self.assertFalse(is_security_proxied_or_harmless(unproxied_person))
def test_is_security_proxied_or_harmless__sequence_harmless_content(self):
- # is_security_proxied_or_harmless() checks all elements
- # of a sequence. If all elements are harmless, so is the
- # sequence.
+ # is_security_proxied_or_harmless() checks all elements of a sequence
+ # (including set and frozenset). If all elements are harmless, so is
+ # the sequence.
proxied_person = self.factory.makePerson()
self.assertTrue(
is_security_proxied_or_harmless([1, '2', proxied_person]))
+ self.assertTrue(
+ is_security_proxied_or_harmless(
+ set([1, '2', proxied_person])))
+ self.assertTrue(
+ is_security_proxied_or_harmless(
+ frozenset([1, '2', proxied_person])))
def test_is_security_proxied_or_harmless__sequence_harmful_content(self):
- # is_security_proxied_or_harmless() checks all elements
- # of a sequence. If at least one element is harmful, so is the
- # sequence.
+ # is_security_proxied_or_harmless() checks all elements of a sequence
+ # (including set and frozenset). If at least one element is harmful,
+ # so is the sequence.
unproxied_person = removeSecurityProxy(self.factory.makePerson())
self.assertFalse(
is_security_proxied_or_harmless([1, '2', unproxied_person]))
+ self.assertFalse(
+ is_security_proxied_or_harmless(
+ set([1, '2', unproxied_person])))
+ self.assertFalse(
+ is_security_proxied_or_harmless(
+ frozenset([1, '2', unproxied_person])))
+
+ def test_is_security_proxied_or_harmless__mapping_harmless_content(self):
+ # is_security_proxied_or_harmless() checks all keys and values in a
+ # mapping. If all elements are harmless, so is the mapping.
+ proxied_person = self.factory.makePerson()
+ self.assertTrue(
+ is_security_proxied_or_harmless({1: proxied_person}))
+ self.assertTrue(
+ is_security_proxied_or_harmless({proxied_person: 1}))
+
+ def test_is_security_proxied_or_harmless__mapping_harmful_content(self):
+ # is_security_proxied_or_harmless() checks all keys and values in a
+ # mapping. If at least one element is harmful, so is the mapping.
+ unproxied_person = removeSecurityProxy(self.factory.makePerson())
+ self.assertFalse(
+ is_security_proxied_or_harmless({1: unproxied_person}))
+ self.assertFalse(
+ is_security_proxied_or_harmless({unproxied_person: 1}))
def test_suite():