mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-01 04:10:06 -05:00
playing with FDC search integration
This commit is contained in:
@@ -1502,6 +1502,18 @@ class ServerSettingsSerializer(serializers.Serializer):
|
||||
read_only_fields = '__ALL__'
|
||||
|
||||
|
||||
class FdcQueryFoodsSerializer(serializers.Serializer):
|
||||
fdcId = serializers.IntegerField()
|
||||
description = serializers.CharField()
|
||||
dataType = serializers.CharField()
|
||||
|
||||
|
||||
class FdcQuerySerializer(serializers.Serializer):
|
||||
totalHits = serializers.IntegerField()
|
||||
currentPage = serializers.IntegerField()
|
||||
totalPages = serializers.IntegerField()
|
||||
foods = FdcQueryFoodsSerializer(many=True)
|
||||
|
||||
# Export/Import Serializers
|
||||
|
||||
class KeywordExportSerializer(KeywordSerializer):
|
||||
|
||||
@@ -118,6 +118,7 @@ urlpatterns = [
|
||||
path('api/recipe-from-source/', api.RecipeUrlImportView.as_view(), name='api_recipe_from_source'),
|
||||
path('api/image-to-recipe/', api.ImageToRecipeView.as_view(), name='api_image_to_recipe'),
|
||||
path('api/ingredient-from-string/', api.ingredient_from_string, name='api_ingredient_from_string'),
|
||||
path('api/fdc-search/', api.FdcSearchView.as_view(), name='api_fdc_search'),
|
||||
path('api/share-link/<int:pk>', api.share_link, name='api_share_link'),
|
||||
path('api/reset-food-inheritance/', api.reset_food_inheritance, name='api_reset_food_inheritance'),
|
||||
path('api/switch-active-space/<int:space_id>/', api.switch_active_space, name='api_switch_active_space'),
|
||||
|
||||
@@ -107,7 +107,7 @@ from cookbook.serializer import (AccessTokenSerializer, AutomationSerializer, Au
|
||||
SupermarketSerializer, SyncLogSerializer, SyncSerializer,
|
||||
UnitConversionSerializer, UnitSerializer, UserFileSerializer, UserPreferenceSerializer,
|
||||
UserSerializer, UserSpaceSerializer, ViewLogSerializer, ImportImageSerializer,
|
||||
LocalizationSerializer, ServerSettingsSerializer, RecipeFromSourceResponseSerializer, ShoppingListEntryBulkCreateSerializer
|
||||
LocalizationSerializer, ServerSettingsSerializer, RecipeFromSourceResponseSerializer, ShoppingListEntryBulkCreateSerializer, FdcQuerySerializer
|
||||
)
|
||||
from cookbook.version_info import TANDOOR_VERSION
|
||||
from cookbook.views.import_export import get_integration
|
||||
@@ -1936,6 +1936,38 @@ class AppImportView(APIView):
|
||||
else:
|
||||
return Response({'error': True, 'msg': form.errors}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class FdcSearchView(APIView):
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
|
||||
@extend_schema(responses=FdcQuerySerializer(many=False),
|
||||
parameters=[OpenApiParameter(name='query', type=str), OpenApiParameter(name='dataType', description='options: Branded,Foundation,Survey (FNDDS),SR Legacy', type=str, many=True)])
|
||||
def get(self, request, format=None):
|
||||
query = self.request.query_params.get('query', None)
|
||||
if query is not None:
|
||||
data_types = self.request.query_params.getlist('dataType', ['Foundation'])
|
||||
|
||||
response = requests.get(f'https://api.nal.usda.gov/fdc/v1/foods/search?api_key={FDC_API_KEY}&query={query}&dataType={",".join(data_types)}')
|
||||
|
||||
|
||||
if response.status_code == 429:
|
||||
return JsonResponse(
|
||||
{
|
||||
'msg':
|
||||
'API Key Rate Limit reached/exceeded, see https://api.data.gov/docs/rate-limits/ for more information. \
|
||||
Configure your key in Tandoor using environment FDC_API_KEY variable.'
|
||||
},
|
||||
status=429,
|
||||
json_dumps_params={'indent': 4})
|
||||
if response.status_code != 200:
|
||||
return JsonResponse({
|
||||
'msg': f'Error while requesting FDC data using url https://api.nal.usda.gov/fdc/v1/foods/search?api_key=*****&query={query}'},
|
||||
status=response.status_code,
|
||||
json_dumps_params={'indent': 4})
|
||||
|
||||
return Response(FdcQuerySerializer(context={'request': request}).to_representation(json.loads(response.content)), status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
@extend_schema(
|
||||
request=None,
|
||||
responses=None,
|
||||
|
||||
Reference in New Issue
Block a user