Skip to content

Commit ffcd5ee

Browse files
authored
Merge pull request #561 from jbernal0019/master
Fix bug when updating public status of link files
2 parents 6fafdef + 5c2b6a8 commit ffcd5ee

File tree

4 files changed

+24
-15
lines changed

4 files changed

+24
-15
lines changed

chris_backend/filebrowser/serializers.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ def validate(self, data):
274274
class FileBrowserFileSerializer(serializers.HyperlinkedModelSerializer):
275275
new_file_path = serializers.CharField(max_length=1024, write_only=True,
276276
required=False)
277-
fname = serializers.FileField(use_url=False)
277+
fname = serializers.FileField(use_url=False, required=False)
278278
fsize = serializers.ReadOnlyField(source='fname.size')
279279
owner_username = serializers.ReadOnlyField(source='owner.username')
280280
file_resource = ItemLinkField('get_file_link')
@@ -522,6 +522,7 @@ def validate(self, data):
522522
class FileBrowserLinkFileSerializer(serializers.HyperlinkedModelSerializer):
523523
new_link_file_path = serializers.CharField(max_length=1024, write_only=True,
524524
required=False)
525+
path = serializers.CharField(max_length=1024, required=False)
525526
fname = serializers.FileField(use_url=False, required=False)
526527
fsize = serializers.ReadOnlyField(source='fname.size')
527528
owner_username = serializers.ReadOnlyField(source='owner.username')
@@ -573,7 +574,8 @@ def update(self, instance, validated_data):
573574
instance.parent_folder = parent_folder
574575
instance.fname.name = new_link_file_path
575576

576-
instance.save()
577+
link_name = os.path.basename(instance.fname.name).rsplit('.chrislink', 1)[0]
578+
instance.save(name=link_name)
577579
return instance
578580

579581
def get_file_link(self, obj):
@@ -689,6 +691,9 @@ def validate(self, data):
689691
raise serializers.ValidationError(
690692
{'non_field_errors':
691693
[f"Moving link file '{fname}' is not allowed."]})
694+
else: # on create
695+
if 'path' not in data:
696+
raise serializers.ValidationError({'path': ['This field is required.']})
692697
return data
693698

694699

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

705710
class Meta:
706-
model = FileGroupPermission
711+
model = LinkFileGroupPermission
707712
fields = ('url', 'id', 'permission', 'link_file_id', 'link_file_fname',
708713
'group_id', 'group_name', 'link_file', 'group', 'grp_name')
709714

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

770775
class Meta:
771-
model = FileUserPermission
776+
model = LinkFileUserPermission
772777
fields = ('url', 'id', 'permission', 'link_file_id', 'link_file_fname', 'user_id',
773778
'user_username', 'link_file', 'user', 'username')
774779

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

793798
shared_lf = lf.create_shared_link()
794799
shared_lf.grant_user_permission(user, 'r')

chris_backend/filebrowser/views.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -464,10 +464,10 @@ def retrieve(self, request, *args, **kwargs):
464464

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

473473

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

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

777778
def destroy(self, request, *args, **kwargs):

chris_backend/userfiles/serializers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414

1515
class UserFileSerializer(serializers.HyperlinkedModelSerializer):
16-
fname = serializers.FileField(use_url=False)
16+
fname = serializers.FileField(use_url=False, required=False)
1717
fsize = serializers.ReadOnlyField(source='fname.size')
1818
upload_path = serializers.CharField(max_length=1024, write_only=True, required=False)
1919
owner_username = serializers.ReadOnlyField(source='owner.username')
@@ -133,4 +133,7 @@ def validate(self, data):
133133
if 'upload_path' not in data:
134134
raise serializers.ValidationError(
135135
{'upload_path': ["This field is required."]})
136+
if 'fname' not in data:
137+
raise serializers.ValidationError(
138+
{'fname': ["This field is required."]})
136139
return data

chris_backend/userfiles/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ def retrieve(self, request, *args, **kwargs):
9797

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

106106

0 commit comments

Comments
 (0)