diff options
author | Justyna Ilczuk <justyna.ilczuk@gmail.com> | 2012-12-24 14:51:12 +0100 |
---|---|---|
committer | Justyna Ilczuk <justyna.ilczuk@gmail.com> | 2012-12-24 14:51:12 +0100 |
commit | 321f41e8fd67a30ad12bab1ed36296912fcb0c53 (patch) | |
tree | 4a307ad550cec4418ba86c3259dfd006c58c8fd9 /lanre_py/lanre.py | |
download | lanre-321f41e8fd67a30ad12bab1ed36296912fcb0c53.tar.gz lanre-321f41e8fd67a30ad12bab1ed36296912fcb0c53.tar.bz2 lanre-321f41e8fd67a30ad12bab1ed36296912fcb0c53.zip |
That's a web-app for reading with translations. Try it out.
Diffstat (limited to 'lanre_py/lanre.py')
-rw-r--r-- | lanre_py/lanre.py | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/lanre_py/lanre.py b/lanre_py/lanre.py new file mode 100644 index 0000000..4db21cd --- /dev/null +++ b/lanre_py/lanre.py @@ -0,0 +1,147 @@ +# all the imports +from __future__ import with_statement +from contextlib import closing +import sqlite3 +from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, jsonify +import requests +from bs4 import BeautifulSoup +import re +from email.mime.text import MIMEText +from subprocess import Popen, PIPE +import smtplib + +# configuration +DATABASE = '/tmp/dysprosium.db' +DEBUG = True +SECRET_KEY = 'development key' +USERNAME = 'admin' +PASSWORD = 'dupa.8' + +app = Flask(__name__) +app.config.from_object(__name__) + + +def connect_db(): + return sqlite3.connect(app.config['DATABASE']) + +def init_db(): + with closing(connect_db()) as db: + with app.open_resource('schema.sql') as f: + db.cursor().executescript(f.read()) + db.commit() + +@app.before_request +def before_request(): + g.db = connect_db() + +@app.teardown_request +def teardown_request(exception): + g.db.close() + +@app.route('/') +def ask_for_text(): + + return render_template('ask_for_text.html') + +@app.route('/options', methods=['POST']) +def add_entry(): + if not session.get('logged_in'): + abort(401) + g.db.execute('insert into entries (title, text) values (?, ?)', + [request.form['title'], request.form['text']]) + g.db.commit() + flash('New entry was successfully posted') + return redirect(url_for('ask_for_text.html')) + + +@app.route('/login', methods=['GET', 'POST']) +def login(): + error = None + if request.method == 'POST': + if request.form['username'] != app.config['USERNAME']: + error = 'Invalid username' + elif request.form['password'] != app.config['PASSWORD']: + error = 'Invalid password' + else: + session['logged_in'] = True + flash('You were logged in') + return redirect(url_for('ask_for_text')) + return render_template('login.html', error=error) + + +@app.route('/logout') +def logout(): + session.pop('logged_in', None) + flash('You were logged out') + return redirect(url_for('ask_for_text')) + + +def get_exact_translation(retrieved_json): + try: + response = retrieved_json["term0"]["PrincipalTranslations"]["0"]["FirstTranslation"]["term"] + if len(response) == 0: + response = "No translation" + except: + response = "No translation" + return response + +@app.route('/_find_translations') +def find_translations(): + text_for_translation = request.args.get('text', 0) + language = request.args.get('language', 0) + dictionary_link = "http://api.wordreference.com/a95ae/json/" + language + "/" + words = text_for_translation.split(" ") + translations = [] + for word in words: + translation = get_exact_translation(requests.get(dictionary_link + strip_punctuation(word)).json) + translations.append(translation) + + return jsonify(result=translations, words=words, html_output=prepare_html_output(words)) + + +@app.route('/_send_mail') +def send_mail(): + from_address = "attero@hackerspace.pl" + to_address = request.args.get('mail_address', 0) + message_text = request.args.get('message', 0) + msg = ("From: %s\r\nTo: %s\r\nSubject: Lanre\r\n" % (from_address, to_address)) + server = smtplib.SMTP('hackerspace.pl', 587) + server.starttls() + server.login("attero", "dupa.8") + server.set_debuglevel(1) + print(from_address) + print(to_address) + print(msg + message_text) + print("somethin wrong in loging to server") + server.sendmail(from_address, to_address, msg + message_text) + server.quit() + return jsonify(result="success") + + + + + +def prepare_html_output(words): + words_with_html = ["<span class='word' id='" + str(i) +"'>" + word + "</span>" for i, word in enumerate(words)] + output = " ".join(words_with_html) + return output + + +def strip_punctuation(word): + try: + if(word[len(word)-1].isalpha()): + return word + else: + return word[0:(len(word)-1)] + except: + return word + + +#a95ae api key for word reference is: a95ae +#http://www.wordreference.com/docs/api.aspx + + +if __name__ == '__main__': + init_db() + app.run() + |