metal-stack-api 0.0.38__py3-none-any.whl → 0.0.40__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.
Files changed (70) hide show
  1. {metal_stack_api-0.0.38.dist-info → metal_stack_api-0.0.40.dist-info}/METADATA +3 -3
  2. metal_stack_api-0.0.40.dist-info/RECORD +108 -0
  3. {metal_stack_api-0.0.38.dist-info → metal_stack_api-0.0.40.dist-info}/WHEEL +1 -1
  4. metalstack/admin/v2/filesystem_connect.py +8 -7
  5. metalstack/admin/v2/filesystem_pb2.py +3 -3
  6. metalstack/admin/v2/image_connect.py +9 -8
  7. metalstack/admin/v2/image_pb2.py +3 -3
  8. metalstack/admin/v2/ip_connect.py +6 -5
  9. metalstack/admin/v2/ip_pb2.py +3 -3
  10. metalstack/admin/v2/machine_connect.py +7 -6
  11. metalstack/admin/v2/machine_pb2.py +3 -3
  12. metalstack/admin/v2/network_connect.py +10 -9
  13. metalstack/admin/v2/network_pb2.py +3 -3
  14. metalstack/admin/v2/partition_connect.py +9 -8
  15. metalstack/admin/v2/partition_pb2.py +3 -3
  16. metalstack/admin/v2/project_connect.py +6 -5
  17. metalstack/admin/v2/project_pb2.py +3 -3
  18. metalstack/admin/v2/size_connect.py +8 -7
  19. metalstack/admin/v2/size_pb2.py +3 -3
  20. metalstack/admin/v2/switch_connect.py +11 -10
  21. metalstack/admin/v2/switch_pb2.py +21 -21
  22. metalstack/admin/v2/switch_pb2.pyi +2 -4
  23. metalstack/admin/v2/tenant_connect.py +7 -6
  24. metalstack/admin/v2/tenant_pb2.py +3 -3
  25. metalstack/admin/v2/token_connect.py +8 -7
  26. metalstack/admin/v2/token_pb2.py +3 -3
  27. metalstack/admin/v2/vpn_connect.py +7 -6
  28. metalstack/admin/v2/vpn_pb2.py +17 -14
  29. metalstack/admin/v2/vpn_pb2.pyi +13 -4
  30. metalstack/api/v2/common_pb2.py +3 -3
  31. metalstack/api/v2/filesystem_connect.py +8 -7
  32. metalstack/api/v2/filesystem_pb2.py +3 -3
  33. metalstack/api/v2/health_connect.py +6 -5
  34. metalstack/api/v2/health_pb2.py +3 -3
  35. metalstack/api/v2/image_connect.py +8 -7
  36. metalstack/api/v2/image_pb2.py +3 -3
  37. metalstack/api/v2/ip_connect.py +10 -9
  38. metalstack/api/v2/ip_pb2.py +3 -3
  39. metalstack/api/v2/machine_connect.py +10 -9
  40. metalstack/api/v2/machine_pb2.py +3 -3
  41. metalstack/api/v2/method_connect.py +7 -6
  42. metalstack/api/v2/method_pb2.py +3 -3
  43. metalstack/api/v2/network_connect.py +11 -10
  44. metalstack/api/v2/network_pb2.py +3 -3
  45. metalstack/api/v2/partition_connect.py +7 -6
  46. metalstack/api/v2/partition_pb2.py +3 -3
  47. metalstack/api/v2/predefined_rules_pb2.py +3 -3
  48. metalstack/api/v2/project_connect.py +18 -17
  49. metalstack/api/v2/project_pb2.py +3 -3
  50. metalstack/api/v2/size_connect.py +7 -6
  51. metalstack/api/v2/size_pb2.py +3 -3
  52. metalstack/api/v2/switch_pb2.py +19 -17
  53. metalstack/api/v2/tenant_connect.py +18 -17
  54. metalstack/api/v2/tenant_pb2.py +3 -3
  55. metalstack/api/v2/token_connect.py +11 -10
  56. metalstack/api/v2/token_pb2.py +3 -3
  57. metalstack/api/v2/user_connect.py +6 -5
  58. metalstack/api/v2/user_pb2.py +3 -3
  59. metalstack/api/v2/version_connect.py +6 -5
  60. metalstack/api/v2/version_pb2.py +3 -3
  61. metalstack/api/v2/vpn_pb2.py +3 -3
  62. metalstack/infra/v2/bmc_connect.py +71 -5
  63. metalstack/infra/v2/bmc_pb2.py +12 -6
  64. metalstack/infra/v2/bmc_pb2.pyi +8 -0
  65. metalstack/infra/v2/event_connect.py +6 -5
  66. metalstack/infra/v2/event_pb2.py +3 -3
  67. metalstack/infra/v2/switch_connect.py +8 -7
  68. metalstack/infra/v2/switch_pb2.py +3 -3
  69. metal_stack_api-0.0.38.dist-info/RECORD +0 -108
  70. {metal_stack_api-0.0.38.dist-info → metal_stack_api-0.0.40.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,7 @@
2
2
  # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT!
3
3
  # source: metalstack/admin/v2/size.proto
4
4
 
5
- from collections.abc import AsyncIterator, Iterable, Iterator, Mapping
5
+ from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
6
6
  from typing import Protocol
7
7
 
8
8
  from connectrpc.client import ConnectClient, ConnectClientSync
@@ -26,10 +26,11 @@ class SizeService(Protocol):
26
26
  raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
27
27
 
28
28
 
29
- class SizeServiceASGIApplication(ConnectASGIApplication):
30
- def __init__(self, service: SizeService, *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
29
+ class SizeServiceASGIApplication(ConnectASGIApplication[SizeService]):
30
+ def __init__(self, service: SizeService | AsyncGenerator[SizeService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
31
31
  super().__init__(
32
- endpoints={
32
+ service=service,
33
+ endpoints=lambda svc: {
33
34
  "/metalstack.admin.v2.SizeService/Create": Endpoint.unary(
34
35
  method=MethodInfo(
35
36
  name="Create",
@@ -38,7 +39,7 @@ class SizeServiceASGIApplication(ConnectASGIApplication):
38
39
  output=metalstack_dot_admin_dot_v2_dot_size__pb2.SizeServiceCreateResponse,
39
40
  idempotency_level=IdempotencyLevel.UNKNOWN,
40
41
  ),
41
- function=service.create,
42
+ function=svc.create,
42
43
  ),
43
44
  "/metalstack.admin.v2.SizeService/Update": Endpoint.unary(
44
45
  method=MethodInfo(
@@ -48,7 +49,7 @@ class SizeServiceASGIApplication(ConnectASGIApplication):
48
49
  output=metalstack_dot_admin_dot_v2_dot_size__pb2.SizeServiceUpdateResponse,
49
50
  idempotency_level=IdempotencyLevel.UNKNOWN,
50
51
  ),
51
- function=service.update,
52
+ function=svc.update,
52
53
  ),
53
54
  "/metalstack.admin.v2.SizeService/Delete": Endpoint.unary(
54
55
  method=MethodInfo(
@@ -58,7 +59,7 @@ class SizeServiceASGIApplication(ConnectASGIApplication):
58
59
  output=metalstack_dot_admin_dot_v2_dot_size__pb2.SizeServiceDeleteResponse,
59
60
  idempotency_level=IdempotencyLevel.UNKNOWN,
60
61
  ),
61
- function=service.delete,
62
+ function=svc.delete,
62
63
  ),
63
64
  },
64
65
  interceptors=interceptors,
@@ -2,7 +2,7 @@
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # NO CHECKED-IN PROTOBUF GENCODE
4
4
  # source: metalstack/admin/v2/size.proto
5
- # Protobuf Python Version: 6.32.1
5
+ # Protobuf Python Version: 6.33.4
6
6
  """Generated protocol buffer code."""
7
7
  from google.protobuf import descriptor as _descriptor
8
8
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -12,8 +12,8 @@ from google.protobuf.internal import builder as _builder
12
12
  _runtime_version.ValidateProtobufRuntimeVersion(
13
13
  _runtime_version.Domain.PUBLIC,
14
14
  6,
15
- 32,
16
- 1,
15
+ 33,
16
+ 4,
17
17
  '',
18
18
  'metalstack/admin/v2/size.proto'
19
19
  )
@@ -2,7 +2,7 @@
2
2
  # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT!
3
3
  # source: metalstack/admin/v2/switch.proto
4
4
 
5
- from collections.abc import AsyncIterator, Iterable, Iterator, Mapping
5
+ from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
6
6
  from typing import Protocol
7
7
 
8
8
  from connectrpc.client import ConnectClient, ConnectClientSync
@@ -35,10 +35,11 @@ class SwitchService(Protocol):
35
35
  raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
36
36
 
37
37
 
38
- class SwitchServiceASGIApplication(ConnectASGIApplication):
39
- def __init__(self, service: SwitchService, *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
38
+ class SwitchServiceASGIApplication(ConnectASGIApplication[SwitchService]):
39
+ def __init__(self, service: SwitchService | AsyncGenerator[SwitchService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
40
40
  super().__init__(
41
- endpoints={
41
+ service=service,
42
+ endpoints=lambda svc: {
42
43
  "/metalstack.admin.v2.SwitchService/Get": Endpoint.unary(
43
44
  method=MethodInfo(
44
45
  name="Get",
@@ -47,7 +48,7 @@ class SwitchServiceASGIApplication(ConnectASGIApplication):
47
48
  output=metalstack_dot_admin_dot_v2_dot_switch__pb2.SwitchServiceGetResponse,
48
49
  idempotency_level=IdempotencyLevel.UNKNOWN,
49
50
  ),
50
- function=service.get,
51
+ function=svc.get,
51
52
  ),
52
53
  "/metalstack.admin.v2.SwitchService/List": Endpoint.unary(
53
54
  method=MethodInfo(
@@ -57,7 +58,7 @@ class SwitchServiceASGIApplication(ConnectASGIApplication):
57
58
  output=metalstack_dot_admin_dot_v2_dot_switch__pb2.SwitchServiceListResponse,
58
59
  idempotency_level=IdempotencyLevel.UNKNOWN,
59
60
  ),
60
- function=service.list,
61
+ function=svc.list,
61
62
  ),
62
63
  "/metalstack.admin.v2.SwitchService/Update": Endpoint.unary(
63
64
  method=MethodInfo(
@@ -67,7 +68,7 @@ class SwitchServiceASGIApplication(ConnectASGIApplication):
67
68
  output=metalstack_dot_admin_dot_v2_dot_switch__pb2.SwitchServiceUpdateResponse,
68
69
  idempotency_level=IdempotencyLevel.UNKNOWN,
69
70
  ),
70
- function=service.update,
71
+ function=svc.update,
71
72
  ),
72
73
  "/metalstack.admin.v2.SwitchService/Delete": Endpoint.unary(
73
74
  method=MethodInfo(
@@ -77,7 +78,7 @@ class SwitchServiceASGIApplication(ConnectASGIApplication):
77
78
  output=metalstack_dot_admin_dot_v2_dot_switch__pb2.SwitchServiceDeleteResponse,
78
79
  idempotency_level=IdempotencyLevel.UNKNOWN,
79
80
  ),
80
- function=service.delete,
81
+ function=svc.delete,
81
82
  ),
82
83
  "/metalstack.admin.v2.SwitchService/Migrate": Endpoint.unary(
83
84
  method=MethodInfo(
@@ -87,7 +88,7 @@ class SwitchServiceASGIApplication(ConnectASGIApplication):
87
88
  output=metalstack_dot_admin_dot_v2_dot_switch__pb2.SwitchServiceMigrateResponse,
88
89
  idempotency_level=IdempotencyLevel.UNKNOWN,
89
90
  ),
90
- function=service.migrate,
91
+ function=svc.migrate,
91
92
  ),
92
93
  "/metalstack.admin.v2.SwitchService/Port": Endpoint.unary(
93
94
  method=MethodInfo(
@@ -97,7 +98,7 @@ class SwitchServiceASGIApplication(ConnectASGIApplication):
97
98
  output=metalstack_dot_admin_dot_v2_dot_switch__pb2.SwitchServicePortResponse,
98
99
  idempotency_level=IdempotencyLevel.UNKNOWN,
99
100
  ),
100
- function=service.port,
101
+ function=svc.port,
101
102
  ),
102
103
  },
103
104
  interceptors=interceptors,
@@ -2,7 +2,7 @@
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # NO CHECKED-IN PROTOBUF GENCODE
4
4
  # source: metalstack/admin/v2/switch.proto
5
- # Protobuf Python Version: 6.32.1
5
+ # Protobuf Python Version: 6.33.4
6
6
  """Generated protocol buffer code."""
7
7
  from google.protobuf import descriptor as _descriptor
8
8
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -12,8 +12,8 @@ from google.protobuf.internal import builder as _builder
12
12
  _runtime_version.ValidateProtobufRuntimeVersion(
13
13
  _runtime_version.Domain.PUBLIC,
14
14
  6,
15
- 32,
16
- 1,
15
+ 33,
16
+ 4,
17
17
  '',
18
18
  'metalstack/admin/v2/switch.proto'
19
19
  )
@@ -29,7 +29,7 @@ from metalstack.api.v2 import predefined_rules_pb2 as metalstack_dot_api_dot_v2_
29
29
  from metalstack.api.v2 import switch_pb2 as metalstack_dot_api_dot_v2_dot_switch__pb2
30
30
 
31
31
 
32
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n metalstack/admin/v2/switch.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a\x1emetalstack/api/v2/switch.proto\"8\n\x17SwitchServiceGetRequest\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\"M\n\x18SwitchServiceGetResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch\"P\n\x18SwitchServiceListRequest\x12\x34\n\x05query\x18\x01 \x01(\x0b\x32\x1e.metalstack.api.v2.SwitchQueryR\x05query\"R\n\x19SwitchServiceListResponse\x12\x35\n\x08switches\x18\x01 \x03(\x0b\x32\x19.metalstack.api.v2.SwitchR\x08switches\"\x90\x06\n\x1aSwitchServiceUpdateRequest\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\x39\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12V\n\x0creplace_mode\x18\x05 \x01(\x0e\x32$.metalstack.api.v2.SwitchReplaceModeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x01R\x0breplaceMode\x88\x01\x01\x12\x31\n\rmanagement_ip\x18\x06 \x01(\tB\x07\xbaH\x04r\x02p\x01H\x02R\x0cmanagementIp\x88\x01\x01\x12\x39\n\x0fmanagement_user\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x0emanagementUser\x88\x01\x01\x12\x39\n\x0f\x63onsole_command\x18\x08 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x04R\x0e\x63onsoleCommand\x88\x01\x01\x12\x30\n\x04nics\x18\t \x03(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x04nics\x12\x30\n\x02os\x18\n \x01(\x0b\x32\x1b.metalstack.api.v2.SwitchOSH\x05R\x02os\x88\x01\x01\x12U\n\x13machine_connections\x18\x0b \x03(\x0b\x32$.metalstack.api.v2.MachineConnectionR\x12machineConnectionsB\x0e\n\x0c_descriptionB\x0f\n\r_replace_modeB\x10\n\x0e_management_ipB\x12\n\x10_management_userB\x12\n\x10_console_commandB\x05\n\x03_os\"P\n\x1bSwitchServiceUpdateResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch\"Q\n\x1aSwitchServiceDeleteRequest\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\x14\n\x05\x66orce\x18\x02 \x01(\x08R\x05\x66orce\"P\n\x1bSwitchServiceDeleteResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch\"y\n\x1bSwitchServiceMigrateRequest\x12,\n\nold_switch\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\toldSwitch\x12,\n\nnew_switch\x18\x02 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\tnewSwitch\"Q\n\x1cSwitchServiceMigrateResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch\"\xa8\x01\n\x18SwitchServicePortRequest\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12&\n\x08nic_name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07nicName\x12\x45\n\x06status\x18\x03 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06status\"N\n\x19SwitchServicePortResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch2\xbf\x05\n\rSwitchService\x12n\n\x03Get\x12,.metalstack.admin.v2.SwitchServiceGetRequest\x1a-.metalstack.admin.v2.SwitchServiceGetResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12q\n\x04List\x12-.metalstack.admin.v2.SwitchServiceListRequest\x1a..metalstack.admin.v2.SwitchServiceListResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12r\n\x06Update\x12/.metalstack.admin.v2.SwitchServiceUpdateRequest\x1a\x30.metalstack.admin.v2.SwitchServiceUpdateResponse\"\x05\xd2\xf3\x18\x01\x01\x12r\n\x06\x44\x65lete\x12/.metalstack.admin.v2.SwitchServiceDeleteRequest\x1a\x30.metalstack.admin.v2.SwitchServiceDeleteResponse\"\x05\xd2\xf3\x18\x01\x01\x12u\n\x07Migrate\x12\x30.metalstack.admin.v2.SwitchServiceMigrateRequest\x1a\x31.metalstack.admin.v2.SwitchServiceMigrateResponse\"\x05\xd2\xf3\x18\x01\x01\x12l\n\x04Port\x12-.metalstack.admin.v2.SwitchServicePortRequest\x1a..metalstack.admin.v2.SwitchServicePortResponse\"\x05\xd2\xf3\x18\x01\x01\x42\xcf\x01\n\x17\x63om.metalstack.admin.v2B\x0bSwitchProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
32
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n metalstack/admin/v2/switch.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a\x1emetalstack/api/v2/switch.proto\"8\n\x17SwitchServiceGetRequest\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\"M\n\x18SwitchServiceGetResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch\"P\n\x18SwitchServiceListRequest\x12\x34\n\x05query\x18\x01 \x01(\x0b\x32\x1e.metalstack.api.v2.SwitchQueryR\x05query\"R\n\x19SwitchServiceListResponse\x12\x35\n\x08switches\x18\x01 \x03(\x0b\x32\x19.metalstack.api.v2.SwitchR\x08switches\"\xb9\x05\n\x1aSwitchServiceUpdateRequest\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\x39\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12V\n\x0creplace_mode\x18\x05 \x01(\x0e\x32$.metalstack.api.v2.SwitchReplaceModeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x01R\x0breplaceMode\x88\x01\x01\x12\x31\n\rmanagement_ip\x18\x06 \x01(\tB\x07\xbaH\x04r\x02p\x01H\x02R\x0cmanagementIp\x88\x01\x01\x12\x39\n\x0fmanagement_user\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x0emanagementUser\x88\x01\x01\x12\x39\n\x0f\x63onsole_command\x18\x08 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x04R\x0e\x63onsoleCommand\x88\x01\x01\x12\x30\n\x04nics\x18\t \x03(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x04nics\x12\x30\n\x02os\x18\n \x01(\x0b\x32\x1b.metalstack.api.v2.SwitchOSH\x05R\x02os\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0f\n\r_replace_modeB\x10\n\x0e_management_ipB\x12\n\x10_management_userB\x12\n\x10_console_commandB\x05\n\x03_os\"P\n\x1bSwitchServiceUpdateResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch\"Q\n\x1aSwitchServiceDeleteRequest\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\x14\n\x05\x66orce\x18\x02 \x01(\x08R\x05\x66orce\"P\n\x1bSwitchServiceDeleteResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch\"y\n\x1bSwitchServiceMigrateRequest\x12,\n\nold_switch\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\toldSwitch\x12,\n\nnew_switch\x18\x02 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\tnewSwitch\"Q\n\x1cSwitchServiceMigrateResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch\"\xa8\x01\n\x18SwitchServicePortRequest\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12&\n\x08nic_name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07nicName\x12\x45\n\x06status\x18\x03 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06status\"N\n\x19SwitchServicePortResponse\x12\x31\n\x06switch\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.SwitchR\x06switch2\xbf\x05\n\rSwitchService\x12n\n\x03Get\x12,.metalstack.admin.v2.SwitchServiceGetRequest\x1a-.metalstack.admin.v2.SwitchServiceGetResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12q\n\x04List\x12-.metalstack.admin.v2.SwitchServiceListRequest\x1a..metalstack.admin.v2.SwitchServiceListResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12r\n\x06Update\x12/.metalstack.admin.v2.SwitchServiceUpdateRequest\x1a\x30.metalstack.admin.v2.SwitchServiceUpdateResponse\"\x05\xd2\xf3\x18\x01\x01\x12r\n\x06\x44\x65lete\x12/.metalstack.admin.v2.SwitchServiceDeleteRequest\x1a\x30.metalstack.admin.v2.SwitchServiceDeleteResponse\"\x05\xd2\xf3\x18\x01\x01\x12u\n\x07Migrate\x12\x30.metalstack.admin.v2.SwitchServiceMigrateRequest\x1a\x31.metalstack.admin.v2.SwitchServiceMigrateResponse\"\x05\xd2\xf3\x18\x01\x01\x12l\n\x04Port\x12-.metalstack.admin.v2.SwitchServicePortRequest\x1a..metalstack.admin.v2.SwitchServicePortResponse\"\x05\xd2\xf3\x18\x01\x01\x42\xcf\x01\n\x17\x63om.metalstack.admin.v2B\x0bSwitchProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
33
33
 
34
34
  _globals = globals()
35
35
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -86,21 +86,21 @@ if not _descriptor._USE_C_DESCRIPTORS:
86
86
  _globals['_SWITCHSERVICELISTRESPONSE']._serialized_start=444
87
87
  _globals['_SWITCHSERVICELISTRESPONSE']._serialized_end=526
88
88
  _globals['_SWITCHSERVICEUPDATEREQUEST']._serialized_start=529
89
- _globals['_SWITCHSERVICEUPDATEREQUEST']._serialized_end=1313
90
- _globals['_SWITCHSERVICEUPDATERESPONSE']._serialized_start=1315
91
- _globals['_SWITCHSERVICEUPDATERESPONSE']._serialized_end=1395
92
- _globals['_SWITCHSERVICEDELETEREQUEST']._serialized_start=1397
93
- _globals['_SWITCHSERVICEDELETEREQUEST']._serialized_end=1478
94
- _globals['_SWITCHSERVICEDELETERESPONSE']._serialized_start=1480
95
- _globals['_SWITCHSERVICEDELETERESPONSE']._serialized_end=1560
96
- _globals['_SWITCHSERVICEMIGRATEREQUEST']._serialized_start=1562
97
- _globals['_SWITCHSERVICEMIGRATEREQUEST']._serialized_end=1683
98
- _globals['_SWITCHSERVICEMIGRATERESPONSE']._serialized_start=1685
99
- _globals['_SWITCHSERVICEMIGRATERESPONSE']._serialized_end=1766
100
- _globals['_SWITCHSERVICEPORTREQUEST']._serialized_start=1769
101
- _globals['_SWITCHSERVICEPORTREQUEST']._serialized_end=1937
102
- _globals['_SWITCHSERVICEPORTRESPONSE']._serialized_start=1939
103
- _globals['_SWITCHSERVICEPORTRESPONSE']._serialized_end=2017
104
- _globals['_SWITCHSERVICE']._serialized_start=2020
105
- _globals['_SWITCHSERVICE']._serialized_end=2723
89
+ _globals['_SWITCHSERVICEUPDATEREQUEST']._serialized_end=1226
90
+ _globals['_SWITCHSERVICEUPDATERESPONSE']._serialized_start=1228
91
+ _globals['_SWITCHSERVICEUPDATERESPONSE']._serialized_end=1308
92
+ _globals['_SWITCHSERVICEDELETEREQUEST']._serialized_start=1310
93
+ _globals['_SWITCHSERVICEDELETEREQUEST']._serialized_end=1391
94
+ _globals['_SWITCHSERVICEDELETERESPONSE']._serialized_start=1393
95
+ _globals['_SWITCHSERVICEDELETERESPONSE']._serialized_end=1473
96
+ _globals['_SWITCHSERVICEMIGRATEREQUEST']._serialized_start=1475
97
+ _globals['_SWITCHSERVICEMIGRATEREQUEST']._serialized_end=1596
98
+ _globals['_SWITCHSERVICEMIGRATERESPONSE']._serialized_start=1598
99
+ _globals['_SWITCHSERVICEMIGRATERESPONSE']._serialized_end=1679
100
+ _globals['_SWITCHSERVICEPORTREQUEST']._serialized_start=1682
101
+ _globals['_SWITCHSERVICEPORTREQUEST']._serialized_end=1850
102
+ _globals['_SWITCHSERVICEPORTRESPONSE']._serialized_start=1852
103
+ _globals['_SWITCHSERVICEPORTRESPONSE']._serialized_end=1930
104
+ _globals['_SWITCHSERVICE']._serialized_start=1933
105
+ _globals['_SWITCHSERVICE']._serialized_end=2636
106
106
  # @@protoc_insertion_point(module_scope)
@@ -38,7 +38,7 @@ class SwitchServiceListResponse(_message.Message):
38
38
  def __init__(self, switches: _Optional[_Iterable[_Union[_switch_pb2.Switch, _Mapping]]] = ...) -> None: ...
39
39
 
40
40
  class SwitchServiceUpdateRequest(_message.Message):
41
- __slots__ = ("id", "update_meta", "updated_at", "description", "replace_mode", "management_ip", "management_user", "console_command", "nics", "os", "machine_connections")
41
+ __slots__ = ("id", "update_meta", "updated_at", "description", "replace_mode", "management_ip", "management_user", "console_command", "nics", "os")
42
42
  ID_FIELD_NUMBER: _ClassVar[int]
43
43
  UPDATE_META_FIELD_NUMBER: _ClassVar[int]
44
44
  UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@@ -49,7 +49,6 @@ class SwitchServiceUpdateRequest(_message.Message):
49
49
  CONSOLE_COMMAND_FIELD_NUMBER: _ClassVar[int]
50
50
  NICS_FIELD_NUMBER: _ClassVar[int]
51
51
  OS_FIELD_NUMBER: _ClassVar[int]
52
- MACHINE_CONNECTIONS_FIELD_NUMBER: _ClassVar[int]
53
52
  id: str
54
53
  update_meta: _common_pb2.UpdateMeta
55
54
  updated_at: _timestamp_pb2.Timestamp
@@ -60,8 +59,7 @@ class SwitchServiceUpdateRequest(_message.Message):
60
59
  console_command: str
61
60
  nics: _containers.RepeatedCompositeFieldContainer[_switch_pb2.SwitchNic]
62
61
  os: _switch_pb2.SwitchOS
63
- machine_connections: _containers.RepeatedCompositeFieldContainer[_switch_pb2.MachineConnection]
64
- def __init__(self, id: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ..., updated_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., description: _Optional[str] = ..., replace_mode: _Optional[_Union[_switch_pb2.SwitchReplaceMode, str]] = ..., management_ip: _Optional[str] = ..., management_user: _Optional[str] = ..., console_command: _Optional[str] = ..., nics: _Optional[_Iterable[_Union[_switch_pb2.SwitchNic, _Mapping]]] = ..., os: _Optional[_Union[_switch_pb2.SwitchOS, _Mapping]] = ..., machine_connections: _Optional[_Iterable[_Union[_switch_pb2.MachineConnection, _Mapping]]] = ...) -> None: ...
62
+ def __init__(self, id: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ..., updated_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., description: _Optional[str] = ..., replace_mode: _Optional[_Union[_switch_pb2.SwitchReplaceMode, str]] = ..., management_ip: _Optional[str] = ..., management_user: _Optional[str] = ..., console_command: _Optional[str] = ..., nics: _Optional[_Iterable[_Union[_switch_pb2.SwitchNic, _Mapping]]] = ..., os: _Optional[_Union[_switch_pb2.SwitchOS, _Mapping]] = ...) -> None: ...
65
63
 
66
64
  class SwitchServiceUpdateResponse(_message.Message):
67
65
  __slots__ = ("switch",)
@@ -2,7 +2,7 @@
2
2
  # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT!
3
3
  # source: metalstack/admin/v2/tenant.proto
4
4
 
5
- from collections.abc import AsyncIterator, Iterable, Iterator, Mapping
5
+ from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
6
6
  from typing import Protocol
7
7
 
8
8
  from connectrpc.client import ConnectClient, ConnectClientSync
@@ -23,10 +23,11 @@ class TenantService(Protocol):
23
23
  raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
24
24
 
25
25
 
26
- class TenantServiceASGIApplication(ConnectASGIApplication):
27
- def __init__(self, service: TenantService, *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
26
+ class TenantServiceASGIApplication(ConnectASGIApplication[TenantService]):
27
+ def __init__(self, service: TenantService | AsyncGenerator[TenantService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
28
28
  super().__init__(
29
- endpoints={
29
+ service=service,
30
+ endpoints=lambda svc: {
30
31
  "/metalstack.admin.v2.TenantService/Create": Endpoint.unary(
31
32
  method=MethodInfo(
32
33
  name="Create",
@@ -35,7 +36,7 @@ class TenantServiceASGIApplication(ConnectASGIApplication):
35
36
  output=metalstack_dot_admin_dot_v2_dot_tenant__pb2.TenantServiceCreateResponse,
36
37
  idempotency_level=IdempotencyLevel.UNKNOWN,
37
38
  ),
38
- function=service.create,
39
+ function=svc.create,
39
40
  ),
40
41
  "/metalstack.admin.v2.TenantService/List": Endpoint.unary(
41
42
  method=MethodInfo(
@@ -45,7 +46,7 @@ class TenantServiceASGIApplication(ConnectASGIApplication):
45
46
  output=metalstack_dot_admin_dot_v2_dot_tenant__pb2.TenantServiceListResponse,
46
47
  idempotency_level=IdempotencyLevel.UNKNOWN,
47
48
  ),
48
- function=service.list,
49
+ function=svc.list,
49
50
  ),
50
51
  },
51
52
  interceptors=interceptors,
@@ -2,7 +2,7 @@
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # NO CHECKED-IN PROTOBUF GENCODE
4
4
  # source: metalstack/admin/v2/tenant.proto
5
- # Protobuf Python Version: 6.32.1
5
+ # Protobuf Python Version: 6.33.4
6
6
  """Generated protocol buffer code."""
7
7
  from google.protobuf import descriptor as _descriptor
8
8
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -12,8 +12,8 @@ from google.protobuf.internal import builder as _builder
12
12
  _runtime_version.ValidateProtobufRuntimeVersion(
13
13
  _runtime_version.Domain.PUBLIC,
14
14
  6,
15
- 32,
16
- 1,
15
+ 33,
16
+ 4,
17
17
  '',
18
18
  'metalstack/admin/v2/tenant.proto'
19
19
  )
@@ -2,7 +2,7 @@
2
2
  # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT!
3
3
  # source: metalstack/admin/v2/token.proto
4
4
 
5
- from collections.abc import AsyncIterator, Iterable, Iterator, Mapping
5
+ from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
6
6
  from typing import Protocol
7
7
 
8
8
  from connectrpc.client import ConnectClient, ConnectClientSync
@@ -26,10 +26,11 @@ class TokenService(Protocol):
26
26
  raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
27
27
 
28
28
 
29
- class TokenServiceASGIApplication(ConnectASGIApplication):
30
- def __init__(self, service: TokenService, *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
29
+ class TokenServiceASGIApplication(ConnectASGIApplication[TokenService]):
30
+ def __init__(self, service: TokenService | AsyncGenerator[TokenService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
31
31
  super().__init__(
32
- endpoints={
32
+ service=service,
33
+ endpoints=lambda svc: {
33
34
  "/metalstack.admin.v2.TokenService/List": Endpoint.unary(
34
35
  method=MethodInfo(
35
36
  name="List",
@@ -38,7 +39,7 @@ class TokenServiceASGIApplication(ConnectASGIApplication):
38
39
  output=metalstack_dot_admin_dot_v2_dot_token__pb2.TokenServiceListResponse,
39
40
  idempotency_level=IdempotencyLevel.UNKNOWN,
40
41
  ),
41
- function=service.list,
42
+ function=svc.list,
42
43
  ),
43
44
  "/metalstack.admin.v2.TokenService/Revoke": Endpoint.unary(
44
45
  method=MethodInfo(
@@ -48,7 +49,7 @@ class TokenServiceASGIApplication(ConnectASGIApplication):
48
49
  output=metalstack_dot_admin_dot_v2_dot_token__pb2.TokenServiceRevokeResponse,
49
50
  idempotency_level=IdempotencyLevel.UNKNOWN,
50
51
  ),
51
- function=service.revoke,
52
+ function=svc.revoke,
52
53
  ),
53
54
  "/metalstack.admin.v2.TokenService/Create": Endpoint.unary(
54
55
  method=MethodInfo(
@@ -58,7 +59,7 @@ class TokenServiceASGIApplication(ConnectASGIApplication):
58
59
  output=metalstack_dot_admin_dot_v2_dot_token__pb2.TokenServiceCreateResponse,
59
60
  idempotency_level=IdempotencyLevel.UNKNOWN,
60
61
  ),
61
- function=service.create,
62
+ function=svc.create,
62
63
  ),
63
64
  },
64
65
  interceptors=interceptors,
@@ -2,7 +2,7 @@
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # NO CHECKED-IN PROTOBUF GENCODE
4
4
  # source: metalstack/admin/v2/token.proto
5
- # Protobuf Python Version: 6.32.1
5
+ # Protobuf Python Version: 6.33.4
6
6
  """Generated protocol buffer code."""
7
7
  from google.protobuf import descriptor as _descriptor
8
8
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -12,8 +12,8 @@ from google.protobuf.internal import builder as _builder
12
12
  _runtime_version.ValidateProtobufRuntimeVersion(
13
13
  _runtime_version.Domain.PUBLIC,
14
14
  6,
15
- 32,
16
- 1,
15
+ 33,
16
+ 4,
17
17
  '',
18
18
  'metalstack/admin/v2/token.proto'
19
19
  )
@@ -2,7 +2,7 @@
2
2
  # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT!
3
3
  # source: metalstack/admin/v2/vpn.proto
4
4
 
5
- from collections.abc import AsyncIterator, Iterable, Iterator, Mapping
5
+ from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
6
6
  from typing import Protocol
7
7
 
8
8
  from connectrpc.client import ConnectClient, ConnectClientSync
@@ -23,10 +23,11 @@ class VPNService(Protocol):
23
23
  raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
24
24
 
25
25
 
26
- class VPNServiceASGIApplication(ConnectASGIApplication):
27
- def __init__(self, service: VPNService, *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
26
+ class VPNServiceASGIApplication(ConnectASGIApplication[VPNService]):
27
+ def __init__(self, service: VPNService | AsyncGenerator[VPNService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
28
28
  super().__init__(
29
- endpoints={
29
+ service=service,
30
+ endpoints=lambda svc: {
30
31
  "/metalstack.admin.v2.VPNService/AuthKey": Endpoint.unary(
31
32
  method=MethodInfo(
32
33
  name="AuthKey",
@@ -35,7 +36,7 @@ class VPNServiceASGIApplication(ConnectASGIApplication):
35
36
  output=metalstack_dot_admin_dot_v2_dot_vpn__pb2.VPNServiceAuthKeyResponse,
36
37
  idempotency_level=IdempotencyLevel.UNKNOWN,
37
38
  ),
38
- function=service.auth_key,
39
+ function=svc.auth_key,
39
40
  ),
40
41
  "/metalstack.admin.v2.VPNService/ListNodes": Endpoint.unary(
41
42
  method=MethodInfo(
@@ -45,7 +46,7 @@ class VPNServiceASGIApplication(ConnectASGIApplication):
45
46
  output=metalstack_dot_admin_dot_v2_dot_vpn__pb2.VPNServiceListNodesResponse,
46
47
  idempotency_level=IdempotencyLevel.UNKNOWN,
47
48
  ),
48
- function=service.list_nodes,
49
+ function=svc.list_nodes,
49
50
  ),
50
51
  },
51
52
  interceptors=interceptors,
@@ -2,7 +2,7 @@
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # NO CHECKED-IN PROTOBUF GENCODE
4
4
  # source: metalstack/admin/v2/vpn.proto
5
- # Protobuf Python Version: 6.32.1
5
+ # Protobuf Python Version: 6.33.4
6
6
  """Generated protocol buffer code."""
7
7
  from google.protobuf import descriptor as _descriptor
8
8
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -12,8 +12,8 @@ from google.protobuf.internal import builder as _builder
12
12
  _runtime_version.ValidateProtobufRuntimeVersion(
13
13
  _runtime_version.Domain.PUBLIC,
14
14
  6,
15
- 32,
16
- 1,
15
+ 33,
16
+ 4,
17
17
  '',
18
18
  'metalstack/admin/v2/vpn.proto'
19
19
  )
@@ -24,11 +24,12 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
  from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
26
26
  from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
27
+ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
27
28
  from metalstack.api.v2 import common_pb2 as metalstack_dot_api_dot_v2_dot_common__pb2
28
29
  from metalstack.api.v2 import vpn_pb2 as metalstack_dot_api_dot_v2_dot_vpn__pb2
29
30
 
30
31
 
31
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dmetalstack/admin/v2/vpn.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1bmetalstack/api/v2/vpn.proto\"\x91\x01\n\x18VPNServiceAuthKeyRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\tephemeral\x18\x02 \x01(\x08R\tephemeral\x12\x33\n\x07\x65xpires\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07\x65xpires\"P\n\x19VPNServiceAuthKeyResponse\x12\x18\n\x07\x61\x64\x64ress\x18\x01 \x01(\tR\x07\x61\x64\x64ress\x12\x19\n\x08\x61uth_key\x18\x02 \x01(\tR\x07\x61uthKey\"G\n\x1aVPNServiceListNodesRequest\x12\x1d\n\x07project\x18\x01 \x01(\tH\x00R\x07project\x88\x01\x01\x42\n\n\x08_project\"O\n\x1bVPNServiceListNodesResponse\x12\x30\n\x05nodes\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.VPNNodeR\x05nodes2\xf5\x01\n\nVPNService\x12o\n\x07\x41uthKey\x12-.metalstack.admin.v2.VPNServiceAuthKeyRequest\x1a..metalstack.admin.v2.VPNServiceAuthKeyResponse\"\x05\xd2\xf3\x18\x01\x01\x12v\n\tListNodes\x12/.metalstack.admin.v2.VPNServiceListNodesRequest\x1a\x30.metalstack.admin.v2.VPNServiceListNodesResponse\"\x06\xd2\xf3\x18\x02\x01\x02\x42\xcc\x01\n\x17\x63om.metalstack.admin.v2B\x08VpnProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
32
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dmetalstack/admin/v2/vpn.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1bmetalstack/api/v2/vpn.proto\"\xb5\x01\n\x18VPNServiceAuthKeyRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\tephemeral\x18\x02 \x01(\x08R\tephemeral\x12\x33\n\x07\x65xpires\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07\x65xpires\x12\"\n\x06reason\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\n\x18\x80\x04R\x06reason\"\xe4\x01\n\x19VPNServiceAuthKeyResponse\x12\x18\n\x07\x61\x64\x64ress\x18\x01 \x01(\tR\x07\x61\x64\x64ress\x12\x19\n\x08\x61uth_key\x18\x02 \x01(\tR\x07\x61uthKey\x12\x1c\n\tephemeral\x18\x03 \x01(\x08R\tephemeral\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x39\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"G\n\x1aVPNServiceListNodesRequest\x12\x1d\n\x07project\x18\x01 \x01(\tH\x00R\x07project\x88\x01\x01\x42\n\n\x08_project\"O\n\x1bVPNServiceListNodesResponse\x12\x30\n\x05nodes\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.VPNNodeR\x05nodes2\xf5\x01\n\nVPNService\x12o\n\x07\x41uthKey\x12-.metalstack.admin.v2.VPNServiceAuthKeyRequest\x1a..metalstack.admin.v2.VPNServiceAuthKeyResponse\"\x05\xd2\xf3\x18\x01\x01\x12v\n\tListNodes\x12/.metalstack.admin.v2.VPNServiceListNodesRequest\x1a\x30.metalstack.admin.v2.VPNServiceListNodesResponse\"\x06\xd2\xf3\x18\x02\x01\x02\x42\xcc\x01\n\x17\x63om.metalstack.admin.v2B\x08VpnProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
32
33
 
33
34
  _globals = globals()
34
35
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -38,18 +39,20 @@ if not _descriptor._USE_C_DESCRIPTORS:
38
39
  _globals['DESCRIPTOR']._serialized_options = b'\n\027com.metalstack.admin.v2B\010VpnProtoP\001Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\242\002\003MAX\252\002\023Metalstack.Admin.V2\312\002\023Metalstack\\Admin\\V2\342\002\037Metalstack\\Admin\\V2\\GPBMetadata\352\002\025Metalstack::Admin::V2'
39
40
  _globals['_VPNSERVICEAUTHKEYREQUEST'].fields_by_name['project']._loaded_options = None
40
41
  _globals['_VPNSERVICEAUTHKEYREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
42
+ _globals['_VPNSERVICEAUTHKEYREQUEST'].fields_by_name['reason']._loaded_options = None
43
+ _globals['_VPNSERVICEAUTHKEYREQUEST'].fields_by_name['reason']._serialized_options = b'\272H\007r\005\020\n\030\200\004'
41
44
  _globals['_VPNSERVICE'].methods_by_name['AuthKey']._loaded_options = None
42
45
  _globals['_VPNSERVICE'].methods_by_name['AuthKey']._serialized_options = b'\322\363\030\001\001'
43
46
  _globals['_VPNSERVICE'].methods_by_name['ListNodes']._loaded_options = None
44
47
  _globals['_VPNSERVICE'].methods_by_name['ListNodes']._serialized_options = b'\322\363\030\002\001\002'
45
- _globals['_VPNSERVICEAUTHKEYREQUEST']._serialized_start=177
46
- _globals['_VPNSERVICEAUTHKEYREQUEST']._serialized_end=322
47
- _globals['_VPNSERVICEAUTHKEYRESPONSE']._serialized_start=324
48
- _globals['_VPNSERVICEAUTHKEYRESPONSE']._serialized_end=404
49
- _globals['_VPNSERVICELISTNODESREQUEST']._serialized_start=406
50
- _globals['_VPNSERVICELISTNODESREQUEST']._serialized_end=477
51
- _globals['_VPNSERVICELISTNODESRESPONSE']._serialized_start=479
52
- _globals['_VPNSERVICELISTNODESRESPONSE']._serialized_end=558
53
- _globals['_VPNSERVICE']._serialized_start=561
54
- _globals['_VPNSERVICE']._serialized_end=806
48
+ _globals['_VPNSERVICEAUTHKEYREQUEST']._serialized_start=210
49
+ _globals['_VPNSERVICEAUTHKEYREQUEST']._serialized_end=391
50
+ _globals['_VPNSERVICEAUTHKEYRESPONSE']._serialized_start=394
51
+ _globals['_VPNSERVICEAUTHKEYRESPONSE']._serialized_end=622
52
+ _globals['_VPNSERVICELISTNODESREQUEST']._serialized_start=624
53
+ _globals['_VPNSERVICELISTNODESREQUEST']._serialized_end=695
54
+ _globals['_VPNSERVICELISTNODESRESPONSE']._serialized_start=697
55
+ _globals['_VPNSERVICELISTNODESRESPONSE']._serialized_end=776
56
+ _globals['_VPNSERVICE']._serialized_start=779
57
+ _globals['_VPNSERVICE']._serialized_end=1024
55
58
  # @@protoc_insertion_point(module_scope)
@@ -2,6 +2,7 @@ import datetime
2
2
 
3
3
  from buf.validate import validate_pb2 as _validate_pb2
4
4
  from google.protobuf import duration_pb2 as _duration_pb2
5
+ from google.protobuf import timestamp_pb2 as _timestamp_pb2
5
6
  from metalstack.api.v2 import common_pb2 as _common_pb2
6
7
  from metalstack.api.v2 import vpn_pb2 as _vpn_pb2
7
8
  from google.protobuf.internal import containers as _containers
@@ -13,22 +14,30 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
13
14
  DESCRIPTOR: _descriptor.FileDescriptor
14
15
 
15
16
  class VPNServiceAuthKeyRequest(_message.Message):
16
- __slots__ = ("project", "ephemeral", "expires")
17
+ __slots__ = ("project", "ephemeral", "expires", "reason")
17
18
  PROJECT_FIELD_NUMBER: _ClassVar[int]
18
19
  EPHEMERAL_FIELD_NUMBER: _ClassVar[int]
19
20
  EXPIRES_FIELD_NUMBER: _ClassVar[int]
21
+ REASON_FIELD_NUMBER: _ClassVar[int]
20
22
  project: str
21
23
  ephemeral: bool
22
24
  expires: _duration_pb2.Duration
23
- def __init__(self, project: _Optional[str] = ..., ephemeral: _Optional[bool] = ..., expires: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ...) -> None: ...
25
+ reason: str
26
+ def __init__(self, project: _Optional[str] = ..., ephemeral: _Optional[bool] = ..., expires: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., reason: _Optional[str] = ...) -> None: ...
24
27
 
25
28
  class VPNServiceAuthKeyResponse(_message.Message):
26
- __slots__ = ("address", "auth_key")
29
+ __slots__ = ("address", "auth_key", "ephemeral", "expires_at", "created_at")
27
30
  ADDRESS_FIELD_NUMBER: _ClassVar[int]
28
31
  AUTH_KEY_FIELD_NUMBER: _ClassVar[int]
32
+ EPHEMERAL_FIELD_NUMBER: _ClassVar[int]
33
+ EXPIRES_AT_FIELD_NUMBER: _ClassVar[int]
34
+ CREATED_AT_FIELD_NUMBER: _ClassVar[int]
29
35
  address: str
30
36
  auth_key: str
31
- def __init__(self, address: _Optional[str] = ..., auth_key: _Optional[str] = ...) -> None: ...
37
+ ephemeral: bool
38
+ expires_at: _timestamp_pb2.Timestamp
39
+ created_at: _timestamp_pb2.Timestamp
40
+ def __init__(self, address: _Optional[str] = ..., auth_key: _Optional[str] = ..., ephemeral: _Optional[bool] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., created_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
32
41
 
33
42
  class VPNServiceListNodesRequest(_message.Message):
34
43
  __slots__ = ("project",)
@@ -2,7 +2,7 @@
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # NO CHECKED-IN PROTOBUF GENCODE
4
4
  # source: metalstack/api/v2/common.proto
5
- # Protobuf Python Version: 6.32.1
5
+ # Protobuf Python Version: 6.33.4
6
6
  """Generated protocol buffer code."""
7
7
  from google.protobuf import descriptor as _descriptor
8
8
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -12,8 +12,8 @@ from google.protobuf.internal import builder as _builder
12
12
  _runtime_version.ValidateProtobufRuntimeVersion(
13
13
  _runtime_version.Domain.PUBLIC,
14
14
  6,
15
- 32,
16
- 1,
15
+ 33,
16
+ 4,
17
17
  '',
18
18
  'metalstack/api/v2/common.proto'
19
19
  )
@@ -2,7 +2,7 @@
2
2
  # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT!
3
3
  # source: metalstack/api/v2/filesystem.proto
4
4
 
5
- from collections.abc import AsyncIterator, Iterable, Iterator, Mapping
5
+ from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
6
6
  from typing import Protocol
7
7
 
8
8
  from connectrpc.client import ConnectClient, ConnectClientSync
@@ -26,10 +26,11 @@ class FilesystemService(Protocol):
26
26
  raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
27
27
 
28
28
 
29
- class FilesystemServiceASGIApplication(ConnectASGIApplication):
30
- def __init__(self, service: FilesystemService, *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
29
+ class FilesystemServiceASGIApplication(ConnectASGIApplication[FilesystemService]):
30
+ def __init__(self, service: FilesystemService | AsyncGenerator[FilesystemService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
31
31
  super().__init__(
32
- endpoints={
32
+ service=service,
33
+ endpoints=lambda svc: {
33
34
  "/metalstack.api.v2.FilesystemService/Get": Endpoint.unary(
34
35
  method=MethodInfo(
35
36
  name="Get",
@@ -38,7 +39,7 @@ class FilesystemServiceASGIApplication(ConnectASGIApplication):
38
39
  output=metalstack_dot_api_dot_v2_dot_filesystem__pb2.FilesystemServiceGetResponse,
39
40
  idempotency_level=IdempotencyLevel.UNKNOWN,
40
41
  ),
41
- function=service.get,
42
+ function=svc.get,
42
43
  ),
43
44
  "/metalstack.api.v2.FilesystemService/List": Endpoint.unary(
44
45
  method=MethodInfo(
@@ -48,7 +49,7 @@ class FilesystemServiceASGIApplication(ConnectASGIApplication):
48
49
  output=metalstack_dot_api_dot_v2_dot_filesystem__pb2.FilesystemServiceListResponse,
49
50
  idempotency_level=IdempotencyLevel.UNKNOWN,
50
51
  ),
51
- function=service.list,
52
+ function=svc.list,
52
53
  ),
53
54
  "/metalstack.api.v2.FilesystemService/Match": Endpoint.unary(
54
55
  method=MethodInfo(
@@ -58,7 +59,7 @@ class FilesystemServiceASGIApplication(ConnectASGIApplication):
58
59
  output=metalstack_dot_api_dot_v2_dot_filesystem__pb2.FilesystemServiceMatchResponse,
59
60
  idempotency_level=IdempotencyLevel.UNKNOWN,
60
61
  ),
61
- function=service.match,
62
+ function=svc.match,
62
63
  ),
63
64
  },
64
65
  interceptors=interceptors,