Skip to content

Commit

Permalink
Making spreadsheets and even with key, but not yet getting the key ba…
Browse files Browse the repository at this point in the history
…ck. But

titles aren't working?
  • Loading branch information
glasser committed Jan 12, 2011
1 parent ddcbe76 commit c6a6e47
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 44 deletions.
86 changes: 44 additions & 42 deletions hq/puzzles.py
Expand Up @@ -10,10 +10,13 @@
from google.appengine.api import users
from google.appengine.ext import db

import atom.core
import bzrlib.merge3
from django.utils import html
import gdata.acl.data
import gdata.auth
import gdata.docs.client
import gdata.docs.data
import gdata.gauth
import gdata.spreadsheets.client

Expand Down Expand Up @@ -274,14 +277,12 @@ def txn():
self.redirect(PuzzleHandler.get_url(puzzle.key().id()))


DOCS_CLIENT = gdata.docs.client.DocsClient()


class GetOAuthTokenHandler(handler.RequestHandler):
def get(self, puzzle_id):
callback_url = ('http://' + GDATA_SETTINGS['CONSUMER_KEY']
+ GetAccessTokenHandler.get_url(puzzle_id))
request_token = DOCS_CLIENT.GetOAuthToken(
client = gdata.docs.client.DocsClient()
request_token = client.GetOAuthToken(
GDATA_SETTINGS['SCOPES'], callback_url, GDATA_SETTINGS['CONSUMER_KEY'],
GDATA_SETTINGS['CONSUMER_SECRET'])
gdata.gauth.AeSave(request_token, RequestTokenKey())
Expand All @@ -296,55 +297,56 @@ def get(self, puzzle_id):
request_token.verifier = self.request.get('oauth_verifier')
assert request_token.verifier != ''
request_token.auth_state = gdata.gauth.AUTHORIZED_REQUEST_TOKEN
access_token = DOCS_CLIENT.GetAccessToken(request_token)
client = gdata.docs.client.DocsClient()
access_token = client.GetAccessToken(request_token)
gdata.gauth.AeSave(access_token, AccessTokenKey())
self.redirect(PuzzleHandler.get_url(puzzle_id))


class AclWithKey(atom.core.XmlElement):
_qname = gdata.acl.data.GACL_TEMPLATE % 'withKey'
key = 'key'
role = gdata.acl.data.AclRole


gdata.acl.data.AclEntry.with_key = AclWithKey


class SpreadsheetAddHandler(handler.RequestHandler):
def get(self, puzzle_id):
puzzle_id = long(puzzle_id)
puzzle = model.Puzzle.get_by_id(puzzle_id)
# TODO(glasser): Better error handling.
assert puzzle is not None

# access_token = gdata.gauth.AeLoad(SETTINGS['ACCESS_TOKEN'])
# if not isinstance(access_token, gdata.gauth.OAuthHmacToken):
# self.redirect(GetOAuthTokenHandler.get_url())
# return

# # See if we have an auth token for this user.
# token = get_auth_token(self.request)
# if token is None:
# auth_url = gdata.gauth.generate_auth_sub_url(
# self.request.url,
# (gdata.docs.client.DocsClient.auth_scopes +
# gdata.spreadsheets.client.SpreadsheetsClient.auth_scopes),
# domain=handler.APPS_DOMAIN)
# self.render_template("auth_required", {"auth_url": auth_url})
# return
# assert token != False # There must be a user to access the app at all

# client = gdata.docs.client.DocsClient()
# doc = client.Create(gdata.docs.data.SPREADSHEET_LABEL,
# "%s [%s]" % (self.request.get('title'), puzzle.title),
# writers_can_invite=True,
# auth_token=token)
# match = gdata.docs.data.RESOURCE_ID_PATTERN.match(doc.resource_id.text)
# assert match
# assert match.group(1) == gdata.docs.data.SPREADSHEET_LABEL
# doc_key = match.group(3)
# acl_entry = gdata.docs.data.Acl(
# role=gdata.acl.data.AclRole(value="writer"),
# scope=gdata.acl.data.AclScope(type="group",
# value=handler.GROUP_ACL))
# acl_entry.category.append(atom.data.Category(
# scheme=gdata.docs.data.DATA_KIND_SCHEME,
# term="http://schemas.google.com/acl/2007#accessRule"))
# client.post(acl_entry, doc.get_acl_feed_link().href, auth_token=token)
# sheet = model.Spreadsheet(puzzle=puzzle, spreadsheet_key=doc_key)
# sheet.put()
# self.redirect(PuzzleHandler.get_url(puzzle_id))
access_token = LoadAccessToken()
if access_token is None:
self.redirect(GetOAuthTokenHandler.get_url(puzzle_id))
return
client = gdata.docs.client.DocsClient()
auth_token = gdata.gauth.OAuthHmacToken(
GDATA_SETTINGS['CONSUMER_KEY'], GDATA_SETTINGS['CONSUMER_SECRET'],
access_token.token, access_token.token_secret,
gdata.gauth.ACCESS_TOKEN,
next=None, verifier=None)
doc = client.Create(gdata.docs.data.SPREADSHEET_LABEL,
"%s [%s]" % (self.request.get('title'), puzzle.title),
auth_token=auth_token)
match = gdata.docs.data.RESOURCE_ID_PATTERN.match(doc.resource_id.text)
assert match
assert match.group(1) == gdata.docs.data.SPREADSHEET_LABEL
doc_key = match.group(3)
acl_entry = gdata.docs.data.Acl(
with_key=AclWithKey(key='ignored',
role=gdata.acl.data.AclRole(value='writer')),
scope=gdata.acl.data.AclScope(type='default'))
acl_entry.category.append(atom.data.Category(
scheme=gdata.docs.data.DATA_KIND_SCHEME,
term="http://schemas.google.com/acl/2007#accessRule"))
client.post(acl_entry, doc.get_acl_feed_link().href, auth_token=auth_token)
sheet = model.Spreadsheet(puzzle=puzzle, spreadsheet_key=doc_key)
sheet.put()
self.redirect(PuzzleHandler.get_url(puzzle_id))


class RelatedAddHandler(handler.RequestHandler):
Expand Down
4 changes: 2 additions & 2 deletions templates/puzzle.html
Expand Up @@ -84,9 +84,9 @@ <h4>Spreadsheets</h4>

{% for spreadsheet in puzzle.spreadsheet_set %}
<iframe width='80%' height='250' frameborder='1'
src="http://spreadsheets.google.com/a/battlestarelectronica.org/ccc?key={{ spreadsheet.spreadsheet_key|urlencode }}&amp;output=html"></iframe>
src="http://spreadsheets.google.com/ccc?key={{ spreadsheet.spreadsheet_key|urlencode }}&amp;output=html"></iframe>
<br/>
<a href="http://spreadsheets.google.com/a/battlestarelectronica.org/ccc?key={{ spreadsheet.spreadsheet_key|urlencode }}"
<a href="http://spreadsheets.google.com/ccc?key={{ spreadsheet.spreadsheet_key|urlencode }}"
>Edit the spreadsheet.</a>
<br/>
{% endfor %}
Expand Down

0 comments on commit c6a6e47

Please sign in to comment.