Filter the roles relationship on applications to remove deleted roles
This commit is contained in:
parent
86e315e56f
commit
8980b04f7e
@ -109,6 +109,7 @@ class Applications(BaseDomainClass):
|
|||||||
)
|
)
|
||||||
|
|
||||||
application_role.status = ApplicationRoleStatus.DISABLED
|
application_role.status = ApplicationRoleStatus.DISABLED
|
||||||
|
application_role.deleted = True
|
||||||
db.session.add(application_role)
|
db.session.add(application_role)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
@ -1,16 +1,10 @@
|
|||||||
from sqlalchemy import Column, ForeignKey, String
|
from sqlalchemy import Column, ForeignKey, String
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship, synonym
|
||||||
|
|
||||||
from atst.models import Base
|
from atst.models import Base
|
||||||
from atst.models.types import Id
|
from atst.models.types import Id
|
||||||
from atst.models import mixins
|
from atst.models import mixins
|
||||||
|
|
||||||
from atst.models.application_role import (
|
|
||||||
ApplicationRole,
|
|
||||||
Status as ApplicationRoleStatuses,
|
|
||||||
)
|
|
||||||
from atst.database import db
|
|
||||||
|
|
||||||
|
|
||||||
class Application(
|
class Application(
|
||||||
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin
|
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin
|
||||||
@ -28,26 +22,16 @@ class Application(
|
|||||||
back_populates="application",
|
back_populates="application",
|
||||||
primaryjoin="and_(Environment.application_id==Application.id, Environment.deleted==False)",
|
primaryjoin="and_(Environment.application_id==Application.id, Environment.deleted==False)",
|
||||||
)
|
)
|
||||||
# TODO: filter condition on this relationship?
|
roles = relationship(
|
||||||
roles = relationship("ApplicationRole")
|
"ApplicationRole",
|
||||||
|
primaryjoin="and_(ApplicationRole.application_id==Application.id, ApplicationRole.deleted==False)",
|
||||||
|
)
|
||||||
|
members = synonym("roles")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def users(self):
|
def users(self):
|
||||||
return set(role.user for role in self.members)
|
return set(role.user for role in self.members)
|
||||||
|
|
||||||
@property
|
|
||||||
def members(self):
|
|
||||||
return (
|
|
||||||
db.session.query(ApplicationRole)
|
|
||||||
.filter(ApplicationRole.application_id == self.id)
|
|
||||||
.filter(ApplicationRole.status != ApplicationRoleStatuses.DISABLED)
|
|
||||||
.all()
|
|
||||||
)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def num_users(self):
|
|
||||||
return len(self.users)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def displayname(self):
|
def displayname(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
<a
|
<a
|
||||||
href="{{ url_for('applications.team', application_id=application.id) }}"
|
href="{{ url_for('applications.team', application_id=application.id) }}"
|
||||||
class='icon-link'>
|
class='icon-link'>
|
||||||
<span>{{ "portfolios.applications.team_text" | translate }} ({{ application.num_users }})</span>
|
<span>{{ "portfolios.applications.team_text" | translate }} ({{ application.users | length }})</span>
|
||||||
</a>
|
</a>
|
||||||
<div class='separator'></div>
|
<div class='separator'></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -8,16 +8,6 @@ from tests.factories import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_application_num_users():
|
|
||||||
application = ApplicationFactory.create(
|
|
||||||
environments=[{"name": "dev"}, {"name": "staging"}, {"name": "prod"}]
|
|
||||||
)
|
|
||||||
assert application.num_users == 0
|
|
||||||
|
|
||||||
ApplicationRoleFactory.create(application=application)
|
|
||||||
assert application.num_users == 1
|
|
||||||
|
|
||||||
|
|
||||||
def test_application_environments_excludes_deleted():
|
def test_application_environments_excludes_deleted():
|
||||||
app = ApplicationFactory.create()
|
app = ApplicationFactory.create()
|
||||||
env = EnvironmentFactory.create(application=app)
|
env = EnvironmentFactory.create(application=app)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user