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.3.0.tar.gz (32.6 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.3.0-py3-none-any.whl (32.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ndp_ep-0.3.0.tar.gz
  • Upload date:
  • Size: 32.6 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.3.0.tar.gz
Algorithm Hash digest
SHA256 9785034d330cec43b4b6871220da594a3447b795ea12a8cda05788118b45c2c0
MD5 a7927f2f8cbe2811638942c8103076a5
BLAKE2b-256 cd47c22d6ecf5858fba470fdcb4906326c92c634e0e8409bbb6b2909e29cc403

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ndp_ep-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 32.4 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 348b12448fdd10960b5f44ef2fd72ea0f8f47b84d19f12d4e8c88b378aab4366
MD5 d6aae59812f193add83ef43a68c82e83
BLAKE2b-256 19c3b3091650efbfcfac4c9a59a6d9e235df925f6ffad5911f4871c63587319f

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