Example #1
0
def select_view_api(userid, journalid, anyway=False, increment_views=False):
    rating = d.get_rating(userid)

    journal = _select_journal_and_check(
        userid, journalid,
        rating=rating, ignore=anyway, anyway=anyway, increment_views=increment_views)

    return {
        'journalid': journalid,
        'title': journal['title'],
        'owner': journal['username'],
        'owner_login': d.get_sysname(journal['username']),
        'owner_media': api.tidy_all_media(
            media.get_user_media(journal['userid'])),
        'content': text.markdown(journal['content']),
        'tags': searchtag.select(journalid=journalid),
        'link': d.absolutify_url('/journal/%d/%s' % (journalid, text.slug_for(journal['title']))),
        'type': 'journal',
        'rating': ratings.CODE_TO_NAME[journal['rating']],
        'views': journal['page_views'],
        'favorites': favorite.count(journalid, 'journal'),
        'comments': comment.count(journalid, 'journal'),
        'favorited': favorite.check(userid, journalid=journalid),
        'friends_only': 'f' in journal['settings'],
        'posted_at': d.iso8601(journal['unixtime']),
    }
Example #2
0
def select_view_api(userid, charid, anyway=False, increment_views=False):
    rating = define.get_rating(userid)

    query = _select_character_and_check(
        userid, charid, rating=rating, ignore=anyway,
        anyway=anyway, increment_views=increment_views)

    login = define.get_sysname(query.username)

    return {
        'charid': charid,
        'owner': query.username,
        'owner_login': login,
        'owner_media': api.tidy_all_media(media.get_user_media(query.userid)),
        'posted_at': define.iso8601(query.unixtime),
        'title': query.char_name,
        'age': query.age,
        'gender': query.gender,
        'height': query.height,
        'weight': query.weight,
        'species': query.species,
        'content': text.markdown(query.content),
        'rating': ratings.CODE_TO_NAME[query.rating],
        'favorited': favorite.check(userid, charid=charid),
        'views': query.page_views,
        'friends_only': 'f' in query.settings,
        'favorites': favorite.count(charid, 'character'),
        'comments': comment.count(charid, 'character'),
        'media': fake_media_items(charid, query.userid, login, query.settings, absolutify=True),
        'tags': searchtag.select(charid=charid),
        'type': 'character',
        'link': define.absolutify_url('/character/%d/%s' % (charid, text.slug_for(query.char_name))),
    }
Example #3
0
 def __json__(self, request):
     return {
         'id': self.commentid,
         'poster': self.poster,
         'children': self.subcomments,
         'content': markdown(self.content),
         'posted_at': self.unixtime,
     }
