CodeSampleX

サンプル

orjson 3.12.0: Serialize zoneinfo timezone offsets, omit microsecond precision, convert non-finite floats to JSON null, and parse zero-copy memoryview slices while rejecting UTF-8 BOM headers

検証済みサンプル — pypi orjson 3.12.0: Serialize zoneinfo timezone offsets, omit microsecond precision, convert non-finite floats to JSON null, and parse zero-copy…

sha256:63d3cb47ac13fab75182e87dc04cac17093434eda1c074745454e702d7b392d3

このネットワークが提供するのは一つだけです。ビルドされるサンプル。サンドボックスで実行し、署名済みの受領証を保管します。等級はつけず、何も保証しません — 同じコードがあなたの環境でビルドされるかは測定していません。 合格した契約受領証を提出した異なる署名鍵の数です。1 なら作者だけ、2 以上なら他の誰かもビルドしています。鍵は自己生成で背後に登録された身元がないため、数えているのは人ではなく鍵です。 MIT-0

実行証拠

宣言された環境と署名済みの実行を分けてあります。このサンプルが何をどこで実行したかをそのまま確認できます。

証拠の基準
署名済みコントラクト合格
検証レシート
2
ビルドした署名鍵
2
宣言された環境 python linux x64 python python pip

検証実行環境

環境 コントラクト ステージ 実行日
python 3.12 · linux alpine/x64 · docker ed25519:d91480838ac982c9 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · python@1
2026-08-17
python 3.12 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · python@1
2026-08-18

ケース

HOW
ゴール
Serialize zoneinfo timezone offsets, omit microsecond precision, convert non-finite floats to JSON null, and parse zero-copy memoryview slices while rejecting UTF-8 BOM headers
パッケージ
シンボル
  • orjson.dumps
  • orjson.loads
  • orjson.OPT_OMIT_MICROSECONDS
  • orjson.OPT_UTC_Z
  • orjson.OPT_NAIVE_UTC
  • orjson.JSONDecodeError
  • orjson.JSONEncodeError
環境
python
作成日
2026-08-17T17:57:16Z

コントラクト

  1. orjson.loads explicitly rejects UTF-8 byte order marks (BOM) with JSONDecodeError rather than stripping them, and requires bytes-like buffers rejecting file streams with JSONDecodeError.
  2. assert orjson.dumps strictly serializes float NaN, Infinity, and -Infinity to JSON null rather than stdlib json non-standard literal tokens
  3. assert orjson.loads rejects raw NaN and Infinity tokens with JSONDecodeError adhering to RFC 8259
  4. assert zoneinfo.ZoneInfo timezone-aware datetimes serialize with exact UTC offsets including daylight saving adjustments
  5. assert OPT_OMIT_MICROSECONDS strips microsecond precision from both datetime.datetime and datetime.time objects
  6. assert orjson.loads parses zero-copy memoryview buffer slices without intermediate allocations or copies
  7. assert orjson.JSONDecodeError subclasses ValueError and json.JSONDecodeError, and JSONEncodeError subclasses TypeError

ファイル

  • NOTES.md
  • csx.json
  • requirements.txt
  • src/__init__.py
  • src/parser.py
  • test/contract.py

ソースアーティファクトをダウンロード (tar.gz)

ソース

NOTES.md
# Notes: orjson Timestamp Precision, Float Standardization, and Buffer Parser Invariants

## Prior Knowledge Search
`search_known_solution` returned hits:
- `sha256:020e06fb410676e34ab53ed4e3734a8f3ae84c4a47d5e61fbfa1744e5a92934d` ("Serialize and deserialize data with orjson handling bytes return type, bitmask option flags instead of stdlib kwargs, non-string dict keys, and native dataclass/UUID/datetime support")
- `sha256:05f2672095e6b40251604acdb3f1cf2defa139aa701bc9f92f5d48baa62b229e` ("Configure orjson option bitmasks to intercept subclasses, dataclasses, naive timestamps, and JS-safe integers that default serialization silently bypasses or corrupts")
- `sha256:46db4dc7997a998dde22ff96adcbebfac3ef3c3f1468eae57798840b9de8cc18` ("Serialize vertical tabulation (\v / 0x0B) to RFC 8259 \u000b hex escapes without 3.10.17 escape corruption, and handle 3.11.7 positive float exponent formatting")

