├── .gitignore ├── .vscode └── settings.json ├── README.md ├── admin ├── README.md ├── conference-template │ ├── config.properties │ ├── process │ │ ├── commentProcess.template │ │ ├── officialReviewProcess.template │ │ └── submissionProcess.template │ ├── python │ │ ├── admin-init.template │ │ └── config.template │ └── webfield │ │ └── conferenceWebfield.template ├── precreate_profiles.py ├── processToFile.js ├── superuser-init.py ├── update-webfield.py └── utils.py ├── demo_scripts └── test_conference_script.ipynb ├── samples ├── notebooks │ ├── Create old openreview.net groups.ipynb │ ├── Get Reviewers.ipynb │ ├── Migrate process functions.ipynb │ ├── OpenReview new Users.ipynb │ ├── Update user expertise.ipynb │ └── superuser-tpms-dump.ipynb ├── python │ ├── assign-reviewers.py │ ├── create-invitations.py │ ├── email-group[template].py │ ├── freeze-submissions.py │ ├── get-areachairs.py │ ├── get-groups.py │ ├── get-invitations.py │ ├── get-notes.py │ ├── get-reviewers.py │ ├── get-submissions.py │ └── refresh-authors.py └── webfield │ ├── reviewer_bid_tabs.js │ ├── venue_home_basic.js │ └── venue_home_tabs.js ├── utils ├── author-precreate-profile.py ├── file-emails-to-lowercase.py ├── group-emails-to-lowercase.py ├── load-NSF-profiles.py ├── load-Researcher-profiles.py └── processToFile.js └── venues ├── ACM.org ├── ACM-landing-webfield.html └── SIGIR │ └── Badging │ ├── process │ ├── decisionNotification.js │ └── submissionProcess.js │ ├── python │ ├── chairs │ │ └── assign-reviewer.py │ ├── config.py │ └── init_conference.py │ └── webfield │ ├── decisionWebfield.js │ └── recruitResponseWebfield.js ├── AKBC.ws ├── 2013 │ ├── js │ │ └── superuser-reset.js │ ├── python │ │ └── superuser-init.py │ └── webfield │ │ └── akbc2013_webfield.js ├── 2019 │ └── Conference │ │ ├── README.md │ │ ├── process │ │ ├── commentProcess.js │ │ ├── metaReviewProcess.js │ │ ├── officialReviewProcess.js │ │ ├── recruitReviewersProcess.js │ │ ├── registrationProcess.js │ │ ├── submissionProcess.js │ │ └── withdrawProcess.js │ │ ├── python │ │ ├── akbc19.py │ │ ├── assign.py │ │ ├── bidding_stage.py │ │ ├── create_revise_review_invitations.py │ │ ├── generate-ac-scores.py │ │ ├── groups.py │ │ ├── invitations.py │ │ ├── notes.py │ │ ├── post-decisions.py │ │ ├── post-submissions-stage-1.py │ │ ├── post-submissions-stage-2.py │ │ ├── programchairs │ │ │ └── assign-reviewer.py │ │ ├── rebuttal-stage.py │ │ ├── review-assignment-stage.py │ │ └── reviewing-stage.py │ │ └── webfield │ │ ├── areachairWebfield.js │ │ ├── areachairWebfieldBiddingEnabled.js │ │ ├── areachairWebfieldReviewerAssignmentStage.js │ │ ├── authorWebfield.js │ │ ├── bidWebfield.js │ │ ├── homepage.js │ │ ├── homepagePostSubmission.js │ │ ├── programchairWebfield.js │ │ ├── recruitResponseWebfield.js │ │ ├── reviewerWebfield.js │ │ ├── reviewerWebfieldBiddingEnabled.js │ │ └── reviewerWebfieldReviewerAssignmentStage.js └── AKBC-landing-webfield.js ├── DBLP.org └── python │ ├── config.py │ ├── dblp_upload_demo.ipynb │ ├── dblp_upload_wrapper.py │ └── superuser-init.py ├── Demo └── 2019 │ └── Workshop │ └── DoubleBlind │ └── python │ ├── config.py │ └── init.py ├── ECCV2016.org └── BNMW │ ├── bnmw-1.js │ ├── bnmw_params.js │ ├── bnmw_setup.js │ ├── bnmw_webfield.js │ ├── eccv_add_verdictInvitations.js │ ├── process │ ├── bnmwProcess.template │ ├── commentProcess.js │ └── reviewProcess.js │ └── python │ ├── setup-groups.py │ └── setup-invitations.py ├── ICLR.cc ├── 2013 │ ├── js │ │ └── superuser-reset.js │ ├── python │ │ └── superuser-init.py │ └── webfield │ │ ├── conferenceWebfield.js │ │ ├── conferenceWebfieldOld.html │ │ └── iclr2013_webfield.js ├── 2014 │ ├── js │ │ └── superuser-reset.js │ ├── python │ │ └── superuser-init.py │ └── webfield │ │ ├── conferenceWebfield.js │ │ ├── conferenceWebfieldOld.html │ │ ├── iclr2014_webfield.js │ │ ├── workshopWebfield.js │ │ └── workshopWebfieldOld.html ├── 2016 │ ├── iclr2016(old scripts) │ │ ├── 20160114-demo │ │ │ ├── 0-create_iclr_pcs.js │ │ │ ├── 1-create_iclr_grp.js │ │ │ ├── 10-send_revs_email.js │ │ │ ├── 11-create_rev_grp.js │ │ │ ├── 12-assign_reviewers_from_csv.js │ │ │ ├── 13-check_reviews.js │ │ │ ├── 14-remind_reviewers.js │ │ │ ├── 15-create_comment_invitation.js │ │ │ ├── 16-review-stats.js │ │ │ ├── 17-create_comment_invitations.js │ │ │ ├── 18-accepted_papers.js │ │ │ ├── 19-email_results.js │ │ │ ├── 2-create_iclr16_grp.js │ │ │ ├── 20-check_author_emails.js │ │ │ ├── 21-email_missing_results.js │ │ │ ├── 22-email_poster_instructions.js │ │ │ ├── 23-google_authors.js │ │ │ ├── 3-create_paper_grp.js │ │ │ ├── 4-create_iclr_sub_inv.js │ │ │ ├── 5-create_iclr_sub.js │ │ │ ├── 6-assign_reviewer.js │ │ │ ├── 7-create_iclr_subs_from_csv.js │ │ │ ├── 8-comment.js │ │ │ ├── 9-create_rev_accts_and_email.js │ │ │ └── web-field-workshop.html │ │ ├── iclr2016_conference │ │ │ ├── 3-create_paper_grp.js │ │ │ ├── 4-create_iclr_sub_inv.js │ │ │ ├── 8-create_iclr_subs_from_csv.js │ │ │ └── 9-create_iclr_subs_from_csv.js │ │ ├── sample_scripts │ │ │ ├── assign_reviewer.js │ │ │ ├── create_comment │ │ │ ├── create_group │ │ │ ├── create_group.js │ │ │ ├── create_iclr_comment.js │ │ │ ├── create_iclr_sub.js │ │ │ ├── create_iclr_sub_invite.js │ │ │ ├── create_invite │ │ │ ├── create_invite.js │ │ │ ├── create_note │ │ │ ├── create_note.js │ │ │ ├── create_review │ │ │ ├── create_simple_inv.js │ │ │ ├── create_simple_note.js │ │ │ ├── create_submission.js │ │ │ ├── create_submission_invite │ │ │ ├── create_submission_invite.js │ │ │ ├── create_user │ │ │ ├── create_user.json │ │ │ ├── create_usr_no_pass_test.js │ │ │ └── init_iclr.js │ │ └── test │ │ │ ├── login.js │ │ │ └── test.js │ └── workshop │ │ ├── iclr2016_landingpage.js │ │ ├── iclr2016_params.js │ │ ├── iclr2016_setup.js │ │ └── iclr2016_webfield.js ├── 2017 │ ├── README.md │ ├── conference │ │ ├── process │ │ │ ├── acceptanceProcess.js │ │ │ ├── commentProcess.js │ │ │ ├── metaReviewProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ ├── openReviewProcess.js │ │ │ ├── questionProcess.js │ │ │ ├── ratingProcess.js │ │ │ ├── responseInvitationProcess_conference.js │ │ │ ├── submissionProcess_conference.template │ │ │ └── verdictProcess.js │ │ ├── python │ │ │ ├── accept-submissions.py │ │ │ ├── assign-areachairs.py │ │ │ ├── assign-reviewers.py │ │ │ ├── email-everyone.py │ │ │ ├── email-group[template].py │ │ │ ├── email-lazy-reviewers.py │ │ │ ├── export-members.py │ │ │ ├── get-acceptance-status.py │ │ │ ├── get-all-paper-status.py │ │ │ ├── get-areachairs.py │ │ │ ├── get-groups.py │ │ │ ├── get-invitations.py │ │ │ ├── get-lazy-reviewers.py │ │ │ ├── get-notes.py │ │ │ ├── get-review-status.py │ │ │ ├── get-reviewer-rating.py │ │ │ ├── get-reviewers.py │ │ │ ├── get-stats.py │ │ │ ├── get-submission-notes.py │ │ │ ├── get-submissions.py │ │ │ ├── get_reviews.py │ │ │ ├── invite-reviewers-reminder.py │ │ │ ├── invite-reviewers.py │ │ │ ├── populate_reviewerInfo.py │ │ │ ├── superuser-assign-areachairs.py │ │ │ ├── superuser-assign-reviewers.py │ │ │ ├── superuser-create-ratings.py │ │ │ ├── superuser-init.py │ │ │ ├── superuser-tpms-dump.py │ │ │ ├── unassign-areachairs.py │ │ │ ├── unassign-reviewers.py │ │ │ ├── update-groups.py │ │ │ ├── update-homepage.py │ │ │ └── update-invitations.py │ │ └── webfield │ │ │ ├── areachair_webfield.html │ │ │ ├── iclr2017_conference_decisions_webfield.js │ │ │ ├── iclr2017_webfield.js │ │ │ ├── iclr2017conference_webfield.html │ │ │ └── web-field-invitation.html │ ├── js │ │ └── superuser-reset.js │ └── workshop │ │ ├── process │ │ ├── acceptanceProcess_workshop.js │ │ ├── commentProcess_workshop.js │ │ ├── officialReviewProcess_workshop.js │ │ ├── openReviewProcess_workshop.js │ │ ├── responseInvitationProcess_workshop.js │ │ └── submissionProcess_workshop.template │ │ ├── python │ │ ├── accept-workshop-submissions.py │ │ ├── assign-workshop-reviewers.py │ │ ├── get-workshop-lazy-reviewers.py │ │ ├── get-workshop-review-status.py │ │ ├── get-workshop-submissions.py │ │ ├── invite-workshop-reviewers.py │ │ ├── superuser-tpms-dump-workshop.py │ │ ├── superuser-workshop-init.py │ │ └── unassign-workshop-reviewers.py │ │ └── webfield │ │ ├── iclr2017_workshop_decisions_webfield.js │ │ ├── iclr2017workshop_webfield.html │ │ └── web-field-invitation_workshop.html ├── 2018 │ ├── Conference │ │ ├── README.md │ │ ├── params.json │ │ ├── process │ │ │ ├── addRevisionProcess.js │ │ │ ├── commentProcess.js │ │ │ ├── metaReviewProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ ├── officialReviewProcess_withRevision.js │ │ │ ├── recruitAreachairsProcess.js │ │ │ ├── recruitReviewersProcess.js │ │ │ ├── reviewRevisionProcess.js │ │ │ ├── submissionProcess.js │ │ │ ├── submissionProcess_fast.js │ │ │ ├── withdrawProcess_delete.js │ │ │ └── withdrawProcess_reveal.js │ │ ├── python │ │ │ ├── admin-init.py │ │ │ ├── config.py │ │ │ ├── convert-withdrawal-procedure.py │ │ │ ├── correct-authorgroups.py │ │ │ ├── correct-official-comment-nonreaders.py │ │ │ ├── correct-official-comment-readers.py │ │ │ ├── create-comment-reader-groups.py │ │ │ ├── deduplicate-submissions.py │ │ │ ├── demo.py │ │ │ ├── email-decisions.py │ │ │ ├── fix-blinded-submissions.py │ │ │ ├── invitations.py │ │ │ ├── migrate-withdrawn-comments.py │ │ │ ├── post-acceptance-decisions.py │ │ │ ├── programchairs │ │ │ │ ├── assign-areachair.py │ │ │ │ ├── assign-reviewer.py │ │ │ │ ├── get-acceptance-status.py │ │ │ │ ├── get-accepted.py │ │ │ │ ├── get-activity.py │ │ │ │ ├── get-lazy-reviewers.py │ │ │ │ ├── get-review-info.py │ │ │ │ └── get-reviewers.py │ │ │ ├── recruit-areachairs.py │ │ │ ├── recruit-reviewers.py │ │ │ ├── refresh-bibtex.py │ │ │ ├── regen-paperauthor-groups.py │ │ │ ├── replace-emails-with-tilde.py │ │ │ ├── review-revisions.py │ │ │ ├── reviewer-assignment-from-server.py │ │ │ ├── reviewer-assignment.py │ │ │ ├── reviewer-matching.py │ │ │ ├── tpms-dump.py │ │ │ └── visibility.py │ │ └── webfield │ │ │ ├── areachairWebfield.js │ │ │ ├── bidWebfield.js │ │ │ ├── conferenceWebfield.html │ │ │ ├── conferenceWebfield_decision_tabs.js │ │ │ ├── conferenceWebfield_tabs.js │ │ │ ├── groupWebField.js │ │ │ ├── programchairWebfield.js │ │ │ ├── recruitAreachairsWebfield.html │ │ │ └── recruitReviewersWebfield.html │ ├── Workshop │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── conferenceTransferProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ ├── recruitReviewersProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── config.py │ │ │ ├── email-decisions.py │ │ │ ├── email-lazy-reviewers.py │ │ │ ├── invitations.py │ │ │ ├── post-acceptance-decisions.py │ │ │ ├── programchairs │ │ │ │ ├── assign-all-reviewers.py │ │ │ │ ├── assign-reviewer.py │ │ │ │ ├── get-pdfs.py │ │ │ │ ├── get-reviewers.py │ │ │ │ └── post-acceptance-decisions.py │ │ │ ├── recruit-reviewers.py │ │ │ ├── reviewers_intersect.py │ │ │ ├── superuser-init.py │ │ │ └── tpms-dump.py │ │ └── webfield │ │ │ ├── bidWebfield.js │ │ │ ├── recruitReviewersWebfield.html │ │ │ ├── workshopWebfield_decision_tabs.js │ │ │ └── workshopWebfield_tabs.js │ └── iclr18-landing-webfield.js ├── 2019 │ ├── Conference │ │ ├── README.md │ │ ├── data │ │ │ ├── ac-match-config.json │ │ │ ├── iclr19-match-config-example.json │ │ │ ├── jr-reviewers-match-config.json │ │ │ └── sr-reviewers-match-config.json │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── metaReviewProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ ├── recruitReviewersProcess.js │ │ │ ├── registrationProcess.js │ │ │ ├── submissionProcess.js │ │ │ └── withdrawProcess.js │ │ ├── python │ │ │ ├── assign.py │ │ │ ├── bidding_stage.py │ │ │ ├── decisions-stage.py │ │ │ ├── groups.py │ │ │ ├── iclr19.py │ │ │ ├── invitations.py │ │ │ ├── notes.py │ │ │ ├── post-submissions-stage-1.py │ │ │ ├── post-submissions-stage-2.py │ │ │ ├── programchairs │ │ │ │ ├── assign-reviewer.py │ │ │ │ ├── get-accepted.py │ │ │ │ ├── get-lazy-reviewers.py │ │ │ │ └── write-acceptance-status.py │ │ │ ├── rebuttal-stage.py │ │ │ ├── resubmit_papers.py │ │ │ ├── review-assignment-stage.py │ │ │ ├── review-rating.py │ │ │ ├── reviewing-stage.py │ │ │ ├── tpms-dump.py │ │ │ └── tpms-get-pdfs.py │ │ └── webfield │ │ │ ├── areachairWebfield.js │ │ │ ├── areachairWebfieldBiddingEnabled.js │ │ │ ├── areachairWebfieldReviewerAssignmentStage.js │ │ │ ├── authorWebfield.js │ │ │ ├── bidWebfield.js │ │ │ ├── conferenceWebfield_decision_tabs.js │ │ │ ├── homepage.js │ │ │ ├── homepagePostSubmission.js │ │ │ ├── programchairWebfield.js │ │ │ ├── recruitResponseWebfield.js │ │ │ ├── reviewerWebfield.js │ │ │ ├── reviewerWebfieldBiddingEnabled.js │ │ │ └── reviewerWebfieldReviewerAssignmentStage.js │ └── Workshop │ │ ├── DeepGenStruct │ │ ├── process │ │ │ └── submissionProcess.js │ │ └── python │ │ │ ├── config.py │ │ │ ├── init.py │ │ │ ├── post-submission-stage.py │ │ │ ├── review-assignment-stage.py │ │ │ └── reviewing-stage.py │ │ ├── LLD │ │ ├── process │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── assign-reviewers.py │ │ │ ├── config.py │ │ │ ├── create-review-invitations.py │ │ │ ├── get-submissions.py │ │ │ ├── init.py │ │ │ ├── post-submission-stage.py │ │ │ └── recruit_reviewers.py │ │ └── webfield │ │ │ └── conferenceWebfield.js │ │ ├── RML │ │ └── python │ │ │ ├── config.py │ │ │ ├── init.py │ │ │ └── post-submission-stage.py │ │ └── drlStructPred │ │ └── python │ │ ├── config.py │ │ ├── deploy_reviewer_matching.py │ │ ├── get-submissions.py │ │ ├── init.py │ │ ├── invite-reviewers.py │ │ └── post-submission-stage-1.py ├── 2020 │ └── Conference │ │ └── python │ │ ├── assign-area-chair.py │ │ ├── assign-reviewer.py │ │ ├── buddyAcCommentProcess.js │ │ ├── buddyAreachairWebfield.js │ │ ├── buddy_ac.py │ │ ├── get-areachairs.py │ │ ├── get-reviewers.py │ │ ├── meta_review_process.js │ │ ├── reassign-reviewer.py │ │ ├── recruit-area-chairs.py │ │ ├── recruit-reviewers.py │ │ ├── setup-pc-assignment.py │ │ └── setup-stages.py ├── 2021 │ └── Conference │ │ └── python │ │ ├── post-custom-load-edges.py │ │ ├── recruit-reviewers.py │ │ ├── tpms-dump.py │ │ ├── tpms-get-pdfs.py │ │ └── tpms-revs-acs-dump.py └── ICLR-landing-webfield.js ├── ICML.cc ├── 2013 │ ├── Inferning │ │ ├── python │ │ │ └── superuser-init-inferning.py │ │ └── webfield │ │ │ └── icml2013_inferning_webfield.js │ └── PeerReview │ │ ├── python │ │ └── superuser-init-peer-review.py │ │ └── webfield │ │ └── icml2013_peer_review_webfield.js ├── 2017 │ ├── MLAV │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── admin-init.py │ │ │ ├── config.py │ │ │ ├── create_invitations.py │ │ │ └── superuser-init.py │ │ └── webfield │ │ │ └── conf.html │ ├── RML │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ └── submissionProcess.template │ │ ├── python │ │ │ ├── admin-init.py │ │ │ ├── config.py │ │ │ ├── create_revisions.py │ │ │ └── superuser-init.py │ │ └── webfield │ │ │ └── conf.html │ └── WHI │ │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ └── submissionProcess.template │ │ ├── python │ │ ├── admin-init.py │ │ ├── config.py │ │ ├── create-revisions.py │ │ ├── requests.ipynb │ │ └── superuser-init.py │ │ └── webfield │ │ └── conf.html ├── 2018 │ ├── ECA │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── config.py │ │ │ ├── init_conference.py │ │ │ └── update_homepage.py │ │ └── webfield │ │ │ └── conferenceWebfield.template │ ├── RML │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ └── init-submissions.py │ │ └── webfield │ │ │ ├── conferenceWebfield.js │ │ │ └── programchairWebfield.js │ └── Workshop │ │ └── NAMPI │ │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ ├── recruitReviewerProcess.js │ │ └── submissionProcess.js │ │ ├── python │ │ ├── functions.py │ │ ├── nampi.py │ │ └── setup.py │ │ └── webfield │ │ ├── homepage.js │ │ ├── programchairWebfield.js │ │ └── recruitReviewerWebfield.js ├── 2019 │ ├── Conference │ │ ├── README.md │ │ ├── data │ │ │ └── parse_sheets.py │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── metaReviewProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ ├── recruitAreaChairsProcess.js │ │ │ ├── recruitReviewersProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── export_match_stats.py │ │ │ ├── export_sac_match.py │ │ │ ├── icml-multiuser-matching-demo.py │ │ │ ├── icml.py │ │ │ ├── init.py │ │ │ ├── setup_main_match.py │ │ │ ├── setup_sac_match.py │ │ │ └── upload_papers.py │ │ └── webfield │ │ │ ├── areachairWebfield.js │ │ │ ├── bidWebfield.js │ │ │ ├── homepage.js │ │ │ ├── programchairWebfield.js │ │ │ └── recruitResponseWebfield.js │ └── Workshop │ │ └── RL4RealLife │ │ └── python │ │ ├── config.py │ │ └── init.py └── ICML-landing-webfield.js ├── IEEE.org └── 2018 │ └── ITSC │ ├── process │ ├── commentProcess.js │ ├── officialReviewProcess.js │ └── submissionProcess.js │ ├── python │ ├── assign-reviewers.py │ ├── create-review-invitations.py │ ├── get-submissions.py │ └── init-submissions.py │ └── webfield │ ├── homepage.js │ └── programchairWebfield.js ├── ISMIR.net └── 2018 │ └── WoRMS │ ├── process │ ├── commentProcess.js │ └── submissionProcess.js │ ├── python │ └── init-submissions.py │ └── webfield │ └── conferenceWebfield.js ├── L4DC └── 2020 │ └── Conference │ └── python │ └── upload-submissions.py ├── MICCAI └── 2021 │ └── Challenges │ └── python │ └── upload-submissions.py ├── MIDL.amsterdam └── 2018 │ ├── Abstract │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ └── submissionProcess.js │ ├── python │ │ ├── admin-init.py │ │ ├── assign-reviewers.py │ │ ├── config.py │ │ ├── create-review-invitations.py │ │ ├── get-submissions.py │ │ └── process-reviewer-assignments.py │ └── webfield │ │ └── conferenceWebfield.js │ ├── Conference │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ ├── recommendReviewerProcess.js │ │ ├── recruitReviewerProcess.js │ │ └── submissionProcess.js │ ├── python │ │ ├── admin-init.py │ │ ├── approve-recommendation.py │ │ ├── assign-reviewers.py │ │ ├── chron_jobs │ │ │ └── process-complete-reviews.py │ │ ├── config.py │ │ ├── create-review-invitations.py │ │ ├── email-lazy-reviewers.py │ │ ├── get-submissions.py │ │ ├── process-reviewer-assignments.py │ │ ├── send-reviewer-message.py │ │ ├── setup-invitations.py │ │ └── setup-recruitment-groups.py │ └── webfield │ │ ├── conferenceWebfield.js │ │ └── recruitReviewerWebfield.js │ ├── get-reviews.py │ ├── midl18-landing-webfield.js │ ├── open-revisions.py │ └── recommendations-page-setup.py ├── MIDL.io ├── 2019 │ └── Conference │ │ ├── Abstract │ │ ├── python │ │ │ ├── config.py │ │ │ ├── get-reviews.py │ │ │ └── init.py │ │ └── webfield │ │ │ └── conferenceWebfield_abstract.js │ │ ├── python │ │ ├── assign.py │ │ ├── bidding_stage.py │ │ ├── config.py │ │ ├── create-metareview-invitations.py │ │ ├── create-review-invitations.py │ │ ├── get-submissions.py │ │ ├── init_conference.py │ │ ├── post-decisions-2.py │ │ ├── post-decisions-3.py │ │ ├── post-decisions.py │ │ ├── post-submission-stage-1.py │ │ ├── post-submission-stage-2.py │ │ ├── rebuttal-stage.py │ │ ├── recruit_area_chairs.py │ │ ├── recruit_reviewers.py │ │ └── review-assignment-stage.py │ │ └── webfield │ │ ├── areachairWebfield.js │ │ ├── areachairWebfieldBiddingClosed.js │ │ ├── areachairWebfieldBiddingEnabled.js │ │ ├── authorWebfield.js │ │ ├── bidWebfield.js │ │ ├── conferenceWebfield.js │ │ ├── conferenceWebfield_decision_tabs.js │ │ ├── programchairWebfield.js │ │ ├── reviewerWebfield.js │ │ ├── reviewerWebfieldBiddingClosed.js │ │ └── reviewerWebfieldBiddingEnabled.js ├── 2020 │ └── Conference │ │ └── python │ │ ├── get-paper-details.py │ │ ├── get-pdfs.py │ │ ├── post_decisions.py │ │ ├── revision-invitation.py │ │ └── tpms-dump.py ├── 2021 │ └── Conference │ │ └── python │ │ ├── tpms-dump.py │ │ └── tpms-get-pdfs.py └── midl-landing-webfield.js ├── ML_Reproducibility_Challenge └── 2020 │ ├── process │ ├── claimProcess.py │ ├── commentProcess.py │ └── reportProcess.py │ ├── python │ ├── comment_notification.py │ ├── load_papers.py │ ├── notify.py │ └── setup.py │ └── webfield │ ├── authorWebfield.js │ ├── conferenceWebfield.js │ └── pcWebfield.js ├── NIPS.cc ├── 2016 │ ├── Deep_Learning_Symposium │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ └── recommendationProcess_nips_symposium2016.template │ │ ├── python │ │ │ ├── setup-groups.py │ │ │ ├── setup-invitations.py │ │ │ └── update-pcs.py │ │ └── webfield │ │ │ ├── nips_symposium2016-webfield.js │ │ │ └── web-field-invitation.html │ ├── NIPS-2016-landing-webfield.js │ └── workshop │ │ ├── MLITS │ │ ├── process │ │ │ ├── MLITSProcess.template │ │ │ ├── commentProcess.js │ │ │ └── reviewProcess.js │ │ ├── python │ │ │ ├── setup-groups.py │ │ │ └── setup-invitations.py │ │ └── webfield │ │ │ └── MLITS-webfield.js │ │ └── NAMPI │ │ ├── README.md │ │ ├── process │ │ ├── acceptanceProcess.js │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ ├── openReviewProcess.js │ │ ├── responseInvitationProcess.js │ │ └── submissionProcess_NAMPI.template │ │ ├── python │ │ ├── assign-reviewers.py │ │ ├── get-reviewers.py │ │ ├── invite-reviewers.py │ │ └── superuser-init.py │ │ └── webfield │ │ ├── NAMPI-invitation-webfield.html │ │ └── NAMPI-webfield.js ├── 2017 │ ├── NIPS-2017-landing-webfield.js │ └── Workshop │ │ ├── Autodiff │ │ ├── data │ │ │ └── NIPS2017_autodiff.json │ │ ├── params.json │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── admin-init.py │ │ │ ├── config.py │ │ │ └── create-decision-tags.py │ │ └── webfield │ │ │ └── conf.js │ │ └── MLITS │ │ ├── data │ │ └── NIPS2017_MLITS.json │ │ ├── params.json │ │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ └── submissionProcess.js │ │ ├── python │ │ ├── admin-init.py │ │ ├── config.py │ │ ├── create-decision-tags.py │ │ └── email-reviewers.py │ │ └── webfield │ │ └── conf.js ├── 2018 │ └── Workshop │ │ ├── CDNNRIA │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── officialCommentProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── assign-reviewers.py │ │ │ ├── config.py │ │ │ ├── create-review-invitations.py │ │ │ ├── init_conference.py │ │ │ ├── post_decisions.py │ │ │ └── update-comment-invites.py │ │ └── webfield │ │ │ └── conferenceWebfield.js │ │ ├── IRASL │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── officialReviewProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── config.py │ │ │ ├── create-anon-comments.py │ │ │ ├── create-review-invitations.py │ │ │ ├── email-lazy-reviewers.py │ │ │ ├── email-reviewers.py │ │ │ └── init_conference.py │ │ └── webfield │ │ │ └── conferenceWebfield.js │ │ ├── MLITS │ │ ├── process │ │ │ ├── addRevisionProcess.js │ │ │ ├── commentProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── assign-reviewers.py │ │ │ ├── config.py │ │ │ ├── create-review-invitations.py │ │ │ └── init_conference.py │ │ └── webfield │ │ │ └── conferenceWebfield.js │ │ ├── MLOSS │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ └── submissionProcess.js │ │ ├── python │ │ │ ├── assign-reviewers.py │ │ │ ├── config.py │ │ │ ├── create-review-invitations.py │ │ │ ├── init_conference.py │ │ │ └── post_decisions.py │ │ └── webfield │ │ │ └── conferenceWebfield.js │ │ └── Spatiotemporal │ │ ├── process │ │ ├── addRevisionProcess.js │ │ ├── commentProcess.js │ │ ├── confidentialReviewProcess.js │ │ ├── officialCommentProcess.js │ │ ├── overallEvaluationProcess.js │ │ ├── pcCommentProcess.js │ │ └── submissionProcess.js │ │ ├── python │ │ ├── assign-reviewers.py │ │ ├── config.py │ │ ├── create-PC-comment-invitations.py │ │ ├── create-anon-comment-invitations.py │ │ ├── create-review-invitations.py │ │ ├── email-authors.py │ │ ├── email-reviewers.py │ │ └── init_conference.py │ │ └── webfield │ │ ├── conferenceWebfield.js │ │ └── conferenceWebfield.template └── NIPS-landing-webfield.js ├── NeurIPS.cc ├── 2020 │ └── Conference │ │ └── python │ │ └── get-reviewer-expertise.py ├── 2021 │ └── Conference │ │ └── python │ │ ├── README.md │ │ └── build-conflicts.py ├── 2022 │ └── Conference │ │ └── python │ │ ├── update_desk_reject.py │ │ └── updated_desk_reject_process.py └── 2023 │ └── submission_preprocess.js ├── OpenReview.net ├── Anonymous_Preprint │ ├── process │ │ ├── addRevisionProcess.js │ │ ├── commentProcess.js │ │ ├── revealProcess.py │ │ ├── revisionProcess.py │ │ └── submissionProcess.js │ ├── python │ │ ├── admin-init.py │ │ ├── config.py │ │ ├── deanonymize.py │ │ └── reconfigure-invites.py │ └── webfield │ │ └── conferenceWebfield.js ├── Archive │ ├── archive.py │ ├── archiveWebfield.js │ └── correct-imported-records.py └── Support │ ├── build-venue.py │ ├── commentProcess.js │ ├── deployProcess.py │ ├── init.py │ ├── recruitmentProcess.py │ ├── revisionProcess.py │ ├── supportProcess.js │ └── supportRequestsWeb.js ├── UAI └── update-custom-edges.py ├── aclweb.org ├── ACL │ ├── add_SACs_as_readers.py │ ├── add_best_paper_committee.py │ ├── commentProcess.js │ ├── create_invitations_ARR.py │ ├── create_main_ethics_ac_reviewers.py │ ├── create_rating_inv.py │ ├── decision_process.py │ ├── desk-reject-ACL-process.py │ ├── ethicsChairsWebfield.js │ ├── ethicsReviewersWebfield.js │ ├── ethics_review_process.py │ ├── ethics_reviewer_assignment_preprocess.py │ ├── ethics_reviewer_assignment_process.py │ ├── flagged_papers.py │ ├── hide_copyright_signature.py │ ├── migrate_submissions_ARR_ACL.py │ ├── post_assignment_edges.py │ ├── post_camera_ready_invitation.py │ ├── post_comment_invitations.py │ ├── post_decision_invitations.py │ ├── post_desk_reject_invitations.py │ ├── post_ethics_review_invitation.py │ ├── post_ethics_reviewers_assignment_invitation.py │ ├── post_suggested_decision_invitations.py │ ├── post_withdraw_invitations.py │ ├── programchairWebfield.js │ ├── release_submissions_to_authors.py │ ├── reviewer_ac_groups.py │ ├── seniorAreaChairWebfield.js │ ├── suggested_decision_pre_process.py │ ├── suggested_decision_process.py │ ├── tracks.py │ └── withdraw-ACL-process.py ├── ARR │ ├── Commitment │ │ └── webfield │ │ │ ├── authorWebfield.js │ │ │ └── programChairWebfield.js │ └── python │ │ ├── pre_check_invitation.py │ │ ├── release-reviews.py │ │ ├── remind_assigned_action_editors.py │ │ ├── remind_assigned_reviewers.py │ │ ├── remind_invited_action_editors.py │ │ └── remind_invited_reviewers.py ├── NAACL │ ├── 2018 │ │ └── Preprint │ │ │ ├── construct-preprint-server.py │ │ │ ├── process │ │ │ ├── addRevisionProcess.js │ │ │ ├── commentProcess.js │ │ │ └── submissionProcess.js │ │ │ ├── python │ │ │ ├── admin-init.py │ │ │ └── config.py │ │ │ └── webfield │ │ │ └── conferenceWebfield.js │ └── 2022 │ │ ├── migrated-submissions │ │ ├── add_SACs_as_readers.py │ │ ├── author_comments.py │ │ ├── change_tracks.py │ │ ├── change_tracks_in_sub.py │ │ ├── commentProcess.js │ │ ├── commitmentPreProcess.py │ │ ├── commitmentProcess.js │ │ ├── countries.py │ │ ├── create_main_ethics_ac_reviewers.py │ │ ├── create_rating_inv.py │ │ ├── decision_process.py │ │ ├── desk-reject-ACL-process.py │ │ ├── ethicsChairsWebfield.js │ │ ├── ethicsReviewersWebfield.js │ │ ├── ethics_review_process.py │ │ ├── ethics_reviewer_assignment_preprocess.py │ │ ├── ethics_reviewer_assignment_process.py │ │ ├── flagged_papers.py │ │ ├── migrate_submissions_ARR_ACL.py │ │ ├── missed_metareviews.py │ │ ├── post_assignment_edges.py │ │ ├── post_camera_ready_invitation.py │ │ ├── post_comment_invitations.py │ │ ├── post_decision_invitations.py │ │ ├── post_desk_reject_invitations.py │ │ ├── post_ethics_review_invitation.py │ │ ├── post_ethics_reviewers_assignment_invitation.py │ │ ├── post_invitations.py │ │ ├── post_preprints.py │ │ ├── post_suggested_decision_invitations.py │ │ ├── post_withdraw_invitations.py │ │ ├── release_submissions_and_decisions_to_authors.py │ │ ├── release_submissions_to_authors.py │ │ ├── reviewer_ac_groups.py │ │ ├── suggested_decision_pre_process.py │ │ ├── suggested_decision_process.py │ │ ├── tracks.py │ │ └── withdraw-ACL-process.py │ │ ├── programchairWebfield.js │ │ ├── seniorAreaChairWebfield.js │ │ └── special-theme │ │ ├── ethicsChairsWebfield.js │ │ ├── ethicsReviewersWebfield.js │ │ ├── ethics_review_process.py │ │ ├── ethics_reviewer_assignment_preprocess.py │ │ ├── ethics_reviewer_assignment_process.py │ │ ├── flagged_papers.py │ │ ├── post_assignment_edges_special.py │ │ ├── post_ethics_review_invitation.py │ │ ├── post_ethics_reviewers_assignment_invitation.py │ │ └── reviewer_ac_groups.py └── Workshops │ ├── add-readers-to-original.py │ ├── camera_ready_process.py │ ├── create_invitations_workshops_both.py │ ├── create_invitations_workshops_one.py │ ├── decision_process.py │ ├── migrate_from_venue.py │ ├── migrate_submissions_workshops_both.py │ ├── migrate_submissions_workshops_one.py │ ├── post_blind_commitment_invitation.py │ ├── post_camera_ready.py │ ├── post_decision_invitations.py │ ├── post_withdraw_invitations.py │ └── withdraw-ACL-process.py ├── adai.ai └── DAI │ └── 2019 │ └── Conference │ └── python │ ├── config.py │ └── init.py ├── auai.org └── UAI │ ├── 2017 │ ├── js │ │ └── superuser-reset.js │ ├── process │ │ ├── acceptanceProcess.js │ │ ├── bidProcess.js │ │ ├── commentProcess.js │ │ ├── emptyProcess.js │ │ ├── metaReviewProcess.js │ │ ├── pc_registrationProcess.template │ │ ├── pc_responseInvitationProcess_uai2017.js │ │ ├── reviewProcess.js │ │ ├── spc_registrationProcess.template │ │ ├── spc_responseInvitationProcess_uai2017.js │ │ ├── submissionProcess.js │ │ ├── uaidata.js │ │ └── verdictProcess.js │ ├── python │ │ ├── acceptance-decisions.py │ │ ├── acceptance-notifications.py │ │ ├── assign-program-committee.py │ │ ├── assign-senior-program-committee.py │ │ ├── assignment_utils.py │ │ ├── basic-assignment-note.py │ │ ├── basic-metadata.py │ │ ├── config.py │ │ ├── create-invitations.py │ │ ├── create_copyright_invitations.py │ │ ├── email-lazy-reviewers.py │ │ ├── invite-spc.py │ │ ├── superuser-init.py │ │ ├── uai-metadata.py │ │ ├── uai-model-training.py │ │ ├── uai_features.py │ │ └── update-invitations.py │ └── webfield │ │ ├── add_bid_invitation_webfield.html │ │ ├── pc_invitation_webfield.html │ │ ├── program_co-chairs_group_webfield.js │ │ ├── spc_group_webfield.js │ │ ├── spc_invitation_webfield.html │ │ └── uai2017_webfield.js │ ├── 2018 │ ├── README.md │ ├── data │ │ └── subject_areas.csv │ ├── js │ │ └── fix-reviews.js │ ├── process │ │ ├── commentProcess.js │ │ ├── metaReviewProcess.js │ │ ├── officialReviewProcess.js │ │ ├── recruitPCProcess.js │ │ ├── recruitSPCProcess.js │ │ ├── registrationProcess.js │ │ └── submissionProcess.js │ ├── python │ │ ├── assign-all-areachairs.py │ │ ├── assign-all-reviewers.py │ │ ├── assign-areachairs.py │ │ ├── assign-reviewers.py │ │ ├── config.py │ │ ├── fix-ofer-metadata.py │ │ ├── get-pdfs.py │ │ ├── invite-pc-batch.py │ │ ├── invite-spc-batch.py │ │ ├── invite-spc.py │ │ ├── match-areachairs.py │ │ ├── match-reviewers-constrained.py │ │ ├── match-reviewers.py │ │ ├── reveal_decisions.py │ │ ├── sample-post-decision.py │ │ ├── samples │ │ │ ├── add-spc.py │ │ │ ├── generate-spc-info-sample.py │ │ │ └── spc-recommendation-sample.py │ │ ├── send-spc-reminder.py │ │ ├── send-spc_pc_rec.py │ │ ├── send-spc_pc_rec_reminder.py │ │ ├── setup-commenting-groups.py │ │ ├── setup-invitations.py │ │ ├── setup-matching.py │ │ ├── setup-metadata.py │ │ ├── setup-pc-recruitment.py │ │ ├── setup-registration.py │ │ ├── setup-spc-recommendation.py │ │ ├── setup-spc-recruitment.py │ │ ├── setup-submission.py │ │ ├── update-bids-metadata.py │ │ └── update-recommendations-metadata.py │ └── webfield │ │ ├── areachairWebfield.js │ │ ├── bidWebfield.js │ │ ├── bidWebfield_updated.js │ │ ├── homepage.js │ │ ├── programchairWebfield.js │ │ ├── recruitPCWebfield.js │ │ └── recruitSPCWebfield.js │ └── 2019 │ └── Conference │ ├── README.md │ ├── process │ └── withdrawProcess.js │ └── python │ ├── bidding-stage.py │ ├── config.py │ ├── create-review-quality-invitations.py │ ├── create-withdraw-invitations.py │ ├── discussion-stage.py │ ├── download-review-details.py │ ├── email-pc-members.py │ ├── email-spc-members.py │ ├── enable-comments.py │ ├── enable-decisions.py │ ├── get-pdfs.py │ ├── init.py │ ├── invite-pc.py │ ├── invite-spc.py │ ├── post-submissions-stage.py │ ├── reassign.py │ ├── recommendation-stage.py │ ├── register-pc-spc.py │ ├── review-assignment-stage.py │ └── update-comments.py ├── cv-foundation.org ├── BNWM-landing-webfield.js ├── CVPR │ ├── 2017 │ │ └── BNMW │ │ │ ├── process │ │ │ ├── commentProcess.js │ │ │ ├── cvprdata.js │ │ │ ├── reviewProcess.js │ │ │ └── submissionProcess.template │ │ │ ├── python │ │ │ ├── cvprdata.py │ │ │ └── superuser-init.py │ │ │ └── webfield │ │ │ └── cvpr2017_webfield.js │ └── 2019 │ │ └── Conference │ │ └── python │ │ ├── __init__.py │ │ ├── create_conference_data.py │ │ ├── cvpr2019.py │ │ ├── generate_match_export.py │ │ └── setup_match_inputs.py └── ECCV │ └── 2018 │ ├── Conference │ └── python │ │ ├── cmt-dump.py │ │ ├── download-author-profiles.py │ │ ├── download-profiles.py │ │ ├── download-score-maps-2nd-areachair.py │ │ ├── download-score-maps.py │ │ ├── import-researcher.py │ │ ├── import-reviewers.py │ │ ├── import_user.py │ │ ├── match-areachairs.py │ │ ├── match-reviewers.py │ │ ├── setup-conference.py │ │ ├── setup-matching.py │ │ ├── setup-metadata-acs2.py │ │ ├── setup-metadata-reviewers.py │ │ ├── setup-metadata.py │ │ ├── submit-papers.py │ │ ├── upload-areachairs.py │ │ └── upload-reviewers.py │ └── Demo │ ├── python │ ├── generate-metadata.py │ ├── import-researcher.py │ ├── import_user.py │ ├── precreate-profiles.py │ ├── setup-demo.py │ └── submit-papers.py │ ├── run-demo.sh │ └── webfield │ └── webfield.js ├── eswc-conferences.org └── ESWC │ └── 2019 │ └── Workshop │ └── KGB │ └── python │ ├── assign-reviewers.py │ ├── config.py │ ├── create-review-invitations.py │ ├── get-submissions.py │ └── init.py ├── futuredata.stanford.edu ├── python │ └── superuser-init.py └── webfield │ └── futuredata_webfield.html ├── gamesec-conf.org └── GameSec │ └── 2019 │ └── Conference │ └── python │ ├── config.py │ └── init.py ├── icaps-conference.org └── ICAPS │ └── 2019 │ └── Workshop │ ├── HSDIP │ └── python │ │ ├── config.py │ │ ├── get-submissions.py │ │ ├── init_conference.py │ │ └── post-submission-stage-1.py │ ├── Hierarchical_Planning │ └── python │ │ ├── config.py │ │ └── init.py │ ├── KEPS │ └── python │ │ ├── config.py │ │ ├── get-submissions.py │ │ ├── init.py │ │ ├── invite_reviewers.py │ │ └── post-submission-stage-1.py │ ├── SPARK │ └── python │ │ ├── config.py │ │ └── init.py │ ├── VRDIP │ └── python │ │ ├── config.py │ │ └── init.py │ ├── WIPC │ └── python │ │ ├── config.py │ │ └── init.py │ └── XAIP │ └── python │ ├── config.py │ └── init.py ├── informatik.uni-rostock.de └── Informatik_Rostock │ └── Ubiquitous_Computing │ └── 2017 │ ├── process │ ├── commentProcess.js │ ├── officialReviewProcess.js │ └── submissionProcess.template │ ├── python │ ├── admin-init.py │ ├── config.py │ ├── create-comment-invite.py │ ├── create-revision-invite.py │ └── superuser-init.py │ └── webfield │ └── conf.js ├── iscb.org └── ISMB │ └── 2019 │ ├── log.ipynb │ ├── python │ ├── config.py │ └── functions.py │ └── webfield │ └── homepage.js ├── learningtheory.org └── COLT │ └── 2019 │ ├── README.md │ ├── process │ ├── commentProcess.js │ ├── officialReviewProcess.js │ ├── recruitReviewersProcess.js │ └── submissionProcess.js │ ├── python │ ├── allocate-reviewers-job.py │ ├── assign-program-committee.py │ ├── assign.py │ ├── bidding-stage.py │ ├── config.py │ ├── create-comment-invitations.py │ ├── create-rebuttal-invitation-job.py │ ├── create-stoc-review-invitations.py │ ├── email-program-committee-sample.py │ ├── init.py │ ├── move-pc-members-to-submitted-job.py │ ├── notify-decisions.py │ ├── post-submission-stage.py │ ├── rebuttal-phase.py │ ├── setup-assignment.py │ ├── subreviewer-discussion.py │ └── update-official-review-invi.py │ └── webfield │ ├── authorWebfield.js │ ├── bidWebfield.js │ ├── homepage.js │ ├── programChairWebfield.js │ ├── programCommitteeWebfield_bidding-stage.js │ ├── programCommitteeWebfield_init.js │ └── recruitResponseWebfield.js ├── machineintelligence.cc └── MIC │ └── 2018 │ ├── Abstract │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ └── submissionProcess.js │ └── python │ │ └── config.py │ ├── Conference │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ └── submissionProcess.js │ └── python │ │ └── config.py │ ├── python │ └── init_conference.py │ └── webfield │ ├── conferenceWebfield.template │ └── mic2018_webfield.js ├── reproducibility-challenge.github.io └── Reproducibility_Challenge │ └── NeurIPS │ └── 2019 │ ├── process │ ├── claimProcess.py │ ├── commentProcess.py │ └── reportProcess.py │ ├── python │ ├── comment_notification.py │ ├── create_neurips_papers.py │ ├── notify.py │ ├── post_claims.py │ └── setup.py │ └── webfield │ ├── authorWebfield.js │ ├── conferenceWebfield.js │ ├── landingWebfield.js │ └── pcWebfield.js ├── roboticsfoundation.org └── RSS │ ├── 2017 │ └── RCW_Workshop │ │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewPosterProcess.js │ │ ├── officialReviewProceedingsProcess.js │ │ ├── officialReviewProcess.js │ │ └── submissionProcess.template │ │ ├── python │ │ ├── assign-reviewers.py │ │ ├── create-invitations.py │ │ ├── email-reviewers.py │ │ ├── freeze-submissions.py │ │ ├── rssdata.py │ │ └── superuser-init.py │ │ └── webfield │ │ ├── rss2017_webfield.js │ │ ├── rss2017poster_webfield.js │ │ └── rss2017proceedings_webfield.js │ └── 2019 │ └── python │ ├── invite-area-chairs.py │ └── invite-reviewers.py ├── swsa.semanticweb.org └── ISWC │ ├── 2017 │ └── DeSemWeb │ │ ├── admin_notes.txt │ │ ├── process │ │ ├── commentProcess.js │ │ ├── reviewProcess.js │ │ └── submissionProcess.template │ │ ├── python │ │ ├── admin-init.py │ │ ├── assign-reviewer.py │ │ ├── config.py │ │ ├── create-groups.py │ │ └── create-invitations.py │ │ └── webfield │ │ └── conf.html │ ├── 2018 │ └── DeSemWeb │ │ ├── process │ │ ├── commentProcess.js │ │ ├── officialReviewProcess.js │ │ └── submissionProcess.js │ │ ├── python │ │ ├── assign-reviewers.py │ │ ├── create-review-invitations.py │ │ └── init-submissions.py │ │ └── webfield │ │ └── conferenceWebfield.js │ ├── 2019 │ └── Workshop │ │ └── DeSemWeb │ │ └── python │ │ ├── config.py │ │ └── init.py │ └── ISWC-landing-webfield.js ├── thecvf.com └── ECCV │ └── 2020 │ └── Conference │ └── python │ ├── calc_missing_reviews.py │ ├── camera-ready-instructions.py │ ├── combine-scores.py │ ├── emergency_reviews.py │ ├── get-iclr-reviewers.py │ ├── get_assignment_details.py │ ├── post-custom-load-edges.py │ ├── recruit-area-chairs.py │ ├── recruit-reviewers.py │ ├── recruit-suggested-reviewers.py │ ├── reviewer-rankings.py │ ├── secondary_ACs.py │ ├── stages.py │ ├── tpms-dump.py │ └── tpms-get-pdfs.py ├── virtual └── python │ └── setup.py └── vivoconference.org └── VIVO └── 2019 └── Conference └── python ├── config.py └── init_conference.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.sw? 2 | node_modules/* 3 | .DS_Store 4 | npm-debug.log 5 | *.pyc 6 | *.ipynb 7 | !./tutorial/*.ipynb 8 | */.ipynb_checkpoints 9 | *.csv 10 | *.log 11 | *.xlsx 12 | *.txt 13 | *.docx 14 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.pythonPath": "/usr/local/bin/python3" 3 | } -------------------------------------------------------------------------------- /admin/README.md: -------------------------------------------------------------------------------- 1 | # Admin workflow 2 | To kick off a conference, the OpenReview superuser should: 3 | - Create a conference directory under /venues (e.g. venues/MyConference.org/2018) 4 | - Copy the file /admin/conference-template/config.properties and fill it in with conference-specific variables. Then save it in the conference directory. 5 | - Run openreview-scripts/admin/superuser-init.py (see comments in that file for details) 6 | 7 | Example: 8 | 9 | ``` 10 | >> superuser-init.py --venue myconf.org/MYCONF/2017 11 | ``` 12 | 13 | `superuser-init.py` will automatically look for a file called config.properties in the directory specified by the `--venue` argument. You can specify a .properties file by passing it into the `--config` argument. 14 | 15 | The script will generate a python script called `python/admin-init.py` in the conference's directory. This is used to initiate the conference. 16 | -------------------------------------------------------------------------------- /venues/ACM.org/ACM-landing-webfield.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 |
9 |

