@jniles There is no rate-limiting on the API, so it should go by quickly. I'm not a Python expert, but here's a quick script that rejects submissions before today.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime, date
from time import strftime
import json
import pytz
import random
import requests
import sys
server_url = "https://example.getodk.cloud"
admin = "admin@example.com"
password = "horsestaplebatterygenerator"
form_url = "/v1/projects/1/forms/my_form"
review_states = ["approved", "hasIssues", "rejected"]
def get_admin_token():
admin_token_response = requests.post(
server_url + "/v1/sessions",
data=json.dumps({"email": admin, "password": password}),
headers={"Content-Type": "application/json"},
)
if admin_token_response.status_code == 200:
return admin_token_response.json()["token"]
def get_submissions(admin_token):
submissions_response = requests.get(
server_url + form_url + "/submissions/",
headers={
"Content-Type": "application/json",
"Authorization": "Bearer " + admin_token,
},
)
return submissions_response
def review_submission(admin_token, instance_id):
review_submission_response = requests.patch(
server_url + form_url + "/submissions/" + str(instance_id),
data=json.dumps({"reviewState": review_states[2]}),
headers={
"Content-Type": "application/json",
"Authorization": "Bearer " + admin_token,
},
)
return review_submission_response
def error(error):
print(strftime("%Y-%m-%d-%H-%M-%S"), error)
sys.exit()
# don't do this. cache the token!
admin_token = get_admin_token()
if not admin_token:
error("get_admin_token")
submissions = get_submissions(admin_token)
for submission in submissions.json():
submission_date = datetime.strptime(
submission["createdAt"], "%Y-%m-%dT%H:%M:%S.%f%z"
)
if submission_date < datetime.now(pytz.utc):
review = review_submission(admin_token, submission["instanceId"])
if review.status_code != 200:
print(review.text)