Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/api/plane/api/views/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
from plane.bgtasks.webhook_task import model_activity
from plane.bgtasks.work_item_link_task import crawl_work_item_link_title


class WorkspaceIssueAPIEndpoint(BaseAPIView):
"""
This viewset provides `retrieveByIssueId` on workspace level
Expand Down
2 changes: 1 addition & 1 deletion apps/api/plane/app/serializers/cycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,4 @@ class CycleUserPropertiesSerializer(BaseSerializer):
class Meta:
model = CycleUserProperties
fields = "__all__"
read_only_fields = ["workspace", "project", "cycle" "user"]
read_only_fields = ["workspace", "project", "cycle", "user"]
1 change: 0 additions & 1 deletion apps/api/plane/app/serializers/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -726,7 +726,6 @@ class Meta:


class IssueListDetailSerializer(serializers.Serializer):

def __init__(self, *args, **kwargs):
# Extract expand parameter and store it as instance variable
self.expand = kwargs.pop("expand", []) or []
Expand Down
4 changes: 2 additions & 2 deletions apps/api/plane/app/serializers/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ class Meta:
fields = "__all__"


class ProjectMemberRoleSerializer(DynamicBaseSerializer):
original_role = serializers.IntegerField(source='role', read_only=True)
class ProjectMemberRoleSerializer(DynamicBaseSerializer):
original_role = serializers.IntegerField(source="role", read_only=True)

class Meta:
model = ProjectMember
Expand Down
6 changes: 5 additions & 1 deletion apps/api/plane/app/serializers/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,11 @@ def get_workspace(self, obj):
workspace_member__member=obj.id,
workspace_member__is_active=True,
).first()
logo_asset_url = workspace.logo_asset.asset_url if workspace.logo_asset is not None else ""
logo_asset_url = (
workspace.logo_asset.asset_url
if workspace.logo_asset is not None
else ""
)
return {
"last_workspace_id": profile.last_workspace_id,
"last_workspace_slug": (
Expand Down
1 change: 0 additions & 1 deletion apps/api/plane/app/serializers/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@


class ViewIssueListSerializer(serializers.Serializer):

def get_assignee_ids(self, instance):
return [assignee.assignee_id for assignee in instance.issue_assignee.all()]

Expand Down
6 changes: 3 additions & 3 deletions apps/api/plane/app/views/analytic/advance.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,8 @@ def get_project_issues_stats(self) -> QuerySet:
)

return (
base_queryset.values("project_id", "project__name").annotate(
base_queryset.values("project_id", "project__name")
.annotate(
cancelled_work_items=Count("id", filter=Q(state__group="cancelled")),
completed_work_items=Count("id", filter=Q(state__group="completed")),
backlog_work_items=Count("id", filter=Q(state__group="backlog")),
Expand All @@ -173,8 +174,7 @@ def get_project_issues_stats(self) -> QuerySet:
def get_work_items_stats(self) -> Dict[str, Dict[str, int]]:
base_queryset = Issue.issue_objects.filter(**self.filters["base_filters"])
return (
base_queryset
.values("project_id", "project__name")
base_queryset.values("project_id", "project__name")
.annotate(
cancelled_work_items=Count("id", filter=Q(state__group="cancelled")),
completed_work_items=Count("id", filter=Q(state__group="completed")),
Expand Down
2 changes: 1 addition & 1 deletion apps/api/plane/app/views/notification/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def get_queryset(self):
workspace__slug=self.kwargs.get("slug"),
receiver_id=self.request.user.id,
)
.select_related("workspace", "project," "triggered_by", "receiver")
.select_related("workspace", "project", "triggered_by", "receiver")
)

@allow_permission(
Expand Down
2 changes: 1 addition & 1 deletion apps/api/plane/db/management/commands/create_dummy_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def handle(self, *args: Any, **options: Any) -> str | None:
project_count = int(input("Number of projects to be created: "))

for i in range(project_count):
print(f"Please provide the following details for project {i+1}:")
print(f"Please provide the following details for project {i + 1}:")
issue_count = int(input("Number of issues to be created: "))
cycle_count = int(input("Number of cycles to be created: "))
module_count = int(input("Number of modules to be created: "))
Expand Down
6 changes: 3 additions & 3 deletions apps/api/plane/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def workspace(create_user):
)

WorkspaceMember.objects.create(
workspace=created_workspace, member=create_user, role=20
)
workspace=created_workspace, member=create_user, role=20
)

return created_workspace
33 changes: 12 additions & 21 deletions apps/api/plane/tests/conftest_external.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def mock_redis():
mock_redis_client.ttl.return_value = -1

# Start the patch
with patch('plane.settings.redis.redis_instance', return_value=mock_redis_client):
with patch("plane.settings.redis.redis_instance", return_value=mock_redis_client):
yield mock_redis_client


Expand All @@ -44,7 +44,7 @@ def mock_elasticsearch():
mock_es_client.delete.return_value = {"_id": "test_id", "result": "deleted"}

# Start the patch
with patch('elasticsearch.Elasticsearch', return_value=mock_es_client):
with patch("elasticsearch.Elasticsearch", return_value=mock_es_client):
yield mock_es_client


Expand All @@ -68,39 +68,30 @@ def mock_mongodb():
# Configure common MongoDB collection operations
mock_mongo_collection.find_one.return_value = None
mock_mongo_collection.find.return_value = MagicMock(
__iter__=lambda x: iter([]),
count=lambda: 0
__iter__=lambda x: iter([]), count=lambda: 0
)
mock_mongo_collection.insert_one.return_value = MagicMock(
inserted_id="mock_id_123",
acknowledged=True
inserted_id="mock_id_123", acknowledged=True
)
mock_mongo_collection.insert_many.return_value = MagicMock(
inserted_ids=["mock_id_123", "mock_id_456"],
acknowledged=True
inserted_ids=["mock_id_123", "mock_id_456"], acknowledged=True
)
mock_mongo_collection.update_one.return_value = MagicMock(
modified_count=1,
matched_count=1,
acknowledged=True
modified_count=1, matched_count=1, acknowledged=True
)
mock_mongo_collection.update_many.return_value = MagicMock(
modified_count=2,
matched_count=2,
acknowledged=True
modified_count=2, matched_count=2, acknowledged=True
)
mock_mongo_collection.delete_one.return_value = MagicMock(
deleted_count=1,
acknowledged=True
deleted_count=1, acknowledged=True
)
mock_mongo_collection.delete_many.return_value = MagicMock(
deleted_count=2,
acknowledged=True
deleted_count=2, acknowledged=True
)
mock_mongo_collection.count_documents.return_value = 0

# Start the patch
with patch('pymongo.MongoClient', return_value=mock_mongo_client):
with patch("pymongo.MongoClient", return_value=mock_mongo_client):
yield mock_mongo_client


Expand All @@ -112,6 +103,6 @@ def mock_celery():
This fixture patches Celery's task.delay() to prevent actual task execution.
"""
# Start the patch
with patch('celery.app.task.Task.delay') as mock_delay:
with patch("celery.app.task.Task.delay") as mock_delay:
mock_delay.return_value = MagicMock(id="mock-task-id")
yield mock_delay
yield mock_delay
1 change: 0 additions & 1 deletion apps/api/plane/tests/contract/app/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@

Loading