From 3263bca45820565a5f0a76b23d567f7f2f16009b Mon Sep 17 00:00:00 2001 From: GockBlock64 Date: Mon, 12 Jan 2026 00:18:14 -0500 Subject: [PATCH 1/2] Fixed vehicle latitude/longitude --- passiogo/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/passiogo/__init__.py b/passiogo/__init__.py index e80855b..cd76ca5 100644 --- a/passiogo/__init__.py +++ b/passiogo/__init__.py @@ -683,7 +683,8 @@ def __init__( self.routeName = routeName self.color = color self.created = created - self.longitude = latitude + self.latitude = latitude + self.longitude = longitude self.speed = speed self.paxLoad = paxLoad self.outOfService = outOfService From 6ec97088ffe64353bf3bae11087b77a507aaf713 Mon Sep 17 00:00:00 2001 From: GockBlock64 Date: Mon, 12 Jan 2026 20:05:59 -0500 Subject: [PATCH 2/2] Finalized PassioGo Vehicle Fix --- .gitattributes | 2 - .gitignore | 5 - .readthedocs.yaml | 26 -- CHANGELOG.md | 74 --- LICENSE | 2 +- README.md | 42 +- dist/passiogo_fix-0.0.3-py3-none-any.whl | Bin 0 -> 12268 bytes dist/passiogo_fix-0.0.3.tar.gz | Bin 0 -> 17030 bytes docs/api.md | 440 ------------------ docs/changelog.md | 1 - docs/examples.md | 3 - docs/index.md | 1 - docs/requirements.txt | 2 - mkdocs.yml | 21 - pyproject.toml | 19 + requirements.txt | 2 - setup.py | 27 -- src/passiogo_fix.egg-info/PKG-INFO | 414 ++++++++++++++++ src/passiogo_fix.egg-info/SOURCES.txt | 9 + .../dependency_links.txt | 0 src/passiogo_fix.egg-info/top_level.txt | 1 + src/passiogo_fix/__init__.py | 0 .../passiogo_fix/passiogo.py | 0 tests/__init__.py | 1 - tests/test_main.py | 44 -- 25 files changed, 461 insertions(+), 675 deletions(-) delete mode 100644 .gitattributes delete mode 100644 .gitignore delete mode 100644 .readthedocs.yaml delete mode 100644 CHANGELOG.md create mode 100644 dist/passiogo_fix-0.0.3-py3-none-any.whl create mode 100644 dist/passiogo_fix-0.0.3.tar.gz delete mode 100644 docs/api.md delete mode 100644 docs/changelog.md delete mode 100644 docs/examples.md delete mode 100644 docs/index.md delete mode 100644 docs/requirements.txt delete mode 100644 mkdocs.yml create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.py create mode 100644 src/passiogo_fix.egg-info/PKG-INFO create mode 100644 src/passiogo_fix.egg-info/SOURCES.txt rename docs/conf.py => src/passiogo_fix.egg-info/dependency_links.txt (100%) create mode 100644 src/passiogo_fix.egg-info/top_level.txt create mode 100644 src/passiogo_fix/__init__.py rename passiogo/__init__.py => src/passiogo_fix/passiogo.py (100%) delete mode 100644 tests/__init__.py delete mode 100644 tests/test_main.py diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b91ce57..0000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ - -/passiogo/__pycache__ -/tests/__pycache__ -/.ipynb_checkpoints -Testing.ipynb diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index f2f042f..0000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Read the Docs configuration file for MkDocs projects - -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - - -# Required - -version: 2 - - -# Set the version of Python and other tools you might need - -build: - os: ubuntu-22.04 - tools: - python: "3.12" - -mkdocs: - configuration: mkdocs.yml - - -# Optionally declare the Python requirements required to build your docs - -python: - install: - - requirements: docs/requirements.txt \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 846cab7..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,74 +0,0 @@ -# Changelog - - -## 0.2.1 (2024-08-18) - -### Added - -- Testing for every transportation system -- `Vehicle` object -- `TransportationSystem.getVehicles()` which returns a list of `Vehicle` objects - -### Changed - -- Fixed `AttributeError: 'list' object has no attribute 'items'` error thrown in `TransportationSystem.getRoutes()` - -### Removed - - -## 0.2.0 (2024-07-31) - -### Added - -- `TransportationSystem` class with the following methods: `getRoutes()`, `getStops()`, `getSystemAlerts()` -- `Route` class with the following method: `getStops()` -- `Stop` class -- `getSystems()` -- `getSystemsFromID()` -- `printAllSystemsMd()` - -### Changed - -### Removed - - -## 0.1.2 (2024-07-14) - -### Added - -- Added License - -### Changed - -- Fixed Documentation Build -- All -- Fixed PyPi long description type -- `printAllSystemsMd()` has the new parameter `includeHtml` with a default of `True` to render HTML breaks after each line - -### Removed - -- Removed obsolete `debug` parameters - - -## 0.1.1 (2024-07-12) - -### Added - -- Create Documentation With ReadTheDocs.io -- Create Changelog -- New `getSystems()` Method -- New `printAllSystemsMd()` Method -- Added PyPi Project Links - -### Changed - -- Change Project Description - -### Removed - -- None - - -## 0.1.0 (2024-07-12) - -- Initial Commit \ No newline at end of file diff --git a/LICENSE b/LICENSE index 75d3956..314d28f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Andrei Thüler +Copyright (c) 2026 Antonios Theocharopoulos Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 8f7aedd..fcd8a78 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,40 @@ -# Passio Go API +# Passio Go API Fixed -[![PyPI - Version](https://img.shields.io/pypi/v/passiogo?label=Latest%20Version&link=https%3A%2F%2Fpypi.org%2Fproject%2FPassioGo%2F)](https://pypi.org/project/PassioGo/) -[![Pepy Total Downlods](https://img.shields.io/pepy/dt/PassioGo)](https://www.pepy.tech/projects/passiogo) +[![PyPI - Version](https://img.shields.io/pypi/v/passiogo-fix?label=Latest%20Version&link=https%3A%2F%2Fpypi.org%2Fproject%2Fpassiogo-fix%2F)](https://pypi.org/project/passiogo-fix/) +[![Pepy Total Downlods](https://img.shields.io/pepy/dt/passiogo-vehicle-fix)](https://www.pepy.tech/projects/passiogo-vehicle-fix) [![Documentation Status](https://readthedocs.org/projects/passiogo/badge/?version=latest)](https://passiogo.readthedocs.io/en/latest/?badge=latest) -An **unofficial** Python API for [Passio Go](https://passiogo.com/) allowing anyone to build transit-based applications for hundreds of Universities, Municipalities, Paratransit, and Airports. +An **unofficial** Python API for [Passio Go](https://passiogo.com/) allowing anyone to build transit-based applications for hundreds of Universities, Municipalities, Paratransit, and Airports. Based on [Andrei Thüler's PassioGo API](https://github.com/athuler/PassioGo), with the vehicle latitude/longitude issue fixed. ## Installation -The package is available to download using [pip](https://pypi.org/project/PassioGo/). +The package is available to download using [pip](https://pypi.org/project/passiogo-fix/). ``` -pip install passiogo +pip install passiogo-fix ``` ## Documentation -Project documentation for the latest stable version is available at [passiogo.readthedocs.io](https://passiogo.readthedocs.io/). Documentation for other versions is available at [passiogo.readthedocs.io/en/X.X.X](https://passiogo.readthedocs.io/en/0.1.2/). +Project documentation for Andrei Thüler's latest stable version is available at [passiogo.readthedocs.io](https://passiogo.readthedocs.io/). Documentation for other versions is available at [passiogo.readthedocs.io/en/X.X.X](https://passiogo.readthedocs.io/en/0.1.2/). -The documentation is built using `mkdocs` and can be rebuilt using the following: -``` -pip install -r docs/requirements.txt -mkdocs serve +## Usage + +### Importing + +To import this version of the API, you will need to run the following: + +```python +from passiogo_fix import passiogo ``` +Otherwise, everything is exactly the same as Andrei Thüler's API. -## Usage ### Transportation System @@ -172,19 +176,7 @@ alerts[0].__dict__ ## Changelog -This project's changelog is available at [`CHANGELOG.md`](https://github.com/athuler/PassioGo/blob/main/CHANGELOG.md) - - -## Bug Reporting / Feedback - -Found a bug? Have an idea for a new feature? Please [send it in as a GitHub issue](https://github.com/athuler/PassioGo/issues)! - - -## Contributing - -Interested in contributing to this package? Check out [open issues](https://github.com/athuler/PassioGo/issues). - -When ready, [fork the repository](https://github.com/athuler/PassioGo/fork), make your edits, then open a pull request on the active development branch. +Andrei Thüler's changelog (everything besides this fix) is available at [`CHANGELOG.md`](https://github.com/athuler/PassioGo/blob/main/CHANGELOG.md)\ ## All Transportation Systems Accessible By The API diff --git a/dist/passiogo_fix-0.0.3-py3-none-any.whl b/dist/passiogo_fix-0.0.3-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..aed57b839325bb43d30e71d869da0ae5b9561a1f GIT binary patch literal 12268 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 literal 0 HcmV?d00001 diff --git a/dist/passiogo_fix-0.0.3.tar.gz b/dist/passiogo_fix-0.0.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..816e196be1b7f1525e19fd8d88d7c4e2ef1066f5 GIT binary patch literal 17030 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 z, - , - , - ... - , - ] -``` - -## `getSystemFromID()` - -Gets the system with the corresponding id. If there is no match, returns *None*. - -**Inputs**: - -- **appVersion** (*int*): Version of the application (Default: 2) -- **sortMode** (*int*): Unknown (Default: 1) - -**Returns**: [`TransportationSystem`](#transportationsystem) or *None* if no match - -```python -passiogo.getSystemFromID(1068) -``` - -``` - -``` - - -## `TransportationSystem` - -### `TransportationSystem.__init__()` - -**id** is the only required parameter, all other default to *None*. - -- **id** (*int*): ID of the system -- **name** (*str*): The full name of the system -- **username** (*str*): URL-friendly system name -- **goAgencyName** (*str*): Display name of the system -- **email** (*str*): Contact email address for the system -- **goTestMode** (*bool*): Unknown -- **name2** (*bool*): Unknown -- **homepage** (*str*): URL to the agency's homepage -- **logo** (*bool*): Unknown -- **goRoutePlannerEnabled** (*bool*): Unknown -- **goColor** (*str*): Unknown -- **goSupportEmail** (*str*): Unknown -- **goSharedCode** (*int*): Unknown -- **goAuthenticationType** (*bool*): Unknown - -```json -{'id': 1068, - 'name': 'University of Chicago', - 'username': 'chicago', - 'goAgencyName': 'University of Chicago', - 'email': 'bus@uchicago.edu', - 'goTestMode': False, - 'name2': False, - 'homepage': 'https://safety-security.uchicago.edu/en/transportation', - 'logo': True, - 'goRoutePlannerEnabled': False, - 'goColor': '#843c39', - 'goSupportEmail': 'bus@uchicago.edu', - 'goSharedCode': 1312, - 'goAuthenticationType': False} -``` - -### `TransportationSystem.getRoutes()` - -Get all routes for the appropriate system. - -**Input**: - -- **appVersion** (*int*): Version of the application (Default: 1) -- **amount** (*int*): Unknown (Default: 1) - -**Output**: *List* of [`Route`](#route) - -```python -passiogo.getSystemFromID(1068).getRoutes() -``` - -``` -[, - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - ] -``` - -### `TransportationSystem.getStops()` - -Gets all stops for the given transportation system. - -**Inputs**: - -- **appVersion** (*int*): Version of the application (Default: 2) -- **sA** (*int*): Unknown (Default: 1) - -**Output**: *List* of [`Stop`](#stop) - -```python -passiogo.getSystemFromID(1068).getStops() -``` - -``` -[, - , - , - , - , - , - , - , - , - ... - ] -``` - -### `TransportationSystem.getSystemAlerts()` - -Gets all alerts for the corresponding transportation system. - -**Inputs**: - -- **appVersion** (*int*): Version of the application (Default: 1) -- **amount** (*int*): Unknown (Default: 1) -- **routesAmount** (*int*): Unknown (Default: 1) - -**Output**: *List* of [`SystemAlert`](#systemalert) - -```python -passiogo.getSystemFromID(1068).getSystemAlerts() -``` - -``` -[, - , - , - ] -``` - - -### `TransportationSystem.getVehicles()` - -Gets all alerts for the corresponding transportation system. - -**Inputs**: - -- **appVersion** (*int*): Version of the application (Default: 1) - - -**Output**: *List* of [`Vehicle`](#vehicle) - -```python -passiogo.getSystemFromID(1068).getVehicles() -``` - -``` -[, - , - , - , - ... - , - , - ] -``` - -## `Route` - -### `Route.__init__()` - -**id** is the only required parameter, all other default to *None*. - -- **id** (*int*): ID of the route -- **groupId** (*int*): Unknown -- **groupColor** (*str*): Unknown -- **name** (*str*): Name of the route -- **shortName** (*str*): Short name / abbreviation of the route -- **nameOrig** (*str*): Unknown -- **fullname** (*str*): Unknown -- **myid** (*int*): Unknown -- **mapApp** (*bool*): Unknown -- **archive** (*bool*): Unknown -- **goPrefixRouteName** (*bool*): Unknown -- **goShowSchedule** (*bool*): Unknown -- **outdated** (*bool*): Unknown -- **distance** (*int*): Unknown -- **latitude** (*float*): Unknown -- **longitude** (*float*): Unknown -- **timezone** (*str*): Timezone of the route -- **serviceTime** (*str*): Route Schedule -- **serviceTimeShort** (*str*): Route Schedule -- **systemId** (*int*): ID of the transportation system -- **system** (*[`TransportationSystem`](#transportationsystem)*): transportation system object - -```json -{'id': '133007', - 'groupId': '5702', - 'groupColor': '#0000ff', - 'name': 'Apostolic', - 'shortName': 'AP', - 'nameOrig': 'Apostolic', - 'fullname': 'University of Chicago', - 'myid': '38729', - 'mapApp': '1', - 'archive': '0', - 'goPrefixRouteName': '1', - 'goShowSchedule': 1, - 'outdated': '1', - 'distance': 578, - 'latitude': '41.780867018', - 'longitude': '-87.592902254', - 'serviceTime': 'is not provided: no bus on the route', - 'serviceTimeShort': 'No bus in service', - 'systemId': 1068, - 'system': } -``` - -### `Route.getStops()` - -Gets the list of stops for this route and stores it as an argument - -**Output**: *List* of [`Stop`](#stop) - -```python -passiogo.getSystemFromID(1068).getRoutes()[0].getStops() -``` - -``` -[, - , - , - , - , - , - , - , - ] -``` - -## `Stop` - -### `Stop.__init__()` - -**id** is the only required parameter, all other default to *None*. - -- **id** (*str*): ID of the stop -- **routeId** (*str*): ID of the route -- **systemId** (*int*): ID of the transportation system -- **position** (*int*): Unknown -- **name** (*str*): Name of the stop -- **latitude** (*float*): Latitude of the stop -- **longitude** (*float*): Longitude of the stop -- **radius** (*int*): Unknown -- **routeName** (*str*): Name of the route -- **routeShortname** (*str*): Short Name / Abbreviation of the route -- **routeGroupId** (*int*): Unknown -- **system** (*[`TransportationSystem`](#transportationsystem)*): Transportation system object -- **route** (*[`Route`](#route)*): Route object - -```json -{'id': '8611', - 'routesAndPositions': {'38728': [0, 7], '38730': [7]}, - 'systemId': 1068, - 'name': 'Drexel Garage', - 'latitude': 41.784433, - 'longitude': -87.604445, - 'radius': 75, - 'system': } -``` - - -## `SystemAlert` - -### `SystemAlert.__init__()` - -**id** is the only required parameter, all other default to *None*. - -- **id** (*int*): ID of the alert -- **systemId** (*int*): ID of the system -- **system** (*[`TransportationSystem`](#transportationsystem)*): Transportation System object -- **routeId** (*int*): Route ID this alert relates to -- **name** (*str*): Name/Title of the alert -- **html** (*str*): Content of the alert in HTML format -- **archive** (*bool*): Unknown -- **important** (*bool*): Unknown -- **dateTimeCreated** (*str*): Date and time when the alert was created -- **dateTimeFrom** (*str*): Start date and time from which the alert is in effect -- **dateTimeTo** (*str*): End date and time from which the alert is in effect -- **asPush** (*bool*): Unknown -- **gtfs** (*bool*): Unknown -- **gtfsAlertCauseId** (*bool*): Unknown -- **gtfsAlertEffectId** (*bool*): Unknown -- **gtfsAlertUrl** (*str*): Unknown -- **gtfsAlertHeaderText** (*str*): Name/Title of the alert in text format -- **gtfsAlertDescriptionText** (*str*): Content of the alert in text format -- **routeGroupId** (*int*): Unknown -- **createdUtc** (*str*): Date and time when the alert was created in UTC -- **authorId** (*int*): User ID of the author -- **author** (*str*): Name and email of the author -- **updated** (*str*): Date and time when the alert was updated -- **updateAuthorId** (*int*): User ID of the author of the update -- **updateAuthor** (*str*): Name and email of the author of the update -- **createdF** (*str*): Human friendly date and time when the alert was created -- **fromF** (*str*): Human friendly start date and time of the alert -- **fromOk** (*bool*): Unknown -- **toOk** (*bool*): Unknown - -```json -{'id': '27926', - 'systemId': '1068', - 'system': , - 'routeId': '38731', - 'name': 'Midway Metra Reroute', - 'html': 'Due to road reconstruction at 60th & Stony Island, Midway Metra will detour to Dorchester Ave., bypassing the parking lot at Stony Island. The new stop for the parking lot is on the Midway EB, across from the Stony Island Parking Lot.', - 'archive': '0', - 'important': '1', - 'dateTimeCreated': '2024-04-18 10:17:44', - 'dateTimeFrom': '2024-07-12 06:10:34', - 'dateTimeTo': '2024-07-30 22:15:34', - 'asPush': '1', - 'gtfs': '1', - 'gtfsAlertCauseId': None, - 'gtfsAlertEffectId': None, - 'gtfsAlertUrl': None, - 'gtfsAlertHeaderText': 'Midway Metra Reroute', - 'gtfsAlertDescriptionText': 'Due to road reconstruction at 60th Stony Island, Midway Metra will detour to Dorchester Ave., bypassing the parking lot at Stony Island. The new stop for the parking lot is on the Midway EB, across from the Stony Island Parking Lot.', - 'routeGroupId': None, - 'createdUtc': '2024-04-18 15:17:44', - 'authorId': '1217', - 'author': 'John Appleseed (sample@email.com)', - 'updated': '2024-07-12 06:09:22', - 'updateAuthorId': '1202', - 'updateAuthor': 'John Appleseed (sample@email.com)', - 'createdF': 'Friday, July 12th, 2024 6:10 AM', - 'fromF': 'Friday, July 12th, 2024 6:10 AM', - 'fromOk': '1', - 'toOk': '1'} -``` - -## `Vehicle` - -### `Vehicle.__init__()` - -All attributes default to **None**. - -- **id** (*str*): ID of the vehicle -- **name** (*str*): Name of the vehicle -- **type** (*str*): Type of the vehicle -- **system** (*[`TransportationSystem`](#transportationsystem)*): Type of the vehicle -- **calculatedCourse** (*int*): Unknown -- **routeId** (*str*): ID of the route the vehicle is part of -- **routeName** (*str*): Name of the route the vehicle is part of -- **color** (*str*): Color in which the vehicle/route is displayed -- **created** (*str*): When the vehicle was created -- **latitude** (*float*): Current latitude of the vehicle -- **longitude** (*float*): Current longitude of the vehicle -- **speed** (*float*): Current speed of the vehicle -- **paxLoad** (*float*): Current number of passengers on board -- **outOfService** (*bool*): Whether the vehicle is currently in service -- **more** (*str*): Unknown -- **tripId** (*str*): Unknown - - -```python -{'id': '7998', - 'name': '7998 (CTA)', - 'type': 'bus', - 'system': , - 'calculatedCourse': '0', - 'routeId': 'cta4', - 'routeName': 'Cottage Grove (CTA) (CTA)', - 'color': '#565a5c', - 'created': '20240818 11:13', - 'longitude': 41.6861457824707, - 'speed': None, - 'paxLoad': 0, - 'outOfService': None, - 'more': None, - 'tripId': None} -``` - -## `printAllSystemsMd()` - -Prints all system names as a markdown list. - -**Input**: - -- **includeHtmlBreaks** (*bool*): Whether to include HTML line breaks (Default: True) - -**Returns**: None - -```python -passiogo.printAllSystemsMd() -``` - -```md -- 3630 Peachtree (#951)
-- 5025 Apartments (#1634)
-- 725 Ponce (#1832)
-- Agnes Scott College (#1471)
-... -``` - - - - - diff --git a/docs/changelog.md b/docs/changelog.md deleted file mode 100644 index dcdfe2a..0000000 --- a/docs/changelog.md +++ /dev/null @@ -1 +0,0 @@ -{!CHANGELOG.md!} \ No newline at end of file diff --git a/docs/examples.md b/docs/examples.md deleted file mode 100644 index 2bbe1ee..0000000 --- a/docs/examples.md +++ /dev/null @@ -1,3 +0,0 @@ - -# Examples - diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 10882f6..0000000 --- a/docs/index.md +++ /dev/null @@ -1 +0,0 @@ -{!README.md!} \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index e111e02..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -markdown>=3.3 -markdown-include>=0.6.0 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 7b8859e..0000000 --- a/mkdocs.yml +++ /dev/null @@ -1,21 +0,0 @@ -site_name: Passio Go API Documentation -docs_dir: docs -repo_url: https://github.com/athuler/PassioGo -theme: readthedocs -copyright: © Andrei Thüler -site_author: Andrei Thüler - -nav: - - Home: index.md -# - Examples: examples.md - - API Reference: api.md - - Changelog: changelog.md - -#plugins: -# - search -markdown_extensions: - - markdown_include.include: - base_path: . - -watch: - - README.md \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..0030e24 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,19 @@ +[build-system] +requires = ["setuptools >= 80.9.0", "wheel >= 0.45.1", "pytest >= 9.0.2", "requests >= 2.22.0", "websocket_client >= 1.2.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "passiogo_fix" +version = "0.0.3" +authors = [ + { name="Antonios Theocharopoulos", email="antoniostheo06@gmail.com" }, +] +description = "An unofficial Python API for Passio Go allowing anyone to build transit-based applications for hundreds of Universities, Municipalities, Paratransit, and Airports. Based on Andrei Thüler's API, with the vehicle latitude/longitude issue fixed." +readme = "README.md" +requires-python = ">=3.12" +license = "MIT" +license-files = ["LICEN[CS]E*"] + +[project.urls] +Homepage = "https://github.com/AntoniosTheo06/PassioGoVehicleFix" +Issues = "https://github.com/AntoniosTheo06/PassioGoVehicleFix/issues" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 6bbe197..0000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -requests>=2.22.0 -websocket-client>=1.2.0 \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index 1dc95b3..0000000 --- a/setup.py +++ /dev/null @@ -1,27 +0,0 @@ -from setuptools import setup, find_packages - -with open("README.md", 'r') as f: - long_description = f.read() - -with open("requirements.txt", "r") as fh: - requires = [line for line in fh.read().splitlines() if line != ""] - -setup( - name='PassioGo', - version="0.2.2", - description="An unofficial API for Passio Go", - long_description=long_description, - long_description_content_type='text/markdown', - author='Andrei Thuler', - author_email='info@andreithuler.com', - url="https://github.com/athuler/PassioGo", - packages=find_packages(), - py_modules=find_packages(), - install_requires=requires, - project_urls = { - 'Documentation': 'https://passiogo.readthedocs.io/', - 'GitHub': 'https://github.com/athuler/PassioGo', - 'Sponsor':'https://github.com/sponsors/athuler', - 'Changelog':'https://github.com/athuler/PassioGo/blob/main/CHANGELOG.md', - }, -) \ No newline at end of file diff --git a/src/passiogo_fix.egg-info/PKG-INFO b/src/passiogo_fix.egg-info/PKG-INFO new file mode 100644 index 0000000..a57b71e --- /dev/null +++ b/src/passiogo_fix.egg-info/PKG-INFO @@ -0,0 +1,414 @@ +Metadata-Version: 2.4 +Name: passiogo_fix +Version: 0.0.3 +Summary: An unofficial Python API for Passio Go allowing anyone to build transit-based applications for hundreds of Universities, Municipalities, Paratransit, and Airports. Based on Andrei Thüler's API, with the vehicle latitude/longitude issue fixed. +Author-email: Antonios Theocharopoulos +License-Expression: MIT +Project-URL: Homepage, https://github.com/AntoniosTheo06/PassioGoVehicleFix +Project-URL: Issues, https://github.com/AntoniosTheo06/PassioGoVehicleFix/issues +Requires-Python: >=3.12 +Description-Content-Type: text/markdown +License-File: LICENSE +Dynamic: license-file + +# Passio Go API Fixed + +[![PyPI - Version](https://img.shields.io/pypi/v/passiogo-fix?label=Latest%20Version&link=https%3A%2F%2Fpypi.org%2Fproject%2Fpassiogo-fix%2F)](https://pypi.org/project/passiogo-fix/) +[![Pepy Total Downlods](https://img.shields.io/pepy/dt/passiogo-vehicle-fix)](https://www.pepy.tech/projects/passiogo-vehicle-fix) +[![Documentation Status](https://readthedocs.org/projects/passiogo/badge/?version=latest)](https://passiogo.readthedocs.io/en/latest/?badge=latest) + + + + +An **unofficial** Python API for [Passio Go](https://passiogo.com/) allowing anyone to build transit-based applications for hundreds of Universities, Municipalities, Paratransit, and Airports. Based on [Andrei Thüler's PassioGo API](https://github.com/athuler/PassioGo), with the vehicle latitude/longitude issue fixed. + + +## Installation + +The package is available to download using [pip](https://pypi.org/project/passiogo-fix/). + +``` +pip install passiogo-fix +``` + +## Documentation + +Project documentation for Andrei Thüler's latest stable version is available at [passiogo.readthedocs.io](https://passiogo.readthedocs.io/). Documentation for other versions is available at [passiogo.readthedocs.io/en/X.X.X](https://passiogo.readthedocs.io/en/0.1.2/). + + +## Usage + +### Importing + +To import this version of the API, you will need to run the following: + +```python +from passiogo_fix import passiogo +``` + +Otherwise, everything is exactly the same as Andrei Thüler's API. + + +### Transportation System + +Before doing anything, you will need a [`TransportationSystem`](api/#transportationsystem) object. + +If you know the `id` of the desired transportation system, you can obtain the object using `passiogo.getSystemFromID(id)`. + +```python +system = passiogo.getSystemFromID(1068) +``` + +If you do not know the ID of your desired transportation system, you can find it [here](#all-transportation-systems-accessible-by-the-api) or with the following: + +```python +system = passiogo.printAllSystemsMd() +``` + +```md +- 3630 Peachtree (#951)
+- 5025 Apartments (#1634)
+- 725 Ponce (#1832)
+- Agnes Scott College (#1471)
+... +``` + +### Routes + +You can obtain all the routes for a given transportation system using `TransportationSystem.getRoutes()`: + +```python +routes = system.getRoutes() +``` + +Here, `routes` is a list of [`Route`](api/#route) objects. We can look at how much information is available for each route. + +```python +routes[0].__dict__ +``` + +``` +{'id': '133007', + 'groupId': '5702', + 'groupColor': '#0000ff', + 'name': 'Apostolic', + 'shortName': 'AP', + 'nameOrig': 'Apostolic', + 'fullname': 'University of Chicago', + 'myid': '38729', + 'mapApp': '1', + 'archive': '0', + 'goPrefixRouteName': '1', + 'goShowSchedule': 1, + 'outdated': '0', + 'distance': 578, + 'latitude': '41.780867018', + 'longitude': '-87.592902254', + 'serviceTime': None, + 'serviceTimeShort': None, + 'systemId': 1068, + 'system': } +``` + +### Stops + +You can get all the stops within a given transportation system using `TransportationSystem.getStops()`: + +```python +stops = system.getStops() +``` + +Here, `stops` is a list of [`Stop`](api/#stop) objects. We can look at how much information is available for each route. + +```python +stops[0].__dict__ +``` + +``` +{'id': '10103', + 'routesAndPositions': {'4009': [0]}, + 'systemId': 1068, + 'name': 'Medical Stop', + 'latitude': 41.79668374, + 'longitude': -87.595753286, + 'radius': 36, + 'system': } +``` + +If you only wish to get stops for a given route, you can use the `Route.getStops()` method. + +```python +stops = routes[0].getStops() +``` + +### System Alerts + +You can get all system alerts within a given transportation system with the `TransportationSystem.getSystemAlerts()`. + +```python +alerts = system.getSystemAlerts() +``` + +Here, `alerts` is a list of [`SystemAlert`](api/#systemalert). We can look at how much information is available for each alert. + +```python +alerts[0].__dict__ +``` + +``` +{'id': '27535', + 'systemId': '1068', + 'system': , + 'routeId': None, + 'name': 'Nightride Assistance Contact', + 'html': 'During the hours of 4 p.m. until 4 a.m., if you do not see arrival times or buses on route in the app, or experience any unusual event, please contact 773-573-7201 for assistance.', + 'archive': '0', + 'important': '1', + 'dateTimeCreated': '2024-04-09 09:43:10', + 'dateTimeFrom': '2024-04-09 15:40:44', + 'dateTimeTo': '2025-04-16 09:40:44', + 'asPush': '1', + 'gtfs': '1', + 'gtfsAlertCauseId': None, + 'gtfsAlertEffectId': None, + 'gtfsAlertUrl': None, + 'gtfsAlertHeaderText': 'Nightride Assistance Contact', + 'gtfsAlertDescriptionText': 'During the hours of 4 p.m. until 4 a.m., if you do not see arrival times or buses on route in the app, or experience any unusual event, please contact 773-573-7201 for assistance.', + 'routeGroupId': None, + 'createdUtc': '2024-04-09 14:43:10', + 'authorId': '1202', + 'author': 'John Appleseed (abc@domain.com)', + 'updated': '2024-07-17 16:12:02', + 'updateAuthorId': '1217', + 'updateAuthor': 'Mark Appleseed (def@domain.com)', + 'createdF': 'Tuesday, April 9th, 2024 3:40 PM', + 'fromF': 'Tuesday, April 9th, 2024 3:40 PM', + 'fromOk': '1', + 'toOk': '1'} +``` + +## Changelog + +Andrei Thüler's changelog (everything besides this fix) is available at [`CHANGELOG.md`](https://github.com/athuler/PassioGo/blob/main/CHANGELOG.md)\ + + +## All Transportation Systems Accessible By The API + +Collapsed below are all the transportation systems publicly available through this API. + +
+Expand to Show All Systems + +
+ +Last Updated: 2024/07/14

+ +- 3630 Peachtree (#951)
+- 5025 Apartments (#1634)
+- 725 Ponce (#1832)
+- Agnes Scott College (#1471)
+- Alabama A&M University (#2456)
+- Anne Arundel County Office of Transportation (#3469)
+- Atlantic Station (#4349)
+- AUC (#67)
+- Audible (#876)
+- Augusta University (#553)
+- Bayonne Bay (#1808)
+- Beacon College (#3389)
+- Beacon Shuttle (#3561)
+- Beloit Transit (#3655)
+- Bis-Man Transit (#4121)
+- Bowie State University (#3001)
+- Brockton Area Transit Authority (BAT) (#2046)
+- Bull Runner at USF (#2343)
+- Cal State San Bernardino (#1187)
+- Canby Area Transit (#3274)
+- Cascades East Transit (#2460)
+- Casper Area Transit (#4055)
+- Century Village (FT) (#444)
+- Chapman University (#263)
+- Charles River TMA (#5019)
+- Charleston Airport REEF (#4749)
+- Charm City Circulator (#3554)
+- Chemung County (C-Tran) (#4009)
+- CHOA (#3489)
+- Citrus Connection (#1752)
+- City of Arcadia (#3304)
+- City of Bangor (#4631)
+- City of Billings MET Transit (#3901)
+- City of Cerritos (#2282)
+- City of Clovis (#3743)
+- City of Detroit - Employee Shuttle (#1275)
+- City of Harrisonburg Department of Public Transportation (HDPT) (#2868)
+- City of Hoboken (#466)
+- City of Irvine (#4502)
+- City of Jackson (JTRAN) (#3363)
+- City of Jacksonville (#3521)
+- City of Monterey Park (#3215)
+- City of Newport Beach (Balboa Peninsula Trolley) (#4883)
+- City of Olean (#2084)
+- City of Rosemead (#3670)
+- City of Sandy (#3183)
+- City of Tracy (MTM / Tracer Transit) (#2996)
+- City of Tyler (#3777)
+- City of Watertown (CitiBus) (#2775)
+- Citylink Edmond (#4662)
+- Citylink North (Kootenai County) (#2016)
+- Citylink South (#2059)
+- Clackamas County (#3205)
+- Clemson Tiger Transit (#1654)
+- Clemson University (#793)
+- Coca Cola (#416)
+- Colby College (#3377)
+- Columbia University (#74)
+- Concho Valley Transit (#3281)
+- Concord Kannapolis Area Transit (#4124)
+- Concourse (#1841)
+- Connect Douglas (#1661)
+- Cooperative Alliance for Seacoast Transportation (COAST) (#2962)
+- Coral Gables (#2787)
+- CoryD (Test) (#829)
+- County Connector (#2933)
+- CSULB (#4163)
+- Disney Programs (#2208)
+- District of Chamblee (#1897)
+- Drury Plaza Hotel - Disney Springs (#4748)
+- Eastern Kentucky University (#3828)
+- Eastern Panhandle Transit Authority (EPTA) (#1298)
+- Eastern Virginia Medical School (#591)
+- Elon University (#3045)
+- Emory University (#4432)
+- Endicott College (#2873)
+- ES Atlanta (#2280)
+- Escambia County Area Transit (ECAT) (#2283)
+- ETHRA (#4583)
+- EWR Employee Shuttle (#2989)
+- EWR Port Authority NYNJ (#2496)
+- FIT NY (#973)
+- Florham Park (Sun Valley/River Bend) (#2311)
+- Florida Gulf Coast University (FGCU) (#2281)
+- Florida International University (#4119)
+- ForestView/Evergreen/Evergreen East (#1641)
+- Fort Saskatchewan Transit (PWTransit Canada Ltd.) (#912)
+- Franklin Regional Transit Authority (#2771)
+- Franklin Transit (#1652)
+- Fresh Direct (Pro Park) (#4691)
+- Fresno State University (#805)
+- GatewayJFK Connection (#2125)
+- George Washington University (GW) (#4120)
+- Georgia College & State University (GCSU) (#895)
+- Georgia Southern University (#137)
+- Georgia State University (#480)
+- Georgia Tech (#76)
+- GoBus (#1839)
+- Harford County (#4620)
+- Harris County Transit (#3497)
+- HARTransit (#2250)
+- Harvard University (#831)
+- Hendry County Transit System (#2217)
+- Highland Hospital Metropolis (#3829)
+- Hill Place Apartments (#1092)
+- Hollins University (#3014)
+- Houston Airport (SP+) (#4919)
+- Hutch Metro Center (#1569)
+- Interurban Trolley (#3639)
+- Jasper Transit (#4294)
+- JFK LGA Shuttles (#2494)
+- Kentucky River Foothills (#3630)
+- Key West Transit (#4440)
+- Lawrence Transit (#4834)
+- Lehigh University (#1090)
+- Los Angeles International Airport (LAX) (#1421)
+- Marymount University (#4716)
+- Mayaguez (Skytec) (#3206)
+- McAfee Knob Trailhead (Ridesource) (#3069)
+- Mercy University (#694)
+- Metropolis Parking (Anschutz Campus) (#3282)
+- Missouri State University (#459)
+- MIT (#94)
+- Montachusett Regional Transit Authority (MART) (#2173)
+- National Cancer Institute (#3293)
+- NC State University (#3827)
+- New River Transit Authority (#3362)
+- New York University (#1007)
+- North Carolina A&T State University (#261)
+- North Fork Area Transit (#2587)
+- Otter Bus (Ridesource) (#3015)
+- Ozark Regional Transit (#1589)
+- Palm Beach International Airport Parking Shuttle (#1071)
+- Pepperdine University (#3593)
+- Pittsburgh International Airport (PIT) (#3200)
+- Port of Galveston (LAZ Parking) (#3294)
+- Portage Area Regional Transit Authority (PARTA) (#3420)
+- Providence College (#4147)
+- Quinnipiac University (#3899)
+- Radford Transit (#1248)
+- Ravinia (#1593)
+- River Valley Transit (#1726)
+- River Valley Transit (#5168)
+- Roadrunner Transit (#4010)
+- Rochester Institute of Technology (RIT) (#4006)
+- Roger Williams University (#1850)
+- Rutgers University (#1268)
+- Sacramento Airport Park & Ride (#898)
+- Saint Peter's University (#493)
+- Sales Demo - SR (#5047)
+- Seneca Transit System (#2035)
+- Sioux City Transit (#4832)
+- SMART Transit (#4476)
+- South Clackamas Transportation District (#4233)
+- Southeastern Louisiana University (#186)
+- Southern Connecticut State University (#431)
+- St. Lawrence County Public Transit (#4234)
+- St. Vincent's (Pinnacle Transportation Group) (#2561)
+- State Shuttle (Onyx Equities) (#2780)
+- STC Atlanta Georgia (#2197)
+- Stevens Point - Central Transportation (#2556)
+- Tennessee Technological University (#1736)
+- Terraces (Pinnacle Transportation Group) (#3270)
+- The Concord Trolley (#3089)
+- The Cottages at Lake Tamaha Tuscaloosa (#1093)
+- The Galleria (Reef Parking) (#1900)
+- The Hartford (#4581)
+- The U Apartments Raleigh (#1650)
+- Township of West Orange (#3166)
+- Towson Loop (Baltimore County) (#2153)
+- Tulane University (#353)
+- Tuscaloosa Transit Authority (#3817)
+- UARK (University of Arkansas) (#3778)
+- UCONN/WRTD (#1541)
+- UNC Charlotte (#1053)
+- UNC Greensboro (UNCG) (#2874)
+- UNC Wilmington (#3952)
+- University at Buffalo (#4882)
+- University of Alabama (#240)
+- University of Chicago (#1068)
+- University of Florida (UF) (#3826)
+- University of Georgia (UGA) (#3994)
+- University of Hartford (#3305)
+- University of Miami Medical Center (Reef Parking) (#4201)
+- University of Michigan-Dearborn (#1481)
+- University of Montana (ASUM) (#4041)
+- University of New Haven (#3900)
+- University of New Mexico (UNM) (#2156)
+- University of North Georgia (#646)
+- University of Rochester (#3214)
+- University of San Diego Tram Services (#3444)
+- University of Texas at El Paso (UTEP) (#2383)
+- University of Wisconsin-Milwaukee (#728)
+- Upper Cumberland Human Resource Agency (UCHRA) (#2875)
+- Utah State University (#3499)
+- Vanderbilt University (#3622)
+- Vanderbilt University Medical Center (#1332)
+- Via Mobility Services (#4729)
+- VMware (#1274)
+- Wake Forest University (#3669)
+- WaterColor Community Association (#4842)
+- West Midtown Shuttle (#4473)
+- Western Carolina University (#2597)
+- WestMar (#1091)
+- Woodbridge Village/Gardens/Colonial (#1642)
+- XChange at Secaucus Junction (#432)
+ +
+
diff --git a/src/passiogo_fix.egg-info/SOURCES.txt b/src/passiogo_fix.egg-info/SOURCES.txt new file mode 100644 index 0000000..0d4683d --- /dev/null +++ b/src/passiogo_fix.egg-info/SOURCES.txt @@ -0,0 +1,9 @@ +LICENSE +README.md +pyproject.toml +src/passiogo_fix/__init__.py +src/passiogo_fix/passiogo.py +src/passiogo_fix.egg-info/PKG-INFO +src/passiogo_fix.egg-info/SOURCES.txt +src/passiogo_fix.egg-info/dependency_links.txt +src/passiogo_fix.egg-info/top_level.txt \ No newline at end of file diff --git a/docs/conf.py b/src/passiogo_fix.egg-info/dependency_links.txt similarity index 100% rename from docs/conf.py rename to src/passiogo_fix.egg-info/dependency_links.txt diff --git a/src/passiogo_fix.egg-info/top_level.txt b/src/passiogo_fix.egg-info/top_level.txt new file mode 100644 index 0000000..965b86f --- /dev/null +++ b/src/passiogo_fix.egg-info/top_level.txt @@ -0,0 +1 @@ +passiogo_fix diff --git a/src/passiogo_fix/__init__.py b/src/passiogo_fix/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/passiogo/__init__.py b/src/passiogo_fix/passiogo.py similarity index 100% rename from passiogo/__init__.py rename to src/passiogo_fix/passiogo.py diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index 8b13789..0000000 --- a/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/test_main.py b/tests/test_main.py deleted file mode 100644 index 9ebc91a..0000000 --- a/tests/test_main.py +++ /dev/null @@ -1,44 +0,0 @@ -import passiogo -import pytest - -def pytest_namespace(): - return {'allSystems': None} - -def test_getAllSystems(): - global allSystems - allSystems = passiogo.getSystems() - pytest.allSystems = allSystems - assert True - -test_getAllSystems() -ids = [f"{element.name} (#{element.id})" for element in pytest.allSystems] - -def test_printAllSystems(): - passiogo.printAllSystemsMd() - assert True - - -def test_getSystemFromId(): - global testSystem - testSystem = passiogo.getSystemFromID(1068) - assert True - - -@pytest.mark.parametrize("system", pytest.allSystems, ids=ids) -def test_getAllRoutes(system): - system.getRoutes() - - -@pytest.mark.parametrize("system", pytest.allSystems, ids=ids) -def test_getAllStops(system): - system.getStops() - - -@pytest.mark.parametrize("system", pytest.allSystems, ids=ids) -def test_getSystemAlerts(system): - system.getSystemAlerts() - -@pytest.mark.parametrize("system", pytest.allSystems, ids=ids) -def test_getVehicles(system): - system.getVehicles() - \ No newline at end of file