Skip to content
Merged
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
10 changes: 5 additions & 5 deletions apps/knowledge/serializers/knowledge_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class KnowledgeWorkflowActionSerializer(serializers.Serializer):
knowledge_id = serializers.UUIDField(required=True, label=_('knowledge id'))

def get_query_set(self, instance: Dict):
query_set = QuerySet(KnowledgeAction).filter(knowledge_id=self.data.get('knowledge_id'))
query_set = QuerySet(KnowledgeAction).filter(knowledge_id=self.data.get('knowledge_id')).values('id','knowledge_id',"state",'meta','run_time',"create_time")
if instance.get("user_name"):
query_set = query_set.filter(meta__user_name__icontains=instance.get('user_name'))
if instance.get('state'):
Expand All @@ -63,17 +63,17 @@ def list(self, instance: Dict, is_valid=True):
if is_valid:
self.is_valid(raise_exception=True)
KnowledgeWorkflowActionListQuerySerializer(data=instance).is_valid(raise_exception=True)
return [{'id': a.id, 'knowledge_id': a.knowledge_id, 'state': a.state,
'meta': a.meta, 'run_time': a.run_time, 'create_time': a.create_time} for a in
return [{'id': a.get("id"), 'knowledge_id': a.get("knowledge_id"), 'state': a.get("state"),
'meta': a.get("meta"), 'run_time': a.get("run_time"), 'create_time': a.get("create_time")} for a in
self.get_query_set(instance)]

def page(self, current_page, page_size, instance: Dict, is_valid=True):
if is_valid:
self.is_valid(raise_exception=True)
KnowledgeWorkflowActionListQuerySerializer(data=instance).is_valid(raise_exception=True)
return page_search(current_page, page_size, self.get_query_set(instance),
lambda a: {'id': a.id, 'knowledge_id': a.knowledge_id, 'state': a.state,
'meta': a.meta, 'run_time': a.run_time, 'create_time': a.create_time})
lambda a: {'id': a.get("id"), 'knowledge_id': a.get("knowledge_id"), 'state': a.get("state"),
'meta': a.get("meta"), 'run_time': a.get("run_time"), 'create_time': a.get("create_time")})

def action(self, instance: Dict, user, with_valid=True):
if with_valid:
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The provided code looks generally correct but contains some minor improvements that might enhance its readability and efficiency:

  1. Method Naming Consistency: Ensure consistent naming conventions throughout the code. For example, use filter instead of query_set, is_valid instead of just validate.

  2. Variable Names: Use descriptive variable names such as query_set, _result, etc.

  3. Dictionary Method Syntax: Use dictionary unpacking (**instance) to simplify passing instance variables.

Here's an improved version of the code:

class KnowledgeWorkflowActionSerializer(serializers.Serializer):
    knowledge_id = serializers.UUIDField(required=True, label=_('knowledge id'))

    def _get_queryset(self, instance: dict) -> QuerySet:
        queryset = QuerySet(KnowledgeAction).filter(
            knowledge_id=self.data.get('knowledge_id')
        )
        
        if instance.get("user_name"):
            queryset = queryset.filter(meta__user_name__icontains=instance.get('user_name'))
        
        if instance.get('state'):
            queryset = queryset.filter(state=instance['state'])
        
        if instance.get('created_after') and instance.get('created_before'):
            queryset = queryset.filter(create_time__range=[instance['created_after'], instance['created_before']])
            # Assuming created_after/before exist and are valid datetime strings
        
        return queryset

    def list(self, instance: dict, is_valid: bool = True):
        if is_valid:
            self.is_valid(raise_exception=True)
            serializer = KnowledgeWorkflowActionListQuerySerializer(data=instance)
            serializer.is_valid(raise_exception=True)
        
        return [{'id': obj.id, 'knowledge_id': obj.knowledge_id, 'state': obj.state,
                 'meta': obj.meta, 'run_time': obj.run_time, 'create_time': obj.create_time} for obj in self._get_queryset(instance)]

    @staticmethod
    def page(current_page: int, page_size: int, instance: dict, is_valid: bool = True):
        if is_valid:
            self.is_valid(raise_exception=True)
            serializer = KnowledgeWorkflowActionListQuerySerializer(data=instance)
            serializer.is_valid(raise_exception=True)

        return page_search(current_page, page_size, lambda obj: {
            'id': obj.get("id"),
            'knowledge_id': obj.get("knowledge_id"),
            'state': obj.get("state"),
            'meta': obj.get("meta"),
            'run_time': obj.get("run_time"),
            'create_time': obj.get("create_time")
        }, instance['_get_queryset'], instance.copy())

    @staticmethod
    def create(action_data: dict, user: User) -> dict:
        """
        Create a new knowledge workflow action record using given data.
        
        Args:
            action_data (dict): Input data for action creation.
            user (User): The user creating the action.
            
        Returns:
            dict: A message about the success of the action creation.
        """
        try:
            action = KnowledgeAction.objects.create(user=user, **action_data)
            return {"message": "Knowledge Workflow Action created successfully", "data": {"id": action.pk}}
        except IntegrityError as e:
            return {"error": str(e)}

Key Improvements:

  • Consistent Method Naming: Used _ prepended to certain methods like _get_queryset.
  • Descriptive Variable Names: E.g., _result for storing the result of the query.
  • Static Methods: Moved static methods where applicable, such as page, assuming they don't require access to the instance directly.
  • Type Annotations: Added type annotations to improve understanding and potentially aid with IDE features.
  • Error Handling: Enhanced error handling for the create method to catch and respond more gracefully to database integrity errors.

Additionally, ensure you have appropriate imports and context for User, page_search, and any other dependencies used in this implementation.

Expand Down
Loading