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
- Clone the repository from GitHub or install from PyPI.
- Add a
config.pyfile to your project folder containing your credentials and MAGE server url. This file should not be uploaded to shared spaces. - Import
mage_apiin your python script(s) to make use of the below functionality.
To manage dependencies, this repository includes a requirements.txt file. You can install dependencies easily via:
pip install -r requirements.txtFor your own projects, you should include a requirements.txt file as well. You can generate one by:
pip install pipreqs
pipreqs .mage_environment = 'https://your-mage-url'
credentials = {
'username': 'your_mage_username',
'password': 'your_mage_password'
}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()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.
log_out Log out, use this when you're finished
Parameters: None
Returns: A string indicating successful logout.
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 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 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 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 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.
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 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 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 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 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)
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 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 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.
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)
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-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)