Skip to content

Public API docs + v1.0 release #8

@JakeMG-INL

Description

@JakeMG-INL

What to build

Document EXPy's v1.0 public API surface and ship v1.0 as a pip-installable Python package. Rewrite the README to cover the full surface declared in ADR-0013 (packaging) and ADR-0014 (surface refinements): the eight Namespace members, the six-method EXIProcessor API (feature-gated via hasattr), the eight *Processor CLI binaries (each with six modes where supported), the public expy.v2gjson constructors, the typed EncodeError/DecodeError attribute contract, and the per-Namespace top-level envelope split. Add a CHANGELOG.md entry for v1.0 enumerating the surface. Tag v1.0 on main.

References: ADR-0013 (packaging), ADR-0014 (surface refinements). ADR-0003 and ADR-0012 are historical and superseded for v1.0 by these two.

Acceptance criteria

  • pyproject.toml ships an installable expy package (scikit-build-core or equivalent); pip install . in a fresh venv produces a working installation with the eight per-Namespace .so files bundled as package data
  • Public import paths are from expy import EXIProcessor, Namespace and from expy.v2gjson import sap, din, iso2, iso20_common, iso20_ac, iso20_dc, iso20_wpt, iso20_acdp
  • Namespace (renamed from ProtocolEnum) is documented with all eight members: SAP, DIN, ISO2, ISO20_COMMON, ISO20_AC, ISO20_DC, ISO20_WPT, ISO20_ACDP; EXIProcessor.__init__ takes namespace: Namespace
  • README documents the six-method EXIProcessor API (encode / decode for Document / Fragment / XmldsigFragment roots) and the hasattr-based feature-detection idiom for Fragment / XmldsigFragment on SAP and DIN
  • README documents the eight *Processor CLI binaries and their six modes (--encode, --decode, --encode-fragment, --decode-fragment, --encode-xmldsig, --decode-xmldsig), with the feature-gated subset on SAP and DIN absent from --help
  • README documents expy.v2gjson as public, with a naming-conventions note that identifiers mirror libcbv2g verbatim (non-PEP-8 casing such as costKindType, RelativeTimeIntervalType, EVSE_NotReady) and a pointer to per-file ruff N801,N802,N806 suppressions for strict-linting consumers
  • README documents the typed exception attribute contract: EncodeError and DecodeError carry rc: int, namespace: str, root: Literal["exiDocument", "exiFragment", "xmldsigFragment"]; str(e) remains informational
  • README documents the EVerest JSON shape ({"bytes": [...], "bytesLen": N}, "isUsed": true) and the per-Namespace top-level envelope split: DIN and ISO-2 use V2G_Message(Header=..., Body=...); SAP and the five ISO-20 Namespaces use raw {"<MessageName>": ...} or {"Body": {"<MessageName>": ...}}
  • CHANGELOG.md exists with a v1.0 entry enumerating the surface above
  • All Processor round-trip integration test suites pass on main
  • v1.0 git tag created on main
  • Human approval received before closing the issue

Blocked by

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationready-for-agentFully specified, ready for an AFK agent

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions