Source code for aws_session_recorder.lib.schema.group

import datetime
from typing import TYPE_CHECKING, Any, Optional

from typing import List

import sqlalchemy as sa  # type: ignore
from sqlalchemy.orm import relationship  # type: ignore

from aws_session_recorder.lib.helpers import AlwaysDoNothing
from aws_session_recorder.lib.schema.base import Base, TimeStamp
from aws_session_recorder.lib.schema.identity import InlinePolicy
from aws_session_recorder.lib.schema.policy import Policy

if TYPE_CHECKING:
    from mypy_boto3_iam import type_defs as t  # type: ignore
else:
    t = AlwaysDoNothing()
    client = AlwaysDoNothing()

group_membership = sa.Table('group_membership', Base.metadata,
                            sa.Column('user_id', sa.String, sa.ForeignKey('user.arn')),
                            sa.Column('group_id', sa.Integer, sa.ForeignKey('group.id')),
                            )


[docs]class Group(Base): __tablename__ = "group" def __init__(self, resp): super().__init__(**resp) id: int = sa.Column(sa.Integer, primary_key=True) Path: str = sa.Column(sa.String) GroupName: str = sa.Column(sa.String) GroupId: str = sa.Column(sa.String) Arn: dict = sa.Column(sa.String) CreateDate: Optional[datetime.datetime] = sa.Column(TimeStamp) users: List[Any] = relationship("User", back_populates="groups", secondary=group_membership) attached_policies: List['Policy'] = relationship('GroupPolicyAttachments', back_populates='group') inline_policies: 'List[GroupPolicy]' = relationship("GroupPolicy", cascade="all, delete-orphan", back_populates="group")
[docs]class GroupPolicy(InlinePolicy): __tablename__ = "group_policy" def __init__(self, resp): super().__init__(**resp) policy_name = sa.Column(sa.String, sa.ForeignKey('inline_policy.PolicyName'), primary_key=True) GroupName = sa.Column(sa.String, sa.ForeignKey('group.GroupName')) group: 'List[Group]' = relationship("Group", back_populates="inline_policies") __mapper_args__ = { 'polymorphic_identity': 'group' }