boxd 0.2.18.dev892__py3-none-any.whl → 0.2.18.dev896__py3-none-any.whl

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.
boxd/_client.py CHANGED
@@ -31,7 +31,7 @@ class Boxd:
31
31
 
32
32
  boxd = Boxd() # production
33
33
  boxd = Boxd(api_key="bxd_...")
34
- boxd = Boxd(base_url="https://boxd-stg.sh:9443") # any other cluster
34
+ boxd = Boxd(base_url="https://boxd.example.com:9443") # any other cluster
35
35
 
36
36
  Args:
37
37
  api_key: A `bxd_` API key. Defaults to `BOXD_API_KEY`.
boxd/_credentials.py CHANGED
@@ -28,8 +28,7 @@ import httpx
28
28
 
29
29
  from .errors import AuthenticationError, RateLimitError
30
30
 
31
- # The in-VM metadata adapter (`crates/boxd-worker/src/metadata.rs`) listens on
32
- # the VM's default gateway.
31
+ # The in-VM metadata adapter listens on the VM's default gateway.
33
32
  METADATA_PORT = 9002
34
33
  METADATA_TOKEN_PATH = "/v1/auth/token"
35
34
  # Proxy-minted, HMAC-signed identity token exposed to every guest process by
@@ -57,7 +56,7 @@ _NO_CREDENTIALS = (
57
56
  def detect_gateway() -> str | None:
58
57
  """Read the default gateway from ``/proc/net/route``.
59
58
 
60
- Same approach as `crates/boxd-sdk/src/client.rs`: the gateway column of the
59
+ Same approach as the in-VM `boxd` CLI: the gateway column of the
61
60
  default route is a hex-encoded little-endian IPv4 address.
62
61
  """
63
62
  try:
@@ -658,7 +658,7 @@ class BoxdApiServicer(object):
658
658
  raise NotImplementedError('Method not implemented!')
659
659
 
660
660
  def SetVmNetworks(self, request, context):
661
- """Replaces a VM's whole network-tag set (BOX-41) — not add/remove, the
661
+ """Replaces a VM's whole network-tag set — not add/remove, the
662
662
  caller sends the complete desired set. Networks drive east-west
663
663
  reachability within the caller's org; see CreateVmRequest.networks.
664
664
  """
@@ -667,7 +667,7 @@ class BoxdApiServicer(object):
667
667
  raise NotImplementedError('Method not implemented!')
668
668
 
669
669
  def SetVmEgressAllow(self, request, context):
670
- """Replaces a VM's egress allowlist (BOX-209): hostnames / wildcards and
670
+ """Replaces a VM's egress allowlist: hostnames / wildcards and
671
671
  public IPv4 addresses / CIDRs the machine may reach. Empty = no
672
672
  allowlist. Only reachable through the public API (no CLI, no in-VM route).
673
673
  """
@@ -676,7 +676,7 @@ class BoxdApiServicer(object):
676
676
  raise NotImplementedError('Method not implemented!')
677
677
 
678
678
  def UpdateVmLabels(self, request, context):
679
- """Edits a machine's labels (BOX-470): user-set key=value metadata for
679
+ """Edits a machine's labels: user-set key=value metadata for
680
680
  grouping and finding machines. Returns the labels after the edit.
681
681
  """
682
682
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -708,7 +708,7 @@ class BoxdApiServicer(object):
708
708
  rejects it exactly like ListVms omits it and Exec refuses it, so a
709
709
  caller polling GetVm to confirm teardown never sees a stale "running"
710
710
  (or any other live-looking) status for a machine it already destroyed
711
- (BOX-281).
711
+ .
712
712
  """
713
713
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
714
714
  context.set_details('Method not implemented!')
@@ -786,7 +786,7 @@ class BoxdApiServicer(object):
786
786
  Cancelling the call — a client-side timeout expiring, or the caller
787
787
  half-closing/cancelling the stream — does NOT just walk away from the
788
788
  remote command: it kills it. The in-VM agent runs every exec'd command
789
- in its own process group (BOX-284) and, once it notices this RPC has
789
+ in its own process group and, once it notices this RPC has
790
790
  been torn down while the command is still running, sends SIGTERM to
791
791
  that whole group, then SIGKILL after a short grace period if it hasn't
792
792
  exited. Both SDKs' `timeout` / `stream.close()` (`close()`) go through
@@ -1045,7 +1045,7 @@ class BoxdApiServicer(object):
1045
1045
  raise NotImplementedError('Method not implemented!')
1046
1046
 
1047
1047
  def CreateSnapshot(self, request, context):
1048
- """Templates are operator-managed (boxd-ctl) and used only as the fast default
1048
+ """Templates are managed by the platform and used only as the fast default
1049
1049
  path of `new` when a prepped template matches the image + size — there is no
1050
1050
  public API to create/list/delete templates or create a VM from a specific one.
1051
1051
  Snapshots: user/org point-in-time VM captures (memory + disk), replicated
@@ -1238,14 +1238,14 @@ class BoxdApiServicer(object):
1238
1238
 
1239
1239
  def GetOrgBilling(self, request, context):
1240
1240
  """The org's shared plan: aggregate quota + current usage. Any member may
1241
- view it (read-only; the operator sets the quota via boxd-ctl).
1241
+ view it (read-only; the platform sets the quota).
1242
1242
  """
1243
1243
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1244
1244
  context.set_details('Method not implemented!')
1245
1245
  raise NotImplementedError('Method not implemented!')
1246
1246
 
1247
1247
  def GetOrgUsage(self, request, context):
1248
- """Usage and cost (BOX-290): what each machine used and cost over a window,
1248
+ """Usage and cost: what each machine used and cost over a window,
1249
1249
  and billing activity (what was actually charged). Org owners and admins
1250
1250
  only; API keys fenced to the org work, tokens minted inside a VM don't.
1251
1251
  """
@@ -1266,8 +1266,7 @@ class BoxdApiServicer(object):
1266
1266
  raise NotImplementedError('Method not implemented!')
1267
1267
 
1268
1268
  def SetBackupSchedule(self, request, context):
1269
- """Disaster recovery: scheduled VM disk backups to object storage
1270
- (plans/2026-08-10-dr-vm-backups.md). Off by default — SetBackupSchedule
1269
+ """Disaster recovery: scheduled VM disk backups to object storage. Off by default — SetBackupSchedule
1271
1270
  is refused server-side if the cluster has no [backups] object store
1272
1271
  configured.
1273
1272
  """
@@ -1294,7 +1293,7 @@ class BoxdApiServicer(object):
1294
1293
  raise NotImplementedError('Method not implemented!')
1295
1294
 
1296
1295
  def TriggerBackup(self, request, context):
1297
- """On-demand "back up now" (BOX-148) — captures immediately, independent of
1296
+ """On-demand "back up now" — captures immediately, independent of
1298
1297
  (and without disturbing) any schedule. Retention resolves from the VM's
1299
1298
  schedule, else the org default, else the platform default.
1300
1299
  """
@@ -1303,7 +1302,7 @@ class BoxdApiServicer(object):
1303
1302
  raise NotImplementedError('Method not implemented!')
1304
1303
 
1305
1304
  def DeleteBackup(self, request, context):
1306
- """Manual deletion of a single backup by id (BOX-148). Refused for a backup
1305
+ """Manual deletion of a single backup by id. Refused for a backup
1307
1306
  still being captured or one a newer dedup pointer depends on.
1308
1307
  """
1309
1308
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -1321,8 +1320,7 @@ class BoxdApiServicer(object):
1321
1320
  def SetOrgBackupsDefault(self, request, context):
1322
1321
  """The org's default backup schedule for NEW VMs (existing VMs are
1323
1322
  unchanged; a fork always copies its own source's schedule instead of
1324
- this default — see plans/2026-08-10-dr-vm-backups.md Q3). Self-service
1325
- counterpart to the operator-only `boxd-ctl org set-backups-default`.
1323
+ this default). Self-service: org admins set it themselves.
1326
1324
  Set/Clear require org admin; Get is readable by any member — same shape
1327
1325
  as SetOrgDomain/GetOrgDomain above.
1328
1326
  """
@@ -1337,7 +1335,7 @@ class BoxdApiServicer(object):
1337
1335
  raise NotImplementedError('Method not implemented!')
1338
1336
 
1339
1337
  def SetOrgMachineDefaults(self, request, context):
1340
- """The org's default machine SIZE (BOX-154): what a machine gets at CREATE
1338
+ """The org's default machine SIZE: what a machine gets at CREATE
1341
1339
  when the request names no size. Distinct from the quota: the quota stays
1342
1340
  the operator-owned ceiling and the per-request maximum; this is the
1343
1341
  org-admin-owned preference below it (clamped to the ceiling). Every
@@ -1356,12 +1354,12 @@ class BoxdApiServicer(object):
1356
1354
  raise NotImplementedError('Method not implemented!')
1357
1355
 
1358
1356
  def SetOrgIdleIgnoreOutboundDefault(self, request, context):
1359
- """The org's default for idle.ignore-outbound (BOX-532): whether a NEW
1357
+ """The org's default for idle.ignore-outbound: whether a NEW
1360
1358
  machine in the org starts with its idle clock ignoring outbound traffic
1361
1359
  when its create request does not say. An org without one follows the
1362
1360
  platform's setting. Setting it also sets it on the existing machines and
1363
1361
  snapshots the caller may manage, unless the Set asks for
1364
- `new_machines_only` (BOX-547); a fork or a restore keeps its source's
1362
+ `new_machines_only`; a fork or a restore keeps its source's
1365
1363
  value either way.
1366
1364
  Set/Clear require org admin; Get is readable by any member.
1367
1365
  """
@@ -1376,7 +1374,7 @@ class BoxdApiServicer(object):
1376
1374
  raise NotImplementedError('Method not implemented!')
1377
1375
 
1378
1376
  def SetOrgBotProtectionDefault(self, request, context):
1379
- """The org's default bot protection mode (BOX-523): what a NEW machine in
1377
+ """The org's default bot protection mode: what a NEW machine in
1380
1378
  the org starts with. An org without one follows the cluster's setting
1381
1379
  for new machines. Every machine keeps the mode it has, so changing this
1382
1380
  only affects machines created afterwards; a fork or a restore keeps its
@@ -1394,8 +1392,8 @@ class BoxdApiServicer(object):
1394
1392
  raise NotImplementedError('Method not implemented!')
1395
1393
 
1396
1394
  def CreateOrg(self, request, context):
1397
- """Org creation, roster, and membership (self-serve, mirrors the console's
1398
- org.rs exactly — same Raft commands, same business rules). Any signed-in
1395
+ """Org creation, roster, and membership (self-serve, same business rules as
1396
+ the console). Any signed-in
1399
1397
  user may create an org (becomes its owner+admin); invite/revoke/remove/
1400
1398
  set-role require org admin.
1401
1399
 
@@ -1438,7 +1436,7 @@ class BoxdApiServicer(object):
1438
1436
  raise NotImplementedError('Method not implemented!')
1439
1437
 
1440
1438
  def RemoveOrgMember(self, request, context):
1441
- """Refused for an org owner/admin (operator-only via boxd-ctl) or a member
1439
+ """Refused for an org owner/admin (only the platform can remove those) or a member
1442
1440
  who still owns VMs billed to this org — same guardrails as the console.
1443
1441
  """
1444
1442
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -1447,7 +1445,7 @@ class BoxdApiServicer(object):
1447
1445
 
1448
1446
  def SetOrgMemberRole(self, request, context):
1449
1447
  """Promote a member to admin, or demote an admin back to member. Refused for
1450
- the owner (use boxd-ctl set-owner to transfer ownership) and for a target
1448
+ the owner (ownership is transferred by the platform) and for a target
1451
1449
  that isn't a member. Demoting ANOTHER admin is owner-only (an admin may
1452
1450
  only step down themselves) — otherwise any admin could demote a peer and
1453
1451
  then RemoveOrgMember them, defeating that RPC's admin guard. Promoting to
@@ -1458,7 +1456,7 @@ class BoxdApiServicer(object):
1458
1456
  raise NotImplementedError('Method not implemented!')
1459
1457
 
1460
1458
  def ListTeams(self, request, context):
1461
- """Teams (BOX-104/BOX-106): org-scoped sub-grouping of members, each with an
1459
+ """Teams: org-scoped sub-grouping of members, each with an
1462
1460
  optional default snapshot new team machines boot from. Creating a team
1463
1461
  requires org admin; every other write requires team-admin (inherited by
1464
1462
  every org admin, or held directly via a team_members.role='admin' row).
boxd/_mappers.py CHANGED
@@ -556,7 +556,7 @@ def api_key(msg) -> ApiKey:
556
556
  org=msg.org,
557
557
  kind=msg.kind,
558
558
  created_by=msg.created_by,
559
- # A server from before BOX-554 lists only the caller's own keys and
559
+ # An older server lists only the caller's own keys and
560
560
  # sends neither field.
561
561
  mine=msg.mine or not msg.created_by,
562
562
  )
boxd/_requests.py CHANGED
@@ -77,7 +77,7 @@ def vm_config(
77
77
  srf.auto_suspend_timeout_secs = auto_suspend_timeout
78
78
  config.srf.CopyFrom(srf)
79
79
  if idle_ignore_outbound is not None:
80
- # `optional` on the wire (BOX-532): unset means "not requested", which
80
+ # `optional` on the wire: unset means "not requested", which
81
81
  # is not the same as False. A new machine then takes its org's default
82
82
  # and a fork or restore keeps the source's value. Only touch it when
83
83
  # asked, and send an explicit False as False.
@@ -420,9 +420,9 @@ def set_org_idle_ignore_outbound_default(
420
420
  `enabled` is `optional` on the wire, and absence is what clears the
421
421
  default, so None must stay unset rather than become False.
422
422
 
423
- Existing machines change unless `new_machines_only` (BOX-547). The wire
424
- also carries `apply_existing` as its opposite, so a server from before
425
- BOX-547, which only reads that field, does the same. `apply_existing` is
423
+ Existing machines change unless `new_machines_only`. The wire
424
+ also carries `apply_existing` as its opposite, so an older server,
425
+ which only reads that field, does the same. `apply_existing` is
426
426
  accepted from callers written against 0.2.16 and changes nothing, but
427
427
  asking for it together with `new_machines_only` is a contradiction.
428
428
  """
@@ -434,7 +434,7 @@ def set_org_idle_ignore_outbound_default(
434
434
  request = api_pb2.SetOrgIdleIgnoreOutboundDefaultRequest(
435
435
  org_id=org or "",
436
436
  new_machines_only=new_machines_only,
437
- # A clear has nothing to apply, and a pre-BOX-547 server refuses a
437
+ # A clear has nothing to apply, and an older server refuses a
438
438
  # clear that asks for it.
439
439
  apply_existing=enabled is not None and not new_machines_only,
440
440
  )
@@ -458,7 +458,7 @@ def unix_seconds(t: datetime | int | float | None) -> int:
458
458
 
459
459
 
460
460
  def set_delete_after(machine_id: str, seconds: int, cron: str | None):
461
- """`SetDeleteAfter` for a duration or a cron expression (BOX-469). The
461
+ """`SetDeleteAfter` for a duration or a cron expression. The
462
462
  server rejects both at once; here we catch it before the round trip."""
463
463
  if seconds and cron:
464
464
  raise ValueError("pass seconds or cron, not both")
boxd/_urls.py CHANGED
@@ -13,7 +13,7 @@ from typing import NamedTuple
13
13
 
14
14
  # gRPC front door, over TLS. The proxy still accepts plain HTTP/2 on the same
15
15
  # port for older clients, so an explicit http:// base_url keeps working against
16
- # any cluster (see `crates/boxd-proxy/src/api_transport.rs`).
16
+ # any cluster.
17
17
  DEFAULT_BASE_URL = "https://boxd.sh:9443"
18
18
 
19
19
  EXCHANGE_PATH = "/api/v1/auth/token"
@@ -40,7 +40,7 @@ def resolve_base_url(explicit: str | None) -> str | None:
40
40
  def console_base_url(base_url: str) -> str:
41
41
  """Map a gRPC base URL to the web-console origin that fronts `/api/v1/...`.
42
42
 
43
- Ported from `console_base_url` in `crates/boxd-cli/src/commands.rs`, with one
43
+ Same mapping as the `boxd` CLI uses, with one
44
44
  deliberate difference: the port is dropped. The CLI's input is a bare
45
45
  `https://boxd.sh`, but the SDK's default carries the gRPC port
46
46
  (`:9443`) — preserving it would aim the exchange at the gRPC listener. A
boxd/models.py CHANGED
@@ -77,7 +77,7 @@ class MachineAccess(BaseModel):
77
77
  the client has no endpoint to derive the console origin from. Opening it
78
78
  needs a signed-in browser; the machine is woken if it is asleep."""
79
79
  custom_domains: list[CustomDomain]
80
- """Per-VM custom domains bound to this machine (BOX-30), e.g.
80
+ """Per-VM custom domains bound to this machine, e.g.
81
81
  `app.example.com`. Distinct from `domain` above, which is the org's
82
82
  wildcard domain or the cluster zone. Empty if none are bound."""
83
83
 
@@ -42,7 +42,7 @@ from ..models import (
42
42
  )
43
43
  from . import Namespace
44
44
 
45
- # ── delete_self (BOX-468) ────────────────────────────────────────────
45
+ # ── delete_self ────────────────────────────────────────────
46
46
 
47
47
  _SELF_DESTROY_PATH = "/v1/self/destroy"
48
48
  _SELF_DELETE_TIMEOUT_SECS = 30.0
@@ -209,7 +209,7 @@ def _exec_init(
209
209
  # Same reasoning as `env`: no cwd field on ExecChunk, so `cd` ahead of
210
210
  # the command through the same shell. `&&` means a `cwd` that doesn't
211
211
  # exist fails fast with `cd`'s own error instead of silently running
212
- # in the default directory (BOX-292).
212
+ # in the default directory.
213
213
  line = f"cd {shlex.quote(cwd)} && {line}"
214
214
  return req.exec_chunk(
215
215
  machine_id=machine_id, command=line, tty=tty, cols=cols, rows=rows
@@ -378,7 +378,7 @@ class Machines(Namespace):
378
378
  created = self._transport.call(method, request)
379
379
  self._apply_delete_after(created.vm_id, delete_after, delete_after_cron)
380
380
  # Non-zero only for a machine made from a snapshot, a team's default
381
- # one included (BOX-557).
381
+ # one included.
382
382
  return _with_paused_automations(
383
383
  self._reread(created), created.paused_automations, from_snapshot=True
384
384
  )
@@ -400,7 +400,7 @@ class Machines(Namespace):
400
400
  Raises `NotFoundError` for a destroyed machine's id/name, same as
401
401
  `delete()` followed by `list()` omitting it — polling `get(id)`
402
402
  after `delete(id)` returns is a reliable way to confirm teardown
403
- completed (BOX-281).
403
+ completed.
404
404
  """
405
405
  return m.machine(
406
406
  self._transport.call("GetVm", api_pb2.GetVmRequest(vm_id=machine_id)),
@@ -476,7 +476,7 @@ class Machines(Namespace):
476
476
 
477
477
  def delete_self(self, *, confirm: str) -> SelfDeleteResult:
478
478
  """Delete **the machine this code is running on** — call it inside a
479
- boxd machine when its task is done (BOX-468).
479
+ boxd machine when its task is done.
480
480
 
481
481
  This is the SDK twin of ``boxd machine remove --self``, not a plain
482
482
  :meth:`delete` of your own id: the same server checks apply, and the
@@ -1291,7 +1291,7 @@ class AsyncMachines(Namespace):
1291
1291
  Raises `NotFoundError` for a destroyed machine's id/name, same as
1292
1292
  `delete()` followed by `list()` omitting it — polling `get(id)`
1293
1293
  after `delete(id)` returns is a reliable way to confirm teardown
1294
- completed (BOX-281).
1294
+ completed.
1295
1295
  """
1296
1296
  return m.machine(
1297
1297
  await self._transport.call("GetVm", api_pb2.GetVmRequest(vm_id=machine_id)),
boxd/resources/orgs.py CHANGED
@@ -97,7 +97,7 @@ class Orgs(Namespace):
97
97
  def remove_member(self, user_id: str, org: str = "") -> None:
98
98
  """Remove a plain member from the org. Requires org admin.
99
99
 
100
- Refused for an org owner/admin (operator-only, via boxd-ctl) or for a
100
+ Refused for an org owner/admin (only the platform can remove those) or for a
101
101
  member who still owns machines billed to this org — move them to
102
102
  personal billing or destroy them first.
103
103
  """
@@ -111,7 +111,7 @@ class Orgs(Namespace):
111
111
 
112
112
  Requires org admin. Demoting another admin is owner-only (you can
113
113
  always demote yourself). Refused for the org owner, whose ownership
114
- is transferred with boxd-ctl instead.
114
+ is transferred by the platform instead.
115
115
  """
116
116
  self._transport.call(
117
117
  "SetOrgMemberRole",
@@ -462,7 +462,7 @@ class AsyncOrgs(Namespace):
462
462
  async def remove_member(self, user_id: str, org: str = "") -> None:
463
463
  """Remove a plain member from the org. Requires org admin.
464
464
 
465
- Refused for an org owner/admin (operator-only, via boxd-ctl) or for a
465
+ Refused for an org owner/admin (only the platform can remove those) or for a
466
466
  member who still owns machines billed to this org — move them to
467
467
  personal billing or destroy them first.
468
468
  """
@@ -476,7 +476,7 @@ class AsyncOrgs(Namespace):
476
476
 
477
477
  Requires org admin. Demoting another admin is owner-only (you can
478
478
  always demote yourself). Refused for the org owner, whose ownership
479
- is transferred with boxd-ctl instead.
479
+ is transferred by the platform instead.
480
480
  """
481
481
  await self._transport.call(
482
482
  "SetOrgMemberRole",
@@ -1,10 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boxd
3
- Version: 0.2.18.dev892
3
+ Version: 0.2.18.dev896
4
4
  Summary: Python SDK for the boxd cloud VM platform
5
5
  Author: Azin
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://boxd.sh
8
+ Project-URL: Repository, https://github.com/azin-tech/boxd-sdk-python
9
+ Project-URL: Issues, https://github.com/azin-tech/boxd-sdk-python/issues
8
10
  Keywords: boxd,vm,microvm,sandbox,compute,grpc,sdk
9
11
  Classifier: Development Status :: 4 - Beta
10
12
  Classifier: Intended Audience :: Developers
@@ -1,29 +1,29 @@
1
1
  boxd/__init__.py,sha256=iOcfO04C7QF282n8lI4QxVbKLfWjBaBqYo_MbYDSEsU,3858
2
- boxd/_client.py,sha256=uQ85gM2D6yEmygDCqaulPU_ygNtn0psa_iD-eMZSsh4,5302
3
- boxd/_credentials.py,sha256=zv_l5nVEsHpQACm7Lu2EFv8GffscJZ3r_JaNxpv1ZAI,13207
4
- boxd/_mappers.py,sha256=xfwQzTeFRDllkugCCdx3KG4393jHTDDFc7FTAl94U4Q,20868
5
- boxd/_requests.py,sha256=FUw2CddIi93X3QOFbxcuEGWTYPzsYJxl13yRWtFnl6M,15536
2
+ boxd/_client.py,sha256=zkR7cKpf5uRZOidM7Pyt40JrbRdhftML7RyODRd-pws,5307
3
+ boxd/_credentials.py,sha256=AWFL-mX-yz9O42PyBMXZDxyxZPK6SAG11JQwF6i7kq4,13155
4
+ boxd/_mappers.py,sha256=5D6sdmX5NPVEa1pxMsCTaXVQx1n1B5xSde_BpAEfa3o,20855
5
+ boxd/_requests.py,sha256=nqrpgEEI-61rFO5fJt_kF6vkL9qbmQKDYcHDpHn_tx0,15488
6
6
  boxd/_streaming.py,sha256=1_kCIVuy1yaj0LM4NbYQXN2j1t2IKnczkwWwyYkjGpM,6718
7
7
  boxd/_transport.py,sha256=sYGBPF6iPLiFpK2cmMk0JuuCdncroANDucr6O-kEWrQ,9341
8
- boxd/_urls.py,sha256=1zORQXdwur8T6KUi3QRhv1tEx5jekhz-1h-bKcrm3cU,3703
8
+ boxd/_urls.py,sha256=L1zBDSKyfbOLTfFJ5fLSDKNb6I5XugHvYoxzwjD8N7o,3624
9
9
  boxd/_version_check.py,sha256=XJD_BY1CH5xOn2ArrbO2ZQXI6xf41o-zwQIReohF8sg,5623
10
10
  boxd/errors.py,sha256=Vapb1US78lxMvnzqsQ6oyHl2r_rs417Hl8YucT5Lme8,3435
11
- boxd/models.py,sha256=luBcZYJwl16h54NVuO3eHAtv8UOlyVfjceME5SkNDUg,28054
11
+ boxd/models.py,sha256=kQajJ1kUOd3eM9gLmRvKaB_qoeNQ9b1YX2EZH0SgGGk,28045
12
12
  boxd/_generated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  boxd/_generated/api_pb2.py,sha256=t1dzucIhqCGAJIVPYDick8-KPr4s6w4eOA8Y1-I5_-8,82366
14
- boxd/_generated/api_pb2_grpc.py,sha256=jCYV6SPthqqQTWqg81NDEoektFLm80pskx4rK376BA8,215789
14
+ boxd/_generated/api_pb2_grpc.py,sha256=6yIwOG7-CkO7wR8YvewldYmt7yW8cWGYl0C41FXZJkM,215459
15
15
  boxd/resources/__init__.py,sha256=Vu5kdlkF-_6pO9yU_tULm5zuTtvaNCOg5ZjXzb0lKN8,433
16
16
  boxd/resources/account.py,sha256=9I9iHHjmEOxvrJSP773uKVMHORgPvaZBKCWkhuaNNSo,2861
17
17
  boxd/resources/credentials.py,sha256=Jr-OZAdT-Tr-TVDTr_HUz5Ar9s8amZ6ibFAsHZHlISk,3891
18
18
  boxd/resources/disks.py,sha256=lqlAJxt1mMvmsQCfBabsTtDMAbPkfz3xD9W_aVvCLqg,3785
19
19
  boxd/resources/domains.py,sha256=e5cY6f4iTVny2m_BRVrrKf4KR452i9FAdS64_RvzhIk,2967
20
- boxd/resources/machines.py,sha256=0gP97qgs1y_YiBnlk3yzlM1kEwhAAwpZt15SjMtsvuY,78268
21
- boxd/resources/orgs.py,sha256=Zmj8reKXZs65FJ3fU9b2k_QeCiM7C9sWIM-PpKsnFts,28721
20
+ boxd/resources/machines.py,sha256=gTNvcItNLvd8QetMUEAG8ENdPiFGKVNQSgSDDTpo_ow,78208
21
+ boxd/resources/orgs.py,sha256=KzpFIdG_Vu4cYIIYA9d5CKpMhxirPUpA_kxEStI_o_0,28739
22
22
  boxd/resources/snapshots.py,sha256=-bjRll2Wt4rXISpfFdTiO9-1QvmanjMg_nWQvoh5iiM,4206
23
23
  boxd/resources/teams.py,sha256=f4TiaSzFxRBFShTWbQvjgsg7zsz29VHIHWBKadgG92Q,6361
24
24
  boxd/resources/vars.py,sha256=d654macR2xb-2YZ6Znwkuxj1akwzDq7rrvXgNdciJUU,9567
25
- boxd-0.2.18.dev892.dist-info/licenses/LICENSE,sha256=rD8_32iKSf_QarUkwB8tTujEORtC3uYs4KIggm6cFKg,1061
26
- boxd-0.2.18.dev892.dist-info/METADATA,sha256=bSakBhyHhqZColHyBzG3xnJQGHTcsoOg0XLQvHss2T4,35723
27
- boxd-0.2.18.dev892.dist-info/WHEEL,sha256=a-udL2m4V_6Yn8b-uKzWb12RjRxwwMo6ohYFM24tpaY,91
28
- boxd-0.2.18.dev892.dist-info/top_level.txt,sha256=lJFbtvnDUx23dMMfX5hqRWPjtUhgrLpNJ9qdCPwON30,5
29
- boxd-0.2.18.dev892.dist-info/RECORD,,
25
+ boxd-0.2.18.dev896.dist-info/licenses/LICENSE,sha256=rD8_32iKSf_QarUkwB8tTujEORtC3uYs4KIggm6cFKg,1061
26
+ boxd-0.2.18.dev896.dist-info/METADATA,sha256=X3xf6nO1XTvw8BAMhQTouF1gxm_hoSGFjwhOagRzSDA,35866
27
+ boxd-0.2.18.dev896.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
28
+ boxd-0.2.18.dev896.dist-info/top_level.txt,sha256=lJFbtvnDUx23dMMfX5hqRWPjtUhgrLpNJ9qdCPwON30,5
29
+ boxd-0.2.18.dev896.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (84.2.0)
2
+ Generator: setuptools (84.2.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5