### Setup Venue Groups and Invitations Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Bootstrap all venue groups, invitations, and permissions using the `setup` method. Requires program chair and publication chair IDs. ```python venue.setup(program_chair_ids, publication_chairs_ids) ``` -------------------------------- ### Install Documentation Dependencies and Build Docs Source: https://github.com/openreview/openreview-py/blob/master/CLAUDE.md Installs the necessary packages for building the project documentation and then generates the HTML documentation. This is useful for developers who want to view or update the documentation. ```bash pip install -e ".[docs]" cd docs && make html ``` -------------------------------- ### Setup Matching and Assignment Source: https://github.com/openreview/openreview-py/blob/master/examples.md Examples for setting up committee matching and posting assignment edges. ```APIDOC ## Setup Matching and Assignment ### Description Examples for setting up committee matching and posting assignment edges. ### Method ```python # Setup matching (computes affinity scores and conflicts) venue.setup_committee_matching( committee_id=venue.get_reviewers_id(), compute_conflicts=True ) # Post assignment edge from openreview.api import Edge client.post_edge(Edge( invitation='Conf25.cc/2025/Conference/Reviewers/-/Assignment', readers=['Conf25.cc/2025/Conference', 'Conf25.cc/2025/Conference/Submission1/Area_Chairs', '~Reviewer_One1'], nonreaders=['Conf25.cc/2025/Conference/Submission1/Authors'], writers=['Conf25.cc/2025/Conference', 'Conf25.cc/2025/Conference/Submission1/Area_Chairs'], signatures=['Conf25.cc/2025/Conference'], head=paper_note_id, tail='~Reviewer_One1', weight=1 )) ``` ``` -------------------------------- ### Install openreview-py from repository Source: https://github.com/openreview/openreview-py/blob/master/README.md Clone the repository and install the library in editable mode for development. This method is useful for contributing to the library. ```bash git clone https://github.com/openreview/openreview-py.git cd openreview-py pip install -e . ``` -------------------------------- ### Start Services for Browser Testing Source: https://github.com/openreview/openreview-py/blob/master/CLAUDE.md Starts the necessary services for browser-based testing. This command is useful for interactive debugging or manual testing in a browser environment. ```bash cd docker ./run.py --serve ``` -------------------------------- ### Install openreview-py with pip Source: https://github.com/openreview/openreview-py/blob/master/README.md Use this command to install the library directly from PyPI. Ensure you have Python 3.9 or newer. ```bash pip install openreview-py ``` -------------------------------- ### Install Test Dependencies Source: https://github.com/openreview/openreview-py/blob/master/README.md Install the openreview-py package with all necessary dependencies for running tests using pip. ```bash pip install -e ".[test]" ``` -------------------------------- ### Production/CI Installation with Pinned Dependencies Source: https://github.com/openreview/openreview-py/blob/master/README.md For reproducible deployments, install the package using a lock file to pin dependency versions. This ensures consistent installations across environments. ```bash pip install -c requirements.txt . ``` -------------------------------- ### Venue Setup and Lifecycle Methods Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Key methods for bootstrapping and managing the venue lifecycle. ```APIDOC ## Venue Setup and Lifecycle Methods ### Description These methods facilitate the setup and progression through the various stages of a venue's lifecycle. ### Methods 1. **`setup(program_chair_ids, publication_chairs_ids)`** - **Description**: Bootstrap all venue groups, invitations, and permissions. - **Parameters**: - `program_chair_ids` (list): List of user IDs for program chairs. - `publication_chairs_ids` (list): List of user IDs for publication chairs. 2. **`create_submission_stage()`** - **Description**: Create the submission invitation and related pipeline (withdrawal, desk rejection, post-submission). 3. **`recruit_reviewers(title, message, invitees, reviewers_name, ...)`** - **Description**: Send recruitment emails with accept/decline links to potential reviewers. - **Parameters**: - `title` (str): Subject of the recruitment email. - `message` (str): Body of the recruitment email. - `invitees` (list): List of user IDs to invite. - `reviewers_name` (str): Name of the reviewer group. 4. **`create_bid_stages()`** - **Description**: Create bidding invitations for committee preference elicitation. 5. **`setup_committee_matching(committee_id, compute_affinity_scores, compute_conflicts)`** - **Description**: Compute affinity scores, conflicts, and create matching configuration for a committee. - **Parameters**: - `committee_id` (str): The ID of the committee. - `compute_affinity_scores` (bool): Whether to compute affinity scores. - `compute_conflicts` (bool): Whether to compute conflicts. 6. **`set_assignments(assignment_title, committee_id)`** - **Description**: Deploy proposed assignments as official assignments. - **Parameters**: - `assignment_title` (str): The title of the assignment. - `committee_id` (str): The ID of the committee. 7. **`create_review_stage()`** - **Description**: Create the review invitation. 8. **`create_meta_review_stage()`** - **Description**: Create the meta-review invitation for area chairs. 9. **`create_decision_stage()`** - **Description**: Create the decision invitation; optionally bulk-imports decisions from CSV. 10. **`post_decisions(decisions_file)`** - **Description**: Bulk-post decisions from a CSV file. - **Parameters**: - `decisions_file` (str): Path to the CSV file with columns: paper_number, decision, comment. 11. **`post_decision_stage(reveal_authors_accepted, submission_readers)`** - **Description**: Update submissions with decision metadata (venueid, venue, readers, bibtex). - **Parameters**: - `reveal_authors_accepted` (bool): Whether to reveal authors for accepted papers. - `submission_readers` (list): List of readers for submissions. 12. **`send_decision_notifications(decision_options, messages)`** - **Description**: Email authors per-decision notification templates. - **Parameters**: - `decision_options` (dict): Options for decisions. - `messages` (dict): Notification message templates. ``` -------------------------------- ### Journal programmatic setup Source: https://github.com/openreview/openreview-py/blob/master/examples.md Initializes and sets up a new journal. ```APIDOC ## Journal programmatic setup ### Description Initializes and sets up a new journal with specified details and bootstraps its groups, invitations, and variables. ### Method ```python journal = Journal(...) journal.setup(...) ``` ### Parameters - **Journal constructor**: - **client**: (OpenReviewClient) The OpenReview client instance. - **venue_id**: (string) The unique identifier for the journal venue. - **secret_key**: (string) The secret key for the journal. - **contact_info**: (string) The contact email for the journal. - **full_name**: (string) The full name of the journal. - **short_name**: (string) The short name of the journal. - **journal.setup()**: - **support_role**: (string) The role for support staff. - **editors**: (list[string]) A list of editor IDs. - **assignment_delay**: (integer) The delay in minutes before assignment processes run. ``` -------------------------------- ### Venue Programmatic Setup Source: https://github.com/openreview/openreview-py/blob/master/examples.md Demonstrates how to programmatically set up a venue, including groups, invitations, and stages for submission, review, and decisions. ```APIDOC ## Venue programmatic setup (alternative to request form) ### Description Bootstrap venue groups and invitations, create submission, review, and decision stages. ### Method ```python import openreview from openreview.venue import Venue client = openreview.api.OpenReviewClient( baseurl='https://api2.openreview.net', username='pc@example.com', password='...' ) venue = Venue(client, 'Conf25.cc/2025/Conference', 'openreview.net/Support') # Bootstrap venue groups and invitations venue.setup( program_chair_ids=['pc1@example.com', 'pc2@example.com'] ) # Create submission pipeline (submission, withdrawal, desk rejection) venue.create_submission_stage() # Create review stage venue.create_review_stage() # Create decision stage venue.create_decision_stage() ``` ``` -------------------------------- ### Development Installation with Pinned Dependencies Source: https://github.com/openreview/openreview-py/blob/master/README.md Install the library in editable mode while using pinned dependencies from a lock file. This is suitable for active development. ```bash pip install -c requirements.txt -e . ``` -------------------------------- ### Install OpenReview-py for Development Source: https://github.com/openreview/openreview-py/blob/master/CLAUDE.md Installs the library in editable mode for development purposes. This allows changes to the code to be reflected immediately without reinstallation. ```bash pip install -e . ``` -------------------------------- ### Journal Programmatic Setup Source: https://github.com/openreview/openreview-py/blob/master/examples.md Initializes and sets up a new journal with specified details. This includes bootstrapping groups, invitations, and variables. ```python from openreview.journal import Journal journal = Journal( client, venue_id='TMLR', secret_key='your-secret-key', contact_info='tmlr@jmlr.org', full_name='Transactions on Machine Learning Research', short_name='TMLR' ) # Bootstrap all journal groups, invitations, and group variables journal.setup( support_role='OpenReview.net/Support', editors=['~EIC_One1', '~EIC_Two1'], assignment_delay=5 # minutes before assignment processes run ) ``` -------------------------------- ### Start Local Services for Testing Source: https://github.com/openreview/openreview-py/blob/master/README.md Manually start the OpenReview API V1, API V2, and Web frontend services on their default ports before running pytest. Ensure environment variables like `SUPER_USER` are set correctly. ```bash # Inside the OpenReview API V1 directory npm run cleanStart Inside the OpenReview API V2 directory npm run cleanStart Inside the OpenReview Web directory SUPER_USER=openreview.net npm run dev ``` -------------------------------- ### Bootstrap Journal Setup Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Use `journal.setup` to bootstrap all journal groups, invitations, and group variables. Requires support role, editors, and assignment delay. ```python journal.setup(support_role, editors, assignment_delay) ``` -------------------------------- ### Create Venue via New UI Source: https://github.com/openreview/openreview-py/blob/master/examples.md This example demonstrates the two-step process for creating a new venue. First, the Program Chair submits a venue request using `pc_client`. Second, the support client uses the request ID to deploy the venue, which automatically creates groups and invitations. ```python import datetime import openreview from openreview.api import OpenReviewClient, Note pc_client = OpenReviewClient(baseurl='https://api2.openreview.net', username='pc@example.com', password='...') support_client = OpenReviewClient(baseurl='https://api2.openreview.net', username='support_client@example.com', password='...') # Step 1: PC submits venue request request = pc_client.post_note_edit( invitation='openreview.net/Support/Venue_Request/-/Conference_Review_Workflow', signatures=['~PC_Name1'], note=Note( content={ 'official_venue_name': {'value': 'Conference 2025'}, 'abbreviated_venue_name': {'value': 'Conf25'}, 'venue_website_url': {'value': 'https://conf25.org'}, 'location': {'value': 'Vienna, Austria'}, 'venue_start_date': {'value': openreview.tools.datetime_millis( datetime.datetime(2025, 7, 1))}, 'submission_deadline': {'value': openreview.tools.datetime_millis( datetime.datetime(2025, 3, 15, 23, 59))}, 'program_chair_emails': {'value': ['pc1@example.com', 'pc2@example.com']}, 'contact_email': {'value': 'pc1@example.com'}, 'area_chairs_name': {'value': 'Area_Chairs'}, 'reviewers_name': {'value': 'Reviewers'}, 'expected_submissions': {'value': '500'}, 'how_did_you_hear_about_us': {'value': 'Other'}, 'venue_organizer_agreement': {'value': ['I agree']} } ) ) # Step 2: Support deploys the venue (creates all groups and invitations) deploy = support_client.post_note_edit( invitation='openreview.net/Support/Venue_Request/Conference_Review_Workflow/-/Deployment', signatures=['openreview.net/Support'], note=Note( id=request['note']['id'], content={ 'venue_id': {'value': 'Conf25.cc/2025/Conference'} } ) ) # After deployment, groups and invitations are created automatically ``` -------------------------------- ### Docker Configuration Example Source: https://github.com/openreview/openreview-py/blob/master/README.md This JSON configuration file specifies paths and branches for dependent repositories and sets operational modes. Copy `config.example.json` to `config.json` to use. ```json { "api_v1": { "path": "../../openreview-api-v1", "branch": "main" }, "api_v2": { "path": "../../openreview-api", "branch": "feature/x" }, "web": { "path": "../../openreview-web", "branch": "" }, "mode": "test", "auto_checkout": true, "keep_infra": false } ``` -------------------------------- ### Setup Venue Programmatically Source: https://github.com/openreview/openreview-py/blob/master/examples.md Use the Venue helper class to programmatically set up conference groups, invitations, and submission/review/decision stages. Requires an authenticated OpenReview client. ```python import openreview from openreview.venue import Venue client = openreview.api.OpenReviewClient( baseurl='https://api2.openreview.net', username='pc@example.com', password='...' ) venue = Venue(client, 'Conf25.cc/2025/Conference', 'openreview.net/Support') # Bootstrap venue groups and invitations venue.setup( program_chair_ids=['pc1@example.com', 'pc2@example.com'] ) # Create submission pipeline (submission, withdrawal, desk rejection) venue.create_submission_stage() # Create review stage venue.create_review_stage() # Create decision stage venue.create_decision_stage() ``` -------------------------------- ### Create Venue via UI Source: https://github.com/openreview/openreview-py/blob/master/examples.md Example of creating a venue using the OpenReview API, simulating a new UI submission. ```APIDOC ## Create Venue via the new UI ### Description Example of creating a venue using the OpenReview API, simulating a new UI submission. ### Method ```python import datetime import openreview from openreview.api import OpenReviewClient, Note pc_client = OpenReviewClient(baseurl='https://api2.openreview.net', username='pc@example.com', password='...') support_client = OpenReviewClient(baseurl='https://api2.openreview.net', username='support_client@example.com', password='...') # Step 1: PC submits venue request request = pc_client.post_note_edit( invitation='openreview.net/Support/Venue_Request/-/Conference_Review_Workflow', signatures=['~PC_Name1'], note=Note( content={ 'official_venue_name': {'value': 'Conference 2025'}, 'abbreviated_venue_name': {'value': 'Conf25'}, 'venue_website_url': {'value': 'https://conf25.org'}, 'location': {'value': 'Vienna, Austria'}, 'venue_start_date': {'value': openreview.tools.datetime_millis( datetime.datetime(2025, 7, 1))}, 'submission_deadline': {'value': openreview.tools.datetime_millis( datetime.datetime(2025, 3, 15, 23, 59))}, 'program_chair_emails': {'value': ['pc1@example.com', 'pc2@example.com']}, 'contact_email': {'value': 'pc1@example.com'}, 'area_chairs_name': {'value': 'Area_Chairs'}, 'reviewers_name': {'value': 'Reviewers'}, 'expected_submissions': {'value': '500'}, 'how_did_you_hear_about_us': {'value': 'Other'}, 'venue_organizer_agreement': {'value': ['I agree']} } ) ) # Step 2: Support deploys the venue (creates all groups and invitations) deploy = support_client.post_note_edit( invitation='openreview.net/Support/Venue_Request/Conference_Review_Workflow/-/Deployment', signatures=['openreview.net/Support'], note=Note( id=request['note']['id'], content={ 'venue_id': {'value': 'Conf25.cc/2025/Conference'} } ) ) # After deployment, groups and invitations are created automatically ``` ``` -------------------------------- ### Serve Mode for Manual Browser Testing Source: https://github.com/openreview/openreview-py/blob/master/README.md Start all services with ports exposed to the host machine for manual browser testing. This allows you to interact with the OpenReview system through a browser. ```bash # Start services only (browse http://localhost:3030) ./run.py --serve # Populate the database by running a test, then keep services running ./run.py --serve tests/test_icml_conference.py # Preserve existing data across restarts (skip cleanStart) ./run.py --serve --no-clean ``` -------------------------------- ### Journal Workflow: Recommend Action Editor Source: https://github.com/openreview/openreview-py/blob/master/examples.md Example of recommending an action editor for a paper using the `author_client`. ```APIDOC ### Recommend action editor ### Description Recommend an action editor for a given paper. ### Method ```python from openreview.api import Edge author_client.post_edge(Edge( invitation='TMLR/Action_Editors/-/Recommendation', head=paper_id, tail='~Recommended_AE1', weight=1 )) ``` ``` -------------------------------- ### Start Interactive Shell Source: https://github.com/openreview/openreview-py/blob/master/README.md Use this command to enter the test container's shell for debugging or manual test execution. ```bash ./run.py --shell ``` -------------------------------- ### Post a Review Source: https://github.com/openreview/openreview-py/blob/master/examples.md Example of posting an official review for a submission. ```APIDOC ## Post a Review ### Description Example of posting an official review for a submission. ### Method ```python from openreview.api import Note reviewer_client.post_note_edit( invitation='Conf25.cc/2025/Conference/Submission1/-/Official_Review', signatures=['Conf25.cc/2025/Conference/Submission1/Reviewer_abc123'], note=Note( content={ 'title': {'value': 'Review of Submission 1'}, 'review': {'value': 'This paper presents a novel approach...'}, 'rating': {'value': 8}, 'confidence': {'value': 4} } ), await_process=True ) ``` ``` -------------------------------- ### Count Edges Source: https://github.com/openreview/openreview-py/blob/master/examples.md Examples of how to count edges based on invitation and label. ```APIDOC ## Count Edges ### Description Examples of how to count edges based on invitation and label. ### Method ```python total = client.get_edges_count(invitation='VenueID/Reviewers/-/Affinity_Score') high_count = client.get_edges_count( invitation='VenueID/Reviewers/-/Affinity_Score', label='High' ) ``` ``` -------------------------------- ### Journal Lifecycle Methods Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Key methods for managing the journal lifecycle, from setup to review release. ```APIDOC ## Journal Lifecycle Methods ### Description Methods to manage the journal's lifecycle stages, including setup, invitations, and review processes. ### Methods 1. **`setup(support_role, editors, assignment_delay)`** - Bootstrap all journal groups, invitations, and group variables. 2. **`invite_action_editors(message, subject, invitees)`** - Send Area Chair (AE) recruitment emails. 3. **`invite_reviewers(message, subject, invitees)`** - Send reviewer recruitment emails. 4. **`setup_ae_matching(label)`** - Configure AE-to-paper matching (affinity scores, conflicts, quotas). 5. **`set_assignments(assignment_title)`** - Deploy proposed AE assignments. 6. **`setup_author_submission(note)`** - Process a new submission: create per-paper groups, invitations, trigger expertise computation. 7. **`setup_under_review_submission(note)`** - Transition submission to "Under Review": enable review invitation, public comments, solicit-review. 8. **`setup_ae_assignment(note)`** - Compute AE affinity scores and conflict edges for a submission. 9. **`setup_reviewer_assignment(note)`** - Compute reviewer affinity scores and conflict edges for a submission. 10. **`release_reviews_process(submission)`** - Release reviews to authors and open the discussion/decision phase. ``` -------------------------------- ### Recruit Reviewers Source: https://github.com/openreview/openreview-py/blob/master/examples.md Example of recruiting reviewers for a venue with a custom message. ```APIDOC ## Recruit Reviewers ### Description Example of recruiting reviewers for a venue with a custom message. ### Method ```python venue.recruit_reviewers( title='[Conf25] Invitation to Review', message='Dear {{fullname}}, You are invited to review for Conf25. Click here: {{invitation_url}} Thanks, Program Chairs', invitees=['reviewer1@example.com', 'reviewer2@example.com', '~Known_Reviewer1'], reviewers_name='Reviewers', contact_info='pc1@example.com', reduced_load_on_decline=['1', '2', '3'] ) ``` ``` -------------------------------- ### Setup Matching and Assignment Source: https://github.com/openreview/openreview-py/blob/master/examples.md This snippet shows how to set up committee matching, which includes computing affinity scores and conflicts, using `setup_committee_matching`. It also demonstrates posting an assignment edge using the `post_edge` method, specifying readers, nonreaders, writers, and signatures. ```python # Setup matching (computes affinity scores and conflicts) venue.setup_committee_matching( committee_id=venue.get_reviewers_id(), compute_conflicts=True ) # Post assignment edge from openreview.api import Edge client.post_edge(Edge( invitation='Conf25.cc/2025/Conference/Reviewers/-/Assignment', readers=['Conf25.cc/2025/Conference', 'Conf25.cc/2025/Conference/Submission1/Area_Chairs', '~Reviewer_One1'], nonreaders=['Conf25.cc/2025/Conference/Submission1/Authors'], writers=['Conf25.cc/2025/Conference', 'Conf25.cc/2025/Conference/Submission1/Area_Chairs'], signatures=['Conf25.cc/2025/Conference'], head=paper_note_id, tail='~Reviewer_One1', weight=1 )) ``` -------------------------------- ### Setup Assignment Recruitment Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Invite reviewers on a per-paper basis for assignments. Requires committee ID, hash seed, and due date. ```python venue.setup_assignment_recruitment(committee_id, hash_seed, due_date) ``` -------------------------------- ### Run Integration Tests with Docker Compose Source: https://github.com/openreview/openreview-py/blob/master/README.md Execute integration tests using Docker Compose. This command starts the necessary services, runs the specified test file, and then tears down the infrastructure. ```bash cd docker cp config.example.json config.json # Edit config.json with your repo paths (required before first run) # Run a specific test file (services start, tests run, then everything tears down) ./run.py tests/test_client.py # Run a specific test with verbose output ./run.py tests/test_client.py::TestClient::test_get_groups -v # Run all tests (takes a long time) ./run.py ``` -------------------------------- ### Journal Workflow: Approve Paper for Review (AE) Source: https://github.com/openreview/openreview-py/blob/master/examples.md Example of an action editor approving a paper for review using `ae_client`. ```APIDOC ### Approve paper for review (AE) ### Description Approve a paper for review by an action editor. ### Method ```python from openreview.api import Note ae_client.post_note_edit( invitation='TMLR/Paper1/-/Review_Approval', signatures=[ae_anon_group_id], note=Note( content={ 'under_review': {'value': 'Appropriate for Review'} } ), await_process=True ) ``` ``` -------------------------------- ### Venue Get Accepted Submissions Source: https://github.com/openreview/openreview-py/blob/master/examples.md Demonstrates how to retrieve accepted submissions using the Venue helper or directly via the OpenReview client. ```APIDOC ## Venue: get accepted submissions ### Description Retrieve accepted submissions using the Venue helper or the OpenReview client. ### Method ```python # Using Venue helper accepted = venue.get_submissions(accepted=True) # Using client directly accepted = client.get_all_notes( content={'venueid': 'Conf25.cc/2025/Conference'} ) ``` ``` -------------------------------- ### Start Interactive Shell in Test Container Source: https://github.com/openreview/openreview-py/blob/master/CLAUDE.md Launches an interactive shell within the test container. This allows for direct interaction with the test environment and debugging. ```bash cd docker ./run.py --shell ``` -------------------------------- ### Setup Committee Matching Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Configure committee matching by computing affinity scores and conflicts. Specify the committee ID and whether to compute scores and conflicts. ```python venue.setup_committee_matching(committee_id, compute_affinity_scores, compute_conflicts) ``` -------------------------------- ### Venue Matching and Assignment Source: https://github.com/openreview/openreview-py/blob/master/examples.md Code examples for computing reviewer affinities and conflicts, and deploying or reverting reviewer assignments. ```APIDOC ## Venue: matching and assignment ### Description Compute affinity scores and conflicts for reviewers, and deploy or revert assignments. ### Method ```python # Compute affinity scores and conflicts for reviewers venue.setup_committee_matching( committee_id=venue.get_reviewers_id(), compute_affinity_scores=True, compute_conflicts=True, compute_conflicts_n_years=5 ) # Deploy assignments from a proposed configuration venue.set_assignments( assignment_title='reviewers-assignment', committee_id=venue.get_reviewers_id() ) # Revert if needed venue.unset_assignments( assignment_title='reviewers-assignment', committee_id=venue.get_reviewers_id() ) ``` ``` -------------------------------- ### Get OpenReview Notes by Invitation Source: https://github.com/openreview/openreview-py/blob/master/examples.md Retrieves notes associated with a specific invitation. Supports fetching up to 1000 notes or all notes automatically handling pagination. ```python # Get up to 1000 notes notes = client.get_notes(invitation='VenueID/-/Submission') # Get ALL notes (handles pagination automatically) all_notes = client.get_all_notes(invitation='VenueID/-/Submission') for note in all_notes: print(note.content['title']['value']) ``` -------------------------------- ### Get OpenReview Group and Find Groups by Prefix Source: https://github.com/openreview/openreview-py/blob/master/examples.md Retrieves a specific group and its members, or finds groups matching a given prefix. Also demonstrates finding anonymous groups for a user within a specific prefix. ```python group = client.get_group('VenueID/Reviewers') print(group.members) # ['~Reviewer_One1', '~Reviewer_Two1', 'reviewer3@example.com'] # Find groups by prefix groups = client.get_groups(prefix='VenueID/Submission1/') # Returns: [Group('VenueID/Submission1/Authors'), Group('VenueID/Submission1/Reviewers'), ...] # Find anonymous group for a user anon_groups = client.get_groups( prefix='VenueID/Paper1/Reviewer_', signatory='~Reviewer_One1' ) reviewer_anon_id = anon_groups[0].id # 'VenueID/Paper1/Reviewer_abc123' ``` -------------------------------- ### Post Reviewer Bid Edge Source: https://github.com/openreview/openreview-py/blob/master/examples.md This example demonstrates how to post an edge to represent a reviewer's bid for a paper. The 'label' can be one of 'Very High', 'High', 'Neutral', 'Low', 'Very Low'. ```APIDOC ## Post Reviewer Bid Edge ### Description Posts an edge to represent a reviewer's bid for a paper. ### Method POST ### Endpoint /edges ### Parameters #### Request Body - **invitation** (string) - Required - The invitation ID for the bid. - **readers** (list of strings) - Required - List of readers for the edge. - **writers** (list of strings) - Required - List of writers for the edge. - **signatures** (list of strings) - Required - List of signatures for the edge. - **head** (string) - Required - The ID of the paper (note). - **tail** (string) - Required - The ID of the reviewer. - **label** (string) - Required - The bid label (e.g., 'Very High', 'High', 'Neutral', 'Low', 'Very Low'). ### Request Example ```python from openreview.api import Edge reviewer_client.post_edge(Edge( invitation='VenueID/Reviewers/-/Bid', readers=['VenueID', '~Reviewer_One1'], writers=['VenueID', '~Reviewer_One1'], signatures=['~Reviewer_One1'], head=paper_note_id, tail='~Reviewer_One1', label='Very High' )) ``` ### Response #### Success Response (200) - **edge** (object) - The created edge object. ``` -------------------------------- ### Get Submissions Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Retrieve submissions, with an option to filter by acceptance status. Set `accepted=True` to get only accepted papers. ```python venue.get_submissions(accepted=True) ``` -------------------------------- ### Instantiate OpenReview Client (v1 API) Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Use this to connect to the legacy v1 API. Ensure the base URL is correctly set. ```python client = openreview.Client(baseurl='https://api.openreview.net') ``` -------------------------------- ### Instantiate OpenReview Client (v2 API) Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Use this to connect to the current and recommended v2 API. The base URL should point to the v2 endpoint. ```python client = openreview.api.OpenReviewClient(baseurl='https://api2.openreview.net') ``` -------------------------------- ### Post a Decision Source: https://github.com/openreview/openreview-py/blob/master/examples.md Example of posting a decision for a submission. ```APIDOC ## Post a Decision ### Description Example of posting a decision for a submission. ### Method ```python from openreview.api import Note pc_client.post_note_edit( invitation='Conf25.cc/2025/Conference/Submission1/-/Decision', signatures=['Conf25.cc/2025/Conference/Program_Chairs'], note=Note( content={ 'decision': {'value': 'Accept (Oral)'}, 'comment': {'value': 'Strong contributions with unanimous reviewer support.'} } ), await_process=True ) ``` ``` -------------------------------- ### Initialize Venue Class Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Instantiate the Venue class for programmatic venue management. Requires an OpenReview client, venue ID, and support user. ```python venue = openreview.venue.Venue(client, venue_id, support_user) ``` -------------------------------- ### Delete Edges Source: https://github.com/openreview/openreview-py/blob/master/examples.md Examples of how to delete edges by label or for an entire invitation. ```APIDOC ## Delete Edges ### Description Examples of how to delete edges by label or for an entire invitation. ### Method ```python # Delete by label client.delete_edges( invitation='VenueID/Reviewers/-/Affinity_Score', label='High', wait_to_finish=True ) # Delete all edges for an invitation client.delete_edges( invitation='VenueID/Reviewers/-/Affinity_Score', wait_to_finish=True ) ``` ``` -------------------------------- ### Connect to production (v1 API - legacy) Source: https://github.com/openreview/openreview-py/blob/master/examples.md Demonstrates how to connect to the legacy v1 OpenReview API using username and password authentication. ```APIDOC ## Connect to production (v1 API - legacy) ### Description Connect to the legacy v1 OpenReview API using username and password authentication. ### Method ```python import openreview client_v1 = openreview.Client( baseurl='https://api.openreview.net', username='user@example.com', password='your_password' ) ``` ``` -------------------------------- ### Venue Close Submissions Source: https://github.com/openreview/openreview-py/blob/master/examples.md Example of how to close submissions by expiring the submission invitation. ```APIDOC ## Venue: close submissions ### Description Expire the submission invitation immediately to close submissions. ### Method ```python # Expire the submission invitation immediately venue.expire_invitation('Conf25.cc/2025/Conference/-/Submission') ``` ``` -------------------------------- ### Connect to production (v2 API) Source: https://github.com/openreview/openreview-py/blob/master/examples.md Demonstrates how to connect to the production OpenReview API using the v2 client with username and password authentication. ```APIDOC ## Connect to production (v2 API) ### Description Connect to the production OpenReview API using the v2 client with username and password authentication. ### Method ```python import openreview client = openreview.api.OpenReviewClient( baseurl='https://api2.openreview.net', username='user@example.com', password='your_password' ) ``` ``` -------------------------------- ### Get all notes by invitation Source: https://github.com/openreview/openreview-py/blob/master/examples.md Retrieves all notes associated with a specific invitation, automatically handling pagination. ```APIDOC ## Get ALL notes by invitation ### Description Retrieve all notes associated with a specific invitation. This method automatically handles pagination to fetch all available notes. ### Parameters #### Query Parameters - **invitation** (string) - Required - The ID of the invitation to filter notes by. ### Method ```python all_notes = client.get_all_notes(invitation='VenueID/-/Submission') for note in all_notes: print(note.content['title']['value']) ``` ``` -------------------------------- ### Get a single note Source: https://github.com/openreview/openreview-py/blob/master/examples.md Retrieves a specific note by its unique ID and allows access to its content fields. ```APIDOC ## Get a single note ### Description Retrieves a specific note by its unique ID and allows access to its content fields. ### Method GET (implied by `get_note`) ### Endpoint `/notes/{note_id}` (implied) ### Parameters #### Path Parameters - **note_id** (string) - Required - The unique identifier of the note. ### Request Example ```python note = client.get_note(note_id) title = note.content['title']['value'] authors = note.content['authors']['value'] ``` ### Response #### Success Response (200) - **note** (object) - The requested note object, containing its content and metadata. ``` -------------------------------- ### Get notes by invitation Source: https://github.com/openreview/openreview-py/blob/master/examples.md Retrieves a list of notes posted to a specific invitation, with a limit of 1000 notes. ```APIDOC ## Get notes by invitation ### Description Retrieve a list of notes associated with a specific invitation. This method returns up to 1000 notes. ### Parameters #### Query Parameters - **invitation** (string) - Required - The ID of the invitation to filter notes by. ### Method ```python notes = client.get_notes(invitation='VenueID/-/Submission') ``` ``` -------------------------------- ### Get profile by email or ID Source: https://github.com/openreview/openreview-py/blob/master/examples.md Retrieves a user's profile using their email address or profile ID. ```APIDOC ## Get profile by email or ID ### Description Retrieve a user's profile information by providing either their email address or their unique profile ID. ### Parameters #### Path Parameters - **email** (string) - Required - The email address of the user. - **profile_id** (string) - Required - The unique ID of the user's profile. ### Method ```python # By email profile = client.get_profile('user@example.com') print(profile.id) # '~FirstName_LastName1' # By profile ID profile = client.get_profile('~FirstName_LastName1') print(profile.content['preferredEmail']) ``` ``` -------------------------------- ### Connect to Production OpenReview API Source: https://github.com/openreview/openreview-py/blob/master/examples.md Demonstrates how to connect to the OpenReview API using either the v2 (recommended) or v1 client. Requires base URL, username, and password. ```python import openreview # v2 API (recommended) client = openreview.api.OpenReviewClient( baseurl='https://api2.openreview.net', username='user@example.com', password='your_password' ) # v1 API (legacy) client_v1 = openreview.Client( baseurl='https://api.openreview.net', username='user@example.com', password='your_password' ) ``` -------------------------------- ### Connect with environment variables Source: https://github.com/openreview/openreview-py/blob/master/examples.md Shows how to authenticate using environment variables for username, password, and API base URL (v2). ```APIDOC ## Connect with environment variables ### Description Authenticate to the OpenReview API using environment variables for username, password, and the v2 API base URL. ### Method ```python import os os.environ['OPENREVIEW_USERNAME'] = 'user@example.com' os.environ['OPENREVIEW_PASSWORD'] = 'your_password' os.environ['OPENREVIEW_API_BASEURL_V2'] = 'https://api2.openreview.net' client = openreview.api.OpenReviewClient() ``` ``` -------------------------------- ### Guest access (read-only) Source: https://github.com/openreview/openreview-py/blob/master/examples.md Shows how to instantiate a client for guest access, allowing read-only operations on public data. ```APIDOC ## Guest access (read-only) ### Description Instantiate an OpenReview API client for guest access, enabling read-only operations on public notes, groups, and profiles. Write operations are not permitted. ### Method ```python guest = openreview.api.OpenReviewClient(baseurl='https://api2.openreview.net') # Can read public notes, groups, profiles — cannot write ``` ``` -------------------------------- ### Journal Class Initialization Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Instantiate the Journal class with client, venue details, and contact information. ```APIDOC ## Journal Class Initialization ### Description Instantiate the Journal class to manage journal settings programmatically. ### Parameters - **client**: The OpenReview client object. - **venue_id**: The unique identifier for the venue. - **secret_key**: The secret key for authentication. - **contact_info**: Contact information for the journal. - **full_name**: The full name of the journal. - **short_name**: The short name of the journal. ### Code Example ```python journal = openreview.journal.Journal(client, venue_id, secret_key, contact_info, full_name, short_name, ...) ``` ``` -------------------------------- ### Venue Class Initialization Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Initialize the Venue class to manage venue settings programmatically. ```APIDOC ## Venue Class Initialization ### Description Instantiate the `Venue` class to manage venue configurations and operations programmatically. ### Method Signature ```python openreview.venue.Venue(client, venue_id, support_user) ``` ### Parameters - **client**: An authenticated OpenReview client object. - **venue_id**: The unique identifier for the venue. - **support_user**: The user ID of the support user for the venue. ``` -------------------------------- ### Post Conflict Edge Source: https://github.com/openreview/openreview-py/blob/master/examples.md This example shows how to post an edge to represent a conflict between a reviewer and a paper. This typically involves setting a negative weight. ```APIDOC ## Post Conflict Edge ### Description Posts an edge to represent a conflict between a reviewer and a paper. ### Method POST ### Endpoint /edges ### Parameters #### Request Body - **invitation** (string) - Required - The invitation ID for the conflict. - **readers** (list of strings) - Required - List of readers for the edge. - **writers** (list of strings) - Required - List of writers for the edge. - **signatures** (list of strings) - Required - List of signatures for the edge. - **head** (string) - Required - The ID of the paper (note). - **tail** (string) - Required - The ID of the reviewer. - **weight** (number) - Required - The weight of the conflict, typically -1. - **label** (string) - Required - The label for the conflict, usually 'Conflict'. ### Request Example ```python from openreview.api import Edge client.post_edge(Edge( invitation='VenueID/Reviewers/-/Conflict', readers=['VenueID', '~Reviewer_One1'], writers=['VenueID'], signatures=['VenueID'], head=paper_note_id, tail='~Reviewer_One1', weight=-1, label='Conflict' )) ``` ### Response #### Success Response (200) - **edge** (object) - The created edge object. ``` -------------------------------- ### Transition to Under Review Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Transition a submission to 'Under Review' using `journal.setup_under_review_submission`. This enables review invitations, public comments, and solicit-review. Requires the submission note. ```python journal.setup_under_review_submission(note) ``` -------------------------------- ### Get a Single Note Source: https://github.com/openreview/openreview-py/blob/master/examples.md Fetches a specific note using its ID and extracts its title and authors from the content. This is useful for detailed inspection of a single submission. ```python note = client.get_note(note_id) title = note.content['title']['value'] authors = note.content['authors']['value'] ``` -------------------------------- ### Serve Mode with Interactive Shell Access Source: https://github.com/openreview/openreview-py/blob/master/README.md Combine serve mode with an interactive shell to manually test and debug the OpenReview system. This is useful for running custom scripts or commands while services are active. ```bash # Serve with shell access (browse + run scripts/tests) ./run.py --serve --shell # Populate DB, then drop into shell for manual testing ./run.py --serve --shell tests/test_icml_conference.py ``` -------------------------------- ### Get a group and its members Source: https://github.com/openreview/openreview-py/blob/master/examples.md Retrieves a specific group and lists its members. Also shows how to find groups by prefix and find anonymous groups for a user. ```APIDOC ## Get a group and its members ### Description Retrieve a specific group by its ID and access its list of members. This function also supports finding groups by a given prefix and identifying anonymous groups associated with a user. ### Parameters #### Path Parameters - **group_id** (string) - Required - The ID of the group to retrieve. ### Method ```python group = client.get_group('VenueID/Reviewers') print(group.members) # ['~Reviewer_One1', '~Reviewer_Two1', 'reviewer3@example.com'] # Find groups by prefix groups = client.get_groups(prefix='VenueID/Submission1/') # Returns: [Group('VenueID/Submission1/Authors'), Group('VenueID/Submission1/Reviewers'), ...] # Find anonymous group for a user # This example assumes a reviewer is assigned to a specific submission and paper anon_groups = client.get_groups( prefix='VenueID/Paper1/Reviewer_', # Prefix for anonymous reviewer groups signatory='~Reviewer_One1' # The actual user ID ) reviewer_anon_id = anon_groups[0].id # Example: 'VenueID/Paper1/Reviewer_abc123' ``` ``` -------------------------------- ### Create Review Stage Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Create the invitation for reviewers to submit their reviews. ```python venue.create_review_stage() ``` -------------------------------- ### Create Submission Stage Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Create the submission invitation and related pipeline, including withdrawal and desk rejection options. ```python venue.create_submission_stage() ``` -------------------------------- ### Initialize Journal Object Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Instantiate the Journal class for programmatic journal management. Requires client, venue ID, secret key, contact info, full name, and short name. ```python journal = openreview.journal.Journal(client, venue_id, secret_key, contact_info, full_name, short_name, ...) ``` -------------------------------- ### Create Bidding Stages Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Set up bidding invitations to gather committee member preferences for papers. ```python venue.create_bid_stages() ``` -------------------------------- ### Create Meta-Review Stage Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Create the invitation for area chairs to submit meta-reviews. ```python venue.create_meta_review_stage() ``` -------------------------------- ### Venue Post Decisions and Notify Authors Source: https://github.com/openreview/openreview-py/blob/master/examples.md Examples for posting decisions in bulk, updating submission metadata, and sending per-decision email notifications to authors. ```APIDOC ## Venue: post decisions and notify authors ### Description Bulk-post decisions from CSV, update submissions with decision metadata, and send per-decision email notifications. ### Method ```python # Bulk-post decisions from CSV (columns: paper_number, decision, comment) with open('decisions.csv', 'rb') as f: venue.post_decisions(decisions_file=f.read()) # Update submissions with decision metadata (venueid, readers, bibtex) venue.post_decision_stage( reveal_authors_accepted=True, submission_readers=['everyone'] ) # Send per-decision email notifications venue.send_decision_notifications( decision_options=['Accept (Oral)', 'Accept (Poster)', 'Reject'], messages={ 'Accept (Oral)': 'Congratulations! Your paper {{submission_title}} ({{forum_url}}) has been accepted as an oral.', 'Accept (Poster)': 'Congratulations! Your paper {{submission_title}} ({{forum_url}}) has been accepted as a poster.', 'Reject': 'We regret to inform you that your paper {{submission_title}} ({{forum_url}}) was not accepted.' } ) ``` ``` -------------------------------- ### Get edges with filters Source: https://github.com/openreview/openreview-py/blob/master/examples.md Retrieves edges based on various filters, including invitation, head entity, and tail entity. Supports iteration over large datasets. ```APIDOC ## Get edges with filters ### Description Retrieves edges based on various filters, including invitation, head entity, and tail entity. Supports iteration over large datasets. ### Method GET (implied by `get_edges` and `iterget_edges`) ### Endpoint `/edges` (implied) ### Parameters #### Query Parameters - **invitation** (string) - Required - The invitation ID to filter edges by. - **head** (string) - Optional - Filter edges where the head entity matches this ID. - **tail** (string) - Optional - Filter edges where the tail entity matches this ID. ### Request Example ```python # All assignment edges for a paper edges = client.get_edges( invitation='VenueID/Reviewers/-/Assignment', head=paper_note_id ) # All assignments for a specific reviewer edges = client.get_edges( invitation='VenueID/Reviewers/-/Assignment', tail='~Reviewer_One1' ) # Iterate over large edge sets for edge in openreview.tools.iterget_edges( client, invitation='VenueID/Reviewers/-/Affinity_Score' ): print(f"{edge.head} -> {edge.tail}: {edge.weight}") ``` ### Response #### Success Response (200) - **edges** (list of objects) - A list of edge objects matching the specified filters. ``` -------------------------------- ### Configure AE-to-Paper Matching Source: https://github.com/openreview/openreview-py/blob/master/llm.txt Configure AE-to-paper matching, including affinity scores, conflicts, and quotas, using `journal.setup_ae_matching`. Requires a label. ```python journal.setup_ae_matching(label) ``` -------------------------------- ### Configure Firefox Selenium Driver Source: https://github.com/openreview/openreview-py/blob/master/README.md Download the appropriate geckodriver for your OS and place the executable in the `openreview-py/tests/drivers` directory to enable Selenium testing. ```bash # Download the proper Firefox Selenium driver for your OS [from GitHub](https://github.com/mozilla/geckodriver/releases), and place the `geckodriver` executable in the directory `openreview-py/tests/drivers`. When you are done your folder structure should look like this: # \-- openreview-py # \ \-- tests # \ \-- data # \ \-- drivers # \ │ \-- geckodriver ``` -------------------------------- ### Connect to OpenReview API using Environment Variables Source: https://github.com/openreview/openreview-py/blob/master/examples.md Connects to the OpenReview API by reading credentials and base URL from environment variables. The v2 API is used by default. ```python import os os.environ['OPENREVIEW_USERNAME'] = 'user@example.com' os.environ['OPENREVIEW_PASSWORD'] = 'your_password' os.environ['OPENREVIEW_API_BASEURL_V2'] = 'https://api2.openreview.net' client = openreview.api.OpenReviewClient() ```