2012-02-28 16:59:30 +00:00
|
|
|
from rapidsms.apps.base import AppBase
|
2012-02-28 18:10:22 +00:00
|
|
|
import re
|
|
|
|
import arrest
|
|
|
|
|
2012-02-28 19:48:28 +00:00
|
|
|
MAX_MSG_LEN = 160
|
2012-02-28 18:10:22 +00:00
|
|
|
DIGIT = re.compile(r"\d{1,3}")
|
2012-02-28 20:03:35 +00:00
|
|
|
PUNCT = re.compile(r"[^\w\s]")
|
2012-02-28 20:40:48 +00:00
|
|
|
"""
|
2012-02-28 20:03:35 +00:00
|
|
|
STYLE = {
|
2012-02-28 20:15:32 +00:00
|
|
|
"start": "-* ",
|
|
|
|
"repeat": " -*- ",
|
|
|
|
"end": " *-"
|
2012-02-28 20:03:35 +00:00
|
|
|
}
|
2012-02-28 20:40:48 +00:00
|
|
|
"""
|
|
|
|
|
|
|
|
STYLE = {"start": "", "repeat": "; ", "end": ""}
|
2012-02-28 20:03:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
ChaloBest = arrest.Client("http://chalobest.in/1.0")
|
2012-02-28 16:59:30 +00:00
|
|
|
|
|
|
|
class App(AppBase):
|
2012-02-28 18:10:22 +00:00
|
|
|
def handle(self, msg):
|
|
|
|
if DIGIT.search(msg.text):
|
2012-02-28 20:03:35 +00:00
|
|
|
routes = ChaloBest.routes(q=msg.text.replace(" ", ""))
|
2012-02-28 21:08:53 +00:00
|
|
|
if not routes:
|
2012-03-10 10:42:02 +00:00
|
|
|
msg.respond("Sorry, we found no route marked '%(text)s'.", text=msg.text)
|
2012-02-28 20:15:32 +00:00
|
|
|
return
|
2012-02-28 21:08:53 +00:00
|
|
|
detail = ChaloBest.route[routes[0]]
|
|
|
|
stops = detail['stops']['features']
|
2012-02-28 20:40:48 +00:00
|
|
|
origin, dest = stops[0]['properties'], stops[-1]['properties']
|
|
|
|
origin_name, dest_name = origin['display_name'], dest['display_name']
|
|
|
|
origin_area, dest_area = PUNCT.sub('', origin['area']), PUNCT.sub('', dest['area'])
|
2012-02-28 20:31:09 +00:00
|
|
|
msg.respond("%s: %s (%s) to %s (%s)" % (
|
2012-02-28 20:40:48 +00:00
|
|
|
",".join(routes), origin_name, origin_area, dest_name, dest_area))
|
2012-02-28 18:10:22 +00:00
|
|
|
else:
|
2012-02-28 20:56:10 +00:00
|
|
|
features = ChaloBest.stops(q=msg.text)['features']
|
|
|
|
if not features:
|
2012-03-10 10:42:02 +00:00
|
|
|
msg.respond("Sorry, we found no stops marked '%(text)s'.", text=msg.text)
|
2012-02-28 20:15:32 +00:00
|
|
|
return
|
2012-02-28 20:56:10 +00:00
|
|
|
stops = []
|
|
|
|
for feat in features:
|
|
|
|
stop = feat['properties']
|
|
|
|
if stops and stop["official_name"] == stops[-1]["official_name"]:
|
|
|
|
stops[-1]["routes"] += ", " + stop["routes"]
|
|
|
|
else:
|
|
|
|
stops.append(stop)
|
2012-02-28 20:03:35 +00:00
|
|
|
response = STYLE["start"]
|
2012-02-28 20:56:10 +00:00
|
|
|
for stop in stops:
|
|
|
|
match = stop["official_name"] + ": " + stop["routes"]
|
2012-02-28 20:31:09 +00:00
|
|
|
if len(response) > len(STYLE["repeat"]): response += STYLE["repeat"]
|
|
|
|
response += match
|
|
|
|
if len(response) > MAX_MSG_LEN: break
|
|
|
|
if len(response) > MAX_MSG_LEN:
|
|
|
|
response = response[:MAX_MSG_LEN-(len(STYLE["end"])+4)] + "..."
|
2012-02-28 20:03:35 +00:00
|
|
|
response += STYLE["end"]
|
2012-02-28 19:48:28 +00:00
|
|
|
msg.respond(response)
|