diff --git a/.github/workflows/django-test.yml b/.github/workflows/django-test.yml index 4514720d..d72dd1bd 100644 --- a/.github/workflows/django-test.yml +++ b/.github/workflows/django-test.yml @@ -19,7 +19,7 @@ jobs: python-version: 3.11 - name: cache poetry install - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.local key: poetry-1.2.2-0 @@ -32,7 +32,7 @@ jobs: - name: cache deps id: cache-deps - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: .venv key: pydeps-${{ hashFiles('**/poetry.lock') }} @@ -46,4 +46,4 @@ jobs: - name: Run tests run: poetry run python manage.py test env: - DEBUG: True \ No newline at end of file + DEBUG: True diff --git a/Dockerfile b/Dockerfile index 516d3605..08817c57 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,6 +11,8 @@ ENV PYTHONFAULTHANDLER=1 \ POETRY_VERSION=1.2.2 RUN pip install "poetry==$POETRY_VERSION" +RUN apt install -y cmake +RUN rm -rf /var/lib/apt/lists/* RUN mkdir /procollab diff --git a/docker-compose.yml b/docker-compose.yml index 0bbeda3c..998a7b73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,7 @@ services: command: bash ./scripts/startup.sh volumes: - ./log:/procollab/log + - ./:/procollab/. env_file: - .env environment: diff --git a/users/views.py b/users/views.py index 3d8f22f8..888a4f92 100644 --- a/users/views.py +++ b/users/views.py @@ -94,6 +94,31 @@ class UserList(ListCreateAPIView): filter_backends = (filters.DjangoFilterBackend,) filterset_class = UserFilter + def list(self, request, *args, **kwargs): + max_skills = request.query_params.get("max_skills", None) + if max_skills is not None: + try: + max_skills = int(max_skills) + if max_skills < 0: + return Response( + {"error": "max_skills must be a positive integer"}, + status=status.HTTP_400_BAD_REQUEST, + ) + except ValueError: + return Response( + {"error": "max_skills must be an integer"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + response = super().list(request, *args, **kwargs) + + if max_skills is not None: + for user_data in response.data.get("results", []): + if "skills" in user_data: + user_data["skills"] = user_data["skills"][:max_skills] + + return response + def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -259,8 +284,27 @@ class CurrentUser(GenericAPIView): def get(self, request): user = request.user + + max_skills = request.query_params.get("max_skills", None) + if max_skills is not None: + try: + max_skills = int(max_skills) + if max_skills < 0: + return Response( + {"error": "max_skills must be a positive integer"}, + status=status.HTTP_400_BAD_REQUEST, + ) + except ValueError: + return Response( + {"error": "max_skills must be an integer"}, + status=status.HTTP_400_BAD_REQUEST, + ) + serializer = self.get_serializer(user) + if max_skills is not None and "skills" in serializer.data: + serializer.data["skills"] = serializer.data["skills"][:max_skills] + if settings.DEBUG: skills_url_name = ( "https://skills.dev.procollab.ru/progress/subscription-data/"