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.