Пример #1
0
 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()
Пример #2
0
 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 ''
Пример #3
0
 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()
Пример #4
0
    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)
Пример #5
0
 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'})
Пример #6
0
    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)
Пример #7
0
 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 ''
Пример #8
0
 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 ''
Пример #9
0
 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()
Пример #10
0
    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)
Пример #11
0
 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)
Пример #12
0
 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('')
Пример #13
0
    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()
Пример #14
0
    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)
Пример #15
0
    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)
Пример #16
0
    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)
Пример #17
0
    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