matelab-python-sdk 0.1.0a17__tar.gz → 0.1.0a18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/CHANGELOG.md +11 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/PKG-INFO +31 -17
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/README.md +30 -16
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/contracts/matelab-integration-v1.lock.json +3 -3
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/contracts/matelab-integration-v1.openapi.yaml +26 -5
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/docs/operation-coverage.yaml +24 -24
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/pyproject.toml +1 -1
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/_generated/models.py +1 -1
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_generation.py +3 -3
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/uv.lock +1 -1
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/.env.example +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/.github/workflows/release.yml +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/.gitignore +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/AGENTS.md +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/CONTEXT.md +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/LICENSE +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/NOTICE +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/scripts/check_installed_package.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/scripts/check_release.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/scripts/generate_models.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/__init__.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/_generated/__init__.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/_hashes.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/_transport.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/_wire_validation.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/client.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/__init__.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/_attachment_content.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/cloud_drive.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/groups.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/literature.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/notebooks.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/records.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/templates.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/uploads.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/users.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/errors.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/py.typed +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/session.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/streaming.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/conftest.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/provider/test_provider_smoke.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_async_attachment_upload.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_client.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_cloud_drive.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_comments_and_downloads.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_consumer_smoke.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_errors.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_extended_records.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_groups.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_notebook_lifecycle.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_notebooks.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_operation_coverage.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_record_lifecycle.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_record_mutations.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_records.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_release.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_streaming.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_template_lifecycle.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_templates.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_transport.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_uploads_and_literature.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_users.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/typing/consumer.py +0 -0
- {matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/typing/pyproject.toml +0 -0
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
This file records release-to-release changes and migration impact. It is not the authority for the current interface;
|
|
4
4
|
see [README.md](README.md) for current behavior and [AGENTS.md](AGENTS.md) for maintenance policy.
|
|
5
5
|
|
|
6
|
+
## 0.1.0a18 - 2026-08-23
|
|
7
|
+
|
|
8
|
+
- Adopts immutable `matelab-spec v0.4.2` at commit `a51483f910440fbbbc3693cc32566482064bb3ab` and OpenAPI
|
|
9
|
+
SHA-256 `4c92b96ba3dfe7122b30b4db2e2c8054c06018291c8c52c15482112b51a32920`. The wire schema, methods,
|
|
10
|
+
paths, encodings, operation count, and public interface are unchanged.
|
|
11
|
+
- Records that compatibility evidence remains the stable Provider revision
|
|
12
|
+
`59101f006e9fd6d6ce0b951dfd34695a7949b54f`; the latest reviewed revision
|
|
13
|
+
`a3e6b961800f6b1ab666f0d3f6cd4c64c2a3ce27` is incompatible. The SDK retains the stable multipart comment-upload
|
|
14
|
+
field, while integrations must account for that Provider's DOI rejection, encrypted-search omission, valid
|
|
15
|
+
files-folder-path rejection, and explicit-null table-file-import failure.
|
|
16
|
+
|
|
6
17
|
## 0.1.0a17 - 2026-08-20
|
|
7
18
|
|
|
8
19
|
- Adopts immutable `matelab-spec v0.4.1` at commit `6f8ab3d14797385d0075d0aba38bf3bf529e674d` and OpenAPI
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matelab-python-sdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0a18
|
|
4
4
|
Summary: Reusable async Python client for the Matelab Integration Contract
|
|
5
5
|
Author-email: 朱天念 <zhutiannian@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -35,10 +35,10 @@ This README describes the current SDK interface, integration semantics, examples
|
|
|
35
35
|
[AGENTS.md](AGENTS.md) for durable maintenance rules, and `docs/operation-coverage.yaml` for the machine-readable
|
|
36
36
|
operation inventory.
|
|
37
37
|
|
|
38
|
-
The current alpha is `0.1.
|
|
38
|
+
The current alpha is `0.1.0a18`. `[project].version` in `pyproject.toml` is the sole SDK version source;
|
|
39
39
|
`uv.lock` only mirrors that source.
|
|
40
40
|
|
|
41
|
-
The SDK is pinned to the immutable `matelab-spec v0.4.
|
|
41
|
+
The SDK is pinned to the immutable `matelab-spec v0.4.2` Contract Release. The sole release pin is
|
|
42
42
|
`contracts/matelab-integration-v1.lock.json`, which records
|
|
43
43
|
the source tag, commit, OpenAPI path, local snapshot path, and SHA-256.
|
|
44
44
|
|
|
@@ -64,12 +64,18 @@ To test the same artifact a downstream Consumer will install, build and install
|
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
66
|
uv build --no-build-isolation --out-dir dist/release
|
|
67
|
-
python -m pip install dist/release/matelab_python_sdk-0.1.
|
|
67
|
+
python -m pip install dist/release/matelab_python_sdk-0.1.0a18-py3-none-any.whl
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
Do not infer Provider compatibility from the SDK version alone. A release is also bound to the Contract
|
|
71
71
|
tag, commit, and checksum recorded below.
|
|
72
72
|
|
|
73
|
+
The Contract and public SDK interface remain compatible with the stable Provider evidence at
|
|
74
|
+
`59101f006e9fd6d6ce0b951dfd34695a7949b54f`. The latest reviewed Provider,
|
|
75
|
+
`a3e6b961800f6b1ab666f0d3f6cd4c64c2a3ce27`, is incompatible with that evidence. Its operation-specific
|
|
76
|
+
differences are documented alongside the affected interfaces below; do not treat a successful Contract adoption as
|
|
77
|
+
proof that this newer Provider revision is interchangeable.
|
|
78
|
+
|
|
73
79
|
## Design
|
|
74
80
|
|
|
75
81
|
The public module is intentionally small:
|
|
@@ -117,7 +123,7 @@ success code it does not allow raises `MatelabProtocolError` rather than assigni
|
|
|
117
123
|
`MatelabTransportError.status_code` remains available for HTTP failures. Provider response bodies, top-level `msg`,
|
|
118
124
|
legacy `errmsg`, opaque `errs`, uncontracted debug fields, and request payloads are not attached to exceptions because
|
|
119
125
|
Provider-authored diagnostics may contain stack traces, credentials, or submitted values.
|
|
120
|
-
The pinned v0.4.
|
|
126
|
+
The pinned v0.4.2 Contract also declares optional code-4 `errs`, but PVD-041 and PCG-015 record incompatible observed
|
|
121
127
|
item/container shapes and insufficient evidence for requiredness, cardinality, or exclusion from other codes. The SDK
|
|
122
128
|
therefore keeps those diagnostics wire-only and does not expose `errs` as stable public metadata. A typed detail
|
|
123
129
|
interface remains blocked until a future Contract release can define one from stronger Provider evidence. `retryable`
|
|
@@ -446,7 +452,7 @@ targets = await client.users.search("Example Researcher", global_scope=False)
|
|
|
446
452
|
`groups.list()` returns the `GroupSummary` tuple directly. Ordering remains Provider-unspecified and is documented
|
|
447
453
|
rather than repeated as a constant result field. The Provider's members for an unstable first group remain wire-only;
|
|
448
454
|
`users.search()` is the public recipient-discovery interface. These two discovery interfaces are experimental because
|
|
449
|
-
group order is unstable and user search is unpaged, unordered and not field-minimized (PVD-006, PVD-029
|
|
455
|
+
group order is unstable and user search is unpaged, unordered and not field-minimized (PVD-006, PVD-029).
|
|
450
456
|
`GroupSummary.notebook_creation_available` expresses whether the group can currently host notebook creation without
|
|
451
457
|
exposing the Provider's data-server routing value.
|
|
452
458
|
|
|
@@ -538,6 +544,8 @@ relations = await client.records.relations(source)
|
|
|
538
544
|
as `modules`; it is not the template-shaped `RecordImportItem.data` accepted by record import.
|
|
539
545
|
`records.search()` maps each requested field name to a stored record path. A match exposes only Provider-returned
|
|
540
546
|
entries in `values`, so key membership distinguishes an absent result from an explicit JSON `null`.
|
|
547
|
+
The latest reviewed Provider excludes encrypted records from search (PVD-043); an empty search result therefore does
|
|
548
|
+
not prove that no matching encrypted record exists.
|
|
541
549
|
|
|
542
550
|
The Provider calls its notebook directory tree `subtype`; that name remains wire-only. The SDK exposes
|
|
543
551
|
`RecordFolder`, `RecordSummary.folder_id`, and the `folders` returned with record listings. A top-level folder has
|
|
@@ -587,8 +595,9 @@ UID. Import validates the complete batch with generated wire models but cannot m
|
|
|
587
595
|
individual inputs or promise atomicity (PCG-008); it therefore returns only the tuple of database IDs actually
|
|
588
596
|
reported by the Provider. `RecordImportItem.keywords` is a tuple; the adapter owns the Provider's
|
|
589
597
|
legacy semicolon encoding. Folder paths are ordered existing folder titles from the notebook root; they do not create
|
|
590
|
-
missing folders.
|
|
591
|
-
|
|
598
|
+
missing folders. The latest reviewed Provider rejects explicit-null table-file imports (PVD-045), so integrations
|
|
599
|
+
targeting it must not interpret that rejection as an invalid SDK input. Delete means moving records into the recycle bin,
|
|
600
|
+
not permanent deletion. Delete and restore return `None`; record mutations are not automatically retried.
|
|
592
601
|
|
|
593
602
|
`records.copy()` accepts an optional `new_record_uid`; when omitted, the SDK generates one locally. The Provider
|
|
594
603
|
returns only the copied row's database ID, so retaining that UID lets the SDK return a complete `RecordLocator`
|
|
@@ -605,7 +614,9 @@ returns the acknowledgement classification
|
|
|
605
614
|
issue a post-write read. Database, active-browser, and unclassified acknowledgements remain distinct, and mutation
|
|
606
615
|
retries stay disabled. Encrypted record content is outside the SDK's public read/update interface: the list-level
|
|
607
616
|
`RecordSummary.encrypted` flag lets callers identify and skip it, while the Provider password field and frontend-only
|
|
608
|
-
password lifecycle remain unexposed.
|
|
617
|
+
password lifecycle remain unexposed. The latest reviewed Provider rejects a valid files-folder append path
|
|
618
|
+
(PVD-044); integrations targeting it must not reinterpret that rejection as invalid SDK input, and should treat a
|
|
619
|
+
staged attachment as indeterminate once the write has started.
|
|
609
620
|
|
|
610
621
|
Relation addition reads both endpoints and checks their resolved data server before writing; this reduces PVD-019
|
|
611
622
|
risk but is not an atomic Provider authorization guarantee. It does not list relations merely to inspect the
|
|
@@ -617,8 +628,9 @@ ignores target notebook identity (PVD-020); its mutation likewise performs autho
|
|
|
617
628
|
`records.comments()`. Each returned `RecordRelationRef` carries only the relation row and declared target IDs.
|
|
618
629
|
Deletion accepts the source `RecordLocator` and one of those observed refs.
|
|
619
630
|
|
|
620
|
-
Comment upload follows the Provider's literal one-request `upload` field
|
|
621
|
-
|
|
631
|
+
Comment upload follows the stable Provider's literal one-request `upload` field. The latest reviewed Provider renames
|
|
632
|
+
that field (PVD-037), but the SDK retains the Contract-compatible `upload` encoding. Comment mutations return `None`
|
|
633
|
+
after acknowledgement. Edit first verifies that the selected
|
|
622
634
|
comment is currently observed and caller-owned because the Provider otherwise reports a false success for a missing or
|
|
623
635
|
other-user ID (PVD-004). Delete sends the typed ref directly because the Provider mutation itself enforces record and
|
|
624
636
|
caller ownership. Neither operation performs a post-write read. Staged comment attachments have no Contract abort
|
|
@@ -697,7 +709,9 @@ The Provider's static literature form definition and extraction deployment flag
|
|
|
697
709
|
`extract_metadata()` directly and handle an unavailable or failing optional backend as a Provider error. Extraction
|
|
698
710
|
returns a `PublicationMetadataCandidate`: unstored, rich publication evidence rather than metadata already attached to
|
|
699
711
|
a literature item. Its structured authors are `PublicationAuthorCandidate` values. Extraction accepts a DOI, a
|
|
700
|
-
completed staged PDF, or both; a supplied DOI takes precedence over the staged PDF.
|
|
712
|
+
completed staged PDF, or both; a supplied DOI takes precedence over the staged PDF. The latest reviewed Provider
|
|
713
|
+
rejects DOI formats accepted by the stable evidence (PVD-042), so a rejection from that revision does not by itself
|
|
714
|
+
make a DOI invalid for this SDK interface. Literature list
|
|
701
715
|
results likewise exclude Provider-generated citation HTML and author-highlight fragments; Consumers receive the
|
|
702
716
|
underlying citation fields instead of presentation markup. `LiteratureDetail.metadata` is `None` when invalid legacy
|
|
703
717
|
JSON produces the Provider's empty-array fallback; otherwise it contains decoded stored metadata without arbitrary
|
|
@@ -722,7 +736,7 @@ canonical update preflights the raw item response and refuses to drop top-level
|
|
|
722
736
|
`allow_source_metadata_loss=True` explicitly skips that preflight and sends the canonical replacement directly. The
|
|
723
737
|
default read/check/write protection is best effort rather than atomic because the Provider offers no revision or
|
|
724
738
|
compare-and-swap condition; this Provider-specific behavior remains internal to the update operation (PVD-027).
|
|
725
|
-
PDF replace/delete are separate acknowledged mutations and are not presented as atomic with metadata
|
|
739
|
+
PDF replace/delete are separate acknowledged mutations and are not presented as atomic with metadata.
|
|
726
740
|
Permanent personal deletion is named `permanently_delete`, returns `None`, and is non-recoverable. Sharing requires
|
|
727
741
|
list-observed item summaries, user-search summaries and a
|
|
728
742
|
valid caller identity, then returns `None` because the Provider supplies no per-recipient IDs (PVD-012, PVD-036).
|
|
@@ -759,7 +773,7 @@ time strings.
|
|
|
759
773
|
Folder create returns a `CloudFolderRef` built from the Provider ID. Other folder and file mutations return `None`
|
|
760
774
|
after acknowledgement and do not automatically list the drive. Staged finalize accepts a completed `StagedFile`;
|
|
761
775
|
the Provider binds by temporary row ID without checking its owner (PVD-031), and finalize atomicity/idempotency remain
|
|
762
|
-
absent
|
|
776
|
+
absent. Batch move and permanent delete do not claim Provider per-item results or atomicity. Permanent
|
|
763
777
|
deletion is named `permanently_delete_files` and is non-recoverable. Cloud downloads
|
|
764
778
|
resolve bytes from the final file identity and reuse `DownloadStream`, thumbnail/preview choices and the PVD-002-safe
|
|
765
779
|
range subset. Cloud mutations are not automatically retried.
|
|
@@ -901,6 +915,6 @@ uv run python scripts/check_release.py dist/release/*.whl dist/release/*.tar.gz
|
|
|
901
915
|
```
|
|
902
916
|
|
|
903
917
|
Rebuilding the same commit with the same locked environment and `SOURCE_DATE_EPOCH` must produce
|
|
904
|
-
byte-identical wheel and source distribution hashes. The release is bound to `matelab-spec v0.4.
|
|
905
|
-
commit `
|
|
906
|
-
`
|
|
918
|
+
byte-identical wheel and source distribution hashes. The release is bound to `matelab-spec v0.4.2`,
|
|
919
|
+
commit `a51483f910440fbbbc3693cc32566482064bb3ab`, and OpenAPI SHA-256
|
|
920
|
+
`4c92b96ba3dfe7122b30b4db2e2c8054c06018291c8c52c15482112b51a32920`.
|
|
@@ -7,10 +7,10 @@ This README describes the current SDK interface, integration semantics, examples
|
|
|
7
7
|
[AGENTS.md](AGENTS.md) for durable maintenance rules, and `docs/operation-coverage.yaml` for the machine-readable
|
|
8
8
|
operation inventory.
|
|
9
9
|
|
|
10
|
-
The current alpha is `0.1.
|
|
10
|
+
The current alpha is `0.1.0a18`. `[project].version` in `pyproject.toml` is the sole SDK version source;
|
|
11
11
|
`uv.lock` only mirrors that source.
|
|
12
12
|
|
|
13
|
-
The SDK is pinned to the immutable `matelab-spec v0.4.
|
|
13
|
+
The SDK is pinned to the immutable `matelab-spec v0.4.2` Contract Release. The sole release pin is
|
|
14
14
|
`contracts/matelab-integration-v1.lock.json`, which records
|
|
15
15
|
the source tag, commit, OpenAPI path, local snapshot path, and SHA-256.
|
|
16
16
|
|
|
@@ -36,12 +36,18 @@ To test the same artifact a downstream Consumer will install, build and install
|
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
uv build --no-build-isolation --out-dir dist/release
|
|
39
|
-
python -m pip install dist/release/matelab_python_sdk-0.1.
|
|
39
|
+
python -m pip install dist/release/matelab_python_sdk-0.1.0a18-py3-none-any.whl
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
Do not infer Provider compatibility from the SDK version alone. A release is also bound to the Contract
|
|
43
43
|
tag, commit, and checksum recorded below.
|
|
44
44
|
|
|
45
|
+
The Contract and public SDK interface remain compatible with the stable Provider evidence at
|
|
46
|
+
`59101f006e9fd6d6ce0b951dfd34695a7949b54f`. The latest reviewed Provider,
|
|
47
|
+
`a3e6b961800f6b1ab666f0d3f6cd4c64c2a3ce27`, is incompatible with that evidence. Its operation-specific
|
|
48
|
+
differences are documented alongside the affected interfaces below; do not treat a successful Contract adoption as
|
|
49
|
+
proof that this newer Provider revision is interchangeable.
|
|
50
|
+
|
|
45
51
|
## Design
|
|
46
52
|
|
|
47
53
|
The public module is intentionally small:
|
|
@@ -89,7 +95,7 @@ success code it does not allow raises `MatelabProtocolError` rather than assigni
|
|
|
89
95
|
`MatelabTransportError.status_code` remains available for HTTP failures. Provider response bodies, top-level `msg`,
|
|
90
96
|
legacy `errmsg`, opaque `errs`, uncontracted debug fields, and request payloads are not attached to exceptions because
|
|
91
97
|
Provider-authored diagnostics may contain stack traces, credentials, or submitted values.
|
|
92
|
-
The pinned v0.4.
|
|
98
|
+
The pinned v0.4.2 Contract also declares optional code-4 `errs`, but PVD-041 and PCG-015 record incompatible observed
|
|
93
99
|
item/container shapes and insufficient evidence for requiredness, cardinality, or exclusion from other codes. The SDK
|
|
94
100
|
therefore keeps those diagnostics wire-only and does not expose `errs` as stable public metadata. A typed detail
|
|
95
101
|
interface remains blocked until a future Contract release can define one from stronger Provider evidence. `retryable`
|
|
@@ -418,7 +424,7 @@ targets = await client.users.search("Example Researcher", global_scope=False)
|
|
|
418
424
|
`groups.list()` returns the `GroupSummary` tuple directly. Ordering remains Provider-unspecified and is documented
|
|
419
425
|
rather than repeated as a constant result field. The Provider's members for an unstable first group remain wire-only;
|
|
420
426
|
`users.search()` is the public recipient-discovery interface. These two discovery interfaces are experimental because
|
|
421
|
-
group order is unstable and user search is unpaged, unordered and not field-minimized (PVD-006, PVD-029
|
|
427
|
+
group order is unstable and user search is unpaged, unordered and not field-minimized (PVD-006, PVD-029).
|
|
422
428
|
`GroupSummary.notebook_creation_available` expresses whether the group can currently host notebook creation without
|
|
423
429
|
exposing the Provider's data-server routing value.
|
|
424
430
|
|
|
@@ -510,6 +516,8 @@ relations = await client.records.relations(source)
|
|
|
510
516
|
as `modules`; it is not the template-shaped `RecordImportItem.data` accepted by record import.
|
|
511
517
|
`records.search()` maps each requested field name to a stored record path. A match exposes only Provider-returned
|
|
512
518
|
entries in `values`, so key membership distinguishes an absent result from an explicit JSON `null`.
|
|
519
|
+
The latest reviewed Provider excludes encrypted records from search (PVD-043); an empty search result therefore does
|
|
520
|
+
not prove that no matching encrypted record exists.
|
|
513
521
|
|
|
514
522
|
The Provider calls its notebook directory tree `subtype`; that name remains wire-only. The SDK exposes
|
|
515
523
|
`RecordFolder`, `RecordSummary.folder_id`, and the `folders` returned with record listings. A top-level folder has
|
|
@@ -559,8 +567,9 @@ UID. Import validates the complete batch with generated wire models but cannot m
|
|
|
559
567
|
individual inputs or promise atomicity (PCG-008); it therefore returns only the tuple of database IDs actually
|
|
560
568
|
reported by the Provider. `RecordImportItem.keywords` is a tuple; the adapter owns the Provider's
|
|
561
569
|
legacy semicolon encoding. Folder paths are ordered existing folder titles from the notebook root; they do not create
|
|
562
|
-
missing folders.
|
|
563
|
-
|
|
570
|
+
missing folders. The latest reviewed Provider rejects explicit-null table-file imports (PVD-045), so integrations
|
|
571
|
+
targeting it must not interpret that rejection as an invalid SDK input. Delete means moving records into the recycle bin,
|
|
572
|
+
not permanent deletion. Delete and restore return `None`; record mutations are not automatically retried.
|
|
564
573
|
|
|
565
574
|
`records.copy()` accepts an optional `new_record_uid`; when omitted, the SDK generates one locally. The Provider
|
|
566
575
|
returns only the copied row's database ID, so retaining that UID lets the SDK return a complete `RecordLocator`
|
|
@@ -577,7 +586,9 @@ returns the acknowledgement classification
|
|
|
577
586
|
issue a post-write read. Database, active-browser, and unclassified acknowledgements remain distinct, and mutation
|
|
578
587
|
retries stay disabled. Encrypted record content is outside the SDK's public read/update interface: the list-level
|
|
579
588
|
`RecordSummary.encrypted` flag lets callers identify and skip it, while the Provider password field and frontend-only
|
|
580
|
-
password lifecycle remain unexposed.
|
|
589
|
+
password lifecycle remain unexposed. The latest reviewed Provider rejects a valid files-folder append path
|
|
590
|
+
(PVD-044); integrations targeting it must not reinterpret that rejection as invalid SDK input, and should treat a
|
|
591
|
+
staged attachment as indeterminate once the write has started.
|
|
581
592
|
|
|
582
593
|
Relation addition reads both endpoints and checks their resolved data server before writing; this reduces PVD-019
|
|
583
594
|
risk but is not an atomic Provider authorization guarantee. It does not list relations merely to inspect the
|
|
@@ -589,8 +600,9 @@ ignores target notebook identity (PVD-020); its mutation likewise performs autho
|
|
|
589
600
|
`records.comments()`. Each returned `RecordRelationRef` carries only the relation row and declared target IDs.
|
|
590
601
|
Deletion accepts the source `RecordLocator` and one of those observed refs.
|
|
591
602
|
|
|
592
|
-
Comment upload follows the Provider's literal one-request `upload` field
|
|
593
|
-
|
|
603
|
+
Comment upload follows the stable Provider's literal one-request `upload` field. The latest reviewed Provider renames
|
|
604
|
+
that field (PVD-037), but the SDK retains the Contract-compatible `upload` encoding. Comment mutations return `None`
|
|
605
|
+
after acknowledgement. Edit first verifies that the selected
|
|
594
606
|
comment is currently observed and caller-owned because the Provider otherwise reports a false success for a missing or
|
|
595
607
|
other-user ID (PVD-004). Delete sends the typed ref directly because the Provider mutation itself enforces record and
|
|
596
608
|
caller ownership. Neither operation performs a post-write read. Staged comment attachments have no Contract abort
|
|
@@ -669,7 +681,9 @@ The Provider's static literature form definition and extraction deployment flag
|
|
|
669
681
|
`extract_metadata()` directly and handle an unavailable or failing optional backend as a Provider error. Extraction
|
|
670
682
|
returns a `PublicationMetadataCandidate`: unstored, rich publication evidence rather than metadata already attached to
|
|
671
683
|
a literature item. Its structured authors are `PublicationAuthorCandidate` values. Extraction accepts a DOI, a
|
|
672
|
-
completed staged PDF, or both; a supplied DOI takes precedence over the staged PDF.
|
|
684
|
+
completed staged PDF, or both; a supplied DOI takes precedence over the staged PDF. The latest reviewed Provider
|
|
685
|
+
rejects DOI formats accepted by the stable evidence (PVD-042), so a rejection from that revision does not by itself
|
|
686
|
+
make a DOI invalid for this SDK interface. Literature list
|
|
673
687
|
results likewise exclude Provider-generated citation HTML and author-highlight fragments; Consumers receive the
|
|
674
688
|
underlying citation fields instead of presentation markup. `LiteratureDetail.metadata` is `None` when invalid legacy
|
|
675
689
|
JSON produces the Provider's empty-array fallback; otherwise it contains decoded stored metadata without arbitrary
|
|
@@ -694,7 +708,7 @@ canonical update preflights the raw item response and refuses to drop top-level
|
|
|
694
708
|
`allow_source_metadata_loss=True` explicitly skips that preflight and sends the canonical replacement directly. The
|
|
695
709
|
default read/check/write protection is best effort rather than atomic because the Provider offers no revision or
|
|
696
710
|
compare-and-swap condition; this Provider-specific behavior remains internal to the update operation (PVD-027).
|
|
697
|
-
PDF replace/delete are separate acknowledged mutations and are not presented as atomic with metadata
|
|
711
|
+
PDF replace/delete are separate acknowledged mutations and are not presented as atomic with metadata.
|
|
698
712
|
Permanent personal deletion is named `permanently_delete`, returns `None`, and is non-recoverable. Sharing requires
|
|
699
713
|
list-observed item summaries, user-search summaries and a
|
|
700
714
|
valid caller identity, then returns `None` because the Provider supplies no per-recipient IDs (PVD-012, PVD-036).
|
|
@@ -731,7 +745,7 @@ time strings.
|
|
|
731
745
|
Folder create returns a `CloudFolderRef` built from the Provider ID. Other folder and file mutations return `None`
|
|
732
746
|
after acknowledgement and do not automatically list the drive. Staged finalize accepts a completed `StagedFile`;
|
|
733
747
|
the Provider binds by temporary row ID without checking its owner (PVD-031), and finalize atomicity/idempotency remain
|
|
734
|
-
absent
|
|
748
|
+
absent. Batch move and permanent delete do not claim Provider per-item results or atomicity. Permanent
|
|
735
749
|
deletion is named `permanently_delete_files` and is non-recoverable. Cloud downloads
|
|
736
750
|
resolve bytes from the final file identity and reuse `DownloadStream`, thumbnail/preview choices and the PVD-002-safe
|
|
737
751
|
range subset. Cloud mutations are not automatically retried.
|
|
@@ -873,6 +887,6 @@ uv run python scripts/check_release.py dist/release/*.whl dist/release/*.tar.gz
|
|
|
873
887
|
```
|
|
874
888
|
|
|
875
889
|
Rebuilding the same commit with the same locked environment and `SOURCE_DATE_EPOCH` must produce
|
|
876
|
-
byte-identical wheel and source distribution hashes. The release is bound to `matelab-spec v0.4.
|
|
877
|
-
commit `
|
|
878
|
-
`
|
|
890
|
+
byte-identical wheel and source distribution hashes. The release is bound to `matelab-spec v0.4.2`,
|
|
891
|
+
commit `a51483f910440fbbbc3693cc32566482064bb3ab`, and OpenAPI SHA-256
|
|
892
|
+
`4c92b96ba3dfe7122b30b4db2e2c8054c06018291c8c52c15482112b51a32920`.
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"schema_version": 1,
|
|
3
3
|
"contract_line": "integration-v1",
|
|
4
4
|
"release": {
|
|
5
|
-
"tag": "v0.4.
|
|
6
|
-
"commit": "
|
|
5
|
+
"tag": "v0.4.2",
|
|
6
|
+
"commit": "a51483f910440fbbbc3693cc32566482064bb3ab"
|
|
7
7
|
},
|
|
8
8
|
"openapi": {
|
|
9
9
|
"source_path": "openapi/matelab-integration-v1.openapi.yaml",
|
|
10
10
|
"snapshot": "matelab-integration-v1.openapi.yaml",
|
|
11
|
-
"sha256": "
|
|
11
|
+
"sha256": "4c92b96ba3dfe7122b30b4db2e2c8054c06018291c8c52c15482112b51a32920"
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: Matelab Integration Contract
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.2
|
|
5
5
|
description: |
|
|
6
6
|
Stable PHP wire contract for the `integration-v1` contract line.
|
|
7
7
|
Business failures are returned as JSON envelopes over HTTP 200.
|
|
@@ -37,6 +37,16 @@ info:
|
|
|
37
37
|
- sql/eln.sql
|
|
38
38
|
- sql/matelab.sql
|
|
39
39
|
- sql/recommend.sql
|
|
40
|
+
x-provider-audit:
|
|
41
|
+
latestReviewedCommit: a3e6b961800f6b1ab666f0d3f6cd4c64c2a3ce27
|
|
42
|
+
stableEvidenceCommit: 59101f006e9fd6d6ce0b951dfd34695a7949b54f
|
|
43
|
+
compatibility: incompatible
|
|
44
|
+
regressions:
|
|
45
|
+
- {issue: PVD-037, operationId: uploadRecordCommentAttachment}
|
|
46
|
+
- {issue: PVD-042, operationId: extractLiteratureMetadata}
|
|
47
|
+
- {issue: PVD-043, operationId: searchRecordData}
|
|
48
|
+
- {issue: PVD-044, operationId: updateRecordData}
|
|
49
|
+
- {issue: PVD-045, operationId: importRecordDataset}
|
|
40
50
|
x-consumer-evidence:
|
|
41
51
|
- repository: /home/tnzhu/projects/matelab-mcp
|
|
42
52
|
commit: 94a129b2df0ef0fbcf179c10550fb7c9a5dd2e6f
|
|
@@ -963,7 +973,7 @@ paths:
|
|
|
963
973
|
product capability and the notebook/template share routes do not require
|
|
964
974
|
common group membership. The contract still narrows the keyword to a
|
|
965
975
|
bounded, non-blank 2–100-character string and records the unpaged global
|
|
966
|
-
directory as PVD-029
|
|
976
|
+
directory as PVD-029.
|
|
967
977
|
x-consumer-use-case: Resolve same-institute or global target user ids before notebook, template, or literature sharing.
|
|
968
978
|
x-known-provider-issues: [PVD-013, PVD-029]
|
|
969
979
|
security: [{bearerAuth: []}]
|
|
@@ -1507,7 +1517,7 @@ paths:
|
|
|
1507
1517
|
Consumers must split attachment-bearing imports into single-record
|
|
1508
1518
|
requests with a distinct staged name for each request, and must not
|
|
1509
1519
|
retry a failed finalize with the same name.
|
|
1510
|
-
x-known-provider-issues: [PVD-023, PVD-024, PVD-040, PVD-041]
|
|
1520
|
+
x-known-provider-issues: [PVD-023, PVD-024, PVD-040, PVD-041, PVD-045]
|
|
1511
1521
|
security: [{bearerAuth: []}]
|
|
1512
1522
|
requestBody:
|
|
1513
1523
|
required: true
|
|
@@ -1597,6 +1607,12 @@ paths:
|
|
|
1597
1607
|
operationId: searchRecordData
|
|
1598
1608
|
tags: [Records]
|
|
1599
1609
|
summary: Search notebooks and extract requested dynamic fields
|
|
1610
|
+
description: |
|
|
1611
|
+
The released contract is backed by Provider commit `59101f0`. The latest
|
|
1612
|
+
reviewed Provider commit excludes encrypted records before applying the
|
|
1613
|
+
requested filters, which is a response-subtractive behavior change still
|
|
1614
|
+
awaiting policy confirmation and Provider Verification under PVD-043.
|
|
1615
|
+
x-known-provider-issues: [PVD-043]
|
|
1600
1616
|
security: [{bearerAuth: []}]
|
|
1601
1617
|
requestBody:
|
|
1602
1618
|
required: true
|
|
@@ -1650,7 +1666,11 @@ paths:
|
|
|
1650
1666
|
This operation does not modify record title or other record metadata.
|
|
1651
1667
|
`UpdateRecordRequest` rejects a top-level `title`; the Front uses the
|
|
1652
1668
|
separate, currently unsupported `/eln_items/edit` route for that use
|
|
1653
|
-
case.
|
|
1669
|
+
case. That candidate route remains outside Supported Routes and has not
|
|
1670
|
+
completed the request-boundary, permission, side-effect, response, and
|
|
1671
|
+
Provider Verification audit required for Integration use. MCP therefore
|
|
1672
|
+
deliberately omits title from `update_record`; the shared capability gap
|
|
1673
|
+
remains tracked as PCG-016.
|
|
1654
1674
|
|
|
1655
1675
|
Verified staged-name update shapes are enumerated by
|
|
1656
1676
|
`info.x-record-attachment-staging.safeFinalizerShapes.update` and their
|
|
@@ -1674,7 +1694,7 @@ paths:
|
|
|
1674
1694
|
consumption are not atomic. Once a finalizer begins, any write error,
|
|
1675
1695
|
collaboration-pending response, response loss or failed readback leaves
|
|
1676
1696
|
staging indeterminate and must not be retried.
|
|
1677
|
-
x-known-provider-issues: [PVD-014, PVD-015, PVD-016, PVD-017, PVD-040, PVD-041]
|
|
1697
|
+
x-known-provider-issues: [PVD-014, PVD-015, PVD-016, PVD-017, PVD-040, PVD-041, PVD-044]
|
|
1678
1698
|
security: [{bearerAuth: []}]
|
|
1679
1699
|
requestBody:
|
|
1680
1700
|
required: true
|
|
@@ -3398,6 +3418,7 @@ paths:
|
|
|
3398
3418
|
external to the PHP Provider and can omit fields or return additional
|
|
3399
3419
|
fields, so only the documented candidate fields are promised.
|
|
3400
3420
|
x-consumer-use-case: Prefill canonical literature metadata before import from a DOI or staged PDF.
|
|
3421
|
+
x-known-provider-issues: [PVD-042]
|
|
3401
3422
|
security: [{bearerAuth: []}]
|
|
3402
3423
|
requestBody:
|
|
3403
3424
|
required: true
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
schema_version: 1
|
|
4
4
|
contract:
|
|
5
5
|
line: integration-v1
|
|
6
|
-
release: v0.4.
|
|
6
|
+
release: v0.4.2
|
|
7
7
|
operation_count: 71
|
|
8
8
|
|
|
9
9
|
operations:
|
|
@@ -169,7 +169,7 @@ operations:
|
|
|
169
169
|
state: implemented
|
|
170
170
|
stability: experimental
|
|
171
171
|
public_interface: AsyncMatelab.groups.list
|
|
172
|
-
known_issues: [PCG-003,
|
|
172
|
+
known_issues: [PCG-003, PVD-006, PVD-013]
|
|
173
173
|
|
|
174
174
|
- operation_id: searchUsers
|
|
175
175
|
method: GET
|
|
@@ -178,7 +178,7 @@ operations:
|
|
|
178
178
|
state: implemented
|
|
179
179
|
stability: experimental
|
|
180
180
|
public_interface: AsyncMatelab.users.search
|
|
181
|
-
known_issues: [PCG-003,
|
|
181
|
+
known_issues: [PCG-003, PVD-013, PVD-029]
|
|
182
182
|
|
|
183
183
|
- operation_id: saveNotebookMetadata
|
|
184
184
|
method: POST
|
|
@@ -259,7 +259,7 @@ operations:
|
|
|
259
259
|
state: implemented
|
|
260
260
|
stability: experimental
|
|
261
261
|
public_interface: AsyncMatelab.records.import_dataset
|
|
262
|
-
known_issues: [PCG-008, PCG-014, PVD-023, PVD-024, PVD-040, PVD-041]
|
|
262
|
+
known_issues: [PCG-008, PCG-014, PVD-023, PVD-024, PVD-040, PVD-041, PVD-045]
|
|
263
263
|
|
|
264
264
|
- operation_id: exportRecords
|
|
265
265
|
method: POST
|
|
@@ -277,7 +277,7 @@ operations:
|
|
|
277
277
|
state: implemented
|
|
278
278
|
stability: experimental
|
|
279
279
|
public_interface: AsyncMatelab.records.search
|
|
280
|
-
known_issues: [PCG-003, PVD-013]
|
|
280
|
+
known_issues: [PCG-003, PVD-013, PVD-043]
|
|
281
281
|
|
|
282
282
|
- operation_id: updateRecordData
|
|
283
283
|
method: POST
|
|
@@ -286,7 +286,7 @@ operations:
|
|
|
286
286
|
state: implemented
|
|
287
287
|
stability: experimental
|
|
288
288
|
public_interface: AsyncMatelab.records.update
|
|
289
|
-
known_issues: [PCG-001, PCG-002, PCG-014, PVD-014, PVD-015, PVD-016, PVD-017, PVD-040, PVD-041]
|
|
289
|
+
known_issues: [PCG-001, PCG-002, PCG-014, PVD-014, PVD-015, PVD-016, PVD-017, PVD-040, PVD-041, PVD-044]
|
|
290
290
|
|
|
291
291
|
- operation_id: deleteRecordsByUid
|
|
292
292
|
method: POST
|
|
@@ -385,7 +385,7 @@ operations:
|
|
|
385
385
|
state: implemented
|
|
386
386
|
stability: experimental
|
|
387
387
|
public_interface: AsyncMatelab.records.comments
|
|
388
|
-
known_issues: [
|
|
388
|
+
known_issues: [PVD-013]
|
|
389
389
|
|
|
390
390
|
- operation_id: saveRecordComment
|
|
391
391
|
method: POST
|
|
@@ -394,7 +394,7 @@ operations:
|
|
|
394
394
|
state: implemented
|
|
395
395
|
stability: experimental
|
|
396
396
|
public_interface: AsyncMatelab.records.create_comment / AsyncMatelab.records.update_comment
|
|
397
|
-
known_issues: [
|
|
397
|
+
known_issues: [PVD-004, PVD-026]
|
|
398
398
|
|
|
399
399
|
- operation_id: uploadRecordCommentAttachment
|
|
400
400
|
method: POST
|
|
@@ -403,7 +403,7 @@ operations:
|
|
|
403
403
|
state: implemented
|
|
404
404
|
stability: experimental
|
|
405
405
|
public_interface: AsyncMatelab.records.upload_comment_attachment
|
|
406
|
-
known_issues: [
|
|
406
|
+
known_issues: [PVD-037]
|
|
407
407
|
|
|
408
408
|
- operation_id: deleteRecordComment
|
|
409
409
|
method: POST
|
|
@@ -412,7 +412,7 @@ operations:
|
|
|
412
412
|
state: implemented
|
|
413
413
|
stability: experimental
|
|
414
414
|
public_interface: AsyncMatelab.records.delete_comment
|
|
415
|
-
known_issues: [
|
|
415
|
+
known_issues: []
|
|
416
416
|
|
|
417
417
|
- operation_id: downloadRecordCommentAttachment
|
|
418
418
|
method: GET
|
|
@@ -421,7 +421,7 @@ operations:
|
|
|
421
421
|
state: implemented
|
|
422
422
|
stability: experimental
|
|
423
423
|
public_interface: AsyncMatelab.records.download_comment_attachment
|
|
424
|
-
known_issues: [
|
|
424
|
+
known_issues: [PVD-002, PVD-038]
|
|
425
425
|
|
|
426
426
|
- operation_id: readRecord
|
|
427
427
|
method: GET
|
|
@@ -531,7 +531,7 @@ operations:
|
|
|
531
531
|
state: implemented
|
|
532
532
|
stability: experimental
|
|
533
533
|
public_interface: AsyncMatelab.literature.extract_metadata
|
|
534
|
-
known_issues: [
|
|
534
|
+
known_issues: [PVD-042]
|
|
535
535
|
|
|
536
536
|
- operation_id: saveLiteratureItem
|
|
537
537
|
method: POST
|
|
@@ -540,7 +540,7 @@ operations:
|
|
|
540
540
|
state: implemented
|
|
541
541
|
stability: experimental
|
|
542
542
|
public_interface: AsyncMatelab.literature.create / AsyncMatelab.literature.update
|
|
543
|
-
known_issues: [
|
|
543
|
+
known_issues: [PVD-011, PVD-026, PVD-027, PVD-041]
|
|
544
544
|
|
|
545
545
|
- operation_id: replaceLiteraturePdf
|
|
546
546
|
method: POST
|
|
@@ -549,7 +549,7 @@ operations:
|
|
|
549
549
|
state: implemented
|
|
550
550
|
stability: experimental
|
|
551
551
|
public_interface: AsyncMatelab.literature.replace_pdf
|
|
552
|
-
known_issues: [
|
|
552
|
+
known_issues: [PVD-011, PVD-026]
|
|
553
553
|
|
|
554
554
|
- operation_id: deleteLiteraturePdf
|
|
555
555
|
method: POST
|
|
@@ -558,7 +558,7 @@ operations:
|
|
|
558
558
|
state: implemented
|
|
559
559
|
stability: experimental
|
|
560
560
|
public_interface: AsyncMatelab.literature.delete_pdf
|
|
561
|
-
known_issues: [
|
|
561
|
+
known_issues: [PVD-011]
|
|
562
562
|
|
|
563
563
|
- operation_id: downloadLiteraturePdf
|
|
564
564
|
method: GET
|
|
@@ -576,7 +576,7 @@ operations:
|
|
|
576
576
|
state: implemented
|
|
577
577
|
stability: experimental
|
|
578
578
|
public_interface: AsyncMatelab.cloud_drive.list
|
|
579
|
-
known_issues: [PCG-003,
|
|
579
|
+
known_issues: [PCG-003, PVD-013]
|
|
580
580
|
|
|
581
581
|
- operation_id: saveCloudDriveFolder
|
|
582
582
|
method: POST
|
|
@@ -585,7 +585,7 @@ operations:
|
|
|
585
585
|
state: implemented
|
|
586
586
|
stability: experimental
|
|
587
587
|
public_interface: AsyncMatelab.cloud_drive.create_folder / AsyncMatelab.cloud_drive.update_folder
|
|
588
|
-
known_issues: [
|
|
588
|
+
known_issues: []
|
|
589
589
|
|
|
590
590
|
- operation_id: deleteEmptyCloudDriveFolder
|
|
591
591
|
method: POST
|
|
@@ -594,7 +594,7 @@ operations:
|
|
|
594
594
|
state: implemented
|
|
595
595
|
stability: experimental
|
|
596
596
|
public_interface: AsyncMatelab.cloud_drive.delete_folder
|
|
597
|
-
known_issues: [
|
|
597
|
+
known_issues: []
|
|
598
598
|
|
|
599
599
|
- operation_id: moveCloudDriveFolder
|
|
600
600
|
method: POST
|
|
@@ -603,7 +603,7 @@ operations:
|
|
|
603
603
|
state: implemented
|
|
604
604
|
stability: experimental
|
|
605
605
|
public_interface: AsyncMatelab.cloud_drive.move_folder
|
|
606
|
-
known_issues: [
|
|
606
|
+
known_issues: []
|
|
607
607
|
|
|
608
608
|
- operation_id: bindStagedCloudDriveFile
|
|
609
609
|
method: POST
|
|
@@ -612,7 +612,7 @@ operations:
|
|
|
612
612
|
state: implemented
|
|
613
613
|
stability: experimental
|
|
614
614
|
public_interface: AsyncMatelab.cloud_drive.bind_staged_file
|
|
615
|
-
known_issues: [
|
|
615
|
+
known_issues: [PVD-031]
|
|
616
616
|
|
|
617
617
|
- operation_id: editCloudDriveFile
|
|
618
618
|
method: POST
|
|
@@ -621,7 +621,7 @@ operations:
|
|
|
621
621
|
state: implemented
|
|
622
622
|
stability: experimental
|
|
623
623
|
public_interface: AsyncMatelab.cloud_drive.update_file
|
|
624
|
-
known_issues: [
|
|
624
|
+
known_issues: []
|
|
625
625
|
|
|
626
626
|
- operation_id: deleteCloudDriveFiles
|
|
627
627
|
method: POST
|
|
@@ -630,7 +630,7 @@ operations:
|
|
|
630
630
|
state: implemented
|
|
631
631
|
stability: experimental
|
|
632
632
|
public_interface: AsyncMatelab.cloud_drive.permanently_delete_files
|
|
633
|
-
known_issues: [
|
|
633
|
+
known_issues: []
|
|
634
634
|
|
|
635
635
|
- operation_id: moveCloudDriveFiles
|
|
636
636
|
method: POST
|
|
@@ -639,7 +639,7 @@ operations:
|
|
|
639
639
|
state: implemented
|
|
640
640
|
stability: experimental
|
|
641
641
|
public_interface: AsyncMatelab.cloud_drive.move_files
|
|
642
|
-
known_issues: [
|
|
642
|
+
known_issues: []
|
|
643
643
|
|
|
644
644
|
- operation_id: downloadCloudDriveFile
|
|
645
645
|
method: GET
|
|
@@ -648,4 +648,4 @@ operations:
|
|
|
648
648
|
state: implemented
|
|
649
649
|
stability: experimental
|
|
650
650
|
public_interface: AsyncMatelab.cloud_drive.download
|
|
651
|
-
known_issues: [
|
|
651
|
+
known_issues: [PVD-002]
|
|
@@ -333,7 +333,7 @@ def test_generated_models_cover_every_component_schema_and_non_streaming_operati
|
|
|
333
333
|
}
|
|
334
334
|
assert expected_response_models <= class_names
|
|
335
335
|
assert len(operation_ids) == 71
|
|
336
|
-
assert wire_models.OPENAPI_INFO_VERSION == "0.4.
|
|
336
|
+
assert wire_models.OPENAPI_INFO_VERSION == "0.4.2"
|
|
337
337
|
|
|
338
338
|
|
|
339
339
|
def test_generation_is_deterministic(tmp_path: Path) -> None:
|
|
@@ -445,8 +445,8 @@ def test_contract_lock_is_the_single_release_pin() -> None:
|
|
|
445
445
|
openapi = cast(dict[str, Any], lock["openapi"])
|
|
446
446
|
assert set(release) == {"tag", "commit"}
|
|
447
447
|
assert set(openapi) == {"source_path", "snapshot", "sha256"}
|
|
448
|
-
assert release == {"tag": "v0.4.
|
|
449
|
-
assert openapi["sha256"] == "
|
|
448
|
+
assert release == {"tag": "v0.4.2", "commit": "a51483f910440fbbbc3693cc32566482064bb3ab"}
|
|
449
|
+
assert openapi["sha256"] == "4c92b96ba3dfe7122b30b4db2e2c8054c06018291c8c52c15482112b51a32920"
|
|
450
450
|
assert re.fullmatch(r"[0-9a-f]{40}", cast(str, release["commit"]))
|
|
451
451
|
assert re.fullmatch(r"[0-9a-f]{64}", cast(str, openapi["sha256"]))
|
|
452
452
|
assert not (ROOT / "contracts" / "matelab-integration-v1.sha256").exists()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/scripts/check_installed_package.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/_generated/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/cloud_drive.py
RENAMED
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/literature.py
RENAMED
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/notebooks.py
RENAMED
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/src/matelab/domains/templates.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/provider/test_provider_smoke.py
RENAMED
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_async_attachment_upload.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_comments_and_downloads.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_notebook_lifecycle.py
RENAMED
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_operation_coverage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_template_lifecycle.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matelab_python_sdk-0.1.0a17 → matelab_python_sdk-0.1.0a18}/tests/test_uploads_and_literature.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|