API: Upload new version of an extension #138

Merged
Dalai Felinto merged 12 commits from tokens-version-api into main 2024-05-27 16:18:05 +02:00
Showing only changes of commit 1baf3b9bb8 - Show all commits

View File

@ -197,44 +197,36 @@ class UploadExtensionVersionView(APIView):
status=status.HTTP_403_FORBIDDEN, status=status.HTTP_403_FORBIDDEN,
) )
try: # Create a NewVersionView instance to handle file creation
# Create a NewVersionView instance to handle file creation new_version_view = NewVersionView(request=request, extension=extension)
new_version_view = NewVersionView(request=request, extension=extension)
# Pass the version_file to the form # Pass the version_file to the form
form = new_version_view.get_form(FileFormSkipAgreed) form = new_version_view.get_form(FileFormSkipAgreed)
form.fields['source'].initial = version_file form.fields['source'].initial = version_file
if not form.is_valid(): if not form.is_valid():
return Response({'message': form.errors}, status=status.HTTP_400_BAD_REQUEST) return Response({'message': form.errors}, status=status.HTTP_400_BAD_REQUEST)
with transaction.atomic(): with transaction.atomic():
# Create the file instance # Create the file instance
file_instance = form.save(commit=False) file_instance = form.save(commit=False)
file_instance.user = user file_instance.user = user
file_instance.save() file_instance.save()
Review

btw, what's the use case for update here? why we are not just creating the object?

btw, what's the use case for update here? why we are not just creating the object?
Review

I guess I was just copying the same code we used on UploadFileView.form_valid. Which probably should be changed as well.

Anyways, changing the PR to use create(), and will merge after testing.

I guess I was just copying the same code we used on UploadFileView.form_valid. Which probably should be changed as well. Anyways, changing the PR to use create(), and will merge after testing.
# Create the version from the file # Create the version from the file
version = Version.objects.update_or_create( version = Version.objects.update_or_create(
extension=extension, extension=extension,
file=file_instance, file=file_instance,
release_notes=release_notes, release_notes=release_notes,
**file_instance.parsed_version_fields, **file_instance.parsed_version_fields,
)[0] )[0]
return Response( return Response(
{ {
'message': 'Extension version uploaded successfully!', 'message': 'Extension version uploaded successfully!',
'extension_id': extension_id, 'extension_id': extension_id,
'version_file': version_file.name, 'version_file': version_file.name,
'release_notes': version.release_notes, 'release_notes': version.release_notes,
}, },
status=status.HTTP_201_CREATED, status=status.HTTP_201_CREATED,
) )
except Exception as e:
return Response(
{
'message': str(e),
},
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
)