Skip to content

Commit

Permalink
Merge pull request #561 from jbernal0019/master
Browse files Browse the repository at this point in the history
Fix bug when updating public status of link files
  • Loading branch information
jbernal0019 authored Jul 18, 2024
2 parents 6fafdef + 5c2b6a8 commit ffcd5ee
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 15 deletions.
15 changes: 10 additions & 5 deletions chris_backend/filebrowser/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ def validate(self, data):
class FileBrowserFileSerializer(serializers.HyperlinkedModelSerializer):
new_file_path = serializers.CharField(max_length=1024, write_only=True,
required=False)
fname = serializers.FileField(use_url=False)
fname = serializers.FileField(use_url=False, required=False)
fsize = serializers.ReadOnlyField(source='fname.size')
owner_username = serializers.ReadOnlyField(source='owner.username')
file_resource = ItemLinkField('get_file_link')
Expand Down Expand Up @@ -522,6 +522,7 @@ def validate(self, data):
class FileBrowserLinkFileSerializer(serializers.HyperlinkedModelSerializer):
new_link_file_path = serializers.CharField(max_length=1024, write_only=True,
required=False)
path = serializers.CharField(max_length=1024, required=False)
fname = serializers.FileField(use_url=False, required=False)
fsize = serializers.ReadOnlyField(source='fname.size')
owner_username = serializers.ReadOnlyField(source='owner.username')
Expand Down Expand Up @@ -573,7 +574,8 @@ def update(self, instance, validated_data):
instance.parent_folder = parent_folder
instance.fname.name = new_link_file_path

instance.save()
link_name = os.path.basename(instance.fname.name).rsplit('.chrislink', 1)[0]
instance.save(name=link_name)
return instance

def get_file_link(self, obj):
Expand Down Expand Up @@ -689,6 +691,9 @@ def validate(self, data):
raise serializers.ValidationError(
{'non_field_errors':
[f"Moving link file '{fname}' is not allowed."]})
else: # on create
if 'path' not in data:
raise serializers.ValidationError({'path': ['This field is required.']})
return data


Expand All @@ -703,7 +708,7 @@ class FileBrowserLinkFileGroupPermissionSerializer(serializers.HyperlinkedModelS
group = serializers.HyperlinkedRelatedField(view_name='group-detail', read_only=True)

class Meta:
model = FileGroupPermission
model = LinkFileGroupPermission
fields = ('url', 'id', 'permission', 'link_file_id', 'link_file_fname',
'group_id', 'group_name', 'link_file', 'group', 'grp_name')

Expand Down Expand Up @@ -768,7 +773,7 @@ class FileBrowserLinkFileUserPermissionSerializer(serializers.HyperlinkedModelSe
user = serializers.HyperlinkedRelatedField(view_name='user-detail', read_only=True)

class Meta:
model = FileUserPermission
model = LinkFileUserPermission
fields = ('url', 'id', 'permission', 'link_file_id', 'link_file_fname', 'user_id',
'user_username', 'link_file', 'user', 'username')

Expand All @@ -788,7 +793,7 @@ def create(self, validated_data):
raise serializers.ValidationError(
{'non_field_errors':
[f"User '{user.username}' already has a permission to access "
f"file with id {lf.id}"]})
f"link file with id {lf.id}"]})

shared_lf = lf.create_shared_link()
shared_lf.grant_user_permission(user, 'r')
Expand Down
13 changes: 7 additions & 6 deletions chris_backend/filebrowser/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -464,10 +464,10 @@ def retrieve(self, request, *args, **kwargs):

def update(self, request, *args, **kwargs):
"""
Overriden to include the current fname in the request.
Overriden to remove 'fname' if provided by the user before serializer
validation.
"""
chris_file = self.get_object()
request.data['fname'] = chris_file.fname.file # fname required in the serializer
request.data.pop('fname', None) # shoud not change on update
return super(FileBrowserFileDetail, self).update(request, *args, **kwargs)


Expand Down Expand Up @@ -768,10 +768,11 @@ def retrieve(self, request, *args, **kwargs):

def update(self, request, *args, **kwargs):
"""
Overriden to include the current fname in the request.
Overriden to remove 'fname' and 'path' if provided by the user before serializer
validation.
"""
chris_link_file = self.get_object()
request.data['fname'] = chris_link_file.fname.file # fname required in the serializer
request.data.pop('fname', None) # shoud not change on update
request.data.pop('path', None) # shoud not change on update
return super(FileBrowserLinkFileDetail, self).update(request, *args, **kwargs)

def destroy(self, request, *args, **kwargs):
Expand Down
5 changes: 4 additions & 1 deletion chris_backend/userfiles/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@


class UserFileSerializer(serializers.HyperlinkedModelSerializer):
fname = serializers.FileField(use_url=False)
fname = serializers.FileField(use_url=False, required=False)
fsize = serializers.ReadOnlyField(source='fname.size')
upload_path = serializers.CharField(max_length=1024, write_only=True, required=False)
owner_username = serializers.ReadOnlyField(source='owner.username')
Expand Down Expand Up @@ -133,4 +133,7 @@ def validate(self, data):
if 'upload_path' not in data:
raise serializers.ValidationError(
{'upload_path': ["This field is required."]})
if 'fname' not in data:
raise serializers.ValidationError(
{'fname': ["This field is required."]})
return data
6 changes: 3 additions & 3 deletions chris_backend/userfiles/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,10 @@ def retrieve(self, request, *args, **kwargs):

def update(self, request, *args, **kwargs):
"""
Overriden to include the current fname in the request.
Overriden to remove 'fname' if provided by the user before serializer
validation.
"""
user_file = self.get_object()
request.data['fname'] = user_file.fname.file # fname required in the serializer
request.data.pop('fname', None) # shoud not change on update
return super(UserFileDetail, self).update(request, *args, **kwargs)


Expand Down

0 comments on commit ffcd5ee

Please sign in to comment.