server/web/tweetgserver/views.py
author veltr
Tue, 14 Feb 2012 18:38:48 +0100
changeset 1 e0dbcf98c13e
child 6 8ffe9b89a23e
permissions -rw-r--r--
Added server code
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     1
#!/usr/bin/env python
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     3
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     4
from datetime import datetime, timedelta
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     5
from flask import Response, request #@UnresolvedImport
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     6
from flaskext.sqlalchemy import get_debug_queries
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     7
from iri_tweet.models import TweetSource, Tweet
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     8
from pyrfc3339.generator import generate
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     9
from sqlalchemy import func, desc #@UnresolvedImport
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    10
from sqlalchemy.orm import joinedload
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    11
from tweetgserver import app, db, cache
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    12
import pytz
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    13
import simplejson as json #@UnresolvedImport
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    14
import re
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    15
import math
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    16
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    17
def jsonpwrap(resobj):
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    18
    resp_str = json.dumps(resobj)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    19
    callback_param = request.args.get("callback")
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    20
    if callback_param:
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    21
        resp_str = "%s( %s );" % (callback_param, resp_str)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    22
        mime_type = 'text/javascript'
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    23
    else:
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    24
        mime_type = 'application/json'
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    25
    return Response(resp_str, mimetype=mime_type)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    26
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    27
@app.route('/', methods=['GET'])
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    28
def index():
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    29
    query = db.session.query(func.count(TweetSource.id)) #@UndefinedVariable
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    30
    ts_list_count = query.scalar()
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    31
    return 'Nb of tweets ' + str(ts_list_count)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    32
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    33
@app.route('/total', methods=['GET'])
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    34
def total():
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    35
    query = db.session.query(func.count(TweetSource.id)) #@UndefinedVariable
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    36
    ts_list_count = query.scalar()
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    37
    return jsonpwrap({"total":ts_list_count})
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    38
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    39
@app.route('/podium/<tokens>', methods=['GET'])
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    40
def podium(tokens):
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    41
    token_list = tokens.split(",")
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    42
    query_base = db.session.query(func.count(Tweet.id)) #@UndefinedVariable
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    43
    podium_res = {}
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    44
    for token in token_list:
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    45
        query = query_base.filter(Tweet.text.op('~*')(token)) #@UndefinedVariable
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    46
        podium_res[token] = query.scalar()
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    47
    res = {
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    48
        "podium" : podium_res,
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    49
        "total" : query_base.scalar()
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    50
    }
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    51
    return jsonpwrap(res)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    52