initial-setup #1

Merged
lmiranda merged 2 commits from initial-setup into main 2025-08-01 02:34:32 +00:00
4 changed files with 38 additions and 12 deletions
Showing only changes of commit b0f903660e - Show all commits

18
.flake8 Normal file
View File

@@ -0,0 +1,18 @@
[flake8]
max-line-length = 88
select = E,W,F,C,N
ignore = E203,E501,W503
exclude =
.git,
__pycache__,
build,
dist,
.eggs,
*.egg-info,
.venv,
venv,
.tox
per-file-ignores =
tests/*:F401,F811
__init__.py:F401
max-complexity = 10

View File

@@ -110,7 +110,7 @@ class PagesEndpoint(BaseEndpoint):
"""
# Build variables object
variables = {}
variables: Dict[str, Any] = {}
if limit is not None:
variables["limit"] = limit
if offset is not None:
@@ -129,10 +129,10 @@ class PagesEndpoint(BaseEndpoint):
variables["orderDirection"] = order_direction
# Make request with query and variables
json_data = {"query": query}
json_data: Dict[str, Any] = {"query": query}
if variables:
json_data["variables"] = variables
response = self._post("/graphql", json_data=json_data)
# Parse response

View File

@@ -4,7 +4,7 @@ from datetime import datetime
from typing import Any, Dict, Optional
from pydantic import BaseModel as PydanticBaseModel
from pydantic import ConfigDict
from pydantic import ConfigDict, field_serializer
class BaseModel(PydanticBaseModel):
@@ -26,8 +26,6 @@ class BaseModel(PydanticBaseModel):
use_enum_values=True,
# Allow extra fields for forward compatibility
extra="ignore",
# Serialize datetime as ISO format
json_encoders={datetime: lambda v: v.isoformat() if v else None},
)
def to_dict(self, exclude_none: bool = True) -> Dict[str, Any]:
@@ -83,6 +81,11 @@ class TimestampedModel(BaseModel):
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
@field_serializer('created_at', 'updated_at')
def serialize_datetime(self, value: Optional[datetime]) -> Optional[str]:
"""Serialize datetime to ISO format."""
return value.isoformat() if value else None
@property
def is_new(self) -> bool:
"""Check if this is a new (unsaved) model."""

View File

@@ -3,7 +3,7 @@
import re
from typing import List, Optional
from pydantic import Field, validator
from pydantic import Field, field_validator
from .base import BaseModel, TimestampedModel
@@ -37,7 +37,8 @@ class Page(TimestampedModel):
# Editor information
editor: Optional[str] = Field(None, description="Editor used")
@validator("path")
@field_validator("path")
@classmethod
def validate_path(cls, v: str) -> str:
"""Validate page path format."""
if not v:
@@ -52,7 +53,8 @@ class Page(TimestampedModel):
return v
@validator("title")
@field_validator("title")
@classmethod
def validate_title(cls, v: str) -> str:
"""Validate page title."""
if not v or not v.strip():
@@ -132,7 +134,8 @@ class PageCreate(BaseModel):
locale: str = Field("en", description="Page locale")
editor: str = Field("markdown", description="Editor to use")
@validator("path")
@field_validator("path")
@classmethod
def validate_path(cls, v: str) -> str:
"""Validate page path format."""
if not v:
@@ -147,7 +150,8 @@ class PageCreate(BaseModel):
return v
@validator("title")
@field_validator("title")
@classmethod
def validate_title(cls, v: str) -> str:
"""Validate page title."""
if not v or not v.strip():
@@ -172,7 +176,8 @@ class PageUpdate(BaseModel):
tags: Optional[List[str]] = Field(None, description="Page tags")
@validator("title")
@field_validator("title")
@classmethod
def validate_title(cls, v: Optional[str]) -> Optional[str]:
"""Validate page title if provided."""
if v is not None: