meshtrade 1.0.1__py3-none-any.whl → 1.29.0__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 (163) hide show
  1. meshtrade/common/__init__.py +2 -4
  2. meshtrade/common/config.py +3 -4
  3. meshtrade/common/grpc_client.py +140 -0
  4. meshtrade/common/service_options.py +46 -0
  5. meshtrade/compliance/client/v1/__init__.py +0 -2
  6. meshtrade/compliance/client/v1/client_pb2.py +15 -4
  7. meshtrade/compliance/client/v1/client_pb2.pyi +1 -0
  8. meshtrade/compliance/client/v1/company_pb2.py +25 -8
  9. meshtrade/compliance/client/v1/company_pb2.pyi +1 -0
  10. meshtrade/compliance/client/v1/company_representative_pb2.py +9 -4
  11. meshtrade/compliance/client/v1/company_representative_pb2.pyi +1 -0
  12. meshtrade/compliance/client/v1/company_representative_role_pb2.py +2 -2
  13. meshtrade/compliance/client/v1/fund_pb2.py +13 -4
  14. meshtrade/compliance/client/v1/fund_pb2.pyi +1 -0
  15. meshtrade/compliance/client/v1/identification_document_type_pb2.py +2 -2
  16. meshtrade/compliance/client/v1/industry_classification_pb2.py +2 -2
  17. meshtrade/compliance/client/v1/natural_person_connection_type_pb2.py +2 -2
  18. meshtrade/compliance/client/v1/natural_person_pb2.py +19 -4
  19. meshtrade/compliance/client/v1/natural_person_pb2.pyi +1 -0
  20. meshtrade/compliance/client/v1/pep_status_pb2.py +2 -2
  21. meshtrade/compliance/client/v1/service_meshpy.py +2 -1
  22. meshtrade/compliance/client/v1/service_pb2.py +21 -17
  23. meshtrade/compliance/client/v1/service_pb2.pyi +2 -2
  24. meshtrade/compliance/client/v1/source_of_income_and_wealth_pb2.py +2 -2
  25. meshtrade/compliance/client/v1/tax_residency_pb2.py +9 -4
  26. meshtrade/compliance/client/v1/tax_residency_pb2.pyi +1 -0
  27. meshtrade/compliance/client/v1/trust_pb2.py +13 -4
  28. meshtrade/compliance/client/v1/trust_pb2.pyi +1 -0
  29. meshtrade/compliance/client/v1/verification_status_pb2.py +2 -2
  30. meshtrade/iam/api_user/v1/__init__.py +34 -26
  31. meshtrade/iam/api_user/v1/api_credentials_pb2.py +5 -5
  32. meshtrade/iam/api_user/v1/api_user_pb2.py +13 -9
  33. meshtrade/iam/api_user/v1/api_user_pb2.pyi +2 -4
  34. meshtrade/iam/api_user/v1/api_user_state_machine.py +104 -0
  35. meshtrade/iam/api_user/v1/service_meshpy.py +96 -61
  36. meshtrade/iam/api_user/v1/service_pb2.py +61 -40
  37. meshtrade/iam/api_user/v1/service_pb2.pyi +26 -11
  38. meshtrade/iam/api_user/v1/service_pb2_grpc.py +179 -135
  39. meshtrade/iam/group/v1/__init__.py +4 -2
  40. meshtrade/iam/group/v1/group_pb2.py +13 -4
  41. meshtrade/iam/group/v1/group_pb2.pyi +9 -2
  42. meshtrade/iam/group/v1/service_meshpy.py +41 -6
  43. meshtrade/iam/group/v1/service_pb2.py +47 -20
  44. meshtrade/iam/group/v1/service_pb2.pyi +46 -13
  45. meshtrade/iam/group/v1/service_pb2_grpc.py +151 -16
  46. meshtrade/iam/role/v1/__init__.py +17 -4
  47. meshtrade/iam/role/v1/role.py +162 -11
  48. meshtrade/iam/role/v1/role_pb2.py +4 -7
  49. meshtrade/iam/role/v1/role_pb2.pyi +53 -23
  50. meshtrade/iam/user/v1/__init__.py +22 -4
  51. meshtrade/iam/user/v1/service_meshpy.py +129 -7
  52. meshtrade/iam/user/v1/service_pb2.py +66 -16
  53. meshtrade/iam/user/v1/service_pb2.pyi +81 -9
  54. meshtrade/iam/user/v1/service_pb2_grpc.py +385 -14
  55. meshtrade/iam/user/v1/user_pb2.py +13 -4
  56. meshtrade/iam/user/v1/user_pb2.pyi +7 -2
  57. meshtrade/ledger/transaction/v1/__init__.py +25 -1
  58. meshtrade/ledger/transaction/v1/service_meshpy.py +176 -0
  59. meshtrade/ledger/transaction/v1/service_pb2.py +56 -0
  60. meshtrade/ledger/transaction/v1/service_pb2.pyi +32 -0
  61. meshtrade/ledger/transaction/v1/service_pb2_grpc.py +131 -0
  62. meshtrade/ledger/transaction/v1/transaction_action_pb2.py +2 -2
  63. meshtrade/ledger/transaction/v1/transaction_state_machine.py +75 -0
  64. meshtrade/ledger/transaction/v1/transaction_state_pb2.py +2 -2
  65. meshtrade/{reporting/income_report → market_data/price}/v1/__init__.py +11 -20
  66. meshtrade/market_data/price/v1/price_pb2.py +40 -0
  67. meshtrade/market_data/price/v1/price_pb2.pyi +23 -0
  68. meshtrade/market_data/price/v1/service_meshpy.py +152 -0
  69. meshtrade/market_data/price/v1/service_pb2.py +49 -0
  70. meshtrade/market_data/price/v1/service_pb2.pyi +18 -0
  71. meshtrade/market_data/price/v1/service_pb2_grpc.py +84 -0
  72. meshtrade/option/method_options/v1/__init__.py +41 -0
  73. meshtrade/option/method_options/v1/method_options_pb2.py +43 -0
  74. meshtrade/option/method_options/v1/method_options_pb2.pyi +40 -0
  75. meshtrade/reporting/account_report/v1/__init__.py +66 -0
  76. meshtrade/reporting/account_report/v1/account_report_pb2.py +46 -0
  77. meshtrade/reporting/account_report/v1/account_report_pb2.pyi +49 -0
  78. meshtrade/reporting/{income_report → account_report}/v1/disclaimer_pb2.py +7 -7
  79. meshtrade/reporting/account_report/v1/fee_entry_pb2.py +39 -0
  80. meshtrade/reporting/account_report/v1/fee_entry_pb2.pyi +26 -0
  81. meshtrade/reporting/account_report/v1/fee_entry_pb2_grpc.py +4 -0
  82. meshtrade/reporting/account_report/v1/income_entry.py +35 -0
  83. meshtrade/reporting/account_report/v1/income_entry_pb2.py +42 -0
  84. meshtrade/reporting/{income_report/v1/entry_pb2.pyi → account_report/v1/income_entry_pb2.pyi} +18 -10
  85. meshtrade/reporting/account_report/v1/income_entry_pb2_grpc.py +4 -0
  86. meshtrade/reporting/{income_report → account_report}/v1/service_meshpy.py +37 -36
  87. meshtrade/reporting/account_report/v1/service_pb2.py +72 -0
  88. meshtrade/reporting/account_report/v1/service_pb2.pyi +43 -0
  89. meshtrade/reporting/account_report/v1/service_pb2_grpc.py +161 -0
  90. meshtrade/reporting/account_report/v1/trading_statement_entry_pb2.py +39 -0
  91. meshtrade/reporting/account_report/v1/trading_statement_entry_pb2.pyi +30 -0
  92. meshtrade/reporting/account_report/v1/trading_statement_entry_pb2_grpc.py +4 -0
  93. meshtrade/studio/instrument/v1/__init__.py +43 -0
  94. meshtrade/studio/instrument/v1/instrument_pb2.py +45 -0
  95. meshtrade/studio/instrument/v1/instrument_pb2.pyi +20 -0
  96. meshtrade/studio/instrument/v1/instrument_pb2_grpc.py +4 -0
  97. meshtrade/studio/instrument/v1/instrument_type_pb2.py +37 -0
  98. meshtrade/studio/instrument/v1/instrument_type_pb2.pyi +64 -0
  99. meshtrade/studio/instrument/v1/instrument_type_pb2_grpc.py +4 -0
  100. meshtrade/studio/instrument/v1/unit_pb2.py +37 -0
  101. meshtrade/studio/instrument/v1/unit_pb2.pyi +46 -0
  102. meshtrade/studio/instrument/v1/unit_pb2_grpc.py +4 -0
  103. meshtrade/trading/limit_order/v1/__init__.py +22 -4
  104. meshtrade/trading/limit_order/v1/limit_order_pb2.py +24 -4
  105. meshtrade/trading/limit_order/v1/limit_order_pb2.pyi +55 -5
  106. meshtrade/trading/limit_order/v1/service_meshpy.py +113 -2
  107. meshtrade/trading/limit_order/v1/service_pb2.py +49 -9
  108. meshtrade/trading/limit_order/v1/service_pb2.pyi +67 -7
  109. meshtrade/trading/limit_order/v1/service_pb2_grpc.py +321 -4
  110. meshtrade/trading/market_order/v1/__init__.py +0 -2
  111. meshtrade/trading/market_order/v1/market_order_pb2.py +2 -2
  112. meshtrade/trading/market_order/v1/service_meshpy.py +3 -2
  113. meshtrade/trading/market_order/v1/service_pb2.py +8 -9
  114. meshtrade/trading/market_order/v1/service_pb2.pyi +1 -2
  115. meshtrade/type/v1/__init__.py +82 -12
  116. meshtrade/type/v1/address_pb2.py +2 -2
  117. meshtrade/type/v1/amount.py +429 -5
  118. meshtrade/type/v1/amount_pb2.py +2 -2
  119. meshtrade/type/v1/contact_details_pb2.py +2 -2
  120. meshtrade/type/v1/date_pb2.py +2 -2
  121. meshtrade/type/v1/decimal_built_in_conversions.py +8 -3
  122. meshtrade/type/v1/decimal_operations.py +354 -0
  123. meshtrade/type/v1/decimal_pb2.py +2 -2
  124. meshtrade/type/v1/ledger.py +76 -1
  125. meshtrade/type/v1/ledger_pb2.py +2 -2
  126. meshtrade/type/v1/sorting_pb2.py +2 -2
  127. meshtrade/type/v1/time_of_day_pb2.py +2 -2
  128. meshtrade/type/v1/token.py +144 -0
  129. meshtrade/type/v1/token_pb2.py +2 -2
  130. meshtrade/wallet/account/v1/__init__.py +21 -3
  131. meshtrade/wallet/account/v1/account_pb2.py +28 -4
  132. meshtrade/wallet/account/v1/account_pb2.pyi +57 -3
  133. meshtrade/wallet/account/v1/service_meshpy.py +72 -1
  134. meshtrade/wallet/account/v1/service_pb2.py +67 -23
  135. meshtrade/wallet/account/v1/service_pb2.pyi +81 -21
  136. meshtrade/wallet/account/v1/service_pb2_grpc.py +242 -8
  137. {meshtrade-1.0.1.dist-info → meshtrade-1.29.0.dist-info}/METADATA +1 -1
  138. meshtrade-1.29.0.dist-info/RECORD +217 -0
  139. meshtrade/compliance/client/v1/service_options_meshpy.py +0 -65
  140. meshtrade/iam/api_user/v1/service.py +0 -58
  141. meshtrade/iam/api_user/v1/service_options_meshpy.py +0 -65
  142. meshtrade/iam/group/v1/service_options_meshpy.py +0 -65
  143. meshtrade/iam/user/v1/service_options_meshpy.py +0 -65
  144. meshtrade/option/v1/method_type_pb2.py +0 -38
  145. meshtrade/option/v1/method_type_pb2.pyi +0 -17
  146. meshtrade/reporting/income_report/v1/entry_pb2.py +0 -42
  147. meshtrade/reporting/income_report/v1/income_report_pb2.py +0 -44
  148. meshtrade/reporting/income_report/v1/income_report_pb2.pyi +0 -42
  149. meshtrade/reporting/income_report/v1/service_options_meshpy.py +0 -65
  150. meshtrade/reporting/income_report/v1/service_pb2.py +0 -58
  151. meshtrade/reporting/income_report/v1/service_pb2.pyi +0 -37
  152. meshtrade/reporting/income_report/v1/service_pb2_grpc.py +0 -170
  153. meshtrade/trading/limit_order/v1/service_options_meshpy.py +0 -65
  154. meshtrade/trading/market_order/v1/service_options_meshpy.py +0 -65
  155. meshtrade/wallet/account/v1/service_options_meshpy.py +0 -65
  156. meshtrade-1.0.1.dist-info/RECORD +0 -191
  157. /meshtrade/{option/v1/method_type_pb2_grpc.py → market_data/price/v1/price_pb2_grpc.py} +0 -0
  158. /meshtrade/{reporting/income_report/v1/disclaimer_pb2_grpc.py → option/method_options/v1/method_options_pb2_grpc.py} +0 -0
  159. /meshtrade/reporting/{income_report/v1/entry_pb2_grpc.py → account_report/v1/account_report_pb2_grpc.py} +0 -0
  160. /meshtrade/reporting/{income_report → account_report}/v1/disclaimer_pb2.pyi +0 -0
  161. /meshtrade/reporting/{income_report/v1/income_report_pb2_grpc.py → account_report/v1/disclaimer_pb2_grpc.py} +0 -0
  162. {meshtrade-1.0.1.dist-info → meshtrade-1.29.0.dist-info}/WHEEL +0 -0
  163. {meshtrade-1.0.1.dist-info → meshtrade-1.29.0.dist-info}/top_level.txt +0 -0
