# -*- coding: utf-8 -*- ########################################################################### # Copyright (c), The AiiDA team. All rights reserved. # # This file is part of the AiiDA code. # # # # The code is hosted on GitHub at https://github.com/aiidateam/aiida-core # # For further information on the license, see the LICENSE.txt file # # For further information please visit http://www.aiida.net # ########################################################################### """ Module to get the backend instance from the Models instance """ try: # Python3 from functools import singledispatch except ImportError: # Python2 from singledispatch import singledispatch from aiida.backends.sqlalchemy.models.authinfo import DbAuthInfo from aiida.backends.sqlalchemy.models.comment import DbComment from aiida.backends.sqlalchemy.models.computer import DbComputer from aiida.backends.sqlalchemy.models.group import DbGroup from aiida.backends.sqlalchemy.models.log import DbLog from aiida.backends.sqlalchemy.models.node import DbNode from aiida.backends.sqlalchemy.models.user import DbUser __all__ = ('get_backend_entity',) # pylint: disable=cyclic-import ##################################################################### # Singledispatch to get the backend instance from the Models instance ##################################################################### [docs]@singledispatch def get_backend_entity(dbmodel, backend): # pylint: disable=unused-argument """ Default get_backend_entity """ raise TypeError( "No corresponding AiiDA backend class exists for the model class '{}'".format(dbmodel.__class__.__name__) ) ################################ # Singledispatch for SQLA Models ################################ @get_backend_entity.register(DbUser) def _(dbmodel, backend): """ get_backend_entity for SQLA DbUser """ from . import users return users.SqlaUser.from_dbmodel(dbmodel, backend) @get_backend_entity.register(DbGroup) def _(dbmodel, backend): """ get_backend_entity for SQLA DbGroup """ from . import groups return groups.SqlaGroup.from_dbmodel(dbmodel, backend) @get_backend_entity.register(DbComputer) def _(dbmodel, backend): """ get_backend_entity for SQLA DbGroup """ from . import computers return computers.SqlaComputer.from_dbmodel(dbmodel, backend) @get_backend_entity.register(DbNode) def _(dbmodel, backend): """ get_backend_entity for SQLA DbNode. It will return an ORM instance since there is not Node backend entity yet. """ from . import nodes return nodes.SqlaNode.from_dbmodel(dbmodel, backend) @get_backend_entity.register(DbAuthInfo) def _(dbmodel, backend): """ get_backend_entity for SQLA DbAuthInfo """ from . import authinfos return authinfos.SqlaAuthInfo.from_dbmodel(dbmodel, backend) @get_backend_entity.register(DbComment) def _(dbmodel, backend): """ Get the comment from the model """ from . import comments return comments.SqlaComment.from_dbmodel(dbmodel, backend) @get_backend_entity.register(DbLog) def _(dbmodel, backend): """ Get the comment from the model """ from . import logs return logs.SqlaLog.from_dbmodel(dbmodel, backend)