mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	This demonstrates the use of BaseModel to replace a check_dict_only validator. We also add support to referring to $defs in the OpenAPI tests. In the future, we can descend down each object instead of mapping them to dict for more accurate checks.
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import List
 | 
						|
 | 
						|
from django.http import HttpRequest, HttpResponse
 | 
						|
from pydantic import Json
 | 
						|
 | 
						|
from zerver.lib.drafts import (
 | 
						|
    DraftData,
 | 
						|
    do_create_drafts,
 | 
						|
    do_delete_draft,
 | 
						|
    do_edit_draft,
 | 
						|
    draft_endpoint,
 | 
						|
)
 | 
						|
from zerver.lib.response import json_success
 | 
						|
from zerver.lib.typed_endpoint import PathOnly, typed_endpoint
 | 
						|
from zerver.models import Draft, UserProfile
 | 
						|
 | 
						|
 | 
						|
@draft_endpoint
 | 
						|
def fetch_drafts(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
 | 
						|
    user_drafts = Draft.objects.filter(user_profile=user_profile).order_by("last_edit_time")
 | 
						|
    draft_dicts = [draft.to_dict() for draft in user_drafts]
 | 
						|
    return json_success(request, data={"count": user_drafts.count(), "drafts": draft_dicts})
 | 
						|
 | 
						|
 | 
						|
@draft_endpoint
 | 
						|
@typed_endpoint
 | 
						|
def create_drafts(
 | 
						|
    request: HttpRequest,
 | 
						|
    user_profile: UserProfile,
 | 
						|
    *,
 | 
						|
    drafts: Json[List[DraftData]],
 | 
						|
) -> HttpResponse:
 | 
						|
    created_draft_objects = do_create_drafts(drafts, user_profile)
 | 
						|
    draft_ids = [draft_object.id for draft_object in created_draft_objects]
 | 
						|
    return json_success(request, data={"ids": draft_ids})
 | 
						|
 | 
						|
 | 
						|
@draft_endpoint
 | 
						|
@typed_endpoint
 | 
						|
def edit_draft(
 | 
						|
    request: HttpRequest,
 | 
						|
    user_profile: UserProfile,
 | 
						|
    *,
 | 
						|
    draft_id: PathOnly[int],
 | 
						|
    draft: Json[DraftData],
 | 
						|
) -> HttpResponse:
 | 
						|
    do_edit_draft(draft_id, draft, user_profile)
 | 
						|
    return json_success(request)
 | 
						|
 | 
						|
 | 
						|
@draft_endpoint
 | 
						|
def delete_draft(request: HttpRequest, user_profile: UserProfile, *, draft_id: int) -> HttpResponse:
 | 
						|
    do_delete_draft(draft_id, user_profile)
 | 
						|
    return json_success(request)
 |