tweaks and changes

This commit is contained in:
vabene1111
2025-04-02 09:01:52 +02:00
parent 838ce6615b
commit b18a1d0110
16 changed files with 195 additions and 1879 deletions

View File

@@ -1713,27 +1713,35 @@ class RecipeUrlImportView(APIView):
elif url and not data:
if re.match('^(https?://)?(www\\.youtube\\.com|youtu\\.be)/.+$', url):
if validate_import_url(url):
# TODO new serializer
return Response({'recipe_json': get_from_youtube_scraper(url, request), 'recipe_images': []}, status=status.HTTP_200_OK)
if re.match('^(.)*/recipe/[0-9]+/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', url):
recipe_json = requests.get(
url.replace('/recipe/', '/api/recipe/').replace(re.split('/recipe/[0-9]+', url)[1],
'') + '?share='
+ re.split('/recipe/[0-9]+', url)[1].replace('/', '')).json()
response['recipe'] = get_from_youtube_scraper(url, request)
if url and url.strip() != '':
response['duplicates'] = Recipe.objects.filter(space=request.space, source_url=url.strip()).values('id', 'name').all()
return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_200_OK)
tandoor_url = None
if re.match('^(.)*/recipe/[0-9]+/\?share=[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', url):
tandoor_url = url.replace('/recipe/', '/api/recipe/')
elif re.match('^(.)*/view/recipe/[0-9]+/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', url):
tandoor_url = (url.replace('/view/recipe/', '/api/recipe/').replace(re.split('/recipe/[0-9]+', url)[1], '') + '?share=' +
re.split('/recipe/[0-9]+', url)[1].replace('/', ''))
if tandoor_url and validate_import_url(tandoor_url):
recipe_json = requests.get(tandoor_url).json()
recipe_json = clean_dict(recipe_json, 'id')
serialized_recipe = RecipeExportSerializer(data=recipe_json, context={'request': request})
if serialized_recipe.is_valid():
recipe = serialized_recipe.save()
if validate_import_url(recipe_json['image']):
if '?' in recipe_json['image']:
filetype = pathlib.Path(recipe_json['image'].split('?')[0]).suffix
else:
filetype = pathlib.Path(recipe_json["image"]).suffix
recipe.image = File(handle_image(request,
File(
io.BytesIO(requests.get(recipe_json['image']).content),
name='image'),
filetype=pathlib.Path(recipe_json['image']).suffix),
name=f'{uuid.uuid4()}_{recipe.pk}{pathlib.Path(recipe_json["image"]).suffix}')
File( io.BytesIO(requests.get(recipe_json['image']).content), name='image'),
filetype=filetype),
name=f'{uuid.uuid4()}_{recipe.pk}.{filetype}')
recipe.save()
# TODO new serializer
return Response({'link': request.build_absolute_uri('recipe/' + recipe.pk)}, status=status.HTTP_201_CREATED)
response['recipe_id'] = recipe.pk
return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_200_OK)
else:
try:
if validate_import_url(url):