Skip to main content

apmodel

PyPI - Version Tests pre-commit.ci status

apmodel is a Python library that provides model implementations for various decentralized social web protocols.

It is designed to easily parse and handle JSON data from sources like Mastodon, Misskey, and other Fediverse software.

Features

  • Automatic Model Resolution: The apmodel.load function automatically deserializes a JSON object into the appropriate Python object by reading its type field. If no matching model is found, the original dictionary is returned.
  • Flexible Deserialization: Any properties in the JSON that do not have a corresponding field in the model are collected into an model_extra dictionary. This ensures no data is lost.
  • Type Hinting: Fully type-hinted for a better development experience and robust static analysis.

Installation

pip install apmodel

# uv
uv add apmodel

Usage

Here is a basic example of how to parse an ActivityStreams 2.0 Note object from a JSON string.

import apmodel

# Example JSON from a Fediverse server
json_data = {
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/users/alice/statuses/1",
  "type": "Note",
  "published": "2023-12-25T12:00:00Z",
  "attributedTo": "https://example.com/users/alice",
  "content": "<p>Hello, world!</p>",
  "to": ["https://www.w3.org/ns/activitystreams#Public"],
  "cc": ["https://example.com/users/alice/followers"]
}

# Load the JSON into an apmodel object
obj = apmodel.load(json_data)

# Now you can access properties with type safety
if isinstance(obj, apmodel.vocab.Note):
    print(f"Type: {obj.type}")
    print(f"Content: {obj.content}")
    print(f"Published: {obj.published}")

# >> Type: Note
# >> Content: <p>Hello, world!</p>
# >> Published: 2023-12-25 12:00:00+00:00

Documentation

https://fedi-libs.github.io/apmodel

Supported Specifications

apmodel provides models for the following specifications:

  • Activity Streams 2.0: Core types like Object, Activity, Collection, and Link.
  • Activity Vocabulary: All types.
  • Security Vocabulary v1: CryptographicKey (Key).
  • Controlled Identifiers v1.0: Multikey and DataIntegrityProof.
  • schema.org: PropertyValue.
  • NodeInfo 2.0/2.1
  • Litepub: EmojiReact
  • Others: Emoji and Hashtag

Development

This project uses Task for running scripts. You need to install it first.

  • Setup dev environment:

    task
    
  • Run tests with Pytest:

    task test
    
  • Build packages for PyPI:

    task build
    
  • Development Document:

    task docs:dev
    

License

MIT License

Metadata

Release files for apmodel 0.5.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for apmodel 0.5.4
File Size Uploaded
apmodel-0.5.4.tar.gz 222.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for apmodel 0.5.4
File Interpreter ABI Platform
apmodel-0.5.4-py3-none-any.whl Python 3 none any Details

Total release size: 291.4 kB

Release files / apmodel-0.5.4.tar.gz

Download URL apmodel-0.5.4.tar.gz
Size 222.5 kB
Tags Source
SHA-256 checksum
How to use checksums
526a830fe10e3b2b6ba18ddb390e04ecd5d77490d6a57adc480c5ce71565a4f3
BLAKE2b-256 checksum
How to use checksums
b56dbbc5cb591f7e1dc3c766752f12755e096294eba1b29453f44d7adb2b2964
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 28, 2026.

Transparency log

Release files / apmodel-0.5.4-py3-none-any.whl

Download URL apmodel-0.5.4-py3-none-any.whl
Size 69.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0f1dc4c1891b9456d77cde3c1c0f929233f66419e4c7365634d54bab422a7734
BLAKE2b-256 checksum
How to use checksums
a974560b6f4bf03d1de0010ea6e3049240826d3b8e2fdc46ddd730cbc659138d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.4 This release

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page