Files
devplacepy/devplacepy/models/projects.py
T
retoor 7274cc1840
DevPlace CI / test (push) Failing after 45m54s
Party Hardy
2026-10-17 07:33:08 +02:00

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)