· 6 years ago · Aug 28, 2019, 06:00 AM
1from flask import Flask, render_template, Response, redirect, url_for, request, session, abort
2from flask_login import LoginManager, UserMixin, login_required, login_user, logout_user
3from firebase_admin import firestore
4import firebase_admin
5from firebase_admin import db as dbs
6from firebase_admin import credentials
7import random
8import datetime
9
10cred = credentials.Certificate("/home/yeshwanth/productlabs/audiotranslation-f775a-firebase-adminsdk-7ouyp-eb98dfeed1.json")
11app=firebase_admin.initialize_app(cred, {'databaseURL': 'https://audiotranslation-f775a.firebaseio.com/'})
12db = firestore.client()
13app = Flask(__name__)
14
15# config
16app.config.update(
17 DEBUG = True,
18 SECRET_KEY = 'secret_xyz'
19)
20
21# flask-login
22login_manager = LoginManager()
23login_manager.init_app(app)
24login_manager.login_view = "login"
25
26# Simple user model
27class User(UserMixin):
28 def __init__(self, id):
29 self.id = id
30 self.name = "user" + str(id)
31 self.password = self.name + "_secret"
32
33 def __repr__(self):
34 return "%d/%s/%s" % (self.id, self.name, self.password)
35
36# create some users
37users = [User('admin')]
38
39# somewhere to login
40@app.route('/login', methods=["GET", "POST"])
41def login():
42 if request.method == 'POST':
43 username = request.form['username']
44 password = request.form['password']
45 if password == username + "_secret":
46 user = User(username)
47 login_user(user)
48 return redirect(request.args.get("next"))
49 else:
50 return abort(401)
51 else:
52 return render_template('login.html')
53 # return Response('''
54 # <form action="" method="post">
55 # <p><input type=text name=username>
56 # <p><input type=password name=password>
57 # <p><input type=submit value=Login>
58 # </form>
59 # ''')
60
61@app.route('/')
62@login_required
63def index():
64 return redirect('/speech')
65
66@app.route('/speech')
67@login_required
68def speech():
69 # fragments_ref = db.collection(u'fragments')
70 # first_query = fragments_ref.limit(100)
71
72 # # Get the last document from the results
73 # docs = first_query.stream()
74 # last_doc = list(docs)[-1]
75
76 # # Construct a new query starting at this document
77 # # Note: this will not have the desired effect if
78 # # multiple cities have the exact same population value
79 # last_pop = last_doc.to_dict()[u'population']
80
81 # next_query = (
82 # fragments_ref
83 # .start_after(last_doc)
84 # .limit(100)
85 # )
86 # # Use the query for pagination
87 # # ...
88
89 # Without cursor
90 fragments_ref = db.collection(u'fragments').limit(100)
91 docs = fragments_ref.stream()
92
93 all_urls_1d = []
94 all_urls = []
95
96 for doc in docs:
97 fragment = doc.to_dict()
98 url = fragment['url']
99 all_urls_1d.append(url)
100
101 idx = 0
102 while idx < len(all_urls_1d):
103 num = random.randint(2, 10)
104 urls = []
105 for i in range(idx, idx+num):
106 if i >= len(all_urls_1d):
107 break
108 urls.append(all_urls_1d[i])
109 all_urls.append(urls)
110 idx += num
111
112 return render_template('speech_backup.html', all_urls=all_urls, enumerate=enumerate)
113
114@app.route('/payments')
115@login_required
116def payments():
117 users_pay = db.collection(u'users_summary')
118 docs = users_pay.stream()
119 my_dict = { el.id: el.to_dict() for el in docs }
120 return render_template('payments.html', name=my_dict)
121
122@app.route('/transcripts')
123def transcripts():
124 # a = datetime.datetime.now()
125 # jobs_ref= dbs.reference('jobs')
126 # docs=jobs_ref.get()
127 # b = datetime.datetime.now()
128 # c=b-a
129 # print(c)
130 # print(docs)
131 jobs_ref = db.collection(u'jobs').limit(10)
132 docs = jobs_ref.get()
133 all_urls_1d = []
134 all_urls = []
135 all_text = []
136 for doc in docs:
137 job = doc.to_dict()
138 fragment_id = job['fragment']
139 text = job['deliverable']
140 all_text.append(text)
141 fragment_id = fragment_id[fragment_id.rfind('/')+1:]
142 print(fragment_id)
143 fragment = db.collection(u'fragments').document(fragment_id).get().to_dict()
144 print(fragment['url'])
145 print('\n\n')
146 url = fragment['url']
147 all_urls.append(url)
148 return render_template('transcripts.html',urls=all_urls,text=all_text)
149@app.route('/metrics')
150def metrics():
151 return render_template('metrics.html')
152# somewhere to logout
153@app.route("/logout")
154@login_required
155def logout():
156 logout_user()
157 return Response('<p>Logged out</p>')
158
159# handle login failed
160@app.errorhandler(401)
161def page_not_found(e):
162 return Response('<p>Login failed</p>')
163
164# callback to reload the user object
165@login_manager.user_loader
166def load_user(userid):
167 return User(userid)
168
169if __name__ == '__main__':
170 app.run(debug = True)