srg/artsurvey/management/commands/00_artsurvey_subquery.py
2024-04-26 12:43:00 +03:00

78 lines
2.3 KiB
Python

from django.core.management.base import BaseCommand, CommandError
from django.db.models import Count
from django.db.models import OuterRef, Subquery, Exists
from datetime import date
import datetime
from django.utils import timezone
import astropy
from astropy.io import ascii
import pandas as pd
import pymysql
from sqlalchemy import create_engine
from heasarc.models import HeasarcBase
from artsurvey.models import ArtSurveySource, ArtSurvey, EnergyBand, MetaSource
from srglib.utils import find_counterparts
from srgcat.models import SrgDataDump
class Command(BaseCommand):
help = 'Initiates data dase'
def handle(self, *args, **options):
#srcs = ArtSurveySource.objects.all()
""" Find first survey """
version=12.2
try:
survey = ArtSurvey.objects.get(version=version)
except ArtSurvey.DoesNotExist:
return
print("use ArtSurvey {}".format(survey))
try:
exclude_survey = ArtSurvey.objects.get(version=2.4)
except ArtSurvey.DoesNotExist:
return
print("exclude ArtSurvey {}".format(exclude_survey))
try:
band = EnergyBand.objects.get(slug='E0')
print("use EnergyBand {}".format(band))
except EnergyBand.DoesNotExist:
print("EnergyBand bot found")
return
try:
exclude_band = EnergyBand.objects.get(slug='E0')
print("use exclude EnergyBand {}".format(exclude_band))
except EnergyBand.DoesNotExist:
print("EnergyBand bot found")
return
srcs = ArtSurveySource.objects.all().filter(survey=survey)
srcs=srcs.filter(band=band)
subquery=MetaSource.objects.filter(artsurveysource=OuterRef("pk")).filter(artsurveysource__survey=exclude_survey).filter(artsurveysource__band=exclude_band)
#srcs=srcs.annotate(exclude=Subquery(subquery.values("name")[:1]))
srcs=srcs.annotate(exclude=Exists(subquery))
for s in srcs:
print(s,s.exclude)
print(srcs.count())
"""
msrcs=MetaSource.objects.annotate(num_sources=Count("artsurveysource"))
for m in msrcs:
print(m, m.num_sources)
"""
self.stdout.write(self.style.SUCCESS('Done'))