def handle(self, *args, **options): pm_total = 0 pm_checked = 0 dup_removed = 0 with transaction.atomic(): for p in UserProject.objects.all(): for pm in ProjectMetrics.objects.filter(project=p, is_extension=False): pm.delete() for pm in ProjectMetrics.objects.filter(project=p, is_extension=True): if pm.urlmetrics.is_uptodate(): pm_checked += 1 pm.is_checked = True else: pm.is_checked = False for pd in p.projectdomain_set.filter(state=u'available'): ums = URLMetrics.objects.filter( query_url=pd.domain).order_by(u'-last_updated') if len(ums) == 0: um = URLMetrics(query_url=pd.domain) um.save() pm = ProjectMetrics(project=p, urlmetrics=um, is_checked=False) pm.save() else: if len(ums) > 1: for dum in ums[1:]: dup_removed += 1 dum.delete() um = ums[0] pm = ProjectMetrics(project=p, urlmetrics=um) if um.is_uptodate(): pm.is_checked = True pm_checked += 1 else: pm.is_checked = False pm.save() pm_total += 1 self.stdout.write('Statistics:') self.stdout.write(' Project metric links: %d' % pm_total) self.stdout.write(' Checked/up-to-date: %d' % pm_checked) self.stdout.write(' Duplicate metric records removed: %d' % dup_removed) self.stdout.write(' Total metric records (post-removal): %d' % (len(URLMetrics.objects.all())))