Skip to content

Commit a42a4d0

Browse files
committed
initial boilerplate
1 parent f12a1db commit a42a4d0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2476
-0
lines changed

Procfile

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
web: gunicorn app:app --log-file=-

Procfile.dev

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Procfile.dev - development
2+
3+
# Use the Flask development server.
4+
web: python app.py

all.py

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import csv, codecs, cStringIO
2+
3+
class UTF8Recoder:
4+
"""
5+
Iterator that reads an encoded stream and reencodes the input to UTF-8
6+
"""
7+
def __init__(self, f, encoding):
8+
self.reader = codecs.getreader(encoding)(f)
9+
10+
def __iter__(self):
11+
return self
12+
13+
def next(self):
14+
return self.reader.next().encode("utf-8")
15+
16+
class UnicodeReader:
17+
"""
18+
A CSV reader which will iterate over lines in the CSV file "f",
19+
which is encoded in the given encoding.
20+
"""
21+
22+
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
23+
f = UTF8Recoder(f, encoding)
24+
self.reader = csv.reader(f, dialect=dialect, **kwds)
25+
26+
def next(self):
27+
row = self.reader.next()
28+
return [unicode(s, "utf-8") for s in row]
29+
30+
def __iter__(self):
31+
return self
32+
33+
class UnicodeWriter:
34+
"""
35+
A CSV writer which will write rows to CSV file "f",
36+
which is encoded in the given encoding.
37+
"""
38+
39+
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
40+
# Redirect output to a queue
41+
self.queue = cStringIO.StringIO()
42+
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
43+
self.stream = f
44+
self.encoder = codecs.getincrementalencoder(encoding)()
45+
46+
def writerow(self, row):
47+
self.writer.writerow([s.encode("utf-8") for s in row])
48+
# Fetch UTF-8 output from the queue ...
49+
data = self.queue.getvalue()
50+
data = data.decode("utf-8")
51+
# ... and reencode it into the target encoding
52+
data = self.encoder.encode(data)
53+
# write to the target stream
54+
self.stream.write(data)
55+
# empty queue
56+
self.queue.truncate(0)
57+
58+
def writerows(self, rows):
59+
for row in rows:
60+
self.writerow(row)

app.py

