Python SDK for the CommonGrants protocol
Project description
CommonGrants Python SDK
A Python SDK for interacting with the CommonGrants protocol, providing a type-safe interface for managing grant opportunities.
Features
- Type-Safe Models: Built with Pydantic v2 for robust data validation and serialization
- Comprehensive Schema Support: Full implementation of the CommonGrants protocol schemas
- Modern Python: Requires Python 3.11+ for optimal performance and type safety
- Extensible: Easy to extend with custom fields and validation
Installation
# Using pip
pip install common-grants-sdk
# Using Poetry
poetry add common-grants-sdk
Quick Start
from datetime import datetime, date, UTC
from uuid import uuid4
from common_grants_sdk.schemas.pydantic import (
Event,
Money,
OpportunityBase,
OppFunding,
OppStatus,
OppStatusOptions,
OppTimeline,
)
# Create a new opportunity
opportunity = OpportunityBase(
id=uuid4(),
title="Research Grant 2024",
description="Funding for innovative research projects",
status=OppStatus(
value=OppStatusOptions.OPEN,
description="This opportunity is currently accepting applications"
),
created_at=datetime.now(UTC),
last_modified_at=datetime.now(UTC),
funding=OppFunding(
total_amount_available=Money(amount="100000.00", currency="USD"),
min_award_amount=Money(amount="10000.00", currency="USD"),
max_award_amount=Money(amount="50000.00", currency="USD"),
estimated_award_count=5
),
key_dates=OppTimeline(
app_opens=Event(
name="Application Opens",
date=date(2024, 1, 1),
description="Applications open"
),
app_deadline=Event(
name="Application Deadline",
date=date(2024, 3, 31),
description="Applications close"
)
)
)
# Serialize to JSON
json_data = opportunity.dump_json()
# Deserialize from JSON
loaded_opportunity = OpportunityBase.from_json(json_data)
Core Components
Base Model
CommonGrantsBaseModel: Base class for all models, provides common serialization and validation methodsSystemMetadata: Tracks creation and modification timestamps for records
Opportunity Models
OpportunityBase: Core opportunity modelOppFunding: Funding details and constraintsOppStatus&OppStatusOptions: Opportunity status trackingOppTimeline: Key dates and milestones
Field Types
Money: Represents monetary amounts with currencyDecimalString: Validated string representing a decimal numberEvent: Union of event typesEventType: Enum for event type discriminationSingleDateEvent: Event with a single dateDateRangeEvent: Event with a start and end dateOtherEvent: Event with a custom description or recurrenceCustomField: Flexible field type for custom dataCustomFieldType: Enum for custom field value typesISODate: Alias fordatetime.date(ISO 8601 date)ISOTime: Alias fordatetime.time(ISO 8601 time)UTCDateTime: Alias fordatetime.datetime(UTC timestamp)
Transformation Utilities
The SDK includes a utility for transforming data according to a mapping specification:
transform_from_mapping()supports extracting fields, switching on values, and reshaping data dictionaries
Example: Data Transformation
from common_grants_sdk.utils.transformation import transform_from_mapping
source_data = {
"opportunity_id": 12345,
"opportunity_title": "Research into ABC",
"opportunity_status": "posted",
"summary": {
"award_ceiling": 100000,
"award_floor": 10000,
"forecasted_close_date": "2025-07-15",
"forecasted_post_date": "2025-05-01",
},
}
mapping = {
"id": { "field": "opportunity_id" },
"title": { "field": "opportunity_title" },
"status": {
"switch": {
"field": "opportunity_status",
"case": {
"posted": "open",
"closed": "closed",
},
"default": "custom",
}
},
"funding": {
"minAwardAmount": {
"amount": { "field": "summary.award_floor" },
"currency": "USD",
},
"maxAwardAmount": {
"amount": { "field": "summary.award_ceiling" },
"currency": "USD",
},
},
"keyDates": {
"appOpens": { "field": "summary.forecasted_post_date" },
"appDeadline": { "field": "summary.forecasted_close_date" },
},
}
transformed_data = transform_from_mapping(source_data, mapping)
assert transformed_data == {
"id": uuid4(),
"title": "Research into ABC",
"status": "open",
"funding": {
"minAwardAmount": { "amount": 10000, "currency": "USD" },
"maxAwardAmount": { "amount": 100000, "currency": "USD" },
},
"keyDates": {
"appOpens": "2025-05-01",
"appDeadline": "2025-07-15",
},
}
HTTP Client
The SDK includes a type-safe HTTP client for interacting with CommonGrants Protocol-compliant APIs. The client provides a Pythonic interface with automatic authentication, request/response parsing, and pagination support.
from common_grants_sdk.client import Client, Auth
from common_grants_sdk.client.config import Config
# Initialize client
config = Config(base_url="https://api.example.org")
client = Client(config=config, auth=Auth.api_key("YOUR_API_KEY"))
# Get a specific opportunity
opportunity = client.opportunity.get("<opportunity_id>")
print(opportunity.title)
# List opportunities
response = client.opportunity.list(page=1)
for opp in response.items:
print(opp.id, opp.title)
For detailed documentation, examples, and configuration options, see the HTTP Client README.
License
See LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file common_grants_sdk-0.4.1.tar.gz.
File metadata
- Download URL: common_grants_sdk-0.4.1.tar.gz
- Upload date:
- Size: 25.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.2 CPython/3.11.14 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
572b62473bf8cd0828c474a245495ef13f89f4d7a8853c3601f84108f9bc7cd4
|
|
| MD5 |
797865060895353eb3ce9c200b179736
|
|
| BLAKE2b-256 |
34d06ec5b316a5d5032ade7f3a7f8dd82c7b86006c6df2bfbf3f69f986b2d745
|
File details
Details for the file common_grants_sdk-0.4.1-py3-none-any.whl.
File metadata
- Download URL: common_grants_sdk-0.4.1-py3-none-any.whl
- Upload date:
- Size: 41.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.2 CPython/3.11.14 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c170a24358b78e6427add61c480047c964d7a0f7afb8bfae53a15d29f401db8c
|
|
| MD5 |
7106c46a50b8633f7162f22b3734ebdf
|
|
| BLAKE2b-256 |
10b73b0d3f6f8ab107f6b85532962bea746bce0da35f1d887b8a67ba3e632133
|