コード例 #1
0
    def setgridstate(self):
        """Stores the current grid configuration (visible columns,
        column order, grouping, sorting etc.) persistent in dictstorage.
        """

        if not self.user_is_logged_in():
            return

        # extract the data
        state = self.request.get('gridstate', None)
        if not state or not isinstance(state, str):
            return

        if state == '{}':
            state = ''
        # get the tab view
        view_name = self.request.get('view_name', None)
        if not view_name:
            return

        listing_view = self._resolve_tab(view_name)
        if not listing_view:
            return

        # get the key for storing the state
        generator = queryMultiAdapter(
            (self.context, listing_view, self.request),
            IGridStateStorageKeyGenerator)
        key = generator.get_key()

        # store the data
        storage = IDictStorage(listing_view)
        storage.set(key, state)
コード例 #2
0
    def setgridstate(self):
        """Stores the current grid configuration (visible columns,
        column order, grouping, sorting etc.) persistent in dictstorage.
        """

        if not self.user_is_logged_in():
            return

        # extract the data
        state = self.request.get('gridstate', None)
        if not state or not isinstance(state, str):
            return

        if state == '{}':
            state = ''
        # get the tab view
        view_name = self.request.get('view_name', None)
        if not view_name:
            return

        listing_view = self._resolve_tab(view_name)
        if not listing_view:
            return

        # get the key for storing the state
        generator = queryMultiAdapter(
            (self.context, listing_view, self.request),
            IGridStateStorageKeyGenerator)
        key = generator.get_key()

        # store the data
        storage = IDictStorage(listing_view)
        storage.set(key, state)
コード例 #3
0
ファイル: listing.py プロジェクト: Vinsurya/Plone
    def load_grid_state(self):
        """Loads the stored grid state - if any is stored.
        """
        # get the key from the key generator
        generator = queryMultiAdapter((self.context, self, self.request),
                                      IGridStateStorageKeyGenerator)

        key = generator.get_key()

        # get the state (string)
        storage = IDictStorage(self)
        state = storage.get(key, None)

        if state:
            parsed_state = json.loads(state)

            # Do not persistently store grouping, since loading the group
            # initially would not work.
            if 'group' in parsed_state:
                del parsed_state['group']

            # In some situations the sorting in the state is corrupt. Every
            # visible row should have a 'sortable' by default.
            column_state_by_id = dict((col['id'], col)
                                      for col in parsed_state['columns'])

            for column in self.columns:
                if not isinstance(column, dict):
                    continue

                name = column.get('sort_index', column.get('column', None))
                if name not in column_state_by_id:
                    continue

                col_state = column_state_by_id[name]
                if 'sortable' not in col_state:
                    col_state['sortable'] = True

            state = json.dumps(parsed_state)

        if state:
            self.table_options.update({'gridstate': state})
        else:
            return

        # if the sorting order is set in the state and is not set in the
        # request, we need to change it in the config using the state
        # config.
        if self.request.get('dir', _marker) == _marker and \
                self.request.get('sort', _marker) == _marker and \
                'sort' in parsed_state:
            if 'field' in parsed_state['sort']:
                self.sort_on = parsed_state['sort']['field']
            if parsed_state['sort']['direction'] == 'ASC':
                self.sort_order = 'asc'
                self.sort_reverse = False
            else:
                self.sort_order = 'reverse'
                self.sort_reverse = True
コード例 #4
0
    def load_grid_state(self):
        """Loads the stored grid state - if any is stored.
        """
        # get the key from the key generator
        generator = queryMultiAdapter((self.context, self, self.request),
                                      IGridStateStorageKeyGenerator)

        key = generator.get_key()

        # get the state (string)
        storage = IDictStorage(self)
        state = storage.get(key, None)

        if state:
            parsed_state = json.loads(state)

            # Do not persistently store grouping, since loading the group
            # initially would not work.
            if 'group' in parsed_state:
                del parsed_state['group']

            # In some situations the sorting in the state is corrupt. Every
            # visible row should have a 'sortable' by default.
            column_state_by_id = dict(
                (col['id'], col) for col in parsed_state['columns'])

            for column in self.columns:
                if not isinstance(column, dict):
                    continue

                name = column.get('sort_index', column.get('column', None))
                if name not in column_state_by_id:
                    continue

                col_state = column_state_by_id[name]
                if 'sortable' not in col_state:
                    col_state['sortable'] = True

            state = json.dumps(parsed_state)

        if state:
            self.table_options.update({'gridstate': state})
        else:
            return

        # if the sorting order is set in the state and is not set in the
        # request, we need to change it in the config using the state
        # config.
        if self.request.get('dir', _marker) == _marker and \
                self.request.get('sort', _marker) == _marker and \
                'sort' in parsed_state:
            if 'field' in parsed_state['sort']:
                self.sort_on = parsed_state['sort']['field']
            if parsed_state['sort']['direction'] == 'ASC':
                self.sort_order = 'asc'
                self.sort_reverse = False
            else:
                self.sort_order = 'reverse'
                self.sort_reverse = True
