def test_security_protect_generate_method(self): self.failIf(hasattr(SecDummy3, "__ac_permissions__")) self.failIf(hasattr(SecDummy3, "makeFoo")) generateMethods(SecDummy3, (foo_field,)) self.failUnless(hasattr(SecDummy3, "__ac_permissions__")) self.failUnless(hasattr(SecDummy3, "makeFoo")) got = SecDummy3.__ac_permissions__ expected = (("Modify portal content", ("makeFoo", "setFoo", "getRawFoo")),) self.assertEquals(got, expected)
def test_security_protect_generate_method(self): self.assertFalse(hasattr(SecDummy3, '__ac_permissions__')) self.assertFalse(hasattr(SecDummy3, 'makeFoo')) generateMethods(SecDummy3, (foo_field,)) self.assertTrue(hasattr(SecDummy3, '__ac_permissions__')) self.assertTrue(hasattr(SecDummy3, 'makeFoo')) got = SecDummy3.__ac_permissions__ expected = (('Modify portal content', ('makeFoo', 'setFoo', 'getRawFoo')),) self.assertEqual(got, expected)
def test_security_dont_stomp_existing_decl_perm(self): self.failIf(hasattr(SecDummy1, "__ac_permissions__")) self.failUnless(hasattr(SecDummy1, "makeFoo")) existing_method = getattr(SecDummy1, "makeFoo") generateMethods(SecDummy1, (foo_field,)) self.failUnless(hasattr(SecDummy1, "__ac_permissions__")) self.failUnless(SecDummy1.makeFoo == existing_method) got = SecDummy1.__ac_permissions__ expected = (("Modify portal content", ("setFoo", "getRawFoo")), ("View", ("makeFoo",))) self.assertEquals(got, expected)
def test_security_protect_generate_method(self): self.assertFalse(hasattr(SecDummy3, '__ac_permissions__')) self.assertFalse(hasattr(SecDummy3, 'makeFoo')) generateMethods(SecDummy3, (foo_field,)) self.assertTrue(hasattr(SecDummy3, '__ac_permissions__')) self.assertTrue(hasattr(SecDummy3, 'makeFoo')) got = SecDummy3.__ac_permissions__ expected = (('Modify portal content', ('makeFoo', 'setFoo', 'getRawFoo')),) self.assertEquals(got, expected)
def makeTypesAutoPublishAware(types): """Adds enableAutopublishing field to types @param types: the classes to patch their schema @type types: list """ for t in types: t.schema.addField(enableAutopublishingField.copy()) t.schema.moveField('enableAutopublishing', after='expirationDate') generateMethods(t, t.schema.fields())
def test_security_protect_manual_method(self): self.assertFalse(hasattr(SecDummy2, '__ac_permissions__')) self.assertTrue(hasattr(SecDummy2, 'makeFoo')) existing_method = getattr(SecDummy2, 'makeFoo') generateMethods(SecDummy2, (foo_field, )) self.assertTrue(hasattr(SecDummy2, '__ac_permissions__')) self.assertTrue(SecDummy2.makeFoo == existing_method) got = SecDummy2.__ac_permissions__ expected = (('Modify portal content', ('makeFoo', 'setFoo', 'getRawFoo')), ) self.assertEquals(got, expected)
def test_security_protect_manual_method(self): self.assertFalse(hasattr(SecDummy2, '__ac_permissions__')) self.assertTrue(hasattr(SecDummy2, 'makeFoo')) existing_method = getattr(SecDummy2, 'makeFoo') generateMethods(SecDummy2, (foo_field,)) self.assertTrue(hasattr(SecDummy2, '__ac_permissions__')) self.assertTrue(SecDummy2.makeFoo == existing_method) got = SecDummy2.__ac_permissions__ expected = (('Modify portal content', ('makeFoo', 'setFoo', 'getRawFoo')),) self.assertEqual(got, expected)
def test_security_dont_stomp_existing_decl_perm(self): self.assertFalse(hasattr(SecDummy1, '__ac_permissions__')) self.assertTrue(hasattr(SecDummy1, 'makeFoo')) existing_method = getattr(SecDummy1, 'makeFoo') generateMethods(SecDummy1, (foo_field,)) self.assertTrue(hasattr(SecDummy1, '__ac_permissions__')) self.assertTrue(SecDummy1.makeFoo == existing_method) got = SecDummy1.__ac_permissions__ expected = (('Modify portal content', ('setFoo', 'getRawFoo')), ('View', ('makeFoo',)),) self.assertEquals(got, expected)
def test_security_dont_stomp_existing_decl_perm(self): self.assertFalse(hasattr(SecDummy1, '__ac_permissions__')) self.assertTrue(hasattr(SecDummy1, 'makeFoo')) existing_method = getattr(SecDummy1, 'makeFoo') generateMethods(SecDummy1, (foo_field,)) self.assertTrue(hasattr(SecDummy1, '__ac_permissions__')) self.assertTrue(SecDummy1.makeFoo == existing_method) got = SecDummy1.__ac_permissions__ expected = (('Modify portal content', ('setFoo', 'getRawFoo')), ('View', ('makeFoo',)),) self.assertEqual(got, expected)
def test_security_dont_stomp_existing_decl_private(self): self.assertFalse(hasattr(SecDummy5, '__ac_permissions__')) self.assertFalse(hasattr(SecDummy5, 'makeFoo__roles__')) self.assertTrue(hasattr(SecDummy5, 'makeFoo')) existing_method = getattr(SecDummy5, 'makeFoo') generateMethods(SecDummy5, (foo_field, )) self.assertTrue(hasattr(SecDummy5, '__ac_permissions__')) self.assertTrue(SecDummy5.makeFoo == existing_method) got = SecDummy5.__ac_permissions__ expected = (('Modify portal content', ('setFoo', 'getRawFoo')), ) self.assertEquals(got, expected) self.assertTrue(hasattr(SecDummy5, 'makeFoo__roles__')) self.assertTrue(SecDummy5.makeFoo__roles__ == ACCESS_PRIVATE)
def test_security_dont_stomp_existing_decl_private(self): self.failIf(hasattr(SecDummy5, "__ac_permissions__")) self.failIf(hasattr(SecDummy5, "makeFoo__roles__")) self.failUnless(hasattr(SecDummy5, "makeFoo")) existing_method = getattr(SecDummy5, "makeFoo") generateMethods(SecDummy5, (foo_field,)) self.failUnless(hasattr(SecDummy5, "__ac_permissions__")) self.failUnless(SecDummy5.makeFoo == existing_method) got = SecDummy5.__ac_permissions__ expected = (("Modify portal content", ("setFoo", "getRawFoo")),) self.assertEquals(got, expected) self.failUnless(hasattr(SecDummy5, "makeFoo__roles__")) self.failUnless(SecDummy5.makeFoo__roles__ == ACCESS_PRIVATE)
def __get__(self, obj, objtype=None): pm = getToolByName(obj.context, 'portal_metadata', None) if pm is None: return {} set = pm.getMetadataSet(obj.set_id) fields = fieldsFromSet(set, obj) # TODO This would *really* benefit from some # caching/timestamp checking. # Calling generateMethods and reconstructing # the fields each time may actually be # *very very* expensive. klass = obj.context.__class__ generateMethods(klass, fields.values()) return fields
def test_security_dont_stomp_existing_decl_private(self): self.assertFalse(hasattr(SecDummy5, '__ac_permissions__')) self.assertFalse(hasattr(SecDummy5, 'makeFoo__roles__')) self.assertTrue(hasattr(SecDummy5, 'makeFoo')) existing_method = getattr(SecDummy5, 'makeFoo') generateMethods(SecDummy5, (foo_field,)) self.assertTrue(hasattr(SecDummy5, '__ac_permissions__')) self.assertTrue(SecDummy5.makeFoo == existing_method) got = SecDummy5.__ac_permissions__ expected = (('Modify portal content', ('setFoo', 'getRawFoo')),) self.assertEqual(got, expected) self.assertTrue(hasattr(SecDummy5, 'makeFoo__roles__')) self.assertTrue(SecDummy5.makeFoo__roles__ == ACCESS_PRIVATE)
from Products.EEAContentTypes.content import ThemeTaggable # monkey patch, replaces reference field of certain content types to # an orderable reference field from Products.EEAContentTypes.content.orderablereffield import field from Products.EEAContentTypes.content.orderablereffield import ( types_and_schema, ) # monkey patch, by default file is not translatable, fix this from Products.ATContentTypes.content import file as atfile from Products.ATContentTypes.content import image for otype, schema in types_and_schema: schema.addField(field) schema.moveField('relatedItems', pos='bottom') generateMethods(otype, [field]) atfile.ATFileSchema['file'].languageIndependent = False # #4898 Set Content-Disposition: attachment for PDF files inlineMimetypes = atfile.ATFile.inlineMimetypes if 'application/pdf' in inlineMimetypes: inlineMimetypes = set(inlineMimetypes) inlineMimetypes.remove('application/pdf') atfile.ATFile.inlineMimetypes = tuple(inlineMimetypes) image.ATImageSchema['rights'].languageIndependent = True __all__ = [ ThemeTaggable.__name__, Speech.__name__, Article.__name__, CallForInterest.__name__, NegotiatedProcedure.__name__,
alphabets = {} for x in string.uppercase: alphabets[x] = [] for item in items: char = item.Title[0].upper() if not alphabets.has_key(char): continue alphabets[char].append(item) return [{"letter": x, "items": alphabets[x]} for x in string.uppercase] HelpCenterGlossary.alphabetise = alphabetise.__get__(None, HelpCenterGlossary) generateMethods(HelpCenterGlossary, HelpCenterGlossary.schema.fields()) # Patching HelpCenterDefinition HelpCenterDefinition = Definition.HelpCenterDefinition HelpCenterDefinition.schema = HelpCenterDefinition.schema + Schema((DefinitionField)) generateMethods(HelpCenterDefinition, HelpCenterDefinition.schema.fields()) # Patching FAQFolder HelpCenterFAQFolder = FAQFolder.HelpCenterFAQFolder HelpCenterFAQFolder.schema["description"].required = 0 HelpCenterFAQFolder.schema = HelpCenterFAQFolder.schema + Schema( (BodyField, IdentityField, IdentityPosition, ContributorsField, RelatedItemsField, RightsField)
alphabets = {} for x in string.uppercase: alphabets[x] = [] for item in items: char = item.Title[0].upper() if not alphabets.has_key(char): continue alphabets[char].append(item) return [{'letter': x, 'items': alphabets[x]} for x in \ string.uppercase] HelpCenterGlossary.alphabetise = alphabetise.__get__(None, HelpCenterGlossary) generateMethods(HelpCenterGlossary, HelpCenterGlossary.schema.fields()) # Patching HelpCenterDefinition HelpCenterDefinition = Definition.HelpCenterDefinition HelpCenterDefinition.schema = HelpCenterDefinition.schema +\ Schema((DefinitionField),) generateMethods(HelpCenterDefinition, HelpCenterDefinition.schema.fields()) # Patching FAQFolder HelpCenterFAQFolder = FAQFolder.HelpCenterFAQFolder HelpCenterFAQFolder.schema['description'].required = 0 HelpCenterFAQFolder.schema = HelpCenterFAQFolder.schema +\
def injectSchema(self): # inject the mixinschema ATFolder.schema = ATFolderSchema + PloneTemplatesMixinSchema generateMethods(ATFolder, ATFolder.schema.fields())
from Products.Archetypes.ClassGen import generateMethods from Products.PloneTemplates.TemplateSchema import PloneTemplatesMixinSchema from Products.PloneTemplates.config import typesToPatch # patch objects, see config.py for klass, schema in typesToPatch: schema.addField(PloneTemplatesMixinSchema['templates']) schema.addField(PloneTemplatesMixinSchema['inheritTemplates']) generateMethods(klass, klass.schema.fields())
# monkey patch, replaces reference field of certain content types to # an orderable reference field from Products.EEAContentTypes.content.orderablereffield import field from Products.EEAContentTypes.content.orderablereffield import ( types_and_schema, ) # monkey patch, by default file is not translatable, fix this from Products.ATContentTypes.content import file as atfile from Products.ATContentTypes.content import image for otype, schema in types_and_schema: schema.addField(field) schema.moveField('relatedItems', pos='bottom') generateMethods(otype, [field]) atfile.ATFileSchema['file'].languageIndependent = False # #4898 Set Content-Disposition: attachment for PDF files inlineMimetypes = atfile.ATFile.inlineMimetypes if 'application/pdf' in inlineMimetypes: inlineMimetypes = set(inlineMimetypes) inlineMimetypes.remove('application/pdf') atfile.ATFile.inlineMimetypes = tuple(inlineMimetypes) image.ATImageSchema['rights'].languageIndependent = True __all__ = [