Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pythonik/models/assets/collections.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def date_to_string(cls, dt: datetime) -> str:
return None

class Content(BaseModel):
object_id: str
object_id: str
object_type: ObjectType

class AddContentResponse(BaseModel):
Expand Down
21 changes: 18 additions & 3 deletions pythonik/models/files/keyframe.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from __future__ import annotations

from typing import Any, Dict, List, Optional
from typing import Any, Dict, List, Optional, Union

from pydantic import BaseModel

from pythonik.models.base import PaginatedResponse


Expand All @@ -15,6 +16,13 @@ class Resolution(BaseModel):
height: Optional[int] = None
width: Optional[int] = None

# For Pydantic v2
@classmethod
def model_validate(cls, obj, *args, **kwargs):
if isinstance(obj, dict):
return super().model_validate(obj, *args, **kwargs)
return obj


class TimeBase(BaseModel):
denominator: Optional[int] = None
Expand All @@ -26,6 +34,13 @@ class TimeCode(BaseModel):
is_drop_frame: Optional[bool] = None
time_base: Optional[TimeBase] = {}

# For Pydantic v2
@classmethod
def model_validate(cls, obj, *args, **kwargs):
if isinstance(obj, dict):
return super().model_validate(obj, *args, **kwargs)
return obj


class Keyframe(BaseModel):
asset_id: Optional[str] = ""
Expand All @@ -36,13 +51,13 @@ class Keyframe(BaseModel):
is_custom_keyframe: Optional[bool] = None
is_public: Optional[bool] = None
name: Optional[str] = ""
resolution: Optional[Resolution] = {}
resolution: Optional[Union[Resolution, Dict[str, Any]]] = {}
rotation: Optional[int] = None
size: Optional[int] = None
status: Optional[str] = ""
storage_id: Optional[str] = ""
storage_method: Optional[str] = ""
time_code: Optional[TimeCode] = {}
time_code: Optional[Union[Resolution, Dict[str, Any]]] = {}
type: Optional[str] = ""
upload_credentials: Optional[Dict[str, Any]] = {}
upload_method: Optional[str] = ""
Expand Down
8 changes: 4 additions & 4 deletions pythonik/models/metadata/fields.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# pythonik/models/metadata/fields.py
from typing import List, Optional
from datetime import datetime
from enum import Enum
from pydantic import BaseModel, HttpUrl
from typing import List, Optional

from pydantic import BaseModel, ConfigDict, HttpUrl


class IconikFieldType(str, Enum):
Expand Down Expand Up @@ -129,5 +130,4 @@ class FieldListResponse(BaseModel):
prev_url: Optional[str] = None
total: Optional[int] = None

class Config:
use_enum_values = True
model_config = ConfigDict(use_enum_values=True)
8 changes: 4 additions & 4 deletions pythonik/specs/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,17 @@ def __init__(self, session: Session, timeout: int = 3, base_url: str = "https://
self.session = session
self.timeout = timeout
self.set_class_attribute("base_url", base_url)


@staticmethod
def _prepare_model_data(data: Union[BaseModel, Dict[str, Any]], exclude_defaults: bool = True) -> Dict[str, Any]:
"""
Prepare data for request, handling both Pydantic models and dicts.

Args:
data: Either a Pydantic model instance or a dict
exclude_defaults: Whether to exclude default values when dumping Pydantic models

Returns:
Dict ready to be sent in request
"""
Expand Down
10 changes: 5 additions & 5 deletions pythonik/specs/collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ def get_contents(self, collection_id: str, **kwargs) -> Response:

Required roles:
- can_read_collections

Raises:
- 400 Bad request
- 401 Token is invalid
Expand All @@ -120,21 +120,21 @@ def create(
body: Collection creation parameters, either as Collection model or dict
exclude_defaults: Whether to exclude default values when dumping Pydantic models
**kwargs: Additional kwargs to pass to the request

Returns:
Response(model=Collection)

Required roles:
- can_create_collections

Raises:
- 400 Bad request
- 401 Token is invalid
"""
json_data = self._prepare_model_data(body, exclude_defaults=exclude_defaults)
response = self._post(BASE, json=json_data, **kwargs)
return self.parse_response(response, Collection)

def add_content(
self,
collection_id: str,
Expand Down
Loading