Source code for aiida.orm.implementation.django.convert

# -*- 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               #
###########################################################################
# pylint: disable=cyclic-import,no-member
"""Module to get an ORM backend instance from a database model instance."""

try:  # Python3
    from functools import singledispatch
except ImportError:  # Python2
    from singledispatch import singledispatch

import aiida.backends.djsite.db.models as djmodels

__all__ = ('get_backend_entity',)


[docs]@singledispatch def get_backend_entity(dbmodel, backend): # pylint: disable=unused-argument """ Default get_backend_entity from DbModel :param dbmodel: the db model instance """ raise TypeError( f'No corresponding AiiDA backend class exists for the DbModel instance {dbmodel.__class__.__name__}' )
@get_backend_entity.register(djmodels.DbUser) def _(dbmodel, backend): """ get_backend_entity for Django DbUser """ from . import users return users.DjangoUser.from_dbmodel(dbmodel, backend) @get_backend_entity.register(djmodels.DbGroup) def _(dbmodel, backend): """ get_backend_entity for Django DbGroup """ from . import groups return groups.DjangoGroup.from_dbmodel(dbmodel, backend) @get_backend_entity.register(djmodels.DbComputer) def _(dbmodel, backend): """ get_backend_entity for Django DbGroup """ from . import computers return computers.DjangoComputer.from_dbmodel(dbmodel, backend) @get_backend_entity.register(djmodels.DbNode) def _(dbmodel, backend): """ get_backend_entity for Django DbNode. It will return an ORM instance since there is not Node backend entity yet. """ from . import nodes return nodes.DjangoNode.from_dbmodel(dbmodel, backend) @get_backend_entity.register(djmodels.DbAuthInfo) def _(dbmodel, backend): """ get_backend_entity for Django DbAuthInfo """ from . import authinfos return authinfos.DjangoAuthInfo.from_dbmodel(dbmodel, backend) @get_backend_entity.register(djmodels.DbComment) def _(dbmodel, backend): from . import comments return comments.DjangoComment.from_dbmodel(dbmodel, backend) @get_backend_entity.register(djmodels.DbLog) def _(dbmodel, backend): from . import logs return logs.DjangoLog.from_dbmodel(dbmodel, backend) @get_backend_entity.register(djmodels.DbUser.sa) def _(dbmodel, backend): """ get_backend_entity for DummyModel DbUser. DummyModel instances are created when QueryBuilder queries the Django backend. """ from . import users djuser_instance = djmodels.DbUser( id=dbmodel.id, email=dbmodel.email, first_name=dbmodel.first_name, last_name=dbmodel.last_name, institution=dbmodel.institution ) return users.DjangoUser.from_dbmodel(djuser_instance, backend) @get_backend_entity.register(djmodels.DbGroup.sa) def _(dbmodel, backend): """ get_backend_entity for DummyModel DbGroup. DummyModel instances are created when QueryBuilder queries the Django backend. """ from . import groups djgroup_instance = djmodels.DbGroup( id=dbmodel.id, type_string=dbmodel.type_string, uuid=dbmodel.uuid, label=dbmodel.label, time=dbmodel.time, description=dbmodel.description, user_id=dbmodel.user_id, ) return groups.DjangoGroup.from_dbmodel(djgroup_instance, backend) @get_backend_entity.register(djmodels.DbComputer.sa) def _(dbmodel, backend): """ get_backend_entity for DummyModel DbComputer. DummyModel instances are created when QueryBuilder queries the Django backend. """ from . import computers djcomputer_instance = djmodels.DbComputer( id=dbmodel.id, uuid=dbmodel.uuid, name=dbmodel.name, hostname=dbmodel.hostname, description=dbmodel.description, transport_type=dbmodel.transport_type, scheduler_type=dbmodel.scheduler_type, metadata=dbmodel.metadata ) return computers.DjangoComputer.from_dbmodel(djcomputer_instance, backend) @get_backend_entity.register(djmodels.DbNode.sa) def _(dbmodel, backend): """ get_backend_entity for DummyModel DbNode. DummyModel instances are created when QueryBuilder queries the Django backend. """ djnode_instance = djmodels.DbNode( id=dbmodel.id, node_type=dbmodel.node_type, process_type=dbmodel.process_type, uuid=dbmodel.uuid, ctime=dbmodel.ctime, mtime=dbmodel.mtime, label=dbmodel.label, description=dbmodel.description, dbcomputer_id=dbmodel.dbcomputer_id, user_id=dbmodel.user_id, attributes=dbmodel.attributes, extras=dbmodel.extras ) from . import nodes return nodes.DjangoNode.from_dbmodel(djnode_instance, backend) @get_backend_entity.register(djmodels.DbAuthInfo.sa) def _(dbmodel, backend): """ get_backend_entity for DummyModel DbAuthInfo. DummyModel instances are created when QueryBuilder queries the Django backend. """ from . import authinfos djauthinfo_instance = djmodels.DbAuthInfo( id=dbmodel.id, aiidauser_id=dbmodel.aiidauser_id, dbcomputer_id=dbmodel.dbcomputer_id, metadata=dbmodel.metadata, # pylint: disable=protected-access auth_params=dbmodel.auth_params, enabled=dbmodel.enabled, ) return authinfos.DjangoAuthInfo.from_dbmodel(djauthinfo_instance, backend) @get_backend_entity.register(djmodels.DbComment.sa) def _(dbmodel, backend): """ Convert a dbcomment to the backend entity """ from . import comments djcomment = djmodels.DbComment( id=dbmodel.id, uuid=dbmodel.uuid, dbnode_id=dbmodel.dbnode_id, ctime=dbmodel.ctime, mtime=dbmodel.mtime, user_id=dbmodel.user_id, content=dbmodel.content ) return comments.DjangoComment.from_dbmodel(djcomment, backend) @get_backend_entity.register(djmodels.DbLog.sa) def _(dbmodel, backend): """ Convert a dbcomment to the backend entity """ from . import logs djlog = djmodels.DbLog( id=dbmodel.id, time=dbmodel.time, loggername=dbmodel.loggername, levelname=dbmodel.levelname, dbnode_id=dbmodel.dbnode_id, message=dbmodel.message, metadata=dbmodel.metadata # pylint: disable=protected-access ) return logs.DjangoLog.from_dbmodel(djlog, backend)