Source code for invenio_migrator.ext

# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2016 CERN.
#
# Invenio is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# Invenio is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Invenio; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307, USA.
#
# In applying this license, CERN does not
# waive the privileges and immunities granted to it by virtue of its status
# as an Intergovernmental Organization or submit itself to any jurisdiction.

"""Utilities for migrating past Invenio versions to Invenio 3.0."""

from __future__ import absolute_import, print_function

from werkzeug.utils import cached_property, import_string

from .cli import dumps
from .records import RecordDump, RecordDumpLoader


[docs]def config_imp_or_default(app, config_var_imp, default): """Import config var import path or use default value.""" imp = app.config.get(config_var_imp) return import_string(imp) if imp else default
class _InvenioMigratorState(object): """State object for migrator.""" def __init__(self, app): """State initialization.""" self.app = app @cached_property def records_dump_cls(self): return config_imp_or_default( self.app, 'MIGRATOR_RECORDS_DUMP_CLS', RecordDump) @cached_property def records_dumploader_cls(self): return config_imp_or_default( self.app, 'MIGRATOR_RECORDS_DUMPLOADER_CLS', RecordDumpLoader) @cached_property def records_pid_fetchers(self): return [ import_string(imp) for imp in self.app.config.get('MIGRATOR_RECORDS_PID_FETCHERS', []) ] @cached_property def records_post_task(self): return config_imp_or_default( self.app, 'MIGRATOR_RECORDS_POST_TASK', None)
[docs]class InvenioMigrator(object): """Invenio-Migrator extension.""" def __init__(self, app=None): """Extension initialization.""" if app: self._state = self.init_app(app)
[docs] def init_app(self, app): """Flask application initialization.""" self.init_config(app.config) state = _InvenioMigratorState(app) app.extensions['invenio-migrator'] = state app.cli.add_command(dumps) return state
[docs] def init_config(self, config): """Initialize config.""" config.setdefault('MIGRATOR_FILES_POST_TASK', None) config.setdefault('MIGRATOR_RECORDS_POST_TASK', None) config.setdefault('MIGRATOR_RECORDS_PID_FETCHERS', [])
def __getattr__(self, name): """Proxy to state object.""" return getattr(self._state, name, None)