120 lines
3.1 KiB
Python
120 lines
3.1 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)
|
|
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
|
|
|
|
|
|
def get_exact_translation(retrieved_json):
|
|
try:
|
|
response = fetch_translations(retrieved_json)
|
|
if len(response) == 0:
|
|
response = "No translation"
|
|
except:
|
|
response = "No translation"
|
|
return response
|
|
|
|
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()
|
|
|