lanre/lanre_py/lanre.py

136 lines
3.4 KiB
Python

# 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('/_find_translations')
def find_translations():
text_for_translation = request.args.get('text', 0)
from_language = request.args.get('from_language', 0)
dest_language = request.args.get('dest_language', 0)
words = text_for_translation.split(" ")
translations = []
for word in words:
translation = find_translation_in_glosbe(prepare_word(word), from_language, dest_language)
translations.append(translation)
return jsonify(result=translations, words=words, html_output=prepare_html_output(words))
def find_translation_in_glosbe(phrase, from_language, dest):
url = "http://glosbe.com/gapi/translate?from=" + from_language
url += "&dest=" + dest + "&format=json&phrase="
url += phrase + "&pretty=true"
response = requests.get(url).json
try:
return response["tuc"][0]["phrase"]["text"]
except:
return "no translation"
@app.route('/_send_mail')
def send_mail():
try:
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")
except:
return jsonify(result="failure")
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 prepare_word(word):
try:
word = strip_punctuation(word)
return word[0].lower() + word[1:]
except:
return ""
def strip_punctuation(word):
try:
if(word[len(word)-1].isalpha()):
return word
else:
return word[0:(len(word)-1)]
except:
return word
def fetch_translations(retrieved_json):
response = ""
if(retrieved_json["term0"]["PrincipalTranslations"]["0"]["FirstTranslation"]["term"] != ""):
response += retrieved_json["term0"]["PrincipalTranslations"]["0"]["FirstTranslation"]["term"] + ", "
return response
#this api is broken and inconsistent, I don't like it, mayby it'd be better to start with something different soon?
#a95ae api key for word reference is: a95ae
#http://www.wordreference.com/docs/api.aspx
if __name__ == '__main__':
init_db()
app.run()