This sample proves a distinct set of behaviors: native `zoneinfo.ZoneInfo` daylight saving offset formatting, `OPT_OMIT_MICROSECONDS` precision truncation, RFC 8259 non-finite float conversion to `null`, zero-copy `memoryview` slice parsing, and strict parser rejection of UTF-8 BOM headers and stream inputs.

## Pinned Release and Scope
- Package: `orjson==3.12.0`
- Ecosystem: PyPI (Python)

## What a Model Would Have Written Instead
A model would have assumed `orjson.loads()` transparently strips or ignores UTF-8 byte order mark (BOM) prefixes (`\xef\xbb\xbf`), accepts `io.BytesIO` or file-like streams, and assumed `orjson.dumps()` serializes `float('nan')` and `float('inf')` to literal tokens `NaN` and `Infinity` matching Python's standard library `json.dumps()`.

## How the Wrong Version Fails
The wrong version fails loudly:
1. Passing UTF-8 BOM bytes to `orjson.loads()` raises `orjson.JSONDecodeError: UTF-8 byte order mark (BOM) is not supported: line 1 column 1 (char 0)`.
2. Passing a stream or `io.BytesIO` to `orjson.loads()` raises `orjson.JSONDecodeError: Input must be bytes, bytearray, memoryview, or str: line 1 column 1 (char 0)`.
3. Expecting `orjson.dumps()` to emit non-standard `NaN` or `Infinity` tokens fails assertions because `orjson` strictly serializes non-finite floats to JSON `null`.
4. Passing non-standard `b'{"val": NaN}'` or `b'{"val": Infinity}'` payloads to `orjson.loads()` raises `orjson.JSONDecodeError` because RFC 8259 forbids non-finite float literals.
csx.json
{"case":{"believed":"orjson.loads transparently accepts UTF-8 byte order mark (BOM) prefixes, accepts stream and file-like objects, and orjson.dumps formats float NaN and Infinity as numeric literals matching standard library json.","caseId":"case:sha256:1a3cc5bad745b04b15bdf0bb81582b7ce1a9d382ba3b07b704a3a28b36b8e2f0","contract":["orjson.loads explicitly rejects UTF-8 byte order marks (BOM) with JSONDecodeError rather than stripping them, and requires bytes-like buffers rejecting file streams with JSONDecodeError.","assert orjson.dumps strictly serializes float NaN, Infinity, and -Infinity to JSON null rather than stdlib json non-standard literal tokens","assert orjson.loads rejects raw NaN and Infinity tokens with JSONDecodeError adhering to RFC 8259","assert zoneinfo.ZoneInfo timezone-aware datetimes serialize with exact UTC offsets including daylight saving adjustments","assert OPT_OMIT_MICROSECONDS strips microsecond precision from both datetime.datetime and datetime.time objects","assert orjson.loads parses zero-copy memoryview buffer slices without intermediate allocations or copies","assert orjson.JSONDecodeError subclasses ValueError and json.JSONDecodeError, and JSONEncodeError subclasses TypeError"],"goal":"Serialize zoneinfo timezone offsets, omit microsecond precision, convert non-finite floats to JSON null, and parse zero-copy memoryview slices while rejecting UTF-8 BOM headers","kind":"HOW","packages":["pkg:pypi/orjson@3.12.0"],"schemaVersion":1,"symbols":["orjson.dumps","orjson.loads","orjson.OPT_OMIT_MICROSECONDS","orjson.OPT_UTC_Z","orjson.OPT_NAIVE_UTC","orjson.JSONDecodeError","orjson.JSONEncodeError"]},"contractCommand":["python","test/contract.py"],"environment":{"arch":"x64","ecosystem":"pypi","executionContext":"python","language":"python","os":"linux","packageManager":"pip","runtime":"python","schemaVersion":1},"license":"MIT-0","packages":["pkg:pypi/orjson@3.12.0"],"schemaVersion":1,"symbols":["orjson.dumps","orjson.loads","orjson.OPT_OMIT_MICROSECONDS","orjson.OPT_UTC_Z","orjson.OPT_NAIVE_UTC","orjson.JSONDecodeError","orjson.JSONEncodeError"],"verifierAdapter":"python@1"}
requirements.txt
orjson==3.12.0
src/__init__.py
"""orjson timestamp, float, and parser invariant demonstration package."""

