diff --git a/fern/products/openapi-def/pages/extensions/parameter-names.mdx b/fern/products/openapi-def/pages/extensions/parameter-names.mdx
index ff60bf613..b4eafcb7f 100644
--- a/fern/products/openapi-def/pages/extensions/parameter-names.mdx
+++ b/fern/products/openapi-def/pages/extensions/parameter-names.mdx
@@ -1,16 +1,19 @@
---
title: Customize parameter names
-description: Use `x-fern-parameter-name` to customize query parameter, header and path parameter naming.
+description: Use extensions to customize parameter naming and behavior in your generated SDKs.
---
- The `x-fern-parameter-name` extension allows you to customize the variable names of parameters in your generated SDKs.
+ Extensions allow you to customize how parameters are handled in your generated SDKs. This includes renaming parameters and injecting values via constructors.
-## Headers
+## Parameter naming with x-fern-parameter-name
-In the example below, the header `X-API-Version` is renamed to `version` in the
-generated SDK. The rename makes the SDK more human readable.
+Use `x-fern-parameter-name` to customize variable names for parameters in your generated SDKs.
+
+### Headers
+
+Rename header parameters to make them more idiomatic in your SDK:
```yaml {8}
paths:
@@ -26,10 +29,9 @@ paths:
required: true
```
-## Query parameters
+### Query parameters
-In the example below, the query parameter `q` is renamed to `search_terms` in the
-generated SDK. The rename makes the parameter more approachable for end users.
+Make query parameter names more descriptive and user-friendly:
```yaml {8}
paths:
@@ -45,10 +47,9 @@ paths:
required: false
```
-## Path parameters
+### Path parameters
-In the example below, the path parameter `userId` is renamed to `id` in the
-generated SDK. The rename makes the SDK less verbose.
+Simplify verbose path parameter names:
```yaml {8}
paths:
@@ -63,3 +64,40 @@ paths:
type: string
required: false
```
+
+## Constructor Variables with x-fern-sdk-variables
+
+Use `x-fern-sdk-variables` to define variables that can be set once in the client constructor and automatically injected into requests.
+
+```yaml
+components:
+ x-fern-sdk-variables:
+ project_id:
+ type: string
+ description: "The ID of the project"
+ pattern: "^proj_[a-zA-Z0-9]+$"
+```
+
+This variable can then be referenced in path parameters:
+
+```yaml
+paths:
+ "/v1/connect/{project_id}/accounts":
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: "^proj_[a-zA-Z0-9]+$"
+ x-fern-sdk-variable: project_id
+```
+
+The generated SDK will now:
+1. Accept the `project_id` in the client constructor
+2. Automatically inject it into requests that require it
+3. Free users from having to pass it on every request
+
+
+ SDK variables are currently supported in TypeScript and Python SDKs (version 4.24.0+).
+
\ No newline at end of file
diff --git a/fern/products/sdks/overview/python/configuration.mdx b/fern/products/sdks/overview/python/configuration.mdx
index 1c0eb6af7..5e80e7da4 100644
--- a/fern/products/sdks/overview/python/configuration.mdx
+++ b/fern/products/sdks/overview/python/configuration.mdx
@@ -21,6 +21,7 @@ groups:
## SDK Configuration Options
+ Additional objects to export from the package's __init__.py file.
@@ -28,6 +29,7 @@ groups:
+ When true, types will not be exported from the package's __init__.py file.
@@ -40,12 +42,15 @@ groups:
+ Additional development dependencies to include in the generated package.
+ Optional extras/features to include in the generated package setup.
+ When true, generates a flatter directory structure without nested subdirectories.
@@ -53,14 +58,15 @@ groups:
- Feature flag that improves imports in the Python SDK by removing nested `resources` directory
+ Feature flag that improves imports in the Python SDK by removing nested `resources` directory.
- Whether or not to include legacy wire tests in the generated SDK
+ Whether or not to include legacy wire tests in the generated SDK.
+ When enabled, includes additional utility functions for working with union types.
@@ -72,26 +78,18 @@ groups:
-
-Specifies the Python package name that users will import your generated client
-from.
+ Specifies the Python package name that users will import your generated client from.
-For example, setting `package_name: "my_custom_package"` enables users to use
-`my_custom_package import Client` to import your client:
+ For example, setting `package_name: "my_custom_package"` enables users to use `from my_custom_package import Client` to import your client:
-```yaml {7-10}
-default-group: local
-groups:
- local:
- generators:
- - name: fernapi/fern-python
- version: 0.7.1
- config:
- package_name: "my_custom_package"
-```
+ ```yaml
+ config:
+ package_name: "my_custom_package"
+ ```
+ Configuration options for Pydantic model generation.
@@ -112,12 +110,10 @@ groups:
# Visit every case in the union
shape = get_shape()
shape.visit(
- circle: lambda circle: do_something_with_circle(circle),
- triangle: lambda triangle: do_something_with_triangle(triangle),
+ circle=lambda circle: do_something_with_circle(circle),
+ triangle=lambda triangle: do_something_with_triangle(triangle),
)
```
-
- When enabled, the python generator will not run Black formatting in the generated code. Black is slow so this can potentially speed up code generation quite a bit.
@@ -140,6 +136,7 @@ groups:
+ Custom pyproject.toml content to include in the generated package.
@@ -147,6 +144,7 @@ groups:
+ When true, skips code formatting of the generated SDK.
@@ -154,6 +152,7 @@ groups:
+ When true, includes the API name in the generated package name.
@@ -168,17 +167,54 @@ groups:
Whether or not to generate TypedDicts instead of Pydantic Models for file upload request objects. Note that this flag was only introduced due to an oversight in the `use_typeddict_requests` flag implementation; it should be removed in the future.
+### Extension Headers
+
+The Python SDK generator supports setting extension headers via the `x-fern-sdk-variables` OpenAPI extension. This allows you to define variables that will be passed to the SDK constructor and injected into API paths.
+
+For example, to have a `project_id` variable injected into paths:
+
+```yaml
+# OpenAPI spec
+x-fern-sdk-variables:
+ project_id:
+ type: string
+ description: The ID of the project
+ pattern: "^proj_[a-zA-Z0-9]+$"
+
+paths:
+ /v1/connect/{project_id}/accounts:
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: "^proj_[a-zA-Z0-9]+$"
+ x-fern-sdk-variable: project_id
+```
+
+The variable will be available in the SDK client constructor:
+
+```python
+from my_sdk import Client
+
+client = Client(
+ project_id="proj_123" # Will be injected into paths
+)
+```
+
### client
- Configuration for the generated client class and file structure.
- ```yaml
- config:
- client:
- filename: "my_client.py"
- class_name: "MyClient"
- exported_filename: "my_client.py"
- exported_class_name: "MyClient"
- ```
+Configuration for the generated client class and file structure.
+
+```yaml
+config:
+ client:
+ filename: "my_client.py"
+ class_name: "MyClient"
+ exported_filename: "my_client.py"
+ exported_class_name: "MyClient"
+```
The filename for the generated client file.