@@ -1,19 +1,91 @@
1
1
  from buf.validate import validate_pb2 as _validate_pb2
2
- from meshtrade.iam.role.v1 import role_pb2 as _role_pb2
3
2
  from meshtrade.iam.user.v1 import user_pb2 as _user_pb2
4
- from meshtrade.option.v1 import method_type_pb2 as _method_type_pb2
3
+ from meshtrade.option.method_options.v1 import method_options_pb2 as _method_options_pb2
4
+ from meshtrade.type.v1 import sorting_pb2 as _sorting_pb2
5
+ from google.protobuf.internal import containers as _containers
5
6
  from google.protobuf import descriptor as _descriptor
6
7
  from google.protobuf import message as _message
8
+ from collections.abc import Iterable as _Iterable, Mapping as _Mapping
7
9
  from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
8
10
 
9
11
  DESCRIPTOR: _descriptor.FileDescriptor
10
12
 
11
- class AssignRoleToUserRequest(_message.Message):
12
- __slots__ = ("email", "group", "role")
13
+ class AssignRolesToUserRequest(_message.Message):
14
+ __slots__ = ("name", "roles")
15
+ NAME_FIELD_NUMBER: _ClassVar[int]
16
+ ROLES_FIELD_NUMBER: _ClassVar[int]
17
+ name: str
18
+ roles: _containers.RepeatedScalarFieldContainer[str]
19
+ def __init__(self, name: _Optional[str] = ..., roles: _Optional[_Iterable[str]] = ...) -> None: ...
20
+
21
+ class RevokeRolesFromUserRequest(_message.Message):
22
+ __slots__ = ("name", "roles")
23
+ NAME_FIELD_NUMBER: _ClassVar[int]
24
+ ROLES_FIELD_NUMBER: _ClassVar[int]
25
+ name: str
26
+ roles: _containers.RepeatedScalarFieldContainer[str]
27
+ def __init__(self, name: _Optional[str] = ..., roles: _Optional[_Iterable[str]] = ...) -> None: ...
28
+
29
+ class GetUserRequest(_message.Message):
30
+ __slots__ = ("name",)
31
+ NAME_FIELD_NUMBER: _ClassVar[int]
32
+ name: str
33
+ def __init__(self, name: _Optional[str] = ...) -> None: ...
34
+
35
+ class GetUserByEmailRequest(_message.Message):
36
+ __slots__ = ("email",)
13
37
  EMAIL_FIELD_NUMBER: _ClassVar[int]
