def tidy_submission(submission): submission['posted_at'] = d.iso8601(submission.pop('unixtime')) submission['sub_media'] = api.tidy_all_media(submission['sub_media']) if 'user_media' in submission: submission['owner_media'] = api.tidy_all_media(submission.pop('user_media')) submission.pop('userid', None) subtype = submission.pop('subtype', None) if subtype: submission['subtype'] = m.CATEGORY_PARSABLE_MAP[subtype // 1000 * 1000] contype = submission.pop('contype', None) if contype: submission['type'] = m.CONTYPE_PARSABLE_MAP[contype] submission['rating'] = ratings.CODE_TO_NAME[submission['rating']] submission['owner'] = submission.pop('username') submission['owner_login'] = d.get_sysname(submission['owner']) submission['media'] = submission.pop('sub_media') submitid = 0 if 'submitid' in submission: submitid = submission['submitid'] if 'charid' in submission: submitid = submission['charid'] if submitid > 0: if submission['type'] == "usercollect": linktype = "submission" else: linktype = submission['type'] submission['link'] = d.absolutify_url( "/%s/%d/%s" % (linktype, submitid, slug_for(submission['title']))) return submission
def tidy_submission(submission): submission['posted_at'] = d.iso8601(submission.pop('unixtime')) submission['sub_media'] = api.tidy_all_media(submission['sub_media']) if 'user_media' in submission: submission['owner_media'] = api.tidy_all_media( submission.pop('user_media')) submission.pop('userid', None) subtype = submission.pop('subtype', None) if subtype: submission['subtype'] = m.CATEGORY_PARSABLE_MAP[subtype // 1000 * 1000] contype = submission.pop('contype', None) if contype: submission['type'] = m.CONTYPE_PARSABLE_MAP[contype] submission['rating'] = ratings.CODE_TO_NAME[submission['rating']] submission['owner'] = submission.pop('username') submission['owner_login'] = d.get_sysname(submission['owner']) submission['media'] = submission.pop('sub_media') submitid = 0 if 'submitid' in submission: submitid = submission['submitid'] if 'charid' in submission: submitid = submission['charid'] if submitid > 0: if submission['type'] == "usercollect": linktype = "submission" else: linktype = submission['type'] submission['link'] = d.absolutify_url( "/%s/%d/%s" % (linktype, submitid, slug_for(submission['title'])))
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, }
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']), }
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))), }
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': api.tidy_all_media(fake_media_items( charid, query['userid'], login, query['settings'])), 'tags': searchtag.select(charid=charid), 'type': 'character', 'link': define.absolutify_url( '/character/%d/%s' % (charid, text.slug_for(query['char_name']))), }
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_login( d.get_sysname(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.", }, }) 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']) 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) 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": 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) if submissions: 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) if statistics: statistics.pop('staff_notes') user['statistics'] = statistics if show_statistics else None 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 user
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)