Using the CustomStage
Overview
The CustomStage creates a new form for a task that the default steps of your venue do not cover. The form can be a reply to a submission, review, meta review, rebuttal, or custom invitation, or a revision of an existing review, meta review, rebuttal, or custom invitation reply.
Once created, it appears in the timeline like any other step.
How to create a CustomStage
Install the openreview Python library and create an API 2 client with your Program Chair account.
import datetime
import openreview
client = openreview.api.OpenReviewClient(
baseurl='https://api2.openreview.net',
username=<your username>,
password=<your password>
)Load your venue using its venue ID.
venue = openreview.venue.helpers.get_venue(client, '<your venue id>')Define the CustomStage and create it. For complete examples, see Examples.
venue.custom_stage = openreview.stages.CustomStage(
name='<Stage_Name>',
reply_to=openreview.stages.CustomStage.ReplyTo.FORUM,
source=openreview.stages.CustomStage.Source.ALL_SUBMISSIONS,
...
)
venue.create_custom_stage()Once it is created, the stage appears as a step in the Workflow Timeline, named after the stage (for example, Review_Revision appears as Review Revision). From the timeline you can change its Dates and its Form Fields. To change any other setting, run create_custom_stage() again with the same name and the new values.

Parameters
name: The name of the stage, for example'Review_Revision'.reply_to: What the form replies to or revises. One ofCustomStage.ReplyTo.FORUM(the submission),WITHFORUM(any note in the submission forum),REVIEWS,METAREVIEWS, orREBUTTALS, or the name of an invitation as a string, for example'Official_Review','Meta_Review','Author_Rebuttal', or a custom invitation.source: Which submissions get the form. One ofCustomStage.Source.ALL_SUBMISSIONS,ACCEPTED_SUBMISSIONS,PUBLIC_SUBMISSIONS, orFLAGGED_SUBMISSIONS(flagged for ethics review). You can also pass a dictionary, for example{ 'venueid': '<your venue id>/Desk_Rejected_Submission' }.reply_type:CustomStage.ReplyType.REPLY(default) posts a new note.CustomStage.ReplyType.REVISIONedits the note inreply_to; only the author of that note can revise it. A revision cannot be used for submissions.start_date,due_date,exp_date: Pythondatetimeobjects for when the form opens, the deadline shown to users, and when the form closes. Ifstart_dateis not set, the form opens immediately. Ifexp_dateis not set, the form closes 30 minutes afterdue_date.invitees: Who can post the reply, as a list ofCustomStage.Participantsvalues, for exampleAUTHORS,REVIEWERS_ASSIGNED,AREA_CHAIRS_ASSIGNED, orREPLYTO_REPLYTO_SIGNATURES.readers: Who can read the reply, as a list ofCustomStage.Participantsvalues, for examplePROGRAM_CHAIRS,SIGNATURES(the person who posted it), orAUTHORS. Not used for revisions, which keep the readers of the note being revised.content: A dictionary with the fields of the form. See Customizing Forms.multi_reply: Whether more than one reply can be posted with each form (for example, per submission whenreply_toisFORUM). DefaultFalse, which allows a single reply.notify_readers: Whether to email the readers when a reply is posted. DefaultFalse. No emails are sent unless this isTrue, and no emails are sent when a reply is edited.email_pcs,email_sacs: Whether to also email the Program Chairs or the assigned Senior Area Chairs. DefaultFalse. They only take effect whennotify_readersisTrue.email_template: A custom email body. It can use{submission_number},{submission_id}, and{note_id}.allow_de_anonymization: Whether users can sign the reply with their profile instead of their anonymous ID, which may reveal their identity. DefaultFalse.
Examples
Desk Rejection Challenge
Authors of desk-rejected submissions can post a challenge, visible only to the Program Chairs and to themselves.
Review Revision
After the rebuttal period, reviewers can update their reviews. The revision only allows editing the fields in content: here it adds a final_rating and a justification to each review. To let reviewers also change fields of the original review, add those fields to content.
Last updated
Was this helpful?