from typing import Union from flask_sqlalchemy import BaseQuery from atlas_um import pgdb from atlas_um.pgdb.queries.mixins import DeletedMixin from atlas_um.pgdb.views import dna_accounts_global_claims class ClaimNameQuery(BaseQuery, DeletedMixin): def by_resource_group_id(self, resource_group_id: Union[int, str]): return self.filter( pgdb.ClaimName.resource_group_id == resource_group_id ) def by_resource_group(self, resource_group: "pgdb.ResourceGroup"): return self.join(pgdb.ResourceGroup).filter( pgdb.ResourceGroup.id == resource_group.id ) def by_resource_group_external_id( self, resource_group: "pgdb.ResourceGroup", claim_name_id: str ): return self.by_resource_group(resource_group).filter( pgdb.ClaimName.external_id == claim_name_id ) def global_by_external_id(self, claim_name_id: str): return self.filter(pgdb.ClaimName.external_id == claim_name_id).filter( pgdb.ClaimName.resource_group_id == None # noqa ) def by_group_external_id(self, resource_group_id: str): return self.join(pgdb.ResourceGroup).filter( pgdb.ResourceGroup.external_id == resource_group_id ) def by_dna_account_sub_group_external_id( self, sub: str, resource_group_id: str ): return ( self.join(pgdb.ResourceGroup) .join(dna_accounts_global_claims) .join(pgdb.DNAAccount) .filter(dna_accounts_global_claims.c.is_disabled == False) # noqa .filter(pgdb.DNAAccount.sub == sub) .filter(pgdb.ResourceGroup.external_id == resource_group_id) .distinct() ) def by_dna_account_resource_group( self, dna_account: "pgdb.DNAAccount", resource_group: "pgdb.ResourceGroup", ): return ( self.join(pgdb.ResourceGroup) .join(dna_accounts_global_claims) .join(pgdb.DNAAccount) .filter(dna_accounts_global_claims.c.is_disabled == False) # noqa .filter(pgdb.DNAAccount.id == dna_account.id) .filter(pgdb.ResourceGroup.id == resource_group.id) .distinct() ) def by_name_external_ids(self, resource_group_id: str, claim_name_id: str): return ( self.join(pgdb.ResourceGroup) .filter(pgdb.ResourceGroup.external_id == resource_group_id) .filter(pgdb.ClaimName.external_id == claim_name_id) ) def filter_global(self): return self.filter(pgdb.ClaimName.resource_group_id == None) # noqa def active(self, is_global=False): query = super().active() if not is_global: query = query.filter( pgdb.ResourceGroup.is_deleted == False # noqa ) return query def deleted(self): return ( super() .active() .filter(pgdb.ResourceGroup.is_deleted == True) # noqa )