This file is indexed.

/usr/bin/weather is in weather-util 2.0-1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/python
# distributions may wish to edit the above to refer to a specific interpreter
# path, such as #!/usr/bin/python

# Copyright (c) 2006-2012 Jeremy Stanley <fungi@yuggoth.org>. Permission to
# use, copy, modify, and distribute this software is granted under terms
# provided in the LICENSE file distributed with this software.

"""Wrapper utility using the weather.py module."""

# added so distributors can consistently specify a private module location
private_module_path = "/usr/share/weather-util"
if private_module_path:
    import sys
    sys.path.insert(1, private_module_path)

import weather

# initialize options and configs
selections = weather.Selections()

# this mode just lists the aliases defined in the config
if selections.get_bool("list"):
    print( weather.list_aliases(selections.config) )

# this mode lists details of aliases defined in the config
elif selections.get_bool("longlist"):
    print( weather.list_aliases(selections.config, detail=True) )

# this mode builds the correlation data files
elif selections.get_bool("build_sets"):
    weather.correlate()

# if no arguments were provided
elif not selections.arguments:
    import sys

    # substitute defaults if we have any
    if selections.config.has_option("default", "defargs"):
        sys.argv += selections.config.get("default", "defargs").split(",")
        selections = weather.Selections()

    # otherwise be helpful
    else:
        sys.argv += ("--help",)
        selections = weather.Selections()

# these modes analyze correlations
if selections.get_bool("info"):
    weather.guess(
        selections.arguments[0],
        path=selections.get("setpath"),
        info=selections.get_bool("info"),
        cache_search=(
            selections.get_bool("cache") \
                and selections.get_bool("cache_search")
        ),
        cacheage=selections.getint("cacheage"),
        cachedir=selections.get("cachedir")
    )

# normal operation
else:
    output = ""
    for argument in selections.arguments:
        if selections.get_bool("conditions", argument) or not (
            selections.get_bool("alert", argument) \
                or selections.get_bool("forecast", argument)
            ):
            partial = weather.get_metar(
                uri=selections.get("metar", argument),
                verbose=selections.get_bool("verbose", argument),
                quiet=selections.get_bool("quiet", argument),
                headers=selections.get("headers", argument),
                imperial=selections.get_bool("imperial", argument),
                metric=selections.get_bool("metric", argument),
                cache_data=(
                    selections.get_bool("cache") \
                        and selections.get_bool("cache_data")
                ),
                cacheage=selections.getint("cacheage"),
                cachedir=selections.get("cachedir")
            )
            if partial: output += partial + "\n"
        if selections.get_bool("forecast", argument) \
            or selections.get_bool("alert", argument):
            alert_text = ""
            if selections.get_bool("alert", argument):
                atypes = selections.get("atypes", argument).split(",")
            else:
                atypes = []
            if selections.get_bool("forecast", argument):
                atypes = ["zone_forecast"] + atypes
            for atype in atypes:
                partial = weather.get_alert(
                    uri=selections.get(atype, argument),
                    verbose=selections.get_bool("verbose", argument),
                    quiet=selections.get_bool("quiet", argument),
                    cache_data=(
                        selections.get_bool("cache") \
                            and selections.get_bool("cache_data")
                    ),
                    cacheage=selections.getint("cacheage"),
                    cachedir=selections.get("cachedir")
                )
                if partial:
                    alert_text += "***** %s *****\n%s\n" % (
                        atype.replace("_", " ").title(),
                        partial
                    )
            if not alert_text:
                alert_text = "(no current alerts for this zone)\n"
            output += alert_text
    output = output.strip()
    if output: print( output )