Conversation
Create a new serializer: PackageInfoSerializer. A new API to return similar package info as the old kerckhoff.
changyang-liu
left a comment
There was a problem hiding this comment.
Mostly ok, the only major things are that we should add some handling for the case where a package version has not been created, and also change the JSON format a little bit.
The others are mostly minor code style changes
| description = serializers.SerializerMethodField() | ||
| folder_id = serializers.SerializerMethodField() | ||
| folder_url = serializers.SerializerMethodField() | ||
| metadata = serializers.SerializerMethodField() |
There was a problem hiding this comment.
I think just put all the obj.metadata fields into metadata instead of leaving it as an empty dictionary. And remove the ones from the top level e.g. google drive folder id and folder url
|
|
||
| def get_data(self, obj: Package): | ||
| obj.fetch_cache() | ||
| package_items = obj.get_version(obj.latest_version.id_num).packageitem_set.all() |
There was a problem hiding this comment.
Ok when I wrote this line a few years ago I didn't realize that obj.latest_version.packageitem_set.all() is good enough.
There was a problem hiding this comment.
For this one, again please add handling for the case where no versions have been created yet
| fields = PackageSerializer.Meta.fields + ("version_data",) | ||
| read_only_fields = PackageSerializer.Meta.read_only_fields + ("version_data",) | ||
|
|
||
| class PackageInfoSerializer(serializers.ModelSerializer): |
There was a problem hiding this comment.
I'd rather this be called PublicPackageSerializer
| @@ -1,3 +1,5 @@ | |||
| import os | |||
| from dataclasses import field | |||
There was a problem hiding this comment.
I don't think you meant to import this. I'm guessing it was added by the IDE
There was a problem hiding this comment.
I used it for string manipulation.
| from typing import List | ||
| import os | ||
| import json | ||
| from importlib_metadata import packages_distributions |
There was a problem hiding this comment.
There's a bunch of unused imports here. I think again it's from the IDE
|
|
||
| def get_description(self, obj: Package): | ||
| obj.fetch_cache() | ||
| versionSerializer = PackageVersionSerializer(obj.get_version(obj.latest_version.id_num)) |
There was a problem hiding this comment.
Please add some error handling in case no versions have been created yet. Right now it will just crash the server.
There was a problem hiding this comment.
Actually this serializer should be able to return something for packages even if they have no version, because the list packages endpoint should show every package even if no version has been created
| file_ext = os.path.splitext(file.file_name)[-1] | ||
| if(file.file_name == "article.aml"): | ||
| aml_data = file.data["content_rich"]["data"] | ||
| if(file_ext in supported_image_types): |
There was a problem hiding this comment.
You don't seem to have included the images into the JSON data. I think you should either get rid of this code, or just put them into the JSON as well.
There was a problem hiding this comment.
I kept these code because I guessed we would include images somewhere later, but I just deleted these for now as you asked.
Allows for retrieving data and images form a specified version.
This reverts commit 5f1e299.
No description provided.