Skip to content
This repository has been archived by the owner on Feb 20, 2024. It is now read-only.
/ requests-mauth Public archive

MAuth Signing for the excellent requests client library

License

Notifications You must be signed in to change notification settings

mdsol/requests-mauth

Repository files navigation

requests-mauth

NOTE This repository is deprecated, you should be using mauth-client-python. It will be archived.

requests-mauth is a python requests (http://docs.python-requests.org/en/latest/) Authentication implementation for Medidata's MAuth authentication system.

Prerequisites

To use MAuth authentication you will need:

  • An MAuth APP ID
  • An MAuth private key (with the public key registered with Medidata's MAuth server)

Using

import requests
from requests_mauth import MAuth

# MAuth configuration
APP_UUID = "<MAUTH_APP_UUID>"
private_key = open("private.key", "r").read()
mauth = MAuth(APP_UUID, private_key)

# Call an MAuth protected resource, in this case an iMedidata API
# listing the studies for a particular user
user_uuid = "10ac3b0e-9fe2-11df-a531-12313900d531"
url = "https://innovate.imedidata.com/api/v2/users/%s/studies.json" % user_uuid

# Make the requests call, passing the auth client
result = requests.get(url, auth=mauth)

# Print results
if result.status_code == 200:
    print([r["uuid"] for r in result.json()["studies"]])
print(result.text)

Development

We use travis for automated CI of the code (and status checks are required to pass prior to PR merges being accepted). We use travis to deploy updated versions to PyPI (only from master)

For local development (cross version) we use tox with pyenv to automate the running of unit tests against different python versions in virtualised python environments.

To setup your environment:

  1. Install Python
  2. Install Pyenv
    $ brew update
    $ brew install pyenv
  3. Install Pyenv versions for the Tox Suite
    $ pyenv install 2.7.16 3.3.6 3.4.6 3.5.3 3.6.1 3.7.2
  4. Install Tox
    $ pip install tox tox-pyenv
  5. Setup the local project versions (one for each env in the envlist)
     $ pyenv local 2.7.16 3.3.6 3.4.6 3.5.3 3.6.1 3.7.2
  6. Make any changes, update the tests and then run tests with tox
     Name                         Stmts   Miss  Cover
     ------------------------------------------------
     requests_mauth/__init__.py       3      0   100%
     requests_mauth/client.py        31      0   100%
     requests_mauth/rsa_sign.py      34      0   100%
     ------------------------------------------------
     TOTAL                           68      0   100%
     stats runtests: commands[1] | coverage html
     _________________________________________________________________________________________________________ summary __________________________________________________________________________________________________________
       clean: commands succeeded
       py27: commands succeeded
       py33: commands succeeded
       py34: commands succeeded
       py35: commands succeeded
       py36: commands succeeded
       stats: commands succeeded
       congratulations :)
  7. Coverage report can be viewed using open htmlcov/index.html
  8. Push your changes and create a PR to master
  9. Once the PR is complete, tag the branch and push it to github, this will trigger Travis to deploy to PyPI (make sure the version is consistent)
    $ git checkout master
    $ git pull
    $ git tag -a 1.0.2 -m "Requests MAuth 1.0.2"
    $ git push --tags