Source code for darwinpush.messages.TrainOrderMessage

from darwinpush.messages.BaseMessage import BaseMessage

from dateutil.parser import *

import enum

class Action(enum.Enum):
    Set = 1
    Clear = 2


class UnknownTrainOrderActionError(Exception):
    pass


class TrainOrderItem():
    def __init__(self, raw):
        self._raw = raw

        try:
            self._working_arrival_time = parse(self.raw.rid.wta).time()
        except AttributeError:
            self._working_arrival_time = None

        try:
            self._working_departure_time = parse(self.raw.rid.wtd).time()
        except AttributeError:
            self._working_departure_time = None

        try:
            self._working_pass_time = parse(self.raw.rid.wtp).time()
        except AttributeError:
            self._working_pass_time = None

        try:
            self._public_arrival_time = parse(self.raw.rid.pta).time()
        except AttributeError:
            self._public_arrival_time = None

        try:
            self._public_departure_time = parse(self.raw.rid.ptd).time()
        except AttributeError:
            self._public_departure_time = None

    @property
    def raw(self):
        return self._raw

    @property
    def rid(self):
        return self.raw.rid.value()

    @property
    def headcode(self):
        return self.raw.trainID

    @property
    def working_arrival_time(self):
        return self._working_arrival_time

    @property
    def working_departure_time(self):
        return self._working_departure_time

    @property
    def working_pass_time(self):
        return self._working_pass_time

    @property
    def public_arrival_time(self):
        return self._public_arrival_time

    @property
    def public_departure_time(self):
        return self._public_departure_time


[docs]class TrainOrderMessage(BaseMessage): def __init__(self, raw, containing_message, xml): super().__init__(raw, containing_message, xml) self._determine_action() self._extract_train_order_data() def _determine_action(self): if self.raw.set_ is not None: self._action = Action.Set elif self.raw.clear is not None: self._action = Action.Clear else: raise UnknwonTrainOrderActionError("Unknown Train order Action encountered. All known actions were None: {}".format(self.xml)) def _extract_train_order_data(self): if self.action != Action.Set: return if self.raw.set_.first is not None: self._first = TrainOrderItem(self.raw.set_.first) else: self._first = None if self.raw.set_.second is not None: self._second = TrainOrderItem(self.raw.set_.second) else: self._second = None if self.raw.set_.third is not None: self._third = TrainOrderItem(self.raw.set_.third) else: self._third = None @property def action(self): return self._action @property def tiploc(self): return self.raw.tiploc @property def crs(self): return self.raw.crs @property def platform(self): return self.raw.platform @property def first(self): return self._first @property def second(self): return self._second @property def third(self): return self._third