def POST(self, pin_id): form = self.get_form() if form.validates(): web.header('Content-Type', 'application/json') sess = session.get_session() auth.force_login(sess) db = database.get_db() price = form.d.price or None pin_utils.update_base_pin_information(db, pin_id, sess.user_id, form.d.title, form.d.description, form.d.link, form.d.tags, price, form.d.product_url, form.d.price_range) categories = [int(c) for c in form.d.categories.split(',')] pin_utils.update_pin_into_categories(db, pin_id, categories) if form.d.imageurl: try: image_filename, _ = urllib.urlretrieve(form.d.imageurl) pin_utils.update_pin_images(db, pin_id, sess.user_id, image_filename) except Exception as e: logger.error( 'Could not save the image for pin: {} from URL: {}'. format(pin_id, form.d.imageurl), exc_info=True) return json.dumps({'status': str(e)}) return json.dumps({'status': 'ok'}) else: return web.notfound()
def GET(self): sess = session.get_session() auth.force_login(sess) params = web.input(tag='') sess['pin_loaders_tag_filter'] = params.tag sess['reset_page_offset'] = True return ''
def GET(self, pin_id=None): sess = session.get_session() auth.force_login(sess) db = database.get_db() results = db.query('''select pins.* from pins where pins.id=$id and user_id=$user_id''', vars={ 'id': pin_id, 'user_id': sess.user_id }) for row in results: web.header('Content-Type', 'application/json') row.price = str(row.price) row.price_range_repr = '$' * row.price_range if row.price_range < 5 else '$$$$+' results = db.select( tables=['categories', 'pins_categories'], where= 'categories.id = pins_categories.category_id and pins_categories.pin_id=$id', vars={'id': pin_id}) row['categories'] = [{ 'id': catrow.id, 'name': catrow.name } for catrow in results] results = db.where(table='tags', pin_id=pin_id) tags = [r.tags for r in results] row['tags'] = tags return json.dumps(row) raise web.notfound()
def POST(self, name=None): """ Updates social media accounts. """ sess = session.get_session() force_login(sess) logintoken = convert_to_logintoken(sess.user_id) form = self._form() if not form.validates(): return 'bad input' if logintoken: data = { "logintoken": logintoken, "csid_from_client": "", "facebook": form.d.facebook, "linkedin": form.d.linkedin, "twitter": form.d.twitter, "gplus": form.d.gplus } data = api_request("api/profile/userinfo/update", data=data) if data['status'] == 200: raise web.seeother('/social-media') else: mgs = data['error_code'] raise web.seeother('/profile?msg=%s' % msg)
def POST(self): sess = session.get_session() auth.force_login(sess) form = self._form() if form.validates(): pin_id_list = list(set([int(x) for x in form.d.ids.split(',')])) pins_to_delte = ','.join(str(x) for x in pin_id_list) category_id_list = [int(x) for x in form.d.categories.split(',')] values_to_insert = [{ 'pin_id': pin_id, 'category_id': category_id } for pin_id, category_id in itertools.product( pin_id_list, category_id_list)] db = database.get_db() transaction = db.transaction() try: db.delete(table='pins_categories', where='pin_id in ({})'.format(pins_to_delte)) db.multiple_insert(tablename='pins_categories', values=values_to_insert) transaction.commit() return json.dumps({'status': 'ok'}) except Exception: logger.error('Failed to update categories', exc_info=True) transaction.rollback() return json.dumps({'status': 'error'}) else: return json.dumps({'status': 'error'})
def POST(self, name=None): """ Responsible for handing profile editing calls """ sess = session.get_session() force_login(sess) logintoken = convert_to_logintoken(sess.user_id) form = self._form() if not form.validates(): return 'you need to fill in everything' if logintoken: data = { "name": form.d.name, "about": form.d.about, "website": form.d.website, "country": form.d.country, "hometown": form.d.hometown, "city": form.d.city, "csid_from_client": 'None', "logintoken": logintoken } data = api_request("api/profile/userinfo/update", "POST", data) if data['status'] == 200: raise web.seeother('/profile') else: msg = data['error_code'] raise web.seeother('/profile?msg=%s' % msg) get_input = web.input(_method='get') if 'user_profile' in get_input: raise web.seeother('/%s?editprofile=1' % user.username)
def GET(self): sess = session.get_session() auth.force_login(sess) params = web.input(size=PIN_LIST_LIMIT) size = int(params.size) sess['pin_loaders_item_added_page_size'] = size sess['reset_page_offset'] = True return ''
def GET(self): sess = session.get_session() auth.force_login(sess) params = web.input(category='0') if params.category: sess['pin_loaders_category_filter'] = int(params.category) else: sess['pin_loaders_category_filter'] = 0 sess['reset_page_offset'] = True return ''
def DELETE(self, pin_id): try: sess = session.get_session() auth.force_login(sess) db = database.get_db() pin_utils.delete_pin_from_db(db, pin_id, sess.user_id) web.header('Content-Type', 'application/json') return json.dumps({'status': 'ok'}) except: logger.info('Cannot delete a pin: {}'.format(pin_id), exc_info=True) return web.notfound()
def GET(self, name=None): sess = session.get_session() force_login(sess) logintoken = convert_to_logintoken(sess.user_id) profile_url = "/api/profile/userinfo/get" profile_owner_context = { "csid_from_client": "", "logintoken": logintoken } user = api_request(profile_url, data=profile_owner_context).get("data") user = dotdict(user) msg = web.input(msg=None)['msg'] return ltpl('editprofile', user, settings.COUNTRIES, name, msg)
def GET(self): sess = session.get_session() db = database.get_db() auth.force_login(sess) form = self.get_form() result_info = sess.get('result_info', []) results = db.where(table='pins', what='count(1) as pin_count', user_id=sess.user_id) for row in results: number_of_items_added = row.pin_count results = db.query(''' select parent.id, parent.name, child.id as child_id, child.name as child_name from categories parent left join categories child on parent.id = child.parent where parent.parent is null order by parent.position desc, parent.name, child.position desc, child.name ''') current_parent = None categories_as_list = [] for row in results: if not current_parent or current_parent['id'] != row.id: current_parent = { 'id': row.id, 'name': row.name, 'subcategories': [] } categories_as_list.append(current_parent) if row.child_id: current_parent['subcategories'].append({ 'id': row.child_id, 'name': row.child_name }) categories_columns = [[], [], [], []] categories_x_column = math.ceil(len(categories_as_list) / 4) count = 0 index = 0 for cat in categories_as_list: categories_columns[index].append(cat) count += 1 if count >= categories_x_column and index < 3: count = 0 index += 1 tagcloud = self.get_tag_cloud() return template.ltpl('pin_loader', form, result_info, categories_columns, number_of_items_added, sess.get('categories', []), tagcloud)
def POST(self): sess = session.get_session() self.db = database.get_db() auth.force_login(sess) form = self.get_form() result_info = [] if form.validates(): categories_string = form.d.categories categories_separated = categories_string.split(',') sess.categories = tuple(int(c) for c in categories_separated) self.categories = sess.categories for i in range(10): result = self.save_pin(form, str(i + 1)) if not result.get('pin_id', False) and result.get( 'error', False): json_repr = json.dumps(result) result['json'] = json_repr result_info.append(result) sess.result_info = result_info return web.seeother('')
def GET(self, slug=None): self.db = database.get_db() self.sess = session.get_session() auth.force_login(self.sess) if slug: results = self.db.where('categories', slug=slug) for r in results: self.category = r break else: self.category = {'name': 'Random', 'id': 0} else: self.category = {'name': 'Random', 'id': 0} self.ajax = int(web.input(ajax=0).ajax) if self.ajax: return self.get_more_items_as_json() else: self.sess['seen_items'] = set() return self.template_for_showing_categories()
def POST(self, name=None): """ Handler for changing email or username """ sess = session.get_session() force_login(sess) logintoken = convert_to_logintoken(sess.user_id) form = self._form() if not form.validates(): return form.note email_available = self._is_available(uid=sess.user_id, field="email", value=form.d.email) if not email_available: msg = "Please try another email, this one is already occupied" return web.seeother('?msg=%s' % msg) username_available = self._is_available(uid=sess.user_id, field="username", value=form.d.username) if not username_available: msg = "Please try another username, this one is already occupied" return web.seeother('?msg=%s' % msg) if logintoken: data = { "username": form.d.username, "email": form.d.email, "csid_from_client": 'None', "logintoken": logintoken } data = api_request("api/profile/userinfo/update", "POST", data) if data['status'] == 200: raise web.seeother('') else: msg = data['error_code'] raise web.seeother('?msg=%s' % msg)
def POST(self, name=None): sess = session.get_session() force_login(sess) form = self._form() form.validates() # db.update('users', where='id = $id', vars={'id': sess.user_id}, **form.d) logintoken = convert_to_logintoken(sess.user_id) if logintoken: data = { "private": form.d.private, "logintoken": logintoken, "csid_from_client": "None" } data = api_request("api/profile/userinfo/set_privacy", "POST", data) if data['status'] == 200: raise web.seeother('/privacy') else: msg = data['error_code'] raise web.seeother('/privacy?msg=%s' % msg)
def POST(self, name=None): sess = session.get_session() force_login(sess) form = self._form() if not form.validates(): raise web.seeother('/password?msg=bad input') logintoken = convert_to_logintoken(sess.user_id) if logintoken: data = { "old_password": form.d.old, "new_password": form.d.pwd1, "new_password2": form.d.pwd2, "logintoken": logintoken } data = api_request("api/profile/pwd", "POST", data) if data['status'] == 200: raise web.seeother('/password') else: msg = data['error_code'] raise web.seeother('/password?msg=%s' % msg)
def GET(self): sess = session.get_session() auth.force_login(sess) params = web.input(page=False, sort='users.name', dir='asc', query='') if sess.get('reset_page_offset', False): page = 0 sess['reset_page_offset'] = False elif params.get('page', False): page = int(params.page) - 1 else: page = 0 sess.setdefault('pin_loaders_item_added_page_size', PIN_LIST_LIMIT) tag_filter = sess.get('pin_loaders_tag_filter', '') where = '' if tag_filter: where += ' and tags.tags=$tag' category_filter = sess.get('pin_loaders_category_filter', 0) if category_filter > 0: where += ' and categories.id=$category' elif category_filter == -1: where += ' and categories.id is null' db = database.get_db() offset = sess['pin_loaders_item_added_page_size'] * page query_text = '''select pins.*, tags.tags, categories.id as category_id, categories.name as category_name from pins left join pins_categories pc on pins.id = pc.pin_id left join categories on pc.category_id=categories.id left join tags on pins.id = tags.pin_id where user_id=$user_id {where} group by pins.id, categories.id, tags.tags order by timestamp desc, pins.id, categories.name offset $offset limit $limit'''.format(where=where) results = db.query(query_text, vars={ 'user_id': sess.user_id, 'offset': offset, 'limit': sess['pin_loaders_item_added_page_size'], 'tag': tag_filter, 'category': category_filter }) pin_list = [] current_pin = None for r in results: if not current_pin or current_pin['id'] != r.id: current_pin = dict(r) current_pin['price'] = str(r.price) current_pin[ 'price_range_repr'] = '$' * r.price_range if r.price_range < 5 else '$$$$+' current_pin['categories'] = [] categories = [] current_pin['tags'] = [] current_pin['iso_date'] = datetime.date.fromtimestamp( current_pin['timestamp']).isoformat() pin_list.append(current_pin) if r.category_id not in categories: category = {'id': r.category_id, 'name': r.category_name} current_pin['categories'].append(category) categories.append(r.category_id) if r.tags and r.tags not in current_pin['tags']: current_pin['tags'].append(r.tags) page = web.template.frender('t/pin_loader_list.html')( pin_list, datetime.datetime.now()) return page