from gotovienna.BeautifulSoup import BeautifulSoup
#from urllib2 import urlopen
from urllib import quote_plus
+# Use urlopen proxy for fake user agent
from UrlOpener import urlopen
from datetime import time, datetime, timedelta
+import datetime as date
import re
import collections
from errors import LineNotFoundError, StationNotFoundError
self['line'] = line
self['station'] = station
self['direction'] = direction
- self['time'] = time
- self['lowfloor'] = lowfloor
-
- def __getitem__(self, *args, **kwargs):
- if args[0] == 'ftime':
- # string representation of time/minutes
- return self.ftime
- elif args[0] == 'deltatime':
- # minutes
- return self.departure_deltatime
- elif args[0] == 'atime':
- # time object
- return self.departure_time
- return dict.__getitem__(self, *args, **kwargs)
-
- @property
- def departure_time(self):
- """ return time object of departure time
- """
- if type(self['time']) == time:
- return self['time']
+ now = datetime.now()
+ if type(time) == date.time:
+ time = make_datetime(now, time)
+ if type(time) == datetime:
+ # FIXME convert in ModelList
+ self['realtime'] = False
+ self['time'] = (time - now).seconds/60
+ self['departure'] = time
+ elif type(time) == int:
+ # FIXME convert in ModelList
+ self['realtime'] = True
+ self['time'] = time
+ self['departure'] = now + timedelta(minutes=self['time'])
else:
- return (datetime.now() + timedelta(0, self['time']) * 60).time()
+ raise ValueError('Wrong type: time')
- @property
- def departure_deltatime(self):
- """ return int representing minutes until departure
- """
- if type(self['time']) == int:
- return self['time']
- else:
- raise NotImplementedError()
-
- @property
- def ftime(self):
- if type(self['time']) == int:
- return str(self['time'])
- elif type(self['time']) == time:
- return self['time'].strftime('%H:%M')
+ # FIXME convert in ModelList
+ self['ftime'] = str(self['time'])
+ self['lowfloor'] = lowfloor
class ITipParser:
def __init__(self):
t = tim.strip(' ').split(':')
if len(t) == 2 and all(map(lambda x: x.isdigit(), t)):
t = map(int, t)
- d['time'] = time(*t)
+ d['time'] = make_datetime(datetime.now(), time(*t))
else:
# Unexpected content
#TODO replace with logger
return dep
def get_departures(self, url):
- """ Get list of next departures as Departure object
+ """ Get list of next departures as Departure objects
"""
#TODO parse line name and direction for station site parsing
sleep(0.5)
-
+ def get_departures_test(self, line, station):
+ """ replacement for get_departure
+ hide url in higher levels :)
+ """
+ raise NotImplementedError
UBAHN, TRAM, BUS, NIGHTLINE, OTHER = range(5)
lines.sort(key=get_line_sort_key)
return [(LINE_TYPE_NAMES[key], categorized_lines[key])
- for key in sorted(categorized_lines)]
+ for key in sorted(categorized_lines)]
+
+def make_datetime(date, time):
+ """ Ugly workaround, immutable datetime ftw -.-
+ If
+ """
+ if date.hour > time.hour:
+ date = date + timedelta(1)
+ return datetime(year=date.year,
+ month=date.month,
+ day=date.day,
+ hour=time.hour,
+ minute=time.minute,
+ second=time.second)