mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-01 04:10:06 -05:00
some fixes and changes
This commit is contained in:
@@ -658,7 +658,7 @@ class RecipeSimpleSerializer(WritableNestedModelSerializer):
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
# don't allow writing to Recipe via this API
|
||||
return Recipe.objects.get(**validated_data)
|
||||
return instance
|
||||
|
||||
class Meta:
|
||||
model = Recipe
|
||||
@@ -1702,3 +1702,56 @@ class RecipeFromSourceResponseSerializer(serializers.Serializer):
|
||||
class AiImportSerializer(serializers.Serializer):
|
||||
file = serializers.FileField(allow_null=True)
|
||||
text = serializers.CharField(allow_null=True, allow_blank=True)
|
||||
|
||||
|
||||
class ImportOpenDataSerializer(serializers.Serializer):
|
||||
selected_version = serializers.CharField()
|
||||
selected_datatypes = serializers.ListField(child=serializers.CharField())
|
||||
update_existing = serializers.BooleanField(default=True)
|
||||
use_metric = serializers.BooleanField(default=True)
|
||||
|
||||
|
||||
class ImportOpenDataResponseDetailSerializer(serializers.Serializer):
|
||||
total_created = serializers.IntegerField(default=0)
|
||||
total_updated = serializers.IntegerField(default=0)
|
||||
total_untouched = serializers.IntegerField(default=0)
|
||||
total_errored = serializers.IntegerField(default=0)
|
||||
|
||||
class ImportOpenDataResponseSerializer(serializers.Serializer):
|
||||
food = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
unit = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
category = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
property = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
store = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
conversion = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
|
||||
class ImportOpenDataVersionMetaDataSerializer(serializers.Serializer):
|
||||
food = serializers.IntegerField()
|
||||
unit = serializers.IntegerField()
|
||||
category = serializers.IntegerField()
|
||||
property = serializers.IntegerField()
|
||||
store = serializers.IntegerField()
|
||||
conversion = serializers.IntegerField()
|
||||
|
||||
class ImportOpenDataMetaDataSerializer(serializers.Serializer):
|
||||
versions = serializers.ListField(child=serializers.CharField())
|
||||
datatypes = serializers.ListField(child=serializers.CharField())
|
||||
|
||||
base = ImportOpenDataVersionMetaDataSerializer()
|
||||
cs = ImportOpenDataVersionMetaDataSerializer()
|
||||
da = ImportOpenDataVersionMetaDataSerializer()
|
||||
de = ImportOpenDataVersionMetaDataSerializer()
|
||||
el = ImportOpenDataVersionMetaDataSerializer()
|
||||
en = ImportOpenDataVersionMetaDataSerializer()
|
||||
es = ImportOpenDataVersionMetaDataSerializer()
|
||||
fr = ImportOpenDataVersionMetaDataSerializer()
|
||||
hu = ImportOpenDataVersionMetaDataSerializer()
|
||||
it = ImportOpenDataVersionMetaDataSerializer()
|
||||
nb_NO = ImportOpenDataVersionMetaDataSerializer()
|
||||
nl = ImportOpenDataVersionMetaDataSerializer()
|
||||
pl = ImportOpenDataVersionMetaDataSerializer()
|
||||
pt = ImportOpenDataVersionMetaDataSerializer()
|
||||
pt_BR = ImportOpenDataVersionMetaDataSerializer()
|
||||
sk = ImportOpenDataVersionMetaDataSerializer()
|
||||
sl = ImportOpenDataVersionMetaDataSerializer()
|
||||
zh_Hans = ImportOpenDataVersionMetaDataSerializer()
|
||||
@@ -108,7 +108,7 @@ from cookbook.serializer import (AccessTokenSerializer, AutomationSerializer, Au
|
||||
UnitConversionSerializer, UnitSerializer, UserFileSerializer, UserPreferenceSerializer,
|
||||
UserSerializer, UserSpaceSerializer, ViewLogSerializer,
|
||||
LocalizationSerializer, ServerSettingsSerializer, RecipeFromSourceResponseSerializer, ShoppingListEntryBulkCreateSerializer, FdcQuerySerializer,
|
||||
AiImportSerializer
|
||||
AiImportSerializer, ImportOpenDataSerializer, ImportOpenDataMetaDataSerializer, ImportOpenDataResponseSerializer
|
||||
)
|
||||
from cookbook.version_info import TANDOOR_VERSION
|
||||
from cookbook.views.import_export import get_integration
|
||||
@@ -2081,46 +2081,44 @@ def import_files(request):
|
||||
return Response({'error': True, 'msg': form.errors}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
# TODO implement schema https://drf-spectacular.readthedocs.io/en/latest/customization.html#replace-views-with-openapiviewextension
|
||||
class ImportOpenData(APIView):
|
||||
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
|
||||
@extend_schema(responses=ImportOpenDataMetaDataSerializer(many=False))
|
||||
@decorators.action(detail=True, pagination_class=None, methods=['GET'])
|
||||
def get(self, request, format=None):
|
||||
response = requests.get(
|
||||
'https://raw.githubusercontent.com/TandoorRecipes/open-tandoor-data/main/build/meta.json')
|
||||
metadata = json.loads(response.content)
|
||||
return Response(metadata)
|
||||
|
||||
@extend_schema(request=ImportOpenDataSerializer(many=False), responses=ImportOpenDataResponseSerializer(many=False))
|
||||
@decorators.action(detail=True, pagination_class=None, methods=['POST'])
|
||||
def post(self, request, *args, **kwargs):
|
||||
# TODO validate data
|
||||
print(request.data)
|
||||
selected_version = request.data['selected_version']
|
||||
selected_datatypes = request.data['selected_datatypes']
|
||||
update_existing = str2bool(request.data['update_existing'])
|
||||
use_metric = str2bool(request.data['use_metric'])
|
||||
serializer = ImportOpenDataSerializer(data=request.data, partial=True)
|
||||
if serializer.is_valid():
|
||||
response = requests.get(
|
||||
f'https://raw.githubusercontent.com/TandoorRecipes/open-tandoor-data/main/build/{serializer.validated_data["selected_version"]}.json') # TODO catch 404, timeout, ...
|
||||
data = json.loads(response.content)
|
||||
|
||||
response = requests.get(
|
||||
f'https://raw.githubusercontent.com/TandoorRecipes/open-tandoor-data/main/build/{selected_version}.json') # TODO catch 404, timeout, ...
|
||||
data = json.loads(response.content)
|
||||
response_obj = {}
|
||||
|
||||
response_obj = {}
|
||||
data_importer = OpenDataImporter(request, data, update_existing=serializer.validated_data["update_existing"], use_metric=serializer.validated_data["use_metric"])
|
||||
|
||||
data_importer = OpenDataImporter(request, data, update_existing=update_existing, use_metric=use_metric)
|
||||
if 'unit' in serializer.validated_data['selected_datatypes']:
|
||||
response_obj['unit'] = data_importer.import_units().to_dict()
|
||||
if 'category' in serializer.validated_data['selected_datatypes']:
|
||||
response_obj['category'] = data_importer.import_category().to_dict()
|
||||
if 'property' in serializer.validated_data['selected_datatypes']:
|
||||
response_obj['property'] = data_importer.import_property().to_dict()
|
||||
if 'store' in serializer.validated_data['selected_datatypes']:
|
||||
response_obj['store'] = data_importer.import_supermarket().to_dict()
|
||||
if 'food' in serializer.validated_data['selected_datatypes']:
|
||||
response_obj['food'] = data_importer.import_food().to_dict()
|
||||
if 'conversion' in serializer.validated_data['selected_datatypes']:
|
||||
response_obj['conversion'] = data_importer.import_conversion().to_dict()
|
||||
|
||||
if selected_datatypes['unit']['selected']:
|
||||
response_obj['unit'] = data_importer.import_units().to_dict()
|
||||
if selected_datatypes['category']['selected']:
|
||||
response_obj['category'] = data_importer.import_category().to_dict()
|
||||
if selected_datatypes['property']['selected']:
|
||||
response_obj['property'] = data_importer.import_property().to_dict()
|
||||
if selected_datatypes['store']['selected']:
|
||||
response_obj['store'] = data_importer.import_supermarket().to_dict()
|
||||
if selected_datatypes['food']['selected']:
|
||||
response_obj['food'] = data_importer.import_food().to_dict()
|
||||
if selected_datatypes['conversion']['selected']:
|
||||
response_obj['conversion'] = data_importer.import_conversion().to_dict()
|
||||
|
||||
return Response(response_obj)
|
||||
return Response(ImportOpenDataResponseSerializer(context={'request': request}).to_representation(response_obj))
|
||||
|
||||
|
||||
# TODO implement schema
|
||||
|
||||
Reference in New Issue
Block a user