Esempio n. 1
0
 def init(cls):
     # Включаем прослушивание сигналов, необходимое для функционировая области.
     tie_model = get_tie_model()
     # url-синдикации будут обновлены в случае добавления/удаления связи сущности с категорией.
     signals.post_save.connect(cls.update_syndication_urls,
                               sender=tie_model)
     signals.post_delete.connect(cls.update_syndication_urls,
                                 sender=tie_model)
Esempio n. 2
0
    def get_syndication_urls(cls) -> List:
        """Возвращает url-шаблоны с привязанными сгенерированными представлениями
         для потоков синдикации (RSS) с перечислением новых материалов в категориях.

        """
        feeds = []
        tie_model = get_tie_model()
        categories = tie_model.get_linked_objects(by_category=True)

        def get_in_category(category_id):
            """Возвращает объекты из разных областей в указанной категории."""
            linked = tie_model.get_linked_objects(
                filter_kwargs={'category_id': category_id}, id_only=True)
            result = []

            for model, ids in linked.items():
                result.extend(model.get_actual().filter(
                    id__in=ids)[:SYNDICATION_ITEMS_LIMIT])

            result = sorted(result,
                            key=attrgetter('time_published'),
                            reverse=True)

            return result[:SYNDICATION_ITEMS_LIMIT]

        for category in categories.keys():

            title = category.title
            category_id = category.id
            feed = RealmBase._get_syndication_feed(
                title=title,
                description=f'Материалы в категории «{title}». {category.note}',
                func_link=lambda self: reverse(CategoryRealm.
                                               get_details_urlname(),
                                               args=[self.category_id]),
                func_items=lambda self: get_in_category(self.category_id),
                cls_name=f'Category{category_id}')
            feed.category_id = category_id

            feeds.append(
                url(fr'^{category_id}/{SYNDICATION_URL_MARKER}/$',
                    feed,
                    name=f'category_{category_id}'))

        _, realm_name_plural = CategoryRealm.get_names()

        return [
            url(fr'^{realm_name_plural}/',
                (feeds, realm_name_plural, cls.SYNDICATION_NAMESPACE))
        ]
Esempio n. 3
0
    def get_syndication_urls(cls):
        """Возвращает url-шаблоны с привязанными сгенерированными представлениями
         для потоков синдикации (RSS) с перечислением новых материалов в категориях.

        :return:
        """
        feeds = []
        tie_model = get_tie_model()
        categories = tie_model.get_linked_objects(by_category=True)

        def get_in_category(category_id):
            """Возвращает объекты из разных областей в указанной категории."""
            linked = tie_model.get_linked_objects(filter_kwargs={'category_id': category_id}, id_only=True)
            result = []
            for model, ids in linked.items():
                result.extend(model.get_actual().filter(id__in=ids)[:SYNDICATION_ITEMS_LIMIT])
            result = sorted(result, key=attrgetter('time_published'), reverse=True)
            return result[:SYNDICATION_ITEMS_LIMIT]

        for category in categories.keys():
            title = category.title
            category_id = category.id
            feed = RealmBase._get_syndication_feed(
                title=title,
                description='Материалы в категории «%s». %s' % (title, category.note),
                func_link=lambda self: reverse(CategoryRealm.get_details_urlname(), args=[self.category_id]),
                func_items=lambda self: get_in_category(self.category_id),
                cls_name='Category%s' % category_id
            )
            feed.category_id = category_id

            feeds.append(
                url(r'^%s/%s/$' % (category_id, SYNDICATION_URL_MARKER), feed, name='category_%s' % category_id))

        _, realm_name_plural = CategoryRealm.get_names()

        return [url(r'^%s/' % realm_name_plural, (feeds, realm_name_plural, cls.SYNDICATION_NAMESPACE))]
Esempio n. 4
0
 def init(cls):
     # Включаем прослушивание сигналов, необходимое для функционировая области.
     tie_model = get_tie_model()
     # url-синдикации будут обновлены в случае добавления/удаления связи сущности с категорией.
     signals.post_save.connect(cls.update_syndication_urls, sender=tie_model)
     signals.post_delete.connect(cls.update_syndication_urls, sender=tie_model)
Esempio n. 5
0
from uuid import uuid4

import pytest
from django.db.utils import IntegrityError
from django.template.base import TemplateSyntaxError
from django.template.context import Context

from sitecats.exceptions import SitecatsLockedCategoryDelete, SitecatsConfigurationError
from sitecats.models import Category, Tie
from sitecats.settings import UNRESOLVED_URL_MARKER
from sitecats.toolbox import CategoryList, get_category_aliases_under, get_tie_model, \
    get_category_model

MODEL_TIE = get_tie_model()
MODEL_CATEGORY = get_category_model()

from sitecats.tests.testapp.models import Comment, Article


@pytest.fixture
def create_comment():
    from sitecats.tests.testapp.models import Comment

    def create_comment_():
        comment = Comment(title='comment%s' % uuid4().hex)
        comment.save()
        return comment

    return create_comment_

Esempio n. 6
0
from uuid import uuid4

import pytest
from django.db.utils import IntegrityError
from django.template.base import TemplateSyntaxError
from django.template.context import Context

from sitecats.exceptions import SitecatsLockedCategoryDelete, SitecatsConfigurationError
from sitecats.models import Category, Tie
from sitecats.settings import UNRESOLVED_URL_MARKER
from sitecats.toolbox import CategoryList, get_category_aliases_under, get_tie_model, \
    get_category_model

MODEL_TIE = get_tie_model()
MODEL_CATEGORY = get_category_model()

from sitecats.tests.testapp.models import Comment, Article


@pytest.fixture
def create_comment():
    from sitecats.tests.testapp.models import Comment

    def create_comment_():
        comment = Comment(title='comment%s' % uuid4().hex)
        comment.save()
        return comment

    return create_comment_