Skip to content

Commit

Permalink
Remove hybrid properties from SqlaAlchemy and dummy models (#2767)
Browse files Browse the repository at this point in the history
Soon the current hard-coded dummy model, to map the Django models on
SqlAlchemy models, which drives the `QueryBuilder` implementation, will
be replaced with dynamically generated Aldjemy models. However, these do
not support hybrid properties so they have to be removed.
  • Loading branch information
szoupanos authored and sphuber committed May 3, 2019
1 parent dadc5d1 commit 1f6385d
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 68 deletions.
3 changes: 2 additions & 1 deletion aiida/backends/sqlalchemy/migrations/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
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 DbComputer, DbLink, DbNode
from aiida.backends.sqlalchemy.models.node import DbLink, DbNode
from aiida.backends.sqlalchemy.models.computer import DbComputer
from aiida.backends.sqlalchemy.models.settings import DbSetting
from aiida.backends.sqlalchemy.models.user import DbUser
from aiida.common.exceptions import DbContentError
Expand Down
36 changes: 0 additions & 36 deletions aiida/backends/sqlalchemy/models/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
from __future__ import absolute_import
from sqlalchemy import ForeignKey, select
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.schema import Column
from sqlalchemy.types import Integer, String, Boolean, DateTime, Text
# Specific to PGSQL. If needed to be agnostic
Expand All @@ -25,8 +24,6 @@
from aiida.backends.sqlalchemy.models.base import Base
from aiida.common.utils import get_new_uuid
from aiida.backends.sqlalchemy.utils import flag_modified
from aiida.backends.sqlalchemy.models.user import DbUser
from aiida.backends.sqlalchemy.models.computer import DbComputer


class DbNode(Base):
Expand Down Expand Up @@ -209,39 +206,6 @@ def __str__(self):
else:
return "{} node [{}]".format(simplename, self.pk)

# User email
@hybrid_property
def user_email(self):
"""
Returns: the email of the user
"""
return self.user.email

@user_email.expression
def user_email(cls):
"""
Returns: the email of the user at a class level (i.e. in the database)
"""
return select([DbUser.email]).where(DbUser.id == cls.user_id).label(
'user_email')

# Computer name
@hybrid_property
def computer_name(self):
"""
Returns: the of the computer
"""
return self.dbcomputer.name

@computer_name.expression
def computer_name(cls):
"""
Returns: the name of the computer at a class level (i.e. in the database)
"""
return select([DbComputer.name]).where(DbComputer.id ==
cls.dbcomputer_id).label(
'computer_name')


class DbLink(Base):
__tablename__ = "db_dblink"
Expand Down
32 changes: 1 addition & 31 deletions aiida/orm/implementation/django/dummy_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

# pylint: disable=no-name-in-module, import-error, invalid-name
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import (Column, Table, ForeignKey, UniqueConstraint, select)
from sqlalchemy import (Column, Table, ForeignKey, UniqueConstraint)

from sqlalchemy.types import (
Integer,
Expand All @@ -31,7 +31,6 @@
)
from sqlalchemy.orm import (relationship, backref, sessionmaker)

from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.dialects.postgresql import UUID

# MISC
Expand Down Expand Up @@ -176,35 +175,6 @@ class DbNode(Base):
backref=backref("inputs", passive_deletes=True),
passive_deletes=True)

@hybrid_property
def user_email(self):
"""
Returns: the email of the user
"""
return self.user.email

@user_email.expression
def user_email(self):
"""
Returns: the email of the user at a class level (i.e. in the database)
"""
return select([DbUser.email]).where(DbUser.id == self.user_id).label('user_email')

# Computer name
@hybrid_property
def computer_name(self):
"""
Returns: the of the computer
"""
return self.dbcomputer.name

@computer_name.expression
def computer_name(self):
"""
Returns: the name of the computer at a class level (i.e. in the database)
"""
return select([DbComputer.name]).where(DbComputer.id == self.dbcomputer_id).label('computer_name')


class DbAuthInfo(Base):
__tablename__ = "db_dbauthinfo"
Expand Down

0 comments on commit 1f6385d

Please sign in to comment.