Skip to content
This repository has been archived by the owner on Mar 18, 2024. It is now read-only.

Commit

Permalink
Merge branch 'release/0.1.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
smirnoffmg committed Jan 13, 2017
2 parents 379124a + 8b2a7ee commit d8660e6
Show file tree
Hide file tree
Showing 12 changed files with 327 additions and 15 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# idea
.idea

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
Expand Down
7 changes: 7 additions & 0 deletions docs/modules.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
python_jawbone
==============

.. toctree::
:maxdepth: 4

python_jawbone
38 changes: 38 additions & 0 deletions docs/python_jawbone.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
python_jawbone package
======================

Submodules
----------

python_jawbone.client module
----------------------------

.. automodule:: python_jawbone.client
:members:
:undoc-members:
:show-inheritance:

python_jawbone.consts module
----------------------------

.. automodule:: python_jawbone.consts
:members:
:undoc-members:
:show-inheritance:

python_jawbone.exceptions module
--------------------------------

.. automodule:: python_jawbone.exceptions
:members:
:undoc-members:
:show-inheritance:


Module contents
---------------

.. automodule:: python_jawbone
:members:
:undoc-members:
:show-inheritance:
4 changes: 4 additions & 0 deletions python_jawbone/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# -*- coding: utf-8 -*-
from .client import JawboneClient
from .exceptions import JawboneException

__all__ = ['JawboneClient', 'JawboneException']

__author__ = """Maxim Smirnoff"""
__email__ = 'smirnoffmg@gmail.com'
Expand Down
183 changes: 183 additions & 0 deletions python_jawbone/client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# -*- coding: utf-8 -*-
try:
from urllib.parse import urljoin
except Exception:
from urlparse import urljoin

import requests

from .exceptions import JawboneException


class JawboneClient(object):
BASE_URL = 'https://jawbone.com/'
TOKEN = None

def __init__(self, token):
self.TOKEN = token

def __get_headers(self):
return {
'Authorization': 'Bearer {}'.format(self.TOKEN),
'Accept': 'application/json'
}

def __get(self, url, **params):
full_url = urljoin(self.BASE_URL, url)
headers = self.__get_headers()

r = requests.get(full_url, headers=headers, params=params)
if r.status_code == 200:
return r.json()
raise JawboneException(r.content)

# Body events (https://jawbone.com/up/developer/endpoints/body)

def get_body_events(self, date=None, page_token=None, start_time=None,
end_time=None, updated_after=None, limit=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/body_events',
date=date,
page_token=page_token,
start_time=start_time,
end_time=end_time,
updated_after=updated_after,
limit=limit
)

def get_body_event(self, xid):
return self.__get('/nudge/api/v.1.1/users/@me/body_events/{}'.format(xid))

# Band events (https://jawbone.com/up/developer/endpoints/bandevents)

def get_band_events(self, date=None, start_time=None, end_time=None, created_after=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/bandevents',
date=date,
start_time=start_time,
end_time=end_time,
created_after=created_after
)

# Heart rates (https://jawbone.com/up/developer/endpoints/heartrate)

def get_heart_rates(self, date=None, page_token=None, start_time=None,
end_time=None, updated_after=None, limit=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/heartrates',
date=date,
page_token=page_token,
start_time=start_time,
end_time=end_time,
updated_after=updated_after,
limit=limit
)

# Custom events (https://jawbone.com/up/developer/endpoints/custom)

def get_custom_events(self, date=None, page_token=None, start_time=None,
end_time=None, updated_after=None, limit=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/generic_events',
date=date,
page_token=page_token,
start_time=start_time,
end_time=end_time,
updated_after=updated_after,
limit=limit
)

# Goals (https://jawbone.com/up/developer/endpoints/goals)

def get_goals(self):
return self.__get('/nudge/api/v.1.1/users/@me/goals')

# Meals (https://jawbone.com/up/developer/endpoints/meals)

def get_meals(self, date=None, page_token=None, start_time=None,
end_time=None, updated_after=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/meals',
date=date,
page_token=page_token,
start_time=start_time,
end_time=end_time,
updated_after=updated_after,
)

# Mood (https://jawbone.com/up/developer/endpoints/mood)

def get_mood(self, date=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/mood',
date=date
)

# Moves (/nudge/api/v.1.1/users/@me/moves)

def get_moves(self, date=None, page_token=None, start_time=None,
end_time=None, updated_after=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/moves',
date=date,
page_token=page_token,
start_time=start_time,
end_time=end_time,
updated_after=updated_after,
)

# Sleeps (https://jawbone.com/up/developer/endpoints/sleeps)

def get_sleeps(self, date=None, page_token=None, start_time=None,
end_time=None, updated_after=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/sleeps',
date=date,
page_token=page_token,
start_time=start_time,
end_time=end_time,
updated_after=updated_after,
)

# Timezone (https://jawbone.com/up/developer/endpoints/timezone)

def get_timezone(self, date=None, start_time=None, end_time=None,
timestamp=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/timezone',
date=date,
start_time=start_time,
end_time=end_time,
timestamp=timestamp,
)

