def render_code_snippet(url_id): redirect_obj = DBSession.query(Snippet).filter(Snippet.alias == url_id).first() if redirect_obj: redirect_obj.views += 1 DBSession.add(redirect_obj) DBSession.commit() return render_template('snippet.html', code=redirect_obj) return not_found()
def url_redirect(url_id): url_id = url_id.split('.')[0] redirect_obj = DBSession.query(Url).filter(Url.alias == url_id).all() redirect_obj = random.choice(redirect_obj) if redirect_obj: location = redirect_obj.location redirect_obj.views += 1 DBSession.add(redirect_obj) DBSession.commit() return redirect(location, code=302) return not_found()
def create_url(longurl, shorturl=None, creator=None, overwrite=None): shrl = Url(longurl) if shorturl: if overwrite: obj = DBSession.query(Url).filter(Url.alias == shorturl).first() if obj: DBSession.delete(obj) DBSession.commit() shrl.alias = shorturl if creator: shrl.alias = "{}/{}".format(creator, shrl.alias) DBSession.add(shrl) DBSession.commit() return '{}/{}'.format(app.config['shrls_base_url'], shrl.alias)
def create_snippet(): print request.args content = request.form.get('c') title = request.form.get('t') shortid = request.form.get('s') if not content: return "Error" shrl = Snippet(content, title=title) if shortid: obj = DBSession.query(Snippet).filter(Snippet.alias == shortid).first() if obj: DBSession.delete(obj) DBSession.commit() shrl.alias = shortid DBSession.add(shrl) DBSession.commit() alias = '{}/c/{}'.format(app.config['shrls_base_url'], shrl.alias) alias = create_url(alias) return alias
def admin_index(): page = int(request.args.get('page', 0)) count = int(request.args.get('count', 50)) urls = DBSession.query(Url) order_by = request.args.get('order_by') sort_by = request.args.get('sort') if not order_by or order_by.lower() not in ['id', 'created_at', 'alias', 'views', 'location']: order_by = 'created_at' if not sort_by or sort_by.lower() not in ['asc', 'desc']: sort_by = 'desc' order_by = order_by.lower() sort_by = sort_by.lower() urls = urls.order_by(getattr(getattr(Url, order_by), sort_by)()) include = request.args.getlist('include') exclude = request.args.getlist('exclude') searches = request.args.getlist('search') t = { '+': include, '-': exclude, } searches = [[word for word in x.split(' ') if word] for x in searches if x] for search in searches: mode = '+' phrase = [] for word in search: if word and word[0] in ['-', '+']: if phrase: t[mode].append(' '.join(phrase)) phrase = [] mode = word[0] word = word[1:] if word: phrase.append(word) t[mode].append(' '.join(phrase)) for f in include: urls = urls.filter(or_( Url.alias.ilike("%{}%".format(f)), Url.location.ilike("%{}%".format(f)), )) for f in exclude: urls = urls.filter(not_( or_( Url.alias.ilike("%{}%".format(f)), Url.location.ilike("%{}%".format(f)), ) )) urls = urls.all() urlparams = [] for k, v in request.args.iteritems(): if k in ['page', 'order_by', 'sort']: continue urlparams.append("{}={}".format(k, v)) params = "?{}".format("&".join(urlparams)) if urlparams: params += "&" searches = ' '.join([' '.join(x) for x in searches]) return render_template('admin.html', urls=urls, page=page, count=count, params=params, search=searches)