Skip to main content

Python client library for NDP EP API

Project description

ndp-ep

CI codecov PyPI version Python versions

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.

Features

  • 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

Installation

pip install ndp-ep

Quick Start

from 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")

More Examples

For comprehensive examples and use cases, check out our:

API Coverage

Authentication

  • Token-based authentication
  • Username/password authentication

Organizations

  • list_organizations() - List all organizations
  • register_organization() - Create new organization
  • delete_organization() - Delete organization

Datasets and Resources

  • search_datasets() - Search datasets with advanced filters
  • advanced_search() - Advanced search with POST method
  • register_url() - Register URL resources
  • register_s3_link() - Register S3 resources
  • register_kafka_topic() - Register Kafka topics
  • register_general_dataset() - Register general datasets
  • update_url_resource() - Update URL resources
  • update_s3_resource() - Update S3 resources
  • update_kafka_topic() - Update Kafka topics
  • update_general_dataset() - Update general datasets (PUT)
  • patch_general_dataset() - Partially update general datasets (PATCH)
  • delete_resource_by_id() - Delete resource by ID
  • delete_resource_by_name() - Delete resource by name

Services

  • register_service() - Register new services

S3 Management

  • list_buckets() - List all S3 buckets
  • create_bucket() - Create new S3 bucket
  • get_bucket_info() - Get S3 bucket information
  • delete_bucket() - Delete S3 bucket
  • list_objects() - List objects in S3 bucket
  • upload_object() - Upload object to S3 bucket
  • download_object() - Download object from S3 bucket
  • delete_object() - Delete object from S3 bucket
  • get_object_metadata() - Get S3 object metadata
  • generate_presigned_upload_url() - Generate presigned upload URL
  • generate_presigned_download_url() - Generate presigned download URL

System Information

  • get_kafka_details() - Get Kafka connection details
  • get_system_status() - Check system status
  • get_system_metrics() - Get system metrics
  • get_jupyter_details() - Get Jupyter connection details

Development

Setting up development environment

# 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

Running tests

# 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

Code formatting and linting

# Format code
black ndp_ep tests

# Lint code
flake8 ndp_ep

# Type checking
mypy ndp_ep

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Add tests for your changes
  5. Ensure all tests pass and coverage is maintained
  6. Commit your changes (git commit -m 'Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Changelog

v0.1.0

  • 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ndp_ep-0.8.0.tar.gz (40.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ndp_ep-0.8.0-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file ndp_ep-0.8.0.tar.gz.

File metadata

  • Download URL: ndp_ep-0.8.0.tar.gz
  • Upload date:
  • Size: 40.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ndp_ep-0.8.0.tar.gz
Algorithm Hash digest
SHA256 c4d29d0a56526002489f7436213c229417ef72b7014c9bf6dcb875a967399c44
MD5 d97f2b1d6525335fa11b74bd948c5130
BLAKE2b-256 631e6c1baba775825bd809e3b36d84ca150e1085496723985f9e6f7e98218a6f

See more details on using hashes here.

File details

Details for the file ndp_ep-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: ndp_ep-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 37.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ndp_ep-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9553fe278de0f0ff6ec716f1e3560aa7732756e6a91151119dcd7856e0a6e135
MD5 8ffd3402cfd36de68961cbdaf544f955
BLAKE2b-256 08cd26ba6535eea42cfd5dd55ca0f1d4e501add54fd1251ae2db6b98903d33b6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page