From 808c3cb152074ad66733c03fcb376ebc9f3948f7 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 20 Aug 2015 15:24:42 +0200 Subject: [PATCH 01/17] updating doc generation setting --- mkdocs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkdocs.yml b/mkdocs.yml index ba911fe..ccea5b1 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,8 @@ site_name: Yahoo-OAuth repo_url: https://github.com/josuebrunel/yahoo-oauth site_url: http://yahoo-oauth.readthedocs.org/en/latest/yahoo-oauth/ +use_directory_urls: false +strict: true site_description: Documentation on the Yahoo-OAuth Library site_author: Josue Kouka google_analytics: ['UA-32441224-5', 'yahoo-oauth.readthedocs.org'] From 36f6159d2eab9f676a5c28ad5183534de5855edd Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 17 Sep 2015 09:41:14 +0200 Subject: [PATCH 02/17] scipt running test improved --- run_tests.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/run_tests.sh b/run_tests.sh index 275c087..5c7e350 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -10,7 +10,6 @@ else Test='' fi -coverage run --source=yahoo_oauth -m unittest discover -#python -m unittest tests$TestCase$Test +coverage run --source=yahoo_oauth -m unittest tests$TestCase$Test coverage report coverage html From 37ef3ac8b85f6edd18eddccaa197009249049f86 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 17 Sep 2015 09:41:55 +0200 Subject: [PATCH 03/17] unittest improved, segregated by features --- tests.py | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/tests.py b/tests.py index c71446a..9fe4718 100755 --- a/tests.py +++ b/tests.py @@ -5,7 +5,8 @@ import myql from myql.utils import pretty_json -from yahoo_oauth.yahoo_oauth import json_write_data, json_get_data +from yahoo_oauth.utils import json_write_data, json_get_data +from yahoo_oauth.utils import yaml_write_data, yaml_get_data from yahoo_oauth import OAuth1, OAuth2 logging.basicConfig(level=logging.DEBUG,format="[%(asctime)s %(levelname)s] [%(name)s.%(module)s.%(funcName)s] %(message)s \n") @@ -13,9 +14,25 @@ oauth_logger.disabled = False + class TestYahooOAuth(unittest.TestCase): """Class to tests Yahoo OAuth module """ + def test_oauth1(self,): + oauth = OAuth1(None, None, from_file='oauth1.json') + yql = myql.MYQL(oauth=oauth) + response = yql.getGUID('josue_brunel') + logging.debug(pretty_json(response.content)) + self.assertEqual(response.status_code,200) + + def test_oauth2(self,): + oauth = OAuth2(None, None, from_file='oauth2.json') + response = oauth.session.get('https://social.yahooapis.com/v1/me/guid?format=json') + logging.debug(pretty_json(response.content)) + self.assertEqual(response.status_code,200) + + +class TestJSON(unittest.TestSuite): def setUp(self,): self.d = {'ck':'consumer_key','cs':'consumer_secret'} @@ -25,21 +42,25 @@ def tearDown(self): def test_1_json_write_data(self,): json_write_data(self.d, 'data.json') - self.assertEquals(os.path.exists('data.json'),True) + self.assertEquals(os.path.exists('data.json'), True) def test_2_json_get_data(self,): json_data = json_get_data('data.json') self.assertEquals(self.d,json_data) - def test_oauth1(self,): - oauth = OAuth1(None, None, from_file='oauth1.json') - yql = myql.MYQL(oauth=oauth) - response = yql.getGUID('josue_brunel') - logging.debug(pretty_json(response.content)) - self.assertEqual(response.status_code,200) - def test_oauth2(self,): - oauth = OAuth2(None, None, from_file='oauth2.json') - response = oauth.session.get('https://social.yahooapis.com/v1/me/guid?format=json') - logging.debug(pretty_json(response.content)) - self.assertEqual(response.status_code,200) +class TestYAML(unittest.TestCase): + + def setUp(self,): + self.d = {'ck': 'consumer_key', 'cs': 'consumer_key'} + + def test_1_yaml_write_data(self,): + yaml_write_data(self.d, 'data.yml') + self.assertEqual(os.path.exists('data.yml'), True) + + def test_2_yaml_get_data(self,): + yml_data = yaml_get_data('data.yml') + self.assertEqual(self.d, yml_data) + + + From 00aa6bd37a6a134ea44be7d2073ecac3148495a5 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 17 Sep 2015 09:42:53 +0200 Subject: [PATCH 04/17] support for yaml added --- yahoo_oauth/utils.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/yahoo_oauth/utils.py b/yahoo_oauth/utils.py index a1b62f9..bcbc73d 100644 --- a/yahoo_oauth/utils.py +++ b/yahoo_oauth/utils.py @@ -1,6 +1,7 @@ from __future__ import absolute_import, unicode_literals import json +import yaml from rauth import OAuth1Service, OAuth2Service services = { @@ -36,4 +37,20 @@ def json_get_data(filename): return False +def yaml_get_data(filename): + """Get data from .yml file + """ + with open(filename, 'rb') as fd: + yaml_data = yaml.load(fd) + return yaml_data + return False + +def yaml_write_data(yaml_data, filename): + """Write data into a .yml file + """ + with open(filename, 'w') as fd: + yaml.dump(yaml_data, fd, default_flow_style=False) + return True + + return False From 75c2630d153cb58cead53649bf28df343523462f Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 17 Sep 2015 09:47:00 +0200 Subject: [PATCH 05/17] gitignore improved --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index ba74660..a36ed6e 100755 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,9 @@ docs/_build/ # PyBuilder target/ + +# Dev +data.json +data.yml +oauth*.* +secrets.tar From 4982d661726326ab03f3c4718a925b7edca3979e Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 24 Sep 2015 18:41:16 +0200 Subject: [PATCH 06/17] shell debug added --- run_tests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/run_tests.sh b/run_tests.sh index 5c7e350..4cf0590 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -1,3 +1,4 @@ +set -x if [ ! -z $1 ]; then TestCase=".${1}" else From ac8c4f3b20d923ca8f3be7b96dfd4db856605ef2 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 24 Sep 2015 18:53:47 +0200 Subject: [PATCH 07/17] ignoring vim buffers --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a36ed6e..84ef4d4 100755 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,4 @@ data.json data.yml oauth*.* secrets.tar +*.swp From 9935713bf76b5a0d11fd59e5ecb8e75484b240c0 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 8 Oct 2015 21:58:57 +0200 Subject: [PATCH 08/17] updating requirements --- dev_requirements.txt | 44 +++++++++++++++++++++++++------------------- requirements.txt | 3 ++- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/dev_requirements.txt b/dev_requirements.txt index af18558..b09ba8b 100755 --- a/dev_requirements.txt +++ b/dev_requirements.txt @@ -1,19 +1,25 @@ -Jinja2>=2.7.3 -Markdown>=2.6.2 -MarkupSafe>=0.23 -PyYAML>=3.11 -certifi>=2015.04.28 -click>=4.0 -coverage>=3.7.1 -coveralls>=0.5 -docopt>=0.6.2 -ghp-import>=0.4.1 -livereload>=2.4.0 -mkdocs>=0.13.3 -myql>=1.2.2 -oauthlib>=0.7.2 -rauth>=0.7.1 -requests>=2.7.0 -requests-oauthlib>=0.5.0 -six>=1.9.0 -tornado>=4.2 +Jinja2=>2.8 +Markdown=>2.6.2 +MarkupSafe=>0.23 +PyYAML=>3.11 +certifi=>2015.9.6.2 +click=>5.1 +coverage=>4.0 +coveralls=>1.0 +docopt=>0.6.2 +ghp-import=>0.4.1 +livereload=>2.4.0 +mkdocs=>0.14.0 +myql=>1.2.7 +oauthlib=>1.0.3 +pluggy=>0.3.1 +py=>1.4.30 +pytest=>2.8.2 +rauth=>0.7.1 +requests=>2.8.0 +requests-oauthlib=>0.5.0 +six=>1.10.0 +tornado=>4.2.1 +tox=>2.1.1 +virtualenv=>13.1.2 +yahoo-oauth=>0.1.7 diff --git a/requirements.txt b/requirements.txt index 7aee839..07103e0 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ rauth>=0.7.1 -requests>=2.7.0 +requests>=2.8.0 +pyaml>=3.11 From e6b06c3139f08b231db17d53c104735254b0f9d2 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 8 Oct 2015 21:59:31 +0200 Subject: [PATCH 09/17] now using tox and pytest for tests --- tox.ini | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tox.ini diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..5481842 --- /dev/null +++ b/tox.ini @@ -0,0 +1,13 @@ +[tox] +envlist = py27,py33,py34,py35 + +[testenv] +deps= + -rrequirements.txt + myql + pytest + coverage +commands= + - coverage run --source=yahoo_oauth -m pytest -v tests.py + - coverage report -m + From 754c63dd190a0a53985c748e5e7bcbe556d651c4 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Sat, 10 Oct 2015 18:59:54 +0200 Subject: [PATCH 10/17] now running test in verbose mode --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 5481842..34c7b70 100644 --- a/tox.ini +++ b/tox.ini @@ -8,6 +8,6 @@ deps= pytest coverage commands= - - coverage run --source=yahoo_oauth -m pytest -v tests.py + - coverage run --source=yahoo_oauth -m pytest -vs tests.py - coverage report -m From 4d298b40ead8d7ad7350ea37d0b8ec00f75cf18e Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Sat, 10 Oct 2015 19:01:54 +0200 Subject: [PATCH 11/17] #38: tests added for yaml support --- tests.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests.py b/tests.py index 9fe4718..18b4740 100755 --- a/tests.py +++ b/tests.py @@ -5,6 +5,7 @@ import myql from myql.utils import pretty_json +from yahoo_oauth.utils import write_data, get_data from yahoo_oauth.utils import json_write_data, json_get_data from yahoo_oauth.utils import yaml_write_data, yaml_get_data from yahoo_oauth import OAuth1, OAuth2 @@ -21,18 +22,18 @@ class TestYahooOAuth(unittest.TestCase): def test_oauth1(self,): oauth = OAuth1(None, None, from_file='oauth1.json') yql = myql.MYQL(oauth=oauth) - response = yql.getGUID('josue_brunel') + response = yql.get_guid('josue_brunel') logging.debug(pretty_json(response.content)) self.assertEqual(response.status_code,200) def test_oauth2(self,): - oauth = OAuth2(None, None, from_file='oauth2.json') + oauth = OAuth2(None, None, from_file='oauth2.yaml') response = oauth.session.get('https://social.yahooapis.com/v1/me/guid?format=json') logging.debug(pretty_json(response.content)) self.assertEqual(response.status_code,200) -class TestJSON(unittest.TestSuite): +class TestJSON(unittest.TestCase): def setUp(self,): self.d = {'ck':'consumer_key','cs':'consumer_secret'} @@ -41,11 +42,11 @@ def tearDown(self): pass def test_1_json_write_data(self,): - json_write_data(self.d, 'data.json') + write_data(self.d, 'data.json') self.assertEquals(os.path.exists('data.json'), True) def test_2_json_get_data(self,): - json_data = json_get_data('data.json') + json_data = get_data('data.json') self.assertEquals(self.d,json_data) @@ -62,5 +63,3 @@ def test_2_yaml_get_data(self,): yml_data = yaml_get_data('data.yml') self.assertEqual(self.d, yml_data) - - From a3d1dbc4bbfec1572334f7e5c4144e49c5912c2c Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Sat, 10 Oct 2015 19:02:50 +0200 Subject: [PATCH 12/17] #39: fix support yaml --- yahoo_oauth/utils.py | 20 ++++++++++++++++++++ yahoo_oauth/yahoo_oauth.py | 17 +++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/yahoo_oauth/utils.py b/yahoo_oauth/utils.py index bcbc73d..bd9b8ca 100644 --- a/yahoo_oauth/utils.py +++ b/yahoo_oauth/utils.py @@ -1,7 +1,10 @@ from __future__ import absolute_import, unicode_literals + +import os import json import yaml + from rauth import OAuth1Service, OAuth2Service services = { @@ -20,6 +23,23 @@ CALLBACK_URI = 'oob' +def get_file_extension(filename): + return os.path.splitext(filename) + +def get_data(filename): + """Calls right function according to file extension + """ + ext = get_file_extension(filename) + func = json_get_data if ext == '.json' else yaml_get_data + return func(filename) + +def write_data(data, filename): + """Call right func to save data according to file extension + """ + ext = get_file_extension(filename) + func = json_write_data if ext == '.json' else yaml_write_data + return func(data, filename) + def json_write_data(json_data, filename): """Write json data into a file """ diff --git a/yahoo_oauth/yahoo_oauth.py b/yahoo_oauth/yahoo_oauth.py index bcdc22f..6cbf21f 100755 --- a/yahoo_oauth/yahoo_oauth.py +++ b/yahoo_oauth/yahoo_oauth.py @@ -18,7 +18,8 @@ from rauth.utils import parse_utf8_qsl -from yahoo_oauth.utils import json_get_data, json_write_data, services, CALLBACK_URI +from yahoo_oauth.utils import services, CALLBACK_URI +from yahoo_oauth.utils import get_data, write_data from yahoo_oauth.logger import YahooLogger logging.setLoggerClass(YahooLogger) @@ -39,13 +40,13 @@ def __init__(self, oauth_version, consumer_key, consumer_secret, **kwargs): base_url : Base url """ self.oauth_version = oauth_version - json_data = {} + data = {} if kwargs.get('from_file'): logger.debug("Checking ") self.from_file = kwargs.get('from_file') - json_data = json_get_data(self.from_file) - vars(self).update(json_data) + data = get_data(self.from_file) + vars(self).update(data) else: self.consumer_key = consumer_key self.consumer_secret = consumer_secret @@ -80,12 +81,12 @@ def __init__(self, oauth_version, consumer_key, consumer_secret, **kwargs): if vars(self).get('access_token') and vars(self).get('access_token_secret') and vars(self).get('session_handle'): if not self.token_is_valid(): - json_data.update(self.refresh_access_token()) + data.update(self.refresh_access_token()) elif vars(self).get('access_token') and vars(self).get('token_type') and vars(self).get('refresh_token'): if not self.token_is_valid(): - json_data.update(self.refresh_access_token()) + data.update(self.refresh_access_token()) else: - json_data.update(self.handler()) + data.update(self.handler()) # Getting session if self.oauth_version == 'oauth1': @@ -93,7 +94,7 @@ def __init__(self, oauth_version, consumer_key, consumer_secret, **kwargs): else: self.session = self.oauth.get_session(token=self.access_token) - json_write_data(json_data, vars(self).get('from_file','secrets.json')) + write_data(data, vars(self).get('from_file','secrets.json')) def handler(self,): From 1a9ef4c2587ccef0821425ee54731c15a3270861 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Sat, 10 Oct 2015 20:54:31 +0200 Subject: [PATCH 13/17] #38: updating secrets folder --- .travis.yml | 26 +++++++++++--------------- secrets.tar.enc | Bin 7184 -> 10256 bytes 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index cc14427..a4d891b 100755 --- a/.travis.yml +++ b/.travis.yml @@ -1,24 +1,20 @@ language: python python: - - '2.7' - - '3.2' - - '3.3' - - '3.4' - - pypy - - pypy3 +- '2.7' +- '3.2' +- '3.3' +- '3.4' +- pypy +- pypy3 install: - - pip install -r requirements.txt - - pip install myql coverage coveralls +- pip install -r requirements.txt +- pip install myql coverage coveralls script: - - coverage run --source=yahoo_oauth -m unittest discover -env: - global: - - secure: UeQ8wCwJBCyvCpqvYyJtJImdsEkIUioFF2UOFtQmw9aT601lvF5wfSohFPWHSGaJaIu+6TiiZgybQwj9EW44tJvb1E20n6AY1rxsL6zUtsWfAFvNF9DxLGEH5RCIPyyCkBxBFIObV8Md58E4VY+vCKdy3RyXbmK8bhC7/ioD7cQwjeKwd46PWgjllW4JxCXSbLkY4FJ3hAHMccE/njpA3dy4LD4+SxPiiOU+HIJoY4GOtRQG3LSNK1ZIMC15OMN954ZLkbLUAf5KZqonc9RoFaZuXgCAAuogIgxUQXO40HmqqIE+HTPvwAT+idH2NIZvvWg9IDVe8MdIgFUuGTTcveAh7KLKZCL0Qv8vHefvFOT+lIEoJ6AVlAjCFBUIInNswUyRySa7UD1JZ6txW8BqyykPNta68n0D4RH9ri+MxPpxcBHmaAbDGAl+qEsLa6gjOmULOIP+0QzrGt5LzomrIKZ77w2VA0sDHhis4wEQCcjSZs8HeixqNeCyV+mabUKWu8pQ6jPCwmOW+XZ/hLDm06x89okeS17ejJRrQdK88h7S0vXgTEX2vdpyQfFReOa/s8ssVDbLUQ2xvLM/zPU8itfV0gK8ANHLBYjNqDW51rYXAJSOQfJVA/4RMk4Hmx8EF8EUs6k5oi+GW9ITso5ohnVLeASMyaEYpmdT8O9e7NQ= - - secure: AHfzuvNGZIWHJeXzNhVVmMI1EPyu6ZBiuVjWP6kox6shq3zYwn5dxcU0tC62nIjYi/QQvnC0x0wpzZqXv/9yMtRzLukg4LFxuBl1o5FzpxGJZZgtKf0GC1u0Cp+b5GCT62Fdpn2LYramWKBHlF05atUYgyST8H2zaHe/SmQnjhmlki4nSJUfVmG40/hrGyemtELIHoQy85ujvjFV18p+7MTL+ySc9E13P1JrgecV8uZ7Ya8ajAHU/gqFFRupdS5cOpje+MuasltCZPcb74xWfECvoZqbWurj4UCRBTs80oxulkmVJTWbzB9KWjoqOSJQqJfI1LIZod6OJEsdVENBEH7HZ6El9U2KZ54FIYDNnO704jPQp/WC8YXFvzZucgsFWb2RS0PZ77CwHLrGdoPn3y8Rm7gHb4QHTOuhQSi9dzl+XdZzVpduaT9Z7LRej/31LOAmrQyRMgoiYiRf183yx8guhSYwaC+EHodCOq0HSKEYfxWVlrwML17vFhjD5A0kOSJ2cc0A7QmOjYlUJ5VI5A57re9PFg5g7yd7TIX+6vZ4GVdv3alCeP58u1QSeH96aTYMeiszI9GVTE5AjdaPD+K28TDb9U+PuqBXILKUH/pDlXtYLNqDPUDiD+seOH1UXKrpG00kTWQ/q7lQ6thHZORfOSNe7i//pdKBy1cfbC8= +- coverage run --source=yahoo_oauth -m unittest discover before_install: - openssl aes-256-cbc -K $encrypted_6d515aab85d8_key -iv $encrypted_6d515aab85d8_iv -in secrets.tar.enc -out secrets.tar -d - tar xvf secrets.tar after_success: - - coverage report - - coveralls +- coverage report +- coveralls diff --git a/secrets.tar.enc b/secrets.tar.enc index 4d1c6c237dea930ba0a3d50a340b2d1b05e059dd..320a8edfbee6d91db0171b00f5f1bb5583680b57 100755 GIT binary patch literal 10256 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 WD1o26%?&g&wf4Z>^~)TN(0Bxc$LLM~ literal 7184 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 Date: Sat, 10 Oct 2015 20:58:32 +0200 Subject: [PATCH 14/17] updating version --- setup.py | 4 ++-- yahoo_oauth/__init__.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index dbd89f6..a06b634 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ __author__ = 'Josue Kouka' __email__ = 'josuebrunel@gmail.com' -__version__ = '0.1.7' +__version__ = '0.1.8' #requirements.txt with open('requirements.txt') as f: @@ -28,9 +28,9 @@ def read(fname): 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Development Status :: 5 - Production/Stable', diff --git a/yahoo_oauth/__init__.py b/yahoo_oauth/__init__.py index c108793..24d207a 100755 --- a/yahoo_oauth/__init__.py +++ b/yahoo_oauth/__init__.py @@ -2,7 +2,7 @@ __author__ = 'Josue Kouka' __email__ = 'josuebrunel@gmail.com' -__version__ = "0.1.7" +__version__ = "0.1.8" from yahoo_oauth.yahoo_oauth import OAuth1, OAuth2 From d6cc2a833db438aeaa11d14579ca7d0a24f6ece2 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Sat, 10 Oct 2015 21:00:45 +0200 Subject: [PATCH 15/17] #38: updating documentation --- README.md | 2 +- README.rst | 2 +- docs/index.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6a5679e..4b9b9f3 100755 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Wether you use **OAuth1** or **OAuth2**, only **2** parameters are required. * ___consumer_key___ * ___consumer_secret___ -I recommend putting those two into a file. Only ***json*** files are supported +I recommend putting those two into a file. Only ***json*** and ***yaml*** files are supported ```json { diff --git a/README.rst b/README.rst index eb955e6..ef5a7c7 100755 --- a/README.rst +++ b/README.rst @@ -21,7 +21,7 @@ required. - ***consumer*\ key**\ \_ - ***consumer*\ secret**\ \_ -I recommend putting those two into a file. Only ***json*** files are +I recommend putting those two into a file. Only ***json*** and ***yaml*** files are supported .. code:: json diff --git a/docs/index.md b/docs/index.md index 0de751e..574f2ab 100755 --- a/docs/index.md +++ b/docs/index.md @@ -15,7 +15,7 @@ Wether you use **OAuth1** or **OAuth2**, only **2** parameters are required. * ___consumer_key___ * ___consumer_secret___ -I recommend putting those two into a file. Only ***json*** files are supported +I recommend putting those two into a file. Only ***json*** and ***yaml*** files are supported ```json { From b019addae373b7b36cd542a024f2fea90f979869 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Sat, 10 Oct 2015 21:01:16 +0200 Subject: [PATCH 16/17] test for py35 added --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a4d891b..2483670 100755 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ language: python python: - '2.7' -- '3.2' - '3.3' - '3.4' +- '3.5' - pypy - pypy3 install: From 3a0d046e2164071b12a7e3df1243a7ee16b2a3d2 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Sat, 10 Oct 2015 21:09:20 +0200 Subject: [PATCH 17/17] running tests with pytest now --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2483670..e5a0818 100755 --- a/.travis.yml +++ b/.travis.yml @@ -8,9 +8,9 @@ python: - pypy3 install: - pip install -r requirements.txt -- pip install myql coverage coveralls +- pip install myql coverage coveralls pytest script: -- coverage run --source=yahoo_oauth -m unittest discover +- coverage run --source=yahoo_oauth -m pytest -v tests.py before_install: - openssl aes-256-cbc -K $encrypted_6d515aab85d8_key -iv $encrypted_6d515aab85d8_iv -in secrets.tar.enc -out secrets.tar -d