Some style improvements.

- Used yapf to clean things up
- add a flake8 config
- add .python-version file for pyenv
- add yapf style config

Change-Id: I1bda89cff8fca2c770fc81b94e76e398dd64662c
diff --git a/.flake8 b/.flake8
new file mode 100644
index 0000000..f61c53b
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,3 @@
+[flake8]
+max-line-length=80
+ignore = E111 # indentation is not a multiple of four 2-space indentation is used here.
\ No newline at end of file
diff --git a/.python-version b/.python-version
new file mode 100644
index 0000000..9bbf492
--- /dev/null
+++ b/.python-version
@@ -0,0 +1 @@
+2.7.14
diff --git a/.style.yapf b/.style.yapf
new file mode 100644
index 0000000..4861caf
--- /dev/null
+++ b/.style.yapf
@@ -0,0 +1,3 @@
+[style]
+based_on_style = google
+indent_width = 2
diff --git a/client.py b/client.py
index e6662cd..2c90c87 100644
--- a/client.py
+++ b/client.py
@@ -11,7 +11,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """The GCI API Client.  A thin wrapper around the GCI API.
 
 Exmple usage:
@@ -34,15 +33,16 @@
 class GCIAPIClient(object):
   """GCIAPIClient provides a thin wrapper around the GCI Task API.
 
-  A GCIAPIClient simplifies working with tasks by forming the HTTP requests on
-  behalf of the caller.
+    A GCIAPIClient simplifies working with tasks by forming the HTTP requests on
+    behalf of the caller.
 
-  Attributes:
-    url_prefix: A string prefix for the codin URL
-    headers: A dictionary of HTTP headers
-  """
+    Attributes:
+      url_prefix: A string prefix for the codin URL
+      headers: A dictionary of HTTP headers
+    """
 
