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.py
file to your project folder containing your credentials and MAGE server url. This file should not be uploaded to shared spaces. - Import
mage_api
in 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.txt
For 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
:int
numerical ID of requested event
Returns:
formattedResponse
object with attributes:
response_code
response_body
(requested event document)
get_events
Request documents for all visible MAGE events.
Parameters:
populate
:bool
includeteams
andlayers
in event documents
Returns:
formattedResponse
object with attributes:
response_code
response_body
(list of visible events)
create_event
Creates new MAGE event and adds user (self) to that event.
Parameters:
name
:string
name for new eventdescription
:string
description for new event
Returns:
formattedResponse
object with attributes:
response_code
response_body
(created event document)
get_event_forms
Extracts list of forms from already retrieved event document.
Parameters:
event_document
:dict
event 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
:dict
event document fetched
Returns:
Team id as an int
.
get_observations
Gets all observations meeting specified criteria from specified event.
Parameters:
event_id
:int
numerical id of eventstart_date
:str
filter for observations created after this date/timeend_date
:str
filter for observations created before this date/timeobservation_start_date
:str
filter for observations with timestamps after this date/timeobservation_end_date
:str
filter for observations with timestamps before this date/timestates
:str
filter for onlyactive
orarchive
observations
Returns:
formattedResponse
object with attributes:
response_code
response_body
(list of requested observation documents)
create_observation
Creates new observation using provided dictionary and event id.
Parameters:
observation
:dict
dictionary corresponding to valid observation object (format depends on event and forms)event_id
:int
numerical id for destination event
Returns:
formattedResponse
object with attributes:
response_code
response_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
:int
numerical id for event you wish to copy observations FROMtarget_event_id
:int
numerical id for event you wish to copy observations TOstart_date
:str
filter for observations created after this date/timeend_date
:str
filter for observations created before this date/timeobservation_start_date
:str
filter for observations with timestamps after this date/timeobservation_end_date
:str
filter for observations with timestamps before this date/time
Returns:
formattedResponse
object with attributes:
response_code
response_body
(list of requested observations from origin event)
get_observation_attachments
Downloads attachments for provided observation document.
Parameters:
observation
:dict
previously 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_code
response_body
(list of requested observations from origin event)
create_form
Create new form in event.
Parameters:
form
:dict
dictionary corresponding to a valid form objectevent_id
:int
numerical id for destination event
Returns:
formattedResponse
object with attributes:
response_code
response_body
(created form document)
update_form
Replace specified form with provided dictionary.
Parameters:
form
:dict
dictionary corresponding to a valid form objectevent_id
:int
numerical id for destination eventform_id
:int
numerical id for destination form
Returns:
formattedResponse
object with attributes:
response_code
response_body
(updated form document)
clone_forms
Create new form in event.
Parameters:
forms_list
:list
list of dictionaries corresponding to valid form objectsevent_id
:int
numerical 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
:dict
user objectteam_id
:int
numerical id for destination team
Returns:
formattedResponse
object with attributes:
response_code
response_body
(updated team document)
get_roles
Fetch roles for own MAGE user.
Parameters: None.
Returns:
formattedResponse
object with attributes:
response_code
response_body
(list of available roles for user)
grant_event_role
Grant event-specific role to specified user.
Parameters:
event_id
:int
numerical id for destination eventuser_id
:str
id for user to grant rolerole
:str
role to grant (owner, manager, guest)
Returns:
formattedResponse
object with attributes:
response_code
response_body
(created role document)