Folder Models
Table of Contents
Overview
This page documents the Pydantic models used for folder operations in the Strata Cloud Manager SDK. These models provide structured data validation and serialization for folder creation, updates, and API responses.
Models
FolderBaseModel
The base model for folder resources containing common fields.
class FolderBaseModel(BaseModel):
name: str
parent: str
description: Optional[str] = None
labels: Optional[List[str]] = None
snippets: Optional[List[str]] = None
FolderCreateModel
Model for creating new folder resources.
class FolderCreateModel(FolderBaseModel):
# Inherits all fields from FolderBaseModel without additional fields
pass
FolderUpdateModel
Model for updating existing folder resources.
FolderResponseModel
Model for folder responses from the API.
Model Validation Rules
Field | Validation Rules |
---|---|
name |
Non-empty string, max 255 characters |
parent |
String, empty string for root folders |
id |
Valid UUID format (required in response and update models) |
description |
Optional text description |
labels |
Optional list of string labels |
snippets |
Optional list of snippet IDs (usually UUIDs as strings) |
The FolderResponseModel
includes a validator for the parent field:
@field_validator("parent")
@classmethod
def validate_parent(cls, v: str) -> str:
"""
Validate parent field. Empty string is allowed for root folders.
"""
# Allow empty string for root folders
return v
Usage Examples
Creating Model Instances
from uuid import UUID
from typing import List, Optional
from scm.models.setup.folder_models import (
FolderBaseModel,
FolderCreateModel,
FolderUpdateModel,
FolderResponseModel
)
# Create a base folder model
base_folder = FolderBaseModel(
name="Projects",
parent="", # Root folder
description="Main projects folder",
labels=["root", "projects"]
)
# Create a folder creation model
create_folder = FolderCreateModel(
name="Development",
parent="Projects",
description="Development projects folder",
labels=["development"]
)
# Create a folder update model
update_folder = FolderUpdateModel(
id=UUID("12345678-1234-1234-1234-123456789012"),
name="Development-Updated",
parent="Projects",
description="Updated development folder",
labels=["development", "updated"]
)
# Create a folder response model
response_folder = FolderResponseModel(
id=UUID("12345678-1234-1234-1234-123456789012"),
name="Development",
parent="Projects",
description="Development projects folder",
labels=["development"],
snippets=["87654321-4321-4321-4321-210987654321"]
)
Model Validation
from pydantic import ValidationError
from scm.models.setup.folder_models import FolderCreateModel
try:
# This will fail validation (empty name)
invalid_folder = FolderCreateModel(
name="",
parent="Projects",
description="Invalid folder model"
)
except ValidationError as e:
print(f"Validation error: {e}")
try:
# This will succeed
valid_folder = FolderCreateModel(
name="Valid Folder",
parent="Projects",
description="A valid folder model"
)
print(f"Valid folder created: {valid_folder.name}")
except ValidationError as e:
print(f"Validation error: {e}")
Model Serialization
from uuid import UUID
from scm.models.setup.folder_models import FolderResponseModel
# Create a response model
folder = FolderResponseModel(
id=UUID("12345678-1234-1234-1234-123456789012"),
name="Development",
parent="Projects",
description="Development projects folder",
labels=["development", "serialization"]
)
# Convert to dictionary
folder_dict = folder.model_dump()
print(f"Dictionary representation: {folder_dict}")
# Convert to JSON string
folder_json = folder.model_dump_json()
print(f"JSON representation: {folder_json}")
# Exclude unset fields
folder_dict_minimal = folder.model_dump(exclude_unset=True)
print(f"Minimal dictionary representation: {folder_dict_minimal}")
API Integration Examples
```python from scm.client import ScmClient from scm.models.setup.folder_models import FolderCreateModel
Initialize client
client = ScmClient( client_id="your_client_id", client_secret="your_client_secret" )
Create a folder model
folder_model = FolderCreateModel( name="API Integration Folder", parent="Projects", description="A folder for API integration examples", labels=["api", "integration"] )
Use the model with the API client
response = client.folder.create( name=folder_model.name, parent=folder_model.parent, description=folder_model.description, labels=folder_model.labels )
print(f"Created folder with ID: {response.id}")
Update the folder
if response: updated = client.folder.update( folder_id=str(response.id), name="Updated API Folder", parent=response.parent, description="This folder was updated via the API", labels=[*response.labels, "updated"] if response.labels else ["updated"] ) print(f"Updated folder name: {updated.name}")