diff --git a/poetry.lock b/poetry.lock index ac77e57..d34b356 100644 --- a/poetry.lock +++ b/poetry.lock @@ -560,17 +560,6 @@ category = "dev" optional = false python-versions = "*" -[[package]] -name = "ordered-enum" -version = "0.0.6" -description = "A small library for adding total orderings to enums" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -dev = ["flake8", "black", "isort", "pytest", "coverage", "twine"] - [[package]] name = "packaging" version = "21.3" @@ -1176,7 +1165,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "a16d95dc7da24866de6b1bb0effb62079075d9c916d1f2567fe9bef660de9aeb" +content-hash = "b3b207e1805372bbb9505b08542ed795956e4ed812c97b93964d4eae0657bf7b" [metadata.files] alabaster = [ @@ -1537,9 +1526,6 @@ nodeenv = [ {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, ] -ordered-enum = [ - {file = "ordered_enum-0.0.6.tar.gz", hash = "sha256:6544c0f528eeeec0bbe7999bf512c40fe62de24bedba9cf881f3bc24f57ad773"}, -] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, diff --git a/pyproject.toml b/pyproject.toml index 333ee33..bbff134 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,6 @@ pyproj = "^3.3.0" python-dateutil = "^2.8.2" requests = "^2.27.1" shapely-geojson = "^0.0.1" -ordered-enum = "^0.0.6" [tool.poetry.dev-dependencies] Sphinx = "^4.4.0" diff --git a/pytxc/elements.py b/pytxc/elements.py index 8c92287..64aa2bf 100644 --- a/pytxc/elements.py +++ b/pytxc/elements.py @@ -19,7 +19,7 @@ def __repr__(self): class_name = self.__class__.__name__ attrs = [] if self.text: - attrs.append("text={self.text!r}") + attrs.append(f"text={self.text!r}") attrs += [f"{key}={value!r}" for key, value in self.attributes.items()] attrs_str = ", ".join(attrs) return f"{class_name}({attrs_str})" @@ -75,6 +75,10 @@ def get_children(self) -> List["Element"]: def get_root(self) -> "Element": return Element(self._element.getroottree().getroot()) + @property + def line_number(self) -> Optional[int]: + return self._element.sourceline # type: ignore + E = TypeVar("E", bound=Element) diff --git a/pytxc/services.py b/pytxc/services.py index a8f6d8d..3299e42 100644 --- a/pytxc/services.py +++ b/pytxc/services.py @@ -58,6 +58,22 @@ class DayOfWeek(Enum): saturday = "Saturday" sunday = "Sunday" + @classmethod + def from_weekday_int(cls, weekday: int) -> "DayOfWeek": + """Create DayOfWeek object from zero-based integer, compatible with + library method date.weekday() + """ + map = { + 0: cls.monday, + 1: cls.tuesday, + 2: cls.wednesday, + 3: cls.thursday, + 4: cls.friday, + 5: cls.saturday, + 6: cls.sunday + } + return map[weekday] + class OperatingProfile(Element): def __repr__(self) -> str: diff --git a/pytxc/vehicles.py b/pytxc/vehicles.py index 0eb0cca..28d3c03 100644 --- a/pytxc/vehicles.py +++ b/pytxc/vehicles.py @@ -4,7 +4,7 @@ from .elements import Element from .journeys import JourneyPatternRef, JourneyPatternTimingLinkRef from .operators import OperatorRef -from .services import LineRef, ServiceRef +from .services import LineRef, OperatingProfile, ServiceRef class Block(Element): @@ -110,3 +110,11 @@ def departure_time(self) -> Optional[time]: def timing_links(self) -> List[VehicleJourneyTimingLink]: path = "VehicleJourneyTimingLink" return [VehicleJourneyTimingLink(element) for element in self.find_all(path)] + + @property + def operating_profile(self) -> Optional[OperatingProfile]: + path = "OperatingProfile" + element = self.find(path) + if element is not None: + return OperatingProfile(element) + return None diff --git a/tests/test_elements.py b/tests/test_elements.py index 414f6c5..9cc2d0b 100644 --- a/tests/test_elements.py +++ b/tests/test_elements.py @@ -25,3 +25,9 @@ def test_text_none(): element = etree.fromstring(element_str) element.text = None assert Element(element).text is None + + +def test_line_number(txc_file): + timetable = Timetable.from_file(txc_file) + first_stop_point = timetable.stop_points[0] + assert first_stop_point.line_number == 5 diff --git a/tests/test_journeys.py b/tests/test_journeys.py index 82e44b6..5132fec 100644 --- a/tests/test_journeys.py +++ b/tests/test_journeys.py @@ -110,6 +110,10 @@ def test_vehicle_journeys(txc_file): block = operational.block assert block is None + operating_profile = journey.operating_profile + assert operating_profile is not None + assert operating_profile.holidays_only + def test_journey_pattern_timing_link_none(): jp_timing_link_str = """ @@ -164,3 +168,19 @@ def test_vehicle_journey_none_children(): assert vehicle_journey.operational is None assert vehicle_journey.departure_time is None + + +def test_operating_profile_none(): + vehicle_journey_str = """ + + + + + + + + """ + element = etree.fromstring(vehicle_journey_str) + vehicle_journey = VehicleJourney(element) + operating_profile = vehicle_journey.operating_profile + assert operating_profile is None diff --git a/tests/test_services.py b/tests/test_services.py index b37b363..402b132 100644 --- a/tests/test_services.py +++ b/tests/test_services.py @@ -121,3 +121,10 @@ def test_operating_profile_week_days(): assert DayOfWeek.thursday in days_of_week assert DayOfWeek.friday in days_of_week assert operating_profile.holidays_only is False + + +def test_day_of_week_from_int(): + day = DayOfWeek.from_weekday_int(0) + assert day == DayOfWeek.monday + day = DayOfWeek.from_weekday_int(6) + assert day == DayOfWeek.sunday