예제 #1
0
class InterfaceData(object):
    """returns all properties data
    """

    implements(IDataCollector)
    logger = getLogger()
    security = ClassSecurityInformation()

    def __init__(self, object):
        self.object = object
        self.adapted = IMarkerInterfaces(self.object)

    security.declarePrivate('getData')
    def getData(self):
        """returns all important data"""
        return self.getInterfaceData()

    security.declarePrivate('getInterfaceData')
    def getInterfaceData(self):
        """
        Returns a list of directlyProvided interfaces.
        Example Return: [
            'foo.bar.IDemoInterface',
            ....
            ]

        @return:    list
        @rtype:     list
        """
        return self.adapted.getDirectlyProvidedNames()

    security.declarePrivate('setData')
    def setData(self, interfacedata, metadata):
        """
        Sets a list of properties on a object.
        Warning: all currently set properties which are not in the
        properties-list wille be removed!

        @param object:      Plone-Object to set the properties on
        @type object:       Plone-Object
        @param properties:  list of propertes.
                            See ftw.publisher.sender.extractor
                            for format details.
        @param type:        list
        @return:            None
        """
        self.logger.info('Updating interface data (UID %s)' %
                (self.object.UID())
        )

        current_ifaces = set(self.adapted.getDirectlyProvidedNames())
        desired_ifaces = set(interfacedata)

        for iface_dotted in current_ifaces - desired_ifaces:
            iface = resolve(iface_dotted)
            noLongerProvides(self.object, iface)

        for iface_dotted in desired_ifaces - current_ifaces:
            iface = resolve(iface_dotted)
            alsoProvides(self.object, iface)
예제 #2
0
파일: marker.py 프로젝트: plone-ve/Zope
class EditView(object):
    """Marker interface edit view.
    """
    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.adapted = IMarkerInterfaces(context)
        self.context_url = self.context.absolute_url()

    def __call__(self, SAVE=None, add=(), remove=()):
        if SAVE:
            self.update(add, remove)
            url = '%s?manage_tabs_message=Changes+applied.'
            self.request.response.redirect(url % self.request.ACTUAL_URL)
            return ''
        return self.index()

    def _getNameLinkDicts(self, interfaceNames):
        return [dict(name=name) for name in interfaceNames]

    def getAvailableInterfaceNames(self):
        return self._getNameLinkDicts(
            self.adapted.getAvailableInterfaceNames())

    def getDirectlyProvidedNames(self):
        return self._getNameLinkDicts(self.adapted.getDirectlyProvidedNames())

    def getInterfaceNames(self):
        return self._getNameLinkDicts(self.adapted.getInterfaceNames())

    def update(self, add, remove):
        # this could return errors
        add = self.adapted.dottedToInterfaces(add)
        remove = self.adapted.dottedToInterfaces(remove)
        self.adapted.update(add=add, remove=remove)
 def __call__(self, context):
     self.context = context
     adapted = IMarkerInterfaces(context)
     terms = [
         SimpleTerm(x, title=x) for x in
         adapted.getDirectlyProvidedNames()]
     return SimpleVocabulary(terms)
예제 #4
0
    def _extractMarkers(self):
        fragment = self._doc.createDocumentFragment()
        adapted = IMarkerInterfaces(self.context)

        for marker_id in adapted.getDirectlyProvidedNames():
            node = self._doc.createElement('marker')
            node.setAttribute('name', marker_id)
            fragment.appendChild(node)

        return fragment
예제 #5
0
파일: utils.py 프로젝트: CGTIC/Plone_SP
    def _extractMarkers(self):
        fragment = self._doc.createDocumentFragment()
        adapted = IMarkerInterfaces(self.context)

        for marker_id in adapted.getDirectlyProvidedNames():
            node = self._doc.createElement('marker')
            node.setAttribute('name', marker_id)
            fragment.appendChild(node)

        return fragment
예제 #6
0
파일: marker.py 프로젝트: tseaver/Zope-RFA
class EditView:
    """Marker interface edit view.
    """
    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.adapted = IMarkerInterfaces(context)
        self.context_url = self.context.absolute_url()

    def __call__(self, SAVE=None, add=(), remove=()):
        if SAVE:
            self.update(add, remove)
            self.request.response.redirect(self.request.ACTUAL_URL)
            return ''
        return self.index()

    def _getLinkToInterfaceDetailsView(self, interfaceName):
        return (
            self.context_url +
            '/views-details.html?iface=%s&type=zope.publisher.interfaces.browser.IBrowserRequest'
            % interfaceName)

    def _getNameLinkDicts(self, interfaceNames):
        return [
            dict(name=name, link=self._getLinkToInterfaceDetailsView(name))
            for name in interfaceNames
        ]

    def getAvailableInterfaceNames(self):
        return self._getNameLinkDicts(
            self.adapted.getAvailableInterfaceNames())

    def getDirectlyProvidedNames(self):
        return self._getNameLinkDicts(self.adapted.getDirectlyProvidedNames())

    def getInterfaceNames(self):
        return self._getNameLinkDicts(self.adapted.getInterfaceNames())

    def update(self, add, remove):
        # this could return errors
        add = self.adapted.dottedToInterfaces(add)
        remove = self.adapted.dottedToInterfaces(remove)
        self.adapted.update(add=add, remove=remove)
