Skip to main content

A Python utility to interact data endpoints compliant with the Mobility Data Specification, as designed by the Open Mobility Foundation

Project description

atd-mds-client

A Python utility to interact data endpoints compliant with the Mobility Data Specification, as designed by the Open Mobility Foundation.

This client was inspired by the City of Santa Monica MDS Provider Client.

Installation

Install the library:

pip install atd-mds-client

Or the development branch:

pip install atd-mds-client-dev

Getting started

# Import standard libraies:
import json
from datetime import datetime

# Import the MDS Library:
from mds import *

# Provider Configuration
provider_configuration = {
    # Authentication type: "OAuth", "Bearer", "Basic" or "Custom"
    "auth_type": "Bearer",
    # If you have a Bearer authentication, provide the token:
    "token": "secret_token_here",
    # Provide the URL endpoint of the provider:
    "mds_api_url": "https://mds.your-scooter-company.com/api/endpoint/v1",
    # (Optional) The Provider ID
    "provider_id": "mds_provider_id",
    # Any additional HTTP Headers:
    "headers": {
        "App-Version": "3.0.0"
    },
    # Any additional settings:
    "time_format": "unix",
    "delay": 1, # Delay in seconds per http request
    "max_attempts": 3, # Max attempts if the http request fails
    "paging": True, # Enable/Disable pagination
    "timeout": 10, # Maximum time allowed for an HTTP request in seconds
    "version": "0.3.0", # MDS Version: "0.2.0", "0.3.0" or "0.4.0" or remove for custom driver
}

# Builds a time-zone aware date time range
my_time = MDSTimeZone(
    date_time_now=datetime(2020, 1, 1, 20), # Either Now or any date as specified by datetime, becomes end_time
    offset=3600,             # Subtract 1 hour from date_time_now and becomes start_time
    time_zone="US/Central",  # US/Central
)

 # Initialize the MDS Client
mds_client = MDSClient(config=provider_configuration, provider="amazing scooters")

# Get trips
trips = mds_client.get_trips(
    # First the start time for the query
    start_time=my_time.get_time_start(
        utc=True, # Transforms local time into UTC
        unix=True # Transforms format from ISO into Unix Epoch time
    ),
    # Now the end time:
    end_time=my_time.get_time_end(
        utc=True, # Transforms local time into UTC
        unix=True # Transforms format from ISO into Unix Epoch time
    )
)

print(json.dumps(trips))

CD/CI

We make use of CircleCI for our deployments, you can see the build script in the .circleci folder in this repo. The basic process consists of a couple steps:

  1. Generate basic variables based on the current branch
  2. Change the package name based on the current branch
  3. Builds the package
  4. Deploys with twine

In short, the only way to deploy a package is to change it's version number manually in setup.py. If the changes were made in the master branch, the deployment will go into production, for the dev branch, a postfix will be added to the name of the package before it is deployed to pypi.

Development

We currently have two branches: master and dev. The master branch is used in production, our dev is meant for development and testing.

Dev & Master Postfix

For the dev branch, the build script will attach a post fix "-dev" to the package name specified in setup.py. For example, in the dev branch file setup.py we see the package name is name="atd-mds-client" and the current version was 0.0.X, if you were to change the version number and commit to the dev branch, the deployment script will deploy to pypi as atd-mds-client-dev with the new version.

Pull Requests & Local Development

Pull requests are ignored by the CD/CI pipeline, meaning they do not get built. If you need a package built for dev testing:

  • Test your script locally
  • Create a PR against the dev branch, make sure you change the version number in setup.py
  • Merge your PR branch to the dev branch

How about local development?

At the moment, local development is open-ended. You may use any python mechanism or style when including source python packages in your development and local tests.

Tests

Some minimal unit testing has been done for the mds library; however, the testing is not thorough and it was only implemented as a way to test basic functionality.

For more instructions and documentation, please follow this link: https://github.com/cityofaustin/atd-mds-client/blob/master/tests

License

The package is distributed under the GPL 3.0 license.

Project details


Download files

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

Source Distribution

atd-mds-client-0.0.5.tar.gz (22.6 kB view details)

Uploaded Source

Built Distribution

atd_mds_client-0.0.5-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

Details for the file atd-mds-client-0.0.5.tar.gz.

File metadata

  • Download URL: atd-mds-client-0.0.5.tar.gz
  • Upload date:
  • Size: 22.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.12

File hashes

Hashes for atd-mds-client-0.0.5.tar.gz
Algorithm Hash digest
SHA256 966e55d6c99a40aaebb2b53f5578828b922032d91af48c3d5e0bd939f789cb8d
MD5 c3e0a6a477cb9c140b96423fc4538bc3
BLAKE2b-256 c17790ea01593efae5aae4953123424ab7eedbafd49896887d4aa6d9014bb038

See more details on using hashes here.

File details

Details for the file atd_mds_client-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: atd_mds_client-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 29.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.12

File hashes

Hashes for atd_mds_client-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 8c837b7ccf1f468ce9c54111275a24fd90612d6858892794c25030f5afed2fe5
MD5 ee0d618bb357bda24c1e9f52eacb63d2
BLAKE2b-256 eab46e24dfe0984ee0d2070979db97933e8fdcd48b61abbd8163c8f7e0c4151e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page