Source code for aws_session_recorder.lib.schema.user

import datetime
from typing import TYPE_CHECKING, Dict, Union, Any

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.group import Group, group_membership
from aws_session_recorder.lib.schema.identity import Identity, 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()


[docs]class User(Identity): __tablename__ = "user" UserName: str = sa.Column(sa.String, primary_key=True) UserId: str = sa.Column(sa.String) arn = sa.Column(sa.String, sa.ForeignKey('identity.Arn')) access_keys = relationship('AccessKey', back_populates='user') groups: List[Group] = relationship('Group', back_populates='users', secondary=group_membership) attached_policies: 'List[Policy]' = relationship('UserPolicyAttachments', back_populates='user') inline_policies: 'List[UserPolicy]' = relationship('UserPolicy', cascade='all, delete-orphan', back_populates='user') __mapper_args__ = { 'polymorphic_identity': 'user' }
[docs]class AccessKey(Base): __tablename__ = "access_key" def __init__(self, key: t.AccessKeyMetadataTypeDef): super().__init__(**key) id: int = sa.Column(sa.Integer, primary_key=True) UserName: str = sa.Column(sa.String, sa.ForeignKey('user.UserName')) AccessKeyId: str = sa.Column(sa.String) Status: dict = sa.Column(sa.String) CreateDate: datetime.datetime = sa.Column(TimeStamp) user: User = relationship("User", back_populates="access_keys")
[docs]class UserPolicy(InlinePolicy): __tablename__ = "user_policy" def __init__(self, resp: Union[t.GetUserPolicyResponseTypeDef, Dict[str, Any]]): super().__init__(**resp) policy_name = sa.Column(sa.String, sa.ForeignKey('inline_policy.PolicyName'), primary_key=True) UserName = sa.Column(sa.String, sa.ForeignKey('user.UserName')) user: 'List[User]' = relationship("User", back_populates="inline_policies") __mapper_args__ = { 'polymorphic_identity': 'user' }