mirror of
https://github.com/yawaflua/Flask-Discord.git
synced 2026-02-04 18:24:15 +02:00
🤞 Convert DiscordOAuth2Session into its own package
This commit is contained in:
14
docs/api.rst
14
docs/api.rst
@@ -8,11 +8,11 @@ attributes and available methods.
|
|||||||
Discord OAuth2 Client
|
Discord OAuth2 Client
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
.. autoclass:: flask_discord.DiscordOAuth2Session
|
.. autoclass:: flask_discord.oauth2.DiscordOAuth2Session
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
||||||
.. autoclass:: flask_discord._http.DiscordOAuth2HttpClient
|
.. autoclass:: flask_discord.oauth2._http.DiscordOAuth2HttpClient
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
||||||
@@ -20,23 +20,23 @@ Discord OAuth2 Client
|
|||||||
Models
|
Models
|
||||||
------
|
------
|
||||||
|
|
||||||
.. autoclass:: flask_discord.models.Guild
|
.. autoclass:: flask_discord.oauth2.models.Guild
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
||||||
.. autoclass:: flask_discord.models.User
|
.. autoclass:: flask_discord.oauth2.models.User
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
||||||
.. autoclass:: flask_discord.models.Bot
|
.. autoclass:: flask_discord.oauth2.models.Bot
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
||||||
.. autoclass:: flask_discord.models.Integration
|
.. autoclass:: flask_discord.oauth2.models.Integration
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
||||||
.. autoclass:: flask_discord.models.UserConnection
|
.. autoclass:: flask_discord.oauth2.models.UserConnection
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from .exceptions import *
|
from .oauth2.client import DiscordOAuth2Session
|
||||||
from .utils import *
|
|
||||||
|
|
||||||
from .client import DiscordOAuth2Session
|
from .utils import *
|
||||||
|
from .exceptions import *
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|||||||
2
flask_discord/oauth2/__init__.py
Normal file
2
flask_discord/oauth2/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
from .models import *
|
||||||
|
from .client import DiscordOAuth2Session
|
||||||
@@ -5,8 +5,8 @@ import json
|
|||||||
import os
|
import os
|
||||||
import abc
|
import abc
|
||||||
|
|
||||||
from . import configs
|
from flask_discord import configs
|
||||||
from . import exceptions
|
from flask_discord import exceptions
|
||||||
|
|
||||||
from flask import session, request
|
from flask import session, request
|
||||||
from collections.abc import Mapping
|
from collections.abc import Mapping
|
||||||
@@ -2,9 +2,10 @@ import jwt
|
|||||||
import typing
|
import typing
|
||||||
import discord
|
import discord
|
||||||
|
|
||||||
from . import configs, _http, models, utils, exceptions
|
from . import _http, models
|
||||||
|
|
||||||
from oauthlib.common import add_params_to_uri
|
from oauthlib.common import add_params_to_uri
|
||||||
|
from flask_discord import configs, utils, exceptions
|
||||||
from flask import request, session, redirect, current_app
|
from flask import request, session, redirect, current_app
|
||||||
|
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ class DiscordOAuth2Session(_http.DiscordOAuth2HttpClient):
|
|||||||
"""Main client class representing hypothetical OAuth2 session with discord.
|
"""Main client class representing hypothetical OAuth2 session with discord.
|
||||||
It uses Flask `session <http://flask.pocoo.org/docs/1.0/api/#flask.session>`_ local proxy object
|
It uses Flask `session <http://flask.pocoo.org/docs/1.0/api/#flask.session>`_ local proxy object
|
||||||
to save state, authorization token and keeps record of users sessions across different requests.
|
to save state, authorization token and keeps record of users sessions across different requests.
|
||||||
This class inherits :py:class:`flask_discord._http.DiscordOAuth2HttpClient` class.
|
This class inherits :py:class:`flask_discord.oauth2._http.DiscordOAuth2HttpClient` class.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
@@ -71,7 +72,7 @@ class DiscordOAuth2Session(_http.DiscordOAuth2HttpClient):
|
|||||||
<https://discordapp.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes>`_.
|
<https://discordapp.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes>`_.
|
||||||
data : dict, optional
|
data : dict, optional
|
||||||
A mapping of your any custom data which you want to access after authorization grant. Use
|
A mapping of your any custom data which you want to access after authorization grant. Use
|
||||||
`:py:meth:flask_discord.DiscordOAuth2Session.callback` to retrieve this data in your callback view.
|
`:py:meth:flask_discord.oauth2.DiscordOAuth2Session.callback` to retrieve this data in your callback view.
|
||||||
prompt : bool, optional
|
prompt : bool, optional
|
||||||
Determines if the OAuth2 grant should be explicitly prompted and re-approved. Defaults to True.
|
Determines if the OAuth2 grant should be explicitly prompted and re-approved. Defaults to True.
|
||||||
Specify False for implicit grant which will skip the authorization screen and redirect to redirect URI.
|
Specify False for implicit grant which will skip the authorization screen and redirect to redirect URI.
|
||||||
@@ -122,7 +123,7 @@ class DiscordOAuth2Session(_http.DiscordOAuth2HttpClient):
|
|||||||
Meaning by default, it uses client side session handling.
|
Meaning by default, it uses client side session handling.
|
||||||
|
|
||||||
Override this method if you want to handle the user's session server side. If this method is overridden then,
|
Override this method if you want to handle the user's session server side. If this method is overridden then,
|
||||||
you must also override :py:meth:`flask_discord.DiscordOAuth2Session.get_authorization_token`.
|
you must also override :py:meth:`flask_discord.oauth2.DiscordOAuth2Session.get_authorization_token`.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
session["DISCORD_OAUTH2_TOKEN"] = token
|
session["DISCORD_OAUTH2_TOKEN"] = token
|
||||||
@@ -130,7 +131,7 @@ class DiscordOAuth2Session(_http.DiscordOAuth2HttpClient):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def get_authorization_token() -> dict:
|
def get_authorization_token() -> dict:
|
||||||
"""A static method which returns a dict containing Discord OAuth2 token and other secrets which was saved
|
"""A static method which returns a dict containing Discord OAuth2 token and other secrets which was saved
|
||||||
previously by `:py:meth:`flask_discord.DiscordOAuth2Session.save_authorization_token` from user's cookies.
|
by `:py:meth:`flask_discord.oauth2.DiscordOAuth2Session.save_authorization_token` from user's cookies.
|
||||||
|
|
||||||
You must override this method if you are implementing server side session handling.
|
You must override this method if you are implementing server side session handling.
|
||||||
|
|
||||||
@@ -183,7 +184,7 @@ class DiscordOAuth2Session(_http.DiscordOAuth2HttpClient):
|
|||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
flask_discord.models.User
|
flask_discord.oauth2.models.User
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return models.User.get_from_cache() or models.User.fetch_from_api()
|
return models.User.get_from_cache() or models.User.fetch_from_api()
|
||||||
@@ -196,7 +197,7 @@ class DiscordOAuth2Session(_http.DiscordOAuth2HttpClient):
|
|||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
list
|
list
|
||||||
List of :py:class:`flask_discord.models.UserConnection` objects.
|
List of :py:class:`flask_discord.oauth2.models.UserConnection` objects.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
user = models.User.get_from_cache()
|
user = models.User.get_from_cache()
|
||||||
@@ -216,7 +217,7 @@ class DiscordOAuth2Session(_http.DiscordOAuth2HttpClient):
|
|||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
list
|
list
|
||||||
List of :py:class:`flask_discord.models.Guild` objects.
|
List of :py:class:`flask_discord.oauth2.models.Guild` objects.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
user = models.User.get_from_cache()
|
user = models.User.get_from_cache()
|
||||||
@@ -23,15 +23,15 @@ class DiscordModelsBase(metaclass=DiscordModelsMeta):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _request(*args, **kwargs):
|
def _request(*args, **kwargs):
|
||||||
"""A shorthand to :py:func:flask_discord.request`. It uses Flask current_app local proxy to get the
|
"""A shorthand to :py:func:flask_discord.oauth2.DiscordOAuth2Session.request`.
|
||||||
Flask-Discord client.
|
It uses Flask current_app local proxy to get the instance of Flask-Discord DiscordOAuth2Session.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return current_app.discord.request(*args, **kwargs)
|
return current_app.discord.request(*args, **kwargs)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _bot_request(*args, **kwargs):
|
def _bot_request(*args, **kwargs):
|
||||||
"""A shorthand to :py:func:flask_discord.bot_request`."""
|
"""A shorthand to :py:func:flask_discord.oauth2.DiscordOAuth2Session.bot_request`."""
|
||||||
return current_app.discord.bot_request(*args, **kwargs)
|
return current_app.discord.bot_request(*args, **kwargs)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -59,19 +59,20 @@ class UserConnection(DiscordModelsBase):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def fetch_from_api(cls, cache=True):
|
def fetch_from_api(cls, cache=True):
|
||||||
"""A class method which returns an instance or list of instances of this model by implicitly making an
|
"""A class method which returns an instance or list of instances of this model by implicitly making an
|
||||||
API call to Discord. If an instance of :py:class:`flask_discord.User` exists in the users internal cache
|
API call to Discord. If an instance of :py:class:`flask_discord.oauth2.models.User` exists in the
|
||||||
who are attached to these connections then, the cached property :py:attr:`flask_discord.User.connections`
|
users internal cache who are attached to these connections then, the cached property
|
||||||
is updated.
|
:py:attr:`flask_discord.oauth2.models.User.connections` is updated.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
cache : bool
|
cache : bool
|
||||||
Determines if the :py:attr:`flask_discord.User.guilds` cache should be updated with the new guilds.
|
Determines if the :py:attr:`flask_discord.oauth2.models.User.guilds` cache should be
|
||||||
|
updated with the new guilds.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
list[flask_discord.UserConnection, ...]
|
list[flask_discord.oauth2.models.UserConnection, ...]
|
||||||
List of instances of :py:class:`flask_discord.UserConnection` to which this user belongs.
|
List of instances of :py:class:`flask_discord.oauth2.models.UserConnection` to which this user belongs.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
connections = super().fetch_from_api()
|
connections = super().fetch_from_api()
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
from .base import DiscordModelsBase
|
from .base import DiscordModelsBase
|
||||||
from flask import current_app
|
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
from .. import configs
|
|
||||||
|
from flask import current_app
|
||||||
|
from flask_discord import configs
|
||||||
|
|
||||||
|
|
||||||
class Guild(DiscordModelsBase):
|
class Guild(DiscordModelsBase):
|
||||||
@@ -68,18 +69,20 @@ class Guild(DiscordModelsBase):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def fetch_from_api(cls, cache=True):
|
def fetch_from_api(cls, cache=True):
|
||||||
"""A class method which returns an instance or list of instances of this model by implicitly making an
|
"""A class method which returns an instance or list of instances of this model by implicitly making an
|
||||||
API call to Discord. If an instance of :py:class:`flask_discord.User` exists in the users internal cache
|
API call to Discord. If an instance of :py:class:`flask_discord.oauth2.models.Guild` exists in the
|
||||||
who belongs to these guilds then, the cached property :py:attr:`flask_discord.User.guilds` is updated.
|
users internal cache who belongs to these guilds then, the cached property
|
||||||
|
:py:attr:`flask_discord.oauth2.models.User.guilds` is updated.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
cache : bool
|
cache : bool
|
||||||
Determines if the :py:attr:`flask_discord.User.guilds` cache should be updated with the new guilds.
|
Determines if the :py:attr:`flask_discord.oauth2.models.User.guilds` cache should be updated with
|
||||||
|
the new guilds.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
list[flask_discord.Guild, ...]
|
list[flask_discord.oauth2.models.Guild, ...]
|
||||||
List of instances of :py:class:`flask_discord.Guild` to which this user belongs.
|
List of instances of :py:class:`flask_discord.oauth2.models.Guild` to which this user belongs.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
guilds = super().fetch_from_api()
|
guilds = super().fetch_from_api()
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
from .. import configs
|
|
||||||
|
|
||||||
from .guild import Guild
|
|
||||||
from .. import exceptions
|
|
||||||
from .base import DiscordModelsBase
|
from .base import DiscordModelsBase
|
||||||
|
from .guild import Guild
|
||||||
from .connections import UserConnection
|
from .connections import UserConnection
|
||||||
|
|
||||||
|
from flask_discord import configs
|
||||||
|
from flask_discord import exceptions
|
||||||
from flask import current_app, session
|
from flask import current_app, session
|
||||||
|
|
||||||
|
|
||||||
@@ -74,8 +73,8 @@ class User(DiscordModelsBase):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def guilds(self):
|
def guilds(self):
|
||||||
"""A cached mapping of user's guild ID to :py:class:`flask_discord.Guild`. The guilds are cached when the first
|
"""A cached mapping of user's guild ID to :py:class:`flask_discord.oauth2.models.Guild`.
|
||||||
API call for guilds is requested so it might be an empty dict.
|
The guilds are cached when the first API call for guilds is requested so it might be an empty dict.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
@@ -133,10 +132,11 @@ class User(DiscordModelsBase):
|
|||||||
----------
|
----------
|
||||||
guilds : bool
|
guilds : bool
|
||||||
A boolean indicating if user's guilds should be cached or not. Defaults to ``False``. If chose to not
|
A boolean indicating if user's guilds should be cached or not. Defaults to ``False``. If chose to not
|
||||||
cache, user's guilds can always be obtained from :py:func:`flask_discord.Guilds.fetch_from_api()`.
|
cache, user's guilds can be obtained from :py:func:`flask_discord.oauth2.models.Guilds.fetch_from_api()`.
|
||||||
connections : bool
|
connections : bool
|
||||||
A boolean indicating if user's connections should be cached or not. Defaults to ``False``. If chose to not
|
A boolean indicating if user's connections should be cached or not. Defaults to ``False``.
|
||||||
cache, user's connections can always be obtained from :py:func:`flask_discord.Connections.fetch_from_api()`.
|
If chose to notvcache, user's connections can be obtained from
|
||||||
|
:py:func:`flask_discord.oauth2.models.UserConnection.fetch_from_api()`.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
@@ -161,7 +161,7 @@ class User(DiscordModelsBase):
|
|||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
flask_discord.User
|
flask_discord.oauth2.models.User
|
||||||
An user instance if it exists in internal cache.
|
An user instance if it exists in internal cache.
|
||||||
None
|
None
|
||||||
If the current doesn't exists in internal cache.
|
If the current doesn't exists in internal cache.
|
||||||
@@ -201,7 +201,7 @@ class User(DiscordModelsBase):
|
|||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
list
|
list
|
||||||
List of :py:class:`flask_discord.Guilds` instances.
|
List of :py:class:`flask_discord.oauth2.models.Guilds` instances.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self._guilds = {guild.id: guild for guild in Guild.fetch_from_api(cache=False)}
|
self._guilds = {guild.id: guild for guild in Guild.fetch_from_api(cache=False)}
|
||||||
@@ -214,7 +214,7 @@ class User(DiscordModelsBase):
|
|||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
list
|
list
|
||||||
A list of :py:class:`flask_discord.UserConnection` instances.
|
A list of :py:class:`flask_discord.oauth2.models.UserConnection` instances.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.connections = UserConnection.fetch_from_api(cache=False)
|
self.connections = UserConnection.fetch_from_api(cache=False)
|
||||||
Reference in New Issue
Block a user