def test_ordered_queryset_ignored(self): query = User.objects.filter(last_name="Tenenbaum").order_by('username') all_users = list( queryset_to_iterator(query, User, limit=4, ignore_ordering=True)) self.assertEqual( [u.username for u in all_users], [u.username for u in self.users], )
def handle(self, **options): records = UserHistory.objects.filter( Q(user_repr__isnull=True) | Q(changed_by_repr__isnull=True)) for user_history in with_progress_bar( queryset_to_iterator(records, UserHistory), records.count()): try: migrate(user_history) except Exception as e: logging.error(f"{user_history.pk}: {e}")
def test_queryset_to_iterator(self): query = User.objects.filter(last_name="Tenenbaum") self.assertEqual(query.count(), 10) with self.assertNumQueries(4): # query 1: Users 1, 2, 3, 4 # query 2: Users 5, 6, 7, 8 # query 3: Users 9, 10 # query 4: Check that there are no users past #10 all_users = list(queryset_to_iterator(query, User, limit=4)) self.assertEqual( [u.username for u in all_users], [u.username for u in self.users], )
def handle(self, *args, **options): domains = options['domains'] rule_id = options['rule_id'] rule_name = options['rule_name'] if rule_id and rule_name: raise CommandError( "Specify either 'rule-id' or 'rule-name' but not both.") start = options['startdate'] end = options['enddate'] archived = options['archived'] qs = CaseRuleSubmission.objects.filter(domain__in=domains, ) if rule_id: qs = qs.filter(rule_id=rule_id) if rule_name: qs = qs.filter(rule__name=rule_name) if archived: qs = qs.filter(archived=True) if start: qs = qs.filter(created_on__gte=start) if end: qs = qs.filter(created_on__lt=end) count = qs.count() if count == 0: print("No rule submissions match the given criteria") return filename = f"rule_submissions_{datetime.utcnow().strftime('%Y-%m-%dT%H-%M-%S',)}.csv" print(f"Writing data for {count} submissions to {filename}") with open(filename, "w") as f: writer = csv.writer(f) writer.writerow( ["domain", "rule_id", "created_on", "form_id", "archived"]) iterator = queryset_to_iterator(qs, CaseRuleSubmission, limit=10000) for submission in with_progress_bar(iterator, count): writer.writerow([ submission.domain, submission.rule_id, submission.created_on, submission.form_id, submission.archived ])
def iterators(self): for queryset in self.querysets(): yield queryset_to_iterator(queryset, self.model_class, ignore_ordering=True)
def test_ordered_queryset(self): query = User.objects.filter(last_name="Tenenbaum").order_by('username') with self.assertRaises(AssertionError): list(queryset_to_iterator(query, User, limit=4))