#summary tracks progress for the "integration with external apis" project.
#labels Phase-Requirements

<wiki:toc max_depth="3" />

= 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:* 

== 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.
 * *Solution1:* Give responsibility to student.
 * *Solution2:* Sync proposal with stored ACL. Check for single revisions and get the closest revision to deadline.

 * *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:* 
----

= 3. Design & Terminology = 
== 3.1 Resource ==

Resource is a document or file that is exported to GDocs and being kept track of. When Melange exports a document to GDocs it will store returned document ID from Google Documents API. This document should be associated with user for whom resource exported for, and with a unique key that tells where the resource exported from. This shows the basic structure of Resource class:

{{{
class Resource(db.Model):
  """Model of an exported Google Docs resource
  """

  #: Required field storing "ID" of exported resource.
  #: This value is returned from Google Documents at first upload.
  resource_id = db.StringProperty(required=True)

  #: Name of the resource. This value is changed only when
  #: actual name of exported Google document changes.
  resource_name = db.StringProperty(required=True)

  #: Owner of document for whom document exported for, and 
  #: whose Google Documents account is expected to has the resource.
  owner = db.ReferenceProperty(reference_class=soc.models.user.User,
                               required=True,
                               collection_name='exported_documents',
                               verbose_name=ugettext('Owner'))
}}}
----
=4. 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.