-  def __init__(self, auth_token=None,
+  def __init__(self,
+               auth_token=None,
                url_prefix='https://codein.withgoogle.com/',
                debug=False):
     self.url_prefix = urlparse.urljoin(url_prefix, 'api/program/current/')
@@ -64,32 +64,36 @@
   def ListTasks(self, page=1):
     """Fetches a list of tasks.
 
-    Args:
-      page: Which page of results to return.
+        Args:
+          page: Which page of results to return.
 
-    Returns:
-      A JSON encoded list of tasks.
+        Returns:
+          A JSON encoded list of tasks.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = requests.get(self._Url('tasks'), headers=self.headers,
-                     params={'page': page})
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = requests.get(
+        self._Url('tasks'), headers=self.headers, params={
+            'page': page
+        })
     r.raise_for_status()
     return r.json()
 
   def GetTask(self, task_id):
     """Fetches a single task.
 
-    Args:
-      task_id: An integer id for the task.
+        Args:
+          task_id: An integer id for the task.
 
-    Returns:
-        A JSON encoded task.
+        Returns:
+            A JSON encoded task.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
     r = requests.get(self._Url('tasks/%d' % task_id), headers=self.headers)
     r.raise_for_status()
     return r.json()
@@ -97,57 +101,57 @@
   def NewTask(self, task):
     """Creates a single new task.
 
-    Args:
-      task: A task object.
+        Args:
+          task: A task object.
 
-    Returns:
-      A JSON encoded response.
+        Returns:
+          A JSON encoded response.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = requests.post(self._Url('tasks'), headers=self.headers,
-                      data=json.dumps(task))
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = requests.post(
+        self._Url('tasks'), headers=self.headers, data=json.dumps(task))
     r.raise_for_status()
     return r.json()
 
   def UpdateTask(self, task_id, task):
     """Modifies a single task.
 
-    Args:
-      task_id: An integer id for the task.
-      task: A task object.
+        Args:
+          task_id: An integer id for the task.
+          task: A task object.
 
-    Returns:
-      A JSON encoded response.
+        Returns:
+          A JSON encoded response.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = (
-        requests.put(
-            self._Url('tasks/%d' % task_id), data=json.dumps(task),
-            headers=self.headers))
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = (requests.put(
+        self._Url('tasks/%d' % task_id),
+        data=json.dumps(task),
+        headers=self.headers))
     r.raise_for_status()
     return r.json()
 
   def DeleteTask(self, task_id):
     """Deletes a single task.
 
-    Args:
-      task_id: An integer id for the task.
+        Args:
+          task_id: An integer id for the task.
 
-    Returns:
-      A JSON encoded response, if there is content in the response.
-      Otherwise None.
+        Returns:
+          A JSON encoded response, if there is content in the response.
+          Otherwise None.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = (
-        requests.delete(
-            self._Url('tasks/%d' % task_id),
-            headers=self.headers))
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = (requests.delete(self._Url('tasks/%d' % task_id), headers=self.headers))
     r.raise_for_status()
     # DELETE returns nothing on success, don't try and parse it.
     if r.content:
@@ -157,33 +161,38 @@
   def ListTaskInstances(self, page=1):
     """Fetches a list of tasks.
 
-    Args:
-      page: Which page of results to return.
+        Args:
+          page: Which page of results to return.
 
-    Returns:
-      A JSON encoded list of task instances.
+        Returns:
+          A JSON encoded list of task instances.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = requests.get(self._Url('instances'), headers=self.headers,
-                     params={'page': page})
+        Raises:
+
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = requests.get(
+        self._Url('instances'), headers=self.headers, params={
+            'page': page
+        })
     r.raise_for_status()
     return r.json()
 
   def GetTaskInstance(self, task_instance_id):
     """Fetches a single task.
 
-    Args:
-      task_instance_id: An integer id for the task instance.
+        Args:
+          task_instance_id: An integer id for the task instance.
 
-    Returns:
-        A JSON encoded task instance.
+        Returns:
+            A JSON encoded task instance.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = requests.get(self._Url('instances/%d' % task_instance_id),
-                     headers=self.headers)
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = requests.get(
+        self._Url('instances/%d' % task_instance_id), headers=self.headers)
     r.raise_for_status()
     return r.json()
diff --git a/csv_uploader.py b/csv_uploader.py
index 0d76d52..44680dc 100755
--- a/csv_uploader.py
+++ b/csv_uploader.py
@@ -12,7 +12,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """A simple CSV uploader client for the GCI API.
 
 Usage:
@@ -28,23 +27,26 @@
 import csv
 
 import requests
+
 import client as gciclient
 
-
 argparser = argparse.ArgumentParser(description='GCI CSV Task Uploader.')
-argparser.add_argument('--apikey', type=str, nargs='?', required=True,
-                       help='api key')
-argparser.add_argument('--url', type=str, nargs='?',
-                       default='https://codein.withgoogle.com',
-                       help='server url')
-argparser.add_argument('--publish', action='store_true',
-                       help='publish uploaded tasks')
-argparser.add_argument('-v', '--verbose', action='store_true',
-                       help='enable verbose logging')
-argparser.add_argument('--debug', action='store_true',
-                       help='enable debug request logging')
-argparser.add_argument('files', nargs=argparse.REMAINDER,
-                       help='csv file to upload')
+argparser.add_argument(
+    '--apikey', type=str, nargs='?', required=True, help='api key')
+argparser.add_argument(
+    '--url',
+    type=str,
+    nargs='?',
+    default='https://codein.withgoogle.com',
+    help='server url')
+argparser.add_argument(
+    '--publish', action='store_true', help='publish uploaded tasks')
+argparser.add_argument(
+    '-v', '--verbose', action='store_true', help='enable verbose logging')
+argparser.add_argument(
+    '--debug', action='store_true', help='enable debug request logging')
+argparser.add_argument(
+    'files', nargs=argparse.REMAINDER, help='csv file to upload')
 
 FLAGS = argparser.parse_args()
 
@@ -52,13 +54,13 @@
 def upload(client, filename):
   """Creates new tasks for each line in the csv pointed to by filename.
 
-  Args:
-    client: A GCIAPIClient to form and make the requests.
-    filename: A string filename containing the csv encoded tasks.
+    Args:
+      client: A GCIAPIClient to form and make the requests.
+      filename: A string filename containing the csv encoded tasks.
 
-  Raises:
-    none
-  """
+    Raises:
+      none
+    """
   with open(filename, 'rb') as csvfile:
     taskreader = csv.DictReader(csvfile, skipinitialspace=True)
 
@@ -69,9 +71,9 @@
       t['categories'] = (task['categories'].split(',')
                          if len(task['categories']) else [])
       t['tags'] = task['tags'].split(',') if len(task['tags']) else []
-      t['is_beginner'] = (
-          True if task['is_beginner'].lower() in ['yes', 'true', '1']
-          else False)
+      t['is_beginner'] = (True if
+                          task['is_beginner'].lower() in ['yes', 'true', '1']
+                          else False)  # yapf disable
       t['time_to_complete_in_days'] = int(task['time_to_complete_in_days'])
       t['max_instances'] = int(task['max_instances'])
 
@@ -86,9 +88,7 @@
 
 def main():
   client = gciclient.GCIAPIClient(
-      auth_token=FLAGS.apikey,
-      url_prefix=FLAGS.url,
-      debug=FLAGS.debug)
+      auth_token=FLAGS.apikey, url_prefix=FLAGS.url, debug=FLAGS.debug)
 
   for filename in FLAGS.files:
     upload(client, filename)
diff --git a/list_instances.py b/list_instances.py
index 044117b..bebf000 100755
--- a/list_instances.py
+++ b/list_instances.py
@@ -12,7 +12,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """List all task instances for your Organization via the GCI API."""
 
 import argparse
@@ -20,31 +19,31 @@
 
 import client as gciclient
 
-
 argparser = argparse.ArgumentParser(description='GCI Task Instances')
-argparser.add_argument('--apikey', type=str, nargs='?', required=True,
-                       help='api key')
-argparser.add_argument('--url', type=str, nargs='?',
-                       default='https://codein.withgoogle.com',
-                       help='server url')
-argparser.add_argument('--debug', action='store_true',
-                       help='enable debug request logging')
+argparser.add_argument(
+    '--apikey', type=str, nargs='?', required=True, help='api key')
+argparser.add_argument(
+    '--url',
+    type=str,
+    nargs='?',
+    default='https://codein.withgoogle.com',
+    help='server url')
+argparser.add_argument(
+    '--debug', action='store_true', help='enable debug request logging')
 
 FLAGS = argparser.parse_args()
 
 
 def main():
   client = gciclient.GCIAPIClient(
-      auth_token=FLAGS.apikey,
-      url_prefix=FLAGS.url,
-      debug=FLAGS.debug)
+      auth_token=FLAGS.apikey, url_prefix=FLAGS.url, debug=FLAGS.debug)
 
   next_page = 1
   while next_page > 0:
     instances = client.ListTaskInstances(page=next_page)
     for ti in instances['results']:
       print '\t'.join([
-          str(ti['id']),
+          str(ti['id']),  # yapf: disable
           ti['status'].encode('utf-8'),
           ti['student_display_name'].encode('utf-8'),
           ti['task_definition_name'].encode('utf-8')
diff --git a/list_tasks.py b/list_tasks.py
index 098a495..ec067f3 100755
--- a/list_tasks.py
+++ b/list_tasks.py
@@ -12,7 +12,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """List all tasks for your Organization via the GCI API."""
 
 import argparse
@@ -20,24 +19,24 @@
 
 import client as gciclient
 
-
 argparser = argparse.ArgumentParser(description='GCI Tasks')
-argparser.add_argument('--apikey', type=str, nargs='?', required=True,
-                       help='api key')
-argparser.add_argument('--url', type=str, nargs='?',
-                       default='https://codein.withgoogle.com',
-                       help='server url')
-argparser.add_argument('--debug', action='store_true',
-                       help='enable debug request logging')
+argparser.add_argument(
+    '--apikey', type=str, nargs='?', required=True, help='api key')
+argparser.add_argument(
+    '--url',
+    type=str,
+    nargs='?',
+    default='https://codein.withgoogle.com',
+    help='server url')
+argparser.add_argument(
+    '--debug', action='store_true', help='enable debug request logging')
 
 FLAGS = argparser.parse_args()
 
 
 def main():
   client = gciclient.GCIAPIClient(
-      auth_token=FLAGS.apikey,
-      url_prefix=FLAGS.url,
-      debug=FLAGS.debug)
+      auth_token=FLAGS.apikey, url_prefix=FLAGS.url, debug=FLAGS.debug)
 
   next_page = 1
   while next_page > 0: