def on_post(self, request, response): try: validator = Validator(send=as_boolean, bump=as_boolean, periodic=as_boolean, _optional=('send', 'bump', 'periodic')) values = validator(request) except ValueError as error: bad_request(response, str(error)) return if values.get('send', False) and values.get('periodic', False): # Send and periodic and mutually exclusive options. bad_request(response, 'send and periodic options are mutually exclusive') return if len(values) == 0: # There's nothing to do, but that's okay. okay(response) return if values.get('bump', False): bump_digest_number_and_volume(self._mlist) if values.get('send', False): maybe_send_digest_now(self._mlist, force=True) if values.get('periodic', False) and self._mlist.digest_send_periodic: maybe_send_digest_now(self._mlist, force=True) accepted(response)
def test_bump_quarterly_not_yet(self): self._mlist.digest_last_sent_at = self.right_now + timedelta(days=-88) self._mlist.digest_volume_frequency = DigestFrequency.quarterly bump_digest_number_and_volume(self._mlist) self.assertEqual(self._mlist.volume, 7) self.assertEqual(self._mlist.next_digest_number, 5) self.assertEqual(self._mlist.digest_last_sent_at, self.right_now)
def test_bump_monthly(self): self._mlist.digest_last_sent_at = self.right_now + timedelta(days=-32) self._mlist.digest_volume_frequency = DigestFrequency.monthly bump_digest_number_and_volume(self._mlist) self.assertEqual(self._mlist.volume, 8) self.assertEqual(self._mlist.next_digest_number, 1) self.assertEqual(self._mlist.digest_last_sent_at, self.right_now)
def test_bump_quarterly(self): self._mlist.digest_last_sent_at = self.right_now + timedelta( days=-93) self._mlist.digest_volume_frequency = DigestFrequency.quarterly bump_digest_number_and_volume(self._mlist) self.assertEqual(self._mlist.volume, 8) self.assertEqual(self._mlist.next_digest_number, 1) self.assertEqual(self._mlist.digest_last_sent_at, self.right_now)
def test_bump_yearly_not_yet(self): self._mlist.digest_last_sent_at = self.right_now + timedelta( days=-200) self._mlist.digest_volume_frequency = DigestFrequency.yearly bump_digest_number_and_volume(self._mlist) self.assertEqual(self._mlist.volume, 7) self.assertEqual(self._mlist.next_digest_number, 5) self.assertEqual(self._mlist.digest_last_sent_at, self.right_now)
def test_bump_monthly_not_yet(self): # The normal test date starts on the first day of the month, so let's # fast forward it a few days so we can set the digest last sent time # to earlier in the same month. self._mlist.digest_last_sent_at = self.right_now factory.fast_forward(days=26) self._mlist.digest_volume_frequency = DigestFrequency.monthly bump_digest_number_and_volume(self._mlist) self.assertEqual(self._mlist.volume, 7) self.assertEqual(self._mlist.next_digest_number, 5) self.assertEqual(self._mlist.digest_last_sent_at, right_now())
def digests(ctx, list_ids, send, bump, dry_run, verbose, periodic): # send and periodic options are mutually exclusive, if they both are # specified, exit. if send and periodic: print(_('--send and --periodic flags cannot be used together'), file=sys.stderr) exit(1) list_manager = getUtility(IListManager) if list_ids: lists = [] for spec in list_ids: # We'll accept list-ids or fqdn list names. if '@' in spec: mlist = list_manager.get(spec) else: mlist = list_manager.get_by_list_id(spec) if mlist is None: print(_('No such list found: $spec'), file=sys.stderr) else: lists.append(mlist) else: lists = list(list_manager.mailing_lists) if bump: for mlist in lists: if verbose: print( _('\ $mlist.list_id is at volume $mlist.volume, number \ ${mlist.next_digest_number}')) if not dry_run: bump_digest_number_and_volume(mlist) if verbose: print( _('\ $mlist.list_id bumped to volume $mlist.volume, number \ ${mlist.next_digest_number}')) if send: for mlist in lists: if verbose: print( _('\ $mlist.list_id sent volume $mlist.volume, number ${mlist.next_digest_number}')) if not dry_run: maybe_send_digest_now(mlist, force=True) if periodic: for mlist in lists: if mlist.digest_send_periodic: if verbose: print( _('\ $mlist.list_id sent volume $mlist.volume, number ${mlist.next_digest_number}')) if not dry_run: maybe_send_digest_now(mlist, force=True)
def on_post(self, request, response): try: validator = Validator(send=as_boolean, bump=as_boolean, _optional=('send', 'bump')) values = validator(request) except ValueError as error: bad_request(response, str(error)) return if len(values) == 0: # There's nothing to do, but that's okay. okay(response) return if values.get('bump', False): bump_digest_number_and_volume(self._mlist) if values.get('send', False): maybe_send_digest_now(self._mlist, force=True) accepted(response)
def on_post(self, request, response): try: validator = Validator( send=as_boolean, bump=as_boolean, _optional=('send', 'bump')) values = validator(request) except ValueError as error: bad_request(response, str(error)) return if len(values) == 0: # There's nothing to do, but that's okay. okay(response) return if values.get('bump', False): bump_digest_number_and_volume(self._mlist) if values.get('send', False): maybe_send_digest_now(self._mlist, force=True) accepted(response)
def process(self, args): """See `ICLISubCommand`.""" list_manager = getUtility(IListManager) if args.lists: lists = [] for spec in args.lists: # We'll accept list-ids or fqdn list names. if '@' in spec: mlist = list_manager.get(spec) else: mlist = list_manager.get_by_list_id(spec) if mlist is None: print(_('No such list found: $spec'), file=sys.stderr) else: lists.append(mlist) else: lists = list(list_manager.mailing_lists) if args.bump: for mlist in lists: if args.verbose: print( _('\ $mlist.list_id is at volume $mlist.volume, number \ ${mlist.next_digest_number}')) if not args.dry_run: bump_digest_number_and_volume(mlist) if args.verbose: print( _('\ $mlist.list_id bumped to volume $mlist.volume, number \ ${mlist.next_digest_number}')) if args.send: for mlist in lists: if args.verbose: print( _('\ $mlist.list_id sent volume $mlist.volume, number ${mlist.next_digest_number}')) if not args.dry_run: maybe_send_digest_now(mlist, force=True)
def digests(ctx, list_ids, send, bump, dry_run, verbose): list_manager = getUtility(IListManager) if list_ids: lists = [] for spec in list_ids: # We'll accept list-ids or fqdn list names. if '@' in spec: mlist = list_manager.get(spec) else: mlist = list_manager.get_by_list_id(spec) if mlist is None: print(_('No such list found: $spec'), file=sys.stderr) else: lists.append(mlist) else: lists = list(list_manager.mailing_lists) if bump: for mlist in lists: if verbose: print( _('\ $mlist.list_id is at volume $mlist.volume, number \ ${mlist.next_digest_number}')) if not dry_run: bump_digest_number_and_volume(mlist) if verbose: print( _('\ $mlist.list_id bumped to volume $mlist.volume, number \ ${mlist.next_digest_number}')) if send: for mlist in lists: if verbose: print( _('\ $mlist.list_id sent volume $mlist.volume, number ${mlist.next_digest_number}')) if not dry_run: maybe_send_digest_now(mlist, force=True)
def process(self, args): """See `ICLISubCommand`.""" list_manager = getUtility(IListManager) if args.lists: lists = [] for spec in args.lists: # We'll accept list-ids or fqdn list names. if '@' in spec: mlist = list_manager.get(spec) else: mlist = list_manager.get_by_list_id(spec) if mlist is None: print(_('No such list found: $spec'), file=sys.stderr) else: lists.append(mlist) else: lists = list(list_manager.mailing_lists) if args.bump: for mlist in lists: if args.verbose: print(_('\ $mlist.list_id is at volume $mlist.volume, number \ ${mlist.next_digest_number}')) if not args.dry_run: bump_digest_number_and_volume(mlist) if args.verbose: print(_('\ $mlist.list_id bumped to volume $mlist.volume, number \ ${mlist.next_digest_number}')) if args.send: for mlist in lists: if args.verbose: print(_('\ $mlist.list_id sent volume $mlist.volume, number ${mlist.next_digest_number}')) if not args.dry_run: maybe_send_digest_now(mlist, force=True)
def test_bump_no_previous_digest(self): self._mlist.digest_last_sent_at = None bump_digest_number_and_volume(self._mlist) self.assertEqual(self._mlist.volume, 7) self.assertEqual(self._mlist.next_digest_number, 5) self.assertEqual(self._mlist.digest_last_sent_at, self.right_now)