14
- GROUP_FIELD_NUMBER: _ClassVar[int]
15
- ROLE_FIELD_NUMBER: _ClassVar[int]
16
38
  email: str
17
- group: str
18
- role: _role_pb2.Role
19
- def __init__(self, email: _Optional[str] = ..., group: _Optional[str] = ..., role: _Optional[_Union[_role_pb2.Role, str]] = ...) -> None: ...
39
+ def __init__(self, email: _Optional[str] = ...) -> None: ...
40
+
41
+ class ListUsersRequest(_message.Message):
42
+ __slots__ = ("sorting",)
43
+ class Sorting(_message.Message):
44
+ __slots__ = ("field", "order")
45
+ FIELD_FIELD_NUMBER: _ClassVar[int]
46
+ ORDER_FIELD_NUMBER: _ClassVar[int]
47
+ field: str
48
+ order: _sorting_pb2.SortingOrder
49
+ def __init__(self, field: _Optional[str] = ..., order: _Optional[_Union[_sorting_pb2.SortingOrder, str]] = ...) -> None: ...
50
+ SORTING_FIELD_NUMBER: _ClassVar[int]
51
+ sorting: ListUsersRequest.Sorting
52
+ def __init__(self, sorting: _Optional[_Union[ListUsersRequest.Sorting, _Mapping]] = ...) -> None: ...
53
+
54
+ class ListUsersResponse(_message.Message):
55
+ __slots__ = ("users",)
56
+ USERS_FIELD_NUMBER: _ClassVar[int]
57
+ users: _containers.RepeatedCompositeFieldContainer[_user_pb2.User]
58
+ def __init__(self, users: _Optional[_Iterable[_Union[_user_pb2.User, _Mapping]]] = ...) -> None: ...
59
+
60
+ class SearchUsersRequest(_message.Message):
61
+ __slots__ = ("email", "sorting")
62
+ class Sorting(_message.Message):
63
+ __slots__ = ("field", "order")
64
+ FIELD_FIELD_NUMBER: _ClassVar[int]
65
+ ORDER_FIELD_NUMBER: _ClassVar[int]
66
+ field: str
67
+ order: _sorting_pb2.SortingOrder
68
+ def __init__(self, field: _Optional[str] = ..., order: _Optional[_Union[_sorting_pb2.SortingOrder, str]] = ...) -> None: ...
69
+ EMAIL_FIELD_NUMBER: _ClassVar[int]
70
+ SORTING_FIELD_NUMBER: _ClassVar[int]
71
+ email: str
72
+ sorting: SearchUsersRequest.Sorting
73
+ def __init__(self, email: _Optional[str] = ..., sorting: _Optional[_Union[SearchUsersRequest.Sorting, _Mapping]] = ...) -> None: ...
74
+
75
+ class SearchUsersResponse(_message.Message):
76
+ __slots__ = ("users",)
77
+ USERS_FIELD_NUMBER: _ClassVar[int]
78
+ users: _containers.RepeatedCompositeFieldContainer[_user_pb2.User]
79
+ def __init__(self, users: _Optional[_Iterable[_Union[_user_pb2.User, _Mapping]]] = ...) -> None: ...
80
+
81
+ class CreateUserRequest(_message.Message):
82
+ __slots__ = ("user",)
83
+ USER_FIELD_NUMBER: _ClassVar[int]
84
+ user: _user_pb2.User
85
+ def __init__(self, user: _Optional[_Union[_user_pb2.User, _Mapping]] = ...) -> None: ...
86
+
87
+ class UpdateUserRequest(_message.Message):
88
+ __slots__ = ("user",)
89
+ USER_FIELD_NUMBER: _ClassVar[int]
90
+ user: _user_pb2.User
91
+ def __init__(self, user: _Optional[_Union[_user_pb2.User, _Mapping]] = ...) -> None: ...
@@ -7,7 +7,16 @@ from meshtrade.iam.user.v1 import user_pb2 as meshtrade_dot_iam_dot_user_dot_v1_
7
7
 
