mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-01 04:10:06 -05:00
added recipe export
This commit is contained in:
@@ -1704,6 +1704,12 @@ class AiImportSerializer(serializers.Serializer):
|
||||
text = serializers.CharField(allow_null=True, allow_blank=True)
|
||||
|
||||
|
||||
class ExportRequestSerializer(serializers.Serializer):
|
||||
type = serializers.CharField()
|
||||
all = serializers.BooleanField(default=False)
|
||||
recipes = RecipeFlatSerializer(many=True, default=[])
|
||||
custom_filter = CustomFilterSerializer(many=False, default=None, allow_null=True)
|
||||
|
||||
class ImportOpenDataSerializer(serializers.Serializer):
|
||||
selected_version = serializers.CharField()
|
||||
selected_datatypes = serializers.ListField(child=serializers.CharField())
|
||||
@@ -1717,6 +1723,7 @@ class ImportOpenDataResponseDetailSerializer(serializers.Serializer):
|
||||
total_untouched = serializers.IntegerField(default=0)
|
||||
total_errored = serializers.IntegerField(default=0)
|
||||
|
||||
|
||||
class ImportOpenDataResponseSerializer(serializers.Serializer):
|
||||
food = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
unit = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
@@ -1725,6 +1732,7 @@ class ImportOpenDataResponseSerializer(serializers.Serializer):
|
||||
store = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
conversion = ImportOpenDataResponseDetailSerializer(required=False)
|
||||
|
||||
|
||||
class ImportOpenDataVersionMetaDataSerializer(serializers.Serializer):
|
||||
food = serializers.IntegerField()
|
||||
unit = serializers.IntegerField()
|
||||
@@ -1733,6 +1741,7 @@ class ImportOpenDataVersionMetaDataSerializer(serializers.Serializer):
|
||||
store = serializers.IntegerField()
|
||||
conversion = serializers.IntegerField()
|
||||
|
||||
|
||||
class ImportOpenDataMetaDataSerializer(serializers.Serializer):
|
||||
versions = serializers.ListField(child=serializers.CharField())
|
||||
datatypes = serializers.ListField(child=serializers.CharField())
|
||||
@@ -1754,4 +1763,4 @@ class ImportOpenDataMetaDataSerializer(serializers.Serializer):
|
||||
pt_BR = ImportOpenDataVersionMetaDataSerializer()
|
||||
sk = ImportOpenDataVersionMetaDataSerializer()
|
||||
sl = ImportOpenDataVersionMetaDataSerializer()
|
||||
zh_Hans = ImportOpenDataVersionMetaDataSerializer()
|
||||
zh_Hans = ImportOpenDataVersionMetaDataSerializer()
|
||||
|
||||
@@ -111,6 +111,7 @@ urlpatterns = [
|
||||
path('data/batch/import', data.batch_import, name='data_batch_import'),
|
||||
path('data/sync/wait', data.sync_wait, name='data_sync_wait'),
|
||||
path('api/import/', api.AppImportView.as_view(), name='view_import'),
|
||||
path('api/export/', api.AppExportView.as_view(), name='api_export'),
|
||||
path('data/import/url', data.import_url, name='data_import_url'),
|
||||
path('api/get_external_file_link/<int:recipe_id>/', api.get_external_file_link, name='api_get_external_file_link'),
|
||||
path('api/get_recipe_file/<int:recipe_id>/', api.get_recipe_file, name='api_get_recipe_file'),
|
||||
|
||||
@@ -62,7 +62,7 @@ from rest_framework.serializers import CharField, IntegerField, UUIDField
|
||||
from treebeard.exceptions import InvalidMoveToDescendant, InvalidPosition, PathOverflow
|
||||
|
||||
from cookbook.connectors.connector_manager import ConnectorManager, ActionType
|
||||
from cookbook.forms import ImportForm
|
||||
from cookbook.forms import ImportForm, ImportExportBase
|
||||
from cookbook.helper import recipe_url_import as helper
|
||||
from cookbook.helper.HelperFunctions import str2bool, validate_import_url
|
||||
from cookbook.helper.image_processing import handle_image
|
||||
@@ -109,7 +109,7 @@ from cookbook.serializer import (AccessTokenSerializer, AutomationSerializer, Au
|
||||
UnitConversionSerializer, UnitSerializer, UserFileSerializer, UserPreferenceSerializer,
|
||||
UserSerializer, UserSpaceSerializer, ViewLogSerializer,
|
||||
LocalizationSerializer, ServerSettingsSerializer, RecipeFromSourceResponseSerializer, ShoppingListEntryBulkCreateSerializer, FdcQuerySerializer,
|
||||
AiImportSerializer, ImportOpenDataSerializer, ImportOpenDataMetaDataSerializer, ImportOpenDataResponseSerializer
|
||||
AiImportSerializer, ImportOpenDataSerializer, ImportOpenDataMetaDataSerializer, ImportOpenDataResponseSerializer, ExportRequestSerializer
|
||||
)
|
||||
from cookbook.version_info import TANDOOR_VERSION
|
||||
from cookbook.views.import_export import get_integration
|
||||
@@ -1952,6 +1952,38 @@ class AppImportView(APIView):
|
||||
return Response({'error': True, 'msg': form.errors}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class AppExportView(APIView):
|
||||
throttle_classes = [RecipeImportThrottle]
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
|
||||
@extend_schema(request=ExportRequestSerializer(many=False), responses=ExportLogSerializer(many=False))
|
||||
def post(self, request, *args, **kwargs):
|
||||
|
||||
serializer = ExportRequestSerializer(data=request.data, partial=True)
|
||||
if serializer.is_valid():
|
||||
if serializer.validated_data['all']:
|
||||
recipes = Recipe.objects.filter(space=request.space, internal=True).all()
|
||||
elif serializer.validated_data['custom_filter']:
|
||||
search = RecipeSearch(request, filter=serializer.initial_data['custom_filter']['id'])
|
||||
recipes = search.get_queryset(Recipe.objects.filter(space=request.space, internal=True))
|
||||
elif len(serializer.validated_data['recipes']) > 0:
|
||||
recipes = Recipe.objects.filter(space=request.space, internal=True, id__in=[item['id'] for item in serializer.initial_data['recipes']]).all()
|
||||
|
||||
integration = get_integration(request, serializer.validated_data['type'])
|
||||
|
||||
if serializer.validated_data['type'] == ImportExportBase.PDF and not settings.ENABLE_PDF_EXPORT:
|
||||
return JsonResponse({'error': _('The PDF Exporter is not enabled on this instance as it is still in an experimental state.')})
|
||||
|
||||
el = ExportLog.objects.create(type=serializer.validated_data['type'], created_by=request.user, space=request.space)
|
||||
|
||||
t = threading.Thread(target=integration.do_export, args=[recipes, el])
|
||||
t.setDaemon(True)
|
||||
t.start()
|
||||
|
||||
return Response(ExportLogSerializer(context={'request': request}).to_representation(el), status=status.HTTP_200_OK)
|
||||
|
||||
return Response({'error': True, 'msg': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class FdcSearchView(APIView):
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user