instance-repo 1.3.5.dev2__tar.gz → 1.3.5.dev3__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.
Files changed (49) hide show
  1. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/PKG-INFO +1 -1
  2. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/__init__.py +1 -1
  3. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/transport.py +20 -7
  4. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo.egg-info/PKG-INFO +1 -1
  5. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/pyproject.toml +1 -1
  6. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/README.md +0 -0
  7. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/_routing.py +0 -0
  8. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/_site_defaults.py +0 -0
  9. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/artifacts.py +0 -0
  10. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/bootstrap.py +0 -0
  11. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/cache.py +0 -0
  12. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/cli.py +0 -0
  13. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/__init__.py +0 -0
  14. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/benchmarks.py +0 -0
  15. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/config.py +0 -0
  16. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/datasets.py +0 -0
  17. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/images.py +0 -0
  18. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/instances.py +0 -0
  19. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/reports.py +0 -0
  20. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/scaffold.py +0 -0
  21. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/splits.py +0 -0
  22. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/versions.py +0 -0
  23. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/clients/workflows.py +0 -0
  24. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/concurrency.py +0 -0
  25. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/content.py +0 -0
  26. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/endpoints.py +0 -0
  27. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/errors.py +0 -0
  28. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/image.py +0 -0
  29. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/layout.py +0 -0
  30. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/loader.py +0 -0
  31. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/models.py +0 -0
  32. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/paths.py +0 -0
  33. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/release.py +0 -0
  34. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/repo.py +0 -0
  35. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/retry.py +0 -0
  36. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/store/__init__.py +0 -0
  37. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/store/acr.py +0 -0
  38. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/store/base.py +0 -0
  39. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/store/oss.py +0 -0
  40. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/store/oss_discovery.py +0 -0
  41. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/store/registry.py +0 -0
  42. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/tasktoml.py +0 -0
  43. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo/validate.py +0 -0
  44. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo.egg-info/SOURCES.txt +0 -0
  45. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo.egg-info/dependency_links.txt +0 -0
  46. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo.egg-info/entry_points.txt +0 -0
  47. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo.egg-info/requires.txt +0 -0
  48. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/instance_repo.egg-info/top_level.txt +0 -0
  49. {instance_repo-1.3.5.dev2 → instance_repo-1.3.5.dev3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instance-repo
3
- Version: 1.3.5.dev2
3
+ Version: 1.3.5.dev3
4
4
  Summary: InstanceRepo SDK — 评测 Instance 统一存储客户端(SDK-only;控制面由 apiserver 承载)
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -20,7 +20,7 @@ from .errors import (
20
20
  TransportError,
21
21
  )
22
22
 
23
- __version__ = "1.3.5.dev2"
23
+ __version__ = "1.3.5.dev3"
24
24
 
25
25
  __all__ = [
26
26
  "Repo", "load_instances",
@@ -327,12 +327,13 @@ class Transport:
327
327
  dataset_id: str | None = None,
328
328
  dataset_name: str | None = None,
329
329
  permission: str | None = None,
330
- list_only: bool = False) -> dict:
330
+ list_only: bool = False,
331
+ dataset_source: str | None = None) -> dict:
331
332
  """换 OSS STS 三元组(收窄到 bucket+prefix)。返回归一化小写字段。
332
333
 
333
- 同 (bucket,prefix,duration,dataset,permission,list_only) 在有效期内复用缓存,
334
- 把 N 次签发降到 ~1 次。dataset_id / dataset_name 至少传一个(细粒度授权场景),
335
- 二者可并存,服务端校验一致性。
334
+ 同 (bucket,prefix,duration,dataset,permission,list_only,dataset_source)
335
+ 在有效期内复用缓存,把 N 次签发降到 ~1 次。dataset_id / dataset_name
336
+ 至少传一个(细粒度授权场景),二者可并存,服务端校验一致性。
336
337
 
337
338
  ``permission``(可选,admin/writer/reader)是**权限封顶**:apiserver 取
338
339
  ``min(调用方真实角色, permission)``,**只能收窄不能提权**——传 admin 不会把
@@ -343,12 +344,20 @@ class Transport:
343
344
  ``list_only`` 是**发现模式开关**(与 permission 封顶正交):True 时签发仅含
344
345
  oss:ListObjects + oss:GetBucketInfo 的令牌,跳过 DatasetRBAC 检查,用于未注册
345
346
  dataset 的 OSS 回退目录探测。二者可并存(list_only 分支优先)。
347
+
348
+ ``dataset_source``(可选,"db"/"oss")指定数据集管理源:
349
+ - 空/"db"(默认):走 MongoDB 注册 + RBAC 授权流程
350
+ - "oss":纯 OSS 模式,跳过 RBAC,dataset_name/dataset_id 可不填,
351
+ 直接按 bucket+prefix 签发 STS
346
352
  """