コード例 #5
0
def update_sync_stamp(context):
    """update the SYNC key with the actual timestamp in the dictstorage"""

    storage = IDictStorage(DictStorageConfigurationContext())
    timestamp = datetime.now().isoformat()
    storage.set(DICTSTORAGE_SYNC_KEY, timestamp)
    logger.info("Updated sync_stamp in dictstorage"
                " to current timestamp (%s)" % timestamp)
    return timestamp
コード例 #6
0
def update_sync_stamp(context):
    """update the SYNC key with the actual timestamp in the dictstorage"""

    storage = IDictStorage(DictStorageConfigurationContext())
    timestamp = datetime.now().isoformat()
    storage.set(DICTSTORAGE_SYNC_KEY, timestamp)
    logger.info("Updated sync_stamp in dictstorage"
                " to current timestamp (%s)" % timestamp)
    return timestamp
コード例 #7
0
    def test_call_storage_with_proxy_will_change_context_to_subview(self):
        proxy_view = self.dossier.restrictedTraverse(
            'tabbedview_view-documents-proxy')

        sub_view = self.dossier.restrictedTraverse(
            'tabbedview_view-documents')

        self.assertNotIsInstance(
            IDictStorage(sub_view).context, proxy_view.__class__)
        self.assertIsInstance(
            IDictStorage(sub_view).context, sub_view.__class__)
コード例 #8
0
    def get_grid_state(self, view_name):
        """Load tabbedview gridstate of the logged in users for the given view.
        """
        tabbedview = self.context.restrictedTraverse(
            "@@tabbedview_view-{}".format(view_name), default=None)
        if not tabbedview:
            return None

        generator = queryMultiAdapter((self.context, tabbedview, self.request),
                                      IGridStateStorageKeyGenerator)
        key = generator.get_key()
        storage = IDictStorage(tabbedview)
        return json.loads(storage.get(key, '{}'))
コード例 #9
0
    def get_grid_state(self, view_name):
        """Load tabbedview gridstate of the logged in users for the given view.
        """
        tabbedview = self.context.restrictedTraverse(
            "@@tabbedview_view-{}".format(view_name), default=None)
        if not tabbedview:
            return None

        generator = queryMultiAdapter((self.context, tabbedview, self.request),
                                      IGridStateStorageKeyGenerator)
        key = generator.get_key()
        storage = IDictStorage(tabbedview)
        return json.loads(storage.get(key, '{}'))
コード例 #10
0
    def get_tab_items(self):
        """Returns the tab items from get_tabs with additional information for
        use in the tabbed template.
        """

        if not self.user_is_logged_in():
            default_tab = ''

        else:
            key_generator = getMultiAdapter((self.context, self, self.request),
                                            IDefaultTabStorageKeyGenerator)
            key = key_generator.get_key()
            default_tab = IDictStorage(self).get(key, '')

        actions = []

        for action in self.get_tabs():
            action = action.copy()
            if action['id'].lower() == default_tab:
                action['class'] = '%s initial' % action['class']

            view = self._resolve_tab(action['id'])
            action['tab_menu_actions'] = self.get_tab_menu_actions(view)

            actions.append(action)

        return actions
コード例 #11
0
    def test_strip_proxy_returns_proxy_view_without_postfix(self):
        view = self.dossier.restrictedTraverse('tabbedview_view-documents-proxy')

        self.assertTrue(ITabbedViewProxy.providedBy(view))
        self.assertEqual(
            'tabbedview_view-documents',
            IDictStorage(view).strip_proxy_postfix(view, view.__name__))
コード例 #12
0
    def test_strip_proxy_postfix_will_replace_only_if_ITabbedViewProxy_is_provided(self):
        view = self.dossier.restrictedTraverse('tabbedview_view-documents')
        value = 'documents_view-documents-proxy'

        self.assertFalse(ITabbedViewProxy.providedBy(view))
        self.assertEqual(
            'documents_view-documents-proxy',
            IDictStorage(view).strip_proxy_postfix(view, value))
