Merge branch 'release/0.9.1'
This commit is contained in:
commit
22cc2048ac
10
CHANGELOG
10
CHANGELOG
|
@ -3,6 +3,16 @@ Changelog
|
|||
|
||||
.. towncrier
|
||||
|
||||
0.9.1 (2018-04-17)
|
||||
------------------
|
||||
|
||||
Bugfixes:
|
||||
|
||||
- Allow null values for musicbrainz_id in Audio ActivityPub representation
|
||||
- Fixed broken permission check on library scanning and too aggressive page
|
||||
validation
|
||||
|
||||
|
||||
0.9 (2018-04-17)
|
||||
----------------
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
__version__ = '0.9'
|
||||
__version__ = '0.9.1'
|
||||
__version_info__ = tuple([int(num) if num.isdigit() else num for num in __version__.replace('-', '.', 1).split('.')])
|
||||
|
|
|
@ -16,4 +16,5 @@ class LibraryFollower(BasePermission):
|
|||
return False
|
||||
|
||||
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||
return library.followers.filter(url=actor.url).exists()
|
||||
return library.received_follows.filter(
|
||||
approved=True, actor=actor).exists()
|
||||
|
|
|
@ -616,10 +616,12 @@ class CollectionPageSerializer(serializers.Serializer):
|
|||
if not item_serializer:
|
||||
return v
|
||||
raw_items = [item_serializer(data=i, context=self.context) for i in v]
|
||||
valid_items = []
|
||||
for i in raw_items:
|
||||
i.is_valid(raise_exception=True)
|
||||
if i.is_valid():
|
||||
valid_items.append(i)
|
||||
|
||||
return raw_items
|
||||
return valid_items
|
||||
|
||||
def to_representation(self, conf):
|
||||
page = conf['page']
|
||||
|
@ -662,17 +664,17 @@ class CollectionPageSerializer(serializers.Serializer):
|
|||
|
||||
|
||||
class ArtistMetadataSerializer(serializers.Serializer):
|
||||
musicbrainz_id = serializers.UUIDField(required=False)
|
||||
musicbrainz_id = serializers.UUIDField(required=False, allow_null=True)
|
||||
name = serializers.CharField()
|
||||
|
||||
|
||||
class ReleaseMetadataSerializer(serializers.Serializer):
|
||||
musicbrainz_id = serializers.UUIDField(required=False)
|
||||
musicbrainz_id = serializers.UUIDField(required=False, allow_null=True)
|
||||
title = serializers.CharField()
|
||||
|
||||
|
||||
class RecordingMetadataSerializer(serializers.Serializer):
|
||||
musicbrainz_id = serializers.UUIDField(required=False)
|
||||
musicbrainz_id = serializers.UUIDField(required=False, allow_null=True)
|
||||
title = serializers.CharField()
|
||||
|
||||
|
||||
|
|
|
@ -30,11 +30,26 @@ def test_library_follower_actor_non_follower(
|
|||
assert check is False
|
||||
|
||||
|
||||
def test_library_follower_actor_follower_not_approved(
|
||||
factories, api_request, anonymous_user, settings):
|
||||
settings.FEDERATION_MUSIC_NEEDS_APPROVAL = True
|
||||
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||
follow = factories['federation.Follow'](target=library, approved=False)
|
||||
view = APIView.as_view()
|
||||
permission = permissions.LibraryFollower()
|
||||
request = api_request.get('/')
|
||||
setattr(request, 'user', anonymous_user)
|
||||
setattr(request, 'actor', follow.actor)
|
||||
check = permission.has_permission(request, view)
|
||||
|
||||
assert check is False
|
||||
|
||||
|
||||
def test_library_follower_actor_follower(
|
||||
factories, api_request, anonymous_user, settings):
|
||||
settings.FEDERATION_MUSIC_NEEDS_APPROVAL = True
|
||||
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||
follow = factories['federation.Follow'](target=library)
|
||||
follow = factories['federation.Follow'](target=library, approved=True)
|
||||
view = APIView.as_view()
|
||||
permission = permissions.LibraryFollower()
|
||||
request = api_request.get('/')
|
||||
|
|
|
@ -431,8 +431,14 @@ def test_collection_page_serializer_validation():
|
|||
|
||||
|
||||
def test_collection_page_serializer_can_validate_child():
|
||||
base = 'https://test.federation/test'
|
||||
data = {
|
||||
'type': 'CollectionPage',
|
||||
'id': 'https://test.page?page=2',
|
||||
'actor': 'https://test.actor',
|
||||
'first': 'https://test.page?page=1',
|
||||
'last': 'https://test.page?page=3',
|
||||
'partOf': 'https://test.page',
|
||||
'totalItems': 1,
|
||||
'items': [{'in': 'valid'}],
|
||||
}
|
||||
|
||||
|
@ -441,8 +447,9 @@ def test_collection_page_serializer_can_validate_child():
|
|||
context={'item_serializer': serializers.AudioSerializer}
|
||||
)
|
||||
|
||||
assert serializer.is_valid() is False
|
||||
assert 'items' in serializer.errors
|
||||
# child are validated but not included in data if not valid
|
||||
assert serializer.is_valid(raise_exception=True) is True
|
||||
assert len(serializer.validated_data['items']) == 0
|
||||
|
||||
|
||||
def test_collection_page_serializer(factories):
|
||||
|
|
|
@ -43,7 +43,7 @@ def test_instance_endpoints_405_if_federation_disabled(
|
|||
|
||||
|
||||
def test_wellknown_webfinger_validates_resource(
|
||||
db, api_client, settings, mocker):
|
||||
db, api_client, settings, mocker):
|
||||
clean = mocker.spy(webfinger, 'clean_resource')
|
||||
url = reverse('federation:well-known-webfinger')
|
||||
response = api_client.get(url, data={'resource': 'something'})
|
||||
|
|
Loading…
Reference in New Issue