def handle(self, *args, **options): if options['user']: if options['user'] == 'anonymous': owners = [None] else: owners = [User.objects.get(username=options['user'])] else: owners = [None] + list(User.objects.all()) adapter = DatabaseAdapter() stale_jobs = [] for owner in owners: jobs = QueryJob.objects.filter(owner=owner) for job in jobs: if job.phase == job.PHASE_COMPLETED: if not adapter.fetch_table(job.schema_name, job.table_name): stale_jobs.append(job) if stale_jobs: print('The following QueryJobs have no associated database table:') for job in stale_jobs: username = job.owner.username if job.owner else 'anonymous' print('%s by %s -> %s.%s' % (job.id, username, job.schema_name, job.table_name)) if options['archive']: for job in stale_jobs: job.archive() print('The jobs have been archived.') else: print('No QueryJobs without associated associated database table have been found.')
def discover(self, request): schema_name = request.GET.get('schema') table_name = request.GET.get('table') if schema_name and table_name: adapter = DatabaseAdapter() table_metadata = adapter.fetch_table(schema_name, table_name) table_metadata['nrows'] = adapter.fetch_nrows( schema_name, table_name) table_metadata['size'] = adapter.fetch_size( schema_name, table_name) return Response([table_metadata]) else: return Response([])