Skip to content

refactor: simplify prop passing to ClientClass by using asyncapi object #1571

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

Open
wants to merge 20 commits into
base: master
Choose a base branch
from

Conversation

Aditya08Vashisht
Copy link
Contributor

@Aditya08Vashisht Aditya08Vashisht commented May 21, 2025

fixes: #1564

done the props changes in client.py.js
and clientclass.js inside the components

please do check this out now
I know it is not mentioned to me please lets check this out!..please!
I have done a lot hardwork for all these small-small changes in these files

Summary by CodeRabbit

  • Refactor
    • Simplified client interface by removing operations-related features and components.
    • Streamlined message sending to focus on a single echo message functionality.

Copy link

changeset-bot bot commented May 21, 2025

⚠️ No Changeset found

Latest commit: 04b1115

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copy link

coderabbitai bot commented May 21, 2025

Walkthrough

The code updates the Python websocket client template by removing the operations prop and related logic from the ClientClass component. It modifies imports to fetch getInfo and getTitle from local files, adjusts the getClientName call to use the info object, and removes the unused operations variable and prop from the component.

Changes

Files Change Summary
packages/templates/clients/websocket/python/template/client.py.js Changed imports of getInfo and getTitle to local files; updated getClientName call to use info; removed unused operations variable; removed operations prop from <ClientClass>.
packages/templates/clients/websocket/python/components/ClientClass.js Removed operations parameter and related filtering; references to sendOperations remain but are invalid; updated function signature accordingly.

Assessment against linked issues

