Source code for flask_via

# -*- coding: utf-8 -*-

"""
flask_via
---------
"""

from flask_via.exceptions import ImproperlyConfigured
from importlib import import_module


[docs]class RoutesImporter(object): """ Handles the import of routes module and obtaining a list of routes from that module as well as loading each route onto the application .. versionadded:: 2014.05.06 """
[docs] def include(self, routes_module, routes_name): """ Imports a routes module and gets the routes from within that module and returns them. Arguments --------- routes_module : str Python dotted path to routes module routes_name : str Module attribute name to use when attempted to get the routes Returns ------- list List of routes in the module Raises ------ ImportError If the route module cannot be imported AttributeError If routes do not exist in the moduke """ # Import the moduke module = import_module(routes_module) # Get the routes from the module routes = getattr(module, routes_name) return routes
[docs] def load(self, app, routes, **kwargs): """ Loads passed routes onto the application by calling each routes ``add_to_app`` method which must be implemented by the route class. """ for route in routes: route.add_to_app(app, **kwargs)
[docs]class Via(RoutesImporter): """ Flask-VIa integration into Flask applications. Flask-Via can be integrated in two different ways depending on how you have setup your Flask application. .. versionadded:: 2014.05.06 You can bind to a specific flask application:: from flask import Flask from flask.ext.via import Via from flask.ext.via.routers.flask import Functional app = Flask(__name__) def foo(bar=None): return 'Foo View!' routes = [ Functional('/foo', foo), Functional('/foo/<bar>', foo, endpoint='foo2'), ] via = Via(app, routes_module='path.to.here') if __name__ == "__main__": app.run(debug=True) Or if you use an application factory you can use :meth:`flask_via.Via.init_app`:: from flask import Flask from flask.ext.via import Via from flask.ext.via.routers.flask import Functional via = Via() def foo(bar=None): return 'Foo View!' routes = [ Functional('/foo', foo), Functional('/foo/<bar>', foo, endpoint='foo2'), ] def create_app(): app = Flask(__name__) via.init_app(app) return app app = create_app() if __name__ == "__main__": app.run(debug=True) """ def __init__(self, app=None, *args, **kwargs): """ Constructor. Functionalally acts as a proxy to :meth:`flask_store.Store.init_app`. .. versionadded:: 2014.05.19.2 Key Arguments ------------- app : flask.app.Flask, optional Optional Flask application instance, default None """ if app: self.init_app(app, *args, **kwargs)
[docs] def init_app( self, app, routes_module=None, routes_name=None, **kwargs): """ Initialises Flask extension. Bootstraps the automatic route registration process. .. versionchanged:: 2014.05.19 * Replace ``NotImplementedError`` with ``ImproperlyConfigured`` * ``routes_name`` keyword argument default value set to ``None`` * ``routes_name`` can now be configured using ``VIA_ROUTES_NAME`` app configuration variable. If ``routes_name`` keyword argument and ``VIA_ROUTES_NAME`` are not configured the default will be routes. .. versionchanged:: 2014.05.19.2 * Improved ``init_app`` method Arguments --------- app : flask.app.Flask Flask application instance Keyword Arguments ----------------- route_module : str, optional Python dotted path to where routes are defined, defaults to ``None`` routes_name : str, optional Within the routes module look for a variable of this name, defaults to ``None`` \*\*kwargs Arbitrary keyword arguments passed to ``add_url_rule`` Raises ------ ImproperlyConfigured If ``VIA_ROUTES_MODULE`` is not configured in appluication config and ``route_module`` keyword argument has not been provided. """ app.config.setdefault('VIA_ROUTES_MODULE', routes_module) app.config.setdefault('VIA_ROUTES_NAME', routes_name or 'routes') if not app.config['VIA_ROUTES_MODULE']: raise ImproperlyConfigured( 'VIA_ROUTES_MODULE is not defined in application ' 'configuration.') routes_module = app.config['VIA_ROUTES_MODULE'] routes_name = app.config['VIA_ROUTES_NAME'] # Get the routes routes = self.include(routes_module, routes_name) # Load the routes self.load(app, routes, **kwargs)

http://thisissoon.com

Related Topics