114 lines
3.6 KiB
Python
114 lines
3.6 KiB
Python
# retoor <retoor@molodetz.nl>
|
|
|
|
from typing import Literal
|
|
from pydantic import BaseModel, Field, field_validator
|
|
from devplacepy.models.shared import normalize_european_date, normalize_website_url
|
|
|
|
|
|
class ProjectForm(BaseModel):
|
|
title: str = Field(min_length=1, max_length=200)
|
|
description: str = Field(min_length=1, max_length=5000)
|
|
release_date: str = ""
|
|
demo_date: str = ""
|
|
project_type: Literal["game", "game_asset", "software", "mobile_app", "website"] = (
|
|
"software"
|
|
)
|
|
platforms: str = Field(default="", max_length=500)
|
|
status: str = Field(default="In Development", max_length=100)
|
|
website_url: str = Field(default="", max_length=500)
|
|
repo_url: str = Field(default="", max_length=500)
|
|
cover_attachment_uid: str = Field(default="", max_length=64)
|
|
logo_attachment_uid: str = Field(default="", max_length=64)
|
|
is_private: bool = False
|
|
attachment_uids: list[str] = []
|
|
|
|
@field_validator("release_date", "demo_date", mode="before")
|
|
@classmethod
|
|
def normalize_dates(cls, value):
|
|
return normalize_european_date(value)
|
|
|
|
@field_validator("website_url", "repo_url")
|
|
@classmethod
|
|
def valid_link_url(cls, value):
|
|
return normalize_website_url(value)
|
|
|
|
|
|
class ProjectEditForm(BaseModel):
|
|
title: str = Field(min_length=1, max_length=200)
|
|
description: str = Field(min_length=1, max_length=5000)
|
|
release_date: str = ""
|
|
demo_date: str = ""
|
|
project_type: Literal["game", "game_asset", "software", "mobile_app", "website"] = (
|
|
"software"
|
|
)
|
|
platforms: str = Field(default="", max_length=500)
|
|
status: str = Field(default="In Development", max_length=100)
|
|
website_url: str = Field(default="", max_length=500)
|
|
repo_url: str = Field(default="", max_length=500)
|
|
cover_attachment_uid: str = Field(default="", max_length=64)
|
|
logo_attachment_uid: str = Field(default="", max_length=64)
|
|
|
|
@field_validator("release_date", "demo_date", mode="before")
|
|
@classmethod
|
|
def normalize_dates(cls, value):
|
|
return normalize_european_date(value)
|
|
|
|
@field_validator("website_url", "repo_url")
|
|
@classmethod
|
|
def valid_link_url(cls, value):
|
|
return normalize_website_url(value)
|
|
|
|
|
|
class ProjectFlagForm(BaseModel):
|
|
value: bool = False
|
|
|
|
|
|
class ProjectScreenshotsForm(BaseModel):
|
|
attachment_uids: list[str] = []
|
|
|
|
|
|
class ForkForm(BaseModel):
|
|
title: str = Field(min_length=1, max_length=200)
|
|
|
|
|
|
class ProjectFileWriteForm(BaseModel):
|
|
path: str = Field(min_length=1, max_length=1024)
|
|
content: str = Field(default="", max_length=400000)
|
|
|
|
|
|
class ProjectFileMkdirForm(BaseModel):
|
|
path: str = Field(min_length=1, max_length=1024)
|
|
|
|
|
|
class ProjectFileMoveForm(BaseModel):
|
|
from_path: str = Field(min_length=1, max_length=1024)
|
|
to_path: str = Field(min_length=1, max_length=1024)
|
|
|
|
|
|
class ProjectFileDeleteForm(BaseModel):
|
|
path: str = Field(min_length=1, max_length=1024)
|
|
|
|
|
|
class ProjectFileReplaceLinesForm(BaseModel):
|
|
path: str = Field(min_length=1, max_length=1024)
|
|
start: int = Field(ge=1)
|
|
end: int = Field(ge=0)
|
|
content: str = Field(default="", max_length=400000)
|
|
|
|
|
|
class ProjectFileInsertLinesForm(BaseModel):
|
|
path: str = Field(min_length=1, max_length=1024)
|
|
at: int = Field(ge=1)
|
|
content: str = Field(default="", max_length=400000)
|
|
|
|
|
|
class ProjectFileDeleteLinesForm(BaseModel):
|
|
path: str = Field(min_length=1, max_length=1024)
|
|
start: int = Field(ge=1)
|
|
end: int = Field(ge=1)
|
|
|
|
|
|
class ProjectFileAppendForm(BaseModel):
|
|
path: str = Field(min_length=1, max_length=1024)
|
|
content: str = Field(default="", max_length=400000)
|