mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-01 04:10:06 -05:00
tweaks and changes
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user