wallabag api ok

This commit is contained in:
Olivier Demah
2016-04-18 15:03:57 +02:00
parent d17614e4db
commit 44b4eb90df
6 changed files with 96 additions and 84 deletions

View File

@@ -6,11 +6,13 @@ Python API for Wallabag v2
Requirements : Requirements :
============== ==============
* requests == 2.5.0 * requests == 2.5.0
Installation: Installation:
============= =============
to get the project, from your virtualenv, do : to get the project, from your virtualenv, do :
.. code:: python .. code:: python
@@ -25,4 +27,11 @@ Install Wallabag V2 on your own host like explain here http://doc.wallabag.org/e
Then create a client API like explain here http://doc.wallabag.org/en/v2/developer/api.html Then create a client API like explain here http://doc.wallabag.org/en/v2/developer/api.html
Then replace the client_id / client_secret / login / pass to wallabag_test.py and run
``` python
python wallabag_test.py
```

View File

@@ -1 +0,0 @@
requests==2.5.0

View File

@@ -1,27 +1,19 @@
from setuptools import setup, find_packages from setuptools import setup, find_packages
from wallabag_api import __version__ as version from wallabag_api import __version__ as version
import os
install_requires = [
def strip_comments(l): 'requests==2.5.0',
return l.split('#', 1)[0].strip() ]
def reqs(*f):
return list(filter(None, [strip_comments(l) for l in open(
os.path.join(os.getcwd(), *f)).readlines()]))
install_requires = reqs('requirements.txt')
setup( setup(
name='wallabag_api', name='wallabag_api',
version=version, version=version,
description='Wallabag API', description='Wallabag API to add every pages you want to your Wallabag account',
author='FoxMaSk', author='FoxMaSk',
author_email='foxmask@trigger-happy.eu', author_email='foxmask@trigger-happy.eu',
url='https://github.com/foxmask/wallabag_api', url='https://github.com/foxmask/wallabag_api',
download_url="https://github.com/foxmask/wallabag_api/archive/wallabag_api-" download_url="https://github.com/foxmask/wallabag_api/archive/"
+ version + ".zip", "wallabag_api-" + version + ".zip",
packages=find_packages(), packages=find_packages(),
classifiers=[ classifiers=[
'Development Status :: 4 - Beta', 'Development Status :: 4 - Beta',
@@ -29,8 +21,8 @@ setup(
'License :: OSI Approved :: BSD License', 'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent', 'Operating System :: OS Independent',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
], ],
install_requires=install_requires, install_requires=install_requires,
include_package_data=True, include_package_data=True,

View File

@@ -1,2 +1,2 @@
VERSION = (0, 0, 1) # PEP 386 VERSION = (1, 0, 0) # PEP 386
__version__ = ".".join([str(x) for x in VERSION]) __version__ = ".".join([str(x) for x in VERSION])

View File

@@ -76,9 +76,6 @@ class Wallabag(object):
r = requests.delete(self.get_host() + path, headers=params) r = requests.delete(self.get_host() + path, headers=params)
elif method == 'put': elif method == 'put':
r = requests.put(self.get_host() + path, params=params) r = requests.put(self.get_host() + path, params=params)
elif method == 'get_token':
r = requests.post(self.get_host() + path, data=params)
# todo : handle case of self.ext is xml or html
return self.handle_json_response(r) return self.handle_json_response(r)
else: else:
raise ValueError('method expected : get, post, patch, delete or put') raise ValueError('method expected : get, post, patch, delete or put')
@@ -315,8 +312,10 @@ class Wallabag(object):
params = {'access_token': self.token} params = {'access_token': self.token}
return self.query(path, "delete", **params) return self.query(path, "delete", **params)
def get_token(self, params): @classmethod
def get_token(cls, host, **params):
""" """
:param host: host of the service
:param params: will contain : :param params: will contain :
params = {"grant_type": "password", params = {"grant_type": "password",
@@ -327,6 +326,7 @@ class Wallabag(object):
:return: access token :return: access token
""" """
params['grant_type'] = ["password"]
path = "/oauth/v2/token" path = "/oauth/v2/token"
return self.query(path, "get_token", **params)['access_token'] r = requests.post(host + path, data=params)
return cls.handle_json_response(r)['access_token']

View File

@@ -1,15 +1,42 @@
# -*- coding: utf-8 -*- # coding: utf-8
import unittest import unittest
from wallabag import Wallabag from wallabag import Wallabag
class TestWallabag(unittest.TestCase): class TestWallabag(unittest.TestCase):
host = 'http://localhost:8080'
client_id = ''
client_secret = ''
token = ''
def setUp(self): def setUp(self):
self.host = "http://localhost:5000" access_token = self.test_get_token()
self.api_key = '12334567890'
self.user_agent = 'WallabagPython/1.0 +https://github.com/foxmask/wallabag-api'
self.format = 'json' self.format = 'json'
self.w = Wallabag(host=self.host,
token=access_token,
client_id=self.client_id,
client_secret=self.client_secret)
def test_get_token(self):
params = {"grant_type": "password",
"client_id": '1_37e16ub8a62oc4gwcg0o0wssks800kw0ok408kkwo4kosgc88g',
"client_secret": '49etxpn66da8okg4cs40sswsog0sskwg4woc400c4w4w8s4wo4',
"username": 'foxmask',
"password": 'ratatab00m'}
data = Wallabag.get_token(host='http://localhost:8080', **params)
self.assertTrue(isinstance(data, str), True)
return data
def create_entry(self):
title = 'foobar title'
url = 'https://smcomm.trigger-happy.eu/'
tags = ['foo', 'bar']
starred = 0
archive = 0
data = self.w.post_entries(url, title, tags, starred, archive)
return data
def test_get_entries(self): def test_get_entries(self):
params = {'archive': 0, params = {'archive': 0,
@@ -20,79 +47,64 @@ class TestWallabag(unittest.TestCase):
'page': 1, 'page': 1,
'perPage': 30, 'perPage': 30,
'tags': []} 'tags': []}
w = Wallabag(self.host).get_entries('ABCD', **params) data = self.w.get_entries(**params)
self.assertIsInstance(w, dict) self.assertIsInstance(data, dict)
def test_post_entries(self):
title = 'foobar title'
url = ['http://foobar.com/', 'http://barfoo.com/']
tags = ['foo', 'bar']
self.assertTrue(isinstance(title, str), True)
self.assertTrue(isinstance(tags, list), True)
w = Wallabag(self.host).post_entries('ABCD', url, title, tags)
self.assertTrue(w, True)
def test_get_entry(self): def test_get_entry(self):
entry = 1 entry = 1
self.assertTrue(isinstance(entry, int), True) self.assertTrue(isinstance(entry, int), True)
w = Wallabag(self.host).get_entry('ABCD', entry) data = self.w.get_entry(entry)
self.assertTrue(w, str) self.assertTrue(data, str)
def test_patch_entries(self):
entry = 1
params = {'title': '',
'archive': 0,
'tags': [],
'star': 0,
'delete': 0}
self.assertTrue(isinstance(entry, int), True)
self.assertTrue(isinstance(params, dict), True)
w = Wallabag(self.host).patch_entries('ABCD', entry, **params)
self.assertTrue(w, True)
def test_delete_entries(self):
entry = 1
self.assertTrue(isinstance(entry, int), True)
w = Wallabag(self.host).delete_entries('ABCD', entry)
self.assertTrue(w, True)
def test_get_entry_tags(self): def test_get_entry_tags(self):
entry = 1 entry = 1
self.assertTrue(isinstance(entry, int), True) self.assertTrue(isinstance(entry, int), True)
w = Wallabag(self.host).get_entry_tags('ABCD', entry) data = self.w.get_entry_tags(entry)
self.assertIsInstance(w, list) self.assertIsInstance(data, list)
def test_get_tags(self):
data = self.w.get_tags()
self.assertIsInstance(data, list)
def test_post_entries(self):
data = self.create_entry()
self.assertTrue(data, True)
def test_patch_entries(self):
entry = 1
params = {'title': 'I change the title',
'archive': 0,
'tags': ["bimbo", "pipo"],
'star': 0,
'delete': 0}
self.assertTrue(isinstance(entry, int), True)
self.assertTrue(isinstance(params, dict), True)
data = self.w.patch_entries(entry, **params)
self.assertTrue(data, True)
def test_delete_entries(self):
entry = self.create_entry()
self.assertTrue(isinstance(entry['id'], int), True)
data = self.w.delete_entries(entry['id'])
self.assertTrue(data, True)
def test_post_entry_tags(self): def test_post_entry_tags(self):
entry = 1 entry = 1
self.assertTrue(isinstance(entry, int), True) self.assertTrue(isinstance(entry, int), True)
tags = ['foo', 'bar'] tags = ['foo', 'bar']
self.assertTrue(isinstance(tags, list), True) self.assertTrue(isinstance(tags, list), True)
w = Wallabag(self.host).post_entry_tags('ABCD', entry, tags) data = self.w.post_entry_tags(entry, tags)
self.assertTrue(w, True) self.assertTrue(data, True)
"""
def test_delete_entry_tag(self): def test_delete_entry_tag(self):
entry = 1 entry = self.create_entry()
tag = 'tag1' tag = 'bar'
self.assertTrue(isinstance(entry, int), True) self.assertTrue(isinstance(entry['id'], int), True)
self.assertTrue(isinstance(tag, str), True) self.assertTrue(isinstance(tag, str), True)
w = Wallabag(self.host).delete_entry_tag('ABCD', entry, tag) resp = self.w.delete_entry_tag(entry['id'], tag)
self.assertTrue(w, True) self.assertTrue(resp, True)
"""
def test_get_tags(self):
w = Wallabag(self.host).get_tags('ABCD')
self.assertTrue(w, True)
def test_get_tag(self):
tag = 'tag1'
self.assertTrue(isinstance(tag, str), True)
w = Wallabag(self.host).get_tag('ABCD', tag)
self.assertTrue(w, True)
def test_delete_tag(self):
tag = 'tag1'
self.assertTrue(isinstance(tag, str), True)
w = Wallabag(self.host).delete_tag('ABCD', tag)
self.assertTrue(w, True)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()