Skip to main content

Unit Tests Code style: black

eflips-ingest


Part of the eFLIPS/simBA list of projects.


This repository contains code to import bus schedules from various sources into an eFLIPS-Model database.

Installation

  1. Set up a PostgreSQL database with the PostGIS extension and BTREE_gist enabled.

    apt install postgresql postgis
    sudo -u postgres psql createdb eflips
    sudo -u postgres psql eflips -c "CREATE EXTENSION postgis;"
    sudo -u postgres psql eflips -c "CREATE EXTENSION btree_gist;"
    
  2. Clone this git repository (or download a specific release)

    git clone git@github.com:mpm-tu-berlin/eflips-model.git
    
  3. Install the packages listed in poetry.lock and pyproject.toml into your Python environment. Notes:

    • This project depends on pyproj, which may require the proj-bin package (apt install proj-bin on Ubuntu).
    • The supported platforms are macOS and Linux.
    • Using the poetry package manager is recommended. It can be installed accoring to the instructions listed here.
    poetry install
    

Usage

The code is organized as a set of ingester packages under eflips/ingest/, each covering a specific data source. Use them via the API described below. Supported sources:

  • eflips.ingest.bvgxml.BvgxmlIngester: XML files emitted by BVG's proprietary software.
    • Requires at least GOOGLE_MAPS_API_KEY, also OPENELEVATION_URL is suggested to save money on Google Maps API calls.
    • Known Limitations:
      • The source data is known to contain some partial rotations of the bus routes. These are imported, which may lead to errors when creating a depot for each start and end spot, as some roations start/end at spots that are not depots.
      • Some routes that are going from the same stop to the stop itself are not imported, as they are considered to be invalid.
      • Some route's distance and time is fudged, when it is found to be unrealistically short or long.
  • eflips.ingest.vdv.VdvIngester: VDV 451/452 archives.
  • eflips.ingest.gtfs.GtfsIngester: GTFS feeds.

API


All API Classes should inherit from eflip.ingest.base.AbstractIngester. This class also provides documentation on how to implement the required methods.


The eflips-ingest package is designed to provide a standardized access method to the different ingesters. It is designed as a reusable package providing a programmatic API. It provides the Ingester class with the following methods:

  • __init__(self, database_url: str): The constructor. It takes the database URL as a parameter.
  • prepare(self, progress_callback: None | Callable[[float], None] = None, **kwargs: Dict[str, str | int | float | bool | Enum | Path],) -> Tuple[bool, UUID | Dict[str, str]]:: This method is used to validate the data. It has multiple keyword arguments, one for each parameter. It returns a tuple containing a boolean indicating whether the data is valid and a UUID if the data is valid or a dictionary containing the error names and messages if the data is invalid. It is suggested that the input form is generated by introspecting this method. If a UUID is returned, this UUID can be used to start the ingestion process, even with another instance of this Ingester class (the validated input data is saved to a temporary directory).
  • ingest(self, UUID: UUID, progress_callback: None | Callable[[float], None]) -> None: This method is used to start the ingestion process. It takes the UUID returned by the validate method and a callback function that will be called with the progress of the ingestion process. It is suggested that the progress is displayed in the UI. This method may raise an exception if the ingestion process fails. Note that exceptions should not be raised during the ingest process if everything goes well, as we are checking validity in the validate method.
  • prepare_param_names() This property should return a dict with a short description of each parameter that the prepare method takes. This can be used for Naming fields in the UI.
  • prepare_param_descriptions() This property should return a dict with a long description of each parameter that the prepare method takes. This can be used for tooltips in the UI.

In addition, the package provides a get_ingesters function that returns a list of Ingester classes.

Testing


NOTE: Be aware that the tests will clear the database specified in the DATABASE_URL environment variable. Make sure that you are not using a database that you want to keep.


Testing is done using the pytest framework with tests located in the testsdirectory. To run the tests, execute the following command in the root directory of the repository:

   export PYTHONPATH=tests:. # To make sure that the tests can find the eflips package
   export DATABASE_URL=postgis://postgres:postgres@localhost:5432/postgres # Or whatever your database URL is
   export GOOGLE_MAPS_API_KEY=put_your_api_key_here # Required for some tests
   export OPENELEVATION_URL=put_your_url_here # Optional, required for some tests
   pytest

Development

We utilize the GitHub Flow branching structure. This means that the main branch is always deployable and that all development happens in feature branches. The feature branches are merged into main via pull requests.

We use black for code formatting. You can use pre-commit to ensure the code is formatted correctly before committing. You are also free to use other methods to format the code, but please ensure that the code is formatted correctly before committing.

Please make sure that your poetry.lock and pyproject.toml files are consistent before committing. You can use poetry check to check this. This is also checked by pre-commit.

License

This project is licensed under the AGPLv3 license - see the LICENSE file for details.

Funding Notice

This code was developed as part of the project eBus2030+ funded by the Federal German Ministry for Digital and Transport (BMDV) under grant number 03EMF0402.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eflips_ingest-2.1.1.tar.gz (109.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eflips_ingest-2.1.1-py3-none-any.whl (113.2 kB view details)

Uploaded Python 3

File details

Details for the file eflips_ingest-2.1.1.tar.gz.

File metadata

  • Download URL: eflips_ingest-2.1.1.tar.gz
  • Upload date:
  • Size: 109.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for eflips_ingest-2.1.1.tar.gz
Algorithm Hash digest
SHA256 17d681a7070cec4e75ec82e652cef8438a69d36d349d4a200556ccf980c4c1d4
MD5 9c7b074d143de356ddb89fc8a728d44f
BLAKE2b-256 ce465e0aa41341d3a6467cb5e473041adb0ca4ccabee4ddfdc6ee6f59ac68d22

See more details on using hashes here.

Provenance

The following attestation bundles were made for eflips_ingest-2.1.1.tar.gz:

Publisher: release.yml on mpm-tu-berlin/eflips-ingest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file eflips_ingest-2.1.1-py3-none-any.whl.

File metadata

  • Download URL: eflips_ingest-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 113.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for eflips_ingest-2.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2d3db7b5b961ee40153abb06ba96b58f58bea3b09d899383c35f342e4d2e5391
MD5 0dc27f0f1ef36ef8196ad4e660098999
BLAKE2b-256 dbff5c204ee3f8cb4c8498e63ca0fd395f5e70513e3fa90275aa3c7ecbc2e4e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for eflips_ingest-2.1.1-py3-none-any.whl:

Publisher: release.yml on mpm-tu-berlin/eflips-ingest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

2.2.0

2 files

This release

2.1.1 This release

2 files

2.1.0

2 files

2.0.1

2 files

2.0.0

2 files

1.8.1

2 files

1.8.0

2 files

1.7.0

2 files

1.6.5

2 files

1.6.4

2 files

1.6.3

2 files

1.6.2

2 files

1.6.1

2 files

1.6.0

2 files

1.5.0

2 files

1.4.5

2 files

1.4.4

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3

2 files

1.2.85

2 files

1.2.84

2 files

1.2.83

2 files

1.2.82

2 files

1.2.81

2 files

1.2.80

2 files

1.2.79

2 files

1.2.78

2 files

1.2.77

2 files

1.2.76

2 files

1.2.6

2 files

1.2.5

2 files

1.2.4

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page