+250
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
from flask import Flask, render_template, request, redirect, url_for,\
2+
session, flash
3+
from flask.ext.sqlalchemy import SQLAlchemy
4+
from logging import Formatter, FileHandler
5+
import models
6+
from functools import wraps
7+
import flask_login_auth
8+
from forms import *
9+
import logging
10+
11+
12+
app = Flask(__name__)
13+
app.secret_key = 'F12Zr47j\3yX R~X@H!jmM]Lwf/,?KT'
14+
app.config.from_object('config')
15+
db = SQLAlchemy(app)
16+
17+
18+
# Decorator's
19+
def login_requied(f):
20+
@wraps(f)
21+
def wrap(*args, **kwargs):
22+
if 'name' in session:
23+
return f(*args, **kwargs)
24+
else:
25+
flash(' Sorry! You Need to Login to view this page')
26+
return redirect(url_for('login'))
27+
return wrap
28+
29+
30+
def logout_requied(f):
31+
@wraps(f)
32+
def wrap(*args, **kwargs):
33+
if 'name' in session:
34+
flash(
35+
' Sorry! You are logged in Already. Logout to Do your Action')
36+
return redirect(url_for('home'))
37+
else:
38+
return f(*args, **kwargs)
39+
return wrap
40+
41+
42+
def auth_requied(f):
43+
@wraps(f)
44+
def wrap(*args, **kwargs):
45+
if session['role'] == 'admin':
46+
return f(*args, **kwargs)
47+
else:
48+
flash(
49+
' Sorry! You dont have any permission to perform such action')
50+
return redirect(url_for('home'))
51+
return wrap
52+
53+
# Controllers.
54+
55+
56+
@app.route('/register', methods=['GET', 'POST'])
57+
@login_requied
58+
@auth_requied
59+
def register():
60+
form = RegisterForm(request.form)
61+
if request.method == 'POST':
62+
user = models.create_user(
63+
form.userid.data, form.name.data, form.role.data,
64+
form.email.data, form.password.data
65+
)
66+
if user == 1:
67+
flash(
68+
'ERROR! Please enter something or check yours\
69+
username or user already exists'
70+
)
71+
return redirect(url_for('register'))
72+
else:
73+
return redirect(url_for('home'))
74+
return render_template('forms/register.html', form=form)
75+
76+
77+
@app.route('/', methods=['GET', 'POST'])
78+
def home():
79+
messages = models.message_show()
80+
return render_template('pages/placeholder.home.html', messages=messages, session=session) # noqa
81+
82+
83+
@app.route('/about')
84+
def about():
85+
return render_template('pages/placeholder.about.html')
86+
87+
88+
@app.route('/users')
89+
@login_requied
90+
def users():
91+
users = models.users()
92+
return render_template('pages/placeholder.users.html', users=users)
93+
94+
95+
@app.route('/logout')
96+
@login_requied
97+
def logout():
98+
session.clear()
99+
return redirect(url_for('home'))
100+
101+
102+
@app.route('/login', methods=['GET', 'POST'])
103+
@logout_requied
104+
def login():
105+
error = None
106+
session.clear()
107+
form = LoginForm(request.form)
108+
if request.method == 'POST':
109+
username = form.name.data
110+
password = form.password.data
111+
value = flask_login_auth.authenticate(username, password)
112+
if (value == 1):
113+
role = flask_login_auth.role_authenticate(username, password)
114+
blocked = flask_login_auth.blocked(username, password)
115+
if not blocked:
116+
session['name'] = username
117+
session['role'] = role
118+
session['editid'] = None
119+
count = models.count_show(username)
120+
messages = models.message_show()
121+
if count[0][0]:
122+
session['count'] = count[0][0] + 1
123+
new_count = session['count']
124+
new_count = models.count_add(username, new_count)
125+
models.count_show(username)
126+
return render_template('pages/placeholder.home.html', session=session, messages=messages) # noqa
127+
else:
128+
error = 'Your Account is blocked !\
129+
Please contact Admin'
130+
return render_template(
131+
'forms/login.html', form=form, error=error)
132+
else:
133+
error = 'Invalid username or password \
134+
Please try again!'
135+
return render_template('forms/login.html', form=form, error=error)
136+
return render_template('forms/login.html', form=form)
137+
138+
139+
@app.route('/search', methods=['GET', 'POST'])
140+
@login_requied
141+
def search():
142+
search = request.form['search']
143+
match = flask_login_auth.searchbox(search)
144+
print match
145+
return render_template('pages/placeholder.search.html', search=search,
146+
match=match)
147+
148+
149+
@app.route('/index')
150+
@login_requied
151+
def index():
152+
project = flask_login_auth.show_project(session['usersid'])
153+
session['project'] = project
154+
return render_template('pages/placeholder.home.html', session=session)
155+
156+
157+
@app.route('/message', methods=['GET', 'POST'])
158+
@login_requied
159+
def message():
160+
if request.method == 'POST':
161+
models.post_messages(
162+
session['name'], request.form['message'])
163+
return redirect(url_for('home'))
164+
165+
166+
@app.route('/delete', methods=['GET', 'POST'])
167+
@login_requied
168+
def delete():
169+
if request.method == 'POST':
170+
models.message_delete(
171+
request.form['submit'])
172+
return redirect(url_for('home'))
173+
174+
175+
@app.route('/block', methods=['GET', 'POST'])
176+
@login_requied
177+
def block():
178+
if request.method == 'POST':
179+
models.block(
180+
request.form['submit'], request.form['userid'])
181+
return redirect(url_for('users'))
182+
183+
184+
@app.route('/edit', methods=['GET', 'POST'])
185+
@login_requied
186+
def edit():
187+
if request.method == 'POST':
188+
session['editid'] = request.form['submit']
189+
return redirect(url_for('update'))
190+
191+
192+
@app.route('/update', methods=['GET', 'POST'])
193+
@login_requied
194+
def update():
195+
if session['editid']:
196+
userid = session['editid']
197+
else:
198+
userid = session['name']
199+
form = UpdateForm(request.form)
200+
get_info = models.get_info(userid)
201+
if request.method == 'POST':
202+
user = models.update(
203+
form.role.data, userid, form.password.data,
204+
form.email.data, form.name.data
205+
)
206+
if user != 1:
207+
flash(
208+
"ERROR! Already on this role, or you hadn't updated anything"
209+
)
210+
return redirect(url_for('update'))
211+
else:
212+
flash(
213+
'Successfully Role changed for %s to %s' % (
214+
userid, form.role.data)
215+
)
216+
session['editid'] = None
217+
return redirect(url_for('users'))
218+
return render_template(
219+
'forms/update.html', form=form, userid=userid, get_info=get_info
220+
)
221+
222+
223+
# Error handlers.
224+
225+
@app.errorhandler(500)
226+
def internal_error(error):
227+
# db_session.rollback()
228+
return render_template('errors/500.html'), 500
229+
230+
231+
@app.errorhandler(404)
232+
def not_found_error(error):
233+
return render_template('errors/404.html'), 404
234+
235+
236+
if not app.debug:
237+
file_handler = FileHandler('error.log')
238+
file_handler.setFormatter(
239+
Formatter('% (asctime)s % (levelname)s: % (message)s\
240+
[in % (pathname)s: % (lineno)d]')
241+
)
242+
app.logger.setLevel(logging.INFO)
243+
file_handler.setLevel(logging.INFO)
244+
app.logger.addHandler(file_handler)
245+
app.logger.info('errors')
246+
247+
248+
# Default port:
249+
if __name__ == '__main__':
250+
app.run(debug=True)

cache.py

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import csv
2+
3+
input_file = csv.DictReader(open("test.csv"))
4+
5+
max_age = None
6+
oldest_person = None
7+
for row in input_file:
8+
age = int(row["age"])
9+
if max_age is None or max_age < age:
10+
max_age = age
11+
oldest_person = row["name"]
12+
13+
if max_age is not None:
14+
print "The oldest person is %s, who is %d years old." % (oldest_person, max_age) # noqa
15+
else:
16+
print "The file does not contain any people." # noqa

config.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import os
2+
3+
# Grabs the folder where the script runs.
4+
basedir = os.path.abspath(os.path.dirname(__file__))
5+
6+
# Enable debug mode.
7+
DEBUG = True
8+
9+
# Secret key for session management. You can generate random strings here:
10+
SECRET_KEY = 'my precious'

error.log

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

0 commit comments

Comments
 (0)