diff options
author | neodarz <neodarz@neodarz.net> | 2020-04-11 14:19:57 +0200 |
---|---|---|
committer | neodarz <neodarz@neodarz.net> | 2020-04-11 14:19:57 +0200 |
commit | 8a591f173cfccf072c31af88656a5ed12936fcfe (patch) | |
tree | 08f0f2ae762a711a94cd34a70e8684d7f6853e7b /pyfunkwhale | |
download | pyfunkwhale-8a591f173cfccf072c31af88656a5ed12936fcfe.tar.xz pyfunkwhale-8a591f173cfccf072c31af88656a5ed12936fcfe.zip |
Initial commit
Diffstat (limited to 'pyfunkwhale')
-rw-r--r-- | pyfunkwhale/__init__.py | 0 | ||||
-rw-r--r-- | pyfunkwhale/client.py | 76 | ||||
-rw-r--r-- | pyfunkwhale/funkwhale.py | 17 | ||||
-rw-r--r-- | pyfunkwhale/utils.py | 18 |
4 files changed, 111 insertions, 0 deletions
diff --git a/pyfunkwhale/__init__.py b/pyfunkwhale/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/pyfunkwhale/__init__.py diff --git a/pyfunkwhale/client.py b/pyfunkwhale/client.py new file mode 100644 index 0000000..fb89b54 --- /dev/null +++ b/pyfunkwhale/client.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# -*- conding: utf-8 -*- + +import json +from time import time +from requests_oauthlib import OAuth2Session + +from pyfunkwhale.utils import read_file, write_file + + +class Client(object): + + def __init__(self, client_name, redirect_uri, client_id, + client_secret, scopes, username, password, domain, + authorization_endpoint, token_endpoint, + token_filename): + self.client_name = client_name + self.redirect_uri = redirect_uri + self.client_id = client_id + self.client_secret = client_secret + self.scopes = scopes + self.token = None + + self.username = username + self.password = password + self.domain = domain + + self.authorization_endpoint = authorization_endpoint + self.token_endpoint = token_endpoint + self.token_filename = token_filename + self.oauth_client = OAuth2Session( + self.client_id, + redirect_uri=self.redirect_uri, + scope=self.scopes) + self.authorization_url, self.state = self.oauth_client. \ + authorization_url( + self.authorization_endpoint) + + try: + self.token = json.loads(read_file(token_filename)) + self._refresh_token() + except FileNotFoundError: + self._get_token() + write_file(token_filename, self.token) + + def _get_token(self): + print("For authorizate this app go to:\n{}".format( + self.authorization_url)) + self.authorization_code = input("Enter response code: ") + + self.token = self.oauth_client.fetch_token( + self.token_endpoint, + code=self.authorization_code, + client_secret=self.client_secret) + + def _refresh_token(self): + if time() - 60 > self.token["expires_at"]: + self.token = self.oauth_client.refresh_token( + self.token_endpoint, + refresh_token=self.token["refresh_token"], + client_id=self.client_id, + client_secret=self.client_secret) + write_file(self.token_filename, self.token) + + def call(self, endpoint, method): + self._refresh_token() + headers = {'Authorization': self.token['token_type'] + ' ' + + self.token['access_token']} + + call = getattr(self.oauth_client, method) + + r = call( + self.domain + '/api/v1/' + endpoint, + headers=headers) + + return r diff --git a/pyfunkwhale/funkwhale.py b/pyfunkwhale/funkwhale.py new file mode 100644 index 0000000..8f399ab --- /dev/null +++ b/pyfunkwhale/funkwhale.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from pyfunkwhale.client import Client + + +class Funkwhale(object): + + def __init__(self, client_name, redirect_uri, client_id, + client_secret, scopes, username, password, domain, + authorization_endpoint, token_endpoint, token_filename): + self.client = Client( + client_name, redirect_uri, client_id, client_secret, + scopes, username, password, domain, authorization_endpoint, + token_endpoint, token_filename) + + def artists(self): + return self.client.call('/artists/', 'get').json() diff --git a/pyfunkwhale/utils.py b/pyfunkwhale/utils.py new file mode 100644 index 0000000..9ba5d0f --- /dev/null +++ b/pyfunkwhale/utils.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import json + + +def read_file(filename): + with open(filename, 'r') as file: + data = file.read() + + return data + + +def write_file(filename, data): + with open(filename, 'w') as file: + file.write(json.dumps(data)) + + return data |