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.2.0.tar.gz (26.9 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.2.0-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ndp_ep-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d93fac7d991010af27d3a31ffe0b70d68a8e9011671462eddadc7fab79053399
MD5 1e0156094b3d2d79cdbe760468f54765
BLAKE2b-256 18f0ce7e204820d39d3864308e1dafd52296cd32a808bb06521e3518c9ce36b1

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ndp_ep-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 96ad5da7c5d328847a6e42fc2d216463b413148bd1d1759bd6860a6b882bfc2e
MD5 82b0e6ce23971ff4c90832ac43b41906
BLAKE2b-256 566ddde5966e362ed56be10995b8fbfef518d1728144dbe4a40c5bce49758c29

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