import logging from ._db_command import CommandError, DBCommand from django.contrib.auth.models import AnonymousUser from peeringdb.whois import WhoisFormat from peeringdb_server import models from peeringdb_server import serializers from django_handleref import util class Command(DBCommand): args = "" help = "command line whois" def add_arguments(self, parser): parser.add_argument("ref", nargs="?", type=str) def handle(self, *args, **options): log = logging.getLogger("pdb.script.whois") # FIXME - ignore multiple args for now args = options.get("ref") try: (ref_tag, pk) = util.split_ref(args) except ValueError: log.error("Unknown query type '%s'" % (args)) return # TODO raise CommandError("unk query") model = None # TODO needs the client whois typ resolver in a better place for reuse # probably easiest to just map reftag to pk name if ref_tag in models.REFTAG_MAP: model = models.REFTAG_MAP[ref_tag] Serializer = serializers.REFTAG_MAP[ref_tag] obj = Serializer.prefetch_related(model.objects, None, depth=2).get(pk=pk) elif ref_tag == "as": model = models.REFTAG_MAP["net"] Serializer = serializers.REFTAG_MAP["net"] obj = Serializer.prefetch_related(model.objects, None, depth=2).get(asn=pk) # data = cls(obj).data # TODO doesn't work on client # elif ref_tag == 'ixnets': if not model: msg = "Unknown ref tag: {}".format(ref_tag) log.error("Unknown ref tag: %s" % ref_tag) raise ValueError(msg) data = Serializer(obj, context={"user": AnonymousUser()}).data fmt = WhoisFormat() fmt.print(obj._handleref.tag, data)