Skip to content

Commit 690bd0f

Browse files
committed
Merge pull-request #12
2 parents c9144c8 + ca69462 commit 690bd0f

File tree

11 files changed

+1707
-961
lines changed

11 files changed

+1707
-961
lines changed

.changeset/.last_bumped_modules

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sdk-types

.changeset/change-20260126-10:38:46.yml

Lines changed: 0 additions & 4 deletions
This file was deleted.

Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: generate generate-types generate-http test format format-check typecheck install clean help changeset changeset-status changeset-version changeset-changelog build
1+
.PHONY: generate generate-types generate-http test format format-check typecheck install clean help changeset changeset-status changeset-version changeset-changelog build prepare-release
22

33
help:
44
@echo "Available commands:"
@@ -17,6 +17,7 @@ help:
1717
@echo " make changeset-status - Show pending changesets"
1818
@echo " make changeset-version - Apply version bumps from changesets"
1919
@echo " make changeset-changelog - Generate changelogs from applied changesets"
20+
@echo " make prepare-release - Run version bump, changelog generation, and build for release preparation"
2021

2122
generate: generate-types generate-http
2223

@@ -86,3 +87,6 @@ changeset-version:
8687
changeset-changelog:
8788
@python changesets/manage.py changelog
8889

90+
prepare-release: changeset-version changeset-changelog build
91+
@echo "✅ Release preparation complete"
92+

codegen/constants.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,19 @@
7272
"v1InitUserEmailRecoveryResult",
7373
),
7474
"ACTIVITY_TYPE_INIT_OTP": (
75-
"ACTIVITY_TYPE_INIT_OTP_V2",
76-
"v1InitOtpIntentV2",
77-
"v1InitOtpResult",
75+
"ACTIVITY_TYPE_INIT_OTP_V3",
76+
"v1InitOtpIntentV3",
77+
"v1InitOtpResultV2",
78+
),
79+
"ACTIVITY_TYPE_VERIFY_OTP": (
80+
"ACTIVITY_TYPE_VERIFY_OTP_V2",
81+
"v1VerifyOtpIntentV2",
82+
"v1VerifyOtpResult",
83+
),
84+
"ACTIVITY_TYPE_OTP_LOGIN": (
85+
"ACTIVITY_TYPE_OTP_LOGIN_V2",
86+
"v1OtpLoginIntentV2",
87+
"v1OtpLoginResult",
7888
),
7989
}
8090

codegen/types/generate_types.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ def strip_version_suffix(activity_type: str) -> str:
6363
return re.sub(r"(_V\d+)$", "", activity_type)
6464

6565

66+
def escape_description(desc: str) -> str:
67+
"""Escape a description string for safe inclusion in generated code."""
68+
return desc.replace("\\", "\\\\").replace('"', '\\"')
69+
70+
6671
def is_valid_identifier(name: str) -> bool:
6772
"""Check if a string is a valid Python identifier."""
6873
return name.isidentifier()
@@ -100,15 +105,15 @@ def generate_python_type(name: str, definition: Dict[str, Any]) -> str:
100105
field_params.append("default=None")
101106
field_params.append(f'alias="{original_prop}"')
102107
if desc:
103-
field_params.append(f'description="{desc}"')
108+
field_params.append(f'description="{escape_description(desc)}"')
104109
field_def = f"Field({', '.join(field_params)})"
105110
output += f" {safe_prop}: {prop_type} = {field_def}\n"
106111
elif desc or not is_required:
107112
field_params = []
108113
if not is_required:
109114
field_params.append("default=None")
110115
if desc:
111-
field_params.append(f'description="{desc}"')
116+
field_params.append(f'description="{escape_description(desc)}"')
112117
field_def = f"Field({', '.join(field_params)})"
113118
output += f" {safe_prop}: {prop_type} = {field_def}\n"
114119
else:
@@ -163,15 +168,15 @@ def generate_inline_properties(
163168
field_params.append("default=None")
164169
field_params.append(f'alias="{original_prop}"')
165170
if desc:
166-
field_params.append(f'description="{desc}"')
171+
field_params.append(f'description="{escape_description(desc)}"')
167172
field_def = f"Field({', '.join(field_params)})"
168173
output += f" {safe_prop}: {prop_type} = {field_def}\n"
169174
elif desc or not is_required:
170175
field_params = []
171176
if not is_required:
172177
field_params.append("default=None")
173178
if desc:
174-
field_params.append(f'description="{desc}"')
179+
field_params.append(f'description="{escape_description(desc)}"')
175180
field_def = f"Field({', '.join(field_params)})"
176181
output += f" {safe_prop}: {prop_type} = {field_def}\n"
177182
else:
@@ -382,15 +387,19 @@ def generate_api_types(swagger: Dict[str, Any], prefix: str = "") -> str:
382387
field_params.append("default=None")
383388
field_params.append(f'alias="{original_prop}"')
384389
if desc:
385-
field_params.append(f'description="{desc}"')
390+
field_params.append(
391+
f'description="{escape_description(desc)}"'
392+
)
386393
field_def = f"Field({', '.join(field_params)})"
387394
output += f" {safe_prop}: {prop_type} = {field_def}\n"
388395
elif desc or not is_required:
389396
field_params = []
390397
if not is_required:
391398
field_params.append("default=None")
392399
if desc:
393-
field_params.append(f'description="{desc}"')
400+
field_params.append(
401+
f'description="{escape_description(desc)}"'
402+
)
394403
field_def = f"Field({', '.join(field_params)})"
395404
output += f" {safe_prop}: {prop_type} = {field_def}\n"
396405
else:

0 commit comments

Comments
 (0)