def get_app(config=None, init_elastic=False): """App factory. :param config: configuration that can override config from `settings.py` :return: a new SuperdeskEve app instance """ if config is None: config = {} config['APP_ABSPATH'] = os.path.abspath(os.path.dirname(__file__)) for key in dir(settings): if key.isupper(): config.setdefault(key, getattr(settings, key)) media_storage = None if config['AMAZON_CONTAINER_NAME']: from superdesk.storage.amazon.amazon_media_storage import AmazonMediaStorage media_storage = AmazonMediaStorage config['DOMAIN'] = {} app = superdesk_app(config, media_storage, init_elastic=init_elastic) configure_logging(config['LOG_CONFIG_FILE']) return app
def get_app(config=None): """App factory. :param config: configuration that can override config from `settings.py` :return: a new SuperdeskEve app instance """ if config is None: config = {} config['APP_ABSPATH'] = os.path.abspath(os.path.dirname(__file__)) for key in dir(settings): if key.isupper(): config.setdefault(key, getattr(settings, key)) media_storage = None if config['AMAZON_CONTAINER_NAME']: from superdesk.storage.amazon.amazon_media_storage import AmazonMediaStorage media_storage = AmazonMediaStorage config['DOMAIN'] = {} app = superdesk_app(config, media_storage) configure_logging(config['LOG_CONFIG_FILE']) return app
def get_app(config=None): if config is None: config = {} config['APP_ABSPATH'] = path.abspath(path.dirname(__file__)) for key in dir(settings): if key.isupper(): config.setdefault(key, getattr(settings, key)) config['DOMAIN'] = {} app = superdesk_app(config) configure_logging(config['LOG_CONFIG_FILE']) return app
def __init__(self, import_name=__package__, config=None, testing=False, **kwargs): """Override __init__ to do Newsroom specific config and still be able to create an instance using ``app = Newsroom()`` """ self._testing = testing self._general_settings = {} self.babel_tzinfo = None self.babel_locale = None self.babel_translations = None self.mail = None self.cache = None super(NewsroomApp, self).__init__( import_name, data=self.DATALAYER, auth=self.AUTH_SERVICE, template_folder=os.path.join(NEWSROOM_DIR, 'templates'), static_folder=os.path.join(NEWSROOM_DIR, 'static'), validator=SuperdeskValidator, **kwargs) self.json_encoder = SuperdeskJSONEncoder self.data.json_encoder_class = SuperdeskJSONEncoder if config: try: self.config.update(config or {}) except TypeError: self.config.from_object(config) newsroom.flask_app = self self.settings = self.config self.setup_media_storage() self.setup_babel() self.setup_blueprints(self.config['BLUEPRINTS']) self.setup_apps(self.config['CORE_APPS']) self.setup_apps(self.config.get('INSTALLED_APPS', [])) self.setup_email() self.setup_cache() self.setup_error_handlers() configure_logging(self.config.get('LOG_CONFIG_FILE'))
def get_app(config=None): """App factory. :param config: configuration that can override config from `settings.py` :return: a new SuperdeskEve app instance """ if config is None: config = {} config['APP_ABSPATH'] = os.path.abspath(os.path.dirname(__file__)) for key in dir(settings): if key.isupper(): config.setdefault(key, getattr(settings, key)) config['DOMAIN'] = {} app = superdesk_app(config) configure_logging(config['LOG_CONFIG_FILE']) return app
def get_app(config=None, media_storage=None, config_object=None): """App factory. :param config: configuration that can override config from `default_settings.py` :param media_storage: media storage class to use :param config_object: config object to load (can be module name, module or an object) :return: a new SuperdeskEve app instance """ abs_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) app_config = flask.Config(abs_path) app_config.from_object('superdesk.factory.default_settings') app_config.setdefault('APP_ABSPATH', abs_path) app_config.setdefault('DOMAIN', {}) app_config.setdefault('SOURCES', {}) if config_object: app_config.from_object(config_object) try: app_config.update(config or {}) except TypeError: app_config.from_object(config) if not media_storage and app_config.get('AMAZON_CONTAINER_NAME'): media_storage = AmazonMediaStorage elif not media_storage: media_storage = SuperdeskGridFSMediaStorage app = eve.Eve(data=SuperdeskDataLayer, auth=TokenAuth, media=media_storage, settings=app_config, json_encoder=MongoJSONEncoder, validator=SuperdeskValidator, template_folder=os.path.join(abs_path, 'templates')) superdesk.app = app custom_loader = jinja2.ChoiceLoader([ app.jinja_loader, jinja2.FileSystemLoader([abs_path + '/../templates']) ]) app.jinja_loader = custom_loader app.mail = Mail(app) app.sentry = SuperdeskSentry(app) @app.errorhandler(SuperdeskError) def client_error_handler(error): """Return json error response. :param error: an instance of :attr:`superdesk.SuperdeskError` class """ return send_response(None, (error.to_dict(), None, None, error.status_code)) @app.errorhandler(500) def server_error_handler(error): """Log server errors.""" app.sentry.captureException() superdesk.logger.exception(error) return_error = SuperdeskApiError.internalError() return client_error_handler(return_error) init_celery(app) for module_name in app.config.get('INSTALLED_APPS', []): app_module = importlib.import_module(module_name) try: app_module.init_app(app) except AttributeError: pass for resource in superdesk.DOMAIN: app.register_resource(resource, superdesk.DOMAIN[resource]) for blueprint in superdesk.BLUEPRINTS: prefix = app.api_prefix or None app.register_blueprint(blueprint, url_prefix=prefix) for name, jinja_filter in superdesk.JINJA_FILTERS.items(): app.jinja_env.filters[name] = jinja_filter # we can only put mapping when all resources are registered app.data.init_elastic(app) # instantiate registered provider classes (leave non-classes intact) for key, provider in registered_feeding_services.items(): registered_feeding_services[key] = provider() if isinstance( provider, type) else provider configure_logging(app.config['LOG_CONFIG_FILE']) return app
#!/usr/bin/env python # -*- coding: utf-8; -*- # # This file is part of Superdesk. # # Copyright 2013, 2014, 2015 Sourcefabric z.u. and contributors. # # For the full copyright and license information, please see the # AUTHORS and LICENSE files distributed with this source code, or # at https://www.sourcefabric.org/superdesk/license import logging from settings import WS_HOST, WS_PORT, LOG_CONFIG_FILE, BROKER_URL from superdesk.ws import create_server from superdesk.logging import configure_logging logger = logging.getLogger(__name__) if __name__ == "__main__": config = {"WS_HOST": WS_HOST, "WS_PORT": WS_PORT, "BROKER_URL": BROKER_URL} configure_logging(LOG_CONFIG_FILE) create_server(config)
def get_app(config=None, media_storage=None, config_object=None, init_elastic=None): """App factory. :param config: configuration that can override config from ``default_settings.py`` :param media_storage: media storage class to use :param config_object: config object to load (can be module name, module or an object) :param init_elastic: obsolete config - kept there for BC :return: a new SuperdeskEve app instance """ abs_path = SUPERDESK_PATH app_config = flask.Config(abs_path) app_config.from_object('superdesk.default_settings') app_config.setdefault('APP_ABSPATH', abs_path) app_config.setdefault('DOMAIN', {}) app_config.setdefault('SOURCES', {}) if config_object: app_config.from_object(config_object) try: app_config.update(config or {}) except TypeError: app_config.from_object(config) if not media_storage and app_config.get('AMAZON_CONTAINER_NAME'): media_storage = AmazonMediaStorage elif not media_storage: media_storage = SuperdeskGridFSMediaStorage app = SuperdeskEve(data=SuperdeskDataLayer, auth=TokenAuth, media=media_storage, settings=app_config, json_encoder=SuperdeskJSONEncoder, validator=SuperdeskValidator, template_folder=os.path.join(abs_path, 'templates')) app.jinja_options = {'autoescape': False} app.json_encoder = SuperdeskJSONEncoder # seems like eve param doesn't set it on flask # init client_config with default config app.client_config = { 'content_expiry_minutes': app.config.get('CONTENT_EXPIRY_MINUTES', 0), 'ingest_expiry_minutes': app.config.get('INGEST_EXPIRY_MINUTES', 0) } superdesk.app = app custom_loader = jinja2.ChoiceLoader([ jinja2.FileSystemLoader('templates'), jinja2.FileSystemLoader(os.path.join(SUPERDESK_PATH, 'templates')), ]) app.jinja_loader = custom_loader app.mail = Mail(app) app.sentry = SuperdeskSentry(app) # setup babel app.config.setdefault('BABEL_TRANSLATION_DIRECTORIES', os.path.join(SUPERDESK_PATH, 'translations')) app.babel_tzinfo = None app.babel_locale = None app.babel_translations = None babel = Babel(app, configure_jinja=False) @babel.localeselector def get_locale(): user = getattr(g, 'user', {}) user_language = user.get('language', app.config.get('DEFAULT_LANGUAGE', 'en')) try: # Attempt to load the local using Babel.parse_local parse_locale(user_language.replace('-', '_')) except ValueError: # If Babel fails to recognise the locale, then use the default language user_language = app.config.get('DEFAULT_LANGUAGE', 'en') return user_language.replace('-', '_') set_error_handlers(app) @app.after_request def after_request(response): # fixing previous media prefixes if defined if app.config['MEDIA_PREFIXES_TO_FIX'] and app.config['MEDIA_PREFIX']: current_prefix = app.config['MEDIA_PREFIX'].rstrip('/').encode() for prefix in app.config['MEDIA_PREFIXES_TO_FIX']: response.data = response.data.replace( prefix.rstrip('/').encode(), current_prefix) return response init_celery(app) installed = set() def install_app(module_name): if module_name in installed: return installed.add(module_name) app_module = importlib.import_module(module_name) if hasattr(app_module, 'init_app'): app_module.init_app(app) for module_name in app.config.get('CORE_APPS', []): install_app(module_name) for module_name in app.config.get('INSTALLED_APPS', []): install_app(module_name) for resource in superdesk.DOMAIN: app.register_resource(resource, superdesk.DOMAIN[resource]) for name, jinja_filter in superdesk.JINJA_FILTERS.items(): app.jinja_env.filters[name] = jinja_filter configure_logging(app.config['LOG_CONFIG_FILE']) return app
def get_app(config=None, media_storage=None, config_object=None): """App factory. :param config: configuration that can override config from `default_settings.py` :param media_storage: media storage class to use :param config_object: config object to load (can be module name, module or an object) :return: a new SuperdeskEve app instance """ abs_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) app_config = flask.Config(abs_path) app_config.from_object('superdesk.default_settings') app_config.setdefault('APP_ABSPATH', abs_path) app_config.setdefault('DOMAIN', {}) app_config.setdefault('SOURCES', {}) if config_object: app_config.from_object(config_object) try: app_config.update(config or {}) except TypeError: app_config.from_object(config) if not media_storage and app_config.get('AMAZON_CONTAINER_NAME'): media_storage = AmazonMediaStorage elif not media_storage: media_storage = SuperdeskGridFSMediaStorage app = eve.Eve( data=SuperdeskDataLayer, auth=TokenAuth, media=media_storage, settings=app_config, json_encoder=MongoJSONEncoder, validator=SuperdeskValidator, template_folder=os.path.join(abs_path, 'templates')) superdesk.app = app custom_loader = jinja2.ChoiceLoader([ jinja2.FileSystemLoader('templates'), jinja2.FileSystemLoader(os.path.join( os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'templates'))]) app.jinja_loader = custom_loader app.mail = Mail(app) app.sentry = SuperdeskSentry(app) @app.errorhandler(SuperdeskError) def client_error_handler(error): """Return json error response. :param error: an instance of :attr:`superdesk.SuperdeskError` class """ return send_response(None, (error.to_dict(), None, None, error.status_code)) @app.errorhandler(500) def server_error_handler(error): """Log server errors.""" app.sentry.captureException() superdesk.logger.exception(error) return_error = SuperdeskApiError.internalError() return client_error_handler(return_error) init_celery(app) installed = set() def install_app(module_name): if module_name in installed: return installed.add(module_name) app_module = importlib.import_module(module_name) try: app_module.init_app(app) except AttributeError: pass for module_name in app.config.get('INSTALLED_APPS', []): install_app(module_name) for module_name in app.config.get('CORE_APPS', []): install_app(module_name) for resource in superdesk.DOMAIN: app.register_resource(resource, superdesk.DOMAIN[resource]) for blueprint in superdesk.BLUEPRINTS: prefix = app.api_prefix or None app.register_blueprint(blueprint, url_prefix=prefix) for name, jinja_filter in superdesk.JINJA_FILTERS.items(): app.jinja_env.filters[name] = jinja_filter if not app_config.get('SUPERDESK_TESTING', False): # we can only put mapping when all resources are registered app.data.init_elastic(app) # instantiate registered provider classes (leave non-classes intact) for key, provider in registered_feeding_services.items(): registered_feeding_services[key] = provider() if isinstance(provider, type) else provider configure_logging(app.config['LOG_CONFIG_FILE']) return app
def get_app(config=None, media_storage=None, config_object=None, init_elastic=None): """App factory. :param config: configuration that can override config from ``default_settings.py`` :param media_storage: media storage class to use :param config_object: config object to load (can be module name, module or an object) :param init_elastic: obsolete config - kept there for BC :return: a new SuperdeskEve app instance """ abs_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) app_config = flask.Config(abs_path) app_config.from_object('superdesk.default_settings') app_config.setdefault('APP_ABSPATH', abs_path) app_config.setdefault('DOMAIN', {}) app_config.setdefault('SOURCES', {}) if config_object: app_config.from_object(config_object) try: app_config.update(config or {}) except TypeError: app_config.from_object(config) if not media_storage and app_config.get('AMAZON_CONTAINER_NAME'): media_storage = AmazonMediaStorage elif not media_storage: media_storage = SuperdeskGridFSMediaStorage app = SuperdeskEve( data=SuperdeskDataLayer, auth=TokenAuth, media=media_storage, settings=app_config, json_encoder=MongoJSONEncoder, validator=SuperdeskValidator, template_folder=os.path.join(abs_path, 'templates')) app.jinja_options = {'autoescape': False} # init client_config with default config app.client_config = { 'content_expiry_minutes': app.config.get('CONTENT_EXPIRY_MINUTES', 0), 'ingest_expiry_minutes': app.config.get('INGEST_EXPIRY_MINUTES', 0) } superdesk.app = app custom_loader = jinja2.ChoiceLoader([ jinja2.FileSystemLoader('templates'), jinja2.FileSystemLoader(os.path.join( os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'templates'))]) app.jinja_loader = custom_loader app.mail = Mail(app) app.sentry = SuperdeskSentry(app) @app.errorhandler(SuperdeskError) def client_error_handler(error): """Return json error response. :param error: an instance of :attr:`superdesk.SuperdeskError` class """ return send_response(None, (error.to_dict(), None, None, error.status_code)) @app.errorhandler(403) def server_forbidden_handler(error): return send_response(None, ({'code': 403, 'error': error.response}, None, None, 403)) @app.errorhandler(500) def server_error_handler(error): """Log server errors.""" return_error = SuperdeskApiError.internalError(error) return client_error_handler(return_error) @app.after_request def after_request(response): # fixing previous media prefixes if defined if app.config['MEDIA_PREFIXES_TO_FIX'] and app.config['MEDIA_PREFIX']: current_prefix = app.config['MEDIA_PREFIX'].rstrip('/').encode() for prefix in app.config['MEDIA_PREFIXES_TO_FIX']: response.data = response.data.replace( prefix.rstrip('/').encode(), current_prefix ) return response init_celery(app) installed = set() def install_app(module_name): if module_name in installed: return installed.add(module_name) app_module = importlib.import_module(module_name) if hasattr(app_module, 'init_app'): app_module.init_app(app) for module_name in app.config.get('CORE_APPS', []): install_app(module_name) for module_name in app.config.get('INSTALLED_APPS', []): install_app(module_name) for resource in superdesk.DOMAIN: app.register_resource(resource, superdesk.DOMAIN[resource]) for name, jinja_filter in superdesk.JINJA_FILTERS.items(): app.jinja_env.filters[name] = jinja_filter # instantiate registered provider classes (leave non-classes intact) for key, provider in registered_feeding_services.items(): registered_feeding_services[key] = provider() if isinstance(provider, type) else provider configure_logging(app.config['LOG_CONFIG_FILE']) return app
#!/usr/bin/env python # -*- coding: utf-8; -*- # # This file is part of Superdesk. # # Copyright 2013, 2014, 2015 Sourcefabric z.u. and contributors. # # For the full copyright and license information, please see the # AUTHORS and LICENSE files distributed with this source code, or # at https://www.sourcefabric.org/superdesk/license import logging from settings import WS_HOST, WS_PORT, LOG_CONFIG_FILE from superdesk.ws import create_server from superdesk.logging import configure_logging logger = logging.getLogger(__name__) if __name__ == '__main__': config = { 'WS_HOST': WS_HOST, 'WS_PORT': WS_PORT } configure_logging(LOG_CONFIG_FILE) create_server(config)
def get_app(config=None, media_storage=None, config_object=None, init_elastic=True): """App factory. :param config: configuration that can override config from ``default_settings.py`` :param media_storage: media storage class to use :param config_object: config object to load (can be module name, module or an object) :param init_elastic: should it init elastic indexes or not :return: a new SuperdeskEve app instance """ abs_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) app_config = flask.Config(abs_path) app_config.from_object('superdesk.default_settings') app_config.setdefault('APP_ABSPATH', abs_path) app_config.setdefault('DOMAIN', {}) app_config.setdefault('SOURCES', {}) if config_object: app_config.from_object(config_object) try: app_config.update(config or {}) except TypeError: app_config.from_object(config) if not media_storage and app_config.get('AMAZON_CONTAINER_NAME'): media_storage = AmazonMediaStorage elif not media_storage: media_storage = SuperdeskGridFSMediaStorage app = SuperdeskEve(data=SuperdeskDataLayer, auth=TokenAuth, media=media_storage, settings=app_config, json_encoder=MongoJSONEncoder, validator=SuperdeskValidator, template_folder=os.path.join(abs_path, 'templates')) app.init_indexes = init_elastic app.jinja_options = {'autoescape': False} superdesk.app = app custom_loader = jinja2.ChoiceLoader([ jinja2.FileSystemLoader('templates'), jinja2.FileSystemLoader( os.path.join( os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'templates')) ]) app.jinja_loader = custom_loader app.mail = Mail(app) app.sentry = SuperdeskSentry(app) @app.errorhandler(SuperdeskError) def client_error_handler(error): """Return json error response. :param error: an instance of :attr:`superdesk.SuperdeskError` class """ return send_response(None, (error.to_dict(), None, None, error.status_code)) @app.errorhandler(500) def server_error_handler(error): """Log server errors.""" return_error = SuperdeskApiError.internalError(error) return client_error_handler(return_error) init_celery(app) installed = set() def install_app(module_name): if module_name in installed: return installed.add(module_name) app_module = importlib.import_module(module_name) if hasattr(app_module, 'init_app'): app_module.init_app(app) for module_name in app.config.get('CORE_APPS', []): install_app(module_name) for module_name in app.config.get('INSTALLED_APPS', []): install_app(module_name) for resource in superdesk.DOMAIN: app.register_resource(resource, superdesk.DOMAIN[resource]) for name, jinja_filter in superdesk.JINJA_FILTERS.items(): app.jinja_env.filters[name] = jinja_filter if not app_config.get('SUPERDESK_TESTING', False) and init_elastic: # we can only put mapping when all resources are registered app.data.init_elastic(app) # instantiate registered provider classes (leave non-classes intact) for key, provider in registered_feeding_services.items(): registered_feeding_services[key] = provider() if isinstance( provider, type) else provider configure_logging(app.config['LOG_CONFIG_FILE']) return app