Skip to content

[auth0-python] Add async functions to AsyncAuth0 #13799

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 1 commit into
base: main
Choose a base branch
from

Conversation

David-Gilman
Copy link
Contributor

Add async functions to AyncAuth0 class.

@David-Gilman David-Gilman marked this pull request as ready for review April 5, 2025 00:33
Copy link
Contributor

github-actions bot commented Apr 5, 2025

According to mypy_primer, this change has no effect on the checked open source code. 🤖🎉

Comment on lines 5 to +38
from auth0.rest import RestClientOptions as RestClientOptions

from ..asyncify import asyncify as asyncify
from .actions import Actions as Actions
from .attack_protection import AttackProtection as AttackProtection
from .auth0 import Auth0 as Auth0
from .blacklists import Blacklists as Blacklists
from .branding import Branding as Branding
from .client_credentials import ClientCredentials as ClientCredentials
from .client_grants import ClientGrants as ClientGrants
from .clients import Clients as Clients
from .connections import Connections as Connections
from .custom_domains import CustomDomains as CustomDomains
from .device_credentials import DeviceCredentials as DeviceCredentials
from .email_templates import EmailTemplates as EmailTemplates
from .emails import Emails as Emails
from .grants import Grants as Grants
from .guardian import Guardian as Guardian
from .hooks import Hooks as Hooks
from .jobs import Jobs as Jobs
from .log_streams import LogStreams as LogStreams
from .logs import Logs as Logs
from .organizations import Organizations as Organizations
from .prompts import Prompts as Prompts
from .resource_servers import ResourceServers as ResourceServers
from .roles import Roles as Roles
from .rules import Rules as Rules
from .rules_configs import RulesConfigs as RulesConfigs
from .stats import Stats as Stats
from .tenants import Tenants as Tenants
from .tickets import Tickets as Tickets
from .user_blocks import UserBlocks as UserBlocks
from .users import Users as Users
from .users_by_email import UsersByEmail as UsersByEmail
Copy link
Collaborator

@srittau srittau Apr 7, 2025

Choose a reason for hiding this comment

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

I just noticed that these are all re-exported from this file. I don't think we should do that and just use normal import for the items we need in this file (I.e. just from .tenants import Tenants without the as Tenants part.) This applies to all imports, not just the new ones.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

What I found with this is that my IDE considers these unused if I remove the as import - should I ignore that?

Copy link
Collaborator

Choose a reason for hiding this comment

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

In that case you can just remove the unused imports.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

No, by importing these they become attributes of the class - I think this is the correct approach and you should approve as is.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@srittau Bump, thanks.

Copy link
Collaborator

@Avasam Avasam Apr 10, 2025

Choose a reason for hiding this comment

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

Are you sure about these?

Python 3.13.1 (main, Dec 19 2024, 14:38:48) [MSC v.1942 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import auth0
>>> auth0.__version__
'4.9.0'
>>> from auth0.management.async_auth0 import AttackProtection
Traceback (most recent call last):
  File "<python-input-2>", line 1, in <module>
    from auth0.management.async_auth0 import AttackProtection
ImportError: cannot import name 'AttackProtection' from 'auth0.management.async_auth0' (E:\Users\Avasam\Documents\Git\typeshed\.venv\Lib\site-packages\auth0\management\async_auth0.py)
>>> from auth0.management.async_auth0 import Auth0
>>> Auth0
<class 'auth0.management.auth0.Auth0'>

by importing these they become attributes of the class

You can't affect what attributes are seen as part of a class simply by importing in a stub. I don't understand what your expectations are here.

Copy link
Collaborator

Choose a reason for hiding this comment

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

After familiarizing myself further with the source, I think I see what you're trying to do here:

from types import TracebackType
from typing_extensions import Self

from auth0.rest import RestClientOptions

from .actions import Actions
from .attack_protection import AttackProtection
from .blacklists import Blacklists
from .branding import Branding
from .client_credentials import ClientCredentials
from .client_grants import ClientGrants
from .clients import Clients
from .connections import Connections
from .custom_domains import CustomDomains
from .device_credentials import DeviceCredentials
from .email_templates import EmailTemplates
from .emails import Emails
from .grants import Grants
from .guardian import Guardian
from .hooks import Hooks
from .jobs import Jobs
from .log_streams import LogStreams
from .logs import Logs
from .organizations import Organizations
from .prompts import Prompts
from .resource_servers import ResourceServers
from .roles import Roles
from .rules import Rules
from .rules_configs import RulesConfigs
from .stats import Stats
from .tenants import Tenants
from .tickets import Tickets
from .user_blocks import UserBlocks
from .users import Users
from .users_by_email import UsersByEmail

class AsyncAuth0:
    def __init__(self, domain: str, token: str, rest_options: RestClientOptions | None = None) -> None: ...
    def set_session(self, session) -> None: ...
    async def __aenter__(self) -> Self: ...
    async def __aexit__(
        self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
    ) -> None: ...

    # Same as Auth0, but async
    actions: Actions
    attack_protection: AttackProtection
    blacklists: Blacklists
    branding: Branding
    client_credentials: ClientCredentials
    client_grants: ClientGrants
    clients: Clients
    connections: Connections
    custom_domains: CustomDomains
    device_credentials: DeviceCredentials
    email_templates: EmailTemplates
    emails: Emails
    grants: Grants
    guardian: Guardian
    hooks: Hooks
    jobs: Jobs
    log_streams: LogStreams
    logs: Logs
    organizations: Organizations
    prompts: Prompts
    resource_servers: ResourceServers
    roles: Roles
    rules_configs: RulesConfigs
    rules: Rules
    stats: Stats
    tenants: Tenants
    tickets: Tickets
    user_blocks: UserBlocks
    users_by_email: UsersByEmail
    users: Users

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yep - it doesn't exist except at runtime. So I want to avoid having to add type ignores everywhere in my code that uses this library.

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.

3 participants