예제 #7
0
파일: marker.py 프로젝트: goschtl/zope
class EditView:

    """Marker interface edit view.
    """

    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.adapted = IMarkerInterfaces(context)
        self.context_url = self.context.absolute_url()

    def __call__(self, SAVE=None, add=(), remove=()):
        if SAVE:
            self.update(add, remove)
            self.request.response.redirect(self.request.ACTUAL_URL)
            return ''
        return self.index()

    def _getLinkToInterfaceDetailsView(self, interfaceName):
        return (self.context_url +
            '/views-details.html?iface=%s&type=zope.publisher.interfaces.browser.IBrowserRequest' % interfaceName)

    def _getNameLinkDicts(self, interfaceNames):
        return [dict(name=name,
                     link=self._getLinkToInterfaceDetailsView(name))
                for name in interfaceNames]

    def getAvailableInterfaceNames(self):
        return self._getNameLinkDicts(
            self.adapted.getAvailableInterfaceNames())

    def getDirectlyProvidedNames(self):
        return self._getNameLinkDicts(self.adapted.getDirectlyProvidedNames())

    def getInterfaceNames(self):
        return self._getNameLinkDicts(self.adapted.getInterfaceNames())

    def update(self, add, remove):
        # this could return errors
        add = self.adapted.dottedToInterfaces(add)
        remove = self.adapted.dottedToInterfaces(remove)
        self.adapted.update(add=add, remove=remove)
예제 #8
0
class EditView(object):
    """Marker interface edit view.
    """

    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.adapted = IMarkerInterfaces(context)
        self.context_url = self.context.absolute_url()

    def __call__(self, SAVE=None, add=(), remove=()):
        if SAVE:
            self.update(add, remove)
            url = '%s?manage_tabs_message=Changes+applied.'
            self.request.response.redirect(url % self.request.ACTUAL_URL)
            return ''
        return self.index()

    def _getNameLinkDicts(self, interfaceNames):
        return [dict(name=name) for name in interfaceNames]

    def getAvailableInterfaceNames(self):
        return self._getNameLinkDicts(
            self.adapted.getAvailableInterfaceNames())

    def getDirectlyProvidedNames(self):
        return self._getNameLinkDicts(self.adapted.getDirectlyProvidedNames())

    def getInterfaceNames(self):
        return self._getNameLinkDicts(self.adapted.getInterfaceNames())

    def update(self, add, remove):
        # this could return errors
        add = self.adapted.dottedToInterfaces(add)
        remove = self.adapted.dottedToInterfaces(remove)
        self.adapted.update(add=add, remove=remove)
예제 #9
0
class ContentTypeLookUp(object):
    """ Lookup for context in portal_relations content-types """

    implements(IContentTypeLookUp)

    def __init__(self, context):
        self.context = context
        self.adapted = None
        self._ctypes = None
        self._types_and_interfaces = None

    @property
    def ctypes(self):
        """ Types
        """
        if self._ctypes:
            return self._ctypes

        tool = queryAdapter(self.context, IToolAccessor)
        if not tool:
            return []
        self._ctypes = [doc for doc in tool.types(proxy=False)]
        return self._ctypes

    @property
    def portal_type(self):
        """ Context portal_type
        """
        return getattr(self.context, 'portal_type', '')

    @property
    def object_provides(self):
        """ Context object_provides
        """
        if not self.adapted:
            self.adapted = IMarkerInterfaces(self.context)

        ifaces = self.adapted.getDirectlyProvidedNames()
        ifaces.extend(self.adapted.getInterfaceNames())

        return ifaces

    @property
    def types_and_interfaces(self):
        """ Types and interfaces logic from every field
        """
        if self._types_and_interfaces:
            return self._types_and_interfaces
        self._types_and_interfaces = []
        for doc in self.ctypes:
            ct_type = doc.getField('ct_type').getAccessor(doc)()
            ct_interface = doc.getField('ct_interface').getAccessor(doc)()
            self._types_and_interfaces.append((ct_type, ct_interface, doc))
        return self._types_and_interfaces


    @property
    def tuple_types(self):
        """ Types
        """
        res = {}
        for ct_type, ct_interface, doc in self.types_and_interfaces:
            if not ct_type:
                continue
            if not ct_interface:
                continue
            res[(ct_interface, ct_type)] = doc
        return res

    @property
    def portal_types_only(self):
        """ Only portal_types
        """
        res = {}
        for ct_type, ct_interface, doc in self.types_and_interfaces:
            if ct_interface:
                continue
            if not ct_type:
                continue
            res[ct_type] = doc
        return res

    @property
    def interfaces_only(self):
        """ Only interfaces
        """
        res = {}
        for ct_type, ct_interface, doc in self.types_and_interfaces:
            if ct_type:
                continue
            if not ct_interface:
                continue
            res[ct_interface] = doc
        return res

    def __call__(self, inverse_interface_check=False):
        """ Return ContentType object from portal_relation or None
        """
        object_provides = self.object_provides
        # Search for full mapping
        tuple_types = self.tuple_types
        ptype = self.portal_type
        if tuple_types:
            for iface in object_provides:
                if (iface, ptype) in tuple_types:
                    return tuple_types[(iface, ptype)]

        # Fallback to portal_type only
        portal_types = self.portal_types_only
        if ptype in self.portal_types_only:
            return portal_types[ptype]

        # Fallback to interfaces only
        interfaces = self.interfaces_only
        if interfaces:
            if inverse_interface_check:
                object_provides.reverse()
            for iface in object_provides:
                if iface in interfaces:
                    return interfaces[iface]
        return None
