Skip to content

Commit b40ab0d

Browse files
committed
feat: Simplify image_block() API - accept file object directly (v0.16.0)
BREAKING CHANGE: image_block() now accepts file object instead of individual parameters - Simplified API from 7 parameters to 1: image_block(file=uploaded.file) - Auto-extract all metadata from uploaded file object (id, url, name, size, ext, dimensions) - Auto-detect MIME type from extension or file.mime - Auto-calculate aspect ratio from dimensions - Removed aspect_ratio parameter (calculated automatically) - Updated all tests, examples, and documentation - Reduces code by 80% and eliminates parameter errors Migration: Old: image_block(file_id=f.id, src=f.url, file_name=f.name, ...) New: image_block(file=uploaded.file, caption="...")
1 parent 7c383ed commit b40ab0d

9 files changed

Lines changed: 173 additions & 152 deletions

File tree

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# Changelog
22

3+
## [0.16.0] - 2025-10-24
4+
5+
### Changed
6+
7+
- **🔧 Breaking**: Simplified `image_block()` API - now accepts file object directly
8+
- **Old API** (deprecated): `image_block(file_id=..., src=..., file_name=..., file_size=..., extension=..., dimensions=...)`
9+
- **New API**: `image_block(file=uploaded.file, caption="...", width_percent=100)`
10+
- Reduces code by 80% - just pass the file object!
11+
- All file metadata extracted automatically from uploaded file
12+
- MIME type auto-detected from extension or file.mime
13+
- Aspect ratio auto-calculated from dimensions
14+
- Migration: Replace multiple parameters with single `file=uploaded.file` parameter
15+
316
## [0.15.0] - 2025-10-24
417

518
### Added

docs-site/docs/api-reference/document-structure.md

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,15 +1292,9 @@ from vaiz import image_block, heading, paragraph
12921292
# Upload image first
12931293
uploaded = client.upload_file("photo.jpg")
12941294

