Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ HOW TO RUN
----------

0. Install the necessary prerequisites:
python 2.7+
pip install beautifulsoup4
python 2.7
pip install requests[security]

1. Enter the value of your 'SACSID' cookie into 'sacsid_cookie.txt'.
Expand Down
310 changes: 155 additions & 155 deletions client.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,158 +32,158 @@


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.

Attributes:
url_prefix: A string prefix for the codin URL
headers: A dictionary of HTTP headers
"""

def __init__(self, auth_token=None,
url_prefix='https://codein.withgoogle.com/',
debug=False):
self.url_prefix = urlparse.urljoin(url_prefix, 'api/program/current/')
self.headers = {
'Authorization': 'Bearer %s' % auth_token,
'Content-Type': 'application/json',
}

if debug:
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger('requests.packages.urllib3')
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

def _Url(self, path):
return urlparse.urljoin(self.url_prefix, path) + '/'

def ListTasks(self, page=1):
"""Fetches a list of tasks.

Args:
page: Which page of results to return.

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})
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.

Returns:
A JSON encoded task.

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()

def NewTask(self, task):
"""Creates a single new task.

Args:
task: A task object.

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))
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.

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))
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.

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))
r.raise_for_status()
# DELETE returns nothing on success, don't try and parse it.
if r.content:
return r.json()
return

def ListTaskInstances(self, page=1):
"""Fetches a list of tasks.

Args:
page: Which page of results to return.

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})
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.

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)
r.raise_for_status()
return r.json()
"""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.

Attributes:
url_prefix: A string prefix for the codin URL
headers: A dictionary of HTTP headers
"""

def __init__(self, auth_token=None,
url_prefix='https://codein.withgoogle.com/',
debug=False):
self.url_prefix = urlparse.urljoin(url_prefix, 'api/program/current/')
self.headers = {
'Authorization': 'Bearer %s' % auth_token,
'Content-Type': 'application/json',
}

if debug:
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger('requests.packages.urllib3')
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

def _Url(self, path):
return urlparse.urljoin(self.url_prefix, path) + '/'

def ListTasks(self, page=1):
"""Fetches a list of tasks.

Args:
page: Which page of results to return.

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})
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.

Returns:
A JSON encoded task.

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()

def NewTask(self, task):
"""Creates a single new task.

Args:
task: A task object.

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))
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.

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))
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.

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))
r.raise_for_status()
# DELETE returns nothing on success, don't try and parse it.
if r.content:
return r.json()
return

def ListTaskInstances(self, page=1):
"""Fetches a list of tasks.

Args:
page: Which page of results to return.

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})
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.

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)
r.raise_for_status()
return r.json()
Loading