]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/python/location-query.in
location-query: Use print to print errors, too
[people/ms/libloc.git] / src / python / location-query.in
index 260f4bd88abe0102629d98006c0f338377551c7e..1433f1aacd1a559bbcbc643da4cad6dc739b6fd8 100644 (file)
@@ -18,6 +18,7 @@
 ###############################################################################
 
 import argparse
+import gettext
 import sys
 import syslog
 
@@ -25,7 +26,11 @@ import syslog
 import location
 
 # i18n
-_ = lambda x: x
+def _(singular, plural=None, n=None):
+       if plural:
+               return gettext.dngettext("libloc", singular, plural, n)
+
+       return gettext.dgettext("libloc", singular)
 
 class CLI(object):
        def __init__(self):
@@ -42,6 +47,10 @@ class CLI(object):
                parser.add_argument("--debug", action="store_true",
                        help=_("Enable debug output"))
 
+               # version
+               parser.add_argument("--version", action="version",
+                       version="%%(prog)s %s" % location.__version__)
+
                # lookup an IP address
                lookup = subparsers.add_parser("lookup",
                        help=_("Lookup one or multiple IP addresses"),
@@ -49,6 +58,20 @@ class CLI(object):
                lookup.add_argument("address", nargs="+")
                lookup.set_defaults(func=self.handle_lookup)
 
+               # Get AS
+               get_as = subparsers.add_parser("get-as",
+                       help=_("Get information about one or multiple Autonomous Systems"),
+               )
+               get_as.add_argument("asn", nargs="+")
+               get_as.set_defaults(func=self.handle_get_as)
+
+               # Search for AS
+               search_as = subparsers.add_parser("search-as",
+                       help=_("Search for Autonomous Systems that match the string"),
+               )
+               search_as.add_argument("query", nargs=1)
+               search_as.set_defaults(func=self.handle_search_as)
+
                return parser.parse_args()
 
        def run(self):
@@ -75,7 +98,7 @@ class CLI(object):
                        try:
                                n = self.db.lookup(address)
                        except ValueError:
-                               sys.stderr.write(_("Invalid IP address: %s") % address)
+                               print(_("Invalid IP address: %s") % address, file=sys.stderr)
 
                        args = {
                                "address" : address,
@@ -84,7 +107,7 @@ class CLI(object):
 
                        # Nothing found?
                        if not n:
-                               print(_("Nothing found for %(address)s") % args)
+                               print(_("Nothing found for %(address)s") % args, file=sys.stderr)
                                ret = 1
                                continue
 
@@ -105,6 +128,38 @@ class CLI(object):
 
                return ret
 
+       def handle_get_as(self, ns):
+               """
+                       Gets information about Autonomous Systems
+               """
+               ret = 0
+
+               for asn in ns.asn:
+                       try:
+                               asn = int(asn)
+                       except ValueError:
+                               print(_("Invalid ASN: %s") % asn, file=sys.stderr)
+                               ret = 1
+                               continue
+
+                       # Fetch AS from database
+                       a = self.db.get_as(asn)
+
+                       # Nothing found
+                       if not a:
+                               print(_("Could not find AS%s") % asn, file=sys.stderr)
+                               ret = 1
+                               continue
+
+                       print(_("AS%(asn)s belongs to %(name)s") % { "asn" : a.number, "name" : a.name })
+
+               return ret
+
+       def handle_search_as(self, ns):
+               for query in ns.query:
+                       # Print all matches ASes
+                       for a in self.db.search_as(query):
+                               print(a)
 
 def main():
        # Run the command line interface