アノテーションクラスの領域数上限をSDKから指定できるようにする - #288
Merged
Merged
Conversation
soymd
marked this pull request as ready for review
August 19, 2026 08:15
h-iwata
requested changes
Aug 20, 2026
SDKとして公開する都合上、呼び出し側でキーワード引数がdeepcopyやpickleを 経由することがある。素のインスタンスだと同一性比較が壊れ、マーカー自身が リクエストに載ってしまうため。
省略時はNoneという二値の慣習に対して、この項目はnull自体がAPIの受け付ける 値になるため三値になる。慣習との違いが読み手に伝わらずレビューで疑問が 出たため、マーカーの定義側と使用箇所の双方に意図を残す。
h-iwata
requested changes
Aug 21, 2026
maxAreaCount は API 側で無制限を null で表すため None が「未指定」を兼ねられず 三値になるという理由を、対象フィールド名と API 仕様を名指しする形で明記した。 従来の英語かつ一般化した説明では、レビューで意図が確認できなかったため。 #288 (comment)
Contributor
Author
|
@h-iwata san |
h-iwata
requested changes
Aug 21, 2026
SDK 全体のコメントが英語で統一されているため、日本語化した分を戻した。 maxAreaCount を名指しし null が無制限を表すという API 仕様を書く具体度は そのまま英語で維持した。 #288 (comment)
h-iwata
approved these changes
Aug 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
アノテーションクラスの「1アノテーションあたりの領域数上限」(
maxAreaCount)を、SDKから指定・変更できるようにしました。これまでSDKでアノテーションクラスを作成すると、この値がAPI側で常に
1に固定されていました。1だと飛び地のセグメンテーションができないため、SDKでクラスを同期している案件では、作成後に画面から1クラスずつ「なし」に直す必要がありました。更新メソッドでも変更できず、既存クラスをまとめて直す手段もありませんでした。省略時の値は従来どおり
1です(API側の既定値)。既存の連携の振る舞いが変わらないようにするためです。対応内容
create_annotationにmax_area_countを追加。省略時はリクエストに含めず、API側の既定値1に委ねる。Noneを指定すると「なし」(無制限)、整数を指定するとその値update_annotationにmax_area_countを追加。省略時はリクエストに含めないため変更されず、Noneを指定すると「なし」(無制限)作成・更新のどちらも「引数を渡さなかった」と「
Noneを渡した」を区別する必要があります。Noneは「上限なし」という意味でAPIへ送る値なので、「未指定」の意味を兼ねられません。そのためモジュール内にセンチネル_UNSETを置き、それ以外が渡されたときだけmaxAreaCountをリクエストに載せています。センチネルの型注釈はAnyにして、公開されるシグネチャがOptional[int]のままになるようにしています。有効範囲(1〜1000)と整数かどうかの検証はAPI側に委ねています(422が返ります)。同じ
Clientにlimitなどをクライアント側で弾く例はありますが、上限値をリポジトリを跨いで二重に持たないほうがよいと判断しました。テスト
tests/test_annotation.pyを追加。作成・更新それぞれで、省略時にキーを送らないこと、Noneと整数がそのまま載ることを検証clientfixture とリクエスト記録ヘルパーをtests/conftest.pyへ移動。tests/test_workspace_user.pyに同じものが定義されていたため、そちらも共有fixtureを使う形に書き換えています(振る舞いの変更はありません)依存
API側の対応(fastlabel/fastlabel-application#11670)のリリース後に、このPRをマージ・リリースしてください。
max_area_countを指定したときだけAPI側の対応が必要で、指定しない既存の呼び出しはリクエスト内容が従来と同一のため、API側のリリース前でも影響ありません。動作確認
CIはlintとPython 3.10〜3.14のマトリクスが全てpassしています。
あわせて、ローカル環境のAPI(#11670 のブランチのコード)に対してこのSDKから実際にリクエストを投げ、作成(省略時
1/None/ 整数 / 境界値 / 範囲外は422)、更新(省略時は変更なし /None/ 整数 / 範囲外は422で既存値も変わらない)、読み出し、max_area_countを渡さない従来どおりの呼び出しを確認しています。