Exemplo n.º 1
0
def _post_serializer(obj, request):
    """Serialize :class:`fanboi2.models.Post` into a :type:`dict`.

    :param obj: A :class:`fanboi2.models.Post` object.
    :param request: A :class:`pyramid.request.Request` object.

    :type obj: fanboi2.models.Post
    :type request: pyramid.request.Request
    :rtype: dict
    """
    result = {
        'type': 'post',
        'id': obj.id,
        'body': obj.body,
        'body_formatted': format_post(None, request, obj),
        'bumped': obj.bumped,
        'created_at': obj.created_at,
        'ident': obj.ident,
        'name': obj.name,
        'number': obj.number,
        'topic_id': obj.topic_id,
        'path': request.route_path(
            'api_topic_posts_scoped',
            topic=obj.topic_id,
            query=obj.number,
        ),
    }
    if request.params.get('topic'):
        result['topic'] = obj.topic
    return result
Exemplo n.º 2
0
 def test_format_post_shorten(self):
     from fanboi2.helpers.formatters import format_post
     from markupsafe import Markup
     request = self._makeRequest()
     config = self._makeConfig(request)
     config.add_route('topic_scoped', '/{board}/{topic}/{query}')
     board = self._makeBoard(title="Foobar", slug="foobar")
     topic = self._makeTopic(board=board, title="Hogehogehogehogehoge")
     post = self._makePost(topic=topic, body="Hello\nworld")
     self.assertEqual(format_post(None, request, post, shorten=5),
                      Markup("<p>Hello</p>\n<p class=\"shortened\">"
                             "Post shortened. <a href=\"/foobar/1/1-\" "
                             "class=\"anchor\">See full post</a>.</p>"))
Exemplo n.º 3
0
def _post_serializer(obj, request):
    """Serialize :class:`fanboi2.models.Post` into a :type:`dict`.

    :param obj: A :class:`fanboi2.models.Post` object.
    :param request: A :class:`pyramid.request.Request` object.

    :type obj: fanboi2.models.Post
    :type request: pyramid.request.Request
    :rtype: dict
    """
    result = {
        'type':
        'post',
        'id':
        obj.id,
        'body':
        obj.body,
        'body_formatted':
        format_post(None, request, obj),
        'bumped':
        obj.bumped,
        'created_at':
        obj.created_at,
        'ident':
        obj.ident,
        'name':
        obj.name,
        'number':
        obj.number,
        'topic_id':
        obj.topic_id,
        'path':
        request.route_path(
            'api_topic_posts_scoped',
            topic=obj.topic_id,
            query=obj.number,
        ),
    }
    if request.params.get('topic'):
        result['topic'] = obj.topic
    return result
Exemplo n.º 4
0
 def test_format_post(self):
     from fanboi2.helpers.formatters import format_post
     from markupsafe import Markup
     request = self._makeRequest()
     config = self._makeConfig(request)
     config.add_route('board', '/{board}')
     config.add_route('topic_scoped', '/{board}/{topic}/{query}')
     board = self._makeBoard(title="Foobar", slug="foobar")
     topic = self._makeTopic(board=board, title="Hogehogehogehogehoge")
     post1 = self._makePost(topic=topic, body="Hogehoge\nHogehoge")
     post2 = self._makePost(topic=topic, body=">>1")
     post3 = self._makePost(topic=topic, body=">>1-2\nHoge")
     post4 = self._makePost(topic=topic, body=">>>/demo")
     post5 = self._makePost(topic=topic, body=">>>/demo/123")
     post6 = self._makePost(topic=topic, body=">>>/demo/123/100-")
     post7 = self._makePost(topic=topic, body=">>>/demo/123/100-/")
     post8 = self._makePost(topic=topic, body=">>>/demo/123-/100-/")
     post9 = self._makePost(topic=topic, body=">>>/demo/\n>>>/demo/1/")
     post10 = self._makePost(topic=topic, body=">>>/demo//100-/")
     post11 = self._makePost(topic=topic, body=">>>//123-/100-/")
     tests = (
         (post1, "<p>Hogehoge<br>Hogehoge</p>"),
         (post2, "<p><a data-anchor-topic=\"1\" " +
                 "data-anchor=\"1\" " +
                 "href=\"/foobar/1/1\" " +
                 "class=\"anchor\">&gt;&gt;1</a></p>"),
         (post3, "<p><a data-anchor-topic=\"1\" " +
                 "data-anchor=\"1-2\" " +
                 "href=\"/foobar/1/1-2\" " +
                 "class=\"anchor\">&gt;&gt;1-2</a><br>Hoge</p>"),
         (post4, "<p><a data-anchor-board=\"demo\" " +
                 "data-anchor-topic=\"\" " +
                 "data-anchor=\"\" " +
                 "href=\"/demo\" " +
                 "class=\"anchor\">&gt;&gt;&gt;/demo</a></p>"),
         (post5, "<p><a data-anchor-board=\"demo\" " +
                 "data-anchor-topic=\"123\" " +
                 "data-anchor=\"\" " +
                 "href=\"/demo/123/recent\" " +
                 "class=\"anchor\">&gt;&gt;&gt;/demo/123</a></p>"),
         (post6, "<p><a data-anchor-board=\"demo\" " +
                 "data-anchor-topic=\"123\" " +
                 "data-anchor=\"100-\" " +
                 "href=\"/demo/123/100-\" " +
                 "class=\"anchor\">&gt;&gt;&gt;/demo/123/100-</a></p>"),
         (post7, "<p><a data-anchor-board=\"demo\" " +
                 "data-anchor-topic=\"123\" " +
                 "data-anchor=\"100-\" " +
                 "href=\"/demo/123/100-\" " +
                 "class=\"anchor\">&gt;&gt;&gt;/demo/123/100-/</a></p>"),
         (post8, "<p><a data-anchor-board=\"demo\" " +
                 "data-anchor-topic=\"123\" " +
                 "data-anchor=\"\" " +
                 "href=\"/demo/123/recent\" " +
                 "class=\"anchor\">&gt;&gt;&gt;/demo/123</a>-/100-/</p>"),
         (post9, "<p><a data-anchor-board=\"demo\" " +
                 "data-anchor-topic=\"\" " +
                 "data-anchor=\"\" " +
                 "href=\"/demo\" " +
                 "class=\"anchor\">&gt;&gt;&gt;/demo/</a><br>" +
                 "<a data-anchor-board=\"demo\" " +
                 "data-anchor-topic=\"1\" " +
                 "data-anchor=\"\" " +
                 "href=\"/demo/1/recent\" " +
                 "class=\"anchor\">&gt;&gt;&gt;/demo/1/</a></p>"),
         (post10, "<p><a data-anchor-board=\"demo\" " +
                  "data-anchor-topic=\"\" " +
                  "data-anchor=\"\" " +
                  "href=\"/demo\" " +
                  "class=\"anchor\">&gt;&gt;&gt;/demo/</a>/100-/</p>"),
         (post11, "<p>&gt;&gt;&gt;//123-/100-/</p>")
     )
     for source, target in tests:
         self.assertEqual(format_post(None, request, source), Markup(target))