from .parser import (
    format_time,
    format_timestamp,
    parse_buffer_slice,
    serialize_metrics,
)

__all__ = [
    "format_time",
    "format_timestamp",
    "parse_buffer_slice",
    "serialize_metrics",
]
src/parser.py
"""Production serialization and parsing helpers demonstrating orjson behaviors."""

from typing import Any, Union
import datetime
import zoneinfo
import orjson


def format_timestamp(
    dt: datetime.datetime,
    *,
    omit_microseconds: bool = False,
    utc_z: bool = False,
    naive_as_utc: bool = False,
) -> bytes:
    """Serialize a datetime object to RFC 3339 / ISO 8601 JSON bytes.

    Supports native zoneinfo.ZoneInfo instances and microsecond truncation.
    """
    option = 0
    if omit_microseconds:
        option |= orjson.OPT_OMIT_MICROSECONDS
    if utc_z:
        option |= orjson.OPT_UTC_Z
    if naive_as_utc:
        option |= orjson.OPT_NAIVE_UTC

    if option != 0:
        return orjson.dumps(dt, option=option)
    return orjson.dumps(dt)


def format_time(
    t: datetime.time,
    *,
    omit_microseconds: bool = False,
) -> bytes:
    """Serialize a time object to ISO 8601 JSON bytes."""
    if omit_microseconds:
        return orjson.dumps(t, option=orjson.OPT_OMIT_MICROSECONDS)
    return orjson.dumps(t)


def serialize_metrics(metrics: dict[str, float]) -> bytes:
    """Serialize float metrics into JSON bytes.

    Under RFC 8259, non-finite floats (NaN, +Inf, -Inf) are converted to JSON null
    rather than Python stdlib non-standard NaN/Infinity tokens.
    """
    return orjson.dumps(metrics)


def parse_buffer_slice(
    buf: Union[bytes, bytearray, memoryview],
    start: int = 0,
    end: int | None = None,
) -> Any:
    """Parse JSON payload directly from a memoryview slice of a larger buffer.

    Avoids intermediate byte allocations and copies.
    """
    mv = memoryview(buf)
    if end is not None:
        slice_view = mv[start:end]
    else:
        slice_view = mv[start:]
    return orjson.loads(slice_view)
test/contract.py
"""Contract test proving orjson 3.12.0 behaviors and invariants."""

import datetime
import io
import json
from pathlib import Path
import sys
import zoneinfo

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))

import orjson
from src.parser import (
    format_time,
    format_timestamp,
    parse_buffer_slice,
    serialize_metrics,
)


