Skip to content

Conversation

@brettchaldecott
Copy link
Contributor

@brettchaldecott brettchaldecott commented Aug 4, 2025

Explain your changes

  • Remove outdated API paths and client components
  • Introduce new management models for better handling of entitlements and feature flags
  • Improve directory structure for easier maintenance and scalability
  • Add placeholder models for upcoming features

Checklist

🛟 If you need help, consider asking for advice over in the Kinde community.

- Remove outdated API paths and client components
- Introduce new management models for better handling of entitlements and feature flags
- Improve directory structure for easier maintenance and scalability
- Add placeholder models for upcoming features
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 4, 2025

Walkthrough

This update removes a large number of auto-generated files from the kinde_sdk package, including all OpenAPI-generated API client classes, endpoint aggregators, configuration, and exception handling modules. It introduces a new custom_exceptions.py module under kinde_sdk/management for SDK-specific exceptions. Documentation and import statements are updated to reflect the new structure and import paths.

Changes

Cohort / File(s) Change Summary
Docs and Examples Update
README.md, README_management_client.md, kinde_fastapi/examples/example_app.py
Updated import paths for KindeApiClient and OAuth in documentation and examples to reference new module locations.
SDK Generation Script
generate_management_sdk.py
Enhanced import-fixing logic, added functions for cleaning up old generated files and preserving/restoring custom files, and updated main flow for improved SDK generation robustness.
Custom Exception Classes
kinde_sdk/management/custom_exceptions.py
Added new SDK-specific exception base class and four specialized exceptions for configuration, login, token, and retrieval errors.
Management Module Imports
kinde_sdk/management/__init__.py
Updated imported API/model classes, replaced GetPortalLink with PortalLink, and added several new model imports; removed redundant or outdated imports.
Removal: OpenAPI Core Client & Config
kinde_sdk/api_client.py, kinde_sdk/configuration.py, kinde_sdk/exceptions.py
Entire removal of the OpenAPI-generated API client, configuration, and exception modules, including all classes, utilities, and error handling logic.
Removal: API Endpoint Aggregators and Mappings
kinde_sdk/apis/__init__.py, kinde_sdk/apis/path_to_api.py, kinde_sdk/apis/tag_to_api.py, kinde_sdk/apis/tags/__init__.py, kinde_sdk/apis/tags/*, kinde_sdk/apis/paths/__init__.py, kinde_sdk/apis/paths/*
Deleted all files defining endpoint aggregators, tag/path-to-API mappings, and composite API classes for all endpoints; removed related enums and static mappings.

Sequence Diagram(s)

Not applicable due to the nature of the changes (large-scale deletions and import path updates).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~30–45 minutes

  • The review involves verifying the removal of a large number of auto-generated files, ensuring new custom exceptions are correctly implemented, and confirming that all documentation and import paths are consistent with the new structure. The changes are high in volume but mostly mechanical, with limited new logic.

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 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 15b87f8 and 4017aa4.

📒 Files selected for processing (1)
  • kinde_fastapi/examples/example_app.py (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • kinde_fastapi/examples/example_app.py
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/kinde-client-api-rework

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:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • 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.
  • 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.

Support

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

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 generate unit tests to generate unit tests for 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.

@codecov
Copy link

codecov bot commented Aug 4, 2025

Codecov Report

❌ Patch coverage is 0% with 10 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
kinde_sdk/management/custom_exceptions.py 0.00% 10 Missing ⚠️

📢 Thoughts on this report? Let us know!

@brettchaldecott
Copy link
Contributor Author

@coderabbitai configuration

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 4, 2025

CodeRabbit configuration
language: en-US
tone_instructions: ''
early_access: false
enable_free_tier: true
reviews:
  profile: chill
  request_changes_workflow: true
  high_level_summary: false
  high_level_summary_placeholder: '@coderabbitai summary'
  high_level_summary_in_walkthrough: false
  auto_title_placeholder: '@coderabbitai'
  auto_title_instructions: ''
  review_status: true
  commit_status: true
  fail_commit_status: false
  collapse_walkthrough: false
  changed_files_summary: true
  sequence_diagrams: true
  estimate_code_review_effort: true
  assess_linked_issues: true
  related_issues: true
  related_prs: true
  suggested_labels: true
  auto_apply_labels: false
  suggested_reviewers: true
  auto_assign_reviewers: false
  poem: false
  labeling_instructions: []
  path_filters:
    - '!dist/**'
    - '!**/*.app'
    - '!**/*.bin'
    - '!**/*.bz2'
    - '!**/*.class'
    - '!**/*.db'
    - '!**/*.csv'
    - '!**/*.tsv'
    - '!**/*.dat'
    - '!**/*.dll'
    - '!**/*.dylib'
    - '!**/*.egg'
    - '!**/*.glif'
    - '!**/*.gz'
    - '!**/*.xz'
    - '!**/*.zip'
    - '!**/*.7z'
    - '!**/*.rar'
    - '!**/*.zst'
    - '!**/*.ico'
    - '!**/*.jar'
    - '!**/*.tar'
    - '!**/*.war'
    - '!**/*.lo'
    - '!**/*.log'
    - '!**/*.mp3'
    - '!**/*.wav'
    - '!**/*.wma'
    - '!**/*.mp4'
    - '!**/*.avi'
    - '!**/*.mkv'
    - '!**/*.wmv'
    - '!**/*.m4a'
    - '!**/*.m4v'
    - '!**/*.3gp'
    - '!**/*.3g2'
    - '!**/*.rm'
    - '!**/*.mov'
    - '!**/*.flv'
    - '!**/*.iso'
    - '!**/*.swf'
    - '!**/*.flac'
    - '!**/*.nar'
    - '!**/*.o'
    - '!**/*.ogg'
    - '!**/*.otf'
    - '!**/*.p'
    - '!**/*.pdf'
    - '!**/*.doc'
    - '!**/*.docx'
    - '!**/*.xls'
    - '!**/*.xlsx'
    - '!**/*.map'
    - '!**/*.out'
    - '!**/*.ppt'
    - '!**/*.pptx'
    - '!**/*.pkl'
    - '!**/*.pickle'
    - '!**/*.pyc'
    - '!**/*.pyd'
    - '!**/*.pyo'
    - '!**/*.pub'
    - '!**/*.pem'
    - '!**/*.rkt'
    - '!**/*.so'
    - '!**/*.ss'
    - '!**/*.eot'
    - '!**/*.exe'
    - '!**/*.pb.go'
    - '!**/*.pb.gw.go'
    - '!**/*.lock'
    - '!**/*.ttf'
    - '!**/*.yaml'
    - '!**/*.yml'
    - '!**/*.xml'
    - '!**/*.cfg'
    - '!**/*.toml'
    - '!**/*.ini'
    - '!**/*.mod'
    - '!**/*.sum'
    - '!**/*.work'
    - '!**/*.json'
    - '!**/*.mmd'
    - '!**/*.svg'
    - '!**/*.jpeg'
    - '!**/*.jpg'
    - '!**/*.png'
    - '!**/*.gif'
    - '!**/*.bmp'
    - '!**/*.tiff'
    - '!**/*.webm'
    - '!**/*.woff'
    - '!**/*.woff2'
    - '!**/*.dot'
    - '!**/*.md5sum'
    - '!**/*.wasm'
    - '!**/*.snap'
    - '!**/*.parquet'
    - '!**/gen/**'
    - '!**/_gen/**'
    - '!**/generated/**'
    - '!**/@generated/**'
    - '!**/vendor/**'
    - '!**/*.min.js'
    - '!**/*.min.js.map'
    - '!**/*.min.js.css'
    - '!**/*.tfstate'
    - '!**/*.tfstate.backup'
  path_instructions: []
  abort_on_close: true
  disable_cache: false
  auto_review:
    enabled: true
    auto_incremental_review: true
    ignore_title_keywords: []
    labels: []
    drafts: false
    base_branches: []
  finishing_touches:
    docstrings:
      enabled: true
    unit_tests:
      enabled: true
  pre_merge_checks:
    docstrings:
      mode: warning
      threshold: 80
    title:
      mode: warning
      requirements: ''
    description:
      mode: warning
    issue_assessment:
      mode: warning
  tools:
    ast-grep:
      rule_dirs: []
      util_dirs: []
      essential_rules: true
      packages: []
    shellcheck:
      enabled: true
    ruff:
      enabled: true
    markdownlint:
      enabled: true
    github-checks:
      enabled: true
      timeout_ms: 90000
    languagetool:
      enabled: true
      enabled_rules: []
      disabled_rules: []
      enabled_categories: []
      disabled_categories: []
      enabled_only: false
      level: default
    biome:
      enabled: true
    hadolint:
      enabled: true
    swiftlint:
      enabled: true
    phpstan:
      enabled: true
      level: default
    phpmd:
      enabled: true
    phpcs:
      enabled: true
    golangci-lint:
      enabled: true
    yamllint:
      enabled: true
    gitleaks:
      enabled: true
    checkov:
      enabled: true
    detekt:
      enabled: true
    eslint:
      enabled: true
    flake8:
      enabled: true
    rubocop:
      enabled: true
    buf:
      enabled: true
    regal:
      enabled: true
    actionlint:
      enabled: true
    pmd:
      enabled: true
    cppcheck:
      enabled: true
    semgrep:
      enabled: true
    circleci:
      enabled: true
    clippy:
      enabled: true
    sqlfluff:
      enabled: true
    prismaLint:
      enabled: true
    pylint:
      enabled: true
    oxc:
      enabled: true
    shopifyThemeCheck:
      enabled: true
    luacheck:
      enabled: true
    brakeman:
      enabled: true
    dotenvLint:
      enabled: true
    htmlhint:
      enabled: true
    checkmake:
      enabled: true
