SYMBOL INDEX (378 symbols across 58 files) FILE: bin/geo-proxy.py function load_cache (line 44) | def load_cache(location_string): function shorten_full_address (line 54) | def shorten_full_address(address): function save_cache (line 62) | def save_cache(location_string, answer): function query_osm (line 68) | def query_osm(location_string): function add_timezone_information (line 82) | def add_timezone_information(geo_data): function find_location (line 96) | def find_location(location): FILE: bin/proxy.py function is_testmode (line 60) | def is_testmode(): function load_translations (line 66) | def load_translations(): function _is_metno (line 95) | def _is_metno(): function _find_srv_for_query (line 99) | def _find_srv_for_query(path, query): # pylint: disable=unused-argument function _cache_file (line 105) | def _cache_file(path, query): function _load_content_and_headers (line 124) | def _load_content_and_headers(path, query): function _touch_empty_file (line 138) | def _touch_empty_file(path, query): function _save_content_and_headers (line 146) | def _save_content_and_headers(path, query, content, headers): function translate (line 155) | def translate(text, lang): function cyr (line 183) | def cyr(to_translate): function _patch_greek (line 190) | def _patch_greek(original): function add_translations (line 194) | def add_translations(content, lang): function _fetch_content_and_headers (line 277) | def _fetch_content_and_headers(path, query_string, **kwargs): function _make_query (line 318) | def _make_query(path, query_string): function _normalize_query_string (line 338) | def _normalize_query_string(query_string): function proxy (line 362) | def proxy(path): FILE: bin/srv.py function send_static (line 47) | def send_static(path): function send_favicon (line 53) | def send_favicon(): function send_malformed (line 59) | def send_malformed(): function wttr (line 66) | def wttr(location=None): FILE: internal/config/config.go type Config (line 14) | type Config struct method Dump (line 187) | func (c *Config) Dump() []byte { type Logging (line 23) | type Logging struct type Server (line 35) | type Server struct type Uplink (line 52) | type Uplink struct type Cache (line 78) | type Cache struct type Geo (line 84) | type Geo struct type Nominatim (line 104) | type Nominatim struct function Default (line 117) | func Default() *Config { function Load (line 167) | func Load(filename string) (*Config, error) { FILE: internal/fmt/png/png.go function StringSliceToRuneSlice (line 13) | func StringSliceToRuneSlice(s string) [][]rune { function maxRowLength (line 29) | func maxRowLength(rows [][]rune) int { function GeneratePng (line 39) | func GeneratePng() { function GeneratePngFromANSI (line 129) | func GeneratePngFromANSI(input []byte, outputFile string) error { function colorANSItoRGB (line 197) | func colorANSItoRGB(colorANSI vt10x.Color) [3]float64 { function main (line 214) | func main() { FILE: internal/geo/ip/convert.go method ConvertCache (line 15) | func (c *Cache) ConvertCache() error { function createTable (line 76) | func createTable(db *godb.DB, tableName string) error { FILE: internal/geo/ip/ip.go type Address (line 23) | type Address struct method String (line 33) | func (l *Address) String() string { type Cache (line 46) | type Cache struct method Read (line 80) | func (c *Cache) Read(addr string) (*Address, error) { method readFromCacheFile (line 88) | func (c *Cache) readFromCacheFile(addr string) (*Address, error) { method readFromCacheDB (line 97) | func (c *Cache) readFromCacheDB(addr string) (*Address, error) { method Put (line 109) | func (c *Cache) Put(addr string, loc *Address) error { method putToCacheDB (line 117) | func (c *Cache) putToCacheDB(loc *Address) error { method putToCacheFile (line 135) | func (c *Cache) putToCacheFile(addr string, loc fmt.Stringer) error { method cacheFile (line 140) | func (c *Cache) cacheFile(addr string) string { method Response (line 190) | func (c *Cache) Response(r *http.Request) *routing.Cadre { function NewCache (line 52) | func NewCache(config *config.Config) (*Cache, error) { function NewAddressFromString (line 146) | func NewAddressFromString(addr, s string) (*Address, error) { function validIP4 (line 240) | func validIP4(ipAddress string) bool { FILE: internal/geo/ip/ip_test.go function TestParseCacheEntry (line 13) | func TestParseCacheEntry(t *testing.T) { FILE: internal/geo/location/cache.go type Cache (line 25) | type Cache struct method Resolve (line 66) | func (c *Cache) Resolve(location string) (*Location, error) { method Read (line 94) | func (c *Cache) Read(addr string) (*Location, error) { method readFromCacheFile (line 102) | func (c *Cache) readFromCacheFile(name string) (*Location, error) { method readFromCacheDB (line 143) | func (c *Cache) readFromCacheDB(addr string) (*Location, error) { method Put (line 160) | func (c *Cache) Put(addr string, loc *Location) error { method putToCacheDB (line 169) | func (c *Cache) putToCacheDB(loc *Location) error { method putToCacheFile (line 178) | func (c *Cache) putToCacheFile(addr string, loc fmt.Stringer) error { method cacheFile (line 183) | func (c *Cache) cacheFile(item string) string { function NewCache (line 34) | func NewCache(config *config.Config) (*Cache, error) { function normalizeLocationName (line 192) | func normalizeLocationName(name string) string { function latLngToTimezoneString (line 203) | func latLngToTimezoneString(lat, lon string) string { FILE: internal/geo/location/convert.go method ConvertCache (line 20) | func (c *Cache) ConvertCache(reset bool) error { function createTable (line 119) | func createTable(db *godb.DB, tableName string) error { function removeDBIfExists (line 134) | func removeDBIfExists(filename string) error { FILE: internal/geo/location/location.go type Location (line 8) | type Location struct method String (line 17) | func (l *Location) String() string { FILE: internal/geo/location/nominatim.go type Nominatim (line 13) | type Nominatim struct method Query (line 33) | func (n *Nominatim) Query(location string) (*Location, error) { type locationQuerier (line 20) | type locationQuerier interface function NewNominatim (line 24) | func NewNominatim(name, typ, url, token string) *Nominatim { function makeQuery (line 48) | func makeQuery(url string, result interface{}) error { FILE: internal/geo/location/nominatim_locationiq.go type locationIQ (line 10) | type locationIQ method Query (line 18) | func (data *locationIQ) Query(n *Nominatim, location string) (*Locatio... FILE: internal/geo/location/nominatim_opencage.go type locationOpenCage (line 10) | type locationOpenCage struct method Query (line 21) | func (data *locationOpenCage) Query(n *Nominatim, location string) (*L... FILE: internal/geo/location/response.go method Response (line 14) | func (c *Cache) Response(r *http.Request) *routing.Cadre { function errorResponse (line 45) | func errorResponse(s string) *routing.Cadre { FILE: internal/geo/location/search.go type Provider (line 5) | type Provider interface type Searcher (line 9) | type Searcher struct method Search (line 28) | func (s *Searcher) Search(location string) (*Location, error) { function NewSearcher (line 14) | func NewSearcher(config *config.Config) *Searcher { FILE: internal/logging/logging.go type RequestLogger (line 17) | type RequestLogger struct method Log (line 48) | func (rl *RequestLogger) Log(r *http.Request) error { method flush (line 76) | func (rl *RequestLogger) flush() error { type logEntry (line 26) | type logEntry struct method String (line 116) | func (e *logEntry) String() string { function NewRequestLogger (line 38) | func NewRequestLogger(filename string, period time.Duration) *RequestLog... FILE: internal/logging/suppress.go type LogSuppressor (line 11) | type LogSuppressor struct method Open (line 33) | func (ls *LogSuppressor) Open() error { method Close (line 47) | func (ls *LogSuppressor) Close() error { method Write (line 57) | func (ls *LogSuppressor) Write(p []byte) (int, error) { function NewLogSuppressor (line 24) | func NewLogSuppressor(filename string, suppress []string, linePrefix str... FILE: internal/options/options.go type WttrInOptions (line 11) | type WttrInOptions struct type QueryOption (line 17) | type QueryOption struct type Range (line 53) | type Range struct type FormatSpecifier (line 62) | type FormatSpecifier struct function NewFromFile (line 77) | func NewFromFile(filename string) (*WttrInOptions, error) { FILE: internal/options/parse.go function ParseQueryString (line 38) | func ParseQueryString(query string, config *WttrInOptions) (map[string]s... function buildOptionLookups (line 82) | func buildOptionLookups(options []QueryOption) (map[string]string, map[s... function handleFlagOption (line 95) | func handleFlagOption(key string, shortToName map[string]string, nameToO... function validateAndSetFlag (line 110) | func validateAndSetFlag(key string, shortToName map[string]string, nameT... function handleValueOption (line 130) | func handleValueOption(key, value string, shortToName map[string]string,... function validateBooleanOption (line 158) | func validateBooleanOption(name, value string, opt QueryOption, result m... function validateStringOption (line 176) | func validateStringOption(name, value string, opt QueryOption, result ma... function applyValidationRule (line 203) | func applyValidationRule(name, value, rule string) error { function validateIntegerOption (line 232) | func validateIntegerOption(name, value string, opt QueryOption, result m... function getMapKeys (line 250) | func getMapKeys(m map[string]string) []string { FILE: internal/options/processlog.go function ProcessLogFile (line 13) | func ProcessLogFile(logFilePath, errorFilePath string, config *WttrInOpt... function openLogFile (line 31) | func openLogFile(logFilePath string) (*os.File, error) { function openErrorFile (line 40) | func openErrorFile(errorFilePath string) (*os.File, *bufio.Writer, error) { function processLogLines (line 50) | func processLogLines(logFile *os.File, writer *bufio.Writer, config *Wtt... function processLogLine (line 66) | func processLogLine(line string, lineNumber int, writer *bufio.Writer, c... function extractQueryFromLine (line 83) | func extractQueryFromLine(line string, lineNumber int, writer *bufio.Wri... FILE: internal/processor/j1.go function getAny (line 12) | func getAny(req *http.Request, tr1, tr2, tr3, tr4 *http.Transport) (*Res... function getJ1 (line 38) | func getJ1(req *http.Request, transport *http.Transport) (*ResponseWithH... function getFormat (line 42) | func getFormat(req *http.Request, transport *http.Transport) (*ResponseW... function getDefault (line 46) | func getDefault(req *http.Request, transport *http.Transport) (*Response... function getUpstream (line 50) | func getUpstream(req *http.Request, transport *http.Transport) (*Respons... function checkURLForPNG (line 95) | func checkURLForPNG(r *http.Request) bool { FILE: internal/processor/peak.go method startPeakHandling (line 12) | func (rp *RequestProcessor) startPeakHandling() error { method savePeakRequest (line 40) | func (rp *RequestProcessor) savePeakRequest(cacheDigest string, r *http.... method prefetchRequest (line 48) | func (rp *RequestProcessor) prefetchRequest(r *http.Request) error { function syncMapLen (line 54) | func syncMapLen(sm *sync.Map) int { method prefetchPeakRequests (line 72) | func (rp *RequestProcessor) prefetchPeakRequests(peakRequestMap *sync.Ma... FILE: internal/processor/processor.go function plainTextAgents (line 25) | func plainTextAgents() []string { type ResponseWithHeader (line 45) | type ResponseWithHeader struct type RequestProcessor (line 55) | type RequestProcessor struct method Start (line 136) | func (rp *RequestProcessor) Start() error { method ProcessRequest (line 140) | func (rp *RequestProcessor) ProcessRequest(r *http.Request) (*Response... method processRequestFromCache (line 185) | func (rp *RequestProcessor) processRequestFromCache(r *http.Request) *... method processUncachedRequest (line 231) | func (rp *RequestProcessor) processUncachedRequest(r *http.Request) (*... function NewRequestProcessor (line 71) | func NewRequestProcessor(config *config.Config) (*RequestProcessor, erro... function getCacheDigest (line 273) | func getCacheDigest(req *http.Request) string { function dontCache (line 287) | func dontCache(req *http.Request) bool { function redirectInsecure (line 300) | func redirectInsecure(req *http.Request) (*ResponseWithHeader, bool) { function isPlainTextAgent (line 332) | func isPlainTextAgent(userAgent string) bool { function randInt (line 343) | func randInt(min int, max int) int { function ipFromAddr (line 348) | func ipFromAddr(s string) string { function fromCadre (line 358) | func fromCadre(cadre *routing.Cadre) *ResponseWithHeader { FILE: internal/routing/routing.go type CadreFormat (line 9) | type CadreFormat constant CadreFormatANSI (line 13) | CadreFormatANSI = iota constant CadreFormatHTML (line 16) | CadreFormatHTML constant CadreFormatPNG (line 19) | CadreFormatPNG type Cadre (line 23) | type Cadre struct type Handler (line 36) | type Handler interface type routeFunc (line 40) | type routeFunc type route (line 42) | type route struct type Router (line 48) | type Router struct method Route (line 53) | func (r *Router) Route(req *http.Request) Handler { method AddPath (line 64) | func (r *Router) AddPath(path string, handler Handler) { function routePath (line 68) | func routePath(path string) routeFunc { FILE: internal/stats/stats.go type Stats (line 14) | type Stats struct method Inc (line 29) | func (c *Stats) Inc(key string) { method Get (line 36) | func (c *Stats) Get(key string) int { method Reset (line 44) | func (c *Stats) Reset(key string) int { method Show (line 54) | func (c *Stats) Show() []byte { method Response (line 85) | func (c *Stats) Response(*http.Request) *routing.Cadre { function New (line 21) | func New() *Stats { FILE: internal/types/types.go type CacheType (line 3) | type CacheType constant CacheTypeDB (line 6) | CacheTypeDB = "db" constant CacheTypeFiles (line 7) | CacheTypeFiles = "files" FILE: internal/util/files.go function RemoveFileIfExists (line 7) | func RemoveFileIfExists(filename string) error { FILE: internal/util/http.go function ReadUserIP (line 11) | func ReadUserIP(r *http.Request) string { FILE: internal/util/yaml.go function YamlUnmarshalStrict (line 10) | func YamlUnmarshalStrict(in []byte, out interface{}) error { FILE: internal/view/v1/api.go type cond (line 18) | type cond struct type astro (line 33) | type astro struct type weather (line 40) | type weather struct type loc (line 48) | type loc struct type resp (line 54) | type resp struct method getDataFromAPI (line 63) | func (g *global) getDataFromAPI() (*resp, error) { method unmarshalLang (line 134) | func (g *global) unmarshalLang(body []byte, r *resp) error { FILE: internal/view/v1/cmd.go type Configuration (line 24) | type Configuration struct type global (line 38) | type global struct method configload (line 51) | func (g *global) configload() error { method configsave (line 60) | func (g *global) configsave() error { method init (line 69) | func (g *global) init() { constant wuri (line 46) | wuri = "http://127.0.0.1:5001/premium/v1/weather.ashx?" constant suri (line 47) | suri = "http://127.0.0.1:5001/premium/v1/search.ashx?" constant slotcount (line 48) | slotcount = 4 function Cmd (line 105) | func Cmd() error { FILE: internal/view/v1/format.go function windDir (line 12) | func windDir() map[string]string { method formatTemp (line 33) | func (g *global) formatTemp(c cond) string { method formatWind (line 178) | func (g *global) formatWind(c cond) string { function windInRightUnits (line 200) | func windInRightUnits(spd int, windMS, imperial bool) int { function speedToColor (line 210) | func speedToColor(spd, spdConverted int) string { method formatVisibility (line 240) | func (g *global) formatVisibility(c cond) string { method formatRain (line 248) | func (g *global) formatRain(c cond) string { method formatCond (line 264) | func (g *global) formatCond(cur []string, c cond, current bool) []string { function justifyCenter (line 353) | func justifyCenter(s string, width int) string { function reverse (line 368) | func reverse(s string) string { method pad (line 377) | func (g *global) pad(s string, mustLen int) string { FILE: internal/view/v1/icons.go function getIcon (line 4) | func getIcon(name string) []string { function codes (line 162) | func codes() map[int][]string { FILE: internal/view/v1/locale.go function locale (line 4) | func locale() map[string]string { function localizedCaption (line 80) | func localizedCaption() map[string]string { function daytimeTranslation (line 157) | func daytimeTranslation() map[string][]string { function unitTemp (line 234) | func unitTemp() map[bool]string { function localizedRain (line 241) | func localizedRain() map[string]map[bool]string { function localizedVis (line 262) | func localizedVis() map[string]map[bool]string { function localizedWind (line 283) | func localizedWind() map[string]map[int]string { function unitWind (line 313) | func unitWind(unit int, lang string) string { function unitVis (line 322) | func unitVis(unit bool, lang string) string { function unitRain (line 331) | func unitRain(unit bool, lang string) string { FILE: internal/view/v1/view1.go function slotTimes (line 10) | func slotTimes() []int { method printDay (line 15) | func (g *global) printDay(w weather) ([]string, error) { FILE: lib/airports.py function load_aiports_index (line 6) | def load_aiports_index(): function get_airport_gps_location (line 20) | def get_airport_gps_location(iata_code): FILE: lib/buttons.py function add_buttons (line 25) | def add_buttons(output): FILE: lib/cache.py function _update_answer (line 25) | def _update_answer(answer): function get_signature (line 37) | def get_signature(user_agent, query_string, client_ip_address, lang): function get (line 60) | def get(signature): function _randint (line 85) | def _randint(minimum, maximum): function store (line 89) | def store(signature, value): function _hash (line 111) | def _hash(signature): function _store_in_file (line 115) | def _store_in_file(signature, value): function _read_from_file (line 140) | def _read_from_file(signature, sighash=None): FILE: lib/duplicate_translations.py function remove_colon_and_strip_from_str (line 4) | def remove_colon_and_strip_from_str(line): function print_result_for_file (line 11) | def print_result_for_file(file_path, file_name, duplicate_entries): function find_duplicates (line 29) | def find_duplicates(directory, debug=False): FILE: lib/extract_emoji.py function extract_emojis_to_directory (line 51) | def extract_emojis_to_directory(dirname): FILE: lib/fmt/png.py function render_ansi (line 70) | def render_ansi(text, options=None): function _color_mapping (line 90) | def _color_mapping(color, inverse=False): function _strip_buf (line 113) | def _strip_buf(buf): function _script_category (line 145) | def _script_category(char): function _load_emojilib (line 163) | def _load_emojilib(): function _gen_term (line 177) | def _gen_term(buf, graphemes, options=None): function _fix_graphemes (line 272) | def _fix_graphemes(text): FILE: lib/fmt/unicodedata2.py function script_cat (line 1784) | def script_cat(chr): function script (line 1803) | def script(chr): function category (line 1808) | def category(chr): function _compile_scripts_txt (line 1813) | def _compile_scripts_txt(): FILE: lib/globals.py function error (line 137) | def error(text): function log (line 146) | def log(text): function debug_log (line 154) | def debug_log(text): function get_help_file (line 163) | def get_help_file(lang): function remove_ansi (line 172) | def remove_ansi(sometext): FILE: lib/limits.py function _time_caps (line 25) | def _time_caps(minutes, hours, days): class Limits (line 33) | class Limits(object): method __init__ (line 42) | def __init__(self, whitelist=None, limits=None): method _log_visit (line 66) | def _log_visit(self, interval, ip_address): method _limit_exceeded (line 71) | def _limit_exceeded(self, interval, ip_address): method _get_limit (line 76) | def _get_limit(self, interval): method _report_excessive_visits (line 79) | def _report_excessive_visits(self, interval, ip_address): method check_ip (line 84) | def check_ip(self, ip_address): method reset (line 102) | def reset(self): method _clear_counters_if_needed (line 109) | def _clear_counters_if_needed(self): FILE: lib/location.py function _debug_log (line 66) | def _debug_log(s): function _is_ip (line 72) | def _is_ip(ip_addr): function _location_normalize (line 91) | def _location_normalize(location): function _geolocator (line 105) | def _geolocator(location): function _ipcachewrite (line 137) | def _ipcachewrite(ip_addr, location): function _ipcache (line 162) | def _ipcache(ip_addr): function _ip2location (line 191) | def _ip2location(ip_addr): function _ipinfo (line 223) | def _ipinfo(ip_addr): function _geoip (line 246) | def _geoip(ip_addr): function _country_name_workaround (line 278) | def _country_name_workaround(country): function _get_location (line 285) | def _get_location(ip_addr): function _location_canonical_name (line 328) | def _location_canonical_name(location): function _load_aliases (line 337) | def _load_aliases(aliases_filename): function _load_iata_codes (line 353) | def _load_iata_codes(iata_codes_filename): function is_location_blocked (line 369) | def is_location_blocked(location): function _get_hemisphere (line 377) | def _get_hemisphere(location): function _fully_qualified_location (line 393) | def _fully_qualified_location(location, region, country): function location_processing (line 422) | def location_processing(location, ip_addr): function _main_ (line 521) | def _main_(): function _trace_ip (line 541) | def _trace_ip(): FILE: lib/metno.py function metno_request (line 19) | def metno_request(path, query_string): function celsius_to_f (line 60) | def celsius_to_f(celsius): function to_weather_code (line 64) | def to_weather_code(symbol_code): function to_description (line 123) | def to_description(symbol_code): function to_16_point (line 129) | def to_16_point(degrees): function meters_to_miles (line 165) | def meters_to_miles(meters): function mm_to_inches (line 169) | def mm_to_inches(mm): function hpa_to_mb (line 173) | def hpa_to_mb(hpa): function hpa_to_in (line 177) | def hpa_to_in(hpa): function hpa_to_mmHg (line 181) | def hpa_to_mmHg(hpa): function group_hours_to_days (line 185) | def group_hours_to_days(lat, lng, hourlies, days_to_return): function _convert_hour (line 246) | def _convert_hour(hour): function _convert_hourly (line 367) | def _convert_hourly(hours): function create_standard_json_from_metno (line 376) | def create_standard_json_from_metno(content, days_to_return): FILE: lib/parse_query.py function serialize (line 7) | def serialize(parsed_query): function deserialize (line 13) | def deserialize(url): function metric_or_imperial (line 35) | def metric_or_imperial(query, lang, us_ip=False): function parse_query (line 62) | def parse_query(args): function parse_wttrin_png_name (line 130) | def parse_wttrin_png_name(name): FILE: lib/proxy_log.py class Logger (line 11) | class Logger: method __init__ (line 18) | def __init__(self, filename_access, filename_errors): method _shorten_query (line 25) | def _shorten_query(self, query): method log (line 28) | def log(self, query, error): class LoggerWWO (line 45) | class LoggerWWO(Logger): method _shorten_query (line 50) | def _shorten_query(self, query): FILE: lib/translations.py function get_message (line 1063) | def get_message(message_name, lang): FILE: lib/view/line.py function convert_to_fahrenheit (line 54) | def convert_to_fahrenheit(temp): function render_temperature (line 60) | def render_temperature(data, query): function render_feel_like_temperature (line 76) | def render_feel_like_temperature(data, query): function render_condition (line 92) | def render_condition(data, query): function render_condition_fullname (line 114) | def render_condition_fullname(data, query): function render_condition_plain (line 135) | def render_condition_plain(data, query): function render_condition_int (line 143) | def render_condition_int(data, query): function render_humidity (line 148) | def render_humidity(data, query): function render_precipitation (line 159) | def render_precipitation(data, query): function render_precipitation_chance (line 170) | def render_precipitation_chance(data, query): function render_pressure (line 181) | def render_pressure(data, query): function render_dewpoint (line 192) | def render_dewpoint(data, query): function render_uv_index (line 219) | def render_uv_index(data, query): function render_wind (line 228) | def render_wind(data, query): function render_location (line 268) | def render_location(data, query): function render_moonphase (line 276) | def render_moonphase(_, query): function render_moonday (line 285) | def render_moonday(_, query): function get_geodata (line 298) | def get_geodata(location): function render_dawn (line 306) | def render_dawn(data, query, local_time_of): function render_dusk (line 312) | def render_dusk(data, query, local_time_of): function render_sunrise (line 318) | def render_sunrise(data, query, local_time_of): function render_sunset (line 324) | def render_sunset(data, query, local_time_of): function render_zenith (line 330) | def render_zenith(data, query, local_time_of): function render_local_time (line 336) | def render_local_time(data, query, local_time_of): function render_local_timezone (line 342) | def render_local_timezone(data, query, local_time_of): function render_line (line 380) | def render_line(line, data, query): function render_json (line 441) | def render_json(data): function format_weather_data (line 457) | def format_weather_data(query, parsed_query, data): function wttr_line (line 491) | def wttr_line(query, parsed_query): function main (line 504) | def main(): FILE: lib/view/moon.py function get_moon (line 14) | def get_moon(parsed_query): FILE: lib/view/prometheus.py function _render_current (line 11) | def _render_current(data, for_day="current", already_seen=[]): function _convert_time_to_minutes (line 54) | def _convert_time_to_minutes(time_str): function render_prometheus (line 67) | def render_prometheus(data): FILE: lib/view/v2.py function get_data (line 54) | def get_data(config): function interpolate_data (line 70) | def interpolate_data(input_data, max_width): function jq_query (line 84) | def jq_query(query, data_parsed): function colorize (line 96) | def colorize(string, color_code, html_output=False): function draw_spark (line 107) | def draw_spark(data, height, width, color_data): function draw_diagram (line 175) | def draw_diagram(data, height, width): function draw_date (line 193) | def draw_date(config, geo_data): function draw_time (line 221) | def draw_time(geo_data): function draw_astronomical (line 257) | def draw_astronomical(city_name, geo_data, config): function draw_emoji (line 338) | def draw_emoji(data, config): function draw_wind (line 360) | def draw_wind(data, color_data, config): function add_frame (line 418) | def add_frame(output, width, config): function generate_panel (line 449) | def generate_panel(data_parsed, geo_data, config): function textual_information (line 510) | def textual_information(data_parsed, geo_data, config, html_output=False): function get_geodata (line 640) | def get_geodata(location): function main (line 650) | def main(query, parsed_query, data): FILE: lib/view/wttr.py function get_wetter (line 27) | def get_wetter(parsed_query): function _wego_wrapper (line 91) | def _wego_wrapper(location, parsed_query): function _wego_postprocessing (line 127) | def _wego_postprocessing(location, parsed_query, stdout): function _htmlize (line 180) | def _htmlize(ansi_output, title, parsed_query): function _get_opengraph (line 207) | def _get_opengraph(parsed_query): FILE: lib/weather_data.py function get_weather_data (line 10) | def get_weather_data(location, lang): FILE: lib/wttr_srv.py function show_text_file (line 58) | def show_text_file(name, lang): function _client_ip_address (line 79) | def _client_ip_address(request): function _parse_language_header (line 96) | def _parse_language_header(header): function get_answer_language_and_view (line 143) | def get_answer_language_and_view(request): function get_output_format (line 170) | def get_output_format(query, parsed_query): function _cyclic_location_selection (line 193) | def _cyclic_location_selection(locations, period): function _response (line 211) | def _response(parsed_query, query, fast_mode=False): function parse_request (line 278) | def parse_request(location, request, query, fast_mode=False): function wttr (line 369) | def wttr(location, request): FILE: srv.go constant logLineStart (line 40) | logLineStart = "LOG_LINE_START " function suppressMessages (line 42) | func suppressMessages() []string { function copyHeader (line 51) | func copyHeader(dst, src http.Header) { function serveHTTP (line 59) | func serveHTTP(mux *http.ServeMux, port int, logFile io.Writer, errs cha... function serveHTTPS (line 71) | func serveHTTPS(mux *http.ServeMux, port int, certFile, keyFile string, ... function serve (line 93) | func serve(conf *config.Config) error { function mainHandler (line 152) | func mainHandler( function main (line 183) | func main() { function convertGeoIPCache (line 241) | func convertGeoIPCache(conf *config.Config) error { function convertGeoLocationCache (line 250) | func convertGeoLocationCache(conf *config.Config) error { function setLogLevel (line 259) | func setLogLevel(logLevel string) error {