예제 #1
0
 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],
     )
예제 #2
0
    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}")
예제 #3
0
    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
                ])
예제 #5
0
 def iterators(self):
     for queryset in self.querysets():
         yield queryset_to_iterator(queryset,
                                    self.model_class,
                                    ignore_ordering=True)
예제 #6
0
 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))