Exemplo n.º 1
0
    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
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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
Exemplo n.º 11
0
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
Exemplo n.º 12
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__
            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)]
Exemplo n.º 13
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)]
Exemplo n.º 14
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)
Exemplo n.º 15
0
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)
Exemplo n.º 16
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)

    # 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)
Exemplo n.º 17
0
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)
Exemplo n.º 18
0
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])
Exemplo n.º 19
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)

    # 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)
Exemplo n.º 20
0
def get_all(app):
    return get_enabled('udata.harvesters', app)
Exemplo n.º 21
0
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)