wrongmove/crawler/rec/route_serializer.py
Viktor Barzin 150342bb9e
Refactor codebase following Clean Code principles and add 229 tests
- Extract helpers to reduce function sizes (listing_tasks, app.py, query.py, listing_fetcher)
  - Replace nonlocal mutations with _PipelineState dataclass in listing_tasks
  - Fix bugs: isinstance→equality check in repository, verify_exp for OIDC tokens
  - Consolidate duplicate filter methods in listing_repository
  - Move hardcoded config to env vars with backward-compatible defaults
  - Simplify CLI decorator to auto-build QueryParameters
  - Add deprecation docstring to data_access.py
  - Test count: 158 → 387 (all passing)
2026-02-07 20:19:57 +00:00

47 lines
1.8 KiB
Python

import dataclasses
import json
from typing import List
from models.listing import DestinationMode, Route, RouteLegStep
from rec import routing
class RouteSerializer:
@staticmethod
def serialize(routing_info: dict[DestinationMode, list[Route]]) -> str:
return json.dumps(
{
json.dumps(dataclasses.asdict(destination_mode)): [
json.dumps(dataclasses.asdict(route)) for route in routes
]
for destination_mode, routes in routing_info.items()
}
)
@staticmethod
def deserialize(route_data_json: str) -> dict[DestinationMode, List[Route]]:
json_data = json.loads(route_data_json)
destination_routes = {}
for destination_mode_str, routes_json in json_data.items():
parsed_destination = json.loads(destination_mode_str)
destination_mode = DestinationMode(
destination_address=parsed_destination["destination_address"],
travel_mode=routing.TravelMode(parsed_destination["travel_mode"]),
)
parsed_route = json.loads(routes_json[0])
routes = [
Route(
legs=[
RouteLegStep(
distance_meters=step["distance_meters"],
duration_s=step["duration_s"],
travel_mode=routing.TravelMode(step["travel_mode"]),
)
for step in parsed_route["legs"]
],
distance_meters=parsed_route["distance_meters"],
duration_s=int(parsed_route["duration_s"]),
)
]
destination_routes[destination_mode] = routes
return destination_routes