# Trends (https://jawbone.com/up/developer/endpoints/trends)

def get_trends(self, end_date=None, bucket_size=None, num_buckets=100):
return self.__get(
'/nudge/api/v.1.1/users/@me/trends',
end_date=end_date,
bucket_size=bucket_size,
num_buckets=num_buckets
)

# User (https://jawbone.com/up/developer/endpoints/user)

def get_user(self):
return self.__get('/nudge/api/v.1.1/users/@me')

def get_friends(self):
return self.__get('/nudge/api/v.1.1/users/@me/friends')

# Workouts (https://jawbone.com/up/developer/endpoints/workouts)

def get_workouts(self, date=None, page_token=None, start_time=None,
end_time=None, updated_after=None):
return self.__get(
'/nudge/api/v.1.1/users/@me/workouts',
date=date,
page_token=page_token,
start_time=start_time,
end_time=end_time,
updated_after=updated_after,
)
24 changes: 24 additions & 0 deletions python_jawbone/consts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

MOOD_UNKNOWN = 0
MOOD_ULTRA_ENERGIZED = 1
MOOD_ENERGIZED = 2
MOOD_GOOD = 3
MOOD_JUST_OK = 4
MOOD_UNHAPPY = 5
MOOD_MISERABLE = 6
MOOD_ULTRA_MISERABLE = 7
MOOD_FEELING_FINE = 8

MOOD_MAPPING = {
MOOD_UNKNOWN: 'unknown',
MOOD_ULTRA_ENERGIZED: 'ultra energized',
MOOD_ENERGIZED: 'energized',
MOOD_GOOD: 'good',
MOOD_JUST_OK: 'just ok',
MOOD_UNHAPPY: 'unhappy',
MOOD_MISERABLE: 'miserable',
MOOD_ULTRA_MISERABLE: 'ultra miserable',
MOOD_FEELING_FINE: 'ultra miserable',
}
4 changes: 4 additions & 0 deletions python_jawbone/exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-

class JawboneException(Exception):
pass
1 change: 0 additions & 1 deletion python_jawbone/python_jawbone.py

This file was deleted.

5 changes: 1 addition & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
history = history_file.read()

requirements = [
# TODO: put package requirements here
'requests',
]

test_requirements = [
Expand Down Expand Up @@ -41,11 +41,8 @@
'License :: OSI Approved :: MIT License',
'Natural Language :: English',
"Programming Language :: Python :: 2",
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
],
test_suite='tests',
Expand Down
2 changes: 2 additions & 0 deletions tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
# -*- coding: utf-8 -*-
from .test_python_jawbone import TestJawboneClient
__all__ = ['TestJawboneClient']
69 changes: 60 additions & 9 deletions tests/test_python_jawbone.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,72 @@
Tests for `python_jawbone` module.
"""


import sys
import unittest

from python_jawbone import python_jawbone

from python_jawbone import JawboneClient

TEST_TOKEN = ''

class TestPython_jawbone(unittest.TestCase):

class TestJawboneClient(unittest.TestCase):
def setUp(self):
pass
self.test_client = JawboneClient(token=TEST_TOKEN)

def tearDown(self):
pass
self.test_client = None

def test_get_body_events(self):
info = self.test_client.get_body_events()
self.assertEqual(info['meta']['code'], 200)

def test_get_band_events(self):
info = self.test_client.get_band_events()
self.assertEqual(info['meta']['code'], 200)

def test_get_heart_rates(self):
info = self.test_client.get_heart_rates()
self.assertEqual(info['meta']['code'], 200)

def test_get_custom_events(self):
info = self.test_client.get_custom_events()
self.assertEqual(info['meta']['code'], 200)

def test_get_goals(self):
info = self.test_client.get_goals()
self.assertEqual(info['meta']['code'], 200)

def test_get_meals(self):
info = self.test_client.get_meals()
self.assertEqual(info['meta']['code'], 200)

def test_get_mood(self):
info = self.test_client.get_mood()
self.assertEqual(info['meta']['code'], 200)

def test_get_moves(self):
info = self.test_client.get_mood()
self.assertEqual(info['meta']['code'], 200)

def test_get_sleeps(self):
info = self.test_client.get_sleeps()
self.assertEqual(info['meta']['code'], 200)

def test_get_timezone(self):
info = self.test_client.get_timezone()
self.assertEqual(info['meta']['code'], 200)

def test_get_trends(self):
info = self.test_client.get_trends()
self.assertEqual(info['meta']['code'], 200)

def test_get_user(self):
info = self.test_client.get_user()
self.assertEqual(info['meta']['code'], 200)

def test_get_friends(self):
info = self.test_client.get_friends()
self.assertEqual(info['meta']['code'], 200)

def test_000_something(self):
pass
def test_get_workouts(self):
info = self.test_client.get_workouts()
self.assertEqual(info['meta']['code'], 200)
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tox]
envlist = py26, py27, py33, py34, py35, flake8
envlist = py27, py35, flake8

[testenv:flake8]
basepython=python
Expand Down

0 comments on commit d8660e6

Please sign in to comment.