atst/atst/models/application.py
dandds 4511630787 Update application_roles table for provisioning.
Adds cloud_id and claimed_until columns to the application_roles table
so that rows can be locked when they're being processed and updated with
relevant Azure information when processing is finished. Since the
claimed_until column is now common to a few different models, I've also
moved it to a mixin.
2020-02-02 14:01:35 -05:00

69 lines
1.8 KiB
Python

from sqlalchemy import and_, Column, ForeignKey, String, UniqueConstraint
from sqlalchemy.orm import relationship, synonym
from atst.models.base import Base
from atst.models.application_role import ApplicationRole
from atst.models.environment import Environment
from atst.models import mixins
from atst.models.types import Id
class Application(
Base,
mixins.TimestampsMixin,
mixins.AuditableMixin,
mixins.DeletableMixin,
mixins.ClaimableMixin,
):
__tablename__ = "applications"
id = Id()
name = Column(String, nullable=False)
description = Column(String)
portfolio_id = Column(ForeignKey("portfolios.id"), nullable=False)
portfolio = relationship("Portfolio")
environments = relationship(
"Environment",
back_populates="application",
primaryjoin=and_(
Environment.application_id == id, Environment.deleted == False
),
order_by="Environment.name",
)
roles = relationship(
"ApplicationRole",
primaryjoin=and_(
ApplicationRole.application_id == id, ApplicationRole.deleted == False
),
)
members = synonym("roles")
__table_args__ = (
UniqueConstraint(
"name", "portfolio_id", name="applications_name_portfolio_id_key"
),
)
cloud_id = Column(String)
@property
def users(self):
return set(role.user for role in self.members)
@property
def displayname(self):
return self.name
@property
def application_id(self):
return self.id
def __repr__(self): # pragma: no cover
return "<Application(name='{}', description='{}', portfolio='{}', id='{}')>".format(
self.name, self.description, self.portfolio.name, self.id
)
@property
def history(self):
return self.get_changes()