nooz/notes.py

158 lines
5.5 KiB
Python

# -*- coding: utf-8 -*-
# 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 = 'notes.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'dupa.8'
app = Flask(__name__)
app.config.from_object(__name__)
class Thumb:
def __init__(self, source, href, tags):
self.src = source
self.href = href
self.tags = tags
#DB functions
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()
def query_db(query, args=(), one=False):
"""
Simple wrapper around query
"""
cur = g.db.execute(query, args)
rv = [dict((cur.description[idx][0], value)
for idx, value in enumerate(row)) for row in cur.fetchall()]
return (rv[0] if rv else None) if one else rv
@app.before_request
def before_request():
try:
g.db = g._db.cursor()
except AttributeError:
g._db = connect_db()
g.db = g._db.cursor()
@app.teardown_request
def teardown_request(exception):
try:
g.db.close()
except AttributeError:
pass
#VIEWS
@app.route('/')
@app.route('/view')
@app.route('/view/<subject>/<datestring>')
def home(subject= "chemia", datestring= "12grudnia2012"):
other_dates = [date["datestring"] for date in get_possible_dates(subject)]
all_dates = [date["datestring"] for date in get_all_dates()]
all_subjects = [sub["subject"] for sub in get_all_subjects()]
if datestring in other_dates:
other_dates.remove(datestring)
thumbs_info = {"subject": subject, "datestring": datestring, "other_dates": other_dates}
thumbs = get_thumbs(subject, datestring)
thumbs = [dict(href=thumb.href, src=thumb.src) for thumb in thumbs]
main_page_src=thumbs[0]["href"]
return render_template('index.html', thumbs=thumbs, main_page_src=main_page_src,thumbs_info=thumbs_info,
all_dates=all_dates, all_subjects=all_subjects)
@app.route('/subject/<subject>')
def show_subject(subject):
dates = [date["datestring"] for date in get_possible_dates(subject)]
all_dates = [date["datestring"] for date in get_all_dates()]
all_subjects = [sub["subject"] for sub in get_all_subjects()]
return render_template('subject.html', subject=subject, dates=dates, all_dates=all_dates, all_subjects=all_subjects)
@app.route('/date/<datestring>')
def show_date(datestring):
all_dates = [date["datestring"] for date in get_all_dates()]
all_subjects = [sub["subject"] for sub in get_all_subjects()]
notes = get_notes_for_day(datestring)
separated_notes = {}
for note in notes:
if not note["subject"] in separated_notes:
separated_notes[note["subject"]] = []
separated_notes[note["subject"]].append(note)
return render_template('date.html', date=datestring, all_dates=all_dates, all_subjects=all_subjects, separated_notes=separated_notes)
@app.route('/search')
def show_search():
all_dates = [date["datestring"] for date in get_all_dates()]
all_subjects = [sub["subject"] for sub in get_all_subjects()]
return render_template('search.html', all_dates=all_dates, all_subjects=all_subjects )
@app.route('/about')
def about():
all_dates = [date["datestring"] for date in get_all_dates()]
all_subjects = [sub["subject"] for sub in get_all_subjects()]
return render_template('about.html', all_dates=all_dates, all_subjects=all_subjects )
#HELPERS
def add_note(subject, datestring, notes):
g.db.execute('insert into notes (subject, datestring ) values (?, ?)', [subject, datestring])
note_id = g.db.lastrowid
for note in notes:
g.db.execute('insert into pages (note_id, name, tags ) values (?, ?, ?)', [note_id, note["name"], note["tags"]])
g._db.commit()
def create_thumb(subject, datestring, name, tags):
src = subject + "/" + datestring + "/" + name
href = src
thumb = Thumb(src, href, tags)
return thumb
def get_thumbs(subject, datestring=""):
if(datestring==""):
query_result = query_db("select pages.* from pages left join notes on notes.id = pages.note_id where notes.subject = ?", [subject,])
else:
query_result = query_db("select pages.* from pages left join notes on notes.id = pages.note_id \
where notes.subject = ? and datestring = ?", [subject, datestring])
return [create_thumb(subject, datestring, t["name"], t["tags"]) for t in query_result ]
def get_possible_dates(subject):
dates = query_db("select distinct datestring from notes where subject = ? ", [subject])
return dates
def get_notes_for_day(datestring):
"""returns pages which where written that day (daystring) with other info"""
query_result = query_db("select pages.*,notes.subject from pages left join notes on notes.id = pages.note_id \
where datestring = ?", [datestring])
return [{"subject": t["subject"], "datestring": datestring, "name": t["name"]}for t in query_result ]
def get_all_dates():
dates = query_db("select distinct datestring from notes ")
return dates
def get_all_subjects():
subjects = query_db("select distinct subject from notes ")
return subjects
if __name__ == '__main__':
app.run()