Esempio n. 1
0
def folder_list(request):
    folder_list = []
    folder_qs = Developer.objects.all()
    for obj in folder_qs:
        if obj.developer_path not in folder_list:
            folder_list.append(obj.developer_path)

    folders = get_next_folders('/devs', folder_list)
    return_dict = { "folders": folders }

    return Response(return_dict, status=status.HTTP_200_OK)
Esempio n. 2
0
def file_list(request, folder='/devs'):
    """
    List all files in the file index, paginated.  Supports an optional 
    'search' query parameter, that filters the results by the search terms,
    an optional 'items' parameter that allows the end-user to specify
    how many items per page, and a 'page' parameter to get a specific
    page number from the results.
    """

    if request.method == 'GET':
        # We only want to show items that are 'active'
        if folder == None:
            queryset = File.objects.all().filter(status=1)
        else:
            # Add leading slash to match database
            folder = '/' + folder
            if folder[-1] == '/':
                folder = folder[:-1]

            queryset = File.objects.filter(status=1, folder=folder)
            folder_qs = File.objects.filter(folder__startswith=folder + '/')

            if not queryset.exists() and not folder_qs.exists():
                return file_detail(request, path=folder)

        # Set optional search terms
        # search_terms = request.QUERY_PARAMS.get('search')
        # if search_terms:
        	# Equivalent to "SELECT * from files WHERE MATCH(files, filename)  
        	# AGAINST (search_terms IN BOOLEAN MODE) OR MATCH(files, description) 
        	# AGAINST (search_terms IN BOOLEAN MODE)"
        # 	queryset = queryset.filter(Q(filename__search=search_terms) | 
        # 		Q(description__search=search_terms))

        # Sort queryset by modified date (descending),  
        # removing any duplicate entries
        # queryset = queryset.order_by('-modified').distinct()
        
        # Allow API end-users to specify a custom amount of items per page
        # items_per_page = request.QUERY_PARAMS.get('items') 
        # if not items_per_page or not isinstance(items_per_page, int):
        # 	items_per_page = 10

    	# paginator = Paginator(queryset, items_per_page)
        
        # page = request.QUERY_PARAMS.get('page')
        # try:
        #	files = paginator.page(page)
        # except PageNotAnInteger:
        	# If page is not an integer, deliver first page
        #	files = paginator.page(1)
        # except EmptyPage:
        	# If page is out of range
        	# deliver last page of results
        #	files = paginator.page(paginator.num_pages)

        # serializer_context = {'request': request}
        serializer = FileSerializer(queryset)

        # folder_qs = File.objects.filter(folder__startswith=folder + '/')

        folder_list = []
        for obj in folder_qs:
            if obj.folder not in folder_list:
                folder_list.append(obj.folder)


        folders = get_next_folders(folder, folder_list)

        return_dict = { "folders": folders, "files": serializer.data }
        return Response(return_dict, status=status.HTTP_200_OK)

    if request.method == 'POST':
        serializer = FileSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)