347
353
  # 空串与 None 一律视为"不封顶"(与 Go 的 Permission == "" 语义对齐)。
348
354
  if permission and permission not in PERMISSION_VALUES:
349
355
  raise SchemaError(
350
356
  f"invalid permission '{permission}'; valid values: "
351
357
  f"{', '.join(PERMISSION_VALUES)}")
358
+ if dataset_source and dataset_source not in ("db", "oss"):
359
+ raise SchemaError(
360
+ f"invalid dataset_source '{dataset_source}'; valid values: db, oss")
352
361
 
353
362
  def sign() -> dict:
354
363
  body: dict[str, Any] = {"resource": "oss",
@@ -363,6 +372,8 @@ class Transport:
363
372
  body["permission"] = permission
364
373
  if list_only:
365
374
  body["list_only"] = True
375
+ if dataset_source:
376
+ body["dataset_source"] = dataset_source
366
377
  r = self.post("/apis/v1/credentials", body, idempotent=True)
367
378
  return {
368
379
  "access_key_id": self._require(r, "OSS_ACCESS_KEY_ID"),
@@ -376,11 +387,13 @@ class Transport:
376
387
  }
377
388
 
378
389
  ttl = float(min(duration_seconds or MIN_STS_DURATION, MAX_STS_DURATION))
379
- # permission 与 list_only 都必须进缓存 key:否则请求 reader 封顶的调用方可能
390
+ # permission、list_only、dataset_source 都必须进缓存 key:否则请求 reader 封顶的调用方可能
380
391
  # 命中此前那份未封顶(可写)的缓存令牌,权限收窄被静默绕过;list-only 令牌
381
- # 也可能被普通请求复用(反之亦然),发现模式与读写模式互相污染。
392
+ # 也可能被普通请求复用(反之亦然),发现模式与读写模式互相污染;
393
+ # oss 模式凭据不能被 db 模式复用(反之亦然)。
382
394
  cache_key = ("oss", bucket, prefix, duration_seconds,
383
- dataset_id, dataset_name, permission or None, list_only)
395
+ dataset_id, dataset_name, permission or None, list_only,
396
+ dataset_source or None)
384
397
  return self._cached_cred(cache_key, sign, fallback_ttl=ttl)
385
398
 
386
399
  def get_acr_credentials(self, acr_registry_url: str, *,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instance-repo
3
- Version: 1.3.5.dev2
3
+ Version: 1.3.5.dev3
4
4
  Summary: InstanceRepo SDK — 评测 Instance 统一存储客户端(SDK-only;控制面由 apiserver 承载)
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "instance-repo"
7
- version = "1.3.5.dev2"
7
+ version = "1.3.5.dev3"
8
8
  description = "InstanceRepo SDK — 评测 Instance 统一存储客户端(SDK-only;控制面由 apiserver 承载)"
9
9
  requires-python = ">=3.10"
10
10
  readme = "README.md"