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,23 +1,174 @@
1
- """Role helper functions for IAM role management."""
1
+ """Role utility functions for Mesh API.
2
2
 
3
- from .role_pb2 import Role
3
+ This module provides helper functions for working with Role enums and their resource names.
4
+ All functions use the 4-part integer format: groups/{groupID}/roles/{roleNumber}
5
+ for cross-language compatibility.
6
+ """
4
7
 
8
+ from meshtrade.iam.role.v1.role_pb2 import Role
5
9
 
6
- def full_resource_name_from_group_name(role: Role, group_name: str) -> str:
10
+
11
+ def role_is_valid(role: Role) -> bool:
12
+ """Check if role value is valid (within enum range).
13
+
14
+ Args:
15
+ role: Role enum value (integer)
16
+
17
+ Returns:
18
+ True if role is a valid enum value
19
+
20
+ Example:
21
+ >>> role_is_valid(Role.ROLE_IAM_ADMIN)
22
+ True
23
+ >>> role_is_valid(99999999)
24
+ False
25
+ """
26
+ return role in Role.values()
27
+
28
+
29
+ def role_is_valid_and_specified(role: Role) -> bool:
30
+ """Check if role is valid and not UNSPECIFIED.
31
+
32
+ Args:
33
+ role: Role enum value (integer)
34
+
35
+ Returns:
36
+ True if role is valid and not ROLE_UNSPECIFIED
37
+
38
+ Example:
39
+ >>> role_is_valid_and_specified(Role.ROLE_IAM_ADMIN)
40
+ True
41
+ >>> role_is_valid_and_specified(Role.ROLE_UNSPECIFIED)
42
+ False
43
+ """
44
+ return role_is_valid(role) and role != Role.ROLE_UNSPECIFIED
45
+
46
+
47
+ def role_full_resource_name_from_group_id(role: Role, group_id: str) -> str:
48
+ """Generate full resource name from role and group ID.
49
+
50
+ Format: groups/{group_id}/roles/{role_int}
51
+
52
+ Args:
53
+ role: Role enum value (integer)
54
+ group_id: Group ID (UUID)
55
+
56
+ Returns:
57
+ Full resource name string using integer format
58
+
59
+ Example:
60
+ >>> role_full_resource_name_from_group_id(Role.ROLE_IAM_ADMIN, "01DD32GZ7R0000000000000001")
61
+ 'groups/01DD32GZ7R0000000000000001/roles/3000000'
62
+ """
63
+ return f"groups/{group_id}/roles/{int(role)}"
64
+
65
+
66
+ def role_full_resource_name_from_group(role: Role, group: str) -> str:
67
+ """Generate full resource name from role and group resource name.
68
+
69
+ Args:
70
+ role: Role enum value (integer)
71
+ group: Group resource name (e.g., "groups/{id}")
72
+
73
+ Returns:
74
+ Full resource name string using integer format
75
+
76
+ Raises:
77
+ ValueError: If group format is invalid
78
+
79
+ Example:
80
+ >>> role_full_resource_name_from_group(Role.ROLE_IAM_ADMIN, "groups/01DD32GZ7R0000000000000001")
81
+ 'groups/01DD32GZ7R0000000000000001/roles/3000000'
7
82
  """
8
- Create a full resource name for a role within a specific group.
83
+ if not group.startswith("groups/"):
84
+ raise ValueError(f"invalid group format, expected groups/{{groupID}}, got: {group}")
85
+
86
+ group_id = group[len("groups/") :]
87
+ if not group_id:
88
+ raise ValueError(f"group ID cannot be empty in group resource name: {group}")
89
+
90
+ return role_full_resource_name_from_group_id(role, group_id)
91
+
92
+
93
+ def role_from_full_resource_name(full_resource_name: str) -> Role:
94
+ """Extract Role from full resource name.
95
+
96
+ Args:
97
+ full_resource_name: Full resource name (e.g., "groups/{id}/roles/{role_int}")
98
+
99
+ Returns:
100
+ Role enum value (integer), or ROLE_UNSPECIFIED if parsing fails
101
+
102
+ Example:
103
+ >>> role_from_full_resource_name("groups/01DD32GZ7R0000000000000001/roles/3000000")
104
+ 3000000
105
+ >>> role_from_full_resource_name("invalid/format")
106
+ 0
107
+ """
108
+ from typing import cast
109
+
110
+ try:
111
+ _, role_int = parse_role_parts(full_resource_name)
112
+ # Python protobuf enums are integers, safe to cast
113
+ return cast(Role, role_int)
114
+ except ValueError:
115
+ return Role.ROLE_UNSPECIFIED
116
+
117
+
118
+ def parse_role_parts(role_full_resource_name: str) -> tuple[str, int]:
119
+ """Parse full resource name into group ID and Role.
9
120
 
10
- This function provides the Python equivalent of Go's Role.FullResourceNameFromGroupName() method.
121
+ Expected format: groups/{group_id}/roles/{role_int}
11
122
 
12
123
  Args:
13
- role: The Role enum value (e.g., Role.ROLE_IAM_ADMIN)
14
- group_name: The group name (e.g., "groups/01DD32GZ7R0000000000000001")
124
+ role_full_resource_name: Full resource name
15
125
 
16
126
  Returns:
17
- The full resource name string (e.g., "groups/01DD32GZ7R0000000000000001/5")
127
+ Tuple of (group_id, role_int)
128
+
129
+ Raises:
130
+ ValueError: If format is invalid or role number cannot be parsed
131
+
132
+ Example:
133
+ >>> parse_role_parts("groups/01DD32GZ7R0000000000000001/roles/3000000")
134
+ ('01DD32GZ7R0000000000000001', 3000000)
135
+ """
136
+ parts = role_full_resource_name.split("/")
137
+ if len(parts) != 4 or parts[0] != "groups" or parts[2] != "roles":
138
+ raise ValueError(f"invalid role format, expected groups/{{groupID}}/roles/{{role}}, got {role_full_resource_name}")
139
+
140
+ group_id = parts[1]
141
+ if not group_id:
142
+ raise ValueError("group ID cannot be empty")
143
+
144
+ try:
145
+ role_int = int(parts[3])
146
+ except ValueError as e:
147
+ raise ValueError(f"error parsing role enum value '{parts[3]}'") from e
148
+
149
+ if role_int < 0:
150
+ raise ValueError(f"invalid role number in full resource name: {role_full_resource_name}")
151
+
152
+ return group_id, role_int
153
+
154
+
155
+ def must_parse_role_parts(role_full_resource_name: str) -> tuple[str, int]:
156
+ """Parse role parts, raising error on failure.
157
+
158
+ This is an alias for parse_role_parts.
159
+ Both functions raise ValueError on parsing errors.
160
+
161
+ Args:
162
+ role_full_resource_name: Full resource name
163
+
164
+ Returns:
165
+ Tuple of (group_id, role_int)
166
+
167
+ Raises:
168
+ ValueError: If format is invalid
18
169
 
19
170
  Example:
20
- >>> full_resource_name_from_group_name(Role.ROLE_IAM_ADMIN, "groups/01DD32GZ7R0000000000000001")
21
- "groups/01DD32GZ7R0000000000000001/5"
171
+ >>> must_parse_role_parts("groups/01DD32GZ7R0000000000000001/roles/3000000")
172
+ ('01DD32GZ7R0000000000000001', 3000000)
22
173
  """