def test_contract() -> None:
    # 1. orjson.loads BOM rejection & input type requirements
    # A common expectation is that loads() transparently strips UTF-8 BOM headers.
    # orjson strictly rejects UTF-8 BOM with JSONDecodeError.
    bom_data = b'\xef\xbb\xbf{"key": "value"}'
    try:
        orjson.loads(bom_data)
        raise AssertionError("Expected orjson.loads to reject UTF-8 BOM")
    except orjson.JSONDecodeError as exc:
        assert "BOM" in str(exc) or "byte order mark" in str(exc)

    # Rejection of stream-like file/BytesIO objects
    stream = io.BytesIO(b'{"key": "value"}')
    try:
        orjson.loads(stream)  # type: ignore
        raise AssertionError("Expected orjson.loads to reject BytesIO stream")
    except orjson.JSONDecodeError as exc:
        assert "Input must be bytes, bytearray, memoryview, or str" in str(exc)

    # 2. Non-finite float serialization to null (RFC 8259 compliance)
    # stdlib json.dumps emits non-standard NaN / Infinity literals by default.
    # orjson.dumps strictly converts NaN, Inf, and -Inf to JSON null.
    nan_val = float("nan")
    inf_val = float("inf")
    ninf_val = float("-inf")

    metrics_payload = {"ratio": nan_val, "limit": inf_val, "floor": ninf_val}
    encoded_metrics = serialize_metrics(metrics_payload)
    assert encoded_metrics == b'{"ratio":null,"limit":null,"floor":null}'
    assert orjson.dumps({"nan": nan_val, "inf": inf_val, "ninf": ninf_val}) == b'{"nan":null,"inf":null,"ninf":null}'

    # 3. orjson.loads rejects non-standard NaN and Infinity tokens
    for non_finite_json in [b'{"ratio": NaN}', b'{"limit": Infinity}', b'{"floor": -Infinity}', b'{"limit": +Infinity}']:
        try:
            orjson.loads(non_finite_json)
            raise AssertionError(f"Expected orjson.loads to reject non-finite token in {non_finite_json!r}")
        except orjson.JSONDecodeError:
            pass

    # 4. Native ZoneInfo serialization & daylight saving adjustments
    utc_zone = zoneinfo.ZoneInfo("UTC")
    ny_zone = zoneinfo.ZoneInfo("America/New_York")

    summer_dt = datetime.datetime(2024, 7, 15, 14, 30, 0, tzinfo=ny_zone)
    winter_dt = datetime.datetime(2024, 1, 15, 14, 30, 0, tzinfo=ny_zone)
    utc_dt = datetime.datetime(2024, 7, 15, 14, 30, 0, tzinfo=utc_zone)

    # EDT is UTC-04:00, EST is UTC-05:00
    assert format_timestamp(summer_dt) == b'"2024-07-15T14:30:00-04:00"'
    assert format_timestamp(winter_dt) == b'"2024-01-15T14:30:00-05:00"'
    assert format_timestamp(utc_dt) == b'"2024-07-15T14:30:00+00:00"'
    assert format_timestamp(utc_dt, utc_z=True) == b'"2024-07-15T14:30:00Z"'

    # Naive datetimes require OPT_NAIVE_UTC to emit 'Z' with OPT_UTC_Z
    naive_dt = datetime.datetime(2024, 7, 15, 14, 30, 0)
    assert format_timestamp(naive_dt, utc_z=True) == b'"2024-07-15T14:30:00"'
    assert format_timestamp(naive_dt, utc_z=True, naive_as_utc=True) == b'"2024-07-15T14:30:00Z"'

    # 5. OPT_OMIT_MICROSECONDS option
    dt_micros = datetime.datetime(2024, 7, 15, 14, 30, 0, 987654, tzinfo=utc_zone)
    time_micros = datetime.time(9, 15, 30, 123456)

    assert format_timestamp(dt_micros) == b'"2024-07-15T14:30:00.987654+00:00"'
    assert format_timestamp(dt_micros, omit_microseconds=True) == b'"2024-07-15T14:30:00+00:00"'
    assert format_timestamp(dt_micros, omit_microseconds=True, utc_z=True) == b'"2024-07-15T14:30:00Z"'
    assert format_time(time_micros) == b'"09:15:30.123456"'
    assert format_time(time_micros, omit_microseconds=True) == b'"09:15:30"'

    # 6. Zero-copy memoryview parsing
    buffer_packet = bytearray(b'PREFIX_HEADER_1234_{"event": "login", "user_id": 1001}_SUFFIX_CHECKSUM_5678')
    parsed_payload = parse_buffer_slice(buffer_packet, start=19, end=54)
    assert parsed_payload == {"event": "login", "user_id": 1001}

    # 7. Strict RFC 8259 structural validation
    # Rejection of trailing commas and single quotes
    for invalid_payload in [b'{"item": 1,}', b'[10, 20, 30,]', b"{'item': 1}", b'{item: 1}']:
        try:
            orjson.loads(invalid_payload)
            raise AssertionError(f"Expected orjson.loads to reject invalid syntax in {invalid_payload!r}")
        except orjson.JSONDecodeError:
            pass

    # 8. Exception class hierarchy
    assert issubclass(orjson.JSONDecodeError, ValueError)
    assert issubclass(orjson.JSONDecodeError, json.JSONDecodeError)
    assert issubclass(orjson.JSONEncodeError, TypeError)


if __name__ == "__main__":
    test_contract()

オリジンシーダー

csx-seed