136 lines
3.4 KiB
Python
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()
|
|
|