A Python client library for interacting with the NDP EP API. This library provides a simple and intuitive interface for managing datasets, organizations, resources, and services through the API.
- Complete API Coverage: Support for all API endpoints including Kafka topics, S3 resources, URL resources, organizations, and services
- Authentication: Token-based and username/password authentication
- Search Functionality: Advanced search capabilities across datasets and resources
- Error Handling: Comprehensive error handling with meaningful error messages
- Type Hints: Full type hint support for better IDE integration
- Testing: Extensive test coverage (>70%) with unit and integration tests
pip install ndp-epfrom ndp_ep import APIClient
# Initialize client with token
client = APIClient(
base_url="https://your-api-endpoint.com",
token="your-access-token"
)
# List organizations
organizations = client.list_organizations()
print(organizations)
# Search datasets
results = client.search_datasets(
terms=["climate", "temperature"],
server="global"
)
# Register a new organization
org_data = {
"name": "my_organization",
"title": "My Organization",
"description": "A sample organization"
}
response = client.register_organization(org_data)
# Register a service
service_data = {
"service_name": "user_auth_api",
"service_title": "User Authentication API",
"owner_org": "services",
"service_url": "https://api.example.com/auth",
"service_type": "API",
"notes": "RESTful API for user authentication"
}
response = client.register_service(service_data)
# S3 Management Examples
buckets = client.list_buckets()
client.create_bucket("my-data-bucket")
# Upload and download files
with open("data.csv", "rb") as f:
client.upload_object("my-data-bucket", "datasets/data.csv", f)
file_content = client.download_object("my-data-bucket", "datasets/data.csv")
# Generate presigned URLs for secure file sharing
upload_url = client.generate_presigned_upload_url("my-data-bucket", "new-file.txt")
download_url = client.generate_presigned_download_url("my-data-bucket", "data.csv")For comprehensive examples and use cases, check out our:
- Token-based authentication
- Username/password authentication
list_organizations()- List all organizationsregister_organization()- Create new organizationdelete_organization()- Delete organization
search_datasets()- Search datasets with advanced filtersadvanced_search()- Advanced search with POST methodregister_url()- Register URL resourcesregister_s3_link()- Register S3 resourcesregister_kafka_topic()- Register Kafka topicsregister_general_dataset()- Register general datasetsupdate_url_resource()- Update URL resourcesupdate_s3_resource()- Update S3 resourcesupdate_kafka_topic()- Update Kafka topicsupdate_general_dataset()- Update general datasets (PUT)patch_general_dataset()- Partially update general datasets (PATCH)delete_resource_by_id()- Delete resource by IDdelete_resource_by_name()- Delete resource by name
register_service()- Register new services
list_buckets()- List all S3 bucketscreate_bucket()- Create new S3 bucketget_bucket_info()- Get S3 bucket informationdelete_bucket()- Delete S3 bucketlist_objects()- List objects in S3 bucketupload_object()- Upload object to S3 bucketdownload_object()- Download object from S3 bucketdelete_object()- Delete object from S3 bucketget_object_metadata()- Get S3 object metadatagenerate_presigned_upload_url()- Generate presigned upload URLgenerate_presigned_download_url()- Generate presigned download URL
get_kafka_details()- Get Kafka connection detailsget_system_status()- Check system statusget_system_metrics()- Get system metricsget_jupyter_details()- Get Jupyter connection details
# Clone the repository
git clone https://github.com/sci-ndp/ndp-ep-py.git
cd ndp-ep-py
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install development dependencies
pip install -e .
pip install -r requirements-dev.txt# Run all tests
pytest
# Run with coverage
pytest --cov=ndp_ep --cov-report=html
# Run specific test categories
pytest -m unit # Unit tests only
pytest -m integration # Integration tests only# Format code
black ndp_ep tests
# Lint code
flake8 ndp_ep
# Type checking
mypy ndp_ep- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for your changes
- Ensure all tests pass and coverage is maintained
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Initial release
- Complete API coverage for all endpoints
- Authentication support (token and username/password)
- Search functionality
- Resource management (URL, S3, Kafka)
- Organization management
- Comprehensive testing suite