lanre/lanre_py/lanre.py

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()