Objective Addressed Explanation
Refactor props for ClientClass to pass the complete asyncapi object and extract in respective components (#1564) The PR removes operations prop but does not pass the complete asyncapi object to ClientClass.

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
Removal of unused operations variable (packages/templates/clients/websocket/python/template/client.py.js) Removing unused variable does not relate to the prop refactoring objective.
Removal of operations parameter and filtering in ClientClass (packages/templates/clients/websocket/python/components/ClientClass.js) This change removes operation-based logic but does not implement passing the full asyncapi object as required.
Change of import sources for getInfo and getTitle to local files (packages/templates/clients/websocket/python/template/client.py.js) Changing import paths is unrelated to the prop refactoring objective.

Possibly related PRs


📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ed8af2f and 276d2dd.

📒 Files selected for processing (2)
  • packages/templates/clients/websocket/python/components/ClientClass.js (1 hunks)
  • packages/templates/clients/websocket/python/template/client.py.js (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/templates/clients/websocket/python/template/client.py.js
⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: Test generator as dependency with Node 18
  • GitHub Check: Test generator as dependency with Node 20
  • GitHub Check: Acceptance tests for generated templates
  • GitHub Check: Test NodeJS PR - windows-latest
  • GitHub Check: Test NodeJS PR - macos-13
  • GitHub Check: Test NodeJS PR - ubuntu-latest
🔇 Additional comments (1)
packages/templates/clients/websocket/python/components/ClientClass.js (1)

13-13: ⚠️ Potential issue

Incomplete refactoring: Function signature doesn't match PR objectives.

The current function signature still uses individual props { clientName, serverUrl, title, queryParams } instead of the intended { asyncapi, params } pattern discussed in past reviews and stated in the PR objectives.

Based on the PR description to "simplify prop passing to ClientClass by using asyncapi object", this should be:

-export function ClientClass({ clientName, serverUrl, title, queryParams, }) {
+export function ClientClass({ asyncapi, params }) {
+  if (!asyncapi) {
+    throw new Error('Missing required "asyncapi" context.');
+  }
+  if (!params || !params.server) {
+    throw new Error('Missing required "server" param.');
+  }
+  
+  const info = asyncapi.info();
+  const clientName = getClientName(info);
+  const server = getServer(asyncapi.servers(), params.server);
+  const serverUrl = getServerUrl(server);
+  const title = info.title();
+  const queryParams = params.queryParams;

Likely an incorrect or invalid review comment.

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

‼️ IMPORTANT
Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.

  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge Base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between d39b8c7 and 8afd069.

📒 Files selected for processing (2)
  • packages/templates/clients/websocket/python/components/ClientClass.js (2 hunks)
  • packages/templates/clients/websocket/python/template/client.py.js (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (2)
packages/templates/clients/websocket/python/template/client.py.js (4)
packages/templates/clients/websocket/python/components/ClientClass.js (3)
  • server (16-16)
  • info (14-14)
  • ClientClass (13-36)
packages/helpers/src/servers.js (1)
  • getServer (34-45)
packages/templates/clients/websocket/python/components/FileHeaderInfo.js (1)
  • FileHeaderInfo (3-41)
packages/templates/clients/websocket/python/components/Requires.js (1)
  • Requires (3-14)
packages/templates/clients/websocket/python/components/ClientClass.js (5)
packages/templates/clients/websocket/python/template/client.py.js (2)
  • info (9-9)
  • server (8-8)
packages/templates/clients/websocket/javascript/template/client.js.js (5)
  • info (9-9)
  • clientName (11-11)
  • server (8-8)
  • serverUrl (12-12)
  • title (10-10)
apps/hooks/src/index.js (1)
  • asyncapi (6-6)
packages/helpers/src/servers.js (2)
  • getServer (34-45)
  • getServerUrl (8-22)
apps/generator/cli.js (1)
  • params (20-20)
🪛 Biome (1.9.4)
packages/templates/clients/websocket/python/components/ClientClass.js

[error] 15-15: Shouldn't redeclare 'clientName'. Consider to delete it or rename it.

'clientName' is defined here:

(lint/suspicious/noRedeclare)


[error] 17-17: Shouldn't redeclare 'serverUrl'. Consider to delete it or rename it.

'serverUrl' is defined here:

(lint/suspicious/noRedeclare)


[error] 18-18: Shouldn't redeclare 'title'. Consider to delete it or rename it.

'title' is defined here:

(lint/suspicious/noRedeclare)

🔇 Additional comments (4)
packages/templates/clients/websocket/python/template/client.py.js (3)

2-2: Simplified imports for helper functions

The import statement has been streamlined to only include the getServer helper function that's needed in this file, removing getClientName and getServerUrl which are now imported in the ClientClass component.


10-12: Removed unnecessary variable declarations

The title, clientName, and serverUrl variables have been removed as they're no longer needed in this file. The responsibility for deriving these values has been delegated to the ClientClass component.


20-20: Refactored prop passing to use asyncapi object

Instead of passing individual props (clientName, serverUrl, title), now passing the entire asyncapi object and params to the ClientClass component. This simplifies the parent component and shifts the data extraction responsibility to the child component.

packages/templates/clients/websocket/python/components/ClientClass.js (1)

2-2: Added required helper function imports

Imported the necessary helper functions (getClientName, getServerUrl, getServer) to derive props internally instead of receiving them from the parent component.

Comment on lines 14 to 18
const info = asyncapi.info();
const clientName = getClientName(info);
const server = getServer(asyncapi.servers(), params.server);
const serverUrl = getServerUrl(server);
const title = info.title();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Ensure asyncapi and params are properly validated

Before using asyncapi and params, consider adding validation to prevent potential runtime errors. The getServer function will throw an error if params.server is undefined.


🏁 Script executed:

#!/bin/bash
# Description: Check how params.server is handled across the codebase

# Search for usage of params.server to see if it's validated before being used
rg "params.server" --type js

Length of output: 556


🏁 Script executed:

#!/bin/bash
# Inspecting the context around params.server usage in ClientClass.js
sed -n '1,200p' packages/templates/clients/websocket/python/components/ClientClass.js

Length of output: 1373


🏁 Script executed:

#!/bin/bash
# Locate the template.json for the Python WebSocket client template
template_file=$(find packages/templates/clients/websocket/python -maxdepth 2 -type f -name 'template.json' | head -n1)
echo "Found template file: $template_file"
if [[ -n "$template_file" ]]; then
  echo "Showing params section around 'server':"
  grep -R -n '"params"' -n "$template_file" -C3
  grep -R -n '"server"' -n "$template_file" -C3
else
  echo "No template.json found in the Python WebSocket client template directory."
fi

Length of output: 344


Update ClientClass to accept and validate asyncapi and params.server

The component currently destructures the wrong props and uses asyncapi/params without ever receiving them, causing potential undefined errors (and getServer will certainly blow up if params.server is missing).

• In packages/templates/clients/websocket/python/components/ClientClass.js, change the function signature to pull in { asyncapi, params } instead of { clientName, serverUrl, title }.
• Add runtime checks for both asyncapi and params.server before using them.

Suggested diff:

-export function ClientClass({ clientName, serverUrl, title }) {
+export function ClientClass({ asyncapi, params }) {
+  if (!asyncapi) {
+    throw new Error('Missing required "asyncapi" context.');
+  }
+  if (!params || !params.server) {
+    throw new Error('Missing required "server" param.');
+  }
   const info = asyncapi.info();
-  const clientName = getClientName(info);
-  const server = getServer(asyncapi.servers(), params.server);
-  const serverUrl = getServerUrl(server);
-  const title = info.title();
+  const clientName = getClientName(info);
+  const server = getServer(asyncapi.servers(), params.server);
+  const serverUrl = getServerUrl(server);
+  const title = info.title();
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const info = asyncapi.info();
const clientName = getClientName(info);
const server = getServer(asyncapi.servers(), params.server);
const serverUrl = getServerUrl(server);
const title = info.title();
export function ClientClass({ asyncapi, params }) {
if (!asyncapi) {
throw new Error('Missing required "asyncapi" context.');
}
if (!params || !params.server) {
throw new Error('Missing required "server" param.');
}
const info = asyncapi.info();
const clientName = getClientName(info);
const server = getServer(asyncapi.servers(), params.server);
const serverUrl = getServerUrl(server);
const title = info.title();
// …rest of implementation…
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 15-15: Shouldn't redeclare 'clientName'. Consider to delete it or rename it.

'clientName' is defined here:

(lint/suspicious/noRedeclare)


[error] 17-17: Shouldn't redeclare 'serverUrl'. Consider to delete it or rename it.

'serverUrl' is defined here:

(lint/suspicious/noRedeclare)


[error] 18-18: Shouldn't redeclare 'title'. Consider to delete it or rename it.

'title' is defined here:

(lint/suspicious/noRedeclare)

🤖 Prompt for AI Agents
In packages/templates/clients/websocket/python/components/ClientClass.js around
lines 14 to 18, the function currently destructures incorrect props and uses
asyncapi and params without receiving them, which can cause runtime errors,
especially in getServer if params.server is undefined. Update the function
signature to accept { asyncapi, params } instead of { clientName, serverUrl,
title }, then add runtime validation to ensure asyncapi and params.server are
defined before using them, throwing or handling errors appropriately to prevent
failures.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
packages/templates/clients/websocket/python/components/ClientClass.js (1)

14-14: Function signature inconsistent with PR objectives.

The function signature still uses the old destructured approach instead of the intended asyncapi object approach mentioned in the PR objectives. This contradicts the goal to "simplify prop passing to ClientClass by using asyncapi object."

This matches the previous review feedback that recommended changing from { clientName, serverUrl, title } to { asyncapi, params } to resolve variable redeclaration issues and align with the intended design.

Likely an incorrect or invalid review comment.

🧹 Nitpick comments (1)
packages/templates/clients/websocket/python/components/ClientClass.js (1)

13-13: Remove extra blank line.

Static analysis reports more than 1 blank line is not allowed.

-

+
🧰 Tools
🪛 GitHub Check: Test NodeJS PR - ubuntu-latest

[failure] 13-13:
More than 1 blank line not allowed

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8afd069 and 3365d83.

📒 Files selected for processing (2)
  • packages/templates/clients/websocket/python/components/ClientClass.js (2 hunks)
  • packages/templates/clients/websocket/python/template/client.py.js (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/templates/clients/websocket/python/template/client.py.js
🧰 Additional context used
🪛 GitHub Check: Test NodeJS PR - ubuntu-latest
packages/templates/clients/websocket/python/components/ClientClass.js

[failure] 2-2:
'getServer' is defined but never used


[failure] 2-2:
'getServerUrl' is defined but never used


[failure] 2-2:
'getClientName' is defined but never used


[failure] 13-13:
More than 1 blank line not allowed

🪛 GitHub Actions: PR testing - if Node project
packages/templates/clients/websocket/python/components/ClientClass.js

[error] 2-2: ESLint: 'getClientName' is defined but never used. (no-unused-vars)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Acceptance tests for generated templates
  • GitHub Check: Test generator as dependency with Node 18
  • GitHub Check: Test generator as dependency with Node 20

@@ -1,4 +1,5 @@
import { Text } from '@asyncapi/generator-react-sdk';
import { getClientName, getServerUrl, getServer } from '@asyncapi/generator-helpers';
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Complete the refactoring to use imported helper functions.

The helper functions are imported but never used, causing ESLint errors. This indicates incomplete implementation of the intended refactoring to use the asyncapi object.

Based on the PR objectives and past review comments, the function signature should be updated to use these helpers:

-export function ClientClass({ clientName, serverUrl, title, queryParams }) {
+export function ClientClass({ asyncapi, params }) {
+  if (!asyncapi) {
+    throw new Error('Missing required "asyncapi" context.');
+  }
+  if (!params || !params.server) {
+    throw new Error('Missing required "server" param.');
+  }
+  
+  const info = asyncapi.info();
+  const clientName = getClientName(info);
+  const server = getServer(asyncapi.servers(), params.server);
+  const serverUrl = getServerUrl(server);
+  const title = info.title();
+  const queryParams = params.queryParams;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import { getClientName, getServerUrl, getServer } from '@asyncapi/generator-helpers';
import { getClientName, getServerUrl, getServer } from '@asyncapi/generator-helpers';
export function ClientClass({ asyncapi, params }) {
if (!asyncapi) {
throw new Error('Missing required "asyncapi" context.');
}
if (!params || !params.server) {
throw new Error('Missing required "server" param.');
}
const info = asyncapi.info();
const clientName = getClientName(info);
const server = getServer(asyncapi.servers(), params.server);
const serverUrl = getServerUrl(server);
const title = info.title();
const queryParams = params.queryParams;
// …rest of the component implementation…
}
🧰 Tools
🪛 GitHub Check: Test NodeJS PR - ubuntu-latest

[failure] 2-2:
'getServer' is defined but never used


[failure] 2-2:
'getServerUrl' is defined but never used


[failure] 2-2:
'getClientName' is defined but never used

🪛 GitHub Actions: PR testing - if Node project

[error] 2-2: ESLint: 'getClientName' is defined but never used. (no-unused-vars)

🤖 Prompt for AI Agents
In packages/templates/clients/websocket/python/components/ClientClass.js at line
2, the imported helper functions getClientName, getServerUrl, and getServer from
'@asyncapi/generator-helpers' are not used, causing ESLint errors. Refactor the
code to replace any direct usage of the asyncapi object with these helper
functions by updating the function signatures and calls accordingly to utilize
getClientName, getServerUrl, and getServer for cleaner and consistent code.

@Aditya08Vashisht
Copy link
Contributor Author

Aditya08Vashisht commented May 25, 2025

@Adi-204 check this out..
I have merged into the master branch and also done the corrections for all these 4 params...

do let me know then we'll inform derberg about this..!

@Adi-204
Copy link
Contributor

Adi-204 commented May 25, 2025

@Aditya08Vashisht man you didn't change anything just look at Files changed tab.

@Aditya08Vashisht
Copy link
Contributor Author

what! wait a min!

@Aditya08Vashisht
Copy link
Contributor Author

Aditya08Vashisht commented May 25, 2025

must be some petty mistake! let me see! @Adi-204

@Aditya08Vashisht
Copy link
Contributor Author

Hey @Adi-204 !! are you there right now

@Aditya08Vashisht
Copy link
Contributor Author

@coderabbitai[bot] as just resolve the conflicts and merge into the master branch

image

i was shocked to see there only 1 file changed and no chnages shown done by me..
what to do with this now!!

even last time reviewer said you have probably not pulled latest master branch version because currently in client.py.js we are passing 4 params here clientName, serverUrl, title and queryParams but your code has only 3.

that you can clearly see in the photo it merge to master branch now!!

what is the reason it is giving me like this!

Copy link

coderabbitai bot commented May 25, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

@Aditya08Vashisht I can see your confusion! Let me examine the current state of the files to understand what happened with your refactoring work.


🏁 Script executed:

#!/bin/bash
# Let's examine the current state of the files mentioned in the PR
echo "=== Examining ClientClass.js ==="
cat "packages/templates/clients/websocket/python/components/ClientClass.js"

echo -e "\n=== Examining client.py.js ==="
cat "packages/templates/clients/websocket/python/template/client.py.js"

Length of output: 2314


I can see exactly what happened! Looking at the files, the main refactoring work is actually missing. Here's the current situation:

What Actually Got Committed

  • Only minor import additions in ClientClass.js
  • Small formatting changes in client.py.js
  • The core refactoring never happened

What Should Have Been Done

The ClientClass still has the old signature:

export function ClientClass({ clientName, serverUrl, title, queryParams }) {

But according to issue #1564, it should be refactored to:

export function ClientClass({ asyncapi, params }) {
  // Extract values internally using helper functions
  const server = getServer(asyncapi.servers(), params.server);
  const info = asyncapi.info();
  const title = info.title();
  const queryParams = getQueryParams(asyncapi.channels());
  const clientName = getClientName(info, params.appendClientSuffix, params.customClientName);
  const serverUrl = getServerUrl(server);
  
  // Rest of component logic...
}

And then client.py.js should be simplified to just pass the asyncapi object:

<ClientClass asyncapi={asyncapi} params={params} />

What Happened to Your Changes?

Your refactoring work likely got lost due to:

  1. Merge conflicts that overwrote your changes
  2. Wrong branch - changes made elsewhere
  3. Uncommitted changes - work done locally but not properly committed

Next Steps

You need to implement the actual refactoring. Would you like me to help you plan the complete code changes needed to properly implement this refactor?

@Aditya08Vashisht
Copy link
Contributor Author

just tell me how can i get my changed and updated files back @coderabbitai[bot]

Copy link

coderabbitai bot commented May 25, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

@Aditya08Vashisht Don't worry! Your changes aren't necessarily lost forever. Let me help you search for them using Git's recovery features.

Based on what we find, I can guide you through the specific recovery steps. Your changes might be:

  1. In your reflog - Git keeps a history of all your actions
  2. In a stash - If you stashed changes before merging
  3. On another branch - If you worked on a different branch
  4. In recent commits - That might not have been merged properly

Once we see the results, I'll help you recover your refactoring work! 🔍


🏁 Script executed:

#!/bin/bash
echo "=== Checking Git reflog for recent activity ==="
git reflog --oneline -10

echo -e "\n=== Checking if there are any stashed changes ==="
git stash list

echo -e "\n=== Checking all local branches ==="
git branch -a

echo -e "\n=== Checking recent commits on current branch ==="
git log --oneline -10

echo -e "\n=== Checking for any uncommitted changes ==="
git status

echo -e "\n=== Checking if there are any recent commits mentioning 'refactor' or 'clientclass' ==="
git log --grep="refactor" --grep="clientclass" --grep="asyncapi" -i --oneline -5

Length of output: 1183


@Aditya08Vashisht I see the issue now! This is a CodeRabbit sandbox environment - it only contains the current PR branch. Your actual development work was done on your local machine, but those changes weren't properly committed and pushed.

What You Need to Do

Go back to your local development environment (your computer where you were coding) and run these commands:

# Check your local repository status
git status

# Check your local reflog to find your lost changes
git reflog --oneline -20

# Check if you have any stashed changes locally
git stash list

# Look for branches with your work
git branch -a

# Check recent commits that might contain your refactoring
git log --grep="refactor" --grep="clientclass" --oneline -10

# Check if you have uncommitted changes in your working directory
git diff
git diff --staged

Likely Scenarios

  1. Your changes are uncommitted - Still in your working directory
  2. Your changes are in a stash - You stashed them before switching branches
  3. Your changes are on a different branch - You worked on a feature branch locally
  4. Your changes are in recent commits - That weren't pushed to this PR branch

Recovery Steps

Once you find your changes locally, you'll need to:

  1. Commit them properly on your PR branch
  2. Push them to the remote repository
  3. Update this PR with your actual refactoring

The current PR only shows minor import changes because your main refactoring work never made it from your local machine to the remote repository. Check your local environment first! 🔍

@Aditya08Vashisht
Copy link
Contributor Author

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain
@Aditya08Vashisht I see the issue now! This is a CodeRabbit sandbox environment - it only contains the current PR branch. Your actual development work was done on your local machine, but those changes weren't properly committed and pushed.

What You Need to Do

Go back to your local development environment (your computer where you were coding) and run these commands:

# Check your local repository status
git status

# Check your local reflog to find your lost changes
git reflog --oneline -20

# Check if you have any stashed changes locally
git stash list

# Look for branches with your work
git branch -a

# Check recent commits that might contain your refactoring
git log --grep="refactor" --grep="clientclass" --oneline -10

# Check if you have uncommitted changes in your working directory
git diff
git diff --staged

Likely Scenarios

  1. Your changes are uncommitted - Still in your working directory
  2. Your changes are in a stash - You stashed them before switching branches
  3. Your changes are on a different branch - You worked on a feature branch locally
  4. Your changes are in recent commits - That weren't pushed to this PR branch

Recovery Steps

Once you find your changes locally, you'll need to:

  1. Commit them properly on your PR branch
  2. Push them to the remote repository
  3. Update this PR with your actual refactoring

The current PR only shows minor import changes because your main refactoring work never made it from your local machine to the remote repository. Check your local environment first! 🔍

okay so i see the files are not changed in my brnach at there i jst don't why

but now i am fixing the things and pushing again!

@Aditya08Vashisht
Copy link
Contributor Author

Aditya08Vashisht commented May 25, 2025

@Adi-204 just give me 12 hrs I'll fix all these petty wrong things from my local codespace that are getting wrong!

@derberg derberg moved this to In Progress in Maintainers work Jun 4, 2025
@Aditya08Vashisht
Copy link
Contributor Author

@Adi-204 hey brother! You can have a lokk at this PR now! That's what i have changed

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
packages/templates/clients/websocket/python/components/ClientClass.js (1)

12-12: ⚠️ Potential issue

Complete the refactoring to use asyncapi object as per PR objectives.

The function signature still uses individual props instead of the intended { asyncapi, params } structure mentioned in the PR objectives. This refactoring was supposed to "simplify prop passing to ClientClass by using asyncapi object" but the current implementation doesn't reflect this change.

Based on the PR objectives and past review comments, apply this diff to complete the refactoring:

-export function ClientClass({ clientName, serverUrl, title, queryParams, }) {
+export function ClientClass({ asyncapi, params }) {
+  if (!asyncapi) {
+    throw new Error('Missing required "asyncapi" context.');
+  }
+  if (!params || !params.server) {
+    throw new Error('Missing required "server" param.');
+  }
+  
+  const info = asyncapi.info();
+  const clientName = getClientName(info);
+  const server = getServer(asyncapi.servers(), params.server);
+  const serverUrl = getServerUrl(server);
+  const title = info.title();
+  const queryParams = params.queryParams;

You'll also need to import the helper functions at the top of the file:

 import { Text } from '@asyncapi/generator-react-sdk';
+import { getClientName, getServer, getServerUrl } from '@asyncapi/generator-helpers';
 import { Constructor } from './Constructor';
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e00cba7 and ed8af2f.

📒 Files selected for processing (2)
  • packages/templates/clients/websocket/python/components/ClientClass.js (2 hunks)
  • packages/templates/clients/websocket/python/template/client.py.js (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/templates/clients/websocket/python/template/client.py.js
⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Test generator as dependency with Node 20
  • GitHub Check: Test generator as dependency with Node 18
🔇 Additional comments (1)
packages/templates/clients/websocket/python/components/ClientClass.js (1)

7-7: Import change looks good.

The addition of SendEchoMessage import aligns with simplifying the component structure.

@Aditya08Vashisht
Copy link
Contributor Author

Aditya08Vashisht commented Jun 4, 2025

Hey @Adi-204 can you suggest why some of the testing errors are coming now as the files are now visible!

Copy link
Contributor

@Adi-204 Adi-204 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am a bit confused, why did you removed all the new code changes recently done in client with old ones.
I would suggest to restore all the changes in the local and then do refactoring of props again.

@@ -4,14 +4,12 @@ import { Connect } from './Connect';
import { RegisterMessageHandler } from './RegisterMessageHandler';
import { RegisterErrorHandler } from './RegisterErrorHandler';
import { HandleMessage } from './HandleMessage';
import { SendOperation } from './SendOperation';
import { Send } from './Send';
import { SendEchoMessage } from './SendEchoMessage';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why did you remove correct imports and added SendEchoMessage?
In latest master branch code we don't have any component such as SendEchoMessage

import { FileHeaderInfo } from '../components/FileHeaderInfo';
import { Requires } from '../components/Requires';
import { ClientClass } from '../components/ClientClass';

export default function ({ asyncapi, params }) {
const server = getServer(asyncapi.servers(), params.server);
const info = getInfo(asyncapi);
const title = getTitle(asyncapi);
const info = asyncapi.info();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why did you remove those newly added helpers - getInfo and getTitle?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually i am working on this issue after quite a bit of time so things were not in my mind totally regarding the issue!
give me 2 days i add all these essential thinhgs again (my exams are on currently on the go)

Copy link

sonarqubecloud bot commented Jun 6, 2025

@Aditya08Vashisht
Copy link
Contributor Author

@coderabbitai[bot] what's your take on this one now

Copy link

coderabbitai bot commented Jun 6, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
echo "=== Current state of ClientClass.js ==="
cat "packages/templates/clients/websocket/python/components/ClientClass.js"

echo -e "\n=== Current state of client.py.js ==="
cat "packages/templates/clients/websocket/python/template/client.py.js"

echo -e "\n=== Checking for any syntax issues ==="
# Check if there are references to undefined variables like sendOperations
grep -n "sendOperations" "packages/templates/clients/websocket/python/components/ClientClass.js" || echo "No sendOperations references found"

Length of output: 2876


@Aditya08Vashisht I can see what's happening now! The changes are visible, but there are some critical issues that need to be addressed:

🚨 Critical Bug Found

Your ClientClass.js has a runtime error - it references sendOperations on lines 26-27, but this variable is not defined anywhere:

<SendOperation sendOperations={sendOperations} clientName={clientName} />
<Send sendOperations={sendOperations} />

This will cause the application to crash since sendOperations doesn't exist.

📋 Assessment Against PR Objectives

❌ Refactoring Incomplete: The main goal from issue #1564 was to:

  • Change ClientClass to accept { asyncapi, params }
  • Let ClientClass extract values internally

Current State:

  • ClientClass still uses: { clientName, serverUrl, title, queryParams }
  • client.py.js still passes individual props instead of the asyncapi object

🔧 What Needs to Be Fixed

  1. Fix the immediate bug:
// In ClientClass.js - you need to add back operations logic or remove sendOperations references
  1. Complete the intended refactor:
// ClientClass should be:
export function ClientClass({ asyncapi, params }) {
  // Extract values here using helper functions
  const server = getServer(asyncapi.servers(), params.server);
  const info = asyncapi.info();
  // ... rest of extractions
}

// client.py.js should just pass:
<ClientClass asyncapi={asyncapi} params={params} />

The testing errors you mentioned are likely due to the undefined sendOperations variable. Would you like me to help you plan the complete refactoring to fix both the bug and achieve the original objectives?

@Aditya08Vashisht
Copy link
Contributor Author

Aditya08Vashisht commented Jun 6, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain
@Aditya08Vashisht I can see what's happening now! The changes are visible, but there are some critical issues that need to be addressed:

🚨 Critical Bug Found

Your ClientClass.js has a runtime error - it references sendOperations on lines 26-27, but this variable is not defined anywhere:

<SendOperation sendOperations={sendOperations} clientName={clientName} />
<Send sendOperations={sendOperations} />

This will cause the application to crash since sendOperations doesn't exist.

📋 Assessment Against PR Objectives

❌ Refactoring Incomplete: The main goal from issue #1564 was to:

  • Change ClientClass to accept { asyncapi, params }
  • Let ClientClass extract values internally

Current State:

  • ClientClass still uses: { clientName, serverUrl, title, queryParams }
  • client.py.js still passes individual props instead of the asyncapi object

🔧 What Needs to Be Fixed

  1. Fix the immediate bug:
// In ClientClass.js - you need to add back operations logic or remove sendOperations references
  1. Complete the intended refactor:
// ClientClass should be:
export function ClientClass({ asyncapi, params }) {
  // Extract values here using helper functions
  const server = getServer(asyncapi.servers(), params.server);
  const info = asyncapi.info();
  // ... rest of extractions
}

// client.py.js should just pass:
<ClientClass asyncapi={asyncapi} params={params} />

The testing errors you mentioned are likely due to the undefined sendOperations variable. Would you like me to help you plan the complete refactoring to fix both the bug and achieve the original objectives?

yes please go ahead! @coderabbitai[bot]

Copy link

coderabbitai bot commented Jun 6, 2025

Tip

For best results, initiate chat on the files or code changes.

A summary of the edits CodeRabbit can apply:

Will refactor ClientClass.js to accept asyncapi and params, import and utilize helper functions to compute clientName, serverUrl, title, queryParams, and sendOperations, fix the undefined sendOperations reference, and update the client.py.js template to forward only asyncapi and params.

We will refactor client.py.js and python/components/ClientClass.js so ClientClass accepts asyncapi and params, relocates all helper logic inside it, and removes the undefined sendOperations usage per issue #1564.

A plan of each step that CodeRabbit will take in order to execute the edits for each file (with inline rough draft snippets):

✏️ packages/templates/clients/websocket/python/components/ClientClass.js

At the top of ClientClass.js, add an import for the helper functions. For example, directly after the existing imports insert:
js import { getServer, getQueryParams, getClientName, getServerUrl, getSendOperations } from '../helpers';
Adjust the path if the helper file lives elsewhere.


Change the component signature on line 13 from:
js export function ClientClass({ clientName, serverUrl, title, queryParams, }) {
to:
js export function ClientClass({ asyncapi, params }) {


Immediately inside the function body, insert extraction of all values from asyncapi and params:
js const server = getServer(asyncapi.servers(), params.server); const info = asyncapi.info(); const title = info.title(); const queryParams = getQueryParams(asyncapi.channels()); const clientName = getClientName(info, params.appendClientSuffix, params.customClientName); const serverUrl = getServerUrl(server); const sendOperations = getSendOperations(asyncapi.channels());


Remove the old destructured props list; ensure the JSX uses the newly declared local constants. For instance, confirm lines 17–24 now reference clientName, serverUrl, title, and queryParams directly.


Verify that the previous runtime error is resolved by confirming lines 26–27 now reference the local sendOperations constant:
js <SendOperation sendOperations={sendOperations} clientName={clientName} /> <Send sendOperations={sendOperations} />


Open packages/templates/clients/websocket/python/template/client.py.js. Change the function header to:
js export default function clientTemplate({ asyncapi, params }) {
and replace the ClientClass invocation block:
js <ClientClass clientName={clientName} serverUrl={serverUrl} title={title} queryParams={queryParams} />
with:
js <ClientClass asyncapi={asyncapi} params={params} />


Run the generator’s test suite and sample generation commands to ensure:
1. ClientClass compiles and emits the correct Python client code.
2. No undefined variable errors occur for sendOperations.
3. The template forwards asyncapi and params as intended.
Fix any import paths or minor syntax issues surfaced during testing.

✏️ packages/templates/clients/websocket/python/template/client.py.js

In client.py.js, delete the helper imports on lines 1–6 so only these two lines remain at the top:

  ```
  import { File } from '@asyncapi/generator-react-sdk';
  import { ClientClass } from '../components/ClientClass';
  ```

Replace lines 9–27 (the entire default export function body) with the simplified pass-through:

  ```
  export default function ({ asyncapi, params }) {
    return (
      <File name={params.clientFileName}>
        <ClientClass asyncapi={asyncapi} params={params} />
      </File>
    );
  }
  ```

Open packages/templates/clients/websocket/python/components/ClientClass.js. Change the export signature on line 13 from:

  ```
  export function ClientClass({ clientName, serverUrl, title, queryParams, }) {
  ```

  to:

  ```
  export function ClientClass({ asyncapi, params }) {
  ```

At the top of ClientClass.js, immediately after React imports, insert the helper imports:

  ```
  import { getServer, getServerUrl, getQueryParams, getClientName } from '@asyncapi/generator-helpers';
  import { getInfo } from '../template/getInfo';
  import { getTitle } from '../template/getTitle';
  ```

Inside the ClientClass function body, before the return statement, add extraction logic:

  ```
  const server = getServer(asyncapi.servers(), params.server);
  const info = getInfo(asyncapi);
  const title = getTitle(asyncapi);
  const queryParams = getQueryParams(asyncapi.channels());
  const clientName = getClientName(info, params.appendClientSuffix, params.customClientName);
  const serverUrl = getServerUrl(server);
  ```

In the JSX return of ClientClass.js, replace all references to props.clientName, props.serverUrl, props.title, and props.queryParams with the corresponding local variables clientName, serverUrl, title, and queryParams.


Remove the two lines rendering <SendOperation sendOperations={sendOperations} …/> and <Send sendOperations={sendOperations}/> since sendOperations is undefined and operations support has been removed.


Save both files. Run the generator preview or test suite to verify there are no compilation errors, that ClientClass now correctly consumes asyncapi and params, and that the undefined sendOperations issue is resolved.

  • ✅ Create PR with these edits
  • 📌 Create commit in current branch
  • 📋 Get copyable edits

@Aditya08Vashisht
Copy link
Contributor Author

Aditya08Vashisht commented Jun 6, 2025

@coderabbitai[bot] for taking further actions i think i have missed some of the previous things while making the changes this time..
Hance give me the steps to fix it!

Copy link

coderabbitai bot commented Jun 6, 2025

Tip

For best results, initiate chat on the files or code changes.

A summary of the edits CodeRabbit can apply:

Will refactor ClientClass.js to accept asyncapi and params, import helper functions, extract values, and remove operations-related features

We will refactor packages/templates/clients/websocket/python/template/client.py.js to remove unused helper imports and simplify the default export so it only forwards asyncapi and params to ClientClass.

A plan of each step that CodeRabbit will take in order to execute the edits for each file (with inline rough draft snippets):

✏️ packages/templates/clients/websocket/python/components/ClientClass.js

At the top of the file, after the existing Text import, add an import for the helper functions:

import { getServer, getServerUrl, getQueryParams, getClientName } from '../helpers';

This will allow extracting values from the asyncapi object and params.


Remove the imports related to operations by deleting these lines:

import { SendOperation } from './SendOperation';
import { Send } from './Send';
import { RegisterOutgoingProcessor } from './RegisterOutgoingProcessor';

This removes operations support as it's being refactored.


Change the component signature on line 13 from:

export function ClientClass({ clientName, serverUrl, title, queryParams, }) {

to:

export function ClientClass({ asyncapi, params }) {

so that ClientClass now accepts the asyncapi object and params directly.


Immediately inside the function body, before the return statement, insert extraction of all values from asyncapi and params:

const server = getServer(asyncapi.servers(), params.server);
const info = asyncapi.info();
const title = info.title();
const queryParams = getQueryParams(asyncapi.channels());
const clientName = getClientName(info, params.appendClientSuffix, params.customClientName);
const serverUrl = getServerUrl(server);

This prepares all necessary values locally.


In the JSX returned by the component, remove the <RegisterOutgoingProcessor />, <SendOperation .../>, and <Send .../> lines:

<RegisterOutgoingProcessor />
<SendOperation sendOperations={sendOperations} clientName={clientName} />
<Send sendOperations={sendOperations} />

This removes undefined references and operations-related UI.


Review the updated JSX to ensure it now reads:

<Text>
  <Text newLines={2}>{`class ${clientName}:`}</Text>
  <Constructor serverUrl={serverUrl} query={queryParams} />
  <Connect title={title} />
  <RegisterMessageHandler />
  <RegisterErrorHandler />
  <HandleMessage />
  <HandleError />
  <CloseConnection />
</Text>

Confirm no broken imports or undefined variables remain.


Save the file and run the generator’s test suite to verify there are no compilation errors and that ClientClass now correctly consumes asyncapi and params without operations bugs.

✏️ packages/templates/clients/websocket/python/template/client.py.js

At the top of the file, remove all imports except for File. After the existing import of File on line 1, add a single import for ClientClass:

import { ClientClass } from '../components/ClientClass';

Replace the entire body of the default export (from the function declaration on line 9 through the closing brace on line 27) with a simplified pass-through implementation:

export default function({ asyncapi, params }) {
  return (
    <File name={params.clientFileName}>
      <ClientClass asyncapi={asyncapi} params={params} />
    </File>
  );
}

Save the file and run your AsyncAPI generator’s test suite or preview command to confirm that the template compiles successfully, that the client file is generated with only asyncapi and params, and that there are no undefined variables or errors.

  • ✅ Create PR with these edits
  • 📌 Create commit in current branch
  • 📋 Get copyable edits

Copy link

coderabbitai bot commented Jun 6, 2025

Tip

For best results, initiate chat on the files or code changes.

A summary of the edits CodeRabbit can apply:

Will refactor packages/templates/clients/websocket/python/components/ClientClass.js to accept asyncapi and params, import and use helper functions internally, extract values, and remove undefined sendOperations references.

We will refactor the Python client template (client.py.js) and the corresponding ClientClass component to accept only asyncapi and params, remove unused helper code and extraction logic from the template, and update ClientClass.js to extract values internally and fix the undefined sendOperations reference.

A plan of each step that CodeRabbit will take in order to execute the edits for each file (with inline rough draft snippets):

✏️ packages/templates/clients/websocket/python/components/ClientClass.js

Delete the imports for SendOperation and Send. Remove lines:
js import { SendOperation } from './SendOperation'; import { Send } from './Send';


After the existing imports (e.g., after import { HandleError } from './HandleError';), insert a new import for the helper functions:
js import { getServer, getServerUrl, getQueryParams, getClientName } from '@asyncapi/generator-helpers';


Change the component signature on line 13 from:
js export function ClientClass({ clientName, serverUrl, title, queryParams, }) {
to:
js export function ClientClass({ asyncapi, params }) {


Immediately inside the function body (directly after the signature and before the JSX return), insert extraction logic to compute all values from the asyncapi and params objects:
js const server = getServer(asyncapi.servers(), params.server); const info = asyncapi.info(); const title = info.title(); const queryParams = getQueryParams(asyncapi.channels()); const clientName = getClientName(info, params.appendClientSuffix, params.customClientName); const serverUrl = getServerUrl(server);


Remove the two JSX lines that reference the undefined sendOperations variable. Delete lines 26 and 27:
jsx <SendOperation sendOperations={sendOperations} clientName={clientName} /> <Send sendOperations={sendOperations} />


Verify that all JSX tags now reference the new local constants. For example:
jsx <Constructor serverUrl={serverUrl} query={queryParams} /> <Connect title={title} />
Ensure that clientName, serverUrl, title, and queryParams are used consistently throughout.


Save the file and run your template generator’s tests or preview command. Confirm that there are no undefined variable errors and that ClientClass now correctly consumes asyncapi and params.

✏️ packages/templates/clients/websocket/python/template/client.py.js

At the top of client.py.js, remove all helper imports except File and ClientClass. Delete lines 2–6 so that only the following imports remain:

  ```js
  import { File } from '@asyncapi/generator-react-sdk';
  import { ClientClass } from '../components/ClientClass';
  ```

Inside the default export function, delete the extraction logic on lines 10–15 (all const declarations for server, info, title, queryParams, clientName, serverUrl). Also remove the and JSX on lines 19–23, as the template will now delegate all extraction to ClientClass.


Replace the entire return block (lines 17–25) with a simplified pass-through that only forwards asyncapi and params. Update the function body to:

  ```js
  export default function ({ asyncapi, params }) {
    return (
      <File name={params.clientFileName}>
        <ClientClass asyncapi={asyncapi} params={params} />
      </File>
    );
  }
  ```

Save and close client.py.js. Then open packages/templates/clients/websocket/python/components/ClientClass.js for refactoring.


In ClientClass.js, update the component signature to accept only asyncapi and params. Find and replace:

  ```js
  export function ClientClass({ clientName, serverUrl, title, queryParams }) {
  ```
  
  with:

  ```js
  export function ClientClass({ asyncapi, params }) {
  ```

Immediately after the React import at the top of ClientClass.js, insert imports for all helper functions needed to extract values from asyncapi:

  ```js
  import { getServer, getServerUrl, getQueryParams, getClientName, getSendOperations } from '@asyncapi/generator-helpers';
  ```

Within the ClientClass function body and before the return statement, insert the extraction logic:

  ```js
  const server = getServer(asyncapi.servers(), params.server);
  const info = asyncapi.info();
  const title = info.title();
  const queryParams = getQueryParams(asyncapi.channels());
  const clientName = getClientName(info, params.appendClientSuffix, params.customClientName);
  const serverUrl = getServerUrl(server);
  const sendOperations = getSendOperations(asyncapi.channels());
  ```

Remove any previous destructuring of clientName, serverUrl, title, and queryParams from the function signature and body. Remove references to or if they exist in ClientClass.js.


Ensure all JSX references inside the return block use the newly declared local variables. In particular, confirm that the operations rendering now uses the defined sendOperations variable:

  ```jsx
  <SendOperation sendOperations={sendOperations} clientName={clientName} />
  <Send sendOperations={sendOperations} />
  ```

Save ClientClass.js. Run the AsyncAPI generator’s preview or test command to confirm there are no undefined variables, that ClientClass compiles successfully, and that it receives asyncapi and params correctly. Adjust any import paths or syntax issues surfaced during testing.

  • ✅ Create PR with these edits
  • 📌 Create commit in current branch
  • 📋 Get copyable edits

@Aditya08Vashisht
Copy link
Contributor Author

Aditya08Vashisht commented Jun 6, 2025

Hey @Adi-204 sorry to disturb you in this way!

I have changed most of the things like that sendEcho and others .. but just currently my exams are going on! and the issue is that i have forgot to change some essential things (and currently am blankout with this issue 😓)can you comment down things on that code(like add this or remove this) and help with that! please!
It will be very helpful from your side!

also i feel there not more big changes other than these essential changes only!

@Adi-204
Copy link
Contributor

Adi-204 commented Jun 7, 2025

@Aditya08Vashisht I would suggest to focus on one thing. The issue this PR is solving is just refactoring so take your time and maybe solve when you are free.

@Aditya08Vashisht
Copy link
Contributor Author

@Aditya08Vashisht I would suggest to focus on one thing. The issue this PR is solving is just refactoring so take your time and maybe solve when you are free.

yeah sure thing!

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

Successfully merging this pull request may close these issues.

Refactoring of props for ClientClass in python template
2 participants