Skip to content

Commit

Permalink
Added handle support for channels
Browse files Browse the repository at this point in the history
  • Loading branch information
Henrik Berggren committed Aug 13, 2008
1 parent dab598e commit 5c69b48
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 17 deletions.
2 changes: 1 addition & 1 deletion app.yaml
@@ -1,5 +1,5 @@
application: onelinr
version: 2
version: 3
runtime: python
api_version: 1

Expand Down
1 change: 1 addition & 0 deletions channel.html
Expand Up @@ -2,6 +2,7 @@
{% include "header.html" %}
<div id="header">
<a id="text-logo" href="/">Onelinr</a> | You are viewing the {{channel.name}} oneliner channel. <a href="http://hobix.com/textile/">Textile</a> is enabled.
{{user_html}}
<!-- <span id="customizr">
<span id="text-color">
<form>
Expand Down
18 changes: 18 additions & 0 deletions handle.html
@@ -0,0 +1,18 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">

<title>Choose a Onelinr handle</title>

<link href="/images/favicon.ico" rel="shortcut icon" />
<link href="/stylesheets/style.css" media="screen, projection" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Choose a Onelinr handle</h1>
<form action="" method="post">
<input type="text" id="handle" name="handle">
<input type="submit" value="Ok">
</form>
</body>
</html>
14 changes: 7 additions & 7 deletions index.yaml
Expand Up @@ -20,43 +20,43 @@ indexes:
# automatically uploaded to the admin console when you next deploy
# your application using appcfg.py.

# Used once in query history.
# Unused in query history -- copied from input.
- kind: Channel
properties:
- name: name
- name: post_id

# Used 6 times in query history.
# Unused in query history -- copied from input.
- kind: Channel
properties:
- name: name
- name: post_id
direction: desc

# Unused in query history -- copied from input.
# Used once in query history.
- kind: Post
properties:
- name: belongs_to
- name: id

# Used 466 times in query history.
# Unused in query history -- copied from input.
- kind: Post
properties:
- name: belongs_to
- name: post_id

# Used once in query history.
# Used 65 times in query history.
- kind: Post
properties:
- name: date_posted
direction: desc

# Unused in query history -- copied from input.
# Used 6 times in query history.
- kind: Post
properties:
- name: id
direction: desc

# Used 10 times in query history.
# Used 5 times in query history.
- kind: Post
ancestor: yes
103 changes: 94 additions & 9 deletions onelinr.py
Expand Up @@ -8,6 +8,8 @@
from google.appengine.ext.webapp \
import template

from google.appengine.api import users

import re
from google.appengine.ext.webapp.util import run_wsgi_app
from django.conf import settings
Expand All @@ -19,18 +21,23 @@

class Channel(db.Model):
name = db.StringProperty(required=True)
post_count = db.IntegerProperty(0)
post_count = db.IntegerProperty(default=0)
fore_color = db.StringProperty()
back_color = db.StringProperty()
font = db.TextProperty()
date_created = db.DateTimeProperty(auto_now_add=True)

class User(db.Model):
google_user = db.UserProperty(required=True)
handle = db.StringProperty(required=True)

class Post(db.Model):
text = db.StringProperty()
belongs_to = db.ReferenceProperty(Channel)
date_posted = db.DateTimeProperty(auto_now_add=True)
post_id = db.IntegerProperty()

posted_by = db.ReferenceProperty(User)

class StartPage(webapp.RequestHandler):

def get(self):
Expand All @@ -52,15 +59,23 @@ def get(self):
channel = q.get()

if not channel:
channel = Channel(name=name,post_count=0)
channel = Channel(name=name)
channel.put()

posts = Post.all()
posts.filter("belongs_to =", channel.key()).order('-post_id')

self.response.out.write(template.render('channel.html', {'channel':channel, 'posts':posts}))
google_user = users.get_current_user()
user = get_user(google_user)

user_html = generate_handle_links(google_user, user, self.request)

self.response.out.write(template.render('channel.html', {'channel':channel, 'posts':posts, 'user_html':user_html}))

