forked from youtify/youtify
/
main.py
77 lines (66 loc) · 3.45 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import os
import random
import re
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp import util
from toplist import get_or_create_toplist_json
from model import get_current_youtify_user
from model import create_youtify_user
from playlists import get_playlists_json_for_user
from languages import auto_detect_language
from snapshots import get_deployed_translations_json
from languages import get_languages
import flattr_toplist
class MainHandler(webapp.RequestHandler):
def get(self):
current_user = users.get_current_user()
youtify_user = get_current_youtify_user()
playlists = '[]';
if youtify_user is not None:
playlists = get_playlists_json_for_user(youtify_user)
youtify_user.device = str(random.random())
youtify_user.save()
if (current_user is not None) and (youtify_user is None):
youtify_user = create_youtify_user()
ON_PRODUCTION = os.environ['SERVER_SOFTWARE'].startswith('Google App Engine') # http://stackoverflow.com/questions/1916579/in-python-how-can-i-test-if-im-in-google-app-engine-sdk
# Find videotag and generate open graph meta tags
match = re.compile(r'videos/(.*)').search(self.request.url)
if match:
og_tag = '<meta property="og:video" content="http://www.youtube.com/v/' + match.groups()[0] + '?version=3&autohide=1"/><meta property="og:video:type" content="application/x-shockwave-flash"/><meta property="og:video:width" content="396"/><meta property="og:video:height" content="297"/>'
else:
og_tag = ''
lang = auto_detect_language(self.request)
path = os.path.join(os.path.dirname(__file__), 'html', 'index.html')
self.response.headers['Content-Type'] = 'text/html; charset=utf-8';
self.response.out.write(template.render(path, {
'user': current_user,
'is_admin': int(users.is_current_user_admin()),
'youtify_user': youtify_user,
'playlistsFromServer': playlists,
'autoDetectedLanguageByServer': lang,
'autoDetectedTranslations': get_deployed_translations_json(lang),
'accept_language_header': self.request.headers.get('Accept-Language', ''), # todo remove
'logged_in': int(current_user is not None),
'has_flattr_access_token': int(youtify_user is not None and youtify_user.flattr_access_token is not None),
'flattr_user_name': youtify_user is not None and youtify_user.flattr_user_name,
'login_url': users.create_login_url('/'),
'logout_url': users.create_logout_url('/'),
'toplist': get_or_create_toplist_json(),
'flattr_toplist': flattr_toplist.get_or_create_toplist_json(),
'ON_PRODUCTION': ON_PRODUCTION,
'ON_DEV': ON_PRODUCTION is False,
'USE_PRODUCTION_JAVASCRIPT': ON_PRODUCTION,
'languages': [lang for lang in get_languages() if lang['enabled_on_site']],
#'USE_PRODUCTION_JAVASCRIPT': True, # Uncomment to try out production settings. Remember to build production.js with localhost:8080/minimizer
'url': self.request.url,
'og_tag': og_tag,
}))
def main():
application = webapp.WSGIApplication([
('/.*', MainHandler),
], debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()