From 96ebbb6823ff9f2c2295a14c2a6a7d8fff719290 Mon Sep 17 00:00:00 2001 From: l3ocho Date: Thu, 31 Jul 2025 22:22:37 -0400 Subject: [PATCH 1/2] first commit --- working_playground.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/working_playground.py b/working_playground.py index 5cc7e97..0c43ad5 100644 --- a/working_playground.py +++ b/working_playground.py @@ -2,14 +2,13 @@ import sys import os - sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from wikijs import WikiJSClient client = WikiJSClient( base_url="https://wikijs.hotserv.cloud", - auth="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGkiOjEsImdycCI6MSwiaWF0IjoxNTM4ODM1NTQ1LCJleHAiOjE3ODUzOTMxNDUsImF1ZCI6InVybjp3aWtpLmpzIiwiaXNzIjoidXJuOndpa2kuanMifQ.d1fCZMqS-4gR5TfcMU4CLc_mD-uyYxlUxPbxbqqdIazruKKmBLACkVEumf-RFgEatsuCQjQiU0A6E_IfwFBgqFy1g5W_Ly9st7_5k6JOHfn4shGnCrRv3FBLHOtiRUexURcXNvHxh00oEJ8IPuhmTDSpc1g5ssVeNR9oHwz8V-CIvtmP_S5NIalTVEeOXmSSfyHXK4_sMx8zbBb8tCHNt1tbhZ8Z5N--pqvWZFC_ddYZ8-kMkQo-ni1rP48WLpEngWCij6mAPKhdqLjykmIkZF_hwnfvunG7iIZpFVoUJ3uIc09GkIVa5VdpcBHD4w1rnpouWZP8FuR9aHlAL7sB3Q", + auth="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGkiOjEsImdycCI6MSwiaWF0IjoxNTM4ODM1NTQ1LCJleHAiOjE3ODUzOTMxNDUsImF1ZCI6InVybjp3aWtpLmpzIiwiaXNzIjoidXJuOndpa2kuanMifQ.d1fCZMqS-4gR5TfcMU4CLc_mD-uyYxlUxPbxbqqdIazruKKmBLACkVEumf-RFgEatsuCQjQiU0A6E_IfwFBgqFy1g5W_Ly9st7_5k6JOHfn4shGnCrRv3FBLHOtiRUexURcXNvHxh00oEJ8IPuhmTDSpc1g5ssVeNR9oHwz8V-CIvtmP_S5NIalTVEeOXmSSfyHXK4_sMx8zbBb8tCHNt1tbhZ8Z5N--pqvWZFC_ddYZ8-kMkQo-ni1rP48WLpEngWCij6mAPKhdqLjykmIkZF_hwnfvunG7iIZpFVoUJ3uIc09GkIVa5VdpcBHD4w1rnpouWZP8FuR9aHlAL7sB3Q" ) print("✅ Client created") @@ -20,5 +19,3 @@ for i, page in enumerate(pages[:5], 1): print(f" {i}. {page.title} (ID: {page.id})") client.close() print("✅ SDK working!") - -print("just my test") -- 2.49.1 From b0f903660e5d1fc7a7ad1287bd7722bb43e7dc4d Mon Sep 17 00:00:00 2001 From: l3ocho Date: Thu, 31 Jul 2025 22:32:51 -0400 Subject: [PATCH 2/2] second commit --- .flake8 | 18 ++++++++++++++++++ wikijs/endpoints/pages.py | 6 +++--- wikijs/models/base.py | 9 ++++++--- wikijs/models/page.py | 17 +++++++++++------ 4 files changed, 38 insertions(+), 12 deletions(-) create mode 100644 .flake8 diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..04ca400 --- /dev/null +++ b/.flake8 @@ -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 \ No newline at end of file diff --git a/wikijs/endpoints/pages.py b/wikijs/endpoints/pages.py index 306f618..8f36816 100644 --- a/wikijs/endpoints/pages.py +++ b/wikijs/endpoints/pages.py @@ -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 diff --git a/wikijs/models/base.py b/wikijs/models/base.py index 70b58cf..678e471 100644 --- a/wikijs/models/base.py +++ b/wikijs/models/base.py @@ -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.""" diff --git a/wikijs/models/page.py b/wikijs/models/page.py index 493e782..e626bf8 100644 --- a/wikijs/models/page.py +++ b/wikijs/models/page.py @@ -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: -- 2.49.1