#labels gsoc2011,externalapisproject
#Tracks progress for the "integration with external apis" project.

= 1. Introduction =

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

= 2. Requirements =
== 2.1 Melange Lists ==
===2.1.1 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)
===2.1.2 Problems & Solutions===
 * *Problem:* exporting a JavaScript list
 * *Solution:* 

== 2.2 Student Proposals ==
=== 2.2.1 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.
=== 2.2.2 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:* 
----

= Design & Terminology = 
== 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'))
}}}