コード例 #13
0
    def set_default_tab(self, tab=None, view=None):
        """Sets the default tab. The id of the tab is passed as
        argument or in the request payload as ``tab``.
        """

        user = AccessControl.getSecurityManager().getUser()
        if user == AccessControl.SpecialUsers.nobody:
            tab = None

        else:
            tab = tab or self.request.get('tab')

        if not tab:
            return json.dumps([
                'error',
                translate('Error', 'plone', context=self.request),
                translate(_(u'error_set_default_tab',
                            u'Could not set default tab.'),
                          context=self.request)
            ])

        tab_title = translate(tab, 'ftw.tabbedview', context=self.request)
        success = [
            'info',
            translate('Information', 'plone', context=self.request),
            translate(_(u'info_set_default_tab',
                        u'The tab ${title} is now your default tab. ' +
                        u'This is a personal setting.',
                        mapping={'title': tab_title}),
                      context=self.request)
        ]

        if not view and self.request.get('viewname', False):
            view = self.context.restrictedTraverse(
                self.request.get('viewname'))
        else:
            view = self

        key_generator = getMultiAdapter((self.context, view, self.request),
                                        IDefaultTabStorageKeyGenerator)
        key = key_generator.get_key()

        storage = IDictStorage(self)
        storage.set(key, tab.lower())

        return json.dumps(success)
コード例 #14
0
    def __call__(self):
        storage_key_generator = queryMultiAdapter(
            (getContext(self.published), self.published, self.request),
            IDefaultTabStorageKeyGenerator)
        if storage_key_generator is None:
            return ''

        storage_key = storage_key_generator.get_key()
        return IDictStorage(self.published).get(storage_key) or ''
コード例 #15
0
    def set_default_tab(self, tab=None, view=None):
        """Sets the default tab. The id of the tab is passed as
        argument or in the request payload as ``tab``.
        """

        user = AccessControl.getSecurityManager().getUser()
        if user == AccessControl.SpecialUsers.nobody:
            tab = None

        else:
            tab = tab or self.request.get('tab')

        if not tab:
            return json.dumps([
                    'error',
                    translate('Error', 'plone', context=self.request),
                    translate(_(u'error_set_default_tab',
                                u'Could not set default tab.'),
                              context=self.request)])

        tab_title = translate(tab, 'ftw.tabbedview', context=self.request)
        success = [
            'info',
            translate('Information', 'plone', context=self.request),
            translate(_(u'info_set_default_tab',
                        u'The tab ${title} is now your default tab. ' +
                        u'This is a personal setting.',
                        mapping={'title': tab_title}),
                      context=self.request)]

        if not view and self.request.get('viewname', False):
            view = self.context.restrictedTraverse(
                self.request.get('viewname'))
        else:
            view = self

        key_generator = getMultiAdapter((self.context, view, self.request),
                                        IDefaultTabStorageKeyGenerator)
        key = key_generator.get_key()

        storage = IDictStorage(self)
        storage.set(key, tab.lower())

        return json.dumps(success)
コード例 #16
0
    def test_initial_tab_is_reseted_on_every_request(self):
        portal = self.layer['portal']
        foobar_view = queryMultiAdapter((portal, portal.REQUEST),
                                        name='tabbed_view')
        key_generator = getMultiAdapter((portal, foobar_view, portal.REQUEST),
                                        IDefaultTabStorageKeyGenerator)
        key = key_generator.get_key()

        # first call
        IDictStorage(foobar_view)[key] = 'footab'
        html = foobar_view()
        doc = pq(html)
        initial_tab = doc('#tabbedview-header .tabbedview-tabs a.initial')
        self.assertEqual(1, len(initial_tab))
        self.assertEqual('MyTitle', initial_tab.text())

        # second call
        IDictStorage(foobar_view)[key] = 'notranslation'
        html = foobar_view()
        doc = pq(html)
        initial_tab = doc('#tabbedview-header .tabbedview-tabs a.initial')
        self.assertEqual(1, len(initial_tab))
        self.assertEqual('notranslation', initial_tab.text())
コード例 #17
0
    def test_implements_interface(self):
        self.assertTrue(
            IDictStorage.implementedBy(statestorage.DefaultDictStorage))

        verifyClass(IDictStorage, statestorage.DefaultDictStorage)
コード例 #18
0
def get(key):
    """Retrieve a value from the key-value store."""
    return IDictStorage(DictStorageConfigurationContext()).get(key)
コード例 #19
0
ファイル: test_statestorage.py プロジェクト: Vinsurya/Plone
    def test_implements_interface(self):
        self.assertTrue(IDictStorage.implementedBy(
                statestorage.DefaultDictStorage))

        verifyClass(IDictStorage,
                    statestorage.DefaultDictStorage)
コード例 #20
0
def set(key, value):
    """Set a value in the key-value store."""
    return IDictStorage(DictStorageConfigurationContext()).set(key, value)
コード例 #21
0
 def get_db_sync_stamp(self):
     storage = IDictStorage(DictStorageConfigurationContext())
     timestamp = storage.get(DICTSTORAGE_SYNC_KEY)
     return timestamp
コード例 #22
0
    def test_call_storage_with_subview_will_not_change_context(self):
        sub_view = self.dossier.restrictedTraverse(
            'tabbedview_view-documents')

        self.assertIsInstance(
            IDictStorage(sub_view).context, sub_view.__class__)