# -*- 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)