chat:
  auto_reply: true
  integrations:
    jira:
      usage: auto
    linear:
      usage: auto
knowledge_base:
  opt_out: false
  web_search:
    enabled: true
  code_guidelines:
    enabled: true
    filePatterns: []
  learnings:
    scope: auto
  issues:
    scope: auto
  jira:
    usage: auto
    project_keys: []
  linear:
    usage: auto
    team_keys: []
  pull_requests:
    scope: auto
code_generation:
  docstrings:
    language: en-US
    path_instructions: []
  unit_tests:
    path_instructions: []

- Add .coderabbit.yaml configuration file for automated code reviews
- Configure review settings and preferences for the project
@brettchaldecott
Copy link
Contributor Author

@CodeRabbit review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 4, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

- Update .coderabbit.yaml with revised settings
- Improve code review automation and preferences
@brettchaldecott
Copy link
Contributor Author

@coderabbitai resume

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 5, 2025

✅ Actions performed

Reviews resumed.

- Further optimize .coderabbit.yaml settings
- Enhance automated code review workflow
Copy link
Contributor

@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

🧹 Nitpick comments (2)
kinde_sdk/management/__init__.py (2)

33-35: Duplicate FeatureFlagsApi import – remove the extra line

The second import is redundant and may trigger flake8 F401/F811 warnings.

