def load_udata_commands(self, ctx): ''' Load udata commands from: - `udata.commands.*` module - known internal modules with commands - plugins exporting a `udata.commands` entrypoint ''' if self._udata_commands_loaded: return # Load all commands submodules pattern = os.path.join(os.path.dirname(__file__), '[!_]*.py') for filename in iglob(pattern): module = os.path.splitext(os.path.basename(filename))[0] try: __import__('udata.commands.{0}'.format(module)) except Exception as e: error('Unable to import {0}'.format(module), e) # Load all core modules commands for module in MODULES_WITH_COMMANDS: try: __import__('udata.{0}.commands'.format(module)) except Exception as e: error('Unable to import {0}'.format(module), e) # Load commands from entry points for enabled plugins app = ctx.ensure_object(ScriptInfo).load_app() entrypoints.get_enabled('udata.commands', app) # Ensure loading happens once self._udata_commands_loaded = False
def init_app(app, views=None): views = views or VIEWS init_markdown(app) for view in views: _load_views(app, 'udata.{}.views'.format(view)) # Load hook blueprint app.register_blueprint(hook) # Load all plugins views and blueprints for module in entrypoints.get_enabled('udata.views', app).values(): _load_views(app, module) # Load all plugins views and blueprints for module in entrypoints.get_enabled('udata.front', app).values(): front_module = module if inspect.ismodule(module) else import_module(module) front_module.init_app(app) # Load core manifest with app.app_context(): assets.register_manifest('udata') for dist in entrypoints.get_plugins_dists(app, 'udata.views'): if assets.has_manifest(dist.project_name): assets.register_manifest(dist.project_name)
def init_app(app): celery.main = app.import_name db, url = default_scheduler_config(app.config['MONGODB_HOST']) app.config.setdefault('CELERY_MONGODB_SCHEDULER_DB', db) app.config.setdefault('CELERY_MONGODB_SCHEDULER_URL', url) celery.conf.update(**dict( (k.replace('CELERY_', '').lower(), v) for k, v in app.config.items() if k.startswith('CELERY_') )) ContextTask.current_app = app # Load core tasks import udata.core.metrics.tasks # noqa import udata.core.tags.tasks # noqa import udata.core.activity.tasks # noqa import udata.core.dataset.tasks # noqa import udata.core.reuse.tasks # noqa import udata.core.user.tasks # noqa import udata.core.organization.tasks # noqa import udata.core.followers.tasks # noqa import udata.core.issues.tasks # noqa import udata.core.discussions.tasks # noqa import udata.core.badges.tasks # noqa import udata.core.storages.tasks # noqa import udata.harvest.tasks # noqa entrypoints.get_enabled('udata.tasks', app) return celery
def init_app(app): celery.main = app.import_name db, url = default_scheduler_config(app.config['MONGODB_HOST']) app.config.setdefault('CELERY_MONGODB_SCHEDULER_DB', db) app.config.setdefault('CELERY_MONGODB_SCHEDULER_URL', url) celery.conf.update(**dict( (k.replace('CELERY_', '').lower(), v) for k, v in app.config.items() if k.startswith('CELERY_') )) ContextTask.current_app = app # Load core tasks import udata.core.metrics.tasks # noqa import udata.core.tags.tasks # noqa import udata.core.activity.tasks # noqa import udata.core.dataset.tasks # noqa import udata.core.reuse.tasks # noqa import udata.core.user.tasks # noqa import udata.core.organization.tasks # noqa import udata.core.followers.tasks # noqa import udata.core.issues.tasks # noqa import udata.core.discussions.tasks # noqa import udata.core.badges.tasks # noqa import udata.core.storages.tasks # noqa import udata.harvest.tasks # noqa entrypoints.get_enabled('udata.tasks', app) return celery
def init_app(app): # Load all core metrics import udata.core.user.metrics # noqa import udata.core.organization.metrics # noqa import udata.core.discussions.metrics # noqa import udata.core.reuse.metrics # noqa import udata.core.followers.metrics # noqa # Load metrics from plugins entrypoints.get_enabled('udata.metrics', app)
def init_app(app): # Load all core metrics import udata.core.site.metrics # noqa import udata.core.user.metrics # noqa import udata.core.issues.metrics # noqa import udata.core.discussions.metrics # noqa import udata.core.dataset.metrics # noqa import udata.core.reuse.metrics # noqa import udata.core.organization.metrics # noqa import udata.core.followers.metrics # noqa # Load metrics from plugins entrypoints.get_enabled('udata.metrics', app)
def init_app(app): # Load all core APIs import udata.core.activity.api # noqa import udata.core.spatial.api # noqa import udata.core.metrics.api # noqa import udata.core.user.api # noqa import udata.core.dataset.api # noqa import udata.core.dataset.apiv2 # noqa import udata.core.discussions.api # noqa import udata.core.reuse.api # noqa import udata.core.reuse.apiv2 # noqa import udata.core.organization.api # noqa import udata.core.organization.apiv2 # noqa import udata.core.followers.api # noqa import udata.core.jobs.api # noqa import udata.core.site.api # noqa import udata.core.tags.api # noqa import udata.core.topic.api # noqa import udata.core.post.api # noqa import udata.features.transfer.api # noqa import udata.features.notifications.api # noqa import udata.features.identicon.api # noqa import udata.features.territories.api # noqa import udata.harvest.api # noqa for module in entrypoints.get_enabled('udata.apis', app).values(): api_module = module if inspect.ismodule(module) else import_module(module) # api.init_app(app) app.register_blueprint(apiv1_blueprint) app.register_blueprint(apiv2_blueprint) oauth2.init_app(app) cors.init_app(app)
def register_features(app): from udata.features import notifications notifications.init_app(app) for ep in entrypoints.get_enabled('udata.plugins', app).values(): ep.init_app(app)
def register_features(app): from udata.features import notifications notifications.init_app(app) for ep in entrypoints.get_enabled('udata.plugins', app).values(): ep.init_app(app)
def get(name): '''Get a linkchecker given its name or fallback on default''' linkcheckers = get_enabled(ENTRYPOINT, current_app) linkcheckers.update(no_check=NoCheckLinkchecker) # no_check always enabled selected_linkchecker = linkcheckers.get(name) if not selected_linkchecker: default_linkchecker = current_app.config.get( 'LINKCHECKING_DEFAULT_LINKCHECKER') selected_linkchecker = linkcheckers.get(default_linkchecker) if not selected_linkchecker: log.error( 'No linkchecker found ({} requested and no fallback)'.format(name)) return selected_linkchecker
def get(name): '''Get a linkchecker given its name or fallback on default''' linkcheckers = get_enabled(ENTRYPOINT, current_app) linkcheckers.update(no_check=NoCheckLinkchecker) # no_check always enabled selected_linkchecker = linkcheckers.get(name) if not selected_linkchecker: default_linkchecker = current_app.config.get( 'LINKCHECKING_DEFAULT_LINKCHECKER') selected_linkchecker = linkcheckers.get(default_linkchecker) if not selected_linkchecker: log.error('No linkchecker found ({} requested and no fallback)'.format( name)) return selected_linkchecker
def get_enabled_plugins(): ''' Returns enabled preview plugins. Plugins are sorted, defaults come last ''' plugins = entrypoints.get_enabled('udata.preview', current_app).values() valid = [p for p in plugins if issubclass(p, PreviewPlugin)] for plugin in plugins: if plugin not in valid: clsname = plugin.__name__ warnings.warn('{0} is not a valid preview plugin'.format(clsname)) return [p() for p in sorted(valid, key=lambda p: 1 if p.fallback else 0)]
def get_enabled_plugins(): ''' Returns enabled preview plugins. Plugins are sorted, defaults come last ''' plugins = entrypoints.get_enabled('udata.preview', current_app).values() valid = [p for p in plugins if issubclass(p, PreviewPlugin)] for plugin in plugins: if plugin not in valid: clsname = plugin.__name__ msg = '{0} is not a valid preview plugin'.format(clsname) warnings.warn(msg, PreviewWarning) return [p() for p in sorted(valid, key=lambda p: 1 if p.fallback else 0)]
def init_app(app, views=None): views = views or VIEWS init_markdown(app) from . import helpers, error_handlers # noqa for view in views: _load_views(app, 'udata.{}.views'.format(view)) # Load all plugins views and blueprints for module in entrypoints.get_enabled('udata.views', app).values(): _load_views(app, module) # Load core manifest with app.app_context(): assets.register_manifest('udata') for dist in entrypoints.get_plugins_dists(app, 'udata.views'): if assets.has_manifest(dist.project_name): assets.register_manifest(dist.project_name) # Optionally register debug views if app.config.get('DEBUG'): @front.route('/403/') def test_403(): abort(403) @front.route('/404/') def test_404(): abort(404) @front.route('/500/') def test_500(): abort(500) # Load front only views and helpers app.register_blueprint(front) # Enable CDN if required if app.config['CDN_DOMAIN'] is not None: from flask_cdn import CDN CDN(app) # Load debug toolbar if enabled if app.config.get('DEBUG_TOOLBAR'): from flask_debugtoolbar import DebugToolbarExtension DebugToolbarExtension(app)
def list_available(): ''' List available migrations for udata and enabled plugins Each row is a tuple with following signature: (plugin, package, filename) ''' migrations = [] migrations.extend(_iter('udata', 'udata')) plugins = entrypoints.get_enabled('udata.models', current_app) for plugin, module in plugins.items(): migrations.extend(_iter(plugin, module)) return sorted(migrations, key=lambda m: m.filename)
def init_app(app, views=None): views = views or VIEWS init_markdown(app) from . import helpers, error_handlers # noqa for view in views: _load_views(app, 'udata.{}.views'.format(view)) # Load all plugins views and blueprints for module in entrypoints.get_enabled('udata.views', app).values(): _load_views(app, module) # Load core manifest with app.app_context(): assets.register_manifest('udata') for dist in entrypoints.get_plugins_dists(app, 'udata.views'): if assets.has_manifest(dist.project_name): assets.register_manifest(dist.project_name) # Optionnaly register debug views if app.config.get('DEBUG'): @front.route('/403/') def test_403(): abort(403) @front.route('/404/') def test_404(): abort(404) @front.route('/500/') def test_500(): abort(500) # Load front only views and helpers app.register_blueprint(front) # Enable CDN if required if app.config['CDN_DOMAIN'] is not None: from flask_cdn import CDN CDN(app) # Load debug toolbar if enabled if app.config.get('DEBUG_TOOLBAR'): from flask_debugtoolbar import DebugToolbarExtension DebugToolbarExtension(app)
def init_app(app): from udata_gouvfr import theme nav.init_app(app) theme.init_app(app) from . import helpers, error_handlers # noqa if app.config['RESOURCES_SCHEMAGOUVFR_ENABLED']: VIEWS.append('schema') for view in VIEWS: _load_views(app, 'udata_gouvfr.views.{}'.format(view)) # Load all plugins views and blueprints for module in entrypoints.get_enabled('udata.views', app).values(): _load_views(app, module) # Optionally register debug views if app.config.get('DEBUG'): @front.route('/403/') def test_403(): abort(403) @front.route('/404/') def test_404(): abort(404) @front.route('/500/') def test_500(): abort(500) # Load front only views and helpers app.register_blueprint(front) # Enable CDN if required if app.config['CDN_DOMAIN'] is not None: from flask_cdn import CDN CDN(app) # Load debug toolbar if enabled if app.config.get('DEBUG_TOOLBAR'): from flask_debugtoolbar import DebugToolbarExtension DebugToolbarExtension(app)
def available_migrations(): ''' List available migrations for udata and enabled plugins Each row is tuple with following signature: (plugin, package, filename) ''' migrations = [] for filename in resource_listdir('udata', 'migrations'): if filename.endswith('.js'): migrations.append(('udata', 'udata', filename)) plugins = entrypoints.get_enabled('udata.models', current_app) for plugin, module in plugins.items(): if resource_isdir(module.__name__, 'migrations'): for filename in resource_listdir(module.__name__, 'migrations'): if filename.endswith('.js'): migrations.append((plugin, module.__name__, filename)) return sorted(migrations, key=lambda r: r[2])
def init_app(app, views=None): views = views or VIEWS init_markdown(app) from . import helpers, error_handlers # noqa for view in views: _load_views(app, 'udata.{}.views'.format(view)) # Load all plugins views and blueprints for module in entrypoints.get_enabled('udata.views', app).values(): _load_views(app, module) # Optionnaly register debug views if app.config.get('DEBUG'): @front.route('/403/') def test_403(): abort(403) @front.route('/404/') def test_404(): abort(404) @front.route('/500/') def test_500(): abort(500) # Load front only views and helpers app.register_blueprint(front) # Load debug toolbar if enabled if app.config.get('DEBUG_TOOLBAR'): from flask_debugtoolbar import DebugToolbarExtension DebugToolbarExtension(app)
def get_all(app): return get_enabled('udata.harvesters', app)
def init_app(app): validate_config(app.config) if app.config['TESTING']: build_test_config(app.config) db.init_app(app) entrypoints.get_enabled('udata.models', app)