def post(self):
google_user = users.get_current_user()
user = get_user(google_user)

channel_key = self.request.get('key')
channel = db.get(channel_key)
q = db.GqlQuery("SELECT * FROM Post WHERE belongs_to = :channel ORDER BY post_id DESC", channel=channel)
Expand All @@ -71,19 +86,65 @@ def post(self):
next_id = last_post.post_id+1
else:
next_id = 1

# force_unicode function from django used here
post = Post(text=force_unicode(self.request.get('value')), belongs_to=channel, post_id=next_id)

if google_user and user:
post.posted_by = user
handle = user.handle
else:
handle = ""
post = db.get(post.put())

# update post_count
if post:
channel = db.get(channel_key)
logging.info(channel.post_count)
channel.post_count = channel.post_count + 1
channel.put()

self.response.out.write("{'post_id':"+str(post.post_id)+",'text':'"+re.escape(textile.textile(post.text))+"'}")
self.response.out.write("{'post_id':"+str(post.post_id)+",'text':'"+re.escape(textile.textile(post.text))+"', 'handle':'"+re.escape(handle)+"'}")

class HandlePage(webapp.RequestHandler):

def get(self):
channel_name = url_to_channel_name(self.request.uri)
google_user = users.get_current_user()

if not google_user:
self.redirect(users.create_login_url(self.request.uri))

if get_user(google_user) and self.request.get("c") != "1":
self.redirect("/"+channel_name)
else:
self.response.out.write(template.render('handle.html',{}))

def post(self):
channel_name = url_to_channel_name(self.request.uri)

self.request.get("handle")

handle = self.request.get("handle").strip()

if len(handle) < 1:
self.redirect(self.request.uri)
else:
google_user = users.get_current_user()

if not google_user:
self.redirect(user.get_login_url(self.request.uri))

user = get_user(google_user)

if not user:
user = User(handle=handle, google_user=google_user)
else:
user.handle = handle

user.put()

self.redirect("/"+channel_name)

class ChannelFeed(webapp.RequestHandler):
def get(self):
Expand Down Expand Up @@ -123,7 +184,12 @@ def get(self):
posts_json = "["
idx = 1
for post in posts:
posts_json += "{'post_id':"+str(post.post_id)+",'text':'"+re.escape(textile.textile(post.text))+"'}"
if post.posted_by:
handle = post.posted_by.handle
else:
handle = ""

posts_json += "{'post_id':"+str(post.post_id)+",'text':'"+re.escape(textile.textile(post.text))+"', 'handle':'"+re.escape(handle)+"'}"
if idx != len(posts):
posts_json += ","
idx += 1
Expand All @@ -133,13 +199,14 @@ def get(self):

def main():
application = webapp.WSGIApplication([('/', StartPage),
('/.*/handle', HandlePage),
('/feed', Feed),
('/feed/', Feed),
('/.*/feed', ChannelFeed),
('/.*/feed/', ChannelFeed),
('/.*/latest', LatestPosts),
('/.*', ChannelPage) ],
debug=False)
debug=True)

run_wsgi_app(application)

Expand All @@ -162,6 +229,24 @@ def renderChannelCloud(channels):

return channelList

def get_user(google_user):
q = db.GqlQuery("SELECT * FROM User WHERE google_user = :google_user", google_user=google_user)
return q.get()

def generate_handle_links(google_user, user, request):
channel_name = url_to_channel_name(request.uri)
if google_user:
if user:
url = users.create_logout_url(request.uri)
html = "Your handle is <i>"+user.handle+"</i>, <a href='/"+channel_name+"/handle?c=1'>change it</a> or <a href='"+url+"'>Sign out</a>"
else:
url = users.create_logout_url(request.uri)
html = "<a href='/"+channel_name+"/handle'>Choose a handle</a> or <a href='"+url+"'>Sign out</a>"
else:
url = users.create_login_url("/"+channel_name+"/handle")
html = "<a href='"+url+"'>Sign in</a>"

return html

def url_to_channel_name(url):
url_array = url.split("/")
Expand Down

0 comments on commit 5c69b48

Please sign in to comment.