

# 1. Introduction

This page is tracking of progress for GSoC 2011 Project: Integration with External API's

---


# 2. Requirements
## 2.1 Melange Lists
### Overview
Basically an export button for each lists on Melange that triggers an export mechanism to Google SpreadSheets. (including OAuth roundtrip, access token storing on datastore)
### Problems & Solutions
  * **Problem:** exporting a JavaScript list
  * **Solution:** export spreadsheet on client side. Implement JS methods over GData Protocols.
  * **Problem:** Making cross domain requests
  * **Solution:** Use an proxy url to emulate cross-domain requests. See blog post from [week10](http://melange-dev.blogspot.com/2011/08/gsoc-2011-integration-with-external.html,) and [Week11](http://melange-dev.blogspot.com/2011/08/gsoc-2011-integration-with-external_08.html).
  * **Problem:** Uploading chunks of data.
  * **Solution:** For current Spreadsheet API it's not possible to add multiple rows with a batch requests. We used uploading document as csv and converting it to native spreadsheets format after upload. Uploading multiple chunks of a big data prevents converting after upload. So we can't export very large lists.

### Result

## 2.2 Student Proposals
### Overview
Students will be able to edit their proposals through tinyMCE editor or link to a Google Document file. There will be a "Sync Now" button to syncronize proposal that Melage holds with actual Google Documents file.
### Problems & Solutions
  * **Problem:** Student may not be awere that proposal is syncronised only when he/she clicks "Sync Now" button.
  * **Solution:** Give responsibility to student.


  * **Problem:** As Google Documents stores HTML files in full-HTML form (including images, css files etc.) a method must be implemented to embed that document to actual proposal entry.
  * **Solution:** Google Documents no longer supports HTML editing. We export document format documents as HTML. This document comes style embed in.

### Result
Syncing proposal is student's responsibity. Student selects it's document through an autocomplete widget after logged in to Google Documents.

## 2.3 Surveys (issue 1243 (on Google Code))
### Overview
Export a survey as either a pdf, google doc, plain text, something to save the entire webpage view.

## 2.4 Tracking Numbers (issue 1239 (on Google Code))
### Overview
Program administrators have spreadsheets that will enable students to have tracking numbers for their welcome packages and tshirts. Same for payment status.

## 2.5 Export Melange stuff for developers' use
### Overview
Export some statistics and data to Google Documents to work on or to integrate with other services like Fusion Tables.



---


# 4. Project Timeline
This table is based on deliverables.

| 25 May - 31 May (Week 1) | Add Google Data packages to Melange. |
|:-------------------------|:-------------------------------------|
| 1 June - 7 June (Week 2) | Add related fields create required models. |
| 8 June - 21 June (Week 3,4) | Integrate OAuth.                     |
| 22 June - 12 July (Week 5,6,7) | Student proposal syncing. Write tests if possible. |
| 13 July - 15 July        | Midterm Evaluation.                  |
| 15 July - 19 July (Week 8) | Learn how Melange lists actually works. |
| 20 July - 2 August (Week 9,10) | Melange List exporting.              |
| 3 August - 17 August (Week 11,12) | Work on open issues about APIs. issue 1239 (on Google Code), issue 1243 (on Google Code) |
| 17 August - 26 August (Week 13) | Export Melange stuff for developers' use |

# 5. Design & Terminology
## 5.1 Open Auth Roundtrip
![https://lh3.googleusercontent.com/-G5GUxfUdXS0/TgC_I0dXVmI/AAAAAAAAADI/hAGOlYZngq0/s640/MelangeOAuth%252520%2525281%252529.png](https://lh3.googleusercontent.com/-G5GUxfUdXS0/TgC_I0dXVmI/AAAAAAAAADI/hAGOlYZngq0/s640/MelangeOAuth%252520%2525281%252529.png)
## 5.2 Popup OAuth Mechanism
It's important to authenticate user without leaving page especially if user has some unposted data on page. Popup mechanism works in the following way.
  * Developer includes 'melange.gdata.core.js' dependency to it's page that uses GData features.
  * A function that uses GData features turns itself to a login required function with myfunc = melange.gdata.createAuthorizedFunction(myfunc, [.md](.md))
  * When generated myfunc function is run, it triggers popup roundtrip if user is not logged in to GDocs.
  * After authentication finishes, popup closes itself after telling parent window login is successful and parent window resumes execution of myfunc function that is intended to run.


---

# 6. Meeting Notes & Agendas
## Monday, May 16 18:30:00 in UTC (Skype Conference)
### TODOs
  * Create the blogpost summarizing last week today.
  * Have a call with your mentor this week, most of us are in PDT time zone.
  * Put a link to your GAE instance on the wiki page (and blog if possible)
  * Don't forget to make your next blogpost before the next meeting.
  * Get ready to start coding!

## Tuesday, May 20 20:00:00 in UTC (GTalk with Mario)

Mario delivered me notes for my project from discussion with Melange team.
### TODOS:
  * Update project requirements
  * Start working on exporting a html document from Google Documents and integrating with Melange.
  * Come up with a timeline. Designate deliverables.
  * Focus on the main problems instead of thinking whole project or other stuff that is already known how to handle.

## Monday, June 21 20:00:00 in UTC (GTalk with Mario)

### TODOS:
  * Store tokens in datastore.
  * Provide a "remember me" checkbox with login button.
  * Store "remember me" choice and access token in Profile model.

## Wednesday, June 29 (GTalk with Mario)
### Notes
Bacause GAE filesystem is not writable it's not possible to export a document with current GData API, we talked how to overcome this. We decided, to modify gdata library as least as possible, we need to extend 'Export' funciton's defination to accept a memory file besides file path.
Not broking current API is important.


## Sunday, July 3 (GTalk with Mario)
### Notes
I asked Mario about easiest integration of 'gdata.js' script for each page that uses it. I asked how to eliminate initializing it in every page (by moving initialization to base template). The reason for this was, in future ther would be probably lots of pages that uses 'gdata.js' script and i wanted to move intialization code to base.html where initializaiton is done automatically.

Mario conclusion: "sometimes it's a tradeoff between DRY and YAGNI :)"

We decided to keep the initalization in each page uses 'gdata.js' until we really need to move it to the base template.

## Sunday, July 6 (GTalk with Mario)
### Notes
It's not possible to show OAuth roundtrip in an IFrame. Mario pointed a few ways of possible solutions. I tried on a https connection but that didn't work. So we had to decide to show OAuth roundtrip in a popup window. I created an [issue](http://code.google.com/p/gdata-issues/issues/detail?id=2651) for this.

## Tuesday, June 8 (GTalk with Mario)
### Notes
for proposal sync page, we decided leaving search queries to GData API, instead of getting full documents after the page is loaded.

## Tuesday, June 23 (GTalk with Mario)
### Notes
Mario suggested to use Restful API for GData on client-side as there isn't a ready JS API. This will also prevent wasting datastore cycles as we won't run two transaction for the same entities.

## Tuesday, June 28 (GTalk with Mario)
## Notes
We talked about how to skip popup blockers for popup pages. We decided we should trigger popup mechanism exactly just after a click event occurs. We rediscussed our current popup mechanism and decided to make some changes on design through this.


## Agust 6 20:00:00 in UTC (GTalk with Mario)
### Notes
  * We talked about how to eliminate cross-domain requests by emulating them with a proxy URL.
  * Mario stressed: "Those are nice-to-have, the issues are filed directly by Carol so obviously they have high priority"
  * He also warned me about updating wiki more frequently.