04640f7 by Arvind at 2013-02-07 1
from flask import Flask
2
from flask import request
3
from flask import render_template
265ce28 by Anon Ray at 2013-02-08 4
from flask import make_response
d611971 by Arvind at 2013-03-26 5
from flask import jsonify
e922d3b by Arvind at 2013-02-08 6
import logging
8181191 by Arvind at 2013-02-08 7
from logging import FileHandler
5c78a27 by Arvind at 2012-06-17 8
import pymongo
5c5d01a by Arvind at 2013-03-27 9
import os
d09d88d by Arvind at 2013-03-28 10
import lxml.html
11
import urllib2
12
import StringIO
438fa91 by Arvind at 2013-03-30 13
import json
14
04640f7 by Arvind at 2013-02-07 15
16
app = Flask(__name__)
17
a5c95bf by Arvind at 2013-03-28 18
b184f1f by Arvind at 2013-02-08 19
@app.route('/', methods=['GET'])
04640f7 by Arvind at 2013-02-07 20
def index():
d611971 by Arvind at 2013-03-26 21
    if request.args.has_key('url'):
22
        return render_template('index.html', url=request.args['url'])
b184f1f by Arvind at 2013-02-08 23
    else:
24
        return render_template('index.html')
3018c67 by Arvind at 2013-02-08 25
a5c95bf by Arvind at 2013-03-28 26
27
@app.route('/fetch', methods=['GET'])
d611971 by Arvind at 2013-03-26 28
def fetch():
29
    connection = pymongo.Connection()
30
    db = connection['mural']
31
    collection = db['data']
32
    ret = {}
33
    x = 0
5c5d01a by Arvind at 2013-03-27 34
    resource = "default"
a5c95bf by Arvind at 2013-03-28 35
    if request.args.has_key('uri'):
36
        resource = request.args['uri']
37
    for i in collection.find({'uri':resource}):
d611971 by Arvind at 2013-03-26 38
        del(i['_id'])
39
        ret[x] = i
40
        x = x + 1
a5c95bf by Arvind at 2013-03-28 41
    if len(ret) == 0:
42
        ret['error'] = "Sorry! No re-treats for you."
5c5d01a by Arvind at 2013-03-27 43
    return jsonify(ret)
265ce28 by Anon Ray at 2013-02-08 44
a5c95bf by Arvind at 2013-03-28 45
438fa91 by Arvind at 2013-03-30 46
@app.route('/search', methods=['GET'])
47
def search():
48
    connection = pymongo.Connection()
49
    db = connection['mural']
50
    collection = db['data']
51
    y = 0
52
    ret = {}
7d19e0d by Arvind at 2013-03-30 53
    keywords_dict = json.loads(request.args['data'])
54
    keywords = json.loads(keywords_dict)['data']
438fa91 by Arvind at 2013-03-30 55
    for i in collection.find():
7d19e0d by Arvind at 2013-03-30 56
        for keyword in keywords:
57
            print keyword
58
            try:
59
                if keyword in i['nodes']:
60
                    del(i['_id'])
61
                    ret[y] = i
62
                    y = y + 1
63
            except:
64
                pass
438fa91 by Arvind at 2013-03-30 65
    return render_template('blank.html', content = ret)
7d19e0d by Arvind at 2013-03-30 66
67
a5c95bf by Arvind at 2013-03-28 68
@app.route('/submit', methods=['POST'])
69
def submit():
70
    c = pymongo.Connection()
71
    db = c['mural']
72
    coll = db['data']
438fa91 by Arvind at 2013-03-30 73
    requestData = json.loads(request.form['data'])
a5c95bf by Arvind at 2013-03-28 74
    try:
438fa91 by Arvind at 2013-03-30 75
        for i in requestData:
76
            coll.insert(i)
77
        response = make_response()
78
        response.status = '200 OK'
79
        response.status_code = 200
80
        return response
a5c95bf by Arvind at 2013-03-28 81
    except:
82
        response = make_response()
83
        response.status = "500"
aa2260f by Anon Ray at 2013-03-28 84
        response.data = "Your post could not be saved. Try posting again."
a5c95bf by Arvind at 2013-03-28 85
        return response
86
87
88
@app.route('/SWeeText', methods=['GET'])
d09d88d by Arvind at 2013-03-28 89
def SWeeText():
90
    if request.args.has_key('url'):
91
        myhandler1 = urllib2.Request(request.args['url'], headers={'User-Agent': "Mozilla/5.0(X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"})
92
        a = urllib2.urlopen(myhandler1)
93
        page = a.read()
94
        a.close()
95
        try:
a5c95bf by Arvind at 2013-03-28 96
            page = unicode(page, 'utf-8')
d09d88d by Arvind at 2013-03-28 97
        except UnicodeDecodeError:
98
            pass
99
        root = lxml.html.parse(StringIO.StringIO(page)).getroot()
100
        root.make_links_absolute(request.args['url'], resolve_base_href = True)
aa2260f by Anon Ray at 2013-03-28 101
102
        # inject the JS toolbar to annotate text
103
        script = root.makeelement('script')
104
        script.set('src', 'static/text-annotation.js')
105
        link = root.makeelement('link')
106
        link.set('href', 'static/text-annotation.css')
107
        link.set('type', 'text/css')
108
        link.set('rel', 'stylesheet')
109
110
        root.body.append(script)
111
        root.head.append(link)
112
d09d88d by Arvind at 2013-03-28 113
        return lxml.html.tostring(root)
aa2260f by Anon Ray at 2013-03-28 114
438fa91 by Arvind at 2013-03-30 115
8181191 by Arvind at 2013-02-08 116
#Log the errors, don't depend on apache to log it for you.
aa2260f by Anon Ray at 2013-03-28 117
    fil = FileHandler(os.path.join(os.path.dirname(__file__), 'logme'),mode='a')
b184f1f by Arvind at 2013-02-08 118
    fil.setLevel(logging.ERROR)
119
    app.logger.addHandler(fil)
8181191 by Arvind at 2013-02-08 120
265ce28 by Anon Ray at 2013-02-08 121
04640f7 by Arvind at 2013-02-07 122
if __name__ == "__main__":
b184f1f by Arvind at 2013-02-08 123
    app.run(debug=True, host='0.0.0.0')
04640f7 by Arvind at 2013-02-07 124