Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support multi namespaces #2795

Closed
Tracked by #2934 ...
msyyc opened this issue Aug 23, 2024 · 1 comment
Closed
Tracked by #2934 ...

Support multi namespaces #2795

msyyc opened this issue Aug 23, 2024 · 1 comment
Assignees

Comments

@msyyc
Copy link
Member

msyyc commented Aug 23, 2024

@msyyc msyyc self-assigned this Aug 23, 2024
@msyyc msyyc changed the title Support subnamespace Support multi namespaces Nov 1, 2024
github-merge-queue bot pushed a commit to microsoft/typespec that referenced this issue Jan 9, 2025
For Azure/autorest.python#2795.

Compared to the previous logic that only supported a single namespace,
this PR introduces support for multiple namespaces. This primarily
requires updates in two key areas:
1. Serialization approach: We need to account for all namespaces and
serialize them individually.
2. Relative imports: The Python SDK utilizes relative imports
internally, and we can no longer make assumptions about the location of
models/operations. To determine the correct relative import, we need to
know the serialized namespace within the `imports` function.
   
Considering these two main changes, here's a detailed summary of the
updates in this PR:
1. Added the emitter flag `enable-typespec-namespace`, which lets users
decide if they want to support native typespec namespace.
2. Introduced `clientNamespace` for
models/operations/enums/namedUnions/clients: the emitter uses
`clientNamespace` to determine the exact location where the target type
should be.
3. Created `get_relative_import_path` for CodeModel: all relative import
paths should be calculated using this function.
4. Added a new property `client_namespace_types` to CodeModel: it counts
and stores all namespace types and information about
`clients/operation_groups/enums/models` in each namespace.
5. Serialization: With the new `client_namespace_types` property in
CodeModel, we can cycle through each namespace and serialize its
clients/models/enums/operations using the same logic.
6. Imports: The old import logic used the `relative_path` and
`operation` kwargs, which were not set from the top caller but from
various functions during the calling process. The signatures were
difficult to understand and maintain. I replaces them with the new
`serialize_namespace` and `serialize_namespace_type` kwargs. Now, any
function that needs to calculate relative imports can use these two
parameters, which are set from the top caller, making them easier to
understand and maintain.
@iscai-msft
Copy link
Contributor

Closing this epic bc we've started this implementation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants