diff options
| -rwxr-xr-x | bin/nvm | 42 | 
1 files changed, 29 insertions, 13 deletions
| @@ -5,16 +5,15 @@  #  # SPDX-License-Identifier: BSD-2-Clause -import argparse  import aiohttp  from aiohttp import web +import argparse  from datetime import datetime  import dateutil.parser - -from jinja2 import Environment, FileSystemLoader, select_autoescape -  import geojson +from jinja2 import Environment, FileSystemLoader, select_autoescape +import logging  import json  import os  import shapely.geometry @@ -84,6 +83,7 @@ class EFA:                  {"placeInfo_dm": "invalid", "placeState_dm": "empty", "place_dm": place}              )          departures = list() +        logging.debug(f"Requesting '{place}' '{name}' from {self.url}")          async with aiohttp.ClientSession() as session:              async with session.post(self.url, data=self.post_data) as response:                  # EFA may return JSON with a text/html Content-Type, which response.json() does not like. @@ -254,10 +254,12 @@ async def show_departure_board(request):      except ValueError:          return web.HTTPBadRequest(text="EVA must be a number at the moment") +    request_url = ( +        f"{db_rest_api}/stops/{eva}/departures?results=60&duration=120&stopovers=true" +    ) +    logging.debug(f"Requesting '{eva}' departures from {request_url}")      async with aiohttp.ClientSession() as session: -        async with session.get( -            f"{db_rest_api}/stops/{eva}/departures?results=60&duration=120&stopovers=true" -        ) as response: +        async with session.get(request_url) as response:              departures = await response.json()      if type(departures) is dict and departures.get("error", False): @@ -304,10 +306,10 @@ async def show_departure_board(request):  async def redirect_to_departure_board(request):      stop_name = request.query["name"] +    request_url = f"{db_rest_api}/locations?query={stop_name}&poi=false&addresses=false" +    logging.debug(f"Requesting stops matcihng '{stop_name}' from {request_url}")      async with aiohttp.ClientSession() as session: -        async with session.get( -            f"{db_rest_api}/locations?query={stop_name}&poi=false&addresses=false" -        ) as response: +        async with session.get(request_url) as response:              stops = await response.json()      stops_page = env.get_template("stops.html")      return web.Response( @@ -328,10 +330,10 @@ async def ajax_geolocation(request):      request_data = await request.json()      lat = request_data["lat"]      lon = request_data["lon"] +    request_url = f"{db_rest_api}/stops/nearby?latitude={lat}&longitude={lon}" +    logging.debug(f"Requesting stops near {lat}/{lon} from {request_url}")      async with aiohttp.ClientSession() as session: -        async with session.get( -            f"{db_rest_api}/stops/nearby?latitude={lat}&longitude={lon}" -        ) as response: +        async with session.get(request_url) as response:              departures = await response.json()      return web.Response(          body=json.dumps(departures), @@ -344,8 +346,22 @@ if __name__ == "__main__":      parser = argparse.ArgumentParser(description="eva to efa gateway")      parser.add_argument("--port", type=int, metavar="PORT", default=8080)      parser.add_argument("--prefix", type=str, metavar="PATH", default="/") +    parser.add_argument( +        "--log-level", +        metavar="LEVEL", +        choices=["debug", "info", "warning", "error"], +        default="warning", +        help="Set log level", +    )      args = parser.parse_args() +    if args.log_level: +        numeric_level = getattr(logging, args.log_level.upper(), None) +        if not isinstance(numeric_level, int): +            print(f"Invalid log level: {args.log_level}", file=sys.stderr) +            sys.exit(1) +        logging.basicConfig(level=numeric_level) +      apis = TransportAPIs()      app = web.Application() | 
