Changeset 1563 in products


Ignore:
Timestamp:
Jan 15, 2010 9:30:53 PM (14 years ago)
Author:
koval
Message:

implemented section for exporting of portlet assignments

Location:
quintagroup.transmogrifier/trunk/quintagroup/transmogrifier
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configure.zcml

    r1469 r1563  
    124124        component=".interfacemanager.InterfacesImporterSection" 
    125125        name="quintagroup.transmogrifier.interfacesimporter" 
     126        /> 
     127 
     128    <utility 
     129        component=".portlets.PortletsExporterSection" 
     130        name="quintagroup.transmogrifier.portletsexporter" 
     131        /> 
     132 
     133    <utility 
     134        component=".portlets.PortletsImporterSection" 
     135        name="quintagroup.transmogrifier.portletsimporter" 
    126136        /> 
    127137 
  • quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/tests.py

    r1539 r1563  
    5757 
    5858    from Products.CMFCore import utils 
    59     def getToolByName(context, tool_id): 
     59    def getToolByName(context, tool_id, default=None): 
    6060        return context 
    6161    utils.getToolByName = getToolByName 
     
    10261026        name=u'quintagroup.transmogrifier.tests.interfacemanagersource') 
    10271027 
     1028def portletsSetUp(test): 
     1029    sectionsSetUp(test) 
     1030 
     1031    from zope.interface import Interface 
     1032    from zope.annotation.interfaces import IAttributeAnnotatable 
     1033    from plone.portlets.interfaces import ILocalPortletAssignable 
     1034 
     1035    # this bases class adds __of__ method 
     1036    from Acquisition import Implicit 
     1037 
     1038    class MockPortal(Implicit): 
     1039        implements(IAttributeAnnotatable, ILocalPortletAssignable) 
     1040 
     1041        _last_path = None 
     1042        def unrestrictedTraverse(self, path, default): 
     1043            if path[0] == '/': 
     1044                return default # path is absolute 
     1045            if isinstance(path, unicode): 
     1046                return default 
     1047            if path == 'not/existing/bar': 
     1048                return default 
     1049            if path.endswith('/notassignable'): 
     1050                return object() 
     1051            self._last_path = path 
     1052            return self 
     1053 
     1054        def getPhysicalPath(self): 
     1055            return [''] + self._last_path.split('/') 
     1056 
     1057        updated = () 
     1058        def _updateProperty(self, id, value): 
     1059            self.updated += ((self._last_path, id, value)) 
     1060 
     1061    portal = MockPortal() 
     1062    test.globs['plone'] = portal 
     1063    test.globs['transmogrifier'].context = test.globs['plone'] 
     1064 
     1065    class PortletsSource(SampleSource): 
     1066        classProvides(ISectionBlueprint) 
     1067        implements(ISection) 
     1068 
     1069        def __init__(self, *args, **kw): 
     1070            super(PortletsSource, self).__init__(*args, **kw) 
     1071            self.sample = ( 
     1072                dict(), 
     1073                dict(_path='not/existing/bar'), 
     1074                dict(_path='spam/eggs/notassignable'), 
     1075                dict(_path='assignable'), 
     1076            ) 
     1077 
     1078    provideUtility(PortletsSource, 
     1079        name=u'quintagroup.transmogrifier.tests.portletssource') 
     1080 
     1081    # prepare the one portlet for testing 
     1082    from zope.interface import alsoProvides 
     1083    from zope.component import getUtility, getMultiAdapter 
     1084    from zope.component.interfaces import IFactory 
     1085    from zope.component.factory import Factory 
     1086 
     1087    from plone.portlets.manager import PortletManager 
     1088    from plone.portlets.interfaces import IPortletManager, IPortletType, \ 
     1089        IPortletAssignmentMapping 
     1090    from plone.portlets.registration import PortletType 
     1091 
     1092    from plone.app.portlets.assignable import localPortletAssignmentMappingAdapter 
     1093    from plone.app.portlets.interfaces import IPortletTypeInterface 
     1094    # from plone.app.portlets.browser.interfaces import IPortletAdding 
     1095    from plone.app.portlets.portlets.rss import IRSSPortlet, Assignment #, Renderer, AddForm, EditForm 
     1096 
     1097    # register portlet manager and assignment mapping adapter 
     1098    manager = PortletManager() 
     1099    provideUtility(manager, IPortletManager, name='plone.leftcolumn') 
     1100    provideAdapter(localPortletAssignmentMappingAdapter) 
     1101    mapping = getMultiAdapter((portal, manager), IPortletAssignmentMapping) 
     1102 
     1103    # register portlet (this is what plone:portlet zcml directive does) 
     1104    PORTLET_NAME = 'portlets.rss' 
     1105    alsoProvides(IRSSPortlet, IPortletTypeInterface) 
     1106    provideUtility(provides=IPortletTypeInterface, name=PORTLET_NAME, component=IRSSPortlet) 
     1107    provideUtility(provides=IFactory, name=PORTLET_NAME, component=Factory(Assignment)) 
     1108 
     1109    # register a portlet type (this is what <portlet /> element in portlets.xml 
     1110    # does) 
     1111    portlet = PortletType() 
     1112    portlet.title = 'RSS Feed' 
     1113    portlet.description = 'A portlet which can receive and render an RSS feed.' 
     1114    portlet.addview = PORTLET_NAME 
     1115    portlet.for_ = [Interface] 
     1116    provideUtility(component=portlet, provides=IPortletType,  
     1117        name=PORTLET_NAME) 
     1118 
     1119    # add a portlet and configure it (this is done on @@manage-portlets view) 
     1120    assignment = getUtility(IFactory, name=PORTLET_NAME)() 
     1121    mapping['rss'] = assignment 
     1122    portlet_interface = getUtility(IPortletTypeInterface, name=PORTLET_NAME) 
     1123    data = { 
     1124        'portlet_title': u'RSS feed', 
     1125        'count': 10, 
     1126        'url': u'http://sumno.com/feeds/main-page/', 
     1127        'timeout': 60 
     1128    } 
     1129    for k, v in data.items(): 
     1130        field = portlet_interface.get(k) 
     1131        field = field.bind(assignment) 
     1132        field.validate(v) 
     1133        field.set(assignment, v) 
     1134 
     1135    # register adapter for portlet assignment export/import 
     1136    from plone.app.portlets.exportimport.portlets import PropertyPortletAssignmentExportImportHandler 
     1137    provideAdapter(PropertyPortletAssignmentExportImportHandler) 
    10281138 
    10291139def test_suite(): 
     
    10731183            'interfacemanager.txt', 
    10741184            setUp=interfaceManagerSetUp, tearDown=tearDown), 
     1185        doctest.DocFileSuite( 
     1186            'portlets.txt', 
     1187            setUp=portletsSetUp, tearDown=tearDown), 
    10751188    )) 
    10761189    return suite 
Note: See TracChangeset for help on using the changeset viewer.