diff --git a/.curl_to_code/parser/models.py b/.curl_to_code/parser/models.py new file mode 100644 index 0000000..f9c379b --- /dev/null +++ b/.curl_to_code/parser/models.py @@ -0,0 +1,69 @@ +from enum import Enum +from typing import Optional, List, Dict, Any +from pydantic import BaseModel, Field + + +class RequestMethod(str, Enum): + GET = "GET" + POST = "POST" + PUT = "PUT" + PATCH = "PATCH" + DELETE = "DELETE" + HEAD = "HEAD" + OPTIONS = "OPTIONS" + + +class Header(BaseModel): + key: str + value: str + + def to_tuple(self) -> tuple[str, str]: + return (self.key, self.value) + + +class AuthType(str, Enum): + BASIC = "basic" + BEARER = "bearer" + DIGEST = "digest" + + +class Auth(BaseModel): + auth_type: AuthType = AuthType.BASIC + username: Optional[str] = None + password: Optional[str] = None + token: Optional[str] = None + + def get_header(self) -> Optional[Header]: + if self.auth_type == AuthType.BASIC and self.username and self.password: + import base64 + credentials = f"{self.username}:{self.password}" + encoded = base64.b64encode(credentials.encode()).decode() + return Header(key="Authorization", value=f"Basic {encoded}") + elif self.auth_type == AuthType.BEARER and self.token: + return Header(key="Authorization", value=f"Bearer {self.token}") + return None + + +class DataType(str, Enum): + RAW = "raw" + JSON = "json" + FORM = "form" + FILE = "file" + + +class RequestData(BaseModel): + data_type: DataType = DataType.RAW + content: str = "" + json_data: Optional[Dict[str, Any]] = None + + +class ParsedCurl(BaseModel): + url: str + method: RequestMethod = RequestMethod.GET + headers: List[Header] = Field(default_factory=list) + auth: Optional[Auth] = None + data: Optional[RequestData] = None + cookies: Dict[str, str] = Field(default_factory=dict) + user_agent: Optional[str] = None + follow_redirects: bool = True + timeout: Optional[int] = None