Python library for the CoderPad Interview API.
pip install coderpad-pyThis is tested on Python 3.12+.
"""Example usage."""
import sys
from coderpad.client import CoderPad
client = CoderPad(api_key="your-api-key")
pad = client.pads.create(title="Interview", language="python")
_ = sys.stdout.write(pad.title)
for listed_pad in client.pads.list():
_ = sys.stdout.write(listed_pad.title)
org = client.organization.get()
_ = sys.stdout.write(org.organization_name)
for user in client.organization.users.list():
_ = sys.stdout.write(user.email)The organization users endpoint also supports server-side email filtering:
"""Filter organization users by email."""
from coderpad.client import CoderPad
client = CoderPad(api_key="your-api-key")
users = client.organization.users.list(email="person@example.com")The equivalent asynchronous operation is await client.organization.users.list(email="person@example.com").
HTTPX remains the default client family.
To opt in to HTTPX2, construct the HTTPX2 transport explicitly and pass it to the client.
The standard coderpad-py installation includes both client families.
"""Configure CoderPad to use HTTPX2."""
import sys
import httpx2
from coderpad.client import CoderPad
from coderpad.transports import HTTPX2Transport
transport = HTTPX2Transport(timeout=httpx2.Timeout(timeout=10))
with CoderPad(api_key="your-api-key", transport=transport) as client:
_ = sys.stdout.write(client.base_url)Use AsyncHTTPX2Transport with AsyncCoderPad for asynchronous calls.
The limits, proxy and timeout arguments passed to these transports accept HTTPX2 configuration objects.
Do not pass equivalent httpx objects across the package boundary.
If the Screen API should also use HTTPX2, pass a separate HTTPX2 transport as screen_transport.
Existing HTTPX users do not need to change anything. Migrating to HTTPX2 only requires selecting the new transport. The CoderPad client methods and returned models are unchanged.
Screen uses a separate API key and host from Interview:
"""List Screen campaigns and candidate tests."""
from coderpad import CoderPad
client = CoderPad(
api_key="your-interview-api-key",
screen_api_key="your-screen-api-key",
)
campaigns = client.screen.campaigns.list()
page = client.screen.tests.list(campaign_id=campaigns[0].id, limit=50)
assert page.pagination is not NoneScreen test listings use offset pagination.
While page.pagination.has_more_items is true, request the next page with start=page.pagination.next_start.
Use SCREEN_EU_BASE_URL as screen_base_url for EU-hosted organizations.
All Screen operations have equivalent methods on AsyncCoderPad.
Set CODERPAD_API_KEY for the Interview API.
Optionally set CODERPAD_SCREEN_API_KEY for Screen.
Then construct a client with CoderPad.from_env() or AsyncCoderPad.from_env():
"""Load API keys from the environment."""
import sys
from coderpad.client import CoderPad
client = CoderPad.from_env()
_ = sys.stdout.write(client.base_url)See the full documentation.
Use client.languages.list() to discover available environments and client.languages.get(language="multifile_python") to retrieve starter code and environment context before authoring a project.
Both methods return the complete catalog JSON and are also available on AsyncCoderPad.
Create a project pad with client.pads.create(language="multifile_python").
Pass file_contents using QuestionFileContent overlays, or pass a zip_file or directory path to replace the template files.
A question ID and starter content are mutually exclusive.
Project pad responses can have null language and contents.
Retrieve files through client.pads.get_environment(environment_id=...) using the pad's environment IDs.