server/web/tweetgserver/views.py
author veltr
Wed, 22 Feb 2012 11:19:36 +0100
changeset 33 98ffc58f0bd3
parent 32 1e47b1f9f42d
child 34 735e0411e648
permissions -rw-r--r--
server test
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 flask import Response, request #@UnresolvedImport
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     5
from flaskext.sqlalchemy import get_debug_queries
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
     6
from iri_tweet.models import TweetSource, Tweet
6
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
     7
from sqlalchemy import func #@UnresolvedImport
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
     8
from tweetgserver import app, db
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
     9
from datetime import datetime
1
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    10
import simplejson as json #@UnresolvedImport
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    11
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    12
def jsonpwrap(resobj):
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    13
    resp_str = json.dumps(resobj)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    14
    callback_param = request.args.get("callback")
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    15
    if callback_param:
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    16
        resp_str = "%s( %s );" % (callback_param, resp_str)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    17
        mime_type = 'text/javascript'
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    18
    else:
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    19
        mime_type = 'application/json'
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    20
    return Response(resp_str, mimetype=mime_type)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    21
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    22
@app.route('/', methods=['GET'])
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    23
def index():
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    24
    query = db.session.query(func.count(TweetSource.id)) #@UndefinedVariable
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    25
    ts_list_count = query.scalar()
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    26
    return 'Nb of tweets ' + str(ts_list_count)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    27
6
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    28
@app.route('/total/<int:since>', methods=['GET'])
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    29
def total(since):
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    30
    sincetime = datetime.fromtimestamp(since)
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    31
    delta_td = datetime.now() - sincetime
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    32
    delta_s = delta_td.total_seconds()
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    33
    query = db.session.query(func.count(Tweet.id)).filter(Tweet.created_at >= sincetime) #@UndefinedVariable
1
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    34
    ts_list_count = query.scalar()
6
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    35
    res = {
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    36
           "total" : ts_list_count,
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    37
           "delta": int(delta_s),
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    38
           "tweets_per_minute": 60. * ts_list_count / delta_s
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    39
           }
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    40
    return jsonpwrap(res)
1
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    41
6
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    42
@app.route('/podium/<int:since>/<tokens>', methods=['GET'])
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    43
def podium(since, tokens):
8ffe9b89a23e podium and total now calculated from a since date
veltr
parents: 1
diff changeset
    44
    sincetime = datetime.fromtimestamp(since)
33
98ffc58f0bd3 server test
veltr
parents: 32
diff changeset
    45
    delta_td = datetime.now() - sincetime
98ffc58f0bd3 server test
veltr
parents: 32
diff changeset
    46
    delta_s = delta_td.total_seconds()
1
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    47
    token_list = tokens.split(",")
32
1e47b1f9f42d Added server communication in the client and corrected server code
veltr
parents: 6
diff changeset
    48
    query_base = db.session.query(func.count(Tweet.id)).filter(Tweet.created_at >= sincetime)  #@UndefinedVariable
1
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    49
    podium_res = {}
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    50
    for token in token_list:
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    51
        query = query_base.filter(Tweet.text.op('~*')(token)) #@UndefinedVariable
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    52
        podium_res[token] = query.scalar()
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    53
    res = {
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    54
        "podium" : podium_res,
33
98ffc58f0bd3 server test
veltr
parents: 32
diff changeset
    55
        "total" : query_base.scalar(),
98ffc58f0bd3 server test
veltr
parents: 32
diff changeset
    56
        "delta": int(delta_s),
98ffc58f0bd3 server test
veltr
parents: 32
diff changeset
    57
        "tweets_per_minute": 60. * ts_list_count / delta_s
1
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    58
    }
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    59
    return jsonpwrap(res)
e0dbcf98c13e Added server code
veltr
parents:
diff changeset
    60