1295-
# Create image block
1295+
# Create image block - simple! Just pass the file
12961296
image = image_block(
1297-
file_id=uploaded.file.id,
1298-
src=uploaded.file.url,
1299-
file_name="photo.jpg",
1300-
file_size=uploaded.file.size,
1301-
extension="jpg",
1302-
file_type="image/jpeg",
1303-
dimensions=[1920, 1080],
1297+
file=uploaded.file,
13041298
caption="Product photo",
13051299
width_percent=75
13061300
)
@@ -1431,10 +1425,7 @@ content = [
14311425
# Image
14321426
paragraph("New interface:"),
14331427
image_block(
1434-
file_id=screenshot.file.id,
1435-
src=screenshot.file.url,
1436-
file_name="app.png",
1437-
file_size=screenshot.file.size,
1428+
file=screenshot.file,
14381429
caption="Main screen"
14391430
),
14401431

docs-site/docs/guides/document-structure-helpers.md

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -667,14 +667,9 @@ from vaiz import image_block, heading, paragraph
667667
# First, upload the image
668668
uploaded = client.upload_file("screenshots/dashboard.png")
669669

670-
# Create image block
670+
# Create image block - simple! Just pass the file
671671
image = image_block(
672-
file_id=uploaded.file.id,
673-
src=uploaded.file.url,
674-
file_name="dashboard.png",
675-
file_size=uploaded.file.size,
676-
extension="png",
677-
file_type="image/png",
672+
file=uploaded.file,
678673
caption="Main dashboard view"
679674
)
680675

@@ -702,15 +697,9 @@ width, height = img.size
702697
# Upload image
703698
uploaded = client.upload_file("photo.jpg")
704699

705-
# Create image block with dimensions
700+
# Create image block with custom width
706701
image = image_block(
707-
file_id=uploaded.file.id,
708-
src=uploaded.file.url,
709-
file_name="photo.jpg",
710-
file_size=uploaded.file.size,
711-
extension="jpg",
712-
file_type="image/jpeg",
713-
dimensions=[width, height], # Automatically calculates aspect ratio
702+
file=uploaded.file,
714703
caption="Product photo",
715704
width_percent=75 # Display at 75% width
716705
)
@@ -738,28 +727,19 @@ content = [
738727

739728
paragraph("Login screen:"),
740729
image_block(
741-
file_id=screenshot1.file.id,
742-
src=screenshot1.file.url,
743-
file_name="login.png",
744-
file_size=screenshot1.file.size,
730+
file=screenshot1.file,
745731
caption="User authentication"
746732
),
747733

748734
paragraph("Dashboard:"),
749735
image_block(
750-
file_id=screenshot2.file.id,
751-
src=screenshot2.file.url,
752-
file_name="dashboard.png",
753-
file_size=screenshot2.file.size,
736+
file=screenshot2.file,
754737
caption="Main dashboard view"
755738
),
756739

757740
paragraph("Settings:"),
758741
image_block(
759-
file_id=screenshot3.file.id,
760-
src=screenshot3.file.url,
761-
file_name="settings.png",
762-
file_size=screenshot3.file.size,
742+
file=screenshot3.file,
763743
caption="Configuration panel"
764744
)
765745
]
@@ -919,10 +899,7 @@ content = [
919899

920900
# Logo image
921901
image_block(
922-
file_id=logo.file.id,
923-
src=logo.file.url,
924-
file_name="logo.png",
925-
file_size=logo.file.size,
902+
file=logo.file,
926903
width_percent=50, # Display at 50% width
927904
caption="Company Logo"
928905
),
@@ -937,10 +914,7 @@ content = [
937914
heading(2, "New Features"),
938915
paragraph("We launched a redesigned application:"),
939916
image_block(
940-
file_id=screenshot.file.id,
941-
src=screenshot.file.url,
942-
file_name="app_screen.png",
943-
file_size=screenshot.file.size,
917+
file=screenshot.file,
944918
caption="New dashboard interface"
945919
),
946920

@@ -991,10 +965,7 @@ description_content = [
991965

992966
heading(3, "Screenshot"),
993967
image_block(
994-
file_id=screenshot.file.id,
995-
src=screenshot.file.url,
996-
file_name="error.png",
997-
file_size=screenshot.file.size,
968+
file=screenshot.file,
998969
caption="Error state"
999970
),
1000971

docs-site/docusaurus.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,8 @@ const config: Config = {
206206
},
207207
items: [
208208
{
209-
label: "v0.15.0",
210-
href: "https://pypi.org/project/vaiz-sdk/0.15.0/",
209+
label: "v0.16.0",
210+
href: "https://pypi.org/project/vaiz-sdk/0.16.0/",
211211
position: "left",
212212
},
213213
{

examples/comprehensive_blocks_example.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,9 @@ def main():
134134

135135
paragraph(text("Project screenshot:")),
136136

137+
# New simple API - just pass the file!
137138
image_block(
138-
file_id=image_uploaded.file.id,
139-
src=image_uploaded.file.url,
140-
file_name=image_uploaded.file.name,
141-
file_size=image_uploaded.file.size,
142-
extension=image_uploaded.file.ext,
143-
file_type=image_uploaded.file.mime or "image/png",
144-
dimensions=image_uploaded.file.dimension if image_uploaded.file.dimension else None,
139+
file=image_uploaded.file,
145140
caption="Project Screenshot",
146141
width_percent=80
147142
),

examples/file_and_image_blocks.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,8 @@ def main():
9090

9191
paragraph(text("Here's an embedded image:")),
9292

93-
image_block(
94-
file_id=image_uploaded.file.id,
95-
src=image_uploaded.file.url,
96-
file_name=image_uploaded.file.name,
97-
file_size=image_uploaded.file.size,
98-
extension=image_uploaded.file.ext,
99-
file_type=image_uploaded.file.mime or "image/png",
100-
width_percent=100,
101-
dimensions=image_uploaded.file.dimension if image_uploaded.file.dimension else None
102-
),
93+
# New simple API - just pass the file!
94+
image_block(file=image_uploaded.file),
10395

10496
paragraph(text("Image displayed above", italic=True)),
10597

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "vaiz-sdk"
3-
version = "0.15.0"
3+
version = "0.16.0"
44
description = "Official SDK for interacting with the Vaiz API"
55
authors = [{ name = "Vaiz", email = "mail@vaiz.com" }]
66
license = "MIT"

0 commit comments

Comments
 (0)