19:def utcnow():
26:    def __init__(self, accounts: list, strategy: str, weights: dict = None, max_per_account: int = 200):
37:    def _available(self):
47:    def next_account(self, account_id=None):
85:    def status(self):
91:    def __init__(self, subjects: List[SubjectLine], strategy: str = "round_robin"):
96:    def next_subject(self) -> Optional[SubjectLine]:
110:    def __init__(self, templates: List[EmailTemplate], mode: str = "repeat"):
116:    def next_template(self) -> Optional[EmailTemplate]:
133:    def stopped(self):
138:    def __init__(self, phones: List[CompanyPhoneNumber], mode: str = "round_robin"):
143:    def next_phone(self) -> str:
155:async def get_setting(db: AsyncSession, key: str, default):
163:def get_setting_sync(key: str, default):
176:async def get_campaign_entities(db: AsyncSession, campaign: Campaign):
201:async def materialize_campaign(db: AsyncSession, campaign: Campaign, recipient_rows: Sequence[Recipient],