Example #4
0
def select_view_api(userid, submitid, anyway=False, increment_views=False):
    rating = d.get_rating(userid)
    db = d.connect()
    sub = db.query(orm.Submission).get(submitid)
    if sub is None or 'hidden' in sub.settings:
        raise WeasylError("submissionRecordMissing")
    sub_rating = sub.rating.code
    if 'friends-only' in sub.settings and not frienduser.check(userid, sub.userid):
        raise WeasylError("submissionRecordMissing")
    elif sub_rating > rating and userid != sub.userid:
        raise WeasylError("RatingExceeded")
    elif not anyway and ignoreuser.check(userid, sub.userid):
        raise WeasylError("UserIgnored")
    elif not anyway and blocktag.check(userid, submitid=submitid):
        raise WeasylError("TagBlocked")

    description = sub.content
    embedlink = None
    if 'embedded-content' in sub.settings:
        embedlink, _, description = description.partition('\n')
    elif 'gdocs-embed' in sub.settings:
        embedlink = sub.google_doc_embed.embed_url

    views = sub.page_views
    if increment_views and d.common_view_content(userid, submitid, 'submit'):
        views += 1

    return {
        'submitid': submitid,
        'title': sub.title,
        'owner': sub.owner.profile.username,
        'owner_login': sub.owner.login_name,
        'owner_media': api.tidy_all_media(media.get_user_media(sub.userid)),
        'media': api.tidy_all_media(media.get_submission_media(submitid)),
        'description': text.markdown(description),
        'embedlink': embedlink,
        'folderid': sub.folderid,
        'folder_name': sub.folder.title if sub.folderid else None,
        'posted_at': d.iso8601(sub.unixtime),
        'tags': searchtag.select(submitid=submitid),
        'link': d.absolutify_url("/submission/%d/%s" % (submitid, text.slug_for(sub.title))),

        'type': 'submission',
        'subtype': m.CATEGORY_PARSABLE_MAP[sub.subtype // 1000 * 1000],
        'rating': sub.rating.name,

        'views': views,
        'favorites': favorite.count(submitid),
        'comments': comment.count(submitid),
        'favorited': favorite.check(userid, submitid=submitid),
        'friends_only': 'friends-only' in sub.settings,
    }
Example #5
0
def errorpage(userid, code=None, links=None,
              unexpected=None, request_id=None, **extras):
    if links is None:
        links = []

    if code is None:
        code = errorcode.unexpected

        if unexpected:
            code = "".join([code, " The error code associated with this condition "
                                  "is '", unexpected, "'."])
    code = text.markdown(code)

    return webpage(userid, "error/error.html", [code, links, request_id], **extras)
Example #6
0
def select_view_api(userid, journalid, anyway=False, increment_views=False):
    rating = d.get_rating(userid)

    journal = _select_journal_and_check(userid, journalid,
        rating=rating, ignore=anyway, anyway=anyway, increment_views=increment_views)

    content = files.read(files.make_resource(userid, journalid, 'journal/submit'))

    return {
        'journalid': journalid,
        'title': journal.title,
        'owner': journal.username,
        'owner_login': d.get_sysname(journal.username),
        'content': text.markdown(content),
        'tags': searchtag.select(journalid=journalid),
        'link': d.absolutify_url('/journal/%d/%s' % (journalid, text.slug_for(journal.title))),
        'type': 'journal',
        'rating': ratings.CODE_TO_NAME[journal.rating],
        'views': journal.page_views,
        'favorites': favorite.count(journalid, 'journal'),
        'comments': comment.count(journalid, 'journal'),
        'favorited': favorite.check(userid, journalid=journalid),
        'friends_only': 'f' in journal.settings,
    }
Example #7
0
def test_markdown_no_user_links_in_code():
    assert markdown('<code><~spam></code>') == '<p><code>&lt;~spam&gt;</code></p>'
Example #8
0
def test_markdown_no_user_links_in_links():
    assert markdown('<a><~spam></a>') == '<p><a>&lt;~spam&gt;</a></p>'
Example #9
0
def test_markdown_basic_user_linking(target, expected):
    assert markdown(target) == '<p>%s</p>' % (expected,)
Example #10
0
def test_markdown_user_linking_twice_in_tail_with_more_text_betweeen(target, expected):
    assert markdown('<em>eggs</em>%s spam %s' % (target, target)) == (
        '<p><em>eggs</em>%s spam %s</p>' % (expected, expected))
Example #11
0
def test_markdown_no_user_links_in_pre():
    assert markdown('<pre><~spam></pre>') == '<pre><p>&lt;~spam&gt;</p></pre>'
Example #12
0
def test_tag_stripping():
    assert markdown(u"<button>text</button>") == u"<p>text</p>"
    assert markdown(u"<button><button>text</button></button>") == u"<p>text</p>"
    assert markdown(u"<!--[if IE]><script>alert(1)</script><![endif]-->") == u""
Example #13
0
def test_markdown_user_linking_with_underscore():
    assert markdown(
        '<~hello_world>') == '<p><a href="/~helloworld">hello_world</a></p>'
Example #14
0
def test_markdown_unordered_list():
    assert markdown('- five\n- six\n- seven') == '<ul><li>five</li><li>six</li><li>seven</li></ul>'
Example #15
0
def test_markdown_escaped_user_link():
    assert markdown('\\\\<~spam>') == '<p>&lt;~spam&gt;</p>'
Example #16
0
def test_markdown_multi_element():
    assert markdown('one\n\ntwo') == '<p>one</p><p>two</p>'
Example #17
0
File: api.py Project: TheWug/weasyl
def api_user_view_(request):
    # Helper functions for this view.
    def convert_commission_price(value, options):
        return d.text_price_symbol(options) + d.text_price_amount(value)

    def convert_commission_setting(target):
        if target == "o":
            return "open"
        elif target == "s":
            return "sometimes"
        elif target == "f":
            return "filled"
        elif target == "c":
            return "closed"
        else:
            return None

    userid = request.userid
    otherid = profile.resolve_by_username(request.matchdict['login'])
    user = profile.select_profile(otherid)

    rating = d.get_rating(userid)
    o_config = user.pop('config')
    o_settings = user.pop('settings')

    if not otherid and "h" in o_config:
        raise HTTPForbidden(
            json={
                "error": {
                    "code": 200,
                    "text": "Profile hidden from unlogged users.",
                },
            })

    del user['userid']
    del user['commish_slots']

    user['created_at'] = d.iso8601(user.pop('unixtime'))
    user['media'] = api.tidy_all_media(user.pop('user_media'))
    user['login_name'] = d.get_sysname(user['username'])
    user['profile_text'] = markdown(user['profile_text'])

    user['folders'] = folder.select_list(otherid)

    commissions = {
        "details": None,
        "price_classes": None,
        "commissions": convert_commission_setting(o_settings[0]),
        "trades": convert_commission_setting(o_settings[1]),
        "requests": convert_commission_setting(o_settings[2])
    }

    commission_list = commishinfo.select_list(otherid)
    commissions['details'] = commission_list['content']

    if len(commission_list['class']) > 0:
        classes = list()
        for cclass in commission_list['class']:
            commission_class = {"title": cclass['title']}

            if len(commission_list['price']) > 0:
                prices = list()
                for cprice in (i for i in commission_list['price']
                               if i['classid'] == cclass['classid']):
                    if 'a' in cprice['settings']:
                        ptype = 'additional'
                    else:
                        ptype = 'base'

                    price = {
                        "title":
                        cprice['title'],
                        "price_min":
                        convert_commission_price(cprice['amount_min'],
                                                 cprice['settings']),
                        "price_max":
                        convert_commission_price(cprice['amount_min'],
                                                 cprice['settings']),
                        'price_type':
                        ptype
                    }
                    prices.append(price)
                commission_class['prices'] = prices

            classes.append(commission_class)
        commissions['price_classes'] = classes

    user['commission_info'] = commissions

    user['relationship'] = profile.select_relation(userid,
                                                   otherid) if userid else None

    if 'O' in o_config:
        submissions = collection.select_list(userid,
                                             rating,
                                             11,
                                             otherid=otherid)
        more_submissions = 'collections'
        featured = None
    elif 'A' in o_config:
        submissions = character.select_list(userid,
                                            rating,
                                            11,
                                            otherid=otherid)
        more_submissions = 'characters'
        featured = None
    else:
        submissions = submission.select_list(userid,
                                             rating,
                                             11,
                                             otherid=otherid,
                                             profile_page_filter=True)
        more_submissions = 'submissions'
        featured = submission.select_featured(userid, otherid, rating)

    for sub in submissions:
        tidy_submission(sub)

    user['recent_submissions'] = submissions
    user['recent_type'] = more_submissions

    if featured:
        tidy_submission(featured)

    user['featured_submission'] = featured

    statistics, show_statistics = profile.select_statistics(otherid)
    del statistics['staff_notes']
    user['statistics'] = statistics if show_statistics else None

    user_info = profile.select_userinfo(otherid, config=o_config)
    if not user_info['show_age']:
        user_info['age'] = None
    del user_info['show_age']
    del user_info['birthday']
    user_info['location'] = user_info.pop('country')
    user['user_info'] = user_info
    user['link'] = d.absolutify_url("/~" + user['login_name'])

    return user
Example #18
0
def test_markdown_user_linking_in_markdown(target, expected):
    assert markdown('*%s*' % (target, )) == '<p><em>%s</em></p>' % (expected, )
Example #19
0
def select_view_api(userid, submitid, anyway=False, increment_views=False):
    rating = d.get_rating(userid)
    db = d.connect()
    sub = db.query(orm.Submission).get(submitid)
    if sub is None or 'hidden' in sub.settings:
        raise WeasylError("submissionRecordMissing")
    sub_rating = sub.rating.code
    if 'friends-only' in sub.settings and not frienduser.check(
            userid, sub.userid):
        raise WeasylError("submissionRecordMissing")
    elif sub_rating > rating and userid != sub.userid:
        raise WeasylError("RatingExceeded")
    elif not anyway and ignoreuser.check(userid, sub.userid):
        raise WeasylError("UserIgnored")
    elif not anyway and blocktag.check(userid, submitid=submitid):
        raise WeasylError("TagBlocked")

    description = sub.content
    embedlink = None
    if 'embedded-content' in sub.settings:
        embedlink, _, description = description.partition('\n')
    elif 'gdocs-embed' in sub.settings:
        embedlink = sub.google_doc_embed.embed_url

    views = sub.page_views
    if increment_views and d.common_view_content(userid, submitid, 'submit'):
        views += 1

    return {
        'submitid':
        submitid,
        'title':
        sub.title,
        'owner':
        sub.owner.profile.username,
        'owner_login':
        sub.owner.login_name,
        'owner_media':
        api.tidy_all_media(media.get_user_media(sub.userid)),
        'media':
        api.tidy_all_media(media.get_submission_media(submitid)),
        'description':
        text.markdown(description),
        'embedlink':
        embedlink,
        'folderid':
        sub.folderid,
        'folder_name':
        sub.folder.title if sub.folderid else None,
        'posted_at':
        d.iso8601(sub.unixtime),
        'tags':
        searchtag.select(submitid=submitid),
        'link':
        d.absolutify_url("/submission/%d/%s" %
                         (submitid, text.slug_for(sub.title))),
        'type':
        'submission',
        'subtype':
        m.CATEGORY_PARSABLE_MAP[sub.subtype // 1000 * 1000],
        'rating':
        sub.rating.name,
        'views':
        views,
        'favorites':
        favorite.count(submitid),
        'comments':
        comment.count(submitid),
        'favorited':
        favorite.check(userid, submitid=submitid),
        'friends_only':
        'friends-only' in sub.settings,
    }
Example #20
0
def test_markdown_multi_element():
    assert markdown('one\n\ntwo') == '<p>one</p><p>two</p>'
Example #21
0
def test_markdown_image_replacement():
    assert markdown(
        '![example](http://example)'
    ) == '<p><a href="http://example" rel="nofollow">example</a></p>'
Example #22
0
def test_markdown_image_replacement():
    assert markdown('![example](http://example)') == '<p><a href="http://example" rel="nofollow">example</a></p>'
Example #23
0
def test_forum_whitelist():
    assert markdown('https://forums.weasyl.com/foo') == (
        '<p><a href="https://forums.weasyl.com/foo">https://forums.weasyl.com/foo</a></p>'
    )
Example #24
0
def test_markdown_respect_ordered_list_start():
    assert markdown('5. five\n6. six\n7. seven') == '<ol start="5"><li>five</li><li>six</li><li>seven</li></ol>'
Example #25
0
def test_markdown_unordered_list():
    assert markdown('- five\n- six\n- seven'
                    ) == '<ul><li>five</li><li>six</li><li>seven</li></ul>'
Example #26
0
def test_markdown_external_link_noreferrer(target, expected):
    assert markdown(target) == u"<p>%s</p>" % (expected,)
Example #27
0
def test_markdown_regular_ordered_list_start():
    assert markdown(
        '1. five\n1. six\n1. seven'
    ) == '<ol start="1"><li>five</li><li>six</li><li>seven</li></ol>'
Example #28
0
def test_markdown_external_link_noreferrer(target, expected):
    assert markdown(target) == u"<p>%s</p>" % (expected, )
Example #29
0
def test_markdown_respect_ordered_list_start():
    assert markdown(
        '5. five\n6. six\n7. seven'
    ) == '<ol start="5"><li>five</li><li>six</li><li>seven</li></ol>'
Example #30
0
def test_markdown_user_linking_twice_in_tail(target, expected):
    assert markdown('<em>eggs</em>%s %s' % (target, target)) == (
        '<p><em>eggs</em>%s %s</p>' % (expected, expected))
Example #31
0
def test_markdown_basic_user_linking(target, expected):
    assert markdown(target) == '<p>%s</p>' % (expected, )
Example #32
0
def test_markdown_user_linking_in_markdown(target, expected):
    assert markdown('*%s*' % (target,)) == '<p><em>%s</em></p>' % (expected,)
Example #33
0
def test_markdown_user_linking_in_tail(target, expected):
    assert markdown('<em>eggs</em>%s' %
                    (target, )) == '<p><em>eggs</em>%s</p>' % (expected, )
Example #34
0
def test_markdown_no_user_links_in_pre():
    assert markdown('<pre><~spam></pre>') == '<pre><p>&lt;~spam&gt;</p></pre>'
Example #35
0
def test_markdown_user_linking_twice_in_tag(target, expected):
    assert markdown(
        '<em>%s %s</em>' %
        (target, target)) == '<p><em>%s %s</em></p>' % (expected, expected)
Example #36
0
def test_markdown_escaped_user_link():
    assert markdown('\\\\<~spam>') == '<p>&lt;~spam&gt;</p>'
Example #37
0
def test_markdown_user_linking_twice_in_tail_with_more_text_betweeen(
        target, expected):
    assert markdown('<em>eggs</em>%s spam %s' %
                    (target, target)) == ('<p><em>eggs</em>%s spam %s</p>' %
                                          (expected, expected))
Example #38
0
def test_markdown_user_linking_with_underscore():
    assert markdown('<~hello_world>') == '<p><a href="/~helloworld">hello_world</a></p>'
Example #39
0
def test_markdown_strikethrough():
    assert markdown(u"~~test~~") == u"<p><del>test</del></p>"
Example #40
0
def test_forum_whitelist():
    assert markdown('https://forums.weasyl.com/foo') == (
        '<p><a href="https://forums.weasyl.com/foo">https://forums.weasyl.com/foo</a></p>')
Example #41
0
def test_tag_stripping():
    assert markdown(u"<button>text</button>") == u"<p>text</p>"
    assert markdown(
        u"<button><button>text</button></button>") == u"<p>text</p>"
    assert markdown(
        u"<!--[if IE]><script>alert(1)</script><![endif]-->") == u""
Example #42
0
def test_markdown_regular_ordered_list_start():
    assert markdown('1. five\n1. six\n1. seven') == '<ol start="1"><li>five</li><li>six</li><li>seven</li></ol>'
Example #43
0
def test_markdown_strikethrough():
    assert markdown(u"~~test~~") == u"<p><del>test</del></p>"
Example #44
0
File: api.py Project: 0x15/weasyl
    def GET(self, login):
        userid = self.user_id
        otherid = profile.resolve_by_login(login)
        user = profile.select_profile(otherid)

        rating = d.get_rating(userid)
        u_config = d.get_config(userid)
        o_config = user.pop('config')
        o_settings = user.pop('settings')

        if not otherid and "h" in o_config:
            return json.dumps({
                "error": {
                    "code": 200,
                    "text": "Profile hidden from unlogged users."
                }})

        user.pop('userid', None)
        user.pop('commish_slots', None)

        user['created_at'] = d.iso8601(user.pop('unixtime'))
        user['media'] = api.tidy_all_media(user.pop('user_media'))
        user['login_name'] = d.get_sysname(user['username'])
        user['profile_text'] = markdown(user['profile_text'])

        folders = folder.select_list(otherid, "api/all")
        if folders:
            old_folders = folders
            folders = list()
            for fldr in (i for i in old_folders if 'parentid' not in i):
                newfolder = {
                    "folder_id": fldr['folderid'],
                    "title": fldr['title']
                }

                if fldr['haschildren']:
                    subfolders = list()
                    for sub in (i for i in old_folders if 'parentid' in i and i['parentid'] == fldr['folderid']):
                        subfolders.append({
                            "folder_id": sub['folderid'],
                            "title": sub['title']
                        })

                    newfolder['subfolders'] = subfolders

                folders.append(newfolder)

        user['folders'] = folders

        commissions = {
            "details": None,
            "price_classes": None,
            "commissions": self.convert_commission_setting(o_settings[0]),
            "trades": self.convert_commission_setting(o_settings[1]),
            "requests": self.convert_commission_setting(o_settings[2])
        }

        commission_list = commishinfo.select_list(otherid)
        if commission_list:
            commissions['details'] = commission_list['content']

            if len(commission_list['class']) > 0:
                classes = list()
                for cclass in commission_list['class']:
                    commission_class = {
                        "title": cclass['title']
                    }

                    if len(commission_list['price']) > 0:
                        prices = list()
                        for cprice in (i for i in commission_list['price'] if i['classid'] == cclass['classid']):
                            if 'a' in cprice['settings']:
                                ptype = 'additional'
                            else:
                                ptype = 'base'

                            price = {
                                "title": cprice['title'],
                                "price_min": self.convert_commission_price(cprice['amount_min'], cprice['settings']),
                                "price_max": self.convert_commission_price(cprice['amount_min'], cprice['settings']),
                                'price_type': ptype
                            }
                            prices.append(price)
                        commission_class['prices'] = prices

                    classes.append(commission_class)
                commissions['price_classes'] = classes

        user['commission_info'] = commissions

        user['relationship'] = profile.select_relation(userid, otherid) if userid else None

        if 'O' in o_config:
            submissions = collection.select_list(
                userid, rating, 11, otherid=otherid, options=["cover"], config=u_config)
            more_submissions = 'collections'
            featured = None
        elif 'A' in o_config:
            submissions = character.select_list(
                userid, rating, 11, otherid=otherid, options=["cover"], config=u_config)
            more_submissions = 'characters'
            featured = None
        else:
            submissions = submission.select_list(
                userid, rating, 11, otherid=otherid, options=["cover"], config=u_config,
                profile_page_filter=True)
            more_submissions = 'submissions'
            featured = submission.select_featured(userid, otherid, rating)

        if submissions:
            submissions = map(tidy_submission, submissions)

        user['recent_submissions'] = submissions
        user['recent_type'] = more_submissions

        if featured:
            featured = tidy_submission(featured)

        user['featured_submission'] = featured

        statistics = profile.select_statistics(otherid)
        if statistics:
            statistics.pop('staff_notes')
        user['statistics'] = statistics

        user_info = profile.select_userinfo(otherid)
        if user_info:
            if not user_info['show_age']:
                user_info['age'] = None
            user_info.pop('show_age', None)
            user_info.pop('birthday', None)
            user_info['location'] = user_info.pop('country', None)
        user['user_info'] = user_info
        user['link'] = d.absolutify_url("/~" + user['login_name'])

        return json.dumps(user)
Example #45
0
def test_markdown_no_user_links_in_code():
    assert markdown(
        '<code><~spam></code>') == '<p><code>&lt;~spam&gt;</code></p>'
Example #46
0
def markdown_filter(target):
    return Markup(markdown(target))
Example #47
0
def test_markdown_no_user_links_in_links():
    assert markdown('<a><~spam></a>') == '<p><a>&lt;~spam&gt;</a></p>'