예제 #10
0
class ContentTypeLookUp(object):
    """ Lookup for context in portal_relations content-types """

    implements(IContentTypeLookUp)

    def __init__(self, context):
        self.context = context
        self.adapted = None
        self._ctypes = None
        self._types_and_interfaces = None

    @property
    def ctypes(self):
        """ Types
        """
        if self._ctypes:
            return self._ctypes

        tool = queryAdapter(self.context, IToolAccessor)
        if not tool:
            return []
        self._ctypes = [doc for doc in tool.types(proxy=False)]
        return self._ctypes

    @property
    def portal_type(self):
        """ Context portal_type
        """
        request = getRequest()
        if request:
            if '++add++' in request.URL:
                types_tool = getToolByName(getSite(), 'portal_types')
                add_view_url = request.steps[-1].split('++add++')[-1]
                portal_type = types_tool[add_view_url].factory

                return portal_type

        return getattr(self.context, 'portal_type', '')

    @property
    def object_provides(self):
        """ Context object_provides
        """
        if not self.adapted:
            self.adapted = IMarkerInterfaces(self.context)

        ifaces = self.adapted.getDirectlyProvidedNames()
        ifaces.extend(self.adapted.getInterfaceNames())

        return ifaces

    @property
    def types_and_interfaces(self):
        """ Types and interfaces logic from every field
        """
        if self._types_and_interfaces:
            return self._types_and_interfaces
        self._types_and_interfaces = []
        for doc in self.ctypes:
            ct_type = doc.getField('ct_type').getAccessor(doc)()
            ct_interface = doc.getField('ct_interface').getAccessor(doc)()
            self._types_and_interfaces.append((ct_type, ct_interface, doc))
        return self._types_and_interfaces

    @property
    def tuple_types(self):
        """ Types
        """
        res = {}
        for ct_type, ct_interface, doc in self.types_and_interfaces:
            if not ct_type:
                continue
            if not ct_interface:
                continue
            res[(ct_interface, ct_type)] = doc
        return res

    @property
    def portal_types_only(self):
        """ Only portal_types
        """
        res = {}
        for ct_type, ct_interface, doc in self.types_and_interfaces:
            if ct_interface:
                continue
            if not ct_type:
                continue
            res[ct_type] = doc
        return res

    @property
    def interfaces_only(self):
        """ Only interfaces
        """
        res = {}
        for ct_type, ct_interface, doc in self.types_and_interfaces:
            if ct_type:
                continue
            if not ct_interface:
                continue
            res[ct_interface] = doc
        return res

    def __call__(self, **kwargs):
        """ Return ContentType object from portal_relation or None
        """
        object_provides = self.object_provides
        # Search for full mapping
        tuple_types = self.tuple_types
        ptype = self.portal_type
        if tuple_types:
            for iface in object_provides:
                if (iface, ptype) in tuple_types:
                    return tuple_types[(iface, ptype)]

        # Fallback to portal_type only
        portal_types = self.portal_types_only
        if ptype in self.portal_types_only:
            return portal_types[ptype]

        # Fallback to interfaces only
        interfaces = self.interfaces_only
        if interfaces:
            for iface in object_provides:
                if iface in interfaces:
                    return interfaces[iface]

        return None