23
- return f"{group_name}/{role}"
174
+ return parse_role_parts(role_full_resource_name)
@@ -22,19 +22,16 @@ _runtime_version.ValidateProtobufRuntimeVersion(
22
22
  _sym_db = _symbol_database.Default()
23
23
 
24
24
 
25
- from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
26
25
 
27
26
 
28
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtrade/iam/role/v1/role.proto\x12\x15meshtrade.iam.role.v1\x1a google/protobuf/descriptor.proto\"=\n\x08RoleList\x12\x31\n\x05roles\x18\x01 \x03(\x0e\x32\x1b.meshtrade.iam.role.v1.RoleR\x05roles*\xe6\x02\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x17\n\x11ROLE_WALLET_ADMIN\x10\xc0\x84=\x12\x18\n\x12ROLE_WALLET_VIEWER\x10\xc1\x84=\x12\x1b\n\x15ROLE_COMPLIANCE_ADMIN\x10\x80\x89z\x12\x1c\n\x16ROLE_COMPLIANCE_VIEWER\x10\x81\x89z\x12\x15\n\x0eROLE_IAM_ADMIN\x10\xc0\x8d\xb7\x01\x12\x16\n\x0fROLE_IAM_VIEWER\x10\xc1\x8d\xb7\x01\x12\x1e\n\x17ROLE_ISSUANCE_HUB_ADMIN\x10\x80\x92\xf4\x01\x12\x1f\n\x18ROLE_ISSUANCE_HUB_VIEWER\x10\x81\x92\xf4\x01\x12\x19\n\x12ROLE_TRADING_ADMIN\x10\xc0\x96\xb1\x02\x12\x1a\n\x13ROLE_TRADING_VIEWER\x10\xc1\x96\xb1\x02\x12\x18\n\x11ROLE_REPORT_ADMIN\x10\x80\x9b\xee\x02\x12\x19\n\x12ROLE_REPORT_VIEWER\x10\x81\x9b\xee\x02:f\n\x0estandard_roles\x12\x1c.google.protobuf.FileOptions\x18\xd3\x86\x03 \x01(\x0b\x32\x1f.meshtrade.iam.role.v1.RoleListR\rstandardRoles:W\n\x05roles\x12\x1e.google.protobuf.MethodOptions\x18\xd5\x86\x03 \x01(\x0b\x32\x1f.meshtrade.iam.role.v1.RoleListR\x05rolesBN\n\x1c\x63o.meshtrade.api.iam.role.v1Z.github.com/meshtrade/api/go/iam/role/v1;rolev1b\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtrade/iam/role/v1/role.proto\x12\x15meshtrade.iam.role.v1*\xc7\x08\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x17\n\x11ROLE_WALLET_ADMIN\x10\xc0\x84=\x12\x18\n\x12ROLE_WALLET_VIEWER\x10\xc1\x84=\x12\x1f\n\x19ROLE_WALLET_ACCOUNT_ADMIN\x10\xc2\x84=\x12 \n\x1aROLE_WALLET_ACCOUNT_VIEWER\x10\xc3\x84=\x12\x1b\n\x15ROLE_COMPLIANCE_ADMIN\x10\x80\x89z\x12\x1c\n\x16ROLE_COMPLIANCE_VIEWER\x10\x81\x89z\x12\"\n\x1cROLE_COMPLIANCE_CLIENT_ADMIN\x10\x82\x89z\x12#\n\x1dROLE_COMPLIANCE_CLIENT_VIEWER\x10\x83\x89z\x12\x15\n\x0eROLE_IAM_ADMIN\x10\xc0\x8d\xb7\x01\x12\x16\n\x0fROLE_IAM_VIEWER\x10\xc1\x8d\xb7\x01\x12\x1e\n\x17ROLE_IAM_API_USER_ADMIN\x10\xc2\x8d\xb7\x01\x12\x1f\n\x18ROLE_IAM_API_USER_VIEWER\x10\xc3\x8d\xb7\x01\x12\x1b\n\x14ROLE_IAM_GROUP_ADMIN\x10\xc4\x8d\xb7\x01\x12\x1c\n\x15ROLE_IAM_GROUP_VIEWER\x10\xc5\x8d\xb7\x01\x12\x1a\n\x13ROLE_IAM_USER_ADMIN\x10\xc6\x8d\xb7\x01\x12\x1b\n\x14ROLE_IAM_USER_VIEWER\x10\xc7\x8d\xb7\x01\x12\x18\n\x11ROLE_STUDIO_ADMIN\x10\x80\x92\xf4\x01\x12\x19\n\x12ROLE_STUDIO_VIEWER\x10\x81\x92\xf4\x01\x12#\n\x1cROLE_STUDIO_INSTRUMENT_ADMIN\x10\x82\x92\xf4\x01\x12$\n\x1dROLE_STUDIO_INSTRUMENT_VIEWER\x10\x83\x92\xf4\x01\x12\x19\n\x12ROLE_TRADING_ADMIN\x10\xc0\x96\xb1\x02\x12\x1a\n\x13ROLE_TRADING_VIEWER\x10\xc1\x96\xb1\x02\x12%\n\x1eROLE_TRADING_LIMIT_ORDER_ADMIN\x10\xc2\x96\xb1\x02\x12&\n\x1fROLE_TRADING_LIMIT_ORDER_VIEWER\x10\xc3\x96\xb1\x02\x12\x1b\n\x14ROLE_REPORTING_ADMIN\x10\x80\x9b\xee\x02\x12\x1c\n\x15ROLE_REPORTING_VIEWER\x10\x81\x9b\xee\x02\x12\x18\n\x11ROLE_LEDGER_ADMIN\x10\xc0\x9f\xab\x03\x12\x19\n\x12ROLE_LEDGER_VIEWER\x10\xc1\x9f\xab\x03\x12$\n\x1dROLE_LEDGER_TRANSACTION_ADMIN\x10\xc2\x9f\xab\x03\x12%\n\x1eROLE_LEDGER_TRANSACTION_VIEWER\x10\xc3\x9f\xab\x03\x12\x1d\n\x16ROLE_MARKET_DATA_ADMIN\x10\x80\xa4\xe8\x03\x12\x1e\n\x17ROLE_MARKET_DATA_VIEWER\x10\x81\xa4\xe8\x03\x12#\n\x1cROLE_MARKET_DATA_PRICE_ADMIN\x10\x82\xa4\xe8\x03\x12$\n\x1dROLE_MARKET_DATA_PRICE_VIEWER\x10\x83\xa4\xe8\x03\x42O\n\x1c\x63o.meshtrade.api.iam.role.v1Z/github.com/meshtrade/api/go/iam/role/v1;role_v1b\x06proto3')
29
28
 
30
29
  _globals = globals()
31
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
32
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtrade.iam.role.v1.role_pb2', _globals)
33
32
  if not _descriptor._USE_C_DESCRIPTORS:
34
33
  _globals['DESCRIPTOR']._loaded_options = None
35
- _globals['DESCRIPTOR']._serialized_options = b'\n\034co.meshtrade.api.iam.role.v1Z.github.com/meshtrade/api/go/iam/role/v1;rolev1'
36
- _globals['_ROLE']._serialized_start=157
37
- _globals['_ROLE']._serialized_end=515
38
- _globals['_ROLELIST']._serialized_start=93
39
- _globals['_ROLELIST']._serialized_end=154
34
+ _globals['DESCRIPTOR']._serialized_options = b'\n\034co.meshtrade.api.iam.role.v1Z/github.com/meshtrade/api/go/iam/role/v1;role_v1'
35
+ _globals['_ROLE']._serialized_start=60
36
+ _globals['_ROLE']._serialized_end=1155
40
37
  # @@protoc_insertion_point(module_scope)
@@ -1,10 +1,6 @@
1
- from google.protobuf import descriptor_pb2 as _descriptor_pb2
2
- from google.protobuf.internal import containers as _containers
3
1
  from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
4
2
  from google.protobuf import descriptor as _descriptor
5
- from google.protobuf import message as _message
6
- from collections.abc import Iterable as _Iterable
7
- from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
3
+ from typing import ClassVar as _ClassVar
8
4
 
9
5
  DESCRIPTOR: _descriptor.FileDescriptor
10
6
 
@@ -13,36 +9,70 @@ class Role(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
13
9
  ROLE_UNSPECIFIED: _ClassVar[Role]
14
10
  ROLE_WALLET_ADMIN: _ClassVar[Role]
15
11
  ROLE_WALLET_VIEWER: _ClassVar[Role]
12
+ ROLE_WALLET_ACCOUNT_ADMIN: _ClassVar[Role]
13
+ ROLE_WALLET_ACCOUNT_VIEWER: _ClassVar[Role]
16
14
  ROLE_COMPLIANCE_ADMIN: _ClassVar[Role]
17
15
  ROLE_COMPLIANCE_VIEWER: _ClassVar[Role]
16
+ ROLE_COMPLIANCE_CLIENT_ADMIN: _ClassVar[Role]
17
+ ROLE_COMPLIANCE_CLIENT_VIEWER: _ClassVar[Role]
18
18
  ROLE_IAM_ADMIN: _ClassVar[Role]
19
19
  ROLE_IAM_VIEWER: _ClassVar[Role]
20
- ROLE_ISSUANCE_HUB_ADMIN: _ClassVar[Role]
21
- ROLE_ISSUANCE_HUB_VIEWER: _ClassVar[Role]
20
+ ROLE_IAM_API_USER_ADMIN: _ClassVar[Role]
21
+ ROLE_IAM_API_USER_VIEWER: _ClassVar[Role]
22
+ ROLE_IAM_GROUP_ADMIN: _ClassVar[Role]
23
+ ROLE_IAM_GROUP_VIEWER: _ClassVar[Role]
24
+ ROLE_IAM_USER_ADMIN: _ClassVar[Role]
25
+ ROLE_IAM_USER_VIEWER: _ClassVar[Role]
26
+ ROLE_STUDIO_ADMIN: _ClassVar[Role]
27
+ ROLE_STUDIO_VIEWER: _ClassVar[Role]
28
+ ROLE_STUDIO_INSTRUMENT_ADMIN: _ClassVar[Role]
29
+ ROLE_STUDIO_INSTRUMENT_VIEWER: _ClassVar[Role]
22
30
  ROLE_TRADING_ADMIN: _ClassVar[Role]
23
31
  ROLE_TRADING_VIEWER: _ClassVar[Role]
24
- ROLE_REPORT_ADMIN: _ClassVar[Role]
25
- ROLE_REPORT_VIEWER: _ClassVar[Role]
32
+ ROLE_TRADING_LIMIT_ORDER_ADMIN: _ClassVar[Role]
33
+ ROLE_TRADING_LIMIT_ORDER_VIEWER: _ClassVar[Role]
34
+ ROLE_REPORTING_ADMIN: _ClassVar[Role]
35
+ ROLE_REPORTING_VIEWER: _ClassVar[Role]
36
+ ROLE_LEDGER_ADMIN: _ClassVar[Role]
37
+ ROLE_LEDGER_VIEWER: _ClassVar[Role]
38
+ ROLE_LEDGER_TRANSACTION_ADMIN: _ClassVar[Role]
39
+ ROLE_LEDGER_TRANSACTION_VIEWER: _ClassVar[Role]
40
+ ROLE_MARKET_DATA_ADMIN: _ClassVar[Role]
41
+ ROLE_MARKET_DATA_VIEWER: _ClassVar[Role]
42
+ ROLE_MARKET_DATA_PRICE_ADMIN: _ClassVar[Role]
43
+ ROLE_MARKET_DATA_PRICE_VIEWER: _ClassVar[Role]
26
44
  ROLE_UNSPECIFIED: Role
27
45
  ROLE_WALLET_ADMIN: Role
28
46
  ROLE_WALLET_VIEWER: Role
47
+ ROLE_WALLET_ACCOUNT_ADMIN: Role
48
+ ROLE_WALLET_ACCOUNT_VIEWER: Role
29
49
  ROLE_COMPLIANCE_ADMIN: Role
30
50
  ROLE_COMPLIANCE_VIEWER: Role
51
+ ROLE_COMPLIANCE_CLIENT_ADMIN: Role
52
+ ROLE_COMPLIANCE_CLIENT_VIEWER: Role
31
53
  ROLE_IAM_ADMIN: Role
32
54
  ROLE_IAM_VIEWER: Role
33
- ROLE_ISSUANCE_HUB_ADMIN: Role
34
- ROLE_ISSUANCE_HUB_VIEWER: Role
55
+ ROLE_IAM_API_USER_ADMIN: Role
56
+ ROLE_IAM_API_USER_VIEWER: Role
57
+ ROLE_IAM_GROUP_ADMIN: Role
58
+ ROLE_IAM_GROUP_VIEWER: Role
59
+ ROLE_IAM_USER_ADMIN: Role
60
+ ROLE_IAM_USER_VIEWER: Role
61
+ ROLE_STUDIO_ADMIN: Role
62
+ ROLE_STUDIO_VIEWER: Role
63
+ ROLE_STUDIO_INSTRUMENT_ADMIN: Role
64
+ ROLE_STUDIO_INSTRUMENT_VIEWER: Role
35
65
  ROLE_TRADING_ADMIN: Role
36
66
  ROLE_TRADING_VIEWER: Role
37
- ROLE_REPORT_ADMIN: Role
38
- ROLE_REPORT_VIEWER: Role
39
- STANDARD_ROLES_FIELD_NUMBER: _ClassVar[int]
40
- standard_roles: _descriptor.FieldDescriptor
41
- ROLES_FIELD_NUMBER: _ClassVar[int]
42
- roles: _descriptor.FieldDescriptor
43
-
44
- class RoleList(_message.Message):
45
- __slots__ = ("roles",)
46
- ROLES_FIELD_NUMBER: _ClassVar[int]
47
- roles: _containers.RepeatedScalarFieldContainer[Role]
48
- def __init__(self, roles: _Optional[_Iterable[_Union[Role, str]]] = ...) -> None: ...
67
+ ROLE_TRADING_LIMIT_ORDER_ADMIN: Role
68
+ ROLE_TRADING_LIMIT_ORDER_VIEWER: Role
69
+ ROLE_REPORTING_ADMIN: Role
70
+ ROLE_REPORTING_VIEWER: Role
71
+ ROLE_LEDGER_ADMIN: Role
72
+ ROLE_LEDGER_VIEWER: Role
73
+ ROLE_LEDGER_TRANSACTION_ADMIN: Role
74
+ ROLE_LEDGER_TRANSACTION_VIEWER: Role
75
+ ROLE_MARKET_DATA_ADMIN: Role
76
+ ROLE_MARKET_DATA_VIEWER: Role
77
+ ROLE_MARKET_DATA_PRICE_ADMIN: Role
78
+ ROLE_MARKET_DATA_PRICE_VIEWER: Role
@@ -14,7 +14,18 @@
14
14
 
15
15
  # Generated protobuf imports
16
16
  from .user_pb2 import User
17
- from .service_pb2 import AssignRoleToUserRequest
17
+ from .service_pb2 import (
18
+ AssignRolesToUserRequest,
19
+ CreateUserRequest,
20
+ GetUserByEmailRequest,
21
+ GetUserRequest,
22
+ ListUsersRequest,
23
+ ListUsersResponse,
24
+ RevokeRolesFromUserRequest,
25
+ SearchUsersRequest,
26
+ SearchUsersResponse,
27
+ UpdateUserRequest,
28
+ )
18
29
 
19
30
  # Generated service imports
20
31
  from .service_meshpy import (
@@ -22,7 +33,6 @@ from .service_meshpy import (
22
33
  UserServiceGRPCClient,
23
34
  UserServiceGRPCClientInterface,
24
35
  )
25
- from .service_options_meshpy import ClientOptions
26
36
 
27
37
  # ===================================================================
28
38
  # END OF AUTO-GENERATED SECTION
@@ -44,8 +54,16 @@ from .service_options_meshpy import ClientOptions
44
54
  # Combined auto-generated and manual exports
45
55
  __all__ = [
46
56
  # Generated exports
47
- "AssignRoleToUserRequest",
48
- "ClientOptions",
57
+ "AssignRolesToUserRequest",
58
+ "CreateUserRequest",
59
+ "GetUserByEmailRequest",
60
+ "GetUserRequest",
61
+ "ListUsersRequest",
62
+ "ListUsersResponse",
63
+ "RevokeRolesFromUserRequest",
64
+ "SearchUsersRequest",
65
+ "SearchUsersResponse",
66
+ "UpdateUserRequest",
49
67
  "User",
50
68
  "UserService",
51
69
  "UserServiceGRPCClient",
@@ -9,6 +9,7 @@ the service interface with resource management capabilities, providing authentic
9
9
  timeouts, and proper connection handling.
10
10
  """
11
11
 
12
+ from collections.abc import Iterator
12
13
  from datetime import timedelta
13
14
  from typing import Optional
14
15
 
@@ -16,9 +17,18 @@ from meshtrade.common import BaseGRPCClient
16
17
  from meshtrade.iam.api_user.v1.api_credentials import find_credentials
17
18
 
18
19
  from .user_pb2 import User
19
- from .service_options_meshpy import ServiceOptions
20
+ from meshtrade.common.service_options import ServiceOptions
20
21
  from .service_pb2 import (
21
- AssignRoleToUserRequest,
22
+ AssignRolesToUserRequest,
23
+ CreateUserRequest,
24
+ GetUserByEmailRequest,
25
+ GetUserRequest,
26
+ ListUsersRequest,
27
+ ListUsersResponse,
28
+ RevokeRolesFromUserRequest,
29
+ SearchUsersRequest,
30
+ SearchUsersResponse,
31
+ UpdateUserRequest,
22
32
  )
23
33
  from .service_pb2_grpc import UserServiceStub
24
34
 
@@ -129,21 +139,133 @@ class UserService(BaseGRPCClient):
129
139
  tls=options.tls,
130
140
  )
131
141
 
132
- def assign_role_to_user(self, request: AssignRoleToUserRequest, timeout: Optional[timedelta] = None) -> User:
133
- """AssignRoleToUser method.
142
+ def assign_roles_to_user(self, request: AssignRolesToUserRequest, timeout: Optional[timedelta] = None) -> User:
143
+ """AssignRolesToUser method.
134
144
 
135
145
  Args:
136
- request: The AssignRoleToUser request message
146
+ request: The AssignRolesToUser request message
137
147
  timeout: Optional timeout override for this call
138
148
 
139
149
  Returns:
140
- The AssignRoleToUser response message
150
+ The AssignRolesToUser response message
141
151
 
142
152
  Raises:
143
153
  grpc.RpcError: If the gRPC call fails
144
154
  ValueError: If authentication credentials are missing
145
155
  """
146
- return self._execute_method("AssignRoleToUser", request, timeout)
156
+ return self._execute_method("AssignRolesToUser", request, timeout)
157
+
158
+ def revoke_roles_from_user(self, request: RevokeRolesFromUserRequest, timeout: Optional[timedelta] = None) -> User:
159
+ """RevokeRolesFromUser method.
160
+
161
+ Args:
162
+ request: The RevokeRolesFromUser request message
163
+ timeout: Optional timeout override for this call
164
+
165
+ Returns:
166
+ The RevokeRolesFromUser response message
167
+
168
+ Raises:
169
+ grpc.RpcError: If the gRPC call fails
170
+ ValueError: If authentication credentials are missing
171
+ """
172
+ return self._execute_method("RevokeRolesFromUser", request, timeout)
173
+
174
+ def get_user(self, request: GetUserRequest, timeout: Optional[timedelta] = None) -> User:
175
+ """GetUser method.
176
+
177
+ Args:
178
+ request: The GetUser request message
179
+ timeout: Optional timeout override for this call
180
+
181
+ Returns:
182
+ The GetUser response message
183
+
184
+ Raises:
185
+ grpc.RpcError: If the gRPC call fails
186
+ ValueError: If authentication credentials are missing
187
+ """
188
+ return self._execute_method("GetUser", request, timeout)
189
+
190
+ def get_user_by_email(self, request: GetUserByEmailRequest, timeout: Optional[timedelta] = None) -> User:
191
+ """GetUserByEmail method.
192
+
193
+ Args:
194
+ request: The GetUserByEmail request message
195
+ timeout: Optional timeout override for this call
196
+
197
+ Returns:
198
+ The GetUserByEmail response message
199
+
200
+ Raises:
201
+ grpc.RpcError: If the gRPC call fails
202
+ ValueError: If authentication credentials are missing
203
+ """
204
+ return self._execute_method("GetUserByEmail", request, timeout)
205
+
206
+ def list_users(self, request: ListUsersRequest, timeout: Optional[timedelta] = None) -> ListUsersResponse:
207
+ """ListUsers method.
208
+
209
+ Args:
210
+ request: The ListUsers request message
211
+ timeout: Optional timeout override for this call
212
+
213
+ Returns:
214
+ The ListUsers response message
215
+
216
+ Raises:
217
+ grpc.RpcError: If the gRPC call fails
218
+ ValueError: If authentication credentials are missing
219
+ """
220
+ return self._execute_method("ListUsers", request, timeout)
221
+
222
+ def search_users(self, request: SearchUsersRequest, timeout: Optional[timedelta] = None) -> SearchUsersResponse:
223
+ """SearchUsers method.
224
+
225
+ Args:
226
+ request: The SearchUsers request message
227
+ timeout: Optional timeout override for this call
228
+
229
+ Returns:
230
+ The SearchUsers response message
231
+
232
+ Raises:
233
+ grpc.RpcError: If the gRPC call fails
234
+ ValueError: If authentication credentials are missing
235
+ """
236
+ return self._execute_method("SearchUsers", request, timeout)
237
+
238
+ def create_user(self, request: CreateUserRequest, timeout: Optional[timedelta] = None) -> User:
239
+ """CreateUser method.
240
+
241
+ Args:
242
+ request: The CreateUser request message
243
+ timeout: Optional timeout override for this call
244
+
245
+ Returns:
246
+ The CreateUser response message
247
+
248
+ Raises:
249
+ grpc.RpcError: If the gRPC call fails
250
+ ValueError: If authentication credentials are missing
251
+ """
252
+ return self._execute_method("CreateUser", request, timeout)
253
+
254
+ def update_user(self, request: UpdateUserRequest, timeout: Optional[timedelta] = None) -> User:
255
+ """UpdateUser method.
256
+
257
+ Args:
258
+ request: The UpdateUser request message
259
+ timeout: Optional timeout override for this call
260
+
261
+ Returns:
262
+ The UpdateUser response message
263
+
264
+ Raises:
265
+ grpc.RpcError: If the gRPC call fails
266
+ ValueError: If authentication credentials are missing
267
+ """
268
+ return self._execute_method("UpdateUser", request, timeout)
147
269
 
148
270
 
149
271
  # Create aliases to match expected exports
@@ -23,29 +23,79 @@ _sym_db = _symbol_database.Default()
23
23
 
24
24
 
25
25
  from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
26
- from meshtrade.iam.role.v1 import role_pb2 as meshtrade_dot_iam_dot_role_dot_v1_dot_role__pb2
27
26
  from meshtrade.iam.user.v1 import user_pb2 as meshtrade_dot_iam_dot_user_dot_v1_dot_user__pb2
28
- from meshtrade.option.v1 import method_type_pb2 as meshtrade_dot_option_dot_v1_dot_method__type__pb2
27
+ from meshtrade.option.method_options.v1 import method_options_pb2 as meshtrade_dot_option_dot_method__options_dot_v1_dot_method__options__pb2
28
+ from meshtrade.type.v1 import sorting_pb2 as meshtrade_dot_type_dot_v1_dot_sorting__pb2
29
29
 
30
30
 
31
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtrade/iam/user/v1/service.proto\x12\x15meshtrade.iam.user.v1\x1a\x1b\x62uf/validate/validate.proto\x1a meshtrade/iam/role/v1/role.proto\x1a meshtrade/iam/user/v1/user.proto\x1a%meshtrade/option/v1/method_type.proto\"\x88\x04\n\x17\x41ssignRoleToUserRequest\x12\xac\x01\n\x05\x65mail\x18\x01 \x01(\tB\x95\x01\xbaH\x91\x01r7\x10\x01\x18\xfe\x01\x32\x30^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\xba\x01U\n\x0e\x65mail.required\x12\x33\x65mail is required and must be a valid email address\x1a\x0esize(this) > 0R\x05\x65mail\x12\x9b\x01\n\x05group\x18\x02 \x01(\tB\x84\x01\xbaH\x80\x01r\x05\x10\x01\x18\xff\x01\xba\x01v\n\x0egroup.required\x12?group name is required and must be between 1 and 255 characters\x1a#size(this) > 0 && size(this) <= 255R\x05group\x12\x9f\x01\n\x04role\x18\x03 \x01(\x0e\x32\x1b.meshtrade.iam.role.v1.RoleBn\xbaHk\x82\x01\x04\x10\x01 \x00\xba\x01\x61\n\rrole.required\x12@role is required and must be a valid role type (not UNSPECIFIED)\x1a\x0eint(this) != 0R\x04role2~\n\x0bUserService\x12o\n\x10\x41ssignRoleToUser\x12..meshtrade.iam.user.v1.AssignRoleToUserRequest\x1a\x1b.meshtrade.iam.user.v1.User\"\x0e\xa0\xb5\x18\x02\xaa\xb5\x18\x06\n\x04\xc0\x8d\xb7\x01\x42N\n\x1c\x63o.meshtrade.api.iam.user.v1Z.github.com/meshtrade/api/go/iam/user/v1;userv1b\x06proto3')
31
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtrade/iam/user/v1/service.proto\x12\x15meshtrade.iam.user.v1\x1a\x1b\x62uf/validate/validate.proto\x1a meshtrade/iam/user/v1/user.proto\x1a\x37meshtrade/option/method_options/v1/method_options.proto\x1a\x1fmeshtrade/type/v1/sorting.proto\"\xdb\x01\n\x18\x41ssignRolesToUserRequest\x12O\n\x04name\x18\x01 \x01(\tB;\xbaH8r32.^users/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\x98\x01 \xc8\x01\x01R\x04name\x12n\n\x05roles\x18\x02 \x03(\tBX\xbaHU\x92\x01O\"MrK\x10/\x18\x30\x32\x45^groups/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}/roles/[1-9][0-9]{6,7}$\xc8\x01\x01R\x05roles\"\xdd\x01\n\x1aRevokeRolesFromUserRequest\x12O\n\x04name\x18\x01 \x01(\tB;\xbaH8r32.^users/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\x98\x01 \xc8\x01\x01R\x04name\x12n\n\x05roles\x18\x02 \x03(\tBX\xbaHU\x92\x01O\"MrK\x10/\x18\x30\x32\x45^groups/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}/roles/[1-9][0-9]{6,7}$\xc8\x01\x01R\x05roles\"a\n\x0eGetUserRequest\x12O\n\x04name\x18\x01 \x01(\tB;\xbaH8r32.^users/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\x98\x01 \xc8\x01\x01R\x04name\"9\n\x15GetUserByEmailRequest\x12 \n\x05\x65mail\x18\x01 \x01(\tB\n\xbaH\x07r\x02`\x01\xc8\x01\x01R\x05\x65mail\"\x94\x02\n\x10ListUsersRequest\x12I\n\x07sorting\x18\x01 \x01(\x0b\x32/.meshtrade.iam.user.v1.ListUsersRequest.SortingR\x07sorting\x1a\xb4\x01\n\x07Sorting\x12r\n\x05\x66ield\x18\x01 \x01(\tB\\\xbaHYr\tR\x00R\x05\x65mail\xba\x01K\n\x0b\x66ield.valid\x12%field must be one of: email, or empty\x1a\x15this in [\'\', \'email\']R\x05\x66ield\x12\x35\n\x05order\x18\x02 \x01(\x0e\x32\x1f.meshtrade.type.v1.SortingOrderR\x05order\"F\n\x11ListUsersResponse\x12\x31\n\x05users\x18\x01 \x03(\x0b\x32\x1b.meshtrade.iam.user.v1.UserR\x05users\"\xae\x02\n\x12SearchUsersRequest\x12\x14\n\x05\x65mail\x18\x01 \x01(\tR\x05\x65mail\x12K\n\x07sorting\x18\x02 \x01(\x0b\x32\x31.meshtrade.iam.user.v1.SearchUsersRequest.SortingR\x07sorting\x1a\xb4\x01\n\x07Sorting\x12r\n\x05\x66ield\x18\x01 \x01(\tB\\\xbaHYr\tR\x00R\x05\x65mail\xba\x01K\n\x0b\x66ield.valid\x12%field must be one of: email, or empty\x1a\x15this in [\'\', \'email\']R\x05\x66ield\x12\x35\n\x05order\x18\x02 \x01(\x0e\x32\x1f.meshtrade.type.v1.SortingOrderR\x05order\"H\n\x13SearchUsersResponse\x12\x31\n\x05users\x18\x01 \x03(\x0b\x32\x1b.meshtrade.iam.user.v1.UserR\x05users\"L\n\x11\x43reateUserRequest\x12\x37\n\x04user\x18\x01 \x01(\x0b\x32\x1b.meshtrade.iam.user.v1.UserB\x06\xbaH\x03\xc8\x01\x01R\x04user\"L\n\x11UpdateUserRequest\x12\x37\n\x04user\x18\x01 \x01(\x0b\x32\x1b.meshtrade.iam.user.v1.UserB\x06\xbaH\x03\xc8\x01\x01R\x04user2\xb4\x07\n\x0bUserService\x12u\n\x11\x41ssignRolesToUser\x12/.meshtrade.iam.user.v1.AssignRolesToUserRequest\x1a\x1b.meshtrade.iam.user.v1.User\"\x12\xb2\xb5\x18\x0e\x08\x02\x10\x02\x1a\x08\xc0\x8d\xb7\x01\xc6\x8d\xb7\x01\x12y\n\x13RevokeRolesFromUser\x12\x31.meshtrade.iam.user.v1.RevokeRolesFromUserRequest\x1a\x1b.meshtrade.iam.user.v1.User\"\x12\xb2\xb5\x18\x0e\x08\x02\x10\x02\x1a\x08\xc0\x8d\xb7\x01\xc6\x8d\xb7\x01\x12i\n\x07GetUser\x12%.meshtrade.iam.user.v1.GetUserRequest\x1a\x1b.meshtrade.iam.user.v1.User\"\x1a\xb2\xb5\x18\x16\x08\x01\x10\x02\x1a\x10\xc0\x8d\xb7\x01\xc1\x8d\xb7\x01\xc6\x8d\xb7\x01\xc7\x8d\xb7\x01\x12w\n\x0eGetUserByEmail\x12,.meshtrade.iam.user.v1.GetUserByEmailRequest\x1a\x1b.meshtrade.iam.user.v1.User\"\x1a\xb2\xb5\x18\x16\x08\x01\x10\x02\x1a\x10\xc0\x8d\xb7\x01\xc1\x8d\xb7\x01\xc6\x8d\xb7\x01\xc7\x8d\xb7\x01\x12z\n\tListUsers\x12\'.meshtrade.iam.user.v1.ListUsersRequest\x1a(.meshtrade.iam.user.v1.ListUsersResponse\"\x1a\xb2\xb5\x18\x16\x08\x01\x10\x02\x1a\x10\xc0\x8d\xb7\x01\xc1\x8d\xb7\x01\xc6\x8d\xb7\x01\xc7\x8d\xb7\x01\x12\x80\x01\n\x0bSearchUsers\x12).meshtrade.iam.user.v1.SearchUsersRequest\x1a*.meshtrade.iam.user.v1.SearchUsersResponse\"\x1a\xb2\xb5\x18\x16\x08\x01\x10\x02\x1a\x10\xc0\x8d\xb7\x01\xc1\x8d\xb7\x01\xc6\x8d\xb7\x01\xc7\x8d\xb7\x01\x12g\n\nCreateUser\x12(.meshtrade.iam.user.v1.CreateUserRequest\x1a\x1b.meshtrade.iam.user.v1.User\"\x12\xb2\xb5\x18\x0e\x08\x02\x10\x02\x1a\x08\xc0\x8d\xb7\x01\xc6\x8d\xb7\x01\x12g\n\nUpdateUser\x12(.meshtrade.iam.user.v1.UpdateUserRequest\x1a\x1b.meshtrade.iam.user.v1.User\"\x12\xb2\xb5\x18\x0e\x08\x02\x10\x02\x1a\x08\xc0\x8d\xb7\x01\xc6\x8d\xb7\x01\x42O\n\x1c\x63o.meshtrade.api.iam.user.v1Z/github.com/meshtrade/api/go/iam/user/v1;user_v1b\x06proto3')
32
32
 
33
33
  _globals = globals()
34
34
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
35
35
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtrade.iam.user.v1.service_pb2', _globals)
36
36
  if not _descriptor._USE_C_DESCRIPTORS:
37
37
  _globals['DESCRIPTOR']._loaded_options = None
38
- _globals['DESCRIPTOR']._serialized_options = b'\n\034co.meshtrade.api.iam.user.v1Z.github.com/meshtrade/api/go/iam/user/v1;userv1'
39
- _globals['_ASSIGNROLETOUSERREQUEST'].fields_by_name['email']._loaded_options = None
40
- _globals['_ASSIGNROLETOUSERREQUEST'].fields_by_name['email']._serialized_options = b'\272H\221\001r7\020\001\030\376\00120^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\272\001U\n\016email.required\0223email is required and must be a valid email address\032\016size(this) > 0'
41
- _globals['_ASSIGNROLETOUSERREQUEST'].fields_by_name['group']._loaded_options = None
42
- _globals['_ASSIGNROLETOUSERREQUEST'].fields_by_name['group']._serialized_options = b'\272H\200\001r\005\020\001\030\377\001\272\001v\n\016group.required\022?group name is required and must be between 1 and 255 characters\032#size(this) > 0 && size(this) <= 255'
43
- _globals['_ASSIGNROLETOUSERREQUEST'].fields_by_name['role']._loaded_options = None
44
- _globals['_ASSIGNROLETOUSERREQUEST'].fields_by_name['role']._serialized_options = b'\272Hk\202\001\004\020\001 \000\272\001a\n\rrole.required\022@role is required and must be a valid role type (not UNSPECIFIED)\032\016int(this) != 0'
45
- _globals['_USERSERVICE'].methods_by_name['AssignRoleToUser']._loaded_options = None
46
- _globals['_USERSERVICE'].methods_by_name['AssignRoleToUser']._serialized_options = b'\240\265\030\002\252\265\030\006\n\004\300\215\267\001'
47
- _globals['_ASSIGNROLETOUSERREQUEST']._serialized_start=199
48
- _globals['_ASSIGNROLETOUSERREQUEST']._serialized_end=719
49
- _globals['_USERSERVICE']._serialized_start=721
50
- _globals['_USERSERVICE']._serialized_end=847
38
+ _globals['DESCRIPTOR']._serialized_options = b'\n\034co.meshtrade.api.iam.user.v1Z/github.com/meshtrade/api/go/iam/user/v1;user_v1'
39
+ _globals['_ASSIGNROLESTOUSERREQUEST'].fields_by_name['name']._loaded_options = None
40
+ _globals['_ASSIGNROLESTOUSERREQUEST'].fields_by_name['name']._serialized_options = b'\272H8r32.^users/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\230\001 \310\001\001'
41
+ _globals['_ASSIGNROLESTOUSERREQUEST'].fields_by_name['roles']._loaded_options = None
42
+ _globals['_ASSIGNROLESTOUSERREQUEST'].fields_by_name['roles']._serialized_options = b'\272HU\222\001O\"MrK\020/\03002E^groups/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}/roles/[1-9][0-9]{6,7}$\310\001\001'
43
+ _globals['_REVOKEROLESFROMUSERREQUEST'].fields_by_name['name']._loaded_options = None
44
+ _globals['_REVOKEROLESFROMUSERREQUEST'].fields_by_name['name']._serialized_options = b'\272H8r32.^users/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\230\001 \310\001\001'
45
+ _globals['_REVOKEROLESFROMUSERREQUEST'].fields_by_name['roles']._loaded_options = None
46
+ _globals['_REVOKEROLESFROMUSERREQUEST'].fields_by_name['roles']._serialized_options = b'\272HU\222\001O\"MrK\020/\03002E^groups/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}/roles/[1-9][0-9]{6,7}$\310\001\001'
47
+ _globals['_GETUSERREQUEST'].fields_by_name['name']._loaded_options = None
48
+ _globals['_GETUSERREQUEST'].fields_by_name['name']._serialized_options = b'\272H8r32.^users/[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$\230\001 \310\001\001'
49
+ _globals['_GETUSERBYEMAILREQUEST'].fields_by_name['email']._loaded_options = None
50
+ _globals['_GETUSERBYEMAILREQUEST'].fields_by_name['email']._serialized_options = b'\272H\007r\002`\001\310\001\001'
51
+ _globals['_LISTUSERSREQUEST_SORTING'].fields_by_name['field']._loaded_options = None
52
+ _globals['_LISTUSERSREQUEST_SORTING'].fields_by_name['field']._serialized_options = b'\272HYr\tR\000R\005email\272\001K\n\013field.valid\022%field must be one of: email, or empty\032\025this in [\'\', \'email\']'
53
+ _globals['_SEARCHUSERSREQUEST_SORTING'].fields_by_name['field']._loaded_options = None
54
+ _globals['_SEARCHUSERSREQUEST_SORTING'].fields_by_name['field']._serialized_options = b'\272HYr\tR\000R\005email\272\001K\n\013field.valid\022%field must be one of: email, or empty\032\025this in [\'\', \'email\']'
55
+ _globals['_CREATEUSERREQUEST'].fields_by_name['user']._loaded_options = None
56
+ _globals['_CREATEUSERREQUEST'].fields_by_name['user']._serialized_options = b'\272H\003\310\001\001'
57
+ _globals['_UPDATEUSERREQUEST'].fields_by_name['user']._loaded_options = None
58
+ _globals['_UPDATEUSERREQUEST'].fields_by_name['user']._serialized_options = b'\272H\003\310\001\001'
59
+ _globals['_USERSERVICE'].methods_by_name['AssignRolesToUser']._loaded_options = None
60
+ _globals['_USERSERVICE'].methods_by_name['AssignRolesToUser']._serialized_options = b'\262\265\030\016\010\002\020\002\032\010\300\215\267\001\306\215\267\001'
61
+ _globals['_USERSERVICE'].methods_by_name['RevokeRolesFromUser']._loaded_options = None
62
+ _globals['_USERSERVICE'].methods_by_name['RevokeRolesFromUser']._serialized_options = b'\262\265\030\016\010\002\020\002\032\010\300\215\267\001\306\215\267\001'
63
+ _globals['_USERSERVICE'].methods_by_name['GetUser']._loaded_options = None
64
+ _globals['_USERSERVICE'].methods_by_name['GetUser']._serialized_options = b'\262\265\030\026\010\001\020\002\032\020\300\215\267\001\301\215\267\001\306\215\267\001\307\215\267\001'
65
+ _globals['_USERSERVICE'].methods_by_name['GetUserByEmail']._loaded_options = None
66
+ _globals['_USERSERVICE'].methods_by_name['GetUserByEmail']._serialized_options = b'\262\265\030\026\010\001\020\002\032\020\300\215\267\001\301\215\267\001\306\215\267\001\307\215\267\001'
67
+ _globals['_USERSERVICE'].methods_by_name['ListUsers']._loaded_options = None
68
+ _globals['_USERSERVICE'].methods_by_name['ListUsers']._serialized_options = b'\262\265\030\026\010\001\020\002\032\020\300\215\267\001\301\215\267\001\306\215\267\001\307\215\267\001'
69
+ _globals['_USERSERVICE'].methods_by_name['SearchUsers']._loaded_options = None
70
+ _globals['_USERSERVICE'].methods_by_name['SearchUsers']._serialized_options = b'\262\265\030\026\010\001\020\002\032\020\300\215\267\001\301\215\267\001\306\215\267\001\307\215\267\001'
71
+ _globals['_USERSERVICE'].methods_by_name['CreateUser']._loaded_options = None
72
+ _globals['_USERSERVICE'].methods_by_name['CreateUser']._serialized_options = b'\262\265\030\016\010\002\020\002\032\010\300\215\267\001\306\215\267\001'
73
+ _globals['_USERSERVICE'].methods_by_name['UpdateUser']._loaded_options = None
74
+ _globals['_USERSERVICE'].methods_by_name['UpdateUser']._serialized_options = b'\262\265\030\016\010\002\020\002\032\010\300\215\267\001\306\215\267\001'
75
+ _globals['_ASSIGNROLESTOUSERREQUEST']._serialized_start=216
76
+ _globals['_ASSIGNROLESTOUSERREQUEST']._serialized_end=435
77
+ _globals['_REVOKEROLESFROMUSERREQUEST']._serialized_start=438
78
+ _globals['_REVOKEROLESFROMUSERREQUEST']._serialized_end=659
79
+ _globals['_GETUSERREQUEST']._serialized_start=661
80
+ _globals['_GETUSERREQUEST']._serialized_end=758
81
+ _globals['_GETUSERBYEMAILREQUEST']._serialized_start=760
82
+ _globals['_GETUSERBYEMAILREQUEST']._serialized_end=817
83
+ _globals['_LISTUSERSREQUEST']._serialized_start=820
84
+ _globals['_LISTUSERSREQUEST']._serialized_end=1096
85
+ _globals['_LISTUSERSREQUEST_SORTING']._serialized_start=916
86
+ _globals['_LISTUSERSREQUEST_SORTING']._serialized_end=1096
87
+ _globals['_LISTUSERSRESPONSE']._serialized_start=1098
88
+ _globals['_LISTUSERSRESPONSE']._serialized_end=1168
89
+ _globals['_SEARCHUSERSREQUEST']._serialized_start=1171
90
+ _globals['_SEARCHUSERSREQUEST']._serialized_end=1473
91
+ _globals['_SEARCHUSERSREQUEST_SORTING']._serialized_start=916
92
+ _globals['_SEARCHUSERSREQUEST_SORTING']._serialized_end=1096
93
+ _globals['_SEARCHUSERSRESPONSE']._serialized_start=1475
94
+ _globals['_SEARCHUSERSRESPONSE']._serialized_end=1547
95
+ _globals['_CREATEUSERREQUEST']._serialized_start=1549
96
+ _globals['_CREATEUSERREQUEST']._serialized_end=1625
97
+ _globals['_UPDATEUSERREQUEST']._serialized_start=1627
98
+ _globals['_UPDATEUSERREQUEST']._serialized_end=1703
99
+ _globals['_USERSERVICE']._serialized_start=1706
100
+ _globals['_USERSERVICE']._serialized_end=2654
51
101
  # @@protoc_insertion_point(module_scope)