Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
funkwhale
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Julien Veyssier
funkwhale
Commits
639882bd
Verified
Commit
639882bd
authored
Jun 09, 2018
by
Agate
💬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
See #297: removed unused variables
parent
2b1c4631
Changes
50
Hide whitespace changes
Inline
Side-by-side
Showing
50 changed files
with
33 additions
and
88 deletions
+33
-88
api/funkwhale_api/common/management/commands/script.py
api/funkwhale_api/common/management/commands/script.py
+0
-1
api/funkwhale_api/common/serializers.py
api/funkwhale_api/common/serializers.py
+0
-1
api/funkwhale_api/downloader/downloader.py
api/funkwhale_api/downloader/downloader.py
+0
-3
api/funkwhale_api/federation/actors.py
api/funkwhale_api/federation/actors.py
+0
-3
api/funkwhale_api/federation/serializers.py
api/funkwhale_api/federation/serializers.py
+1
-1
api/funkwhale_api/federation/signing.py
api/funkwhale_api/federation/signing.py
+1
-1
api/funkwhale_api/federation/views.py
api/funkwhale_api/federation/views.py
+1
-1
api/funkwhale_api/instance/nodeinfo.py
api/funkwhale_api/instance/nodeinfo.py
+0
-1
api/funkwhale_api/music/lyrics.py
api/funkwhale_api/music/lyrics.py
+0
-1
api/funkwhale_api/music/management/commands/fix_track_files.py
...unkwhale_api/music/management/commands/fix_track_files.py
+0
-1
api/funkwhale_api/music/migrations/0011_rename_files.py
api/funkwhale_api/music/migrations/0011_rename_files.py
+0
-1
api/funkwhale_api/music/migrations/0015_bind_track_file_to_import_job.py
...pi/music/migrations/0015_bind_track_file_to_import_job.py
+0
-1
api/funkwhale_api/music/migrations/0019_populate_mimetypes.py
...funkwhale_api/music/migrations/0019_populate_mimetypes.py
+0
-1
api/funkwhale_api/music/migrations/0021_populate_batch_status.py
...kwhale_api/music/migrations/0021_populate_batch_status.py
+0
-1
api/funkwhale_api/music/migrations/0024_populate_uuid.py
api/funkwhale_api/music/migrations/0024_populate_uuid.py
+0
-1
api/funkwhale_api/music/models.py
api/funkwhale_api/music/models.py
+0
-1
api/funkwhale_api/music/views.py
api/funkwhale_api/music/views.py
+0
-2
api/funkwhale_api/providers/audiofile/management/commands/import_files.py
...i/providers/audiofile/management/commands/import_files.py
+0
-1
api/funkwhale_api/providers/audiofile/tasks.py
api/funkwhale_api/providers/audiofile/tasks.py
+0
-1
api/funkwhale_api/radios/radios.py
api/funkwhale_api/radios/radios.py
+1
-1
api/funkwhale_api/radios/views.py
api/funkwhale_api/radios/views.py
+1
-1
api/funkwhale_api/subsonic/negotiation.py
api/funkwhale_api/subsonic/negotiation.py
+0
-1
api/funkwhale_api/subsonic/views.py
api/funkwhale_api/subsonic/views.py
+0
-1
api/tests/activity/test_views.py
api/tests/activity/test_views.py
+1
-1
api/tests/common/test_preferences.py
api/tests/common/test_preferences.py
+2
-2
api/tests/common/test_serializers.py
api/tests/common/test_serializers.py
+4
-4
api/tests/conftest.py
api/tests/conftest.py
+0
-1
api/tests/federation/test_activity.py
api/tests/federation/test_activity.py
+0
-1
api/tests/federation/test_actors.py
api/tests/federation/test_actors.py
+1
-2
api/tests/federation/test_models.py
api/tests/federation/test_models.py
+0
-1
api/tests/federation/test_signing.py
api/tests/federation/test_signing.py
+0
-1
api/tests/federation/test_views.py
api/tests/federation/test_views.py
+1
-3
api/tests/history/test_history.py
api/tests/history/test_history.py
+0
-3
api/tests/music/test_commands.py
api/tests/music/test_commands.py
+0
-1
api/tests/music/test_import.py
api/tests/music/test_import.py
+1
-1
api/tests/music/test_lyrics.py
api/tests/music/test_lyrics.py
+0
-1
api/tests/music/test_tasks.py
api/tests/music/test_tasks.py
+0
-4
api/tests/music/test_views.py
api/tests/music/test_views.py
+2
-2
api/tests/music/test_works.py
api/tests/music/test_works.py
+0
-1
api/tests/musicbrainz/test_api.py
api/tests/musicbrainz/test_api.py
+0
-1
api/tests/playlists/test_serializers.py
api/tests/playlists/test_serializers.py
+1
-1
api/tests/playlists/test_views.py
api/tests/playlists/test_views.py
+3
-4
api/tests/radios/test_filters.py
api/tests/radios/test_filters.py
+1
-1
api/tests/radios/test_radios.py
api/tests/radios/test_radios.py
+2
-6
api/tests/subsonic/test_authentication.py
api/tests/subsonic/test_authentication.py
+0
-3
api/tests/subsonic/test_views.py
api/tests/subsonic/test_views.py
+8
-10
api/tests/test_import_audio_file.py
api/tests/test_import_audio_file.py
+0
-1
api/tests/test_youtube.py
api/tests/test_youtube.py
+0
-1
api/tests/users/test_jwt.py
api/tests/users/test_jwt.py
+0
-1
api/tests/users/test_views.py
api/tests/users/test_views.py
+1
-2
No files found.
api/funkwhale_api/common/management/commands/script.py
View file @
639882bd
...
...
@@ -41,7 +41,6 @@ class Command(BaseCommand):
script
[
"entrypoint"
](
self
,
**
options
)
def
show_help
(
self
):
indentation
=
4
self
.
stdout
.
write
(
""
)
self
.
stdout
.
write
(
"Available scripts:"
)
self
.
stdout
.
write
(
"Launch with: python manage.py <script_name>"
)
...
...
api/funkwhale_api/common/serializers.py
View file @
639882bd
...
...
@@ -40,7 +40,6 @@ class ActionSerializer(serializers.Serializer):
return
value
def
validate_objects
(
self
,
value
):
qs
=
None
if
value
==
"all"
:
return
self
.
queryset
.
all
().
order_by
(
"id"
)
if
type
(
value
)
in
[
list
,
tuple
]:
...
...
api/funkwhale_api/downloader/downloader.py
View file @
639882bd
import
os
import
json
from
urllib.parse
import
quote_plus
import
youtube_dl
from
django.conf
import
settings
import
glob
def
download
(
...
...
api/funkwhale_api/federation/actors.py
View file @
639882bd
import
datetime
import
logging
import
uuid
import
xml
from
django.conf
import
settings
...
...
@@ -155,7 +154,6 @@ class SystemActor(object):
return
handler
(
data
,
actor
)
def
handle_follow
(
self
,
ac
,
sender
):
system_actor
=
self
.
get_actor_instance
()
serializer
=
serializers
.
FollowSerializer
(
data
=
ac
,
context
=
{
"follow_actor"
:
sender
}
)
...
...
@@ -325,7 +323,6 @@ class TestActor(SystemActor):
reply_url
=
"https://{}/activities/note/{}"
.
format
(
settings
.
FEDERATION_HOSTNAME
,
now
.
timestamp
()
)
reply_content
=
"{} Pong!"
.
format
(
sender
.
mention_username
)
reply_activity
=
{
"@context"
:
[
"https://www.w3.org/ns/activitystreams"
,
...
...
api/funkwhale_api/federation/serializers.py
View file @
639882bd
...
...
@@ -687,7 +687,7 @@ class AudioSerializer(serializers.Serializer):
def
validate_url
(
self
,
v
):
try
:
url
=
v
[
"href"
]
v
[
"href"
]
except
(
KeyError
,
TypeError
):
raise
serializers
.
ValidationError
(
"Missing href"
)
...
...
api/funkwhale_api/federation/signing.py
View file @
639882bd
...
...
@@ -47,7 +47,7 @@ def verify_django(django_request, public_key):
v
=
request
.
headers
[
h
]
if
v
:
request
.
headers
[
h
]
=
str
(
v
)
prepared_request
=
request
.
prepare
()
request
.
prepare
()
return
verify
(
request
,
public_key
)
...
...
api/funkwhale_api/federation/views.py
View file @
639882bd
...
...
@@ -249,7 +249,7 @@ class LibraryViewSet(
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
serializer
=
serializers
.
APILibraryCreateSerializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
library
=
serializer
.
save
()
serializer
.
save
()
return
response
.
Response
(
serializer
.
data
,
status
=
201
)
...
...
api/funkwhale_api/instance/nodeinfo.py
View file @
639882bd
...
...
@@ -12,7 +12,6 @@ memo = memoize.Memoizer(store, namespace="instance:stats")
def
get
():
share_stats
=
preferences
.
get
(
"instance__nodeinfo_stats_enabled"
)
private
=
preferences
.
get
(
"instance__nodeinfo_private"
)
data
=
{
"version"
:
"2.0"
,
"software"
:
{
"name"
:
"funkwhale"
,
"version"
:
funkwhale_api
.
__version__
},
...
...
api/funkwhale_api/music/lyrics.py
View file @
639882bd
import
urllib.request
import
html.parser
from
bs4
import
BeautifulSoup
...
...
api/funkwhale_api/music/management/commands/fix_track_files.py
View file @
639882bd
import
cacheops
import
os
from
django.db
import
transaction
from
django.db.models
import
Q
...
...
api/funkwhale_api/music/migrations/0011_rename_files.py
View file @
639882bd
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
import
os
from
django.db
import
migrations
,
models
from
funkwhale_api.common.utils
import
rename_file
...
...
api/funkwhale_api/music/migrations/0015_bind_track_file_to_import_job.py
View file @
639882bd
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
import
os
from
django.db
import
migrations
,
models
from
funkwhale_api.common.utils
import
rename_file
...
...
api/funkwhale_api/music/migrations/0019_populate_mimetypes.py
View file @
639882bd
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
import
os
from
django.db
import
migrations
,
models
from
funkwhale_api.music.utils
import
guess_mimetype
...
...
api/funkwhale_api/music/migrations/0021_populate_batch_status.py
View file @
639882bd
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
import
os
from
django.db
import
migrations
,
models
...
...
api/funkwhale_api/music/migrations/0024_populate_uuid.py
View file @
639882bd
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
import
os
import
uuid
from
django.db
import
migrations
,
models
...
...
api/funkwhale_api/music/models.py
View file @
639882bd
import
os
import
io
import
arrow
import
datetime
import
tempfile
...
...
api/funkwhale_api/music/views.py
View file @
639882bd
import
ffmpeg
import
os
import
json
import
logging
import
subprocess
import
unicodedata
import
urllib
...
...
api/funkwhale_api/providers/audiofile/management/commands/import_files.py
View file @
639882bd
...
...
@@ -178,7 +178,6 @@ class Command(BaseCommand):
async
=
options
[
"async"
]
import_handler
=
tasks
.
import_job_run
.
delay
if
async
else
tasks
.
import_job_run
batch
=
user
.
imports
.
create
(
source
=
"shell"
)
total
=
len
(
paths
)
errors
=
[]
for
i
,
path
in
list
(
enumerate
(
paths
)):
try
:
...
...
api/funkwhale_api/providers/audiofile/tasks.py
View file @
639882bd
import
acoustid
import
os
import
datetime
from
django.core.files
import
File
from
django.db
import
transaction
...
...
api/funkwhale_api/radios/radios.py
View file @
639882bd
...
...
@@ -147,7 +147,7 @@ class TagRadio(RelatedObjectRadio):
def
get_queryset
(
self
,
**
kwargs
):
qs
=
super
().
get_queryset
(
**
kwargs
)
return
Track
.
object
s
.
filter
(
tags__in
=
[
self
.
session
.
related_object
])
return
q
s
.
filter
(
tags__in
=
[
self
.
session
.
related_object
])
@
registry
.
register
(
name
=
"artist"
)
...
...
api/funkwhale_api/radios/views.py
View file @
639882bd
...
...
@@ -108,7 +108,7 @@ class RadioSessionTrackViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet)
assert
request
.
user
==
session
.
user
except
AssertionError
:
return
Response
(
status
=
status
.
HTTP_403_FORBIDDEN
)
track
=
session
.
radio
.
pick
()
session
.
radio
.
pick
()
session_track
=
session
.
session_tracks
.
all
().
latest
(
"id"
)
# self.perform_create(serializer)
# dirty override here, since we use a different serializer for creation and detail
...
...
api/funkwhale_api/subsonic/negotiation.py
View file @
639882bd
...
...
@@ -12,7 +12,6 @@ MAPPING = {
class
SubsonicContentNegociation
(
negotiation
.
DefaultContentNegotiation
):
def
select_renderer
(
self
,
request
,
renderers
,
format_suffix
=
None
):
path
=
request
.
path
data
=
request
.
GET
or
request
.
POST
requested_format
=
data
.
get
(
"f"
,
"xml"
)
try
:
...
...
api/funkwhale_api/subsonic/views.py
View file @
639882bd
...
...
@@ -158,7 +158,6 @@ class SubsonicViewSet(viewsets.GenericViewSet):
)
@
find_object
(
music_models
.
Artist
.
objects
.
all
())
def
get_artist_info2
(
self
,
request
,
*
args
,
**
kwargs
):
artist
=
kwargs
.
pop
(
"obj"
)
payload
=
{
"artist-info2"
:
{}}
return
response
.
Response
(
payload
,
status
=
200
)
...
...
api/tests/activity/test_views.py
View file @
639882bd
...
...
@@ -7,7 +7,7 @@ from funkwhale_api.activity import utils
def
test_activity_view
(
factories
,
api_client
,
preferences
,
anonymous_user
):
preferences
[
"common__api_authentication_required"
]
=
False
favorite
=
factories
[
"favorites.TrackFavorite"
](
user__privacy_level
=
"everyone"
)
listening
=
factories
[
"history.Listening"
]()
factories
[
"history.Listening"
]()
url
=
reverse
(
"api:v1:activity-list"
)
objects
=
utils
.
get_activity
(
anonymous_user
)
serializer
=
serializers
.
AutoSerializer
(
objects
,
many
=
True
)
...
...
api/tests/common/test_preferences.py
View file @
639882bd
...
...
@@ -26,14 +26,14 @@ def string_list_pref(preferences):
],
)
def
test_string_list_serializer_to_db
(
input
,
output
):
s
=
common_preferences
.
StringListSerializer
.
to_db
(
input
)
==
output
common_preferences
.
StringListSerializer
.
to_db
(
input
)
==
output
@
pytest
.
mark
.
parametrize
(
"input,output"
,
[(
"a,b,c"
,
[
"a"
,
"b"
,
"c"
]),
(
None
,
[]),
(
""
,
[])]
)
def
test_string_list_serializer_to_python
(
input
,
output
):
s
=
common_preferences
.
StringListSerializer
.
to_python
(
input
)
==
output
common_preferences
.
StringListSerializer
.
to_python
(
input
)
==
output
def
test_string_list_pref_default
(
string_list_pref
,
preferences
):
...
...
api/tests/common/test_serializers.py
View file @
639882bd
...
...
@@ -47,7 +47,7 @@ def test_action_serializer_validates_objects():
def
test_action_serializers_objects_clean_ids
(
factories
):
user1
=
factories
[
"users.User"
]()
user2
=
factories
[
"users.User"
]()
factories
[
"users.User"
]()
data
=
{
"objects"
:
[
user1
.
pk
],
"action"
:
"test"
}
serializer
=
TestSerializer
(
data
,
queryset
=
models
.
User
.
objects
.
all
())
...
...
@@ -69,8 +69,8 @@ def test_action_serializers_objects_clean_all(factories):
def
test_action_serializers_save
(
factories
,
mocker
):
handler
=
mocker
.
spy
(
TestSerializer
,
"handle_test"
)
user1
=
factories
[
"users.User"
]()
user2
=
factories
[
"users.User"
]()
factories
[
"users.User"
]()
factories
[
"users.User"
]()
data
=
{
"objects"
:
"all"
,
"action"
:
"test"
}
serializer
=
TestSerializer
(
data
,
queryset
=
models
.
User
.
objects
.
all
())
...
...
@@ -82,7 +82,7 @@ def test_action_serializers_save(factories, mocker):
def
test_action_serializers_filterset
(
factories
):
user1
=
factories
[
"users.User"
](
is_active
=
False
)
factories
[
"users.User"
](
is_active
=
False
)
user2
=
factories
[
"users.User"
](
is_active
=
True
)
data
=
{
"objects"
:
"all"
,
"action"
:
"test"
,
"filters"
:
{
"is_active"
:
True
}}
...
...
api/tests/conftest.py
View file @
639882bd
...
...
@@ -186,7 +186,6 @@ def fake_request():
@
pytest
.
fixture
def
activity_registry
():
r
=
record
.
registry
state
=
list
(
record
.
registry
.
items
())
yield
record
.
registry
record
.
registry
.
clear
()
...
...
api/tests/federation/test_activity.py
View file @
639882bd
import
uuid
from
funkwhale_api.federation
import
activity
from
funkwhale_api.federation
import
serializers
...
...
api/tests/federation/test_actors.py
View file @
639882bd
import
arrow
import
pytest
import
uuid
from
django.urls
import
reverse
from
django.utils
import
timezone
...
...
@@ -350,7 +349,7 @@ def test_library_actor_handles_follow_manual_approval(preferences, mocker, facto
def
test_library_actor_handles_follow_auto_approval
(
preferences
,
mocker
,
factories
):
preferences
[
"federation__music_needs_approval"
]
=
False
actor
=
factories
[
"federation.Actor"
]()
accept_follow
=
mocker
.
patch
(
"funkwhale_api.federation.activity.accept_follow"
)
mocker
.
patch
(
"funkwhale_api.federation.activity.accept_follow"
)
library_actor
=
actors
.
SYSTEM_ACTORS
[
"library"
].
get_actor_instance
()
data
=
{
"actor"
:
actor
.
url
,
...
...
api/tests/federation/test_models.py
View file @
639882bd
import
pytest
import
uuid
from
django
import
db
...
...
api/tests/federation/test_signing.py
View file @
639882bd
import
cryptography.exceptions
import
io
import
pytest
import
requests_http_signature
...
...
api/tests/federation/test_views.py
View file @
639882bd
...
...
@@ -159,7 +159,6 @@ def test_audio_file_list_actor_page_exclude_federated_files(
db
,
preferences
,
api_client
,
factories
):
preferences
[
"federation__music_needs_approval"
]
=
False
library
=
actors
.
SYSTEM_ACTORS
[
"library"
].
get_actor_instance
()
tfs
=
factories
[
"music.TrackFile"
].
create_batch
(
size
=
5
,
federation
=
True
)
url
=
reverse
(
"federation:music:files-list"
)
...
...
@@ -188,7 +187,6 @@ def test_audio_file_list_actor_page_error_too_far(
def
test_library_actor_includes_library_link
(
db
,
preferences
,
api_client
):
actor
=
actors
.
SYSTEM_ACTORS
[
"library"
].
get_actor_instance
()
url
=
reverse
(
"federation:instance-actors-detail"
,
kwargs
=
{
"actor"
:
"library"
})
response
=
api_client
.
get
(
url
)
expected_links
=
[
...
...
@@ -263,7 +261,7 @@ def test_follow_library(superuser_api_client, mocker, factories, r_mock):
def
test_can_list_system_actor_following
(
factories
,
superuser_api_client
):
library_actor
=
actors
.
SYSTEM_ACTORS
[
"library"
].
get_actor_instance
()
follow1
=
factories
[
"federation.Follow"
](
actor
=
library_actor
)
f
ollow2
=
f
actories
[
"federation.Follow"
]()
factories
[
"federation.Follow"
]()
url
=
reverse
(
"api:v1:federation:libraries-following"
)
response
=
superuser_api_client
.
get
(
url
)
...
...
api/tests/history/test_history.py
View file @
639882bd
import
random
import
json
from
django.urls
import
reverse
from
django.core.exceptions
import
ValidationError
from
django.utils
import
timezone
...
...
@@ -10,7 +8,6 @@ from funkwhale_api.history import models
def
test_can_create_listening
(
factories
):
track
=
factories
[
"music.Track"
]()
user
=
factories
[
"users.User"
]()
now
=
timezone
.
now
()
l
=
models
.
Listening
.
objects
.
create
(
user
=
user
,
track
=
track
)
...
...
api/tests/music/test_commands.py
View file @
639882bd
...
...
@@ -49,7 +49,6 @@ def test_fix_track_files_size(factories, mocker):
def
test_fix_track_files_mimetype
(
factories
,
mocker
):
name
=
"test.mp3"
mp3_path
=
os
.
path
.
join
(
DATA_DIR
,
"test.mp3"
)
ogg_path
=
os
.
path
.
join
(
DATA_DIR
,
"test.ogg"
)
tf1
=
factories
[
"music.TrackFile"
](
...
...
api/tests/music/test_import.py
View file @
639882bd
...
...
@@ -195,7 +195,7 @@ def test_import_batch_notifies_followers(factories, mocker):
f1
=
factories
[
"federation.Follow"
](
approved
=
True
,
target
=
library_actor
)
f2
=
factories
[
"federation.Follow"
](
approved
=
False
,
target
=
library_actor
)
f
3
=
f
actories
[
"federation.Follow"
]()
factories
[
"federation.Follow"
]()
mocked_deliver
=
mocker
.
patch
(
"funkwhale_api.federation.activity.deliver"
)
batch
=
factories
[
"music.ImportBatch"
]()
...
...
api/tests/music/test_lyrics.py
View file @
639882bd
import
json
from
django.urls
import
reverse
from
funkwhale_api.music
import
models
...
...
api/tests/music/test_tasks.py
View file @
639882bd
...
...
@@ -44,7 +44,6 @@ def test_set_acoustid_on_track_file(factories, mocker, preferences):
def
test_set_acoustid_on_track_file_required_high_score
(
factories
,
mocker
):
track_file
=
factories
[
"music.TrackFile"
](
acoustid_track_id
=
None
)
id
=
"e475bf79-c1ce-4441-bed7-1e33f226c0a2"
payload
=
{
"results"
:
[{
"score"
:
0.79
}],
"status"
:
"ok"
}
m
=
mocker
.
patch
(
"acoustid.match"
,
return_value
=
payload
)
r
=
tasks
.
set_acoustid_on_track_file
(
track_file_id
=
track_file
.
pk
)
...
...
@@ -159,7 +158,6 @@ def test_import_job_skip_if_already_exists(artists, albums, tracks, factories, m
)
job
=
factories
[
"music.FileImportJob"
](
audio_file__path
=
path
)
f
=
job
.
audio_file
tasks
.
import_job_run
(
import_job_id
=
job
.
pk
)
job
.
refresh_from_db
()
...
...
@@ -219,7 +217,6 @@ def test_update_album_cover_mbid(factories, mocker):
def
test_update_album_cover_file_data
(
factories
,
mocker
):
path
=
os
.
path
.
join
(
DATA_DIR
,
"test.mp3"
)
album
=
factories
[
"music.Album"
](
cover
=
""
,
mbid
=
None
)
tf
=
factories
[
"music.TrackFile"
](
track__album
=
album
)
...
...
@@ -236,7 +233,6 @@ def test_update_album_cover_file_data(factories, mocker):
@
pytest
.
mark
.
parametrize
(
"ext,mimetype"
,
[(
"jpg"
,
"image/jpeg"
),
(
"png"
,
"image/png"
)])
def
test_update_album_cover_file_cover_separate_file
(
ext
,
mimetype
,
factories
,
mocker
):
mocker
.
patch
(
"funkwhale_api.music.tasks.IMAGE_TYPES"
,
[(
ext
,
mimetype
)])
path
=
os
.
path
.
join
(
DATA_DIR
,
"test.mp3"
)
image_path
=
os
.
path
.
join
(
DATA_DIR
,
"cover.{}"
.
format
(
ext
))
with
open
(
image_path
,
"rb"
)
as
f
:
image_content
=
f
.
read
()
...
...
api/tests/music/test_views.py
View file @
639882bd
...
...
@@ -334,7 +334,7 @@ def test_import_job_viewset_get_queryset_upload_filters_user(
logged_in_api_client
.
user
.
permission_upload
=
True
logged_in_api_client
.
user
.
save
()
job
=
factories
[
"music.ImportJob"
]()
factories
[
"music.ImportJob"
]()
url
=
reverse
(
"api:v1:import-jobs-list"
)
response
=
logged_in_api_client
.
get
(
url
)
...
...
@@ -347,7 +347,7 @@ def test_import_batch_viewset_get_queryset_upload_filters_user(
logged_in_api_client
.
user
.
permission_upload
=
True
logged_in_api_client
.
user
.
save
()
job
=
factories
[
"music.ImportBatch"
]()
factories
[
"music.ImportBatch"
]()
url
=
reverse
(
"api:v1:import-batches-list"
)
response
=
logged_in_api_client
.
get
(
url
)
...
...
api/tests/music/test_works.py
View file @
639882bd
import
json
from
django.urls
import
reverse
from
funkwhale_api.music
import
models
...
...
api/tests/musicbrainz/test_api.py
View file @
639882bd
import
json
from
django.urls
import
reverse
from
funkwhale_api.musicbrainz
import
api
...
...
api/tests/playlists/test_serializers.py
View file @
639882bd
...
...
@@ -53,7 +53,7 @@ def test_update_insert_is_called_when_index_is_provided(factories, mocker):
second
=
factories
[
"playlists.PlaylistTrack"
](
playlist
=
playlist
,
index
=
1
)
insert
=
mocker
.
spy
(
models
.
Playlist
,
"insert"
)
factories
[
"playlists.Playlist"
]()
track
=
factories
[
"music.Track"
]()
factories
[
"music.Track"
]()
serializer
=
serializers
.
PlaylistTrackWriteSerializer
(
second
,
data
=
{
"playlist"
:
playlist
.
pk
,
"track"
:
second
.
track
.
pk
,
"index"
:
0
}
)
...
...
api/tests/playlists/test_views.py
View file @
639882bd
import
json
import
pytest
from
django.urls
import
reverse
...
...
@@ -13,7 +12,7 @@ def test_can_create_playlist_via_api(logged_in_api_client):
url
=
reverse
(
"api:v1:playlists-list"
)
data
=
{
"name"
:
"test"
,
"privacy_level"
:
"everyone"
}
response
=
logged_in_api_client
.
post
(
url
,
data
)
logged_in_api_client
.
post
(
url
,
data
)
playlist
=
logged_in_api_client
.
user
.
playlists
.
latest
(
"id"
)
assert
playlist
.
name
==
"test"
...
...
@@ -38,7 +37,7 @@ def test_playlist_inherits_user_privacy(logged_in_api_client):
data
=
{
"name"
:
"test"
}
response
=
logged_in_api_client
.
post
(
url
,
data
)
logged_in_api_client
.
post
(
url
,
data
)
playlist
=
user
.
playlists
.
latest
(
"id"
)
assert
playlist
.
privacy_level
==
user
.
privacy_level
...
...
@@ -80,7 +79,7 @@ def test_only_can_add_track_on_own_playlist_via_api(factories, logged_in_api_cli
def
test_deleting_plt_updates_indexes
(
mocker
,
factories
,
logged_in_api_client
):
remove
=
mocker
.
spy
(
models
.
Playlist
,
"remove"
)
track
=
factories
[
"music.Track"
]()
factories
[
"music.Track"
]()
plt
=
factories
[
"playlists.PlaylistTrack"
](
index
=
0
,
playlist__user
=
logged_in_api_client
.
user
)
...
...
api/tests/radios/test_filters.py
View file @
639882bd
...
...
@@ -15,7 +15,7 @@ class NoopFilter(filters.RadioFilter):
def
test_most_simple_radio_does_not_filter_anything
(
factories
):
tracks
=
factories
[
"music.Track"
].
create_batch
(
3
)
factories
[
"music.Track"
].
create_batch
(
3
)
radio
=
factories
[
"radios.Radio"
](
config
=
[{
"type"
:
"noop"
}])
assert
radio
.
version
==
0
...
...
api/tests/radios/test_radios.py
View file @
639882bd
...
...
@@ -75,7 +75,6 @@ def test_can_get_choices_for_custom_radio(factories):
files
=
factories
[
"music.TrackFile"
].
create_batch
(
5
,
track__artist
=
artist
)
tracks
=
[
f
.
track
for
f
in
files
]
wrong_files
=
factories
[
"music.TrackFile"
].
create_batch
(
5
)
wrong_tracks
=
[
f
.
track
for
f
in
wrong_files
]
session
=
factories
[
"radios.CustomRadioSession"
](
custom_radio__config
=
[{
"type"
:
"artist"
,
"ids"
:
[
artist
.
pk
]}]
...
...
@@ -115,13 +114,12 @@ def test_can_start_custom_radio_from_api(logged_in_client, factories):
def
test_can_use_radio_session_to_filter_choices
(
factories
):
files
=
factories
[
"music.TrackFile"
].
create_batch
(
30
)
tracks
=
[
f
.
track
for
f
in
files
]
user
=
factories
[
"users.User"
]()
radio
=
radios
.
RandomRadio
()
session
=
radio
.
start_session
(
user
)
for
i
in
range
(
30
):
p
=
radio
.
pick
()
radio
.
pick
()
# ensure 30 differents tracks have been suggested
tracks_id
=
[
...
...
@@ -186,7 +184,6 @@ def test_can_start_artist_radio(factories):
user
=
factories
[
"users.User"
]()
artist
=
factories
[
"music.Artist"
]()
wrong_files
=
factories
[
"music.TrackFile"
].
create_batch
(
5
)
wrong_tracks
=
[
f
.
track
for
f
in
wrong_files
]
good_files
=
factories
[
"music.TrackFile"
].
create_batch
(
5
,
track__artist
=
artist
)
good_tracks
=
[
f
.
track
for
f
in
good_files
]
...
...
@@ -201,7 +198,6 @@ def test_can_start_tag_radio(factories):
user
=
factories
[
"users.User"
]()
tag
=
factories
[
"taggit.Tag"
]()
wrong_files
=
factories
[
"music.TrackFile"
].
create_batch
(
5
)
wrong_tracks
=
[
f
.
track
for
f
in
wrong_files
]
good_files
=
factories
[
"music.TrackFile"
].
create_batch
(
5
,
track__tags
=
[
tag
])
good_tracks
=
[
f
.
track
for
f
in
good_files
]
...
...
@@ -236,7 +232,7 @@ def test_can_start_less_listened_radio(factories):
good_files
=
factories
[
"music.TrackFile"
].
create_batch
(
5
)
good_tracks
=
[
f
.
track
for
f
in
good_files
]
radio
=
radios
.
LessListenedRadio
()
session
=
radio
.
start_session
(
user
)
radio
.
start_session
(
user
)
for
i
in
range
(
5
):
assert
radio
.
pick
()
in
good_tracks
api/tests/subsonic/test_authentication.py
View file @
639882bd
...
...
@@ -25,7 +25,6 @@ def test_auth_with_password_hex(api_request, factories):
user
=
factories
[
"users.User"
]()
user
.
subsonic_api_token
=
"password"
user
.
save
()
token
=
authentication
.
get_token
(
salt
,
"password"
)
request
=
api_request
.
get
(
"/"
,
{
...
...
@@ -49,7 +48,6 @@ def test_auth_with_password_cleartext(api_request, factories):
user
=
factories
[
"users.User"
]()
user
.
subsonic_api_token
=
"password"
user
.
save
()
token
=
authentication
.
get_token
(
salt
,
"password"
)
request
=
api_request
.
get
(
"/"
,
{
"u"
:
user
.
username
,
"p"
:
"password"
})
authenticator
=
authentication
.
SubsonicAuthentication
()
...
...
@@ -63,7 +61,6 @@ def test_auth_with_inactive_users(api_request, factories):
user
=
factories
[
"users.User"
](
is_active
=
False
)
user
.
subsonic_api_token
=
"password"
user
.
save
()
token
=
authentication
.
get_token
(
salt
,
"password"
)
request
=
api_request
.
get
(
"/"
,
{
"u"
:
user
.
username
,
"p"
:
"password"
})
authenticator
=
authentication
.
SubsonicAuthentication
()
...
...
api/tests/subsonic/test_views.py
View file @
639882bd
...
...
@@ -5,8 +5,6 @@ import pytest
from
django.utils
import
timezone
from
django.urls
import
reverse
from
rest_framework.response
import
Response
from
funkwhale_api.music
import
models
as
music_models
from
funkwhale_api.music
import
views
as
music_views
from
funkwhale_api.subsonic
import
renderers
...
...
@@ -80,7 +78,7 @@ def test_ping(f, db, api_client):
def
test_get_artists
(
f
,
db
,
logged_in_api_client
,
factories
):
url
=
reverse
(
"api:subsonic-get-artists"
)
assert
url
.
endswith
(
"getArtists"
)
is
True
artists
=
factories
[
"music.Artist"
].
create_batch
(
size
=
10
)
factories
[
"music.Artist"
].
create_batch
(
size
=
10
)
expected
=
{
"artists"
:
serializers
.
GetArtistsSerializer
(
music_models
.
Artist
.
objects
.
all
()
...
...
@@ -97,7 +95,7 @@ def test_get_artist(f, db, logged_in_api_client, factories):
url
=
reverse
(
"api:subsonic-get-artist"
)
assert
url
.
endswith
(
"getArtist"
)
is
True
artist
=
factories
[
"music.Artist"
]()
albums
=
factories
[
"music.Album"
].
create_batch
(
size
=
3
,
artist
=
artist
)
factories
[
"music.Album"
].
create_batch
(
size
=
3
,
artist
=
artist
)
expected
=
{
"artist"
:
serializers
.
GetArtistSerializer
(
artist
).
data
}
response
=
logged_in_api_client
.
get
(
url
,
{
"id"
:
artist
.
pk
})
...
...
@@ -124,7 +122,7 @@ def test_get_album(f, db, logged_in_api_client, factories):
assert
url
.
endswith
(
"getAlbum"
)
is
True
artist
=
factories
[
"music.Artist"
]()
album
=
factories
[
"music.Album"
](
artist
=
artist
)
tracks
=
factories
[
"music.Track"
].
create_batch
(
size
=
3
,
album
=
album
)
factories
[
"music.Track"
].
create_batch
(
size
=
3
,
album
=
album
)
expected
=
{
"album"
:
serializers
.
GetAlbumSerializer
(
album
).
data
}
response
=
logged_in_api_client
.
get
(
url
,
{
"f"
:
f
,
"id"
:
album
.
pk
})
...
...
@@ -166,7 +164,7 @@ def test_unstar(f, db, logged_in_api_client, factories):
url
=
reverse
(
"api:subsonic-unstar"
)
assert
url
.
endswith
(
"unstar"
)
is
True
track
=
factories
[
"music.Track"
]()
fa
vorite
=
fa
ctories
[
"favorites.TrackFavorite"
](
factories
[
"favorites.TrackFavorite"
](
track
=
track
,
user
=
logged_in_api_client
.
user
)
response
=
logged_in_api_client
.
get
(
url
,
{
"f"
:
f
,
"id"
:
track
.
pk
})
...
...
@@ -283,7 +281,7 @@ def test_update_playlist(f, db, logged_in_api_client, factories):
url
=
reverse
(
"api:subsonic-update-playlist"
)
assert
url
.
endswith
(
"updatePlaylist"
)
is
True
playlist
=
factories
[
"playlists.Playlist"
](
user
=
logged_in_api_client
.
user
)
plt
=
factories
[
"playlists.PlaylistTrack"
](
index
=
0
,
playlist
=
playlist
)
factories
[
"playlists.PlaylistTrack"
](
index
=
0
,
playlist
=
playlist
)
new_track
=
factories
[
"music.Track"
]()
response
=
logged_in_api_client
.
get
(
url
,
...
...
@@ -350,7 +348,7 @@ def test_get_music_folders(f, db, logged_in_api_client, factories):
def
test_get_indexes
(
f
,
db
,
logged_in_api_client
,
factories
):
url
=
reverse
(
"api:subsonic-get-indexes"
)
assert
url
.
endswith
(
"getIndexes"
)
is
True
artists
=
factories
[
"music.Artist"
].
create_batch
(
size
=
10
)
factories
[
"music.Artist"
].
create_batch
(
size
=
10
)
expected
=
{
"indexes"
:
serializers
.
GetArtistsSerializer
(
music_models
.
Artist
.
objects
.
all
()
...
...
@@ -384,5 +382,5 @@ def test_scrobble(factories, logged_in_api_client):
assert
response
.
status_code
==
200