Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

ppx-connectors

Outbound ingestion connectors for the Preference Profile Exchange (PPX).

Pull preference signals from services the user already uses, map them onto PPX claims, and propose updates through the provider — so writeback policy, review, and audit all apply uniformly.

Install

pip install ppx-connectors

Requires Python 3.11+. Published version: 0.1.0a1 (PyPI).

Alpha, tracking a draft specification. Expect breaking changes. The version is 0.1.0a1 on PyPI and 0.1.0-alpha.1 on npm — the same release in each ecosystem's required format.

Ship your own connector in three methods

from ppx_connectors import Connector, ConnectorContext, ProposedClaim, SourceSignal

class MyConnector(Connector):
    name = "my-source"
    writes_namespaces = ["my-domain"]
    interval_seconds = 60 * 60 * 12  # every 12h

    def fetch(self, ctx: ConnectorContext) -> list[SourceSignal]:
        # call the external API, return raw signals
        ...

    def to_claims(self, signals: list[SourceSignal]) -> list[ProposedClaim]:
        # map raw signals onto spec claims (pure function, no I/O)
        return [ProposedClaim(
            namespace="my-domain",
            key="some_preference",
            value=0.7,
            confidence=0.8,
            source={"kind": "imported", "origin": self.name},
        )]

Run a connector once (manual / cron-friendly)

from ppx_client import PpxClient
from ppx_connectors import ConnectorContext, run_once
from ppx_connectors.connectors import SpotifyConnector

client = PpxClient("https://api.provider.app")
ctx = ConnectorContext(
    client=client,
    grant_token=writeback_scoped_grant_token,
    credentials={"spotify_access_token": user_spotify_oauth_token},
)
result = run_once(SpotifyConnector(), ctx)
# → {"connector": "spotify", "signals": 150, "proposed": 6, "writeback": "proposal_created"}

Built-in connectors

Name Namespace Claim keys Status
SpotifyConnector music genre_preference, energy_preference, tempo_preference, valence_preference, danceability_preference, acousticness_preference, listening_intensity shipping
StravaConnector fitness activity_frequency, terrain_preference, cardio_load, pace_preference, outdoor_bias shipping
GoogleCalendarConnector core social_energy_preference, pace_preference, morning_evening_skew, weekend_activity shipping

Design notes

  • Separation of concerns. fetch() does I/O; to_claims() is pure. This makes claim-mapping testable without hitting external services, and reusable for replay / dry-run.
  • Spec-compliant writeback. All claims go through /v1/profile/propose-updates, so the user's writeback_policy is honored automatically. Under review_required the user sees every proposal before anything takes effect.
  • Confidence by volume. Pull-based inference has an inherent signal count; the built-in _conf_from_volume helper scales confidence linearly with observation count.
  • Every claim is attributed. source.kind = "imported" and source.origin = <connector-name> on every proposal. The user always knows who learned each claim.

License

Apache-2.0.

Metadata

Release files for ppx-connectors 0.1.0a4

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

Source distribution (sdist)

Source distribution for ppx-connectors 0.1.0a4
File Size Uploaded
ppx_connectors-0.1.0a4.tar.gz 14.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ppx-connectors 0.1.0a4
File Interpreter ABI Platform
ppx_connectors-0.1.0a4-py3-none-any.whl Python 3 none any Details

Total release size: 32.8 kB

Release files / ppx_connectors-0.1.0a4.tar.gz

Download URL ppx_connectors-0.1.0a4.tar.gz
Size 14.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5f7a74991825d59ac5eb7e27232550fb9672078cf9ac9dc75ab2b2780f0c483e
BLAKE2b-256 checksum
How to use checksums
5d59b59d73b1c3c815d2a033c9351dce9bda5ab6f3089552ff3922113a397c46
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / ppx_connectors-0.1.0a4-py3-none-any.whl

Download URL ppx_connectors-0.1.0a4-py3-none-any.whl
Size 18.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
69c7d80a07d2210515853b35e2a33b84e4e47d503cbcd8fbcc0c14b9e3b17129
BLAKE2b-256 checksum
How to use checksums
9284621841e993645b213c67180d7fdfdec24d8aa132fcd455fb2d339b5f9e9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3
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