A Python wrapper for the MAGE API.
Project description
Mage API Wrapper
Introduction
This script can be imported and used in other python scripts to simplify automated operations relying on the MAGE API.
Common examples include:
- Creating events
- Editing event forms and observations
- Copying observations from one event to another
Setup
- Clone the repository from GitHub.
- Add a
config.pyfile to your project folder containing your credentials and MAGE server url. This file should not be uploaded to shared spaces. - Copy
mage_api.pyso it resides alongside your other script(s). - Import
mage_api.pyin your python script(s) to make use of the below functionality.
Installing Dependencies
To manage dependencies, this repository includes a requirements.txt file. You can install dependencies easily via:
pip install -r requirements.txt
For your own projects, you should include a requirements.txt file as well. You can generate one by:
pip install pipreqs
pipreqs .
Example config.py
mage_environment = 'https://your-mage-url'
credentials = {
'username': 'your_mage_username',
'password': 'your_mage_password'
}
Getting Started
First, create a session object which will be used to make all your API calls. This will log you in using the information in config.py and store your own MAGE user info as the own_user attribute.
import mage_api
# instantiate MAGE session
session = mage_api.MageClient()
#this is just for demonstration
print(session.own_user)
To make requests, use one of the functions documented below like this:
import mage_api
# instantiate MAGE session
session = mage_api.MageClient()
# get document for event with an id of 2000
my_event = session.get_event(2000)
API responses are returned as formattedResponse objects with the following attributes:
response_code- indicates success or failure (Mozilla Reference)response_body- any JSON responses formatted as dictionaries, or strings (usually error messages) returnedcontent- any downloaded files
Generally, you'll want to access the response_body, which will contain any information for observations or events fetched or added.
import mage_api
# instantiate MAGE session
session = mage_api.MageClient()
# get document for event with an id of 2000
my_event = session.get_event(2000)
# get JSON response as dictionary
my_event_document = my_event.response_body
# you can also use pretty_print() for more info
my_event.pretty_print()
Supported MAGE Operations
The following MAGE operations are supported with simple-to-use class functions (e.g. session.get_event()). The list isn't comprehensive at this time, but adding new functions is generally straightforward. Some operations also make use of multiple API calls (e.g. session.clone_observations()). Some functions below don't require API calls, and should be accessed directly. They are listed as such (e.g. mage_api.get_event_forms()). These usually require you to retrieve a JSON response using another function and pass the dictionary as a parameter.
Authentication
log_out
log_out Log out, use this when you're finished
Parameters: None
Returns: A string indicating successful logout.
Events
get_event
get_event Request document for MAGE event, including forms and other metadata.
Parameters:
event_id:intnumerical ID of requested event
Returns:
formattedResponse object with attributes:
response_coderesponse_body(requested event document)
get_events
get_events Request documents for all visible MAGE events.
Parameters:
populate:boolincludeteamsandlayersin event documents
Returns:
formattedResponse object with attributes:
response_coderesponse_body(list of visible events)
create_event
create_event Creates new MAGE event and adds user (self) to that event.
Parameters:
name:stringname for new eventdescription:stringdescription for new event
Returns:
formattedResponse object with attributes:
response_coderesponse_body(created event document)
get_event_forms
get_event_forms Extracts list of forms from already retrieved event document.
Parameters:
event_document:dictevent document fetched
Returns: A list of form documents as dictionaries.
get_event_team
get_event_team Extract team ID from already retrieved event document (does not make API call).
Parameters:
event_document:dictevent document fetched
Returns:
Team id as an int.
Observations
get_observations
get_observations Gets all observations meeting specified criteria from specified event.
Parameters:
event_id:intnumerical id of eventstart_date:strfilter for observations created after this date/timeend_date:strfilter for observations created before this date/timeobservation_start_date:strfilter for observations with timestamps after this date/timeobservation_end_date:strfilter for observations with timestamps before this date/timestates:strfilter for onlyactiveorarchiveobservations
Returns:
formattedResponse object with attributes:
response_coderesponse_body(list of requested observation documents)
create_observation
create_observation Creates new observation using provided dictionary and event id.
Parameters:
observation:dictdictionary corresponding to valid observation object (format depends on event and forms)event_id:intnumerical id for destination event
Returns:
formattedResponse object with attributes:
response_coderesponse_body(created observation document)
clone_event_observations
clone_event_observations Creates copies of observations from one event in another, including forms and attachments.
Steps:
- Copies forms to event (overwrites existing forms of same name)
- Gets specified observations from first event
- Copies observations to second event, downloading and re-uploading attachments as needed
Parameters:
origin_event_id:intnumerical id for event you wish to copy observations FROMtarget_event_id:intnumerical id for event you wish to copy observations TOstart_date:strfilter for observations created after this date/timeend_date:strfilter for observations created before this date/timeobservation_start_date:strfilter for observations with timestamps after this date/timeobservation_end_date:strfilter for observations with timestamps before this date/time
Returns:
formattedResponse object with attributes:
response_coderesponse_body(list of requested observations from origin event)
get_observation_attachments
get_observation_attachments Downloads attachments for provided observation document.
Parameters:
observation:dictpreviously retrieved observation document
Returns:
attachments_mapping dict:
{
'observationId': observation_id,
'eventId': event_id,
'attachments': [attachment_paths]
}
create_observation_attachments
create_observation_attachments Uploads attachments using provided dict to determine event id, observation id, and attachment locations.
Parameters:
attachments_mapping:dict:
{
'observationId': observation_id,
'eventId': event_id,
'attachments': [attachment_paths]
}
Returns:
A list of formattedResponse objects for upload requests with attributes:
response_coderesponse_body(list of requested observations from origin event)
Forms
create_form
create_form Create new form in event.
Parameters:
form:dictdictionary corresponding to a valid form objectevent_id:intnumerical id for destination event
Returns:
formattedResponse object with attributes:
response_coderesponse_body(created form document)
update_form
update_form Replace specified form with provided dictionary.
Parameters:
form:dictdictionary corresponding to a valid form objectevent_id:intnumerical id for destination eventform_id:intnumerical id for destination form
Returns:
formattedResponse object with attributes:
response_coderesponse_body(updated form document)
clone_forms
clone_forms Create new form in event.
Parameters:
forms_list:listlist of dictionaries corresponding to valid form objectsevent_id:intnumerical id for destination event
Returns: A dictionary mapping provided form names and ids to created forms and ids.
Teams
session.add_user_to_team
add_user_to_team Add specified user to specified team.
Parameters:
user:dictuser objectteam_id:intnumerical id for destination team
Returns:
formattedResponse object with attributes:
response_coderesponse_body(updated team document)
Roles
get_roles
get_roles Fetch roles for own MAGE user.
Parameters: None.
Returns:
formattedResponse object with attributes:
response_coderesponse_body(list of available roles for user)
grant_event_role
grant_event_role Grant event-specific role to specified user.
Parameters:
event_id:intnumerical id for destination eventuser_id:strid for user to grant rolerole:strrole to grant (owner, manager, guest)
Returns:
formattedResponse object with attributes:
response_coderesponse_body(created role document)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mage-python-api-1.0.0.tar.gz.
File metadata
- Download URL: mage-python-api-1.0.0.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85d899a00afdc88a650a9241c330d3a07bdb250825ddd3409a966193986b2096
|
|
| MD5 |
e5785ac201279ba96188c943d42c6351
|
|
| BLAKE2b-256 |
a33d6a2db5c06a121f326389aa86b089663583b71270c452ddd84a74158a6fac
|
File details
Details for the file mage_python_api-1.0.0-py3-none-any.whl.
File metadata
- Download URL: mage_python_api-1.0.0-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc68277936137ddc84c507e01afd1333c48d6f4a2b28752cf319ad590f5abf55
|
|
| MD5 |
c1e1420ce8ff5f9fa53457b1a4778397
|
|
| BLAKE2b-256 |
42e4c6c9d8b17e0aacf062d0673f03e87e9764ab9e0ccdacc1ea88f725c58382
|