aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: fdf580e417ef527effc767ef1abf5a4e4ce23462 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# PyFunkwhale

A simple funkwhale API client library

Since API is not frozen, this client library is written for the version
`0.20.1`.

# Install

Only for dev for the momement:

```
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```

# Use

This client library use th OAuth2 Authorization Code flow and ask to the user
to authorize this app. I'm not ok with how I do this for the moment. If you
have suggestion about how to do this, I will gladly accept to discuse it.
And you can also send me suggestions for other parts of this module ;)

Example usage:

```
#!/usr/bin/env python
# -*- condig: utf-8 -*-

from pyfunkwhale.funkwhale import Funkwhale

client_name = "pyfunkwhale"

redirect_uri = "urn:ietf:wg:oauth:2.0:oob"

# Obviously dont copy past and check the doc for how to get it:
# https://docs.funkwhale.audio/developers/authentication.html#create-an-app
client_id = "IFQuq6iB7Ta5LVxCUV8ibo65x588bgtI4rsa46cgm"
client_secret = "RMurKpQsoaZKbVpbse5o2wrJ5E4dMbvDs54JMsK5fDY5AK2QP8tJxoN7ApjryoCdWBUk02dExNTxzgUOZHFmSRcYdbJXbkLghXn6mvQMs9J8uIMpFIrehBp"

# This is your instance and login information
# This example is based on https://docs.funkwhale.audio/swagger/
username = "demo"
password = "demo"
domain = "https://demo.funkwhale.audio"

scopes = "read"

authorization_endpoint = "https://demo.funkwhale.audio/authorize"
token_endpoint = "https://demo.funkwhale.audio/api/v1/oauth/token/"


# Save the OAuth2 infos in file, this is ugly yup
token_filename = 'oauth_token.data'

funkwhale = Funkwhale(client_name, redirect_uri, client_id, client_secret,
                scopes, username, password, domain, authorization_endpoint,
                token_endpoint, token_filename)

artists = funkwhale.artists()

print(artists)

# In case you ask, their is an example for downloading a song
r = funkwhale.listen("f9d02c64-bafa-43cb-8e1e-fa612e7c5dab")

with open('/tmp/test.mp3', 'wb') as f:
    for chunk in r.iter_content(chunk_size=8192):
        if chunk:
            f.write(chunk)
```

# Features

List of features implemented or planned:

- [/] Auth
  - [x] Login with OAuth2 Authorization Code flow
  - [ ] Register an OAuth2 application
  - [x] Get an JWT token
  - [ ] Create an account
  - [ ] Request a password request
  - [ ] Retrieve user information
  - [ ] Retrieve rate-limit information and current usage status
- [x] Artists
  - [x] List artists
  - [x] Retrieve a single artist
  - [x] List available user libraries containing work from this artist
- [x] Albums
  - [x] List albums
  - [x] Retrieve a single album
  - [x] List available user libraries containing work from this album
- [x] Tracks
  - [x] List tracks
  - [x] Retrieve a single tracks
  - [x] List available user libraries containing work from this track
- [x] Download the audio file matching the given track uuid
- [x] License
  - [x] List licences
  - [x] Retrieve a single license
- [ ] libraries
  - [ ] List owned libraries
  - [ ] Create a new librarie
  - [ ] Retrieve a librarie
  - [ ] Update a librarie
  - [ ] Update a librarie
  - [ ] Delete a librarie and all associated password
- [ ] Uploads
  - [ ] List owned upload
  - [ ] Upload a new file in a library
  - [ ] Retrieve an upload
  - [ ] Delete a an upload
- [x] favorites
  - [x] List favorites
  - [x] Mark a given track as favorite
  - [x] Remove a given track from favorites