Skip to main content

A Python SDK for working with JSON:API specifications

Project description

Midil Kit

A Python SDK for working with JSON:API specifications. This library provides a comprehensive set of tools for creating, validating, and manipulating JSON:API documents according to the JSON:API specification.

Features

  • JSON:API Document Creation: Easily create JSON:API compliant documents
  • Validation: Built-in validation for JSON:API structures
  • Error Handling: Comprehensive error document creation
  • Type Safety: Full type hints and Pydantic models
  • Utility Functions: Helper functions for common JSON:API operations

Installation

Using Poetry (Recommended)

poetry add midil-kit

Using pip

pip install midil-kit

Quick Start

from jsonapi import (
    JSONAPIDocument,
    create_success_document,
    create_error_document,
    JSONAPIError
)

# Create a success document
data = {"id": "1", "type": "articles", "attributes": {"title": "JSON:API"}}
document = create_success_document(data)

# Create an error document
error = JSONAPIError(
    status="422",
    title="Validation Error",
    detail="The request was invalid"
)
error_document = create_error_document([error])

# Access document properties
print(document.jsonapi.version)  # "1.0"
print(document.data.attributes["title"])  # "JSON:API"

Usage Examples

Creating a Resource Document

from jsonapi import JSONAPIDocument, ResourceObject

# Create a resource object
resource = ResourceObject(
    id="1",
    type="articles",
    attributes={"title": "JSON:API", "content": "A specification for APIs"}
)

# Create a document with the resource
document = JSONAPIDocument(data=resource)

Working with Relationships

from jsonapi import JSONAPIDocument, ResourceObject, Relationship

# Create related resources
author = ResourceObject(id="1", type="authors", attributes={"name": "John Doe"})
article = ResourceObject(
    id="1",
    type="articles",
    attributes={"title": "JSON:API"},
    relationships={
        "author": Relationship(data=author)
    }
)

document = JSONAPIDocument(data=article)

Error Handling

from jsonapi import create_error_document, JSONAPIError, ErrorSource

# Create detailed error
error = JSONAPIError(
    status="422",
    title="Validation Error",
    detail="The request was invalid",
    source=ErrorSource(pointer="/data/attributes/title")
)

error_document = create_error_document([error])

API Reference

Core Classes

  • JSONAPIDocument: Main document class for JSON:API responses
  • ResourceObject: Represents a JSON:API resource
  • JSONAPIError: Represents an error in a JSON:API response
  • Relationship: Represents relationships between resources

Utility Functions

  • create_success_document(): Create a success document with data
  • create_error_document(): Create an error document
  • create_resource_identifier(): Create a resource identifier object

Development

Setup

  1. Clone the repository:
git clone <repository-url>
cd midil-kit
  1. Install dependencies:
poetry install
  1. Install pre-commit hooks:
poetry run pre-commit install

Running Tests

poetry run pytest

Code Formatting

poetry run black .
poetry run isort .

Type Checking

poetry run mypy .

Changelog Management

The project includes automated changelog generation based on conventional commit messages.

Preview changelog changes:

make changelog-preview

Update changelog with new commits:

make changelog

Create a new release:

make create-release

Bump version and prepare release:

make release

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass
  6. Submit a pull request

Commit Message Format

This project follows the Conventional Commits specification. Please use the following format for commit messages:

<type>(<scope>): <description>

[optional body]

[optional footer(s)]

Types:

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code
  • refactor: A code change that neither fixes a bug nor adds a feature
  • test: Adding missing tests or correcting existing tests
  • chore: Changes to the build process or auxiliary tools

Scopes:

  • jsonapi: JSON:API core functionality
  • docs: Documentation
  • ci: Continuous integration
  • deps: Dependencies

Examples:

feat(jsonapi): add support for sparse fieldsets
fix(jsonapi): resolve validation error in relationship serialization
docs: update README with usage examples
test: add tests for error document creation
chore: update dependencies

For breaking changes, start the commit body with BREAKING CHANGE::

feat(jsonapi): remove deprecated ResourceObject constructor

BREAKING CHANGE: The ResourceObject constructor signature has changed

License

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

Changelog

0.1.0

  • Initial release
  • Basic JSON:API document creation and validation
  • Error handling utilities
  • Type-safe Pydantic models

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

midil_kit-1.0.0.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

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

midil_kit-1.0.0-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file midil_kit-1.0.0.tar.gz.

File metadata

  • Download URL: midil_kit-1.0.0.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.0.1 CPython/3.13.2 Darwin/24.3.0

File hashes

Hashes for midil_kit-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f3bf5bef4ab66911e7a7085b88a2481b786dbbd0788726e73cc3e2cbb9475b72
MD5 236849d1640ddfe35741f48cccb4ea9c
BLAKE2b-256 54beae36774d6e89267beb2a64aa963f4b060ae21bd27c0d28c3fcb9b037e310

See more details on using hashes here.

File details

Details for the file midil_kit-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: midil_kit-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.0.1 CPython/3.13.2 Darwin/24.3.0

File hashes

Hashes for midil_kit-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3ce02a8a6e32f1904d2f49235933cc2c6a5178c36327ffb5fe8b604e86f01dfb
MD5 3fb12f6a993830d025a54efb0307f7f6
BLAKE2b-256 03d598a9345ffc56a711586ef23b8951c6a966e0fef7442048753b15e4542c80

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