8
8
 
9
9
  class UserServiceStub(object):
10
- """Service defines the RPC methods for interacting with the user resource,
10
+ """
11
+ UserService manages user lifecycle and identity operations within groups.
12
+
13
+ Users are individual identity entities that belong to specific groups and have
14
+ assigned roles that determine their permissions within that group context.
15
+ Each user has a unique email address and can be assigned multiple roles
16
+ across the group hierarchy for fine-grained access control.
17
+
18
+ All operations require appropriate IAM domain permissions and operate within
19
+ the authenticated group context.
11
20
  """
12
21
 
13
22
  def __init__(self, channel):
@@ -16,19 +25,148 @@ class UserServiceStub(object):
16
25
  Args:
17
26
  channel: A grpc.Channel.
18
27
  """
19
- self.AssignRoleToUser = channel.unary_unary(
20
- '/meshtrade.iam.user.v1.UserService/AssignRoleToUser',
21
- request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.AssignRoleToUserRequest.SerializeToString,
28
+ self.AssignRolesToUser = channel.unary_unary(
29
+ '/meshtrade.iam.user.v1.UserService/AssignRolesToUser',
30
+ request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.AssignRolesToUserRequest.SerializeToString,
31
+ response_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
32
+ _registered_method=True)
33
+ self.RevokeRolesFromUser = channel.unary_unary(
34
+ '/meshtrade.iam.user.v1.UserService/RevokeRolesFromUser',
35
+ request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.RevokeRolesFromUserRequest.SerializeToString,
36
+ response_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
37
+ _registered_method=True)
38
+ self.GetUser = channel.unary_unary(
39
+ '/meshtrade.iam.user.v1.UserService/GetUser',
40
+ request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.GetUserRequest.SerializeToString,
41
+ response_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
42
+ _registered_method=True)
43
+ self.GetUserByEmail = channel.unary_unary(
44
+ '/meshtrade.iam.user.v1.UserService/GetUserByEmail',
45
+ request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.GetUserByEmailRequest.SerializeToString,
46
+ response_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
47
+ _registered_method=True)
48
+ self.ListUsers = channel.unary_unary(
49
+ '/meshtrade.iam.user.v1.UserService/ListUsers',
50
+ request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.ListUsersRequest.SerializeToString,
51
+ response_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.ListUsersResponse.FromString,
52
+ _registered_method=True)
53
+ self.SearchUsers = channel.unary_unary(
54
+ '/meshtrade.iam.user.v1.UserService/SearchUsers',
55
+ request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.SearchUsersRequest.SerializeToString,
56
+ response_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.SearchUsersResponse.FromString,
57
+ _registered_method=True)
58
+ self.CreateUser = channel.unary_unary(
59
+ '/meshtrade.iam.user.v1.UserService/CreateUser',
60
+ request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.CreateUserRequest.SerializeToString,
61
+ response_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
62
+ _registered_method=True)
63
+ self.UpdateUser = channel.unary_unary(
64
+ '/meshtrade.iam.user.v1.UserService/UpdateUser',
65
+ request_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.UpdateUserRequest.SerializeToString,
22
66
  response_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
23
67
  _registered_method=True)
24
68
 
25
69
 
26
70
  class UserServiceServicer(object):
27
- """Service defines the RPC methods for interacting with the user resource,
28
71
  """
72
+ UserService manages user lifecycle and identity operations within groups.
73
+
74
+ Users are individual identity entities that belong to specific groups and have
75
+ assigned roles that determine their permissions within that group context.
76
+ Each user has a unique email address and can be assigned multiple roles
77
+ across the group hierarchy for fine-grained access control.
78
+
79
+ All operations require appropriate IAM domain permissions and operate within
80
+ the authenticated group context.
81
+ """
82
+
83
+ def AssignRolesToUser(self, request, context):
84
+ """
85
+ Assign roles to an existing user within the authenticated group context.
86
+
87
+ The role assignment enables the user to perform operations according
88
+ to the permissions associated with that role within the group hierarchy.
89
+ """
90
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
91
+ context.set_details('Method not implemented!')
92
+ raise NotImplementedError('Method not implemented!')
93
+
94
+ def RevokeRolesFromUser(self, request, context):
95
+ """
96
+ Revoke roles from an existing user within the authenticated group context.
29
97
 
30
- def AssignRoleToUser(self, request, context):
31
- """Assign Role To User
98
+ The role revocation removes the permissions associated with that role from
99
+ the user within the group hierarchy. The user will no longer be able
100
+ to perform operations that require the revoked role.
101
+ """
102
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
103
+ context.set_details('Method not implemented!')
104
+ raise NotImplementedError('Method not implemented!')
105
+
106
+ def GetUser(self, request, context):
107
+ """
108
+ Retrieves a single user by their unique identifier.
109
+
110
+ Returns user details including name, email, ownership information,
111
+ and assigned roles within the authenticated group's access scope.
112
+ """
113
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
114
+ context.set_details('Method not implemented!')
115
+ raise NotImplementedError('Method not implemented!')
116
+
117
+ def GetUserByEmail(self, request, context):
118
+ """
119
+ Retrieves a single user by their email address.
120
+
121
+ Returns user details including name, email, ownership information,
122
+ and assigned roles within the authenticated group's access scope.
123
+ """
124
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
125
+ context.set_details('Method not implemented!')
126
+ raise NotImplementedError('Method not implemented!')
127
+
128
+ def ListUsers(self, request, context):
129
+ """
130
+ Returns all users accessible within the authenticated group's hierarchy.
131
+
132
+ Results include users directly owned and those accessible through the
133
+ group's hierarchical permissions, optionally sorted by email address.
134
+ """
135
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
136
+ context.set_details('Method not implemented!')
137
+ raise NotImplementedError('Method not implemented!')
138
+
139
+ def SearchUsers(self, request, context):
140
+ """
141
+ Searches for users by email address using substring matching.
142
+
143
+ Returns users whose email addresses contain the provided search term,
144
+ filtered by the authenticated group's access permissions and optionally
145
+ sorted by email address.
146
+ """
147
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
148
+ context.set_details('Method not implemented!')
149
+ raise NotImplementedError('Method not implemented!')
150
+
151
+ def CreateUser(self, request, context):
152
+ """
153
+ Creates a new user within the authenticated group context.
154
+
155
+ The user will be created with the provided email and group ownership,
156
+ with system-generated unique identifier and ownership hierarchy.
157
+ Additional roles can be assigned after creation.
158
+ """
159
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
160
+ context.set_details('Method not implemented!')
161
+ raise NotImplementedError('Method not implemented!')
162
+
163
+ def UpdateUser(self, request, context):
164
+ """
165
+ Updates an existing user with modified field values.
166
+
167
+ Only mutable fields can be updated while preserving system-generated
168
+ identifiers and ownership relationships. Role modifications should
169
+ use dedicated role management operations.
32
170
  """
33
171
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
34
172
  context.set_details('Method not implemented!')
@@ -37,9 +175,44 @@ class UserServiceServicer(object):
37
175
 
38
176
  def add_UserServiceServicer_to_server(servicer, server):
39
177
  rpc_method_handlers = {
40
- 'AssignRoleToUser': grpc.unary_unary_rpc_method_handler(
41
- servicer.AssignRoleToUser,
42
- request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.AssignRoleToUserRequest.FromString,
178
+ 'AssignRolesToUser': grpc.unary_unary_rpc_method_handler(
179
+ servicer.AssignRolesToUser,
180
+ request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.AssignRolesToUserRequest.FromString,
181
+ response_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.SerializeToString,
182
+ ),
183
+ 'RevokeRolesFromUser': grpc.unary_unary_rpc_method_handler(
184
+ servicer.RevokeRolesFromUser,
185
+ request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.RevokeRolesFromUserRequest.FromString,
186
+ response_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.SerializeToString,
187
+ ),
188
+ 'GetUser': grpc.unary_unary_rpc_method_handler(
189
+ servicer.GetUser,
190
+ request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.GetUserRequest.FromString,
191
+ response_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.SerializeToString,
192
+ ),
193
+ 'GetUserByEmail': grpc.unary_unary_rpc_method_handler(
194
+ servicer.GetUserByEmail,
195
+ request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.GetUserByEmailRequest.FromString,
196
+ response_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.SerializeToString,
197
+ ),
198
+ 'ListUsers': grpc.unary_unary_rpc_method_handler(
199
+ servicer.ListUsers,
200
+ request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.ListUsersRequest.FromString,
201
+ response_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.ListUsersResponse.SerializeToString,
202
+ ),
203
+ 'SearchUsers': grpc.unary_unary_rpc_method_handler(
204
+ servicer.SearchUsers,
205
+ request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.SearchUsersRequest.FromString,
206
+ response_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.SearchUsersResponse.SerializeToString,
207
+ ),
208
+ 'CreateUser': grpc.unary_unary_rpc_method_handler(
209
+ servicer.CreateUser,
210
+ request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.CreateUserRequest.FromString,
211
+ response_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.SerializeToString,
212
+ ),
213
+ 'UpdateUser': grpc.unary_unary_rpc_method_handler(
214
+ servicer.UpdateUser,
215
+ request_deserializer=meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.UpdateUserRequest.FromString,
43
216
  response_serializer=meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.SerializeToString,
44
217
  ),
45
218
  }
@@ -51,11 +224,209 @@ def add_UserServiceServicer_to_server(servicer, server):
51
224
 
52
225
  # This class is part of an EXPERIMENTAL API.
53
226
  class UserService(object):
54
- """Service defines the RPC methods for interacting with the user resource,
55
227
  """
228
+ UserService manages user lifecycle and identity operations within groups.
229
+
230
+ Users are individual identity entities that belong to specific groups and have
231
+ assigned roles that determine their permissions within that group context.
232
+ Each user has a unique email address and can be assigned multiple roles
233
+ across the group hierarchy for fine-grained access control.
234
+
235
+ All operations require appropriate IAM domain permissions and operate within
236
+ the authenticated group context.
237
+ """
238
+
239
+ @staticmethod
240
+ def AssignRolesToUser(request,
241
+ target,
242
+ options=(),
243
+ channel_credentials=None,
244
+ call_credentials=None,
245
+ insecure=False,
246
+ compression=None,
247
+ wait_for_ready=None,
248
+ timeout=None,
249
+ metadata=None):
250
+ return grpc.experimental.unary_unary(
251
+ request,
252
+ target,
253
+ '/meshtrade.iam.user.v1.UserService/AssignRolesToUser',
254
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.AssignRolesToUserRequest.SerializeToString,
255
+ meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
256
+ options,
257
+ channel_credentials,
258
+ insecure,
259
+ call_credentials,
260
+ compression,
261
+ wait_for_ready,
262
+ timeout,
263
+ metadata,
264
+ _registered_method=True)
265
+
266
+ @staticmethod
267
+ def RevokeRolesFromUser(request,
268
+ target,
269
+ options=(),
270
+ channel_credentials=None,
271
+ call_credentials=None,
272
+ insecure=False,
273
+ compression=None,
274
+ wait_for_ready=None,
275
+ timeout=None,
276
+ metadata=None):
277
+ return grpc.experimental.unary_unary(
278
+ request,
279
+ target,
280
+ '/meshtrade.iam.user.v1.UserService/RevokeRolesFromUser',
281
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.RevokeRolesFromUserRequest.SerializeToString,
282
+ meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
283
+ options,
284
+ channel_credentials,
285
+ insecure,
286
+ call_credentials,
287
+ compression,
288
+ wait_for_ready,
289
+ timeout,
290
+ metadata,
291
+ _registered_method=True)
292
+
293
+ @staticmethod
294
+ def GetUser(request,
295
+ target,
296
+ options=(),
297
+ channel_credentials=None,
298
+ call_credentials=None,
299
+ insecure=False,
300
+ compression=None,
301
+ wait_for_ready=None,
302
+ timeout=None,
303
+ metadata=None):
304
+ return grpc.experimental.unary_unary(
305
+ request,
306
+ target,
307
+ '/meshtrade.iam.user.v1.UserService/GetUser',
308
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.GetUserRequest.SerializeToString,
309
+ meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
310
+ options,
311
+ channel_credentials,
312
+ insecure,
313
+ call_credentials,
314
+ compression,
315
+ wait_for_ready,
316
+ timeout,
317
+ metadata,
318
+ _registered_method=True)
319
+
320
+ @staticmethod
321
+ def GetUserByEmail(request,
322
+ target,
323
+ options=(),
324
+ channel_credentials=None,
325
+ call_credentials=None,
326
+ insecure=False,
327
+ compression=None,
328
+ wait_for_ready=None,
329
+ timeout=None,
330
+ metadata=None):
331
+ return grpc.experimental.unary_unary(
332
+ request,
333
+ target,
334
+ '/meshtrade.iam.user.v1.UserService/GetUserByEmail',
335
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.GetUserByEmailRequest.SerializeToString,
336
+ meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
337
+ options,
338
+ channel_credentials,
339
+ insecure,
340
+ call_credentials,
341
+ compression,
342
+ wait_for_ready,
343
+ timeout,
344
+ metadata,
345
+ _registered_method=True)
346
+
347
+ @staticmethod
348
+ def ListUsers(request,
349
+ target,
350
+ options=(),
351
+ channel_credentials=None,
352
+ call_credentials=None,
353
+ insecure=False,
354
+ compression=None,
355
+ wait_for_ready=None,
356
+ timeout=None,
357
+ metadata=None):
358
+ return grpc.experimental.unary_unary(
359
+ request,
360
+ target,
361
+ '/meshtrade.iam.user.v1.UserService/ListUsers',
362
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.ListUsersRequest.SerializeToString,
363
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.ListUsersResponse.FromString,
364
+ options,
365
+ channel_credentials,
366
+ insecure,
367
+ call_credentials,
368
+ compression,
369
+ wait_for_ready,
370
+ timeout,
371
+ metadata,
372
+ _registered_method=True)
373
+
374
+ @staticmethod
375
+ def SearchUsers(request,
376
+ target,
377
+ options=(),
378
+ channel_credentials=None,
379
+ call_credentials=None,
380
+ insecure=False,
381
+ compression=None,
382
+ wait_for_ready=None,
383
+ timeout=None,
384
+ metadata=None):
385
+ return grpc.experimental.unary_unary(
386
+ request,
387
+ target,
388
+ '/meshtrade.iam.user.v1.UserService/SearchUsers',
389
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.SearchUsersRequest.SerializeToString,
390
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.SearchUsersResponse.FromString,
391
+ options,
392
+ channel_credentials,
393
+ insecure,
394
+ call_credentials,
395
+ compression,
396
+ wait_for_ready,
397
+ timeout,
398
+ metadata,
399
+ _registered_method=True)
400
+
401
+ @staticmethod
402
+ def CreateUser(request,
403
+ target,
404
+ options=(),
405
+ channel_credentials=None,
406
+ call_credentials=None,
407
+ insecure=False,
408
+ compression=None,
409
+ wait_for_ready=None,
410
+ timeout=None,
411
+ metadata=None):
412
+ return grpc.experimental.unary_unary(
413
+ request,
414
+ target,
415
+ '/meshtrade.iam.user.v1.UserService/CreateUser',
416
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.CreateUserRequest.SerializeToString,
417
+ meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
418
+ options,
419
+ channel_credentials,
420
+ insecure,
421
+ call_credentials,
422
+ compression,
423
+ wait_for_ready,
424
+ timeout,
425
+ metadata,
426
+ _registered_method=True)
56
427
 
57
428
  @staticmethod
58
- def AssignRoleToUser(request,
429
+ def UpdateUser(request,
59
430
  target,
60
431
  options=(),
61
432
  channel_credentials=None,
@@ -68,8 +439,8 @@ class UserService(object):
68
439
  return grpc.experimental.unary_unary(
69
440
  request,
70
441
  target,
71
- '/meshtrade.iam.user.v1.UserService/AssignRoleToUser',
72
- meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.AssignRoleToUserRequest.SerializeToString,
442
+ '/meshtrade.iam.user.v1.UserService/UpdateUser',
443
+ meshtrade_dot_iam_dot_user_dot_v1_dot_service__pb2.UpdateUserRequest.SerializeToString,
73
444
  meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2.User.FromString,
74
445
  options,
75
446
  channel_credentials,
@@ -22,16 +22,25 @@ _runtime_version.ValidateProtobufRuntimeVersion(
22
22
  _sym_db = _symbol_database.Default()
23
23
 
24
24
 
25
+ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
25
26
 
26
27
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtrade/iam/user/v1/user.proto\x12\x15meshtrade.iam.user.v1\"2\n\x04User\x12\x14\n\x05\x65mail\x18\x01 \x01(\tR\x05\x65mail\x12\x14\n\x05roles\x18\x06 \x03(\tR\x05rolesBN\n\x1c\x63o.meshtrade.api.iam.user.v1Z.github.com/meshtrade/api/go/iam/user/v1;userv1b\x06proto3')
28
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtrade/iam/user/v1/user.proto\x12\x15meshtrade.iam.user.v1\x1a\x1b\x62uf/validate/validate.proto\"\xa6\x03\n\x04User\x12\xba\x01\n\x04name\x18\x01 \x01(\tB\xa5\x01\xbaH\xa1\x01\xba\x01\x9d\x01\n\x14name.format.optional\x12\x32name must be empty or in the format users/{ULIDv2}\x1aQsize(this) == 0 || this.matches(\'^users/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\')R\x04name\x12R\n\x05owner\x18\x02 \x01(\tB<\xbaH9r42/^groups/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\x98\x01!\xc8\x01\x01R\x05owner\x12 \n\x05\x65mail\x18\x03 \x01(\tB\n\xbaH\x07r\x02`\x01\xc8\x01\x01R\x05\x65mail\x12k\n\x05roles\x18\x04 \x03(\tBU\xbaHR\x92\x01O\"MrK\x10/\x18\x30\x32\x45^groups/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}/roles/[1-9][0-9]{6,7}$R\x05rolesBO\n\x1c\x63o.meshtrade.api.iam.user.v1Z/github.com/meshtrade/api/go/iam/user/v1;user_v1b\x06proto3')
28
29
 
29
30
  _globals = globals()
30
31
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
32
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtrade.iam.user.v1.user_pb2', _globals)
32
33
  if not _descriptor._USE_C_DESCRIPTORS:
33
34
  _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'\n\034co.meshtrade.api.iam.user.v1Z.github.com/meshtrade/api/go/iam/user/v1;userv1'
35
- _globals['_USER']._serialized_start=59
36
- _globals['_USER']._serialized_end=109
35
+ _globals['DESCRIPTOR']._serialized_options = b'\n\034co.meshtrade.api.iam.user.v1Z/github.com/meshtrade/api/go/iam/user/v1;user_v1'
36
+ _globals['_USER'].fields_by_name['name']._loaded_options = None
37
+ _globals['_USER'].fields_by_name['name']._serialized_options = b'\272H\241\001\272\001\235\001\n\024name.format.optional\0222name must be empty or in the format users/{ULIDv2}\032Qsize(this) == 0 || this.matches(\'^users/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\')'
38
+ _globals['_USER'].fields_by_name['owner']._loaded_options = None
39
+ _globals['_USER'].fields_by_name['owner']._serialized_options = b'\272H9r42/^groups/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\230\001!\310\001\001'
40
+ _globals['_USER'].fields_by_name['email']._loaded_options = None
41
+ _globals['_USER'].fields_by_name['email']._serialized_options = b'\272H\007r\002`\001\310\001\001'
42
+ _globals['_USER'].fields_by_name['roles']._loaded_options = None
43
+ _globals['_USER'].fields_by_name['roles']._serialized_options = b'\272HR\222\001O\"MrK\020/\03002E^groups/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}/roles/[1-9][0-9]{6,7}$'
44
+ _globals['_USER']._serialized_start=89
45
+ _globals['_USER']._serialized_end=511
37
46
  # @@protoc_insertion_point(module_scope)
@@ -1,3 +1,4 @@
1
+ from buf.validate import validate_pb2 as _validate_pb2
1
2
  from google.protobuf.internal import containers as _containers
2
3
  from google.protobuf import descriptor as _descriptor
3
4
  from google.protobuf import message as _message
@@ -7,9 +8,13 @@ from typing import ClassVar as _ClassVar, Optional as _Optional
7
8
  DESCRIPTOR: _descriptor.FileDescriptor
8
9
 
9
10
  class User(_message.Message):
10
- __slots__ = ("email", "roles")
11
+ __slots__ = ("name", "owner", "email", "roles")
12
+ NAME_FIELD_NUMBER: _ClassVar[int]
13
+ OWNER_FIELD_NUMBER: _ClassVar[int]
11
14
  EMAIL_FIELD_NUMBER: _ClassVar[int]
12
15
  ROLES_FIELD_NUMBER: _ClassVar[int]
16
+ name: str
17
+ owner: str
13
18
  email: str
14
19
  roles: _containers.RepeatedScalarFieldContainer[str]
15
- def __init__(self, email: _Optional[str] = ..., roles: _Optional[_Iterable[str]] = ...) -> None: ...
20
+ def __init__(self, name: _Optional[str] = ..., owner: _Optional[str] = ..., email: _Optional[str] = ..., roles: _Optional[_Iterable[str]] = ...) -> None: ...
@@ -13,8 +13,21 @@
13
13
  # ===================================================================
14
14
 
15
15
  # Generated protobuf imports
16
- from .transaction_action_pb2 import TransactionAction
17
16
  from .transaction_state_pb2 import TransactionState
17
+ from .service_pb2 import (
18
+ GetTransactionStateRequest,
19
+ GetTransactionStateResponse,
20
+ MonitorTransactionStateRequest,
21
+ MonitorTransactionStateResponse,
22
+ )
23
+ from .transaction_action_pb2 import TransactionAction
24
+
25
+ # Generated service imports
26
+ from .service_meshpy import (
27
+ TransactionService,
28
+ TransactionServiceGRPCClient,
29
+ TransactionServiceGRPCClientInterface,
30
+ )
18
31
 
19
32
  # ===================================================================
20
33
  # END OF AUTO-GENERATED SECTION
@@ -30,12 +43,23 @@ from .transaction_state_pb2 import TransactionState
30
43
  #
31
44
  # ===================================================================
32
45
 
46
+ from .transaction_state_machine import transaction_state_can_perform_action_at_state
47
+
33
48
  # ===================================================================
34
49
  # MODULE EXPORTS
35
50
  # ===================================================================
36
51
  # Combined auto-generated and manual exports
37
52
  __all__ = [
38
53
  # Generated exports
54
+ "GetTransactionStateRequest",
55
+ "GetTransactionStateResponse",
56
+ "MonitorTransactionStateRequest",
57
+ "MonitorTransactionStateResponse",
39
58
  "TransactionAction",
59
+ "TransactionService",
60
+ "TransactionServiceGRPCClient",
61
+ "TransactionServiceGRPCClientInterface",
40
62
  "TransactionState",
63
+ # Manual exports
64
+ "transaction_state_can_perform_action_at_state",
41
65
  ]