from flask_sqlalchemy import BaseQuery from sqlalchemy import or_ from atlas_um import pgdb from atlas_um.pgdb.views import dna_accounts_global_claims from .mixins import DeletedMixin class ResourceGroupQuery(BaseQuery, DeletedMixin): def by_dna_account_sub(self, sub: str): return ( self.join(pgdb.ClaimName) .join(dna_accounts_global_claims) .join(pgdb.DNAAccount) .filter(dna_accounts_global_claims.c.is_disabled == False) # noqa .filter(pgdb.DNAAccount.sub == sub) .distinct() ) def by_dna_account(self, dna_account: "pgdb.DNAAccount"): return ( self.join(pgdb.ClaimName) .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) .distinct() ) def by_namespace_urls(self, namespace_urls: list): return pgdb.ResourceGroup.query.active().filter( pgdb.ResourceGroup.namespace_url.in_(namespace_urls) ) def by_external_id(self, external_id: str): return self.filter(pgdb.ResourceGroup.external_id == external_id) def by_id(self, id): return self.filter(pgdb.ResourceGroup.id == id) def by_domain(self, domain, exact=False): if not domain: return self.filter(False) if exact: return self.filter( or_( pgdb.ResourceGroup.service_url.ilike(f"http://{domain}%"), pgdb.ResourceGroup.service_url.ilike(f"https://{domain}%"), pgdb.ResourceGroup.service_url.ilike(domain), ) ) return self.filter(pgdb.ResourceGroup.service_url.ilike(f"%{domain}%")) def by_namespace_url(self, namespace): if not namespace: return self.filter(False) return self.filter(pgdb.ResourceGroup.namespace_url == namespace)