Association for Computing Machinery

10 | 12 | 13 |
14 |
15 |
16 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /venues/ACM.org/SIGIR/Badging/process/decisionNotification.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | console.log('Tag process'); 4 | 5 | var SHORT_PHRASE = 'ACM SIGIR Badging'; 6 | 7 | var tagsP = or3client.or3request(or3client.tagsUrl + '?forum=' + note.forum, {}, 'GET', token) 8 | .then(result => result.tags.map(tagItem => tagItem.tag)); 9 | 10 | var forumNotesP = or3client.or3request(or3client.notesUrl + '?id=' + note.forum, {}, 'GET', token); 11 | 12 | Promise.all([ 13 | forumNotesP, 14 | tagsP 15 | ]) 16 | .then(result => { 17 | var forumNote = result[0].notes[0]; 18 | var assignedBadges = result[1]; 19 | var authorMail; 20 | var authorMail = { 21 | groups: forumNote.content.authorids, 22 | subject: '[' + SHORT_PHRASE + '] A new badge has been posted on your submission. Title : "' + forumNote.content.title + '"', 23 | message: 'Your submission to ' + SHORT_PHRASE + ' has received a new badge.\n\nSubmission title: ' + forumNote.content.title + 24 | '\n\nRequested Badges: ' + forumNote.content["requested badges"].join(', ') + '\n\nAssigned Badges: ' + assignedBadges.join(', ') 25 | }; 26 | return or3client.or3request(or3client.mailUrl, authorMail, 'POST', token); 27 | }) 28 | .then(result => done()) 29 | .catch(error => done(error)); 30 | return true; 31 | } -------------------------------------------------------------------------------- /venues/ACM.org/SIGIR/Badging/python/config.py: -------------------------------------------------------------------------------- 1 | ''' 2 | ACM SIGIR Badging demo configuration 3 | https://acm.org 4 | ''' 5 | import openreview 6 | 7 | def get_conference(client): 8 | 9 | builder = openreview.conference.ConferenceBuilder(client) 10 | 11 | builder.set_conference_id('ACM.org/SIGIR/Badging') 12 | builder.set_conference_name('ACM - Special Interests Group on Information Retrieva') 13 | builder.set_conference_short_name('ACM Badging') 14 | builder.set_homepage_header({ 15 | 'title': 'ACM SIGIR Badging', 16 | 'subtitle': 'ACM - Special Interests Group on Information Retrieval', 17 | 'date': 'Continuous process', 18 | 'website': 'http://sigir.org/', 19 | 'location': 'Global', 20 | 'instructions': '

Questions or Concerns

\ 21 |

Please contact the OpenReview support team at \ 22 | info@openreview.net with any questions or concerns about the OpenReview platform.
\ 23 |

' 24 | }) 25 | builder.set_homepage_layout('simple') 26 | builder.set_submissions_public(True) 27 | builder.set_conference_program_chairs_name('Chairs') 28 | return builder.get_result() 29 | -------------------------------------------------------------------------------- /venues/AKBC.ws/2013/js/superuser-reset.js: -------------------------------------------------------------------------------- 1 | //var counter = db.openreview_counters.byExample({'id':'AKBC.ws/2013/-/submission'}).toArray()[0] 2 | //db.openreview_counters.remove(counter._id) 3 | 4 | //also reset the counters for all the other invitations, not just submission 5 | 6 | var notes = db._query("FOR note IN openreview_notes FILTER CONTAINS(note.invitation, 'AKBC.ws/2013') RETURN note._id").toArray() 7 | for(i=0;i or3client.addGroupMember(REVIEWERS_ID, note.content.email, token)) 17 | .then(result => done()) 18 | .catch(error => done(error)); 19 | } else if (note.content.response == 'No'){ 20 | console.log("Invitation replied No") 21 | //if a user is in the reviewers group, remove them from that group and add them to the reviewers-declined group 22 | or3client.removeGroupMember(REVIEWERS_ID, note.content.email, token) 23 | .then(result => or3client.addGroupMember(REVIEWERS_DECLINED_ID, note.content.email, token)) 24 | .then(result => done()) 25 | .catch(error => done(error)); 26 | } else { 27 | done('Invalid response', note.content.response); 28 | } 29 | return true; 30 | } else { 31 | done('Invalid key', note.content.key); 32 | return false; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /venues/AKBC.ws/2019/Conference/process/registrationProcess.js: -------------------------------------------------------------------------------- 1 | function () { 2 | var or3client = lib.or3client; 3 | 4 | or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token) 5 | .then(result => done()) 6 | .catch(error => done(error)); 7 | return true; 8 | }; 9 | -------------------------------------------------------------------------------- /venues/AKBC.ws/2019/Conference/process/submissionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | 4 | var SHORT_PHRASE = 'AKBC 2019'; 5 | 6 | var authorMail = { 7 | groups: note.content.authorids, 8 | subject: SHORT_PHRASE + ' has received your submission titled ' + note.content.title, 9 | message: 'Your submission to ' + SHORT_PHRASE + ' has been posted.\n\nTitle: ' + note.content.title + '\n\nAbstract: ' + note.content.abstract + '\n\nTo view your submission, click here: ' + baseUrl + '/forum?id=' + note.forum 10 | }; 11 | or3client.or3request(or3client.mailUrl, authorMail, 'POST', token) 12 | .then(result => done()) 13 | .catch(error => done(error)); 14 | return true; 15 | }; 16 | -------------------------------------------------------------------------------- /venues/AKBC.ws/2019/Conference/process/withdrawProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | var CONFERENCE_ID = 'AKBC.ws/2019/Conference'; 5 | var SHORT_PHRASE = "AKBC 2019"; 6 | var PAPER_AUTHORS = CONFERENCE_ID + '/Paper' + note.number + '/Authors'; 7 | 8 | var forumNoteP = or3client.or3request(or3client.notesUrl + '?id=' + note.forum, {}, 'GET', token); 9 | 10 | forumNoteP.then(function(result) { 11 | var forumNote = result.notes[0]; 12 | author_mail = { 13 | "groups": forumNote.content.authorids, 14 | "subject": "Your submission to " + SHORT_PHRASE + " has been withdrawn", 15 | "message": "Your submission, \""+ forumNote.content.title +"\", has been withdrawn by one of the authors. \ 16 | To view your withdrawn submission, click here: " + baseUrl + "/forum?id=" + forumNote.forum + "\n\n\ 17 | Per AKBC policy, the identity of all authors will be revealed to the public. \ 18 | The record of this submission (including all existing reviews and comments) \ 19 | will remain publicly accessible on OpenReview.\n\nIf you believe that this withdrawal was an error, please contact info@openreview.net as soon as possible." 20 | }; 21 | return or3client.or3request(or3client.mailUrl, author_mail, 'POST', token); 22 | }) 23 | .then(result => done()) 24 | .catch(error => done(error)); 25 | 26 | return true; 27 | }; 28 | -------------------------------------------------------------------------------- /venues/AKBC.ws/2019/Conference/python/post-submissions-stage-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Post-submission Stage 1 (Midnight Nov 16) 3 | 4 | - Author permission to edit papers is revoked. 5 | - AKBC 2019 homepage is updated to show anonymous submissions. 6 | 7 | ''' 8 | 9 | import openreview 10 | import akbc19 as conference_config 11 | import notes 12 | import groups 13 | import invitations 14 | import argparse 15 | 16 | if __name__ == '__main__': 17 | ## Argument handling 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base url") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | args = parser.parse_args() 23 | 24 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 25 | 26 | original_notes = openreview.tools.iterget_notes(client, invitation=conference_config.submission_inv.id) 27 | 28 | for original in original_notes: 29 | notes.freeze_and_post(client, original) 30 | print('freezing note {}'.format(original.id)) 31 | 32 | groups.update_homepage(client, '../webfield/homepagePostSubmission.js') 33 | -------------------------------------------------------------------------------- /venues/AKBC.ws/AKBC-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'AKBC.ws'; 2 | var HEADER = { 3 | title: 'Automated Knowledge Base Construction', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=AKBC.ws/2019/Conference', name: 'AKBC 2019 Conference Track' }, 8 | { url: '/group?id=AKBC.ws/2013', name: 'AKBC 2013 Workshop Track' } 9 | ]; 10 | 11 | Webfield.ui.setup('#group-container', GROUP_ID); 12 | 13 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 14 | 15 | Webfield.ui.linksList(VENUE_LINKS); 16 | 17 | OpenBanner.welcome(); 18 | -------------------------------------------------------------------------------- /venues/DBLP.org/python/config.py: -------------------------------------------------------------------------------- 1 | BASE = 'DBLP.org' 2 | GROUP = BASE 3 | INVITATION = BASE + '/-/upload' -------------------------------------------------------------------------------- /venues/Demo/2019/Workshop/DoubleBlind/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | conference.open_submissions(due_date = datetime.datetime(2019, 7, 1, 23, 59)) 30 | -------------------------------------------------------------------------------- /venues/ECCV2016.org/BNMW/eccv_add_verdictInvitations.js: -------------------------------------------------------------------------------- 1 | var or3client = require('../../or3/or3client'); 2 | var fs = require('fs'); 3 | var _ = require('lodash'); 4 | 5 | var grpUrl = 'http://localhost:3000/groups'; 6 | var loginUrl = 'http://localhost:3000/login'; 7 | var regUrl = 'http://localhost:3000/register'; 8 | var inviteUrl = 'http://localhost:3000/invitations'; 9 | var mailUrl = 'http://localhost:3000/mail'; 10 | var notesUrl = 'http://localhost:3000/notes'; 11 | 12 | var headers = { 'User-Agent': 'test-create-script' }; //what are these? 13 | 14 | var rootUser = { 15 | id:'OpenReview.net', 16 | password:'' 17 | } 18 | 19 | or3client.getUserTokenP(rootUser).then(function(token){ 20 | or3client.or3request(notesUrl+'?invitation=eccv.org/2016/workshop/-/submission', {}, 'GET', token) 21 | .then( function(result){ 22 | console.log(result); 23 | return or3client.or3request(inviteUrl, or3client.createVerdictInvitation(result.notes[0].id, 'eccv.org/2016/workshop', ['~ECCV_Program_Chairs']), 'POST', token) 24 | }) 25 | .then(result=>console.log("finished:",result)) 26 | }); -------------------------------------------------------------------------------- /venues/ECCV2016.org/BNMW/process/commentProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 5 | 6 | var conference = or3client.prettyConferenceName(note); 7 | 8 | origNote.then(function(result){ 9 | var mail = { 10 | "groups": result.notes[0].content.authorids, 11 | "subject": "Comment on your submission to " + conference + ": \"" + note.content.title + "\".", 12 | "message": "Your submission to "+ conference +" has received a comment.\n\nTitle: "+note.content.title+"\n\nComment: "+note.content.comment+"\n\nTo view the comment, click here: "+baseUrl+"/forum?id=" + note.forum 13 | }; 14 | return or3client.or3request( or3client.mailUrl, mail, 'POST', token ); 15 | 16 | }) 17 | .then(result => done()) 18 | .catch(error => done(error)); 19 | 20 | return true; 21 | }; -------------------------------------------------------------------------------- /venues/ECCV2016.org/BNMW/process/reviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 4 | 5 | var conference = or3client.prettyConferenceName(note); 6 | 7 | origNote.then(function(result){ 8 | var mail = { 9 | "groups": result.notes[0].content.authorids, 10 | "subject": "Review of your submission to " + conference + ": \"" + note.content.title + "\".", 11 | "message": "Your submission to "+ conference +" has received a review.\n\nTitle: "+note.content.title+"\n\nReview: "+note.content.review+"\n\nTo view the review, click here: "+baseUrl+"/forum?id=" + note.forum 12 | }; 13 | return or3client.or3request( or3client.mailUrl, mail, 'POST', token ) 14 | 15 | }) 16 | .then(result => or3client.fulfillInvitation(invitation, note, token)) 17 | .then(result => done()) 18 | .catch(error => done(error)); 19 | 20 | return true; 21 | }; -------------------------------------------------------------------------------- /venues/ECCV2016.org/BNMW/python/setup-groups.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openreview/openreview-scripts/e2d3e360759a02243222b853d1a501fc6cd862a0/venues/ECCV2016.org/BNMW/python/setup-groups.py -------------------------------------------------------------------------------- /venues/ICLR.cc/2013/js/superuser-reset.js: -------------------------------------------------------------------------------- 1 | var counter = db.openreview_counters.byExample({'id':'ICLR.cc/2013/conference/-/submission'}).toArray()[0] 2 | db.openreview_counters.remove(counter._id) 3 | 4 | //also reset the counters for all the other invitations, not just submission 5 | 6 | var notes = db._query("FOR note IN openreview_notes FILTER CONTAINS(note.invitation, 'ICLR.cc/2013') RETURN note._id").toArray() 7 | for(i=0;i result.notes.filter(n => n.forum === n.id)[0]) 10 | .then(originalNote => originalNote.overwriting[0]) 11 | .then(overwritingId => { 12 | var reviewerMail = { 13 | "groups": ['ICLR.cc/2018/Conference/Paper' + number + '/Reviewers'], 14 | "subject": "Revision posted to a paper that you reviewed", 15 | "message": "A paper that you reviewed has been revised. \n\nTo view the paper, click here: " + baseUrl + "/forum?id=" + overwritingId + "\n\nYou can see the changes made at " + baseUrl + "/revisions?id=" + overwritingId 16 | }; 17 | return or3client.or3request(or3client.mailUrl, reviewerMail, 'POST', token) 18 | }) 19 | .then(result => done()) 20 | .catch(error => done(error)); 21 | return true; 22 | } 23 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Conference/process/metaReviewProcess.js: -------------------------------------------------------------------------------- 1 | //EDIT ME 2 | 3 | function(){ 4 | var or3client = lib.or3client; 5 | 6 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 7 | var list = note.invitation.replace(/_/g,' ').split('/'); 8 | list.splice(list.indexOf('-',1)); 9 | var conference = list.join(' '); 10 | 11 | 12 | var programchairs = ['ICLR.cc/2018/Conference/Program_Chairs']; 13 | 14 | origNote.then(function(result){ 15 | var forum = result.notes[0]; 16 | 17 | var pc_mail = { 18 | "groups": programchairs, 19 | "subject": "Meta-review by area chair posted: "+ "\"" + forum.content.title + "\".", 20 | "message": "A paper submission to "+ conference +" has received a meta-review by an area chair.\n\nTitle: "+note.content.title+"\n\nMeta-review: "+note.content.metareview+"\n\nTo view the meta-review, click here: "+baseUrl+"/forum?id=" + note.forum 21 | }; 22 | 23 | return or3client.or3request( or3client.mailUrl, pc_mail, 'POST', token ); 24 | }) 25 | .then(or3client.addInvitationNoninvitee(note.invitation, note.signatures[0],token)) 26 | .then(result => done()) 27 | .catch(error=>done(error)); 28 | 29 | return true; 30 | }; 31 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Conference/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | //EDIT ME 2 | 3 | function(){ 4 | var or3client = lib.or3client; 5 | 6 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 7 | var list = note.invitation.replace(/_/g,' ').split('/'); 8 | list.splice(list.indexOf('-',1)); 9 | var conference = list.join(' '); 10 | 11 | origNote.then(function(result) { 12 | var forum = result.notes[0]; 13 | var note_number = forum.number; 14 | 15 | var reviewers = ['ICLR.cc/2018/Conference/Paper' + note_number + '/Reviewers']; 16 | var areachairs = ['ICLR.cc/2018/Conference/Paper' + note_number + '/Area_Chair']; 17 | var authors = forum.content.authorids; 18 | 19 | var areachair_mail = { 20 | "groups": areachairs, 21 | "subject": "Review posted to your assigned paper: \"" + forum.content.title + "\"", 22 | "message": "A submission to " + conference + ", for which you are an official area chair, has received an official review. \n\nTitle: " + note.content.title + "\n\nComment: " + note.content.review + "\n\nTo view the review, click here: " + baseUrl + "/forum?id=" + note.forum 23 | }; 24 | var areachairMailP = or3client.or3request( or3client.mailUrl, areachair_mail, 'POST', token ); 25 | 26 | return areachairMailP; 27 | }) 28 | .then(result => or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token)) 29 | .then(result => done()) 30 | .catch(error => done(error)); 31 | return true; 32 | }; 33 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Conference/process/reviewRevisionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | 4 | var number = note.invitation.split('/')[5].split('Paper')[1]; 5 | 6 | var CONF = 'ICLR.cc/2018/Conference'; 7 | 8 | console.log('number: '+ number); 9 | 10 | var reviewerMail = { 11 | "groups": ['ICLR.cc/2018/Conference/Paper' + number + '/Authors'], 12 | "subject": "Revision posted to a review of your paper", 13 | "message": "A review of your paper has been revised. \n\nTo view the review, click here: " + baseUrl + "/forum?id=" + note.forum + "¬eId=" + note.id + "\n\nYou can see the changes made at " + baseUrl + "/revisions?id=" + note.id 14 | }; 15 | 16 | or3client.or3request(or3client.mailUrl, reviewerMail, 'POST', token) 17 | .then(result => done()) 18 | .catch(error => done(error)); 19 | return true; 20 | } 21 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Conference/process/withdrawProcess_delete.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | 4 | var CONF = 'ICLR.cc/2018/Conference'; 5 | var BLIND_INVITATION = CONF + '/-/Blind_Submission'; 6 | 7 | or3client.or3request(or3client.notesUrl + '?id=' + note.referent, {}, 'GET', token) 8 | .then(result => { 9 | if (result.notes.length > 0){ 10 | var blindedNote = result.notes[0]; 11 | 12 | var milliseconds = (new Date).getTime(); 13 | blindedNote.ddate = milliseconds 14 | return or3client.or3request(or3client.notesUrl, blindedNote, 'POST', token); 15 | } else { 16 | return Promise.reject('No notes with the id ' + note.referent + ' were found'); 17 | } 18 | }) 19 | .then(result => or3client.or3request(or3client.notesUrl + '?id=' + result.original, {}, 'GET', token)) 20 | .then(result => { 21 | if (result.notes.length > 0){ 22 | var originalNote = result.notes[0]; 23 | 24 | var milliseconds = (new Date).getTime(); 25 | originalNote.ddate = milliseconds; 26 | originalNote.signatures = [CONF]; 27 | return or3client.or3request(or3client.notesUrl, originalNote, 'POST', token); 28 | } else { 29 | return Promise.reject('No notes with the id ' + note.original + ' were found'); 30 | } 31 | }) 32 | .then(result => done()) 33 | .catch(error => done(error)); 34 | return true; 35 | } 36 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Conference/process/withdrawProcess_reveal.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | 4 | var CONF = 'ICLR.cc/2018/Conference'; 5 | var BLIND_INVITATION = CONF + '/-/Blind_Submission'; 6 | var WITHDRAWN_INVITATION = CONF + '/-/Withdrawn_Submission'; 7 | 8 | or3client.or3request(or3client.notesUrl + '?id=' + note.referent, {}, 'GET', token) 9 | .then(result => { 10 | if(result.notes.length > 0){ 11 | var blindedNote = result.notes[0]; 12 | 13 | var milliseconds = (new Date).getTime(); 14 | blindedNote.ddate = milliseconds 15 | return blindedNote; 16 | } else { 17 | return Promise.reject('No notes with the referent ' + note.referent + ' were found'); 18 | } 19 | }) 20 | .catch(error => done(error)) 21 | .then(blindedNote => or3client.or3request(or3client.notesUrl, blindedNote, 'POST', token)) 22 | .then(result => { 23 | console.log('Withdrawing note: ' + JSON.stringify(result)); 24 | var withdrawn_submission = { 25 | original: result.original, 26 | invitation: WITHDRAWN_INVITATION, 27 | forum: null, 28 | parent: null, 29 | signatures: [CONF], 30 | writers: [CONF], 31 | readers: ['everyone'], 32 | content: {} 33 | } 34 | return or3client.or3request(or3client.notesUrl, withdrawn_submission, 'POST', token); 35 | }) 36 | .then(result => done()) 37 | .catch(error => done(error)); 38 | return true; 39 | } 40 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Conference/python/refresh-bibtex.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 3 | Iterates through the list of ICLR 2018 submissions and updates the bibtex field 4 | based on the most recent version. 5 | 6 | ''' 7 | 8 | import argparse 9 | import openreview 10 | import config 11 | 12 | def get_bibtex(note): 13 | firstWord = note.content['title'].split(' ')[0].lower() 14 | 15 | return '''@unpublished{ 16 | anonymous2018''' + firstWord + ''', 17 | title={''' + note.content['title'] + '''}, 18 | author={Anonymous}, 19 | journal={International Conference on Learning Representations}, 20 | year={2018}, 21 | url={https://openreview.net/forum?id=''' + note.id + '''}, 22 | note={under review} 23 | }''' 24 | 25 | parser = argparse.ArgumentParser() 26 | parser.add_argument('--baseurl', help="base URL") 27 | parser.add_argument('--username') 28 | parser.add_argument('--password') 29 | args = parser.parse_args() 30 | 31 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 32 | 33 | submissions = client.get_notes(invitation=config.BLIND_SUBMISSION) 34 | 35 | for n in submissions: 36 | # a submission potentially has many references, but we want to change only 37 | # the "prime" reference, which has an ID equal to its referent. 38 | refs = client.get_references(referent=n.id) 39 | prime_ref = [x for x in refs if x.id == x.referent][0] 40 | 41 | prime_ref.content['_bibtex'] = get_bibtex(n) 42 | new_ref = client.post_note(prime_ref) 43 | print "updated {0}".format(new_ref.id) 44 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Conference/python/regen-paperauthor-groups.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import config 3 | import csv 4 | import argparse 5 | 6 | ## Handle the arguments 7 | parser = argparse.ArgumentParser() 8 | parser.add_argument('--baseurl', help="base URL") 9 | parser.add_argument('--username') 10 | parser.add_argument('--password') 11 | 12 | args = parser.parse_args() 13 | 14 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 15 | print client.baseurl 16 | 17 | # repair author groups 18 | submissions = client.get_notes(invitation=config.SUBMISSION) 19 | 20 | for note in submissions: 21 | 22 | papergroup_id = 'ICLR.cc/2018/Conference/Paper{0}'.format(note.number) 23 | papergroup_params = { 24 | 'signatures': [config.CONF], 25 | 'writers': [config.CONF], 26 | 'members': [], 27 | 'readers': [config.CONF], 28 | 'signatories': [] 29 | } 30 | new_papergroup = client.post_group(openreview.Group(papergroup_id, **papergroup_params)) 31 | 32 | authorgroup_id = 'ICLR.cc/2018/Conference/Paper{0}/Authors'.format(note.number) 33 | authorgroup_params = { 34 | 'signatures': [config.CONF, '~Super_User1'], 35 | 'writers': [config.CONF, '~Super_User1'], 36 | 'members': note.content['authorids'] + note.signatures, 37 | 'readers': [config.CONF, config.PROGRAM_CHAIRS, authorgroup_id], 38 | 'signatories': [authorgroup_id] 39 | } 40 | new_group = client.post_group(openreview.Group(authorgroup_id, **authorgroup_params)) 41 | print "posting new group ", new_group.id 42 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Conference/webfield/groupWebField.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'ICLR.cc/2018'; 2 | var HEADER = { 3 | title: 'International Conference on Learning Representations 2018', 4 | description: 'Welcome to OpenReview for ICLR 2018. Please select a track below' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=ICLR.cc/2018/Conference', name: 'ICLR 2018 Conference Track' }, 8 | ]; 9 | 10 | Webfield.ui.setup('#group-container', GROUP_ID); 11 | 12 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 13 | 14 | Webfield.ui.linksList(VENUE_LINKS); 15 | 16 | OpenBanner.welcome(); 17 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Workshop/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | //EDIT ME 2 | 3 | function(){ 4 | var or3client = lib.or3client; 5 | 6 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 7 | var list = note.invitation.replace(/_/g,' ').split('/'); 8 | list.splice(list.indexOf('-',1)); 9 | var conference = list.join(' '); 10 | 11 | or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token) 12 | .then(result => done()) 13 | .catch(error => done(error)); 14 | return true; 15 | }; 16 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Workshop/python/programchairs/assign-all-reviewers.py: -------------------------------------------------------------------------------- 1 | import importlib 2 | import openreview 3 | import argparse 4 | import csv 5 | assign = importlib.import_module('assign-reviewer').assign 6 | 7 | if __name__ == "__main__": 8 | 9 | ## Argument handling 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument('-f','--file', required=True) 12 | parser.add_argument('--baseurl', help="base url") 13 | parser.add_argument('--username') 14 | parser.add_argument('--password') 15 | 16 | args = parser.parse_args() 17 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 18 | print "connecting to ", client.baseurl 19 | 20 | failed_assignments = [] 21 | 22 | with open(args.file) as f: 23 | reader = csv.reader(f) 24 | reader.next() 25 | for row in reader: 26 | paper_number = row[0] 27 | email = row[1] 28 | status = assign(client, paper_number, reviewer_to_add=email) 29 | if status == False: 30 | failed_assignments.append((paper_number, email)) 31 | 32 | print "the following assignments were aborted: " 33 | for number, email in failed_assignments: 34 | print number, email 35 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/Workshop/python/programchairs/get-pdfs.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | 4 | submissions_response = requests.get('https://openreview.net/notes?invitation=ICLR.cc/2018/Workshop/-/Submission', params={}) 5 | 6 | if not os.path.exists('./pdfs'): 7 | os.makedirs('./pdfs') 8 | 9 | for n in submissions_response.json()['notes']: 10 | pdf_url = 'https://openreview.net{0}'.format(n['content']['pdf']) 11 | paper_id = n['number'] 12 | print "retrieving Paper{0} at {1}".format(paper_id, pdf_url) 13 | pdf_response = requests.get(pdf_url, stream=True) 14 | 15 | with open('./pdfs/Paper{0}.pdf'.format(paper_id), 'wb') as f: 16 | f.write(pdf_response.content) 17 | 18 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2018/iclr18-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'ICLR.cc/2018'; 2 | var HEADER = { 3 | title: 'International Conference on Learning Representations 2018', 4 | description: 'Welcome to OpenReview for ICLR 2018. Please select a track below.' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=ICLR.cc/2018/Conference', name: 'ICLR 2018 Conference Track' }, 8 | { url: '/group?id=ICLR.cc/2018/Workshop', name: 'ICLR 2018 Workshop Track' }, 9 | ]; 10 | 11 | Webfield.ui.setup('#group-container', GROUP_ID); 12 | 13 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 14 | 15 | Webfield.ui.linksList(VENUE_LINKS); 16 | 17 | OpenBanner.welcome(); 18 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/data/ac-match-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "areachairs-1", 3 | "weights": { 4 | "bid_score": 1.0, 5 | "tpms_score": 1.0 6 | }, 7 | "max_users": 1, 8 | "min_papers": 18, 9 | "max_papers": 25, 10 | "alternates": 5, 11 | "constraints": {}, 12 | "config_invitation": "ICLR.cc/2019/Conference/-/Assignment_Configuration", 13 | "paper_invitation": "ICLR.cc/2019/Conference/-/Blind_Submission", 14 | "metadata_invitation": "ICLR.cc/2019/Conference/-/Paper_Metadata", 15 | "assignment_invitation": "ICLR.cc/2019/Conference/-/Paper_Assignment", 16 | "match_group": "ICLR.cc/2019/Conference/Area_Chairs", 17 | "status": "complete", 18 | "custom_loads": {} 19 | } 20 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/data/iclr19-match-config-example.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "reviewers-1", 3 | "weights": { 4 | "bid_score": 1.0, 5 | "tpms_score": 1.0 6 | }, 7 | "max_users": 3, 8 | "max_papers": 4, 9 | "alternates": 5, 10 | "constraints": {}, 11 | "config_invitation": "ICLR.cc/2019/Conference/-/Assignment_Configuration", 12 | "paper_invitation": "ICLR.cc/2019/Conference/-/Blind_Submission", 13 | "metadata_invitation": "ICLR.cc/2019/Conference/-/Paper_Metadata", 14 | "assignment_invitation": "ICLR.cc/2019/Conference/-/Paper_Assignment", 15 | "match_group": "ICLR.cc/2019/Conference/Reviewers", 16 | "status": "complete" 17 | } 18 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/data/jr-reviewers-match-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "jr-reviewers-1", 3 | "weights": { 4 | "bid_score": 1.0, 5 | "tpms_score": 1.0 6 | }, 7 | "max_users": 2, 8 | "min_papers": 2, 9 | "max_papers": 5, 10 | "alternates": 5, 11 | "constraints": {}, 12 | "config_invitation": "ICLR.cc/2019/Conference/-/Assignment_Configuration", 13 | "paper_invitation": "ICLR.cc/2019/Conference/-/Blind_Submission", 14 | "metadata_invitation": "ICLR.cc/2019/Conference/-/Paper_Metadata", 15 | "assignment_invitation": "ICLR.cc/2019/Conference/-/Paper_Assignment", 16 | "match_group": "ICLR.cc/2019/Conference/Junior_Reviewers", 17 | "status": "complete", 18 | "custom_loads": { 19 | "~Kirthevasan_Kandasamy1": 2, 20 | "~Margarita_Kotti1": 2, 21 | "~Mark_Herbster1": 2, 22 | "~Rianne_van_den_Berg1": 2, 23 | "~Dragomir_Anguelov1": 2, 24 | "~Nicolò_Cesa-Bianchi1": 3, 25 | "~Ognjen_Rudovic1": 3, 26 | "~houssam_nassif1": 3, 27 | "~Alice_Zheng1": 3, 28 | "~Sageev_Oore1": 3 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/data/sr-reviewers-match-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "sr-reviewers-1", 3 | "weights": { 4 | "bid_score": 1.0, 5 | "tpms_score": 1.0 6 | }, 7 | "max_users": 1, 8 | "min_papers": 3, 9 | "max_papers": 5, 10 | "alternates": 5, 11 | "constraints": {}, 12 | "config_invitation": "ICLR.cc/2019/Conference/-/Assignment_Configuration", 13 | "paper_invitation": "ICLR.cc/2019/Conference/-/Blind_Submission", 14 | "metadata_invitation": "ICLR.cc/2019/Conference/-/Paper_Metadata", 15 | "assignment_invitation": "ICLR.cc/2019/Conference/-/Paper_Assignment", 16 | "match_group": "ICLR.cc/2019/Conference/Senior_Reviewers", 17 | "status": "complete", 18 | "custom_loads": { 19 | "~Margarita_Kotti1": 2, 20 | "~Mark_Herbster1": 2, 21 | "~Rianne_van_den_Berg1": 2, 22 | "~Dragomir_Anguelov1": 2, 23 | "~Nicolò_Cesa-Bianchi1": 3, 24 | "~Ognjen_Rudovic1": 3, 25 | "~houssam_nassif1": 3, 26 | "~Alice_Zheng1": 3, 27 | "~Sageev_Oore1": 3 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/process/metaReviewProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | var CONFERENCE_ID = 'ICLR.cc/2019/Conference'; 4 | var PROGRAM_CHAIRS_ID = CONFERENCE_ID + '/Program_Chairs'; 5 | var SHORT_PHRASE = 'ICLR 2019' 6 | 7 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 8 | 9 | origNote.then(function(result){ 10 | var forum = result.notes[0]; 11 | 12 | var pc_mail = { 13 | "groups": [PROGRAM_CHAIRS_ID]; 14 | "subject": "[" + SHORT_PHRASE + "] Meta-review by an area chair has been posted: " + "\"" + forum.content.title + "\".", 15 | "message": "A paper submission to " + SHORT_PHRASE + " has received a meta-review by an area chair.\n\nTitle: "+note.content.title+"\n\nMeta-review: "+note.content.metareview+"\n\nTo view the meta-review, click here: "+baseUrl+"/forum?id=" + note.forum + "¬eId=" + note.id 16 | }; 17 | 18 | return or3client.or3request( or3client.mailUrl, pc_mail, 'POST', token ); 19 | 20 | }) 21 | .then(result => done()) 22 | .catch(error => done(error)); 23 | 24 | return true; 25 | }; 26 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/process/registrationProcess.js: -------------------------------------------------------------------------------- 1 | function () { 2 | var or3client = lib.or3client; 3 | 4 | or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token) 5 | .then(result => done()) 6 | .catch(error => done(error)); 7 | return true; 8 | }; 9 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/process/submissionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | console.log('submission process'); 4 | 5 | var SHORT_PHRASE = 'ICLR 2019'; 6 | 7 | var authorMail = { 8 | groups: note.content.authorids, 9 | subject: 'Your submission to ' + SHORT_PHRASE + ' has been received: ' + note.content.title, 10 | message: 'Your submission to ' + SHORT_PHRASE + ' has been posted.\n\nTitle: ' + note.content.title + '\n\nAbstract: ' + note.content.abstract + '\n\nTo view your submission, click here: ' + baseUrl + '/forum?id=' + note.forum 11 | }; 12 | or3client.or3request(or3client.mailUrl, authorMail, 'POST', token) 13 | .then(result => done()) 14 | .catch(error => done(error)); 15 | return true; 16 | }; 17 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/process/withdrawProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | var CONFERENCE_ID = 'ICLR.cc/2019/Conference'; 5 | var SHORT_PHRASE = "ICLR 2019"; 6 | var PAPER_AUTHORS = CONFERENCE_ID + '/Paper' + note.number + '/Authors'; 7 | 8 | var forumNoteP = or3client.or3request(or3client.notesUrl + '?id=' + note.forum, {}, 'GET', token); 9 | 10 | forumNoteP.then(function(result) { 11 | var forumNote = result.notes[0]; 12 | author_mail = { 13 | "groups": forumNote.content.authorids, 14 | "subject": "Your submission to " + SHORT_PHRASE + " has been withdrawn", 15 | "message": "Your submission, \""+ forumNote.content.title +"\", has been withdrawn by one of the authors. \ 16 | To view your withdrawn submission, click here: " + baseUrl + "/forum?id=" + forumNote.forum + "\n\n\ 17 | Per ICLR policy, the identity of all authors will be revealed to the public. \ 18 | The record of this submission (including all existing reviews and comments) \ 19 | will remain publicly accessible on OpenReview.\n\nIf you believe that this withdrawal was an error, please contact info@openreview.net as soon as possible." 20 | }; 21 | return or3client.or3request(or3client.mailUrl, author_mail, 'POST', token); 22 | }) 23 | .then(result => done()) 24 | .catch(error => done(error)); 25 | 26 | return true; 27 | }; 28 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/python/resubmit_papers.py: -------------------------------------------------------------------------------- 1 | ''' 2 | A throwaway script for testing ICLR 19 workflow. 3 | 4 | Gets ICLR 2018 papers and posts them as ICLR 2019 submissions. 5 | ''' 6 | 7 | import openreview 8 | import argparse 9 | import iclr19 10 | 11 | def resubmit(client, old_papers_inv, new_papers_inv): 12 | for paper in openreview.tools.iterget_notes(client, invitation=old_papers_inv): 13 | new_content = paper.content 14 | new_paper = openreview.Note(**{ 15 | 'invitation': new_papers_inv, 16 | 'writers': paper.signatures, 17 | 'readers': [iclr19.CONFERENCE_ID], 18 | 'signatures': paper.signatures, 19 | 'content': new_content 20 | }) 21 | 22 | try: 23 | p = client.post_note(new_paper) 24 | print("{} -> {}".format(paper.id, p.id)) 25 | except openreview.OpenReviewException as e: 26 | pass 27 | 28 | if __name__ == '__main__': 29 | parser = argparse.ArgumentParser() 30 | parser.add_argument('--baseurl', help="openreview base URL") 31 | parser.add_argument('--username') 32 | parser.add_argument('--password') 33 | 34 | args = parser.parse_args() 35 | 36 | ## Initialize the client library with username and password 37 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 38 | print("connecting to", client.baseurl) 39 | 40 | print('posting ICLR 18 submissions to ICLR 19') 41 | resubmit(client, 'ICLR.cc/2018/Conference/-/Submission', iclr19.SUBMISSION_ID) 42 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Conference/python/tpms-get-pdfs.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import requests 3 | 4 | 5 | ''' 6 | Modify the out_dir variable 7 | ''' 8 | out_dir = '../data/iclr19_pdfs' 9 | 10 | invitation_id = 'ICLR.cc/2019/Conference/-/Blind_Submission' 11 | 12 | limit = 1000 13 | offset = 0 14 | done = False 15 | 16 | while not done: 17 | submissions_response = requests.get( 18 | 'https://openreview.net/notes?invitation={}'.format(invitation_id), 19 | params={'limit': limit, 'offset': offset}) 20 | submissions = submissions_response.json()['notes'] 21 | 22 | if len(submissions) < limit: 23 | done = True 24 | else: 25 | offset += limit 26 | 27 | for n in submissions: 28 | pdf_url = 'https://openreview.net{0}'.format(n['content']['pdf']) 29 | paper_id = n['number'] 30 | print("retrieving paper{0} at {1}".format(paper_id, pdf_url)) 31 | pdf_response = requests.get(pdf_url, stream=True) 32 | with open('{}/paper{}.pdf'.format(out_dir, paper_id), 'wb') as f: 33 | f.write(pdf_response.content) 34 | 35 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/DeepGenStruct/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('ICLR.cc/2019/Workshop/DeepGenStruct') 11 | builder.set_conference_name('Deep Generative Models for Highly Structured Data') 12 | builder.set_conference_short_name('DeepGenStruct 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Deep Generative Models for Highly Structured Data ', 15 | 'subtitle': 'ICLR 2019 Workshop', 16 | 'deadline': 'Submission Deadline: March 27, 2019 9am EST', 17 | 'date': 'May 6 - May 9, 2019', 18 | 'website': 'https://deep-gen-struct.github.io/index.html', 19 | 'location': 'New Orleans, Louisiana, United States' 20 | }) 21 | builder.set_authorpage_header({ 22 | 'title': 'Author Console', 23 | 'instructions': '', 24 | 'schedule': 'To Be Defined' 25 | }) 26 | builder.set_double_blind(True) 27 | builder.set_override_homepage(True) 28 | return builder.get_result() 29 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/DeepGenStruct/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | # March 23, 2019 9am EST 30 | conference.open_submissions(due_date = datetime.datetime(2019, 3, 27, 14, 0)) 31 | invite = client.get_invitation(id=conference.get_submission_id()) 32 | blind = client.get_invitation(id=conference.get_id()+'/-/Blind_Submission') 33 | blind.duedate=invite.duedate 34 | blind.expdate=invite.expdate 35 | client.post_invitation(blind) -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/DeepGenStruct/python/post-submission-stage.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import config 3 | import argparse 4 | import datetime 5 | 6 | ## Argument handling 7 | parser = argparse.ArgumentParser() 8 | parser.add_argument('--baseurl', help="base url") 9 | parser.add_argument('--username') 10 | parser.add_argument('--password') 11 | args = parser.parse_args() 12 | 13 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 14 | conference = config.get_conference(client) 15 | 16 | print ("Closing submissions") 17 | conference.close_submissions() 18 | 19 | print ("Create blind submissions") 20 | conference.create_blind_submissions() 21 | 22 | conference.set_authors() 23 | 24 | print('replacing members with IDs') 25 | reviewers_group = client.get_group(conference.get_reviewers_id()) 26 | openreview.tools.replace_members_with_ids(client, reviewers_group) 27 | 28 | # March 31st 11:59 pm EST 29 | conference.open_bids(due_date = datetime.datetime(2019, 4, 1, 4, 59)) -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/DeepGenStruct/python/review-assignment-stage.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import config 3 | import argparse 4 | 5 | ## Argument handling 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base url") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | conference = config.get_conference(client) 14 | 15 | print ("Set global committee members") 16 | conference.set_authors() 17 | conference.set_program_chairs(['pc@mail.com']) 18 | conference.set_reviewers(['pmandler@cs.umass.edu']) 19 | 20 | print ("Create some assignments") 21 | conference.set_assignment('mandler@cs.umass.edu', 1, is_area_chair = False) 22 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/DeepGenStruct/python/reviewing-stage.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import config 3 | import argparse 4 | import datetime 5 | 6 | ## Argument handling 7 | parser = argparse.ArgumentParser() 8 | parser.add_argument('--baseurl', help="base url") 9 | parser.add_argument('--username') 10 | parser.add_argument('--password') 11 | args = parser.parse_args() 12 | 13 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 14 | conference = config.get_conference(client) 15 | 16 | print("Open Comments") 17 | conference.open_comments(name = 'Official_Comment', public = False, anonymous = True) 18 | conference.open_comments(name = 'Public_Comment', public = True, anonymous = True) 19 | 20 | print("Open Reviews") 21 | conference.open_reviews(name = 'Official_Review', due_date = datetime.datetime(2019, 3, 16, 0, 0), public = False) 22 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/LLD/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('ICLR.cc/2019/Workshop/LLD') 11 | builder.set_conference_name('Learning from Limited Labeled Data') 12 | builder.set_conference_short_name('LLD 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Learning from Limited Labeled Data', 15 | 'subtitle': 'ICLR 2019 Workshop', 16 | 'deadline': 'Submission Deadline: March 24, 2019', 17 | 'date': 'May 6 - May 9, 2019', 18 | 'website': 'https://lld-workshop.github.io/', 19 | 'location': 'New Orleans, Louisiana, United States', 20 | 'instructions': ' '}) 21 | builder.set_double_blind(True) 22 | builder.set_override_homepage(True) 23 | builder.set_submission_public(True) 24 | return builder.get_result() 25 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/LLD/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | conference.open_submissions(due_date = datetime.datetime(2019, 3, 25, 0, 0)) 30 | conference.set_program_chairs(emails=[]) -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/LLD/python/post-submission-stage.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import config 3 | import argparse 4 | 5 | ## Argument handling 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base url") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | conference = config.get_conference(client) 14 | 15 | print ("Closing submissions") 16 | conference.close_submissions() 17 | 18 | print ("Create blind submissions") 19 | conference.create_blind_submissions() 20 | 21 | conference.set_authors() 22 | 23 | print('replacing members with IDs') 24 | reviewers_group = client.get_group(conference.get_reviewers_id()) 25 | openreview.tools.replace_members_with_ids(client, reviewers_group) -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/RML/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | conference.open_submissions(due_date = datetime.datetime(2019, 3, 6, 4, 59)) 30 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/RML/python/post-submission-stage.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import config 3 | import argparse 4 | 5 | ## Argument handling 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base url") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | conference = config.get_conference(client) 14 | 15 | print ("Closing submissions") 16 | conference.close_submissions() 17 | 18 | print ("Create blind submissions") 19 | conference.create_blind_submissions() 20 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2019/Workshop/drlStructPred/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | #conference.set_program_chairs(emails = [ 30 | #hidden emails 31 | #]) 32 | 33 | # March 22, 11:59pm AoE 34 | submission_inv = conference.open_submissions(due_date = datetime.datetime(2019, 3, 23, 11, 59)) 35 | submission_inv.reply['content']['authorids']['description']+=" Please provide real emails; identities will be anonymized." 36 | submission_inv.reply['content']['authors']['description']+=" Please provide real names; identities will be anonymized." 37 | submission_inv = client.post_invitation(submission_inv) 38 | -------------------------------------------------------------------------------- /venues/ICLR.cc/2020/Conference/python/assign-area-chair.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import argparse 3 | 4 | if __name__ == '__main__': 5 | ## Argument handling 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base url") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | 14 | conference = openreview.helpers.get_conference(client, 'Skli7GteaN') 15 | 16 | conference.set_assignment(user = '~Melisa_Bok1', number = 1, is_area_chair = True) -------------------------------------------------------------------------------- /venues/ICLR.cc/2020/Conference/python/assign-reviewer.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import argparse 3 | 4 | if __name__ == '__main__': 5 | ## Argument handling 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base url") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | 14 | conference = openreview.helpers.get_conference(client, 'Skli7GteaN') 15 | 16 | conference.set_assignment(user = 'reviewer_iclr2020@mail.com', number = 1, is_area_chair = False) -------------------------------------------------------------------------------- /venues/ICLR.cc/ICLR-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'ICLR.cc'; 2 | var HEADER = { 3 | title: 'International Conference on Learning Representations', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=ICLR.cc/2019/Conference', name: 'ICLR 2019 Conference Track' }, 8 | { url: '/group?id=ICLR.cc/2018/Conference', name: 'ICLR 2018 Conference Track' }, 9 | { url: '/group?id=ICLR.cc/2018/Workshop', name: 'ICLR 2018 Workshop Track' }, 10 | { url: '/group?id=ICLR.cc/2017/conference', name: 'ICLR 2017 Conference Track' }, 11 | { url: '/group?id=ICLR.cc/2017/workshop', name: 'ICLR 2017 Workshop Track' }, 12 | { url: '/group?id=ICLR.cc/2016/workshop', name: 'ICLR 2016 Workshop Track' }, 13 | { url: '/group?id=ICLR.cc/2014', name: 'ICLR 2014 Workshop Track' }, 14 | { url: '/group?id=ICLR.cc/2013', name: 'ICLR 2013 Conference Track' } 15 | ]; 16 | 17 | Webfield.ui.setup('#group-container', GROUP_ID); 18 | 19 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 20 | 21 | Webfield.ui.linksList(VENUE_LINKS); 22 | 23 | OpenBanner.welcome(); 24 | -------------------------------------------------------------------------------- /venues/ICML.cc/2017/MLAV/process/submissionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | 3 | var or3client = lib.or3client; 4 | 5 | //Send an email to the author of the submitted note, confirming its receipt 6 | var mail = { 7 | "groups": note.content.authorids, 8 | "subject": "Confirmation of your submission to ICML 2017 MLAV Workshop: \"" + note.content.title + "\".", 9 | "message": `Your submission to ICML 2017 Machine Learning for Autonomous Vehicles has been posted.\n\nTitle: `+note.content.title+`\n\nAbstract: `+note.content.abstract+`\n\nTo view the note, click here: `+baseUrl+`/forum?id=` + note.forum 10 | }; 11 | 12 | or3client.or3request(or3client.mailUrl, mail, 'POST', token) 13 | .then(result => done()) 14 | .catch(error => done(error)); 15 | 16 | return true; 17 | } 18 | -------------------------------------------------------------------------------- /venues/ICML.cc/2017/RML/process/submissionProcess.template: -------------------------------------------------------------------------------- 1 | function () { 2 | var or3client = lib.or3client; 3 | 4 | var CONFERENCEPHRASE = "the Reproducibility in Machine Learning Workshop"; 5 | 6 | var author_mail = { 7 | "groups": note.content.authorids, 8 | "subject": "Your submission to "+ CONFERENCEPHRASE +" has been received: \"" + note.content.title + "\"", 9 | "message": "Your submission to "+ CONFERENCEPHRASE + " has been posted.\n\nTitle: " + note.content.title + "\n\nAbstract: " + note.content.abstract + "\n\nTo view your submission, click here: " + baseUrl+"/forum?id=" + note.forum 10 | }; 11 | 12 | return or3client.or3request(or3client.mailUrl, author_mail, 'POST', token) 13 | .then(result => done()) 14 | .catch(error => done(error)); 15 | 16 | return true; 17 | }; 18 | -------------------------------------------------------------------------------- /venues/ICML.cc/2017/RML/python/create_revisions.py: -------------------------------------------------------------------------------- 1 | # import statements 2 | import openreview 3 | import config 4 | import argparse 5 | 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base url") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | print client.baseurl 14 | 15 | # setup variables 16 | submissions = client.get_notes(invitation = config.SUBMISSION) 17 | 18 | def revision_invitation(n): 19 | 20 | revision_reply = { 21 | 'content': config.submission_content, 22 | 'referent': n.id, 23 | 'forum': n.forum, 24 | 'readers': { 25 | 'description': 'The users who will be allowed to read the above content.', 26 | 'values': ['everyone'] 27 | }, 28 | 'signatures': { 29 | 'description': 'How your identity will be displayed with the above content.', 30 | 'values-regex': '~.*' 31 | }, 32 | 'writers': { 33 | 'values-regex': '~.*' 34 | } 35 | } 36 | 37 | return openreview.Invitation(config.CONF + '/-/Paper{0}/Add/Revision'.format(n.number), 38 | readers = ['everyone'], 39 | writers = [config.CONF], 40 | invitees = n.content['authorids'], 41 | signatures = [config.CONF], 42 | reply = revision_reply 43 | ) 44 | 45 | 46 | for n in submissions: 47 | inv = client.post_invitation(revision_invitation(n)) 48 | print inv.id 49 | -------------------------------------------------------------------------------- /venues/ICML.cc/2017/WHI/process/submissionProcess.template: -------------------------------------------------------------------------------- 1 | function () { 2 | var or3client = lib.or3client; 3 | 4 | var CONFERENCEPHRASE = "the Workshop on Human Interpretability in Machine Learning"; 5 | 6 | var author_mail = { 7 | "groups": note.content.authorids, 8 | "subject": "Your submission to "+ CONFERENCEPHRASE +" has been received: \"" + note.content.title + "\"", 9 | "message": "Your submission to "+ CONFERENCEPHRASE + " has been posted.\n\nTitle: " + note.content.title + "\n\nAbstract: " + note.content.abstract + "\n\nTo view your submission, click here: " + baseUrl+"/forum?id=" + note.forum 10 | }; 11 | 12 | return or3client.or3request(or3client.mailUrl, author_mail, 'POST', token) 13 | .then(result => done()) 14 | .catch(error => done(error)); 15 | 16 | return true; 17 | }; 18 | -------------------------------------------------------------------------------- /venues/ICML.cc/2018/ECA/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var SHORT_PHRASE = 'ICML ECA 2018'; 3 | var CONFERENCE_ID = 'ICML.cc/2018/ECA'; 4 | var or3client = lib.or3client; 5 | 6 | // send email to author of paper submission 7 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 8 | origNote.then(function(result) { 9 | var forum = result.notes[0]; 10 | var note_number = forum.number; 11 | 12 | var author_mail = { 13 | groups: forum.content.authorids, 14 | subject: 'Review of your submission to ' + SHORT_PHRASE + ': "' + forum.content.title + '"', 15 | message: 'Your submission to ' + SHORT_PHRASE + ' has received an official review.\n\nTitle: ' + note.content.title + '\n\nReview: ' + note.content.review + '\n\nTo view the review, click here: ' + baseUrl+'/forum?id=' + note.forum 16 | }; 17 | 18 | return or3client.or3request( or3client.mailUrl, author_mail, 'POST', token ); 19 | }) 20 | // do not allow reviewer to post another review for this paper 21 | .then(result => or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token)) 22 | .then(result => done()) 23 | .catch(error => done(error)); 24 | return true; 25 | }; 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /venues/ICML.cc/2018/ECA/python/update_homepage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os 4 | import argparse 5 | import openreview 6 | from openreview import tools 7 | from openreview import invitations 8 | from openreview import webfield 9 | import config 10 | 11 | """ 12 | OPTIONAL SCRIPT ARGUMENTS 13 | 14 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 15 | username - the email address of the logging in user 16 | password - the user's password 17 | """ 18 | 19 | parser = argparse.ArgumentParser() 20 | parser.add_argument('--baseurl', help="base URL") 21 | parser.add_argument('--username') 22 | parser.add_argument('--password') 23 | 24 | args = parser.parse_args() 25 | 26 | print config.CONFERENCE_ID 27 | 28 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 29 | print 'connecting to {0}'.format(client.baseurl) 30 | 31 | ''' 32 | Create the homepage and add it to the conference group. 33 | ''' 34 | 35 | homepage = webfield.Webfield( 36 | config.HOMEPAGE_TEMPLATE, 37 | group_id = config.CONFERENCE_ID, 38 | js_constants = config.JS_CONSTANTS, 39 | ) 40 | 41 | this_conference = client.get_group(config.CONFERENCE_ID) 42 | this_conference.web = homepage.render() 43 | this_conference = client.post_group(this_conference) 44 | print "adding webfield to", this_conference.id 45 | 46 | filename = config.HOMEPAGE_TEMPLATE.split('.template')[0]+'.js' 47 | f = open(filename, 'w') 48 | f.write(this_conference.web) 49 | f.close() 50 | -------------------------------------------------------------------------------- /venues/ICML.cc/2018/Workshop/NAMPI/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | // do not allow reviewer to post another review for this paper 5 | or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token) 6 | .then(result => done()) 7 | .catch(error => done(error)); 8 | return true; 9 | }; 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /venues/ICML.cc/2018/Workshop/NAMPI/python/setup.py: -------------------------------------------------------------------------------- 1 | 2 | # coding: utf-8 3 | 4 | # In[1]: 5 | 6 | 7 | import openreview 8 | from openreview import tools 9 | import config 10 | import functions 11 | 12 | client = openreview.Client() 13 | print client.baseurl 14 | 15 | 16 | # In[3]: 17 | 18 | 19 | ''' 20 | Post the reviewer groups. Warning! This will reset all members! 21 | 22 | TODO: make a function to post a group without overwriting members. 23 | ''' 24 | reviewers = client.post_group(config.reviewers) 25 | reviewers_invited = client.post_group(config.reviewers_invited) 26 | reviewers_declined = client.post_group(config.reviewers_declined) 27 | 28 | 29 | # In[4]: 30 | 31 | 32 | ''' 33 | Post the recruitment invitation. This can be done multiple times without consequence. 34 | ''' 35 | recruit_reviewers = client.post_invitation(config.recruit_reviewers) 36 | 37 | 38 | # In[5]: 39 | 40 | 41 | ''' 42 | Example of how to invite a reviewer. 43 | ''' 44 | 45 | functions.recruit_reviewer(client, 'michael.l.spector@gmail.com', 'Michael') 46 | 47 | -------------------------------------------------------------------------------- /venues/ICML.cc/2019/Conference/README.md: -------------------------------------------------------------------------------- 1 | # ICML 2019 Paper Matching 2 | 3 | ## Requested services: 4 | - Match Senior ACs to ACs 5 | - Match ACs to Papers 6 | 7 | ## Data Management 8 | - All data is provided to us through a [shared Google Sheet](https://docs.google.com/spreadsheets/d/1G3AFQyO7-dwNrIJOCc-GYL4QPwhT-QzKYIoY-Y-SMjI/edit#gid=1928338508) 9 | - Download each sheet and place them in a directory called `ICML.cc/2019/Conference/data/icml-sheets`. Give them the following names: `areachairs.csv`, `reviewer_quotas.csv`, `reviewers.csv`, `sac_ac_bids.csv`, and `sr_areachairs.csv`. 10 | - Run `parse_sheets.py` to process them into a format that is recognized by our scripts. 11 | 12 | ## Matching Setup 13 | - Run `init.py`. This builds the groups and invitations needed to do the match. This script can be run multiple times without negative consequences. 14 | 15 | ### Matching Sr. ACs and ACs 16 | - Run `sac_ac_match.py` to set up the system for matching Sr. ACs to Jr. ACs. 17 | - The script will post a Note that represents each Jr. AC, and then use the matching system as normal on the Sr. ACs and the Jr. AC "placeholder" papers. 18 | - Export the results by running `export_sac_match.py` 19 | -------------------------------------------------------------------------------- /venues/ICML.cc/2019/Conference/process/metaReviewProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | var CONFERENCE_ID = 'ICML.cc/2019/Conference'; 4 | var SHORT_PHRASE = 'ICML 2019' 5 | 6 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 7 | 8 | 9 | var programchairs = [CONFERENCE_ID]; 10 | 11 | origNote.then(function(result){ 12 | var forum = result.notes[0]; 13 | 14 | var pc_mail = { 15 | "groups": programchairs, 16 | "subject": "[" + SHORT_PHRASE + "] Meta-review by an area chair has been posted: " + "\"" + forum.content.title + "\".", 17 | "message": "A paper submission to " + SHORT_PHRASE + " has received a meta-review by an area chair.\n\nTitle: "+note.content.title+"\n\nMeta-review: "+note.content.metareview+"\n\nTo view the meta-review, click here: "+baseUrl+"/forum?id=" + note.forum + "¬eId=" + note.id 18 | }; 19 | 20 | return or3client.or3request( or3client.mailUrl, pc_mail, 'POST', token ); 21 | 22 | }) 23 | .then(or3client.addInvitationNoninvitee(note.invitation, note.signatures[0],token)) 24 | .then(result => done()) 25 | .catch(error => done(error)); 26 | 27 | return true; 28 | }; 29 | -------------------------------------------------------------------------------- /venues/ICML.cc/2019/Workshop/RL4RealLife/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('ICML.cc/2019/Workshop/RL4RealLife') 11 | builder.set_conference_name('Reinforcement Learning for Real Life') 12 | builder.set_conference_short_name('RL4RealLife 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Reinforcement Learning for Real Life', 15 | 'subtitle': 'An ICML Workshop', 16 | 'deadline': 'Submission Deadline: May 1, midnight GMT', 17 | 'date': 'June 14th, 2019', 18 | 'website': 'https://sites.google.com/view/RL4RealLife', 19 | 'location': 'Long Beach, CA, USA' 20 | }) 21 | builder.set_double_blind(False) 22 | builder.set_submission_public(True) 23 | #builder.set_override_homepage(True) 24 | return builder.get_result() 25 | -------------------------------------------------------------------------------- /venues/ICML.cc/2019/Workshop/RL4RealLife/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | # midnight GMT 5/1 30 | conference.open_submissions(due_date = datetime.datetime(2019, 5, 2, 0, 0), remove_fields = ['TL;DR']) 31 | 32 | conference.set_program_chairs(emails = []) -------------------------------------------------------------------------------- /venues/ICML.cc/ICML-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'ICML.cc'; 2 | var HEADER = { 3 | title: 'International Conference on Machine Learning', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=ICML.cc/2018/ECA', name: 'ICML 2018 ECA' }, 8 | { url: '/group?id=ICML.cc/2018/Workshop/NAMPI', name: 'ICML 2018 NAMPI' }, 9 | { url: '/group?id=ICML.cc/2018/RML', name: 'ICML 2018 RML' }, 10 | { type: 'divider' }, 11 | { url: '/group?id=ICML.cc/2017/MLAV', name: 'ICML 2017 MLAV' }, 12 | { url: '/group?id=ICML.cc/2017/RML', name: 'ICML 2017 RML' }, 13 | { url: '/group?id=ICML.cc/2017/WHI', name: 'ICML 2017 WHI' }, 14 | { type: 'divider' }, 15 | { url: '/group?id=ICML.cc/2013/Inferning', name: 'ICML 2013 Inferning' }, 16 | { url: '/group?id=ICML.cc/2013/PeerReview', name: 'ICML 2013 PeerReview' } 17 | ]; 18 | 19 | Webfield.ui.setup('#group-container', GROUP_ID); 20 | 21 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 22 | 23 | Webfield.ui.linksList(VENUE_LINKS); 24 | 25 | OpenBanner.welcome(); 26 | -------------------------------------------------------------------------------- /venues/MIDL.amsterdam/2018/Abstract/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var SHORT_PHRASE = 'MIDL 2018 Abstract'; 3 | var CONFERENCE_ID = 'MIDL.amsterdam/2018/Abstract'; 4 | var or3client = lib.or3client; 5 | 6 | // send email to author of paper submission 7 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 8 | origNote.then(function(result) { 9 | var forum = result.notes[0]; 10 | var note_number = forum.number; 11 | 12 | var author_mail = { 13 | groups: forum.content.authorids, 14 | subject: 'Review of your submission to ' + SHORT_PHRASE + ': "' + forum.content.title + '"', 15 | message: 'Your submission to ' + SHORT_PHRASE + ' has received an official review.\n\nTitle: ' + note.content.title + '\n\nReview: ' + note.content.review + '\n\nTo view the review, click here: ' + baseUrl+'/forum?id=' + note.forum 16 | }; 17 | 18 | var authorMailP = or3client.or3request( or3client.mailUrl, author_mail, 'POST', token ); 19 | 20 | return Promise.all([ 21 | authorMailP, 22 | ]); 23 | }) 24 | // do not allow reviewer to post another review for this paper 25 | .then(result => or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token)) 26 | .then(result => done()) 27 | .catch(error => done(error)); 28 | return true; 29 | }; 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /venues/MIDL.amsterdam/2018/Abstract/python/process-reviewer-assignments.py: -------------------------------------------------------------------------------- 1 | ''' 2 | processes the file "midl_assigned_reviews.csv", sent to us by Geert on April 16, 2018. 3 | 4 | This script reformats the information in the above file in a format that 5 | the assign-reviewers.py script can accept. 6 | ''' 7 | 8 | import csv 9 | new_rows = [] 10 | with open('../data/midl_abstracts_assigned_reviews.csv') as f: 11 | reader = csv.reader(f) 12 | reader.next() 13 | for row in reader: 14 | papernum = row[1] 15 | rev1 = row[6].lower() 16 | rev2 = row[7].lower() 17 | new_rows.append([rev1, papernum]) 18 | new_rows.append([rev2, papernum]) 19 | 20 | with open('../data/2018-04-19-midl-reviewer-assignments.csv', 'w') as f: 21 | writer = csv.writer(f) 22 | writer.writerows(new_rows) 23 | -------------------------------------------------------------------------------- /venues/MIDL.amsterdam/2018/Conference/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | // do not allow reviewer to post another review for this paper 5 | or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token) 6 | .then(result => done()) 7 | .catch(error => done(error)); 8 | return true; 9 | }; 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /venues/MIDL.amsterdam/2018/Conference/python/process-reviewer-assignments.py: -------------------------------------------------------------------------------- 1 | ''' 2 | processes the file "midl_assigned_reviews.csv", sent to us by Geert on April 16, 2018. 3 | 4 | This script reformats the information in the above file in a format that 5 | the assign-reviewers.py script can accept. 6 | ''' 7 | 8 | import csv 9 | new_rows = [] 10 | with open('../data/midl_assigned_reviews.csv') as f: 11 | reader = csv.reader(f) 12 | reader.next() 13 | for row in reader: 14 | papernum = row[3] 15 | rev1 = row[7].lower() 16 | rev2 = row[8].lower() 17 | rev3 = row[9].lower() 18 | new_rows.append([rev1, papernum]) 19 | new_rows.append([rev2, papernum]) 20 | new_rows.append([rev3, papernum]) 21 | 22 | with open('../data/2018-04-17-midl-reviewer-assignments.csv', 'w') as f: 23 | writer = csv.writer(f) 24 | writer.writerows(new_rows) 25 | -------------------------------------------------------------------------------- /venues/MIDL.amsterdam/2018/midl18-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'MIDL.amsterdam/2018'; 2 | var HEADER = { 3 | title: 'Medical Imaging with Deep Learning 2018', 4 | description: 'Welcome to OpenReview for MIDL 2018. Please select a track below.' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=MIDL.amsterdam/2018/Conference', name: 'MIDL 2018 Conference Track' }, 8 | { url: '/group?id=MIDL.amsterdam/2018/Abstract', name: 'MIDL 2018 Abstract Track' }, 9 | ]; 10 | 11 | Webfield.ui.setup('#group-container', GROUP_ID); 12 | 13 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 14 | 15 | Webfield.ui.linksList(VENUE_LINKS); 16 | 17 | OpenBanner.welcome(); 18 | -------------------------------------------------------------------------------- /venues/MIDL.io/2019/Conference/python/post-submission-stage-1.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os 4 | import argparse 5 | import datetime 6 | import openreview 7 | import config 8 | 9 | """ 10 | OPTIONAL SCRIPT ARGUMENTS 11 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 12 | username - the email address of the logging in user 13 | password - the user's password 14 | """ 15 | 16 | parser = argparse.ArgumentParser() 17 | parser.add_argument('--baseurl', help="base URL") 18 | parser.add_argument('--username') 19 | parser.add_argument('--password') 20 | 21 | args = parser.parse_args() 22 | 23 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 24 | print('connecting to {0}'.format(client.baseurl)) 25 | 26 | conference = config.get_conference(client) 27 | 28 | conference.close_submissions() 29 | 30 | -------------------------------------------------------------------------------- /venues/MIDL.io/2019/Conference/python/post-submission-stage-2.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os 4 | import argparse 5 | import datetime 6 | import openreview 7 | import config 8 | 9 | """ 10 | OPTIONAL SCRIPT ARGUMENTS 11 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 12 | username - the email address of the logging in user 13 | password - the user's password 14 | """ 15 | 16 | parser = argparse.ArgumentParser() 17 | parser.add_argument('--baseurl', help="base URL") 18 | parser.add_argument('--username') 19 | parser.add_argument('--password') 20 | 21 | args = parser.parse_args() 22 | 23 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 24 | print('connecting to {0}'.format(client.baseurl)) 25 | 26 | conference = config.get_conference(client) 27 | 28 | print('open comment invitations') 29 | conference.set_authors() 30 | conference.open_comments(name = 'Official_Comment', public = False, anonymous = True) 31 | 32 | print('replacing members with IDs') 33 | reviewers_group = client.get_group(conference.get_reviewers_id()) 34 | areachairs_group = client.get_group(conference.get_area_chairs_id()) 35 | openreview.tools.replace_members_with_ids(client, reviewers_group) 36 | openreview.tools.replace_members_with_ids(client, areachairs_group) 37 | -------------------------------------------------------------------------------- /venues/MIDL.io/2020/Conference/python/get-pdfs.py: -------------------------------------------------------------------------------- 1 | import os 2 | import openreview 3 | import argparse 4 | 5 | parser = argparse.ArgumentParser() 6 | parser.add_argument('--baseurl', help="base URL") 7 | parser.add_argument('--username') 8 | parser.add_argument('--password') 9 | args = parser.parse_args() 10 | 11 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 12 | print ('connecting to {0}'.format(client.baseurl)) 13 | 14 | submission_invitation = 'MIDL.io/2020/Conference/-/Blind_Submission' 15 | submissions = openreview.tools.iterget_notes(client, invitation=submission_invitation, details='original') 16 | 17 | if not os.path.exists('midl2020-pdfs'): 18 | os.makedirs('midl2020-pdfs') 19 | 20 | for submission in submissions: 21 | if 'pdf' in submission.details['original']['content']: 22 | pdf_url = '{0}{1}'.format(client.baseurl, submission.details['original']['content']['pdf']) 23 | paper_id = submission.number 24 | print ('retrieving Paper{0} at {1}'.format(paper_id, pdf_url)) 25 | with open('midl2020-pdfs/Paper{0}.pdf'.format(paper_id), 'wb') as f: 26 | f.write(client.get_pdf(submission.details['original']['id'])) 27 | else: 28 | print('Paper number {0} has no pdf'.format(submission.number)) -------------------------------------------------------------------------------- /venues/MIDL.io/midl-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'MIDL.io'; 2 | var HEADER = { 3 | title: 'Medical Imaging with Deep Learning', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=MIDL.io/2019/Conference/Full', name: 'MIDL 2019 Full Paper' }, 8 | { type: 'divider' }, 9 | { url: '/group?id=MIDL.amsterdam/2018/Conference', name: 'MIDL 2018 Conference Track' }, 10 | { url: '/group?id=MIDL.amsterdam/2018/Abstract', name: 'MIDL 2018 Abstract Track' }, 11 | ]; 12 | 13 | Webfield.ui.setup('#group-container', GROUP_ID); 14 | 15 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 16 | 17 | Webfield.ui.linksList(VENUE_LINKS); 18 | 19 | OpenBanner.welcome(); -------------------------------------------------------------------------------- /venues/ML_Reproducibility_Challenge/2020/process/reportProcess.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | CONFERENCE_ID = 'ML_Reproducibility_Challenge/2020' 3 | 4 | # send confirmation email 5 | msg = 'Your report submission to ML Reproducibility Challenge 2020 has been posted. \n\nTitle: {title}'.format( 6 | title=note.content['title']) 7 | client.send_mail("ML Reproducibility Challenge 2020 report received", note.content['authorids'], msg) 8 | 9 | authors = client.get_group(CONFERENCE_ID + '/Authors') 10 | authors.members.extend(note.content['authorids']) 11 | client.post_group(authors) 12 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2016/Deep_Learning_Symposium/process/commentProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | done(); 4 | return true; 5 | } -------------------------------------------------------------------------------- /venues/NIPS.cc/2016/NIPS-2016-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'NIPS.cc/2016'; 2 | var HEADER = { 3 | title: 'Neural Information Processing Systems 2016', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=NIPS.cc/2016/Deep_Learning_Symposium', name: 'NIPS 2016 Deep Learning Symposium' }, 8 | { url: '/group?id=NIPS.cc/2016/workshop/MLITS', name: 'NIPS 2016 MLITS Workshop' }, 9 | { url: '/group?id=NIPS.cc/2016/workshop/NAMPI', name: 'NIPS 2016 NAMPI Workshop' }, 10 | ]; 11 | 12 | Webfield.ui.setup('#group-container', GROUP_ID); 13 | 14 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 15 | 16 | Webfield.ui.linksList(VENUE_LINKS); 17 | 18 | OpenBanner.welcome(); 19 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2016/workshop/MLITS/process/commentProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 5 | 6 | var conference = or3client.prettyConferenceName(note); 7 | 8 | origNote.then(function(result){ 9 | var mail = { 10 | "groups": result.notes[0].content.authorids, 11 | "subject": "Comment on your submission to " + conference + ": \"" + note.content.title + "\".", 12 | "message": "Your submission to "+ conference +" has received a comment.\n\nTitle: "+note.content.title+"\n\nComment: "+note.content.comment+"\n\nTo view the comment, click here: "+baseUrl+"/forum?id=" + note.forum 13 | }; 14 | return or3client.or3request( or3client.mailUrl, mail, 'POST', token ); 15 | }) 16 | .then(result => done()) 17 | .catch(error => done(error)) 18 | 19 | return true; 20 | }; -------------------------------------------------------------------------------- /venues/NIPS.cc/2016/workshop/MLITS/process/reviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 4 | 5 | var conference = or3client.prettyConferenceName(note); 6 | 7 | origNote.then(function(result){ 8 | var mail = { 9 | "groups": result.notes[0].content.authorids, 10 | "subject": "Review of your submission to " + conference + ": \"" + note.content.title + "\".", 11 | "message": "Your submission to "+ conference +" has received a review.\n\nTitle: "+note.content.title+"\n\nReview: "+note.content.review+"\n\nTo view the review, click here: "+baseUrl+"/forum?id=" + note.forum 12 | }; 13 | return or3client.or3request( or3client.mailUrl, mail, 'POST', token ); 14 | }) 15 | .then(result => or3client.fulfillInvitation(invitation, note, token)) 16 | .then(result => done()) 17 | .catch(error => done(error)); 18 | 19 | return true; 20 | }; -------------------------------------------------------------------------------- /venues/NIPS.cc/2016/workshop/NAMPI/process/acceptanceProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | "use strict"; 3 | var or3client = lib.or3client; 4 | or3client.addInvitationNoninvitee(note.invitation, note.signatures[0],token) 5 | .then(result => done()) 6 | .catch(error => done(error)); 7 | return true; 8 | } -------------------------------------------------------------------------------- /venues/NIPS.cc/2016/workshop/NAMPI/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | "use strict"; 3 | var or3client = lib.or3client; 4 | 5 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 6 | 7 | var conference = or3client.getConference(note); 8 | 9 | origNote.then(function(result){ 10 | var authors = result.notes[0].content.authorids; 11 | 12 | var author_mail = { 13 | "groups": authors, 14 | "subject": "Review of your submission to " + conference + ": \"" + note.content.title + "\"", 15 | "message": "Your submission to "+ conference +" has received an official review.\n\nTitle: "+note.content.title+"\n\nReview: "+note.content.review+"\n\nTo view the review, click here: "+baseUrl+"/forum?id=" + note.forum 16 | }; 17 | 18 | var promises = [ 19 | or3client.or3request(or3client.mailUrl, author_mail, 'POST', token) 20 | ]; 21 | return Promise.all(promises); 22 | }) 23 | .then(or3client.addInvitationNoninvitee(note.invitation, note.signatures[0],token)) 24 | .then(result=>done()) 25 | .catch(error=>done(error)); 26 | 27 | return true; 28 | } -------------------------------------------------------------------------------- /venues/NIPS.cc/2016/workshop/NAMPI/process/openReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | "use strict"; 3 | var or3client = lib.or3client; 4 | 5 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 6 | 7 | var conference = or3client.getConference(note); 8 | 9 | origNote.then(function(result){ 10 | var authors = result.notes[0].content.authorids; 11 | 12 | var author_mail = { 13 | "groups": authors, 14 | "subject": "Review of your submission to " + conference + ": \"" + note.content.title + "\"", 15 | "message": "Your submission to "+ conference +" has received a public review.\n\nTitle: "+note.content.title+"\n\nReview: "+note.content.review+"\n\nTo view the review, click here: "+baseUrl+"/forum?id=" + note.forum 16 | }; 17 | 18 | var promises = [ 19 | or3client.or3request( or3client.mailUrl, author_mail, 'POST', token ) 20 | ]; 21 | return Promise.all(promises); 22 | }) 23 | .then(or3client.addInvitationNoninvitee(note.invitation, note.signatures[0],token)) 24 | .then(result=>done()) 25 | .catch(error=>done(error)); 26 | 27 | return true; 28 | } -------------------------------------------------------------------------------- /venues/NIPS.cc/2016/workshop/NAMPI/process/responseInvitationProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | "use strict"; 3 | var or3client = lib.or3client; 4 | var hashKey = or3client.createHash(note.content.email, "4813408173804203984"); 5 | if(hashKey == note.content.key) { 6 | if (note.content.response == 'Yes') { 7 | or3client.removeGroupMember(invitation.signatures[0]+'/reviewers-declined', note.content.email, token) 8 | .then(result => or3client.addGroupMember(invitation.signatures[0]+'/reviewers', note.content.email, token)) 9 | .then(result => done()) 10 | .catch(error => console.log(error)); 11 | } else if (note.content.response == 'No'){ 12 | or3client.removeGroupMember(invitation.signatures[0]+'/reviewers', note.content.email, token) 13 | .then(result=> or3client.addGroupMember(invitation.signatures[0] + '/reviewers-declined', note.content.email, token)) 14 | .then(result => done()) 15 | .catch(error => console.log(error)); 16 | } 17 | return true; 18 | } else { 19 | console.log('Invalid key', note.content.key); 20 | done(); 21 | return false; 22 | } 23 | } -------------------------------------------------------------------------------- /venues/NIPS.cc/2017/NIPS-2017-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'NIPS.cc/2017'; 2 | var HEADER = { 3 | title: 'Neural Information Processing Systems 2017', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=NIPS.cc/2017/Workshop/Autodiff', name: 'NIPS 2017 Autodiff Workshop' }, 8 | { url: '/group?id=NIPS.cc/2017/Workshop/MLITS', name: 'NIPS 2017 MLITS Workshop' }, 9 | ]; 10 | 11 | Webfield.ui.setup('#group-container', GROUP_ID); 12 | 13 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 14 | 15 | Webfield.ui.linksList(VENUE_LINKS); 16 | 17 | OpenBanner.welcome(); 18 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2017/Workshop/Autodiff/data/NIPS2017_autodiff.json: -------------------------------------------------------------------------------- 1 | { 2 | "conference_title": "NIPS 2017 Autodiff Workshop", 3 | "conference_subtitle": "The future of gradient-based machine learning software and techniques", 4 | "conference_location": "Long Beach, California", 5 | "conference_date": "December 9, 2017", 6 | "human_duedate": "October 14, 2017 at midnight UTC", 7 | "conference_phrase": "NIPS 2017 Autodiff Workshop", 8 | "submission_name": "", 9 | "duedate_input": "14/10/2017", 10 | "duetime_input": "19:59", 11 | "reviewduedate_input": "03/11/2017", 12 | "url": "https://autodiff-workshop.github.io/" 13 | } 14 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2017/Workshop/Autodiff/params.json: -------------------------------------------------------------------------------- 1 | { 2 | "conference": "NIPS.cc/2017/Workshop/Autodiff", 3 | "conference_title": "NIPS 2017 Autodiff Workshop", 4 | "conference_subtitle": "The future of gradient-based machine learning software and techniques", 5 | "submission_name": "Submission", 6 | "url": "https://autodiff-workshop.github.io/", 7 | "conference_phrase": "NIPS 2017 Autodiff Workshop", 8 | "reviewduedate_input": "10/11/2017", 9 | "duetime_input": "23:59", 10 | "human_duedate": "October 28, 2017 at midnight UTC", 11 | "conference_date": "December 9, 2017", 12 | "duedate_input": "28/10/2017", 13 | "conference_location": "Long Beach, California" 14 | } -------------------------------------------------------------------------------- /venues/NIPS.cc/2017/Workshop/MLITS/data/NIPS2017_MLITS.json: -------------------------------------------------------------------------------- 1 | { 2 | "conference_title": "NIPS 2017 MLITS Workshop", 3 | "conference_subtitle": "Machine Learning for Intelligent Transportation Systems", 4 | "conference_location": "Long Beach, California", 5 | "conference_date": "December 9, 2017", 6 | "human_duedate": "October 12, 2017 at midnight GMT", 7 | "conference_phrase": "NIPS 2017 MLITS Workshop", 8 | "submission_name": "", 9 | "duedate_input": "12/10/2017", 10 | "duetime_input": "19:59", 11 | "reviewduedate_input": "03/11/2017", 12 | "url": "https://nips.cc/Conferences/2017/Schedule?showEvent=8755" 13 | } 14 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2017/Workshop/MLITS/params.json: -------------------------------------------------------------------------------- 1 | { 2 | "conference": "NIPS.cc/2017/Workshop/MLITS", 3 | "conference_title": "NIPS 2017 MLITS Workshop", 4 | "conference_subtitle": "Machine Learning for Intelligent Transportation Systems", 5 | "submission_name": "Submission", 6 | "url": "https://nips.cc/Conferences/2017/Schedule?showEvent=8755", 7 | "conference_phrase": "NIPS 2017 MLITS Workshop", 8 | "reviewduedate_input": "03/11/2017", 9 | "duetime_input": "19:59", 10 | "human_duedate": "October 21, 2017 at midnight GMT", 11 | "conference_date": "December 9, 2017", 12 | "duedate_input": "21/10/2017", 13 | "conference_location": "Long Beach, California" 14 | } -------------------------------------------------------------------------------- /venues/NIPS.cc/2018/Workshop/CDNNRIA/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | 2 | function(){ 3 | var or3client = lib.or3client; 4 | 5 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 6 | var list = note.invitation.replace(/_/g,' ').split('/'); 7 | list.splice(list.indexOf('-',1)); 8 | var conference = list.join(' '); 9 | 10 | origNote.then(function(result) { 11 | var forum = result.notes[0]; 12 | var sendto = forum.content.authorids; 13 | sendto.push('NIPS.cc/2018/Workshop/CDNNRIA/Program_Chairs') 14 | 15 | var programchair_mail = { 16 | "groups": sendto, 17 | "subject": "Review posted to paper: \"" + forum.content.title + "\"", 18 | "message": "A submission to " + conference + ", has received an official review. \n\nTitle: " + note.content.title + "\n\nComment: " + note.content.review + "\n\nTo view the review, click here: " + baseUrl + "/forum?id=" + note.forum 19 | }; 20 | var programchairMailP = or3client.or3request( or3client.mailUrl, programchair_mail, 'POST', token ); 21 | 22 | return programchairMailP; 23 | }) 24 | .then(result => done()) 25 | .catch(error => done(error)); 26 | return true; 27 | }; 28 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2018/Workshop/IRASL/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | 2 | function(){ 3 | var or3client = lib.or3client; 4 | 5 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 6 | var list = note.invitation.replace(/_/g,' ').split('/'); 7 | list.splice(list.indexOf('-',1)); 8 | var conference = list.join(' '); 9 | 10 | origNote.then(function(result) { 11 | var forum = result.notes[0]; 12 | var sendto = forum.content.authorids; 13 | sendto.push('NIPS.cc/2018/Workshop/IRASL/Program_Chairs') 14 | 15 | var programchair_mail = { 16 | "groups": sendto, 17 | "subject": "Review posted to paper: \"" + forum.content.title + "\"", 18 | "message": "A submission to " + conference + ", has received an official review. \n\nTitle: " + note.content.title + "\n\nComment: " + note.content.review + "\n\nTo view the review, click here: " + baseUrl + "/forum?id=" + note.forum 19 | }; 20 | var programchairMailP = or3client.or3request( or3client.mailUrl, programchair_mail, 'POST', token ); 21 | 22 | return programchairMailP; 23 | }) 24 | .then(result => done()) 25 | .catch(error => done(error)); 26 | return true; 27 | }; 28 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2018/Workshop/MLITS/process/addRevisionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | 4 | var number = note.invitation.split('/')[4].split('Paper')[1]; 5 | 6 | var CONF = 'NIPS.cc/2018/Workshop/MLITS'; 7 | 8 | or3client.or3request(or3client.notesUrl + '?forum=' + note.forum, {}, 'GET', token) 9 | .then(result => result.notes.filter(n => n.forum === n.id)[0]) 10 | .then(originalNote => originalNote.overwriting[0]) 11 | .then(overwritingId => { 12 | var reviewerMail = { 13 | "groups": [CONF+'/Paper' + number + '/Reviewers'], 14 | "subject": "Revision posted to a paper that you reviewed", 15 | "message": "A paper that you reviewed has been revised. \n\nTo view the paper, click here: " + baseUrl + "/forum?id=" + overwritingId + "\n\nYou can see the changes made at " + baseUrl + "/revisions?id=" + overwritingId 16 | }; 17 | return or3client.or3request(or3client.mailUrl, reviewerMail, 'POST', token) 18 | }) 19 | .then(result => done()) 20 | .catch(error => done(error)); 21 | return true; 22 | } 23 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2018/Workshop/Spatiotemporal/process/addRevisionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | 4 | var number = note.invitation.split('/')[4].split('Paper')[1]; 5 | 6 | var CONF = 'NIPS.cc/2018/Workshop/Spatiotemporal'; 7 | 8 | or3client.or3request(or3client.notesUrl + '?forum=' + note.forum, {}, 'GET', token) 9 | .then(result => result.notes.filter(n => n.forum === n.id)[0]) 10 | .then(originalNote => originalNote.overwriting[0]) 11 | .then(overwritingId => { 12 | var reviewerMail = { 13 | "groups": [CONF+'/Paper' + number + '/Reviewers'], 14 | "subject": "Revision posted to a paper that you reviewed", 15 | "message": "A paper that you reviewed has been revised. \n\nTo view the paper, click here: " + baseUrl + "/forum?id=" + overwritingId + "\n\nYou can see the changes made at " + baseUrl + "/revisions?id=" + overwritingId 16 | }; 17 | return or3client.or3request(or3client.mailUrl, reviewerMail, 'POST', token) 18 | }) 19 | .then(result => done()) 20 | .catch(error => done(error)); 21 | return true; 22 | } 23 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2018/Workshop/Spatiotemporal/process/confidentialReviewProcess.js: -------------------------------------------------------------------------------- 1 | 2 | function(){ 3 | var or3client = lib.or3client; 4 | 5 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 6 | var list = note.invitation.replace(/_/g,' ').split('/'); 7 | list.splice(list.indexOf('-',1)); 8 | var conference = list.join(' '); 9 | 10 | origNote.then(function(result) { 11 | var forum = result.notes[0]; 12 | var prog_chair = ['NIPS.cc/2018/Workshop/Spatiotemporal/Program_Chairs']; 13 | 14 | var progchair_mail = { 15 | "groups": prog_chair, 16 | "subject": "Review posted to paper: \"" + forum.content.title + "\"", 17 | "message": "A submission to " + conference + ", has received a confidential review.\n\nRelevance to the workshop: " + note.content.relevance + '\n\nNovelty: ' + note.content.novelty + '\n\nPotential impact: ' + note.content.impact + '\n\nTo view the evaluation, click here: ' + baseUrl+'/forum?id=' + note.forum +'¬eId='+note.id 18 | }; 19 | var progchairMailP = or3client.or3request( or3client.mailUrl, progchair_mail, 'POST', token ); 20 | 21 | return progchairMailP; 22 | }) 23 | .then(result => done()) 24 | .catch(error => done(error)); 25 | return true; 26 | }; 27 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2018/Workshop/Spatiotemporal/process/overallEvaluationProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | var SHORT_PHRASE = 'NIPS 2018 Spatiotemporal Workshop'; 5 | 6 | var origNoteP = or3client.or3request(or3client.notesUrl + '?id=' + note.forum, {}, 'GET', token); 7 | var replytoNoteP = note.replyto ? or3client.or3request(or3client.notesUrl + '?id=' + note.replyto, {}, 'GET', token) : null; 8 | 9 | Promise.all([ 10 | origNoteP, 11 | replytoNoteP 12 | ]).then(function(result) { 13 | 14 | var origNote = result[0].notes[0]; 15 | var replytoNote = note.replyto ? result[1].notes[0] : null; 16 | var replytoNoteSignatures = replytoNote ? replytoNote.signatures : []; 17 | var author_mail = { 18 | groups: origNote.content.authorids, 19 | subject: 'Your submission to ' + SHORT_PHRASE + ' has received an evaluation', 20 | message: 'Your submission to ' + SHORT_PHRASE + ' has received an evaluation.\n\nEvaluation: ' + note.content.evaluation + '\n\nTo view the evaluation, click here: ' + baseUrl+'/forum?id=' + note.forum +'¬eId='+note.id 21 | }; 22 | 23 | return or3client.or3request(or3client.mailUrl, author_mail, 'POST', token); 24 | 25 | }) 26 | .then(result => done()) 27 | .catch(error => done(error)); 28 | 29 | return true; 30 | }; 31 | -------------------------------------------------------------------------------- /venues/NIPS.cc/2018/Workshop/Spatiotemporal/process/pcCommentProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | var SHORT_PHRASE = 'NIPS 2018 Spatiotemporal Workshop'; 5 | 6 | var origNoteP = or3client.or3request(or3client.notesUrl + '?id=' + note.forum, {}, 'GET', token); 7 | 8 | Promise.all([ 9 | origNoteP, 10 | ]).then(function(result) { 11 | 12 | var origNote = result[0].notes[0]; 13 | 14 | var author_mail = { 15 | groups: origNote.content.authorids, 16 | subject: 'Your submission to ' + SHORT_PHRASE + ' has received a comment', 17 | message: 'Your submission to ' + SHORT_PHRASE + ' has received a comment.\n\nComment: ' + note.content.comment + '\n\nTo view the comment, click here: ' + baseUrl+'/forum?id=' + note.forum +'¬eId='+note.id 18 | }; 19 | 20 | return or3client.or3request(or3client.mailUrl, author_mail, 'POST', token); 21 | }) 22 | .then(result => done()) 23 | .catch(error => done(error)); 24 | 25 | return true; 26 | }; 27 | -------------------------------------------------------------------------------- /venues/NIPS.cc/NIPS-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'NIPS.cc'; 2 | var HEADER = { 3 | title: 'Neural Information Processing Systems', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=NIPS.cc/2018/Workshop/Spatiotemporal', name: 'NIPS 2018 Spatiotemporal Workshop' }, 8 | { url: '/group?id=NIPS.cc/2018/Workshop/IRASL', name: 'NIPS 2018 IRASL Workshop' }, 9 | { url: '/group?id=NIPS.cc/2018/Workshop/MLITS', name: 'NIPS 2018 MLITS Workshop' }, 10 | { url: '/group?id=NIPS.cc/2018/Workshop/MLOSS', name: 'NIPS 2018 MLOSS Workshop' }, 11 | { type: 'divider' }, 12 | { url: '/group?id=NIPS.cc/2017/Workshop/Autodiff', name: 'NIPS 2017 Autodiff Workshop' }, 13 | { url: '/group?id=NIPS.cc/2017/Workshop/MLITS', name: 'NIPS 2017 MLITS Workshop' }, 14 | { type: 'divider' }, 15 | { url: '/group?id=NIPS.cc/2016/Deep_Learning_Symposium', name: 'NIPS 2016 Deep Learning Symposium' }, 16 | { url: '/group?id=NIPS.cc/2016/workshop/MLITS', name: 'NIPS 2016 MLITS Workshop' }, 17 | { url: '/group?id=NIPS.cc/2016/workshop/NAMPI', name: 'NIPS 2016 NAMPI Workshop' }, 18 | ]; 19 | 20 | Webfield.ui.setup('#group-container', GROUP_ID); 21 | 22 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 23 | 24 | Webfield.ui.linksList(VENUE_LINKS); 25 | 26 | OpenBanner.welcome(); 27 | -------------------------------------------------------------------------------- /venues/NeurIPS.cc/2021/Conference/python/README.md: -------------------------------------------------------------------------------- 1 | NeurIPS 2021 scripts -------------------------------------------------------------------------------- /venues/OpenReview.net/Anonymous_Preprint/process/addRevisionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | var CONF = 'OpenReview.net/Anonymous_Preprint'; 4 | 5 | // Don't do anything. 6 | 7 | done() 8 | return true; 9 | } 10 | -------------------------------------------------------------------------------- /venues/OpenReview.net/Anonymous_Preprint/process/revealProcess.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | # create new reference with only the updated bibtex 3 | import datetime 4 | 5 | # Get the blinded submission in order to reveal author info 6 | blind_note = client.get_note(id=note.forum) 7 | blind_note.content={'_bibtex': blind_note.content['_bibtex']} 8 | # Post blinded note w/o covering author info 9 | blind_note = client.post_note(blind_note) 10 | 11 | # then use author info to update bibtex 12 | first_word = blind_note.content['title'].split(' ')[0].lower() 13 | year = str(datetime.datetime.now().year) 14 | first_author = blind_note.content['authors'][0] 15 | last_name = first_author.split(' ')[-1].lower() 16 | 17 | bibtex_text = 'unpublished{\ 18 | \n' + last_name + year + first_word + ',\ 19 | \ntitle={' + blind_note.content['title'] + '},\ 20 | \nauthor={' + ', '.join(blind_note.content['authors']) + '},\ 21 | \njournal={OpenReview Preprint},\ 22 | \nyear={' + year + '},\ 23 | \nnote={preprint under review}\ 24 | \n}' 25 | 26 | print("Reveal process: "+bibtex_text) 27 | blind_note.content = {'_bibtex': bibtex_text} 28 | client.post_note(blind_note) 29 | -------------------------------------------------------------------------------- /venues/OpenReview.net/Anonymous_Preprint/process/revisionProcess.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | import datetime 3 | 4 | # update bibtex 5 | def getBibtex(note) : 6 | year = str(datetime.datetime.now().year) 7 | first_word = note.content['title'].split(' ')[0].lower() 8 | first_author = note.content['authors'][0] 9 | last_name = first_author.split(' ')[-1].lower() 10 | return '@unpublished{\ 11 | \n' + last_name + year + first_word + ',\ 12 | \ntitle={' + note.content['title'] + '},\ 13 | \nauthor={' + ','.join(note.content['authors']) + '},\ 14 | \njournal={OpenReview Preprint},\ 15 | \nyear={' + year + '},\ 16 | \nnote={anonymous preprint under review}\ 17 | \n}' 18 | 19 | notes = client.get_notes(original=note.forum) 20 | forum_note = None 21 | for note in notes: 22 | if note.invitation.endswith("Blind_Submission"): 23 | forum_note=note 24 | 25 | if forum_note: 26 | forum_content = { 27 | 'authors': forum_note.content['authors'], 28 | 'authorids': forum_note.content['authorids'], 29 | '_bibtex': getBibtex(forum_note) 30 | } 31 | forum_note.content = forum_content 32 | client.post_note(forum_note) 33 | 34 | else: 35 | raise openreview.OpenReviewException('Revision process: Blind submission not found for forum '+note.forum) -------------------------------------------------------------------------------- /venues/OpenReview.net/Support/commentProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | var CONFERENCE_ID = 'OpenReview.net/Support'; 5 | 6 | or3client.or3request(or3client.notesUrl + '?id=' + note.forum, {}, 'GET', token) 7 | .then(function(result) { 8 | 9 | var forumNote = result.notes[0]; 10 | 11 | var message = { 12 | groups: note.readers, 13 | ignoreGroups: [note.tauthor, CONFERENCE_ID], 14 | subject: 'Comment posted to your request for service: ' + forumNote.content.title, 15 | message: 'A comment was posted to your service request. \n\nComment title: ' + note.content.title + '\n\nComment: ' + note.content.comment + '\n\nTo view the comment, click here: ' + baseUrl + '/forum?id=' + note.forum + '¬eId=' + note.id 16 | }; 17 | 18 | var support_message = { 19 | groups: [CONFERENCE_ID], 20 | subject: 'Comment posted to a service request: ' + forumNote.content.title, 21 | message: 'A comment was posted to a service request. \n\nComment title: ' + note.content.title + '\n\nComment: ' + note.content.comment + '\n\nTo view the comment, click here: ' + baseUrl + '/forum?id=' + note.forum + '¬eId=' + note.id 22 | }; 23 | 24 | return or3client.or3request(or3client.mailUrl, message, 'POST', token) 25 | .then(result => or3client.or3request(or3client.mailUrl, support_message, 'POST', token)); 26 | }) 27 | .then(result => done()) 28 | .catch(error => done(error)); 29 | 30 | return true; 31 | }; 32 | -------------------------------------------------------------------------------- /venues/UAI/update-custom-edges.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import openreview 3 | from tqdm import tqdm 4 | 5 | 6 | """ 7 | OPTIONAL SCRIPT ARGUMENTS 8 | 9 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 10 | username - the email address of the logging in user 11 | password - the user's password 12 | 13 | """ 14 | parser = argparse.ArgumentParser() 15 | parser.add_argument('--baseurl', help="base URL") 16 | parser.add_argument('--username') 17 | parser.add_argument('--password') 18 | args = parser.parse_args() 19 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 20 | 21 | edges_a = list(openreview.tools.iterget_edges(client, invitation = 'auai.org/UAI/2022/Conference/Reviewers/-/Conflict', label = 'exp conflict paper(B) reviewer(A)')) 22 | edges_b = list(openreview.tools.iterget_edges(client, invitation = 'auai.org/UAI/2022/Conference/Reviewers/-/Conflict', label = 'exp conflict paper(A) reviewer(B)')) 23 | 24 | ac_id = 'auai.org/UAI/2022/Conference/Area_Chairs' 25 | confid = 'auai.org/UAI/2022/Conference' 26 | 27 | for edge in tqdm(edges_a): 28 | edge.readers = [edge.tail, ac_id, confid] 29 | client.post_edge(edge) 30 | for edge in tqdm(edges_b): 31 | edge.readers = [edge.tail, ac_id, confid] 32 | client.post_edge(edge) 33 | -------------------------------------------------------------------------------- /venues/aclweb.org/ACL/create_main_ethics_ac_reviewers.py: -------------------------------------------------------------------------------- 1 | # Just here for reference, removed them from reviewer_ac_groups because they shouldn't be created every time 2 | # Create Ethics AC group 3 | ethics = client.post_group(openreview.Group( 4 | id = 'aclweb.org/ACL/2022/Conference/Ethics_Chairs', 5 | signatures = [ 6 | 'aclweb.org/ACL/2022/Conference' 7 | ], 8 | signatories=[ 9 | 'aclweb.org/ACL/2022/Conference', 10 | 'aclweb.org/ACL/2022/Conference/Ethics_Chairs' 11 | ], 12 | readers = [ 13 | 'aclweb.org/ACL/2022/Conference', 14 | 'aclweb.org/ACL/2022/Conference/Ethics_Chairs' 15 | ], 16 | writers = [ 17 | 'aclweb.org/ACL/2022/Conference' 18 | ], 19 | members = [ 20 | 21 | ] 22 | )) 23 | # Create Ethics Reviewers Group 24 | ethics_reviewers = client.post_group(openreview.Group( 25 | id = f'aclweb.org/ACL/2022/Conference/Ethics_Reviewers', 26 | signatures = [ 27 | 'aclweb.org/ACL/2022/Conference' 28 | ], 29 | signatories=[ 30 | 'aclweb.org/ACL/2022/Conference' 31 | ], 32 | readers = [ 33 | 'aclweb.org/ACL/2022/Conference/Ethics_Chairs', 34 | 'aclweb.org/ACL/2022/Conference/Ethics_Reviewers', 35 | 'aclweb.org/ACL/2022/Conference' 36 | ], 37 | writers = [ 38 | 'aclweb.org/ACL/2022/Conference' 39 | ] 40 | )) -------------------------------------------------------------------------------- /venues/aclweb.org/ACL/decision_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | CONFERENCE_ID = 'aclweb.org/ACL/2022/Conference' 4 | CONFERENCE_SHORT_NAME = 'ACL 2022 Conference' 5 | #DESK_REJECTED_SUBMISSION_ID = 'aclweb.org/ACL/2022/Conference/-/Desk_Rejected_Submission' 6 | 7 | forum_note = client.get_note(note.forum) 8 | 9 | 10 | 11 | # Mail to the submission readers 12 | email_subject = '''{CONFERENCE_SHORT_NAME}: Decision posted to Paper #{paper_number} titled "{paper_title}" by program chairs'''.format( 13 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 14 | paper_number=forum_note.number, 15 | paper_title=forum_note.content['title'] 16 | 17 | ) 18 | email_body = f'A decision was posted to Paper #{forum_note.number} titled "{forum_note.content["title"]}"".\n\n Decision: {note.content["decision"]}.\n\nView it here: https://openreview.net/forum?id={forum_note.forum}¬eId={note.id}' 19 | 20 | 21 | 22 | recipients = note.readers 23 | client.post_message(subject=email_subject, recipients=recipients, message=email_body, ignoreRecipients=note.nonreaders) 24 | 25 | -------------------------------------------------------------------------------- /venues/aclweb.org/ACL/ethics_review_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | CONFERENCE_ID = 'aclweb.org/ACL/2022/Conference' 4 | CONFERENCE_SHORT_NAME = 'ACL 2022 Conference' 5 | 6 | 7 | forum_note = client.get_note(note.forum) 8 | 9 | # Mail to the submission readers 10 | email_subject = '''{CONFERENCE_SHORT_NAME}: Ethics Review Posted to Paper #{paper_number} titled "{paper_title}"'''.format( 11 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 12 | paper_number=forum_note.number, 13 | paper_title=forum_note.content['title'] 14 | ) 15 | email_body = f'An ethics review was posted to Paper #{forum_note.number} titled "{forum_note.content["title"]}":\n\nRecommendation: {note.content["recommendation"]}\n\nJustification: {note.content["ethics_review"]}' 16 | 17 | 18 | 19 | recipients = note.readers 20 | 21 | client.post_message(subject=email_subject, recipients=recipients, message=email_body, ignoreRecipients=note.nonreaders) 22 | -------------------------------------------------------------------------------- /venues/aclweb.org/ACL/ethics_reviewer_assignment_preprocess.py: -------------------------------------------------------------------------------- 1 | def process(client, edge, invitation): 2 | 3 | print(edge.id) 4 | 5 | if edge.ddate is None: 6 | 7 | ## Get the submission 8 | submission = client.get_note(id=edge.head) 9 | 10 | ## - Get profile 11 | user = edge.tail 12 | print(f'Get profile for {user}') 13 | user_profile=openreview.tools.get_profiles(client, [user], with_publications=True)[0] 14 | 15 | print(f'Check conflicts for {user_profile.id}') 16 | ## - Check conflicts 17 | authors = client.get_group(f'aclweb.org/ACL/2022/Conference/Paper{submission.number}/Authors') 18 | author_profiles = openreview.tools.get_profiles(client, authors.members, with_publications=True) 19 | conflicts=openreview.tools.get_conflicts(author_profiles, user_profile, policy = 'neurips', n_years=5) 20 | if conflicts: 21 | print('Conflicts detected', conflicts) 22 | raise openreview.OpenReviewException(f'Conflict detected for {user_profile.get_preferred_name(pretty=True)}') 23 | 24 | return edge 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /venues/aclweb.org/ACL/flagged_papers.py: -------------------------------------------------------------------------------- 1 | flagged_papers = [1320,948,868,463,1822,1656,1729,779,1654,1773,1812,1684,1801,1197,1713,1753,1296,857,1772,1076,14,1915,450,963,886,1657,1003,1479,854,1498,860,1187] 2 | -------------------------------------------------------------------------------- /venues/aclweb.org/ACL/suggested_decision_pre_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | 3 | if ('2 - possible accept to main conference' in note.content['suggested_decision'] or '3 - possible accept to findings' in note.content['suggested_decision']) and 'ranking' not in note.content: 4 | raise openreview.OpenReviewException('Please select a ranking for this paper.') -------------------------------------------------------------------------------- /venues/aclweb.org/ACL/suggested_decision_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | 4 | 5 | forum_note = client.get_note(note.forum) 6 | CONFERENCE_ID = 'aclweb.org/ACL/2022/Conference' 7 | CONFERENCE_SHORT_NAME = 'ACL 2022 Conference' 8 | 9 | 10 | email_subject = f'{CONFERENCE_SHORT_NAME}: A suggested decision has been posted to a paper in your area' 11 | email_body = f'A suggested decision has been posted to Paper {forum_note.number} in {CONFERENCE_SHORT_NAME} track {forum_note.content["track"]}. \n\nSuggested decision: {note.content["suggested_decision"]}\n\nView it here: https://openreview.net/forum?id={note.forum}¬eId={note.id}' 12 | client.post_message(subject=email_subject, recipients=note.readers, message=email_body, ignoreRecipients=note.nonreaders) 13 | -------------------------------------------------------------------------------- /venues/aclweb.org/ACL/withdraw-ACL-process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | CONFERENCE_ID = 'aclweb.org/ACL/2022/Conference' 4 | CONFERENCE_SHORT_NAME = 'ACL 2022 Conference' 5 | WITHDRAWN_SUBMISSION_ID = 'aclweb.org/ACL/2022/Conference/-/Withdrawn_Submission' 6 | 7 | forum_note = client.get_note(note.forum) 8 | forum_note.invitation = WITHDRAWN_SUBMISSION_ID 9 | forum_note.content = { 10 | 'authors': forum_note.content['authors'], 11 | 'authorids': forum_note.content['authorids'] 12 | } 13 | forum_note = client.post_note(forum_note) 14 | 15 | # Mail to the submission readers 16 | email_subject = '''{CONFERENCE_SHORT_NAME}: Paper #{paper_number} titled "{paper_title}" withdrawn by authors'''.format( 17 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 18 | paper_number=forum_note.number, 19 | paper_title=forum_note.content['title'] 20 | ) 21 | email_body = '''The {CONFERENCE_SHORT_NAME} paper "{paper_title_or_num}" has been withdrawn by the paper authors.'''.format( 22 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 23 | paper_title_or_num=forum_note.content.get('title', '#'+str(forum_note.number)) 24 | ) 25 | 26 | PAPER_AUTHORS_ID = f'aclweb.org/ACL/2022/Conference/Paper{forum_note.number}/Authors' 27 | 28 | recipients = note.readers 29 | recipients.append(PAPER_AUTHORS_ID) 30 | client.post_message(subject=email_subject, recipients=recipients, message=email_body, ignoreRecipients=note.nonreaders) 31 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2018/Preprint/process/addRevisionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | var CONF = 'aclweb.org/NAACL/2018/Preprint'; 4 | 5 | // Don't do anything. 6 | 7 | done() 8 | return true; 9 | } 10 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/migrated-submissions/commitmentPreProcess.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | 3 | paper_link = note.content['paper_link'] 4 | paper_forum = paper_link.split('=')[-1] 5 | 6 | try: 7 | arr_submission = client.get_note(paper_forum) 8 | except openreview.OpenReviewException as e: 9 | raise openreview.OpenReviewException('Provided paper link does not correspond to a submission in OpenReview') 10 | 11 | if ('aclweb.org/ACL/ARR/2021' not in arr_submission.invitation) and ('aclweb.org/ACL/ARR/2022' not in arr_submission.invitation): 12 | raise openreview.OpenReviewException('Provided paper link does not correspond to an ARR submission') 13 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/migrated-submissions/create_main_ethics_ac_reviewers.py: -------------------------------------------------------------------------------- 1 | # Just here for reference, removed them from reviewer_ac_groups because they shouldn't be created every time 2 | # Create Ethics AC group 3 | ethics = client.post_group(openreview.Group( 4 | id = 'aclweb.org/ACL/2022/Conference/Ethics_Chairs', 5 | signatures = [ 6 | 'aclweb.org/ACL/2022/Conference' 7 | ], 8 | signatories=[ 9 | 'aclweb.org/ACL/2022/Conference', 10 | 'aclweb.org/ACL/2022/Conference/Ethics_Chairs' 11 | ], 12 | readers = [ 13 | 'aclweb.org/ACL/2022/Conference', 14 | 'aclweb.org/ACL/2022/Conference/Ethics_Chairs' 15 | ], 16 | writers = [ 17 | 'aclweb.org/ACL/2022/Conference' 18 | ], 19 | members = [ 20 | 21 | ] 22 | )) 23 | # Create Ethics Reviewers Group 24 | ethics_reviewers = client.post_group(openreview.Group( 25 | id = f'aclweb.org/ACL/2022/Conference/Ethics_Reviewers', 26 | signatures = [ 27 | 'aclweb.org/ACL/2022/Conference' 28 | ], 29 | signatories=[ 30 | 'aclweb.org/ACL/2022/Conference' 31 | ], 32 | readers = [ 33 | 'aclweb.org/ACL/2022/Conference/Ethics_Chairs', 34 | 'aclweb.org/ACL/2022/Conference/Ethics_Reviewers', 35 | 'aclweb.org/ACL/2022/Conference' 36 | ], 37 | writers = [ 38 | 'aclweb.org/ACL/2022/Conference' 39 | ] 40 | )) -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/migrated-submissions/decision_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | CONFERENCE_ID = 'aclweb.org/NAACL/2022/Conference' 4 | CONFERENCE_SHORT_NAME = 'NAACL 2022 Conference' 5 | #DESK_REJECTED_SUBMISSION_ID = 'aclweb.org/ACL/2022/Conference/-/Desk_Rejected_Submission' 6 | 7 | forum_note = client.get_note(note.forum) 8 | 9 | 10 | 11 | # Mail to the submission readers 12 | email_subject = '''{CONFERENCE_SHORT_NAME}: Decision posted to Commitment #{paper_number} titled "{paper_title}" by program chairs'''.format( 13 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 14 | paper_number=forum_note.number, 15 | paper_title=forum_note.content['title'] 16 | 17 | ) 18 | email_body = f'A decision was posted to Commitment #{forum_note.number} titled "{forum_note.content["title"]}"".\n\n Decision: {note.content["decision"]}.\n\nView it here: https://openreview.net/forum?id={forum_note.forum}¬eId={note.id}' 19 | 20 | 21 | 22 | recipients = note.readers 23 | client.post_message(subject=email_subject, recipients=recipients, message=email_body, ignoreRecipients=note.nonreaders) 24 | 25 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/migrated-submissions/ethics_review_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | CONFERENCE_ID = 'aclweb.org/NAACL/2022/Conference' 4 | CONFERENCE_SHORT_NAME = 'NAACL 2022 Conference' 5 | 6 | 7 | forum_note = client.get_note(note.forum) 8 | 9 | # Mail to the submission readers 10 | email_subject = '''{CONFERENCE_SHORT_NAME}: Ethics Review Posted to Paper #{paper_number} titled "{paper_title}"'''.format( 11 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 12 | paper_number=forum_note.number, 13 | paper_title=forum_note.content['title'] 14 | ) 15 | email_body = f'An ethics review was posted to Paper #{forum_note.number} titled "{forum_note.content["title"]}":\n\nRecommendation: {note.content["recommendation"]}\n\nJustification: {note.content["ethics_review"]}' 16 | 17 | 18 | 19 | recipients = note.readers 20 | 21 | client.post_message(subject=email_subject, recipients=recipients, message=email_body, ignoreRecipients=note.nonreaders) 22 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/migrated-submissions/ethics_reviewer_assignment_preprocess.py: -------------------------------------------------------------------------------- 1 | def process(client, edge, invitation): 2 | 3 | print(edge.id) 4 | 5 | if edge.ddate is None: 6 | 7 | ## Get the submission 8 | submission = client.get_note(id=edge.head) 9 | 10 | ## - Get profile 11 | user = edge.tail 12 | print(f'Get profile for {user}') 13 | user_profile=openreview.tools.get_profiles(client, [user], with_publications=True)[0] 14 | 15 | print(f'Check conflicts for {user_profile.id}') 16 | ## - Check conflicts 17 | authors = client.get_group(f'aclweb.org/NAACL/2022/Conference/Commitment{submission.number}/Authors') 18 | author_profiles = openreview.tools.get_profiles(client, authors.members, with_publications=True) 19 | conflicts=openreview.tools.get_conflicts(author_profiles, user_profile, policy = 'neurips', n_years=5) 20 | if conflicts: 21 | print('Conflicts detected', conflicts) 22 | raise openreview.OpenReviewException(f'Conflict detected for {user_profile.get_preferred_name(pretty=True)}') 23 | 24 | return edge 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/migrated-submissions/flagged_papers.py: -------------------------------------------------------------------------------- 1 | flagged_papers = [426] -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/migrated-submissions/suggested_decision_pre_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | 3 | if ('2 - possible accept to main conference' in note.content['suggested_decision'] or '3 - possible accept to findings' in note.content['suggested_decision']) and 'ranking' not in note.content: 4 | raise openreview.OpenReviewException('Please select a ranking for this paper.') -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/migrated-submissions/suggested_decision_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | 4 | 5 | forum_note = client.get_note(note.forum) 6 | CONFERENCE_ID = 'aclweb.org/NAACL/2022/Conference' 7 | CONFERENCE_SHORT_NAME = 'NAACL 2022 Conference' 8 | 9 | 10 | email_subject = f'{CONFERENCE_SHORT_NAME}: A suggested decision has been posted to a paper in your area' 11 | email_body = f'A suggested decision has been posted to Paper {forum_note.number} in {CONFERENCE_SHORT_NAME} track {forum_note.content["track"]}. \n\nSuggested decision: {note.content["suggested_decision"]}\n\nView it here: https://openreview.net/forum?id={note.forum}¬eId={note.id}' 12 | client.post_message(subject=email_subject, recipients=note.readers, message=email_body, ignoreRecipients=note.nonreaders) 13 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/special-theme/ethics_review_process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | CONFERENCE_ID = 'aclweb.org/NAACL/2022/Conference' 4 | CONFERENCE_SHORT_NAME = 'NAACL 2022 Conference' 5 | 6 | 7 | forum_note = client.get_note(note.forum) 8 | 9 | # Mail to the submission readers 10 | email_subject = '''{CONFERENCE_SHORT_NAME}: Ethics Review Posted to Paper #{paper_number} titled "{paper_title}"'''.format( 11 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 12 | paper_number=forum_note.number, 13 | paper_title=forum_note.content['title'] 14 | ) 15 | email_body = f'An ethics review was posted to Paper #{forum_note.number} titled "{forum_note.content["title"]}":\n\nRecommendation: {note.content["recommendation"]}\n\nJustification: {note.content["ethics_review"]}' 16 | 17 | 18 | 19 | recipients = note.readers 20 | 21 | client.post_message(subject=email_subject, recipients=recipients, message=email_body, ignoreRecipients=note.nonreaders) 22 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/special-theme/ethics_reviewer_assignment_preprocess.py: -------------------------------------------------------------------------------- 1 | def process(client, edge, invitation): 2 | 3 | print(edge.id) 4 | 5 | if edge.ddate is None: 6 | 7 | ## Get the submission 8 | submission = client.get_note(id=edge.head) 9 | 10 | ## - Get profile 11 | user = edge.tail 12 | print(f'Get profile for {user}') 13 | user_profile=openreview.tools.get_profiles(client, [user], with_publications=True)[0] 14 | 15 | print(f'Check conflicts for {user_profile.id}') 16 | ## - Check conflicts 17 | authors = client.get_group(f'aclweb.org/NAACL/2022/Conference/Paper{submission.number}/Authors') 18 | author_profiles = openreview.tools.get_profiles(client, authors.members, with_publications=True) 19 | conflicts=openreview.tools.get_conflicts(author_profiles, user_profile, policy = 'neurips', n_years=5) 20 | if conflicts: 21 | print('Conflicts detected', conflicts) 22 | raise openreview.OpenReviewException(f'Conflict detected for {user_profile.get_preferred_name(pretty=True)}') 23 | 24 | return edge 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /venues/aclweb.org/NAACL/2022/special-theme/flagged_papers.py: -------------------------------------------------------------------------------- 1 | flagged_papers = [17,28,32,48,52,53,60,76,79,81,97] -------------------------------------------------------------------------------- /venues/aclweb.org/Workshops/camera_ready_process.py: -------------------------------------------------------------------------------- 1 | def process_update(client, note, invitation, existing_note): 2 | SHORT_PHRASE = '' 3 | AUTHOR_ID = '' 4 | 5 | 6 | action = 'posted' 7 | if existing_note: 8 | action = 'deleted' if note.ddate else 'updated' 9 | 10 | forum = client.get_note(note.forum) 11 | 12 | title = note.content.get('title', forum.content.get('title', '')) 13 | authorids = note.content.get('authorids', forum.content.get('authorids', [])) 14 | abstract = note.content.get('abstract', forum.content.get('abstract', '')) 15 | 16 | subject = '{} has received a new revision of your submission titled {}'.format(SHORT_PHRASE, title) 17 | message = '''Your new revision of the submission to {} has been {}. 18 | 19 | Title: {} 20 | 21 | Abstract: {} 22 | 23 | To view your submission, click here: https://openreview.net/forum?id={}'''.format(SHORT_PHRASE, action, title, abstract, forum.id) 24 | 25 | client.post_message(subject=subject, recipients=authorids, message=message) 26 | 27 | if note.content.get('authorids'): 28 | author_group = openreview.tools.get_group(client, AUTHOR_ID) 29 | if author_group: 30 | author_group.members = authorids 31 | client.post_group(author_group) 32 | 33 | 34 | -------------------------------------------------------------------------------- /venues/aclweb.org/Workshops/withdraw-ACL-process.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | from datetime import datetime 3 | CONFERENCE_SHORT_NAME = '' 4 | WITHDRAWN_SUBMISSION_ID = '' 5 | 6 | forum_note = client.get_note(note.forum) 7 | forum_note.invitation = WITHDRAWN_SUBMISSION_ID 8 | 9 | 10 | 11 | forum_note.content = { 12 | 'authors': forum_note.content['authors'], 13 | 'authorids': forum_note.content['authorids'] 14 | } 15 | forum_note = client.post_note(forum_note) 16 | 17 | 18 | # Mail to the submission readers 19 | email_subject = '''{CONFERENCE_SHORT_NAME}: Paper #{paper_number} titled "{paper_title}" withdrawn by authors'''.format( 20 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 21 | paper_number=forum_note.number, 22 | paper_title=forum_note.content['title'] 23 | ) 24 | email_body = '''The {CONFERENCE_SHORT_NAME} paper "{paper_title_or_num}" has been withdrawn by the paper authors.'''.format( 25 | CONFERENCE_SHORT_NAME=CONFERENCE_SHORT_NAME, 26 | paper_title_or_num=forum_note.content.get('title', '#'+str(forum_note.number)) 27 | ) 28 | 29 | PAPER_AUTHORS_ID = '' 30 | 31 | recipients = note.readers 32 | recipients.append(PAPER_AUTHORS_ID) 33 | client.post_message(subject=email_subject, recipients=recipients, message=email_body, ignoreRecipients=note.nonreaders) 34 | -------------------------------------------------------------------------------- /venues/adai.ai/DAI/2019/Conference/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os 4 | import argparse 5 | import datetime 6 | import openreview 7 | import config 8 | 9 | """ 10 | OPTIONAL SCRIPT ARGUMENTS 11 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 12 | username - the email address of the logging in user 13 | password - the user's password 14 | """ 15 | 16 | parser = argparse.ArgumentParser() 17 | parser.add_argument('--baseurl', help="base URL") 18 | parser.add_argument('--username') 19 | parser.add_argument('--password') 20 | 21 | args = parser.parse_args() 22 | 23 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 24 | print('connecting to {0}'.format(client.baseurl)) 25 | 26 | conference = config.get_conference(client) 27 | conference.set_program_chairs([ 28 | #hidden 29 | ]) 30 | conference.set_reviewers([ 31 | #hidden 32 | ]) 33 | 34 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2017/js/superuser-reset.js: -------------------------------------------------------------------------------- 1 | var counter = db.openreview_counters.byExample({'id':'UAI.org/2017/conference/-/submission'}).toArray()[0] 2 | db.openreview_counters.remove(counter._id) 3 | 4 | //also reset the counters for all the other invitations, not just submission 5 | 6 | var notes = db._query("FOR note IN openreview_notes FILTER CONTAINS(note.invitation, 'UAI.org/2017') RETURN note._id").toArray() 7 | for(i=0;i done()) 5 | .catch(error => done(error)); 6 | return true; 7 | }; -------------------------------------------------------------------------------- /venues/auai.org/UAI/2017/process/bidProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | or3client.addInvitationNoninvitee(note.invitation, note.signatures[0],token) 4 | .then(result => done()) 5 | .catch(error => done(error)); 6 | return true; 7 | }; 8 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2017/process/emptyProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | done(); 3 | return true; 4 | }; 5 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2017/process/verdictProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | return true; 4 | }; -------------------------------------------------------------------------------- /venues/auai.org/UAI/2017/python/assignment_utils.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | 3 | def single_assignment_valid(s): 4 | try: 5 | user, paper_number= s.split(',') 6 | 7 | try: 8 | int(paper_number) 9 | except ValueError: 10 | return False 11 | 12 | if not '@' in user and not '~' in user: 13 | return False 14 | 15 | return True 16 | except IndexError: 17 | return False 18 | 19 | def get_nonreaders(paper_number, client): 20 | # nonreaders are a list of all domain groups of the authors of the paper 21 | 22 | authors = client.get_group('auai.org/UAI/2017/Paper%s/Authors' % paper_number) 23 | conflicts = set() 24 | for author in authors.members: 25 | try: 26 | conflicts.update(get_user_domains(author, client)) 27 | 28 | except openreview.OpenReviewException: 29 | pass 30 | 31 | if 'gmail.com' in conflicts: conflicts.remove('gmail.com') 32 | 33 | return conflicts 34 | 35 | 36 | def get_user_domains(user, client): 37 | 38 | domains = set() 39 | members = client.get_groups(member = user) 40 | member_domains = [d.id for d in members if '@' in d.id] 41 | domains.update([p.split('@')[1] for p in member_domains]) 42 | 43 | profile = client.get_profile(user) 44 | domains.update([p.split('@')[1] for p in profile.content['emails']]) 45 | domains.update([p['institution']['domain'] for p in profile.content['history']]) 46 | 47 | return domains 48 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/README.md: -------------------------------------------------------------------------------- 1 | Before doing anything else, first ensure that the group auai.org/UAI/2018 already exists. It must be created by the OpenReview Super User. 2 | 3 | To set up the submission infrastructure: run /python/setup-submission.py 4 | 5 | To create the reviewer and area chair groups: 6 | - run /python/setup-pc-recruitment.py 7 | - run /python/setup-spc-recruitment.py 8 | 9 | Matching system: 10 | 11 | Before performing any match: make sure that all members of the "matching_group" are tilde IDs. This is important for the user interface to work properly. 12 | 13 | To set up the matching invitations/infrastructure: 14 | - run /python/setup-matching.py 15 | - run /python/setup-metadata.py 16 | 17 | To match reviewers and create assignments, run: 18 | - run /python/match-reviewers.py 19 | 20 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/js/fix-reviews.js: -------------------------------------------------------------------------------- 1 | var ids_to_fix = [ 2 | 'HJSDO-8iM', 3 | 'H1ibhvBsM', 4 | 'SJQjmBrif', 5 | 'SyOczBrsf', 6 | 'rkVKtGSjf', 7 | 'r10rnWriG', 8 | 'rJ746yrjG', 9 | 'B1sHmsEsz', 10 | 'SJNWlONsz', 11 | 'SJhWlWEjf', 12 | 'H1n1FxVsz', 13 | 'rkEs_eEif', 14 | 'B1FVul4sz', 15 | 'HkAkOeNjM', 16 | 'ByOYPlEiG', 17 | 'HJVC11VoM', 18 | 'Hy9GwpXsM', 19 | 'H1WwmDQsz', 20 | 'SkuM_xmsz', 21 | 'B1RFIqGiG', 22 | 'B1WJ2ZGsz', 23 | 'Hy_whnbsz', 24 | 'r1JLZvbjz', 25 | 'rkg4aZWif', 26 | 'SkRpFclsM', 27 | 'B1wncBgof', 28 | 'HycjnPhqM', 29 | 'BJTSLv39M', 30 | 'ByFDiE35M', 31 | 'SyKQi439G', 32 | 'ByvgjNn9M', 33 | 'BJA39V29z', 34 | 'BylL5V3cG', 35 | 'By2KfbnqG', 36 | 'Hyv9_Lo9M', 37 | 'S1PjQVicz' 38 | ]; 39 | 40 | for(i=0; iPC 10 | or3client.addGroupMember('auai.org/UAI/2018/Program_Committee', note.content.email, token) //MODIFIED_BY_YCN: SPC->PC 11 | .then(result => done()) 12 | .catch(error => done(error)); 13 | } else if (note.content.response == 'No'){ 14 | console.log("Invitation replied No") 15 | //if a user is in the reviewers group, remove them from that group and add them to the reviewers-declined group 16 | or3client.removeGroupMember('auai.org/UAI/2018/Program_Committee', note.content.email, token) //MODIFIED_BY_YCN: SPC->PC 17 | or3client.addGroupMember('auai.org/UAI/2018/Program_Committee/Declined', note.content.email, token) //MODIFIED_BY_YCN: SPC->PC 18 | .then(result => done()) 19 | .catch(error => done(error)); 20 | } else { 21 | done('Invalid response', note.content.response); 22 | } 23 | return true; 24 | } else { 25 | done('Invalid key', note.content.key); 26 | return false; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/process/recruitSPCProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | 3 | var or3client = lib.or3client; 4 | var hashKey = or3client.createHash(note.content.email, "2810398440804348173"); 5 | if(hashKey == note.content.key) { 6 | if (note.content.response == 'Yes') { 7 | console.log("Invitation replied Yes") 8 | //if a user is in the declined group, remove them from that group and add them to the reviewers group 9 | or3client.removeGroupMember('auai.org/UAI/2018/Senior_Program_Committee/Declined', note.content.email, token) 10 | or3client.addGroupMember('auai.org/UAI/2018/Senior_Program_Committee', note.content.email, token) 11 | .then(result => done()) 12 | .catch(error => done(error)); 13 | } else if (note.content.response == 'No'){ 14 | console.log("Invitation replied No") 15 | //if a user is in the reviewers group, remove them from that group and add them to the reviewers-declined group 16 | or3client.removeGroupMember('auai.org/UAI/2018/Senior_Program_Committee', note.content.email, token) 17 | or3client.addGroupMember('auai.org/UAI/2018/Senior_Program_Committee/Declined', note.content.email, token) 18 | .then(result => done()) 19 | .catch(error => done(error)); 20 | } else { 21 | done('Invalid response', note.content.response); 22 | } 23 | return true; 24 | } else { 25 | done('Invalid key', note.content.key); 26 | return false; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/process/registrationProcess.js: -------------------------------------------------------------------------------- 1 | function () { 2 | var or3client = lib.or3client; 3 | 4 | or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token) 5 | .then(result => done()) 6 | .catch(error => done(error)); 7 | return true; 8 | }; 9 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/python/assign-all-areachairs.py: -------------------------------------------------------------------------------- 1 | import importlib 2 | import openreview 3 | import argparse 4 | import csv 5 | 6 | if __name__ == "__main__": 7 | 8 | ## Argument handling 9 | parser = argparse.ArgumentParser() 10 | parser.add_argument('--baseurl', help="base url") 11 | parser.add_argument('--username') 12 | parser.add_argument('--password') 13 | 14 | args = parser.parse_args() 15 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 16 | print "connecting to ", client.baseurl 17 | 18 | assignments = client.get_notes(invitation='auai.org/UAI/2018/-/Paper_Assignment') 19 | ac_assignments = [a for a in assignments if a.content['label'] == 'areachairs'] 20 | papers = client.get_notes(invitation='auai.org/UAI/2018/-/Blind_Submission') 21 | papers_by_forum = {n.forum: n for n in papers} 22 | 23 | for assignment in ac_assignments: 24 | assignment_entries = assignment.content['assignedGroups'] 25 | 26 | paper = papers_by_forum[assignment.forum] 27 | 28 | for entry in assignment_entries: 29 | openreview.tools.assign(client, paper.number, 'auai.org/UAI/2018', 30 | parent_group_params = {}, 31 | reviewer_to_add = entry['userId'].encode('utf-8'), 32 | check_conflicts_invitation = None, 33 | parent_label = 'Area_Chairs', 34 | individual_label = 'Area_Chair') 35 | 36 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/python/fix-ofer-metadata.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | import openreview 4 | import argparse 5 | 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base URL") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | print 'connecting to {0}'.format(client.baseurl) 14 | 15 | 16 | metadata = client.get_notes(invitation='auai.org/UAI/2018/-/Paper_Metadata') 17 | for m in metadata: 18 | score_entries = m.content['groups']['auai.org/UAI/2018/Senior_Program_Committee'] 19 | ofer_entry = [s for s in score_entries if s['userId'] == '~Ofer_Meshi2'] 20 | if ofer_entry: 21 | for e in ofer_entry: 22 | e['userId'] = '~Ofer_Meshi1' 23 | client.post_note(m) 24 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/python/get-pdfs.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | import openreview 4 | import argparse 5 | 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base URL") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | print 'connecting to {0}'.format(client.baseurl) 14 | 15 | submission_invitation = 'auai.org/UAI/2018/-/Blind_Submission' 16 | submissions = client.get_notes(invitation=submission_invitation) 17 | 18 | if not os.path.exists('../pdfs'): 19 | os.makedirs('../pdfs') 20 | 21 | for n in submissions: 22 | pdf_url = '{0}{1}'.format(client.baseurl, n.content['pdf']) 23 | paper_id = n.number 24 | print "retrieving Paper{0} at {1}".format(paper_id, pdf_url) 25 | pdf_response = requests.get(pdf_url, stream=True) 26 | 27 | with open('../pdfs/Paper{0}.pdf'.format(paper_id), 'wb') as f: 28 | f.write(pdf_response.content) 29 | 30 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/python/reveal_decisions.py: -------------------------------------------------------------------------------- 1 | 2 | import argparse 3 | import openreview 4 | 5 | # Argument handling 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--username') 8 | parser.add_argument('--password') 9 | parser.add_argument('--baseurl', help="base URL") 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(username=args.username, password=args.password, baseurl=args.baseurl) 13 | print client.baseurl 14 | 15 | # pull authors off of non-readers for reviews 16 | groups = client.get_groups('auai.org/UAI/2018/Paper.*/Reviewers/Unsubmitted') 17 | for group in groups: 18 | paper_num = group.id.split('Paper')[-1].split('/')[0] 19 | authors = 'auai.org/UAI/2018/Paper'+paper_num+'/Authors' 20 | client.remove_members_from_group(group, [authors]) 21 | 22 | # add authors, area chairs, reviewers to final decision 23 | decisions = client.get_notes(invitation='auai.org/UAI/2018/-/Paper.*/Final_Decision') 24 | 25 | for note in decisions: 26 | paper_num = note.invitation.split('Paper')[-1].split('/')[0] 27 | authors = 'auai.org/UAI/2018/Paper{0}/Authors'.format(paper_num) 28 | reviewers = 'auai.org/UAI/2018/Paper{0}/Reviewers'.format(paper_num) 29 | acs = 'auai.org/UAI/2018/Paper{0}/Area_Chairs'.format(paper_num) 30 | note.readers.extend([authors, reviewers, acs]) 31 | client.post_note(note) -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/python/samples/add-spc.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | 3 | # initialize a Client 4 | admin_client = openreview.Client(username = 'uai2018admin', password = 'your_password', baseurl = 'https://openreview.net') 5 | 6 | # get the group representing the Senior Program Committee 7 | spc = admin_client.get_group('auai.org/UAI/2018/Senior_Program_Committee') 8 | print "Before : ", spc 9 | print "\n" 10 | 11 | # add a member to the spc group 12 | spc = admin_client.add_members_to_group(spc, ['~Michael_Spector1']) 13 | print "Adding ~Michael_Spector1: ", spc 14 | print "\n" 15 | 16 | # remove a member from the spc group 17 | spc = admin_client.remove_members_from_group(spc, ['~Michael_Spector1']) 18 | print "Removing ~Michael_Spector1: ", spc 19 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2018/python/samples/spc-recommendation-sample.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import argparse 3 | 4 | parser = argparse.ArgumentParser() 5 | parser.add_argument('--baseurl', help="base URL") 6 | parser.add_argument('--username') 7 | parser.add_argument('--password') 8 | args = parser.parse_args() 9 | 10 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 11 | print 'connecting to {0}'.format(client.baseurl) 12 | 13 | papers = client.get_notes(invitation='auai.org/UAI/2018/-/Submission') 14 | 15 | recommendations_by_forum = {} 16 | 17 | for p in papers: 18 | recs = client.get_tags(invitation='auai.org/UAI/2018/-/Paper{}/Recommend_Reviewer'.format(p.number)) 19 | 20 | ''' 21 | you may want to sort the recommendations by cdate. 22 | this will let you determine the order in which the SPC member entered their recommendation. 23 | (this is useful if, for example, you instructed the SPCs to enter recommendations in 24 | order of preference) 25 | ''' 26 | recommendations_by_forum[p.id] = sorted(recs, key=lambda x: x.cdate) 27 | 28 | # get an example recommendation by its paper forum ID: 29 | example_paper = papers[0] 30 | example_paper_recommendations = recommendations_by_forum[example_paper.id] 31 | 32 | # show that the recommendations are ordered 33 | # the "tag" field of a recommendation will contain the recommended reviewer's ID 34 | print "showing recommendations for [{}]: \"{}\"".format(example_paper.id, example_paper.content['title']) 35 | for i in example_paper_recommendations: 36 | print i.cdate, i.tag 37 | 38 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2019/Conference/README.md: -------------------------------------------------------------------------------- 1 | To set up the conference: run /python/init.py 2 | 3 | To create and invite the Senior Program Committee and Program Committee groups, provide the emails and first names in these files and run them: 4 | - /python/invite-spc.py 5 | - /python/invite-pc.py 6 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2019/Conference/python/enable-comments.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import openreview 3 | from openreview import invitations 4 | import datetime 5 | import os 6 | import config 7 | 8 | if __name__ == '__main__': 9 | ## Argument handling 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument('--baseurl', help="base url") 12 | parser.add_argument('--username') 13 | parser.add_argument('--password') 14 | args = parser.parse_args() 15 | 16 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 17 | conference = config.get_conference(client) 18 | 19 | conference.open_comments(anonymous=True) 20 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2019/Conference/python/get-pdfs.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | import openreview 4 | import argparse 5 | 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--baseurl', help="base URL") 8 | parser.add_argument('--username') 9 | parser.add_argument('--password') 10 | args = parser.parse_args() 11 | 12 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 13 | print ('connecting to {0}'.format(client.baseurl)) 14 | 15 | submission_invitation = 'auai.org/UAI/2019/Conference/-/Blind_Submission' 16 | submissions = openreview.tools.iterget_notes(client, invitation=submission_invitation) 17 | 18 | if not os.path.exists('uai2019-pdfs'): 19 | os.makedirs('uai2019-pdfs') 20 | 21 | for submission in submissions: 22 | pdf_url = '{0}{1}'.format(client.baseurl, submission.content['pdf']) 23 | paper_id = submission.number 24 | print ('retrieving Paper{0} at {1}'.format(paper_id, pdf_url)) 25 | with open('uai2019-pdfs/Paper{0}.pdf'.format(paper_id), 'wb') as f: 26 | f.write(client.get_pdf(submission.id)) 27 | -------------------------------------------------------------------------------- /venues/auai.org/UAI/2019/Conference/python/init.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import openreview 3 | from openreview import invitations 4 | import datetime 5 | import os 6 | import config 7 | 8 | if __name__ == '__main__': 9 | ## Argument handling 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument('--baseurl', help="base url") 12 | parser.add_argument('--username') 13 | parser.add_argument('--password') 14 | args = parser.parse_args() 15 | 16 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 17 | conference = config.get_conference(client) 18 | 19 | conference.set_program_chairs(emails = []) 20 | conference.set_reviewers(emails = []) 21 | conference.set_area_chairs(emails = []) 22 | 23 | conference.open_submissions(start_date = datetime.datetime(2019, 2, 15, 11, 59), due_date = datetime.datetime(2019, 3, 5, 11, 59), remove_fields = ['pdf'], additional_fields = { 24 | 'pdf': { 25 | 'description': 'Upload a PDF file that ends with .pdf', 26 | 'required': False, 27 | 'value-regex': 'upload' 28 | } 29 | }) 30 | -------------------------------------------------------------------------------- /venues/cv-foundation.org/BNWM-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'BNMW_Workshop'; 2 | var HEADER = { 3 | title: 'Brave New Motion Representations', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=cv-foundation.org/CVPR/2017/BNMW', name: 'CVPR 2017 BNMW' }, 8 | { url: '/group?id=ECCV2016.org/BNMW', name: 'ECCV 2018 BNMW' } 9 | ]; 10 | 11 | Webfield.ui.setup('#group-container', GROUP_ID); 12 | 13 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 14 | 15 | Webfield.ui.linksList(VENUE_LINKS); 16 | 17 | OpenBanner.welcome(); 18 | -------------------------------------------------------------------------------- /venues/cv-foundation.org/CVPR/2017/BNMW/process/cvprdata.js: -------------------------------------------------------------------------------- 1 | { 2 | 'ADMIN':'cvpr2017admin', 3 | 'BASE_URL':'CVPR.org', 4 | 'WORKSHOP':'BNMW', 5 | 'CONF_YEAR':'2017', 6 | 'CONFERENCE': 'CVPR.org/2017/BNMW', 7 | 'COCHAIRS':'CVPR.org/2017/BNMW/Program_Co-Chairs', 8 | 'REVIEWERS':'CVPR.org/2017/BNMW/Reviewers', 9 | 'CONF_TITLE':'CVPR 2017 BNMW', 10 | // Due date April 7, 2017 at 5:15pm (here) 11 | 'EIGHT_PG_DATE_DUE':new Date(2017, 4, 7, 17, 15), 12 | // Due date May 15, 2017 at 5:15pm (here) 13 | 'FOUR_PG_DATE_DUE':new Date(2017, 5, 15, 17, 15) 14 | } 15 | -------------------------------------------------------------------------------- /venues/cv-foundation.org/CVPR/2017/BNMW/python/cvprdata.py: -------------------------------------------------------------------------------- 1 | """ 2 | CVPR 2017 BNMW Conference constants 3 | """ 4 | import datetime 5 | import time 6 | 7 | ADMIN = "cvpr2017admin" 8 | CONFERENCE = 'cv-foundation.org/CVPR/2017/BNMW' 9 | COCHAIRS = CONFERENCE+"/Program_Co-Chairs" 10 | REVIEWERS = CONFERENCE+"/Reviewers" 11 | # Due date April 7, 2017 at 5:15pm (here) 12 | EIGHT_PG_DATE_DUE = datetime.datetime(2017, 4, 7, 17, 15) 13 | EIGHT_PG_TIMESTAMP_DUE = int(time.mktime(EIGHT_PG_DATE_DUE.timetuple()))*1000 14 | # Due date May 15, 2017 at 5:15pm (here) 15 | FOUR_PG_DATE_DUE = datetime.datetime(2017, 5, 15, 17, 15) 16 | FOUR_TIMESTAMP_DUE = int(time.mktime(FOUR_PG_DATE_DUE.timetuple()))*1000 17 | -------------------------------------------------------------------------------- /venues/cv-foundation.org/CVPR/2019/Conference/python/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openreview/openreview-scripts/e2d3e360759a02243222b853d1a501fc6cd862a0/venues/cv-foundation.org/CVPR/2019/Conference/python/__init__.py -------------------------------------------------------------------------------- /venues/cv-foundation.org/CVPR/2019/Conference/python/cvpr2019.py: -------------------------------------------------------------------------------- 1 | # Symbols 2 | YR = "2019" 3 | CONF_ID = "CVPR.cc/" + YR + "/Conference" 4 | PC_ID = CONF_ID + "/Program_Chairs" 5 | AC_ID = CONF_ID + "/Area_Chairs" 6 | REVIEWERS_ID = CONF_ID + "/Reviewers" 7 | SUBMISSION_ID = CONF_ID + "/-/Submission" 8 | INPUT_FILES_DIR = "/home/marshall/iesl/or/scripts/venues/cv-foundation.org/CVPR/2019/Conference/data/" 9 | # This one used to be called REVIEWER_METADATA_ID but I don't like the term "meta-data" for this stuff 10 | PAPER_REVIEWER_SCORE_ID = CONF_ID + "/-/Paper_Reviewer_Scores" 11 | CONFIG_ID = CONF_ID + "/-/Assignment_Configuration" 12 | ASSIGNMENT_ID = CONF_ID + "/-/Paper_Assignment" -------------------------------------------------------------------------------- /venues/cv-foundation.org/ECCV/2018/Conference/python/download-author-profiles.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import random 3 | import argparse 4 | import requests 5 | from collections import defaultdict 6 | import csv 7 | import os 8 | import pickle 9 | 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument('--baseurl', help="base URL") 12 | parser.add_argument('--username') 13 | parser.add_argument('--password') 14 | 15 | args = parser.parse_args() 16 | 17 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 18 | print 'connecting to {0}'.format(client.baseurl) 19 | 20 | papers = openreview.tools.get_all_notes(client, 'cv-foundation.org/ECCV/2018/Conference/-/Submission') 21 | profiles_by_email = {} 22 | 23 | for paper in papers: 24 | print paper.number 25 | authorids = [e.lower() for e in paper.content['authorids']] 26 | paper_profiles = client.get_profiles(authorids) 27 | profiles_by_email.update(paper_profiles) 28 | 29 | with open('../data/author-profiles.pkl', 'wb') as f: 30 | pickle.dump(profiles_by_email, f) 31 | 32 | 33 | -------------------------------------------------------------------------------- /venues/cv-foundation.org/ECCV/2018/Conference/python/setup-metadata-reviewers.py: -------------------------------------------------------------------------------- 1 | import openreview 2 | import openreview_matcher 3 | import random 4 | import argparse 5 | import requests 6 | from collections import defaultdict 7 | import csv 8 | import os 9 | import json 10 | import pickle 11 | 12 | parser = argparse.ArgumentParser() 13 | parser.add_argument('--baseurl', help="base URL") 14 | parser.add_argument('--username') 15 | parser.add_argument('--password') 16 | 17 | args = parser.parse_args() 18 | 19 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 20 | print 'connecting to {0}'.format(client.baseurl) 21 | 22 | print "getting conference objects...", 23 | metadata_invitation = client.get_invitation('cv-foundation.org/ECCV/2018/Conference/Reviewers/-/Paper_Metadata') 24 | papers = openreview.tools.get_all_notes(client, 'cv-foundation.org/ECCV/2018/Conference/-/Submission') 25 | reviewers = client.get_group('cv-foundation.org/ECCV/2018/Conference/Reviewers') 26 | 27 | print "loading score maps..." 28 | with open('../data/score-maps.pkl', 'rb') as f: 29 | maps = pickle.load(f) 30 | score_maps = maps['score_maps'] 31 | constraint_maps = maps['constraint_maps'] 32 | 33 | new_metadata_notes = openreview_matcher.metadata.generate_metadata_notes(client, 34 | papers = papers, 35 | metadata_invitation = metadata_invitation, 36 | match_group = reviewers, 37 | score_maps = score_maps, 38 | constraint_maps = constraint_maps 39 | ) 40 | 41 | for m in new_metadata_notes: 42 | new_m = client.post_note(m) 43 | print new_m.id 44 | -------------------------------------------------------------------------------- /venues/cv-foundation.org/ECCV/2018/Demo/run-demo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | python python/setup-demo.py 4 | python python/precreate-profiles.py 5 | python python/submit-papers.py 6 | config_id=$(python python/generate-metadata.py) 7 | python ~/projects/openreview/openreview-scripts/admin/match.py $config_id 8 | -------------------------------------------------------------------------------- /venues/eswc-conferences.org/ESWC/2019/Workshop/KGB/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | def get_conference(client): 6 | 7 | builder = openreview.conference.ConferenceBuilder(client) 8 | 9 | builder.set_conference_id('eswc-conferences.org/ESWC/2019/Workshop/KGB') 10 | builder.set_conference_name('Knowledge Graph Building Workshop') 11 | builder.set_conference_short_name('KGB 2019') 12 | builder.set_homepage_header({ 13 | 'title': 'Knowledge Graph Building Workshop', 14 | 'subtitle': 'Co-located with the Extended Semantic Web Conference 2019', 15 | 'deadline': 'Submission Deadline: 11th of March, 2019, 23:59 Hawaii time', 16 | 'date': '3 June 2019', 17 | 'website': 'http://kgb-workshop.org/', 18 | 'location': 'Portorož, Slovenia', 19 | 'instructions': ' ' 20 | }) 21 | builder.set_conference_submission_name('Submission') 22 | builder.set_submission_public(True) 23 | builder.set_override_homepage(True) 24 | 25 | return builder.get_result() 26 | 27 | 28 | -------------------------------------------------------------------------------- /venues/gamesec-conf.org/GameSec/2019/Conference/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os 4 | import argparse 5 | import datetime 6 | import openreview 7 | import config 8 | 9 | """ 10 | OPTIONAL SCRIPT ARGUMENTS 11 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 12 | username - the email address of the logging in user 13 | password - the user's password 14 | """ 15 | 16 | parser = argparse.ArgumentParser() 17 | parser.add_argument('--baseurl', help="base URL") 18 | parser.add_argument('--username') 19 | parser.add_argument('--password') 20 | 21 | args = parser.parse_args() 22 | 23 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 24 | print('connecting to {0}'.format(client.baseurl)) 25 | 26 | conference = config.get_conference(client) 27 | conference.set_program_chairs([ 28 | #hidden 29 | ]) 30 | conference.set_reviewers([ 31 | #hidden 32 | ]) 33 | 34 | # May 27, 2019, 2019 23:59 AoE 35 | conference.open_submissions(due_date = datetime.datetime(2019, 5, 28, 11, 59), remove_fields = ['TL;DR'], additional_fields = { 36 | 'archival': { 37 | 'description': 'Archival grants OpenReview permission to post the paper publicly', 38 | 'required': True, 39 | 'value-radio': [ 40 | 'Archival', 41 | 'Non-archival' 42 | ] 43 | } 44 | }) -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/HSDIP/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('icaps-conference.org/ICAPS/2019/Workshop/HSDIP') 11 | builder.set_conference_name('Heuristics and Search for Domain-independent Planning') 12 | builder.set_conference_short_name('ICAPS HSDIP 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Heuristics and Search for Domain-independent Planning', 15 | 'subtitle': 'ICAPS 2019 Workshop', 16 | 'deadline': 'Submission Deadline: March 17, 2019 midnight AoE', 17 | 'date': 'July 11-15, 2019', 18 | 'website': 'https://icaps19.icaps-conference.org/workshops/HSDIP/index.html', 19 | 'location': 'Berkeley, CA, USA' 20 | }) 21 | builder.set_double_blind(True) 22 | builder.set_submission_public(True) 23 | return builder.get_result() 24 | 25 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/HSDIP/python/init_conference.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | conference.open_submissions(due_date = datetime.datetime(2019, 3, 18, 12, 0)) 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/Hierarchical_Planning/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('icaps-conference.org/ICAPS/2019/Workshop/Hierarchical_Planning') 11 | builder.set_conference_name('Second ICAPS Workshop on Hierarchical Planning') 12 | builder.set_conference_short_name('ICAPS 2019 Workshop Hierarchical Planning') 13 | builder.set_homepage_header({ 14 | 'title': 'Second Workshop on Hierarchical Planning', 15 | 'subtitle': 'ICAPS 2019 Workshop', 16 | 'deadline': 'Submission Deadline: March 29, 2019 midnight AoE', 17 | 'date': 'July 11-15, 2019', 18 | 'website': 'https://icaps19.icaps-conference.org/workshops/Hierarchical-Planning/index.html', 19 | 'location': 'Berkeley, CA, USA' 20 | }) 21 | builder.set_double_blind(True) 22 | builder.set_override_homepage(True) 23 | return builder.get_result() 24 | 25 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/Hierarchical_Planning/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | # Appearance of March 29 midnight anywhere on earth 30 | invitation = conference.open_submissions(due_date = datetime.datetime(2019, 3, 30, 12, 0)) 31 | # while actually expiring 24 hours later 32 | invitation.expdate = tools.datetime_millis(datetime.datetime(2019, 3, 31, 12, 0)) 33 | client.post_invitation(invitation) 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/KEPS/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('icaps-conference.org/ICAPS/2019/Workshop/KEPS') 11 | builder.set_conference_name('Workshop on Knowledge Engineering for Planning and Scheduling') 12 | builder.set_conference_short_name('ICAPS KEPS 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Workshop on Knowledge Engineering for Planning and Scheduling', 15 | 'subtitle': 'ICAPS 2019 Workshop', 16 | 'deadline': 'Submission Deadline: April 15, 2019 (UTC-12)', 17 | 'date': 'July 11-15, 2019', 18 | 'website': 'https://icaps19.icaps-conference.org/workshops/KEPS/index.html', 19 | 'location': 'Berkeley, CA, USA' 20 | }) 21 | builder.set_double_blind(True) 22 | builder.set_submission_public(True) 23 | builder.set_override_homepage(True) 24 | return builder.get_result() 25 | 26 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/KEPS/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | conference.open_submissions(due_date = datetime.datetime(2019, 4, 16, 12, 0), additional_fields = { 30 | "author_identity_visibility": { 31 | "order": 4, 32 | "value-checkbox": "Reveal author identities to reviewers", 33 | "required": False 34 | } 35 | }) 36 | 37 | # doesn't seem to take the order information during init 38 | invite = client.get_invitation(id=conference.get_submission_id()) 39 | invite.reply['content']['author_identity_visibility']['order'] = 4 40 | print(invite.reply['content']) 41 | client.post_invitation(invite) 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/KEPS/python/post-submission-stage-1.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | 4 | import argparse 5 | import openreview 6 | from openreview import tools 7 | import config 8 | 9 | """ 10 | OPTIONAL SCRIPT ARGUMENTS 11 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 12 | username - the email address of the logging in user 13 | password - the user's password 14 | """ 15 | 16 | parser = argparse.ArgumentParser() 17 | parser.add_argument('--baseurl', help="base URL") 18 | parser.add_argument('--username') 19 | parser.add_argument('--password') 20 | 21 | args = parser.parse_args() 22 | 23 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 24 | print('connecting to {0}'.format(client.baseurl)) 25 | 26 | conference = config.get_conference(client) 27 | 28 | conference.close_submissions() 29 | conference.set_authors() 30 | 31 | print('replacing members with IDs') 32 | reviewers_group = client.get_group(conference.get_reviewers_id()) 33 | openreview.tools.replace_members_with_ids(client, reviewers_group) 34 | 35 | conference.create_blind_submissions() -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/SPARK/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('icaps-conference.org/ICAPS/2019/Workshop/SPARK') 11 | builder.set_conference_name('Scheduling and Planning Applications Workshop') 12 | builder.set_conference_short_name('SPARK 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Scheduling and Planning Applications Workshop', 15 | 'subtitle': 'ICAPS 2019 Workshop', 16 | 'deadline': 'Submission Deadline: April 5, 2019 23:59 GMT', 17 | 'date': 'July 11-15, 2019', 18 | 'website': 'https://icaps19.icaps-conference.org/workshops/SPARK/index.html', 19 | 'location': 'Berkeley, CA, USA' 20 | }) 21 | builder.set_double_blind(True) 22 | builder.set_submission_public(True) 23 | builder.set_override_homepage(True) 24 | return builder.get_result() 25 | 26 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/SPARK/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | conference.open_submissions(due_date = datetime.datetime(2019, 4, 5, 23, 59), additional_fields = { 30 | "author_identity_visibility": { 31 | "order": 4, 32 | "value-checkbox": "Reveal author identities to reviewers", 33 | "required": False 34 | } 35 | }) 36 | 37 | # doesn't seem to take the order information during init 38 | invite = client.get_invitation(id=conference.get_submission_id()) 39 | invite.reply['content']['author_identity_visibility']['order'] = 4 40 | print(invite.reply['content']) 41 | client.post_invitation(invite) 42 | 43 | conference.set_program_chairs(emails=[]) 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/VRDIP/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('icaps-conference.org/ICAPS/2019/Workshop/VRDIP') 11 | builder.set_conference_name('Planning the Future: Economics and Value-Rational') 12 | builder.set_conference_short_name('ICAPS Workshop 2019 VRDIP') 13 | builder.set_homepage_header({ 14 | 'title': 'Planning the Future: Economics and Value-Rational', 15 | 'subtitle': 'ICAPS 2019 Workshop', 16 | 'deadline': 'Submission Deadline: April 15, 2019', 17 | 'date': 'July 11, 2019', 18 | 'website': 'https://icaps19.icaps-conference.org/workshops/Planning-the-Future/index.html', 19 | 'location': 'Berkeley, CA, USA' 20 | }) 21 | builder.set_double_blind(True) 22 | builder.set_submission_public(True) 23 | return builder.get_result() 24 | 25 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/WIPC/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('icaps-conference.org/ICAPS/2019/Workshop/WIPC') 11 | builder.set_conference_name('Workshop on the International Planning Competition') 12 | builder.set_conference_short_name('ICAPS WIPC 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Workshop on the International Planning Competition', 15 | 'subtitle': 'ICAPS Workshop', 16 | 'deadline': 'Submission Deadline: April 12th, midnight AoE', 17 | 'date': 'July 11-12, 2019', 18 | 'website': 'https://icaps19.icaps-conference.org/workshops/WIPC/index.html', 19 | 'location': 'Berkeley, CA, USA' 20 | }) 21 | builder.set_double_blind(True) 22 | builder.set_override_homepage(True) 23 | 24 | return builder.get_result() 25 | 26 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/WIPC/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | conference.set_program_chairs([ 30 | #hidden 31 | ]) 32 | conference.set_reviewers([ 33 | #hideen 34 | ]) 35 | conference.open_submissions(due_date = datetime.datetime(2019, 4, 13, 12, 0), remove_fields = ['TL;DR'], additional_fields = { 36 | 'pdf': { 37 | 'description': 'Upload a PDF file that ends with .pdf', 38 | 'required': False, 39 | 'value-regex': 'upload' 40 | }, 41 | 'track': { 42 | 'description': 'Track options', 43 | 'value-radio': ['long (30 minutes)', 'short (15 minutes)', 'discussion topic (5 minutes)'], 44 | 'required':True 45 | } 46 | }) 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/XAIP/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('icaps-conference.org/ICAPS/2019/Workshop/XAIP') 11 | builder.set_conference_name('Explainable Artificial Intelligence Planning') 12 | builder.set_conference_short_name('ICAPS XAIP 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Explainable Artificial Intelligence Planning', 15 | 'subtitle': 'ICAPS 2019 Workshop on Explainable AI Planning (XAIP)', 16 | 'deadline': 'Submission Deadline: April 15, 2019', 17 | 'date': 'July 11-15, 2019', 18 | 'website': 'https://icaps19.icaps-conference.org/workshops/XAIP/', 19 | 'location': 'Berkeley, CA, USA' 20 | }) 21 | builder.set_double_blind(True) 22 | builder.set_submission_public(True) 23 | builder.set_override_homepage(True) 24 | return builder.get_result() 25 | 26 | -------------------------------------------------------------------------------- /venues/icaps-conference.org/ICAPS/2019/Workshop/XAIP/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | conference.open_submissions(due_date = datetime.datetime(2019, 4, 16, 12, 00), additional_fields = { 30 | "author_identity_visibility": { 31 | "order": 4, 32 | "value-checkbox": "Reveal author identities to reviewers", 33 | "required": False 34 | } 35 | }) 36 | 37 | # doesn't seem to take the order information during init 38 | invite = client.get_invitation(id=conference.get_submission_id()) 39 | invite.reply['content']['author_identity_visibility']['order'] = 4 40 | print(invite.reply['content']) 41 | client.post_invitation(invite) 42 | 43 | 44 | -------------------------------------------------------------------------------- /venues/informatik.uni-rostock.de/Informatik_Rostock/Ubiquitous_Computing/2017/process/submissionProcess.template: -------------------------------------------------------------------------------- 1 | function () { 2 | var or3client = lib.or3client; 3 | 4 | var CONFERENCEPHRASE = "Recent Advances in Ubiquitous Computing"; 5 | 6 | var author_mail = { 7 | "groups": note.content.authorids, 8 | "subject": "Your submission to "+ CONFERENCEPHRASE +" has been received: \"" + note.content.title + "\"", 9 | "message": "Your submission to "+ CONFERENCEPHRASE + " has been posted.\n\nTitle: " + note.content.title + "\n\nAbstract: " + note.content.abstract + "\n\nTo view your submission, click here: " + baseUrl+"/forum?id=" + note.forum 10 | }; 11 | 12 | return or3client.or3request(or3client.mailUrl, author_mail, 'POST', token) 13 | .then(result => done()) 14 | .catch(error => done(error)); 15 | 16 | return true; 17 | }; 18 | -------------------------------------------------------------------------------- /venues/informatik.uni-rostock.de/Informatik_Rostock/Ubiquitous_Computing/2017/python/create-revision-invite.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import sys 5 | import os 6 | import openreview 7 | import config 8 | 9 | ## Argument handling 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument('--baseurl', help="base url") 12 | parser.add_argument('--username') 13 | parser.add_argument('--password') 14 | args = parser.parse_args() 15 | 16 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 17 | 18 | submissions = client.get_notes(invitation=config.SUBMISSION) 19 | 20 | def create_revision_invitation(n): 21 | revision_invitation = openreview.Invitation(config.CONF + '/-/Paper{0}/Add/Revision'.format(n.number), **config.revision_params) 22 | revision_invitation.invitees = [config.CONF + '/Paper{0}/Authors'.format(n.number)] 23 | revision_invitation.reply = config.submission_reply 24 | revision_invitation.reply['referent'] = n.forum 25 | revision_invitation.reply['forum'] = n.forum 26 | return revision_invitation 27 | 28 | for n in submissions: 29 | print n.number 30 | client.post_invitation(create_revision_invitation(n)) 31 | -------------------------------------------------------------------------------- /venues/iscb.org/ISMB/2019/python/functions.py: -------------------------------------------------------------------------------- 1 | # functions get defined here 2 | -------------------------------------------------------------------------------- /venues/learningtheory.org/COLT/2019/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var or3client = lib.or3client; 3 | 4 | var CONFERENCE_ID = 'learningtheory.org/COLT/2019/Conference'; 5 | var PAPER_PROGRAM_COMMITTEE; 6 | 7 | var forumNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 8 | var anonReviewerRegex = /^.*AnonReviewer(\d+)$/; 9 | forumNote.then(function(result) { 10 | var forum = result.notes[0]; 11 | var note_number = forum.number; 12 | PAPER_PROGRAM_COMMITTEE = CONFERENCE_ID + '/Paper' + note_number + '/Program_Committee'; 13 | }) 14 | .then(result => { 15 | if(!(note.signatures[0].match(anonReviewerRegex))) { 16 | console.log('Program Committee member submitted a review'); 17 | console.log('attempting to add to group ' + PAPER_PROGRAM_COMMITTEE + '/Submitted'); 18 | return or3client.addGroupMember(PAPER_PROGRAM_COMMITTEE + '/Submitted', note.signatures[0], token); 19 | } else { 20 | console.log('AnonReviewer submitted a review') 21 | } 22 | }) 23 | .then(result => { 24 | console.log('attempting to remove from group ' + PAPER_PROGRAM_COMMITTEE + '/Unubmitted'); 25 | return or3client.removeGroupMember(PAPER_PROGRAM_COMMITTEE + '/Unsubmitted', note.signatures[0], token); 26 | }) 27 | .then(result => done()) 28 | .catch(error => done(error)); 29 | return true; 30 | }; -------------------------------------------------------------------------------- /venues/learningtheory.org/COLT/2019/process/submissionProcess.js: -------------------------------------------------------------------------------- 1 | function() { 2 | var or3client = lib.or3client; 3 | console.log('submission process'); 4 | 5 | var SHORT_PHRASE = 'COLT 2019'; 6 | 7 | var authorMail = { 8 | groups: note.content.authorids, 9 | subject: 'Your submission to ' + SHORT_PHRASE + ' has been received: ' + note.content.title, 10 | message: 'Your submission to ' + SHORT_PHRASE + ' has been posted.\n\nTitle: ' + note.content.title + '\n\nAbstract: ' + note.content.abstract + '\n\nTo view your submission, click here: ' + baseUrl + '/forum?id=' + note.forum 11 | }; 12 | or3client.or3request(or3client.mailUrl, authorMail, 'POST', token) 13 | .then(result => done()) 14 | .catch(error => done(error)); 15 | return true; 16 | }; 17 | -------------------------------------------------------------------------------- /venues/learningtheory.org/COLT/2019/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | def get_conference(client): 6 | 7 | builder = openreview.conference.ConferenceBuilder(client) 8 | builder.set_conference_id('learningtheory.org/COLT/2019/Conference') 9 | builder.set_conference_name('Conference on Learning Theory') 10 | builder.set_conference_short_name('COLT 2019') 11 | builder.set_homepage_header({ 12 | 'title': 'COLT 2019', 13 | 'subtitle': 'Conference on Learning Theory', 14 | 'deadline': 'Submission Deadline: 11:00pm Eastern Standard Time, February 1, 2019', 15 | 'date': 'June 25 - June 28, 2019', 16 | 'website': 'http://learningtheory.org/colt2019/', 17 | 'location': 'Phoenix, Arizona, United States' 18 | }) 19 | builder.set_conference_area_chairs_name('Program_Committee') 20 | builder.set_double_blind(area_chairs_read_original = True) 21 | return builder.get_result() 22 | -------------------------------------------------------------------------------- /venues/machineintelligence.cc/MIC/2018/Abstract/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var SHORT_PHRASE = 'MIC 2018 Abstract'; 3 | var CONFERENCE_ID = 'machineintelligence.cc/MIC/2018 Abstract'; 4 | var or3client = lib.or3client; 5 | 6 | // send email to author of paper submission 7 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 8 | origNote.then(function(result) { 9 | var forum = result.notes[0]; 10 | var note_number = forum.number; 11 | 12 | var author_mail = { 13 | groups: forum.content.authorids, 14 | subject: 'Review of your submission to ' + SHORT_PHRASE + ': "' + forum.content.title + '"', 15 | message: 'Your submission to ' + SHORT_PHRASE + ' has received an official review.\n\nTitle: ' + note.content.title + '\n\nReview: ' + note.content.review + '\n\nTo view the review, click here: ' + baseUrl+'/forum?id=' + note.forum 16 | }; 17 | 18 | return or3client.or3request( or3client.mailUrl, author_mail, 'POST', token ); 19 | }) 20 | // do not allow reviewer to post another review for this paper 21 | .then(result => or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token)) 22 | .then(result => done()) 23 | .catch(error => done(error)); 24 | return true; 25 | }; 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /venues/machineintelligence.cc/MIC/2018/Conference/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var SHORT_PHRASE = 'MIC 2018 Conference'; 3 | var CONFERENCE_ID = 'machineintelligence.cc/MIC/2018/Conference'; 4 | var or3client = lib.or3client; 5 | 6 | // send email to author of paper submission 7 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 8 | origNote.then(function(result) { 9 | var forum = result.notes[0]; 10 | var note_number = forum.number; 11 | 12 | var author_mail = { 13 | groups: forum.content.authorids, 14 | subject: 'Review of your submission to ' + SHORT_PHRASE + ': "' + forum.content.title + '"', 15 | message: 'Your submission to ' + SHORT_PHRASE + ' has received an official review.\n\nTitle: ' + note.content.title + '\n\nReview: ' + note.content.review + '\n\nTo view the review, click here: ' + baseUrl+'/forum?id=' + note.forum 16 | }; 17 | 18 | return or3client.or3request( or3client.mailUrl, author_mail, 'POST', token ); 19 | }) 20 | // do not allow reviewer to post another review for this paper 21 | .then(result => or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token)) 22 | .then(result => done()) 23 | .catch(error => done(error)); 24 | return true; 25 | }; 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /venues/machineintelligence.cc/MIC/2018/webfield/mic2018_webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'machineintelligence.cc/MIC'; 2 | var HEADER = { 3 | title: 'Machine Intelligence Conference 2018', 4 | description: 'Welcome to OpenReview for MIC 2018. Please select a track below.' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=machineintelligence.cc/MIC/2018/Conference', name: 'MIC 2018 Conference Track' }, 8 | { url: '/group?id=machineintelligence.cc/MIC/2018/Abstract', name: 'MIC 2018 Abstract Track' } 9 | ]; 10 | 11 | Webfield.ui.setup('#group-container', GROUP_ID); 12 | 13 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 14 | 15 | Webfield.ui.linksList(VENUE_LINKS); 16 | 17 | OpenBanner.welcome(); 18 | -------------------------------------------------------------------------------- /venues/reproducibility-challenge.github.io/Reproducibility_Challenge/NeurIPS/2019/process/claimProcess.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | conference_id = 'NeurIPS.cc/2019/Reproducibility_Challenge' 3 | # create and post claim_hold note 4 | hold_invite_id = invitation.id.replace('Claim', 'Claim_Hold') 5 | client.post_note(openreview.Note( 6 | id=None, 7 | original=None, 8 | invitation=hold_invite_id, 9 | forum=note.forum, 10 | signatures=[conference_id], 11 | writers=[conference_id], 12 | readers=['everyone'], 13 | content={"title": "Claimed by "+ note.content['institution']} 14 | )) 15 | 16 | # send confirmation email 17 | submission = client.get_note(note.forum) 18 | msg = 'Your claim to NeurIPS 2019 Reproducibility Challenge for paper {title} has been posted.'.format( 19 | title=submission.content['title']) 20 | client.send_mail("NeurIPS Reproducibility Claim", [note.tauthor], msg) 21 | 22 | claimants = client.get_group(conference_id+'/Claimants') 23 | claimants.members.append(note.tauthor) 24 | client.post_group(claimants) 25 | -------------------------------------------------------------------------------- /venues/reproducibility-challenge.github.io/Reproducibility_Challenge/NeurIPS/2019/process/reportProcess.py: -------------------------------------------------------------------------------- 1 | def process(client, note, invitation): 2 | conference_id = 'NeurIPS.cc/2019/Reproducibility_Challenge' 3 | 4 | # send confirmation email 5 | msg = 'Your report submission to NeurIPS 2019 Reproducibility Challenge has been posted. \n\nTitle: {title}'.format( 6 | title=note.content['title']) 7 | client.send_mail("NeurIPS Reproducibility Challenge report received", note.content['authorids'], msg) 8 | 9 | authors = client.get_group(conference_id+'/Authors') 10 | authors.members.extend(note.content['authorids']) 11 | client.post_group(authors) 12 | -------------------------------------------------------------------------------- /venues/reproducibility-challenge.github.io/Reproducibility_Challenge/NeurIPS/2019/webfield/landingWebfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = ''; 2 | var HEADER = { 3 | title: '', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = []; 7 | 8 | Webfield.ui.setup('#group-container', GROUP_ID); 9 | 10 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 11 | 12 | Webfield.ui.linksList(VENUE_LINKS); 13 | 14 | OpenBanner.welcome(); 15 | -------------------------------------------------------------------------------- /venues/roboticsfoundation.org/RSS/2017/RCW_Workshop/process/commentProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | const TRACK_NAME = <>; 3 | const CONFERENCE = 'roboticsfoundation.org/RSS/2017/RCW_Workshop'; 4 | const TRACK = CONFERENCE+'/-_'+TRACK_NAME; 5 | const PAPERGRP = TRACK+'/Paper' + note.number; 6 | var CONFERENCE_NAME = 'RSS 2017 RCW Workshop -'+TRACK_NAME+' Track' 7 | var or3client = lib.or3client; 8 | 9 | console.log('the Comment Process is here'); 10 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 11 | 12 | 13 | 14 | origNote.then(function(result) { 15 | var forum = result.notes[0]; 16 | var note_number = forum.number; 17 | 18 | var reviewers = [PAPERGRP + '/Reviewers']; 19 | var authors = forum.content.authorids; 20 | 21 | var author_mail = { 22 | "groups": authors, 23 | "subject": "Review of your submission to "+TRACK+": \"" + forum.content.title + "\"", 24 | "message": "Your submission to " + CONFERENCE_NAME + " has received a comment.\n\nTitle: " + note.content.title + "\n\nReview: " + note.content.comment + "\n\n To view the review, click here: " + baseUrl+"/forum?id=" + note.forum 25 | }; 26 | 27 | var authorMailP = or3client.or3request( or3client.mailUrl, author_mail, 'POST', token ); 28 | 29 | return authorMailP; 30 | }) 31 | .then(result => or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token)) 32 | .then(result => done()) 33 | .catch(error => done(error)); 34 | return true; 35 | }; 36 | -------------------------------------------------------------------------------- /venues/roboticsfoundation.org/RSS/2017/RCW_Workshop/python/rssdata.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import time 3 | """ 4 | RSS Conference constants 5 | """ 6 | 7 | ADMIN = "rss2017admin" 8 | CONFERENCE = "roboticsfoundation.org/RSS/2017/RCW_Workshop" 9 | COCHAIRS = CONFERENCE+"/Program_Co-Chairs" 10 | # the two tracks within the conference 11 | POSTER = CONFERENCE+"/-_Poster" 12 | PROCEEDINGS = CONFERENCE+"/-_Proceedings" 13 | POSTER_REVIEWERS = POSTER+"/Reviewers" 14 | PROCEEDINGS_REVIEWERS = PROCEEDINGS+"/Reviewers" 15 | # Due date June 18, 2017 at 7:59am here 16 | DATE_DUE = datetime.datetime(2017, 6, 18, 7, 59) 17 | TIMESTAMP_DUE = int(time.mktime(DATE_DUE.timetuple()))*1000 18 | # June 27, 2017, 11:59:59pm Anywhere on Earth time (UTC -12). 19 | # == June 28, 2017, 7:59am EST 20 | REVIEW_DUE = datetime.datetime(2017, 6, 28, 7, 59) 21 | REVIEW_DUE = int(time.mktime(REVIEW_DUE.timetuple()))*1000 22 | 23 | -------------------------------------------------------------------------------- /venues/roboticsfoundation.org/RSS/2017/RCW_Workshop/webfield/rss2017_webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'roboticsfoundation.org/RSS'; 2 | var HEADER = { 3 | title: 'Robot Communication in the Wild: Meeting the Challenges of Real-world Systems', 4 | description: 'Welcome to OpenReview for RSS 2017 RCW Workshop. Please select a track below.' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=roboticsfoundation.org/RSS/2017/RCW_Workshop/-_Poster', name: 'RSS 2017 RCW - Poster Track' }, 8 | { url: '/group?id=roboticsfoundation.org/RSS/2017/RCW_Workshop/-_Proceedings', name: 'RSS 2017 RCW - Proceedings Track' } 9 | ]; 10 | 11 | Webfield.ui.setup('#group-container', GROUP_ID); 12 | 13 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 14 | 15 | Webfield.ui.linksList(VENUE_LINKS); 16 | 17 | OpenBanner.welcome(); 18 | -------------------------------------------------------------------------------- /venues/swsa.semanticweb.org/ISWC/2017/DeSemWeb/admin_notes.txt: -------------------------------------------------------------------------------- 1 | Notes for the administrator: 2 | 3 | Reviews are generated with create-invitations.py. 4 | 5 | the Program_Chairs group and the Admin group are members of all paper reviewer 6 | groups. This ensures that Program Chairs and Admins can post reviews if they 7 | need to. 8 | 9 | Each paper has a single Paper#/AnonReviewer group, on which all members have 10 | signatory permission. The assign-reviewer.py script adds a given user to 11 | both the Paper#/AnonReviewer and Paper#/Reviewers group. 12 | 13 | We are not using single AnonReviewer groups (as we have done in the past) as 14 | a workaround for some technical issues in the backend that we haven't yet 15 | resolved. The short version: Single AnonReviewer groups don't allow users to 16 | choose between their anonymous and public signatures, but aggregate 17 | AnonReviewer groups do allow it. 18 | -------------------------------------------------------------------------------- /venues/swsa.semanticweb.org/ISWC/2017/DeSemWeb/process/submissionProcess.template: -------------------------------------------------------------------------------- 1 | function () { 2 | var or3client = lib.or3client; 3 | 4 | var CONFERENCEPHRASE = "DeSemWeb 2017"; 5 | 6 | var author_mail = { 7 | "groups": note.content.authorids, 8 | "subject": "Your submission to "+ CONFERENCEPHRASE +" has been received: \"" + note.content.title + "\"", 9 | "message": "Your submission to "+ CONFERENCEPHRASE + " has been posted.\n\nTitle: " + note.content.title + "\n\nAbstract: " + note.content.abstract + "\n\nTo view your submission, click here: " + baseUrl+"/forum?id=" + note.forum 10 | }; 11 | 12 | return or3client.or3request(or3client.mailUrl, author_mail, 'POST', token) 13 | .then(result => done()) 14 | .catch(error => done(error)); 15 | 16 | return true; 17 | }; 18 | -------------------------------------------------------------------------------- /venues/swsa.semanticweb.org/ISWC/2018/DeSemWeb/process/officialReviewProcess.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | var SHORT_PHRASE = 'DeSemWeb 2018'; 3 | var or3client = lib.or3client; 4 | 5 | // send email to author of paper submission 6 | var origNote = or3client.or3request(or3client.notesUrl+'?id='+note.forum, {}, 'GET', token); 7 | origNote.then(function(result) { 8 | var forum = result.notes[0]; 9 | var note_number = forum.number; 10 | 11 | var author_mail = { 12 | groups: forum.content.authorids, 13 | subject: 'Review of your submission to ' + SHORT_PHRASE + ': "' + forum.content.title + '"', 14 | message: 'Your submission to ' + SHORT_PHRASE + ' has received an official review.\n\nTitle: ' + note.content.title + '\n\nReview: ' + note.content.review + '\n\nTo view the review, click here: ' + baseUrl+'/forum?id=' + note.forum 15 | }; 16 | 17 | var authorMailP = or3client.or3request( or3client.mailUrl, author_mail, 'POST', token ); 18 | 19 | return Promise.all([ 20 | authorMailP, 21 | ]); 22 | }) 23 | // do not allow reviewer to post another review for this paper 24 | .then(result => or3client.addInvitationNoninvitee(note.invitation, note.signatures[0], token)) 25 | .then(result => done()) 26 | .catch(error => done(error)); 27 | return true; 28 | }; 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /venues/swsa.semanticweb.org/ISWC/2019/Workshop/DeSemWeb/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | 6 | def get_conference(client): 7 | 8 | builder = openreview.conference.ConferenceBuilder(client) 9 | 10 | builder.set_conference_id('swsa.semanticweb.org/ISWC/2019/Workshop/DeSemWeb') 11 | builder.set_conference_name('Decentralizing the Semantic Web') 12 | builder.set_conference_short_name('DeSemWeb 2019') 13 | builder.set_homepage_header({ 14 | 'title': 'Decentralizing the Semantic Web', 15 | 'subtitle': 'ISWC2019 workshop', 16 | 'deadline': 'Submission Deadline: 2019/7/24 11:59pm GMT', 17 | 'date': '26 Oct 2019', 18 | 'website': 'https://iswc2019.desemweb.org/', 19 | 'location': 'The University of Auckland, New Zealand' 20 | }) 21 | builder.set_double_blind(False) 22 | builder.set_submission_public(True) 23 | #builder.set_override_homepage(True) 24 | return builder.get_result() 25 | -------------------------------------------------------------------------------- /venues/swsa.semanticweb.org/ISWC/2019/Workshop/DeSemWeb/python/init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import argparse 4 | import openreview 5 | from openreview import tools 6 | from openreview import invitations 7 | import config 8 | import datetime 9 | 10 | """ 11 | OPTIONAL SCRIPT ARGUMENTS 12 | 13 | baseurl - the URL of the OpenReview server to connect to (live site: https://openreview.net) 14 | username - the email address of the logging in user 15 | password - the user's password 16 | """ 17 | 18 | parser = argparse.ArgumentParser() 19 | parser.add_argument('--baseurl', help="base URL") 20 | parser.add_argument('--username') 21 | parser.add_argument('--password') 22 | 23 | args = parser.parse_args() 24 | 25 | client = openreview.Client(baseurl=args.baseurl, username=args.username, password=args.password) 26 | print('connecting to {0}'.format(client.baseurl)) 27 | 28 | conference = config.get_conference(client) 29 | # midnight GMT 7/24 30 | conference.open_submissions(due_date = datetime.datetime(2019, 7, 25, 0, 0), remove_fields = ['TL;DR']) 31 | 32 | conference.set_program_chairs(emails = []) -------------------------------------------------------------------------------- /venues/swsa.semanticweb.org/ISWC/ISWC-landing-webfield.js: -------------------------------------------------------------------------------- 1 | var GROUP_ID = 'swsa.semanticweb.org/ISWC'; 2 | var HEADER = { 3 | title: 'Decentralizing the Semantic Web Workshop at the International Semantic Web Conference', 4 | description: '' 5 | }; 6 | var VENUE_LINKS = [ 7 | { url: '/group?id=swsa.semanticweb.org/ISWC/2018/DeSemWeb', name: 'DeSemWeb 2018' }, 8 | { url: '/group?id=swsa.semanticweb.org/ISWC/2017/DeSemWeb', name: 'DeSemWeb 2017' } 9 | ]; 10 | 11 | Webfield.ui.setup('#group-container', GROUP_ID); 12 | 13 | Webfield.ui.header(HEADER.title, HEADER.description, { underline: true }); 14 | 15 | Webfield.ui.linksList(VENUE_LINKS); 16 | 17 | OpenBanner.welcome(); 18 | -------------------------------------------------------------------------------- /venues/vivoconference.org/VIVO/2019/Conference/python/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import openreview 4 | 5 | def get_conference(client): 6 | 7 | builder = openreview.conference.ConferenceBuilder(client) 8 | 9 | builder.set_conference_id('vivoconference.org/VIVO/2019/Conference') 10 | builder.set_conference_name('VIVO 2019 Conference') 11 | builder.set_conference_short_name('VIVO 2019 Conference') 12 | builder.set_homepage_header({ 13 | 'title': 'VIVO 2019 Conference', 14 | 'deadline': 'Submission Deadline: 14th of April, 2019', 15 | 'date': 'September 4-6, 2019', 16 | 'website': 'http://vivoconference.org', 17 | 'location': 'Podgorica, Montenegro', 18 | 'instructions': '

Questions or Concerns

Please contact the OpenReview support team at info@openreview.net with any questions or concerns about the OpenReview platform.
Please contact the VIVO 2019 Program Chairs at conference@vivoweb.org with any questions or concerns about conference administration or policy.

We are aware that some email providers inadequately filter emails coming from openreview.net as spam so please check your spam folder regularly.

' 19 | }) 20 | builder.set_conference_submission_name('Submission') 21 | builder.set_submission_public(True) 22 | return builder.get_result() 23 | --------------------------------------------------------------------------------