def api_user_gallery_(request): userid = profile.resolve_by_login(request.matchdict['login']) if not userid: raise WeasylError('userRecordMissing') form = request.web_input(since=None, count=0, folderid=0, backid=0, nextid=0) since = None try: if form.since: since = d.parse_iso8601(form.since) count = int(form.count) folderid = int(form.folderid) backid = int(form.backid) nextid = int(form.nextid) except ValueError: raise HTTPUnprocessableEntity(json=_ERROR_UNEXPECTED) else: count = min(count or 100, 100) submissions = submission.select_list( request.userid, d.get_rating(request.userid), count + 1, otherid=userid, folderid=folderid, backid=backid, nextid=nextid) backid, nextid = d.paginate(submissions, backid, nextid, count, 'submitid') ret = [] for sub in submissions: if since is not None and since >= sub['unixtime']: break tidy_submission(sub) ret.append(sub) return { 'backid': backid, 'nextid': nextid, 'submissions': ret, }
def api_user_gallery_(request): userid = profile.resolve_by_login(d.get_sysname(request.matchdict['login'])) if not userid: raise WeasylError('userRecordMissing') form = request.web_input(since=None, count=0, folderid=0, backid=0, nextid=0) since = None try: if form.since: since = d.parse_iso8601(form.since) count = int(form.count) folderid = int(form.folderid) backid = int(form.backid) nextid = int(form.nextid) except ValueError: raise HTTPUnprocessableEntity(json=_ERROR_UNEXPECTED) else: count = min(count or 100, 100) submissions = submission.select_list( request.userid, d.get_rating(request.userid), count + 1, otherid=userid, folderid=folderid, backid=backid, nextid=nextid) backid, nextid = d.paginate(submissions, backid, nextid, count, 'submitid') ret = [] for sub in submissions: if since is not None and since >= sub['unixtime']: break tidy_submission(sub) ret.append(sub) return { 'backid': backid, 'nextid': nextid, 'submissions': ret, }
def api_useravatar_(request): form = request.web_input(username="") userid = profile.resolve_by_login(form.username) if userid: media_items = media.get_user_media(userid) return { "avatar": d.absolutify_url(media_items['avatar'][0]['display_url']), } raise WeasylError('userRecordMissing')
def api_useravatar_(request): form = request.web_input(username="") userid = profile.resolve_by_login(d.get_sysname(form.username)) if userid: media_items = media.get_user_media(userid) return { "avatar": d.absolutify_url(media_items['avatar'][0]['display_url']), } raise WeasylError('userRecordMissing')
def POST(self): # Retrieve form data form = web.input(username="") userid = profile.resolve_by_login(form.username) # Return JSON response if userid: media_items = media.get_user_media(userid) return json.dumps({ "avatar": d.absolutify_url(media_items['avatar'][0]['display_url']), }) raise WeasylError('userRecordMissing')
def profile_media_(request): name = request.matchdict['name'] link_type = request.matchdict['link_type'] userid = profile.resolve_by_login(name) media_items = media.get_user_media(userid) if not media_items.get(link_type): raise httpexceptions.HTTPNotFound() return Response(headerlist=[ ( 'X-Accel-Redirect', str(media_items[link_type][0]['file_url']), ), ( 'Cache-Control', 'max-age=0', ), ])
def GET(self, login): userid = profile.resolve_by_login(login) if not userid: web.ctx.status = '404 Not Found' raise WeasylError('userRecordMissing') form = web.input(since=None, count=0, folderid=0, backid=0, nextid=0) since = None try: if form.since: since = d.parse_iso8601(form.since) count = int(form.count) folderid = int(form.folderid) backid = int(form.backid) nextid = int(form.nextid) except ValueError: web.ctx.status = '422 Unprocessable Entity' return json.dumps(_ERROR_UNEXPECTED) else: count = min(count or 100, 100) submissions = submission.select_list( self.user_id, d.get_rating(self.user_id), count + 1, otherid=userid, folderid=folderid, backid=backid, nextid=nextid) backid, nextid = d.paginate(submissions, backid, nextid, count, 'submitid') ret = [] for sub in submissions: if since is not None and since >= sub['unixtime']: break tidy_submission(sub) ret.append(sub) return json.dumps({ 'backid': backid, 'nextid': nextid, 'submissions': ret, })
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)