-from kinde_sdk.management.api.feature_flags_api import FeatureFlagsApi

272-274: Optional: consider consolidating the various UpdateConnectionRequestOptions* imports

All three option shapes are now imported twice (create & update). Not wrong, but grouping them improves readability.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 48470e0 and 54cba2f.

⛔ Files ignored due to path filters (205)
  • .coderabbit.yaml is excluded by !**/*.yaml
  • kinde_sdk/management/api/billing_api.py is excluded by !kinde_sdk/management/api/**
  • kinde_sdk/management/api/callbacks_api.py is excluded by !kinde_sdk/management/api/**
  • kinde_sdk/management/api/connections_api.py is excluded by !kinde_sdk/management/api/**
  • kinde_sdk/management/api/organizations_api.py is excluded by !kinde_sdk/management/api/**
  • kinde_sdk/management/api/permissions_api.py is excluded by !kinde_sdk/management/api/**
  • kinde_sdk/management/api/self_serve_portal_api.py is excluded by !kinde_sdk/management/api/**
  • kinde_sdk/management/api/subscribers_api.py is excluded by !kinde_sdk/management/api/**
  • kinde_sdk/management/api/users_api.py is excluded by !kinde_sdk/management/api/**
  • kinde_sdk/management/models/__init__.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/create_application_request.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/create_connection_request_options_one_of1.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/create_meter_usage_record_request.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_api_response_api_applications_inner.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_entitlement_response.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_entitlement_response_data.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_entitlement_response_data_entitlement.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_entitlements_response_data_entitlements_inner.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_entitlements_response_data_plans_inner.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_feature_flags_response_data_feature_flags_inner.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_feature_flags_response_data_feature_flags_inner_value.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_user_properties_response_data_properties_inner.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/get_user_properties_response_data_properties_inner_value.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/portal_link.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/replace_connection_request_options_one_of.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/update_connection_request.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/update_connection_request_options.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/update_connection_request_options_one_of.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/users_response_users_inner.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/management/models/users_response_users_inner_billing.py is excluded by !kinde_sdk/management/models/**
  • kinde_sdk/model/__init__.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/add_organization_users_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/add_organization_users_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/api.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/api.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/api_result.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/api_result.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/apis.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/apis.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/applications.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/applications.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/category.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/category.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/connected_apps_access_token.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/connected_apps_access_token.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/connected_apps_auth_url.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/connected_apps_auth_url.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/connection.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/connection.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_application_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_application_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_category_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_category_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_connection_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_connection_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_organization_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_organization_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_property_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_property_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_subscriber_success_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_subscriber_success_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_user_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_user_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_webhook_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/create_webhook_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/delete_webhook_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/delete_webhook_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/error.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/error.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/error_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/error_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/event_type.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/event_type.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_application_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_application_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_applications_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_applications_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_categories_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_categories_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_connections_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_connections_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_environment_feature_flags_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_environment_feature_flags_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_event_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_event_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_event_types_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_event_types_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organization_feature_flags_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organization_feature_flags_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organization_users_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organization_users_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organizations_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organizations_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organizations_user_permissions_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organizations_user_permissions_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organizations_user_roles_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_organizations_user_roles_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_permissions_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_permissions_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_properties_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_properties_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_property_values_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_property_values_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_redirect_callback_urls_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_redirect_callback_urls_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_roles_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_roles_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_subscriber_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_subscriber_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_subscribers_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_subscribers_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_webhooks_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/get_webhooks_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/logout_redirect_urls.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/logout_redirect_urls.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/model_property.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/model_property.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_user.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_user.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_user_permission.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_user_permission.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_user_role.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_user_role.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_user_role_permissions.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_user_role_permissions.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_users.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/organization_users.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/permissions.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/permissions.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/property_value.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/property_value.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/redirect_callback_urls.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/redirect_callback_urls.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/role.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/role.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/roles.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/roles.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/roles_permission_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/roles_permission_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/subscriber.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/subscriber.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/subscribers_subscriber.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/subscribers_subscriber.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/success_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/success_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/token_error_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/token_error_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/token_introspect.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/token_introspect.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/update_organization_users_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/update_organization_users_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/update_role_permissions_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/update_role_permissions_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/update_user_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/update_user_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/update_webhook_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/update_webhook_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/user.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/user.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/user_identity.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/user_identity.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/user_profile.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/user_profile.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/user_profile_v2.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/user_profile_v2.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/users.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/users.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/users_response.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/users_response.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/webhook.py is excluded by !kinde_sdk/model/**
  • kinde_sdk/model/webhook.pyi is excluded by !kinde_sdk/model/**
  • kinde_sdk/paths/__init__.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis/__init__.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis/get.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis/get.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis/post.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis/post.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis_api_id/__init__.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis_api_id/delete.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis_api_id/delete.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis_api_id/get.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis_api_id/get.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis_api_id_applications/__init__.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis_api_id_applications/patch.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_apis_api_id_applications/patch.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications/__init__.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications/get.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications/get.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications/post.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications/post.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/__init__.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/delete.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/delete.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/get.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/get.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/post.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/post.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/put.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_logout_urls/put.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_redirect_urls/__init__.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_redirect_urls/delete.py is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_redirect_urls/delete.pyi is excluded by !kinde_sdk/paths/**
  • kinde_sdk/paths/api_v1_applications_app_id_auth_redirect_urls/get.py is excluded by !kinde_sdk/paths/**
📒 Files selected for processing (95)
  • README.md (3 hunks)
  • README_management_client.md (1 hunks)
  • generate_management_sdk.py (4 hunks)
  • kinde_sdk/api_client.py (0 hunks)
  • kinde_sdk/apis/__init__.py (0 hunks)
  • kinde_sdk/apis/path_to_api.py (0 hunks)
  • kinde_sdk/apis/paths/__init__.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_apis.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_apis_api_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_apis_api_id_applications.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_applications.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_applications_app_id_auth_logout_urls.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_applications_app_id_auth_redirect_urls.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_applications_application_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_applications_application_id_connections.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_applications_application_id_connections_connection_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_business.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_connected_apps_auth_url.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_connected_apps_revoke.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_connected_apps_token.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_connections.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_connections_connection_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_environment_feature_flags.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_environment_feature_flags_feature_flag_key.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_event_types.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_events_event_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_feature_flags.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_feature_flags_feature_flag_key.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_industries.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organization.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organization_org_code.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organization_org_code_handle.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_feature_flags.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_feature_flags_feature_flag_key.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_properties.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_properties_property_key.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id_permissions.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id_permissions_permission_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id_roles.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id_roles_role_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_permissions.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_permissions_permission_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_properties.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_properties_property_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_property_categories.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_property_categories_category_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_roles.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_roles_role_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_roles_role_id_permissions.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_roles_role_id_permissions_permission_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_subscribers.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_subscribers_subscriber_id.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_timezones.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_user.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_users.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_users_user_id_feature_flags_feature_flag_key.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_users_user_id_password.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_users_user_id_properties.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_users_user_id_properties_property_key.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_users_user_id_refresh_claims.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_webhooks.py (0 hunks)
  • kinde_sdk/apis/paths/api_v1_webhooks_webhook_id.py (0 hunks)
  • kinde_sdk/apis/paths/oauth2_introspect.py (0 hunks)
  • kinde_sdk/apis/paths/oauth2_revoke.py (0 hunks)
  • kinde_sdk/apis/paths/oauth2_user_profile.py (0 hunks)
  • kinde_sdk/apis/paths/oauth2_v2_user_profile.py (0 hunks)
  • kinde_sdk/apis/tag_to_api.py (0 hunks)
  • kinde_sdk/apis/tags/__init__.py (0 hunks)
  • kinde_sdk/apis/tags/apis_api.py (0 hunks)
  • kinde_sdk/apis/tags/applications_api.py (0 hunks)
  • kinde_sdk/apis/tags/business_api.py (0 hunks)
  • kinde_sdk/apis/tags/callbacks_api.py (0 hunks)
  • kinde_sdk/apis/tags/connected_apps_api.py (0 hunks)
  • kinde_sdk/apis/tags/connections_api.py (0 hunks)
  • kinde_sdk/apis/tags/environments_api.py (0 hunks)
  • kinde_sdk/apis/tags/feature_flags_api.py (0 hunks)
  • kinde_sdk/apis/tags/industries_api.py (0 hunks)
  • kinde_sdk/apis/tags/o_auth_api.py (0 hunks)
  • kinde_sdk/apis/tags/organizations_api.py (0 hunks)
  • kinde_sdk/apis/tags/permissions_api.py (0 hunks)
  • kinde_sdk/apis/tags/properties_api.py (0 hunks)
  • kinde_sdk/apis/tags/property_categories_api.py (0 hunks)
  • kinde_sdk/apis/tags/roles_api.py (0 hunks)
  • kinde_sdk/apis/tags/subscribers_api.py (0 hunks)
  • kinde_sdk/apis/tags/timezones_api.py (0 hunks)
  • kinde_sdk/apis/tags/users_api.py (0 hunks)
  • kinde_sdk/apis/tags/webhooks_api.py (0 hunks)
  • kinde_sdk/configuration.py (0 hunks)
  • kinde_sdk/exceptions.py (0 hunks)
  • kinde_sdk/management/__init__.py (7 hunks)
  • kinde_sdk/management/exceptions.py (1 hunks)
  • kinde_sdk/management/kinde_api_client.py (1 hunks)
💤 Files with no reviewable changes (89)
  • kinde_sdk/apis/paths/api_v1_webhooks_webhook_id.py
  • kinde_sdk/apis/paths/init.py
  • kinde_sdk/apis/init.py
  • kinde_sdk/apis/paths/api_v1_business.py
  • kinde_sdk/apis/paths/api_v1_applications_application_id_connections.py
  • kinde_sdk/apis/paths/oauth2_introspect.py
  • kinde_sdk/apis/paths/api_v1_subscribers_subscriber_id.py
  • kinde_sdk/apis/paths/oauth2_user_profile.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_feature_flags_feature_flag_key.py
  • kinde_sdk/apis/paths/api_v1_users_user_id_refresh_claims.py
  • kinde_sdk/apis/paths/api_v1_applications_application_id.py
  • kinde_sdk/apis/paths/api_v1_feature_flags_feature_flag_key.py
  • kinde_sdk/apis/paths/oauth2_v2_user_profile.py
  • kinde_sdk/apis/paths/api_v1_users_user_id_properties_property_key.py
  • kinde_sdk/apis/paths/api_v1_events_event_id.py
  • kinde_sdk/apis/paths/api_v1_property_categories.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_feature_flags.py
  • kinde_sdk/apis/tags/properties_api.py
  • kinde_sdk/apis/paths/api_v1_users_user_id_feature_flags_feature_flag_key.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_properties_property_key.py
  • kinde_sdk/apis/paths/api_v1_feature_flags.py
  • kinde_sdk/apis/paths/api_v1_event_types.py
  • kinde_sdk/apis/paths/api_v1_connections_connection_id.py
  • kinde_sdk/apis/paths/api_v1_apis_api_id_applications.py
  • kinde_sdk/apis/paths/api_v1_webhooks.py
  • kinde_sdk/apis/paths/api_v1_organization.py
  • kinde_sdk/apis/tags/callbacks_api.py
  • kinde_sdk/apis/paths/api_v1_roles_role_id_permissions.py
  • kinde_sdk/apis/paths/api_v1_permissions_permission_id.py
  • kinde_sdk/apis/paths/api_v1_connected_apps_revoke.py
  • kinde_sdk/apis/paths/api_v1_apis_api_id.py
  • kinde_sdk/apis/paths/api_v1_timezones.py
  • kinde_sdk/apis/paths/api_v1_applications.py
  • kinde_sdk/apis/tags/industries_api.py
  • kinde_sdk/apis/paths/api_v1_apis.py
  • kinde_sdk/apis/paths/api_v1_connections.py
  • kinde_sdk/apis/paths/api_v1_property_categories_category_id.py
  • kinde_sdk/apis/paths/api_v1_properties_property_id.py
  • kinde_sdk/apis/paths/api_v1_connected_apps_auth_url.py
  • kinde_sdk/apis/paths/api_v1_roles_role_id.py
  • kinde_sdk/apis/paths/api_v1_applications_application_id_connections_connection_id.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id.py
  • kinde_sdk/apis/paths/api_v1_users_user_id_properties.py
  • kinde_sdk/apis/tags/users_api.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id_permissions_permission_id.py
  • kinde_sdk/apis/tags/organizations_api.py
  • kinde_sdk/apis/tags/apis_api.py
  • kinde_sdk/apis/tags/applications_api.py
  • kinde_sdk/apis/paths/api_v1_environment_feature_flags.py
  • kinde_sdk/apis/paths/api_v1_organizations.py
  • kinde_sdk/apis/paths/api_v1_roles_role_id_permissions_permission_id.py
  • kinde_sdk/apis/paths/api_v1_users.py
  • kinde_sdk/apis/tags/business_api.py
  • kinde_sdk/apis/paths/api_v1_connected_apps_token.py
  • kinde_sdk/apis/tags/roles_api.py
  • kinde_sdk/apis/paths/api_v1_industries.py
  • kinde_sdk/apis/paths/api_v1_applications_app_id_auth_redirect_urls.py
  • kinde_sdk/apis/paths/api_v1_organization_org_code_handle.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id_roles_role_id.py
  • kinde_sdk/apis/paths/api_v1_permissions.py
  • kinde_sdk/apis/paths/api_v1_environment_feature_flags_feature_flag_key.py
  • kinde_sdk/apis/paths/api_v1_subscribers.py
  • kinde_sdk/apis/paths/api_v1_properties.py
  • kinde_sdk/apis/paths/api_v1_applications_app_id_auth_logout_urls.py
  • kinde_sdk/apis/paths/api_v1_users_user_id_password.py
  • kinde_sdk/apis/paths/oauth2_revoke.py
  • kinde_sdk/apis/paths/api_v1_organization_org_code.py
  • kinde_sdk/apis/paths/api_v1_roles.py
  • kinde_sdk/apis/tags/feature_flags_api.py
  • kinde_sdk/apis/tags/timezones_api.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_properties.py
  • kinde_sdk/apis/tags/permissions_api.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id_roles.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users.py
  • kinde_sdk/apis/tags/connections_api.py
  • kinde_sdk/apis/tag_to_api.py
  • kinde_sdk/apis/path_to_api.py
  • kinde_sdk/apis/tags/subscribers_api.py
  • kinde_sdk/apis/tags/init.py
  • kinde_sdk/apis/tags/o_auth_api.py
  • kinde_sdk/apis/paths/api_v1_organizations_org_code_users_user_id_permissions.py
  • kinde_sdk/apis/tags/environments_api.py
  • kinde_sdk/apis/paths/api_v1_user.py
  • kinde_sdk/apis/tags/connected_apps_api.py
  • kinde_sdk/configuration.py
  • kinde_sdk/apis/tags/property_categories_api.py
  • kinde_sdk/api_client.py
  • kinde_sdk/exceptions.py
  • kinde_sdk/apis/tags/webhooks_api.py
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: brettchaldecott
PR: kinde-oss/kinde-python-sdk#83
File: kinde_sdk/auth/feature_flags.py:85-102
Timestamp: 2025-07-04T07:09:21.430Z
Learning: In the Kinde Python SDK v2, the maintainer (brettchaldecott) prefers to keep async keywords on methods in the feature flags module even when they don't currently perform await operations, as this approach has been tested and is preferred for the SDK's design.
📚 Learning: in the kinde python sdk v2, the maintainer (brettchaldecott) prefers to keep async keywords on metho...
Learnt from: brettchaldecott
PR: kinde-oss/kinde-python-sdk#83
File: kinde_sdk/auth/feature_flags.py:85-102
Timestamp: 2025-07-04T07:09:21.430Z
Learning: In the Kinde Python SDK v2, the maintainer (brettchaldecott) prefers to keep async keywords on methods in the feature flags module even when they don't currently perform await operations, as this approach has been tested and is preferred for the SDK's design.

Applied to files:

  • README_management_client.md
  • kinde_sdk/management/kinde_api_client.py
  • kinde_sdk/management/__init__.py
📚 Learning: in the kinde python sdk v2, the tokenmanager.get_claims() method internally handles token lookups wi...
Learnt from: brettchaldecott
PR: kinde-oss/kinde-python-sdk#83
File: kinde_sdk/auth/claims.py:35-49
Timestamp: 2025-07-03T13:05:24.796Z
Learning: In the Kinde Python SDK v2, the TokenManager.get_claims() method internally handles token lookups with a fallback strategy - it first tries to get claims from access_token_claims and falls back to id_token_claims if access token claims are unavailable. The token_type parameter in Claims class methods (get_claim, get_all_claims) is therefore not used because the TokenManager abstracts away the token selection logic.

Applied to files:

  • kinde_sdk/management/kinde_api_client.py
🪛 Ruff (0.12.2)
generate_management_sdk.py

171-174: Combine if branches using logical or operator

Combine if branches

(SIM114)

🔇 Additional comments (12)
README_management_client.md (1)

287-287: Import-path update is correct and keeps docs in sync with package layout

The example now points to kinde_sdk.management.kinde_api_client, matching the refactor. No further action needed.

README.md (3)

89-96: Docs kept consistent with new package structure

All FastAPI examples now import KindeApiClient from kinde_sdk.management.kinde_api_client. 👍


214-224: Good catch updating the management-client example

The management API quick-start also uses the new path – keeps readers from copy-pasting stale code.


357-369: Path fixed in the full usage example

The longer walkthrough compiles with the new layout. No issues spotted.

kinde_sdk/management/kinde_api_client.py (1)

8-15: Import paths updated correctly, but will currently break due to missing exceptions

Moving to kinde_sdk.management.* is correct.
However, until the missing exceptions are added (see exceptions.py comment) these imports will error.

kinde_sdk/management/__init__.py (2)

158-161: New entitlement models exported – looks fine

Exposing the new billing/entitlement response models from the package root is consistent with other models.


234-235: Renamed PortalLink import seems intentional

GetPortalLink was previously generated; the new name matches the schema. No action required.

generate_management_sdk.py (5)

26-48: LGTM! Comprehensive import path fixing.

The enhanced import fixing logic thoroughly handles all import patterns including individual imports, combined imports, and remaining references. This ensures a complete migration to the new kinde_sdk.management structure.


96-131: Well-implemented cleanup function.

The cleanup function properly handles the removal of legacy files and directories with appropriate error handling. Using warnings instead of failures ensures the script continues even if some files can't be removed due to permissions or other issues.


187-235: Well-implemented restore function.

The restore function properly handles file restoration with appropriate existence checks and special handling for Kinde-specific exceptions. The cleanup of the backup directory after restoration is a good practice.


283-288: Excellent workflow implementation.

The generation workflow properly sequences cleanup, backup, generation, and restoration operations. This ensures custom code is preserved while allowing clean regeneration of the SDK.

Also applies to: 316-318, 324-325


331-331: Good error handling improvement.

Exiting with an error code when the generated directory is not found is the correct approach. This prevents leaving the SDK in an inconsistent state and helps CI/CD pipelines detect generation failures.

- Improve generate_management_sdk.py functionality
- Enhance SDK generation process for better code quality
Copy link
Contributor

@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: 0

♻️ Duplicate comments (1)
generate_management_sdk.py (1)

164-187: Improve exception extraction logic for robustness

The exception extraction logic needs improvement as mentioned in the previous review. Additionally, the static analysis correctly identifies that lines 179-183 can be simplified.

To address the static analysis hint while waiting for the full refactor:

-                # Include class body (pass statement or other content)
-                elif current_class_indent is not None and line.strip() and len(line) - len(line.lstrip()) > current_class_indent:
-                    kinde_exceptions.append(line)
-                # Include empty lines within the section
-                elif not line.strip() and i + 1 < len(lines) and lines[i + 1].strip():
-                    kinde_exceptions.append(line)
+                # Include class body content or empty lines within the section
+                elif (current_class_indent is not None and line.strip() and len(line) - len(line.lstrip()) > current_class_indent) or \
+                     (not line.strip() and i + 1 < len(lines) and lines[i + 1].strip()):
+                    kinde_exceptions.append(line)
🧹 Nitpick comments (1)
generate_management_sdk.py (1)

229-236: Consider improving newline handling

The current implementation works but the newline handling could be cleaner.

-                # Add Kinde-specific exceptions at the end
-                kinde_exceptions_section = f"""
-
-{kinde_exceptions_text}"""
-                
-                content += kinde_exceptions_section
+                # Add Kinde-specific exceptions at the end
+                if not content.endswith('\n'):
+                    content += '\n'
+                content += f"\n{kinde_exceptions_text}"
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 54cba2f and 834b2bf.

📒 Files selected for processing (1)
  • generate_management_sdk.py (4 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: brettchaldecott
PR: kinde-oss/kinde-python-sdk#83
File: kinde_sdk/auth/feature_flags.py:85-102
Timestamp: 2025-07-04T07:09:21.430Z
Learning: In the Kinde Python SDK v2, the maintainer (brettchaldecott) prefers to keep async keywords on methods in the feature flags module even when they don't currently perform await operations, as this approach has been tested and is preferred for the SDK's design.
🪛 Ruff (0.12.2)
generate_management_sdk.py

179-183: Combine if branches using logical or operator

Combine if branches

(SIM114)

🔇 Additional comments (3)
generate_management_sdk.py (3)

96-131: LGTM! Well-structured cleanup function

The function safely removes old generated files and directories with proper existence checks and error handling.


292-340: LGTM! Well-orchestrated generation flow

The updated generation flow properly handles:

  • Cleanup of old generated files to prevent conflicts
  • Preservation and restoration of custom files
  • Proper error handling with exit codes

The removal of import fixing for the main kinde_sdk directory aligns with the PR objective of restructuring into the management subpackage.


26-48: Potential double replacement issue in import fixing logic

The current implementation could cause double replacements. For example, if a file already contains from kinde_sdk.management import schemas, line 39 would transform it to from kinde_sdk.management.management import schemas.

Consider reordering the replacements or making the general replacement more specific:

-    # Fix all kinde_sdk imports to use management module
-    content = content.replace('from kinde_sdk import schemas', 'from kinde_sdk.management import schemas')
-    content = content.replace('from kinde_sdk import api_client', 'from kinde_sdk.management import api_client')
-    content = content.replace('from kinde_sdk import exceptions', 'from kinde_sdk.management import exceptions')
-    content = content.replace('from kinde_sdk import configuration', 'from kinde_sdk.management import configuration')
-    content = content.replace('from kinde_sdk import rest', 'from kinde_sdk.management import rest')
-    
-    # Fix combined imports
-    content = content.replace('from kinde_sdk import api_client, exceptions', 'from kinde_sdk.management import api_client, exceptions')
-    content = content.replace('from kinde_sdk import exceptions, api_client', 'from kinde_sdk.management import exceptions, api_client')
-    
-    # Fix import statements
-    content = content.replace('from kinde_sdk import', 'from kinde_sdk.management import')
+    # Fix import statements - do general replacement first
+    content = content.replace('from kinde_sdk import', 'from kinde_sdk.management import')
+    
+    # Fix any double replacements that might have occurred
+    content = content.replace('from kinde_sdk.management.management import', 'from kinde_sdk.management import')

Likely an incorrect or invalid review comment.

- Add custom_exceptions.py for specialized error handling
- Improve kinde_api_client.py with enhanced functionality
- Update exceptions.py with better error management
- Refine generate_management_sdk.py for improved SDK generation
Brett Chaldecott added 2 commits August 5, 2025 08:17
- Remove deprecated kinde_api_client.py from management module
- Remove associated test file test_kinde_api_client.py
- Clean up legacy components as part of SDK restructure
- Improve example_app.py with enhanced functionality
- Update FastAPI integration examples for better demonstration
@brettchaldecott brettchaldecott merged commit f8ebe0b into main Aug 6, 2025
9 checks passed
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

Successfully merging this pull request may close these issues.

2 participants