예제 #1
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)
예제 #2
0
class InterfacesView(ZMIView):
    """Marker interface view.
    """
    def __init__(self, context, request):
        super(InterfacesView, self).__init__(context, request)
        self.adapted = IMarkerInterfaces(context)
        self.context_url = self.context.absolute_url()

    def __call__(self):
        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 getInterfaceNames(self):
        return self._getNameLinkDicts(self.adapted.getInterfaceNames())
예제 #3
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)
예제 #4
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)
예제 #5
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)
예제 #6
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
예제 #7
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