def _update_links(self, links, tiddler):
        """
        Update the links database.
        """
        source = _tiddler_key(tiddler)

        warnings.simplefilter('error', MySQLdb.Warning)

        try:
            for link, space in set(links):
                if link is None:
                    link = ''
                if is_link(link):
                    target = link
                elif space:
                    if link:
                        target = '%s_public:%s' % (space, link)
                    else:
                        target = '@%s:' % space
                else:
                    target = '%s:%s' % (tiddler.bag, link)
                new_link = SLink(source, target)
                self.session.add(new_link)
                self.session.commit()
        except MySQLdb.Warning, exc:
            self.session.rollback()
            pass
    def _update_links(self, links, tiddler):
        """
        Update the links database.
        """
        source = _tiddler_key(tiddler)

        try:
            for link, space in links:
                if link is None:
                    link = ''
                if is_link(link):
                    target = link
                elif space:
                    target = '%s_public:%s' % (space, link)
                else:
                    target = '%s:%s' % (tiddler.bag, link)
                new_link = SLink(source, target)
                self.session.add(new_link)
                self.session.commit()
        except:
            self.session.rollback()
            raise
    def _update_links(self, links, tiddler):
        """
        Update the links database.
        """
        source = _tiddler_key(tiddler)

        config = self.environ.get('tiddlyweb.config', {})
        at_means_bag = config.get('links.at_means_bag', False)

        if MYSQL_PRESENT:
            warnings.simplefilter('error', MySQLdb.Warning)

        try:
            for link, space in set(links):
                if link is None:
                    link = ''
                if is_link(link):
                    target = link
                elif space:
                    if link:
                        if at_means_bag:
                            target = '%s:%s' % (space, link)
                        else:
                            target = '%s_public:%s' % (space, link)
                    else:
                        target = '@%s:' % space
                else:
                    target = '%s:%s' % (tiddler.bag, link)
                new_link = SLink(source, target)
                self.session.add(new_link)
                self.session.commit()
        except MySQLdb.Warning:
            self.session.rollback()
            pass
        except:
            self.session.rollback()
            raise
    links_manager = LinksManager(environ)

    try:
        links = getattr(links_manager, 'read_%s' % linktype)(host_tiddler)
    except AttributeError, exc:
        raise HTTP400('invalid links type: %s' % exc)

    if filters:
        tiddlers = Tiddlers(title=collection_title)
    else:
        tiddlers = Tiddlers(title=collection_title, store=store)
    tiddlers.link = link

    # continue over entries in database from previous format
    for link in links:
        if is_link(link):  # external link
            continue
        else:
            container, title = link.split(':', 1)
            if not title:  # plain space link
                continue
            elif title:
                if container != bag_name:
                    if container.endswith('_public'):
                        try:
                            recipe = Recipe(container)
                            recipe = store.get(recipe)
                            tiddler = Tiddler(title)
                            tiddler.recipe = container
                            bag = determine_bag_from_recipe(recipe, tiddler,
                                    environ)
            tiddler.title, exc))

    links_manager = LinksManager(environ)

    try:
        links = getattr(links_manager, 'read_%s' % linktype)(tiddler)
    except AttributeError, exc:
        raise HTTP400('invalid links type: %s' % exc)

    if filters:
        tiddlers = Tiddlers(title=title)
    else:
        tiddlers = Tiddlers(title=title, store=store)

    for link in links:
        if is_link(link):
            tiddler = Tiddler(link, 'temp')
            tiddler.text = link
            tiddler.fields['_canonical_uri'] = link
            tiddler.store = store
        else:
            container, title = link.split(':', 1)
            if title:  # skip space links for now
                try:
                    recipe = Recipe(container)
                    recipe = store.get(recipe)
                    bag = determine_bag_from_recipe(recipe, tiddler, environ)
                    bag_name = bag.name
                except StoreError:
                    bag_name = container
                tiddler = Tiddler(title, bag_name)