Source code for flask_web3.extension

"""
    flask_web3.extension
    ~~~~~~~~~~~~~~~~~~~~

    Flask-Web3 extension

    :copyright: Copyright 2017 by ConsenSys France.
    :license: BSD, see :ref:`license` for more details.
"""

from collections import OrderedDict

from web3 import Web3

from .utils import create_provider as _create_provider


class FlaskWeb3Meta(type):
    """Meta class for Flask-Web3 extension"""

    @classmethod
    def __prepare__(mcs, name, bases):
        return OrderedDict()

    def __new__(mcs, name, bases, ns):
        web3_class = ns.pop('web3_class', None)
        if web3_class is not None:
            assert issubclass(web3_class, Web3), "web3_class must be a subclass of `web3.Web3` class " \
                                                 "but you provided {}".format(web3_class)
            bases = bases + (web3_class,)

        return super().__new__(mcs, name, bases, dict(ns))


[docs]class FlaskWeb3(metaclass=FlaskWeb3Meta): """Main class for declaring a flask extension :param app: Flask application or blueprint object to extend :type app: flask.Flask :param create_provider: Function used to create a Web3 provider :type create_provider: A function taking a :class:flask.Flask application configuration as parameter """ # Web3 class to use for web3_class = Web3 def __init__(self, *args, app=None, create_provider=_create_provider, **kwargs): super().__init__(*args, **kwargs) self.create_provider = create_provider if app: self.init_app(app)
[docs] def init_app(self, app): """Initialize application :param app: Flask application or blueprint object to extend :type app: flask.Flask """ # Create a provider self.providers = self.create_provider(app.config) # Attached the extension to the app app.web3 = self