meshtrade 0.0.8__py3-none-any.whl → 0.0.11__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.

Potentially problematic release.


This version of meshtrade might be problematic. Click here for more details.

Files changed (157) hide show
  1. buf/validate/validate_pb2.py +450 -0
  2. buf/validate/validate_pb2.pyi +627 -0
  3. meshtrade/common/__init__.py +28 -0
  4. meshtrade/common/config.py +30 -0
  5. meshtrade/common/grpc_client.py +202 -0
  6. meshtrade/compliance/client/v1/__init__.py +65 -7
  7. meshtrade/compliance/client/v1/client_pb2.py +2 -2
  8. meshtrade/compliance/client/v1/client_pb2_grpc.py +4 -0
  9. meshtrade/compliance/client/v1/company_pb2.py +2 -2
  10. meshtrade/compliance/client/v1/company_pb2_grpc.py +4 -0
  11. meshtrade/compliance/client/v1/company_representative_pb2.py +2 -2
  12. meshtrade/compliance/client/v1/company_representative_pb2_grpc.py +4 -0
  13. meshtrade/compliance/client/v1/company_representative_role_pb2.py +2 -2
  14. meshtrade/compliance/client/v1/company_representative_role_pb2_grpc.py +4 -0
  15. meshtrade/compliance/client/v1/fund_pb2.py +2 -2
  16. meshtrade/compliance/client/v1/fund_pb2_grpc.py +4 -0
  17. meshtrade/compliance/client/v1/identification_document_type_pb2.py +2 -2
  18. meshtrade/compliance/client/v1/identification_document_type_pb2_grpc.py +4 -0
  19. meshtrade/compliance/client/v1/industry_classification_pb2.py +2 -2
  20. meshtrade/compliance/client/v1/industry_classification_pb2_grpc.py +4 -0
  21. meshtrade/compliance/client/v1/natural_person_connection_type_pb2.py +2 -2
  22. meshtrade/compliance/client/v1/natural_person_connection_type_pb2_grpc.py +4 -0
  23. meshtrade/compliance/client/v1/natural_person_pb2.py +2 -2
  24. meshtrade/compliance/client/v1/natural_person_pb2_grpc.py +4 -0
  25. meshtrade/compliance/client/v1/pep_status_pb2.py +2 -2
  26. meshtrade/compliance/client/v1/pep_status_pb2_grpc.py +4 -0
  27. meshtrade/compliance/client/v1/service_meshpy.py +186 -0
  28. meshtrade/compliance/client/v1/service_options_meshpy.py +65 -0
  29. meshtrade/compliance/client/v1/service_pb2.py +20 -10
  30. meshtrade/compliance/client/v1/service_pb2.pyi +8 -0
  31. meshtrade/compliance/client/v1/service_pb2_grpc.py +192 -0
  32. meshtrade/compliance/client/v1/source_of_income_and_wealth_pb2.py +2 -2
  33. meshtrade/compliance/client/v1/source_of_income_and_wealth_pb2_grpc.py +4 -0
  34. meshtrade/compliance/client/v1/tax_residency_pb2.py +2 -2
  35. meshtrade/compliance/client/v1/tax_residency_pb2_grpc.py +4 -0
  36. meshtrade/compliance/client/v1/trust_pb2.py +2 -2
  37. meshtrade/compliance/client/v1/trust_pb2_grpc.py +4 -0
  38. meshtrade/compliance/client/v1/verification_status_pb2.py +2 -2
  39. meshtrade/compliance/client/v1/verification_status_pb2_grpc.py +4 -0
  40. meshtrade/iam/api_user/v1/__init__.py +99 -0
  41. meshtrade/iam/api_user/v1/api_credentials.py +156 -0
  42. meshtrade/iam/api_user/v1/api_credentials_pb2.py +42 -0
  43. meshtrade/iam/api_user/v1/api_credentials_pb2.pyi +14 -0
  44. meshtrade/iam/api_user/v1/api_credentials_pb2_grpc.py +4 -0
  45. meshtrade/iam/api_user/v1/api_user_pb2.py +48 -0
  46. meshtrade/iam/api_user/v1/api_user_pb2.pyi +49 -0
  47. meshtrade/iam/api_user/v1/api_user_pb2_grpc.py +4 -0
  48. meshtrade/iam/api_user/v1/service.py +58 -0
  49. meshtrade/iam/api_user/v1/service_meshpy.py +255 -0
  50. meshtrade/iam/api_user/v1/service_options_meshpy.py +65 -0
  51. meshtrade/iam/api_user/v1/service_pb2.py +77 -0
  52. meshtrade/iam/api_user/v1/service_pb2.pyi +63 -0
  53. meshtrade/iam/api_user/v1/service_pb2_grpc.py +458 -0
  54. meshtrade/iam/group/v1/__init__.py +59 -1
  55. meshtrade/iam/group/v1/group_pb2.py +2 -2
  56. meshtrade/iam/group/v1/group_pb2_grpc.py +4 -0
  57. meshtrade/iam/group/v1/service_meshpy.py +187 -0
  58. meshtrade/iam/group/v1/service_options_meshpy.py +65 -0
  59. meshtrade/iam/group/v1/service_pb2.py +22 -6
  60. meshtrade/iam/group/v1/service_pb2.pyi +29 -1
  61. meshtrade/iam/group/v1/service_pb2_grpc.py +170 -0
  62. meshtrade/iam/role/v1/__init__.py +44 -0
  63. meshtrade/iam/role/v1/role.py +23 -0
  64. meshtrade/iam/role/v1/role_pb2.py +40 -0
  65. meshtrade/{option/v1/auth_pb2.pyi → iam/role/v1/role_pb2.pyi} +16 -0
  66. meshtrade/iam/role/v1/role_pb2_grpc.py +4 -0
  67. meshtrade/iam/user/v1/__init__.py +53 -0
  68. meshtrade/iam/user/v1/service_meshpy.py +151 -0
  69. meshtrade/iam/user/v1/service_options_meshpy.py +65 -0
  70. meshtrade/iam/user/v1/service_pb2.py +51 -0
  71. meshtrade/iam/user/v1/service_pb2.pyi +19 -0
  72. meshtrade/iam/user/v1/service_pb2_grpc.py +82 -0
  73. meshtrade/{issuance_hub/instrument/v1/instrument_pb2.py → iam/user/v1/user_pb2.py} +7 -7
  74. meshtrade/iam/user/v1/user_pb2.pyi +15 -0
  75. meshtrade/iam/user/v1/user_pb2_grpc.py +4 -0
  76. meshtrade/ledger/transaction/v1/__init__.py +34 -0
  77. meshtrade/ledger/transaction/v1/transaction_action_pb2.py +2 -2
  78. meshtrade/ledger/transaction/v1/transaction_action_pb2_grpc.py +4 -0
  79. meshtrade/ledger/transaction/v1/transaction_state_pb2.py +2 -2
  80. meshtrade/ledger/transaction/v1/transaction_state_pb2_grpc.py +4 -0
  81. meshtrade/option/v1/__init__.py +36 -4
  82. meshtrade/option/v1/{service_type_pb2.py → method_type_pb2.py} +7 -7
  83. meshtrade/option/v1/method_type_pb2.pyi +17 -0
  84. meshtrade/option/v1/method_type_pb2_grpc.py +4 -0
  85. meshtrade/trading/limit_order/v1/__init__.py +47 -1
  86. meshtrade/trading/limit_order/v1/limit_order_pb2.py +2 -2
  87. meshtrade/trading/limit_order/v1/limit_order_pb2_grpc.py +4 -0
  88. meshtrade/trading/limit_order/v1/service_meshpy.py +151 -0
  89. meshtrade/trading/limit_order/v1/service_options_meshpy.py +65 -0
  90. meshtrade/trading/limit_order/v1/service_pb2.py +10 -6
  91. meshtrade/trading/limit_order/v1/service_pb2.pyi +2 -0
  92. meshtrade/trading/limit_order/v1/service_pb2_grpc.py +78 -0
  93. meshtrade/trading/market_order/v1/__init__.py +53 -0
  94. meshtrade/trading/{direct_order/v1/direct_order_pb2.py → market_order/v1/market_order_pb2.py} +7 -7
  95. meshtrade/trading/{spot/v1/spot_pb2.pyi → market_order/v1/market_order_pb2.pyi} +1 -1
  96. meshtrade/trading/market_order/v1/market_order_pb2_grpc.py +4 -0
  97. meshtrade/trading/market_order/v1/service_meshpy.py +151 -0
  98. meshtrade/trading/market_order/v1/service_options_meshpy.py +65 -0
  99. meshtrade/trading/market_order/v1/service_pb2.py +44 -0
  100. meshtrade/trading/{spot → market_order}/v1/service_pb2.pyi +4 -2
  101. meshtrade/trading/market_order/v1/service_pb2_grpc.py +78 -0
  102. meshtrade/type/v1/__init__.py +91 -50
  103. meshtrade/type/v1/address_pb2.py +2 -2
  104. meshtrade/type/v1/address_pb2_grpc.py +4 -0
  105. meshtrade/type/v1/amount.py +2 -8
  106. meshtrade/type/v1/amount_pb2.py +2 -2
  107. meshtrade/type/v1/amount_pb2_grpc.py +4 -0
  108. meshtrade/type/v1/contact_details_pb2.py +2 -2
  109. meshtrade/type/v1/contact_details_pb2_grpc.py +4 -0
  110. meshtrade/type/v1/date.py +263 -91
  111. meshtrade/type/v1/date_pb2.py +2 -2
  112. meshtrade/type/v1/date_pb2_grpc.py +4 -0
  113. meshtrade/type/v1/decimal_built_in_conversions.py +1 -1
  114. meshtrade/type/v1/decimal_pb2.py +2 -2
  115. meshtrade/type/v1/decimal_pb2_grpc.py +4 -0
  116. meshtrade/type/v1/ledger.py +1 -1
  117. meshtrade/type/v1/ledger_pb2.py +2 -2
  118. meshtrade/type/v1/ledger_pb2_grpc.py +4 -0
  119. meshtrade/{trading/spot/v1/spot_pb2.py → type/v1/sorting_pb2.py} +7 -7
  120. meshtrade/type/v1/sorting_pb2.pyi +14 -0
  121. meshtrade/type/v1/sorting_pb2_grpc.py +4 -0
  122. meshtrade/type/v1/time_of_day.py +52 -87
  123. meshtrade/type/v1/time_of_day_pb2.py +2 -2
  124. meshtrade/type/v1/time_of_day_pb2_grpc.py +4 -0
  125. meshtrade/type/v1/token_pb2.py +2 -2
  126. meshtrade/type/v1/token_pb2_grpc.py +4 -0
  127. meshtrade/wallet/account/v1/__init__.py +46 -0
  128. meshtrade/wallet/account/v1/account_pb2.py +2 -2
  129. meshtrade/wallet/account/v1/account_pb2_grpc.py +4 -0
  130. meshtrade/wallet/account/v1/service_meshpy.py +204 -0
  131. meshtrade/wallet/account/v1/service_options_meshpy.py +65 -0
  132. meshtrade/wallet/account/v1/service_pb2.py +18 -18
  133. meshtrade/wallet/account/v1/service_pb2.pyi +2 -2
  134. meshtrade/wallet/account/v1/service_pb2_grpc.py +222 -0
  135. meshtrade-0.0.11.dist-info/METADATA +95 -0
  136. meshtrade-0.0.11.dist-info/RECORD +176 -0
  137. {meshtrade-0.0.8.dist-info → meshtrade-0.0.11.dist-info}/top_level.txt +1 -0
  138. meshtrade/issuance_hub/__init__.py +0 -0
  139. meshtrade/issuance_hub/instrument/__init__.py +0 -0
  140. meshtrade/issuance_hub/instrument/v1/__init__.py +0 -11
  141. meshtrade/issuance_hub/instrument/v1/instrument_pb2.pyi +0 -11
  142. meshtrade/issuance_hub/instrument/v1/service_pb2.py +0 -49
  143. meshtrade/issuance_hub/instrument/v1/service_pb2.pyi +0 -46
  144. meshtrade/option/v1/auth_pb2.py +0 -40
  145. meshtrade/option/v1/service_type_pb2.pyi +0 -17
  146. meshtrade/trading/direct_order/__init__.py +0 -0
  147. meshtrade/trading/direct_order/v1/__init__.py +0 -7
  148. meshtrade/trading/direct_order/v1/direct_order_pb2.pyi +0 -11
  149. meshtrade/trading/direct_order/v1/service_pb2.py +0 -40
  150. meshtrade/trading/direct_order/v1/service_pb2.pyi +0 -12
  151. meshtrade/trading/spot/__init__.py +0 -0
  152. meshtrade/trading/spot/v1/__init__.py +0 -7
  153. meshtrade/trading/spot/v1/service_pb2.py +0 -40
  154. meshtrade-0.0.8.dist-info/METADATA +0 -35
  155. meshtrade-0.0.8.dist-info/RECORD +0 -113
  156. meshtrade-0.0.8.dist-info/licenses/LICENSE +0 -10
  157. {meshtrade-0.0.8.dist-info → meshtrade-0.0.11.dist-info}/WHEEL +0 -0
@@ -9,18 +9,18 @@ from .date_pb2 import Date
9
9
  from .time_of_day_pb2 import TimeOfDay
10
10
 
11
11
 
12
- def new_time_of_day(hours: int, minutes: int, seconds: int = 0, nanos: int = 0) -> TimeOfDay:
12
+ def new_time_of_day(hours: int = 0, minutes: int = 0, seconds: int = 0, nanos: int = 0) -> TimeOfDay:
13
13
  """Creates a new TimeOfDay from hours, minutes, seconds, and nanos values.
14
-
14
+
15
15
  Args:
16
- hours: Hours value (0-24)
17
- minutes: Minutes value (0-59)
18
- seconds: Seconds value (0-60, default 0)
16
+ hours: Hours value (0-23, default 0)
17
+ minutes: Minutes value (0-59, default 0)
18
+ seconds: Seconds value (0-59, default 0)
19
19
  nanos: Nanoseconds value (0-999999999, default 0)
20
-
20
+
21
21
  Returns:
22
22
  A TimeOfDay protobuf message
23
-
23
+
24
24
  Raises:
25
25
  ValueError: If the time values are invalid
26
26
  """
@@ -30,10 +30,10 @@ def new_time_of_day(hours: int, minutes: int, seconds: int = 0, nanos: int = 0)
30
30
 
31
31
  def new_time_of_day_from_python_time(python_time_obj: python_time) -> TimeOfDay:
32
32
  """Creates a TimeOfDay from a Python time object.
33
-
33
+
34
34
  Args:
35
35
  python_time_obj: A Python datetime.time object
36
-
36
+
37
37
  Returns:
38
38
  A TimeOfDay protobuf message
39
39
  """
@@ -41,17 +41,17 @@ def new_time_of_day_from_python_time(python_time_obj: python_time) -> TimeOfDay:
41
41
  hours=python_time_obj.hour,
42
42
  minutes=python_time_obj.minute,
43
43
  seconds=python_time_obj.second,
44
- nanos=python_time_obj.microsecond * 1000 # Convert microseconds to nanoseconds
44
+ nanos=python_time_obj.microsecond * 1000, # Convert microseconds to nanoseconds
45
45
  )
46
46
 
47
47
 
48
48
  def new_time_of_day_from_datetime(datetime_obj: datetime) -> TimeOfDay:
49
49
  """Creates a TimeOfDay from a Python datetime object.
50
50
  Only extracts the time components, ignoring the date.
51
-
51
+
52
52
  Args:
53
53
  datetime_obj: A Python datetime.datetime object
54
-
54
+
55
55
  Returns:
56
56
  A TimeOfDay protobuf message
57
57
  """
@@ -60,13 +60,13 @@ def new_time_of_day_from_datetime(datetime_obj: datetime) -> TimeOfDay:
60
60
 
61
61
  def new_time_of_day_from_timedelta(delta: timedelta) -> TimeOfDay:
62
62
  """Creates a TimeOfDay from a timedelta representing time since midnight.
63
-
63
+
64
64
  Args:
65
65
  delta: A timedelta object representing time elapsed since midnight
66
-
66
+
67
67
  Returns:
68
68
  A TimeOfDay protobuf message
69
-
69
+
70
70
  Raises:
71
71
  ValueError: If the timedelta is negative or >= 24 hours
72
72
  """
@@ -88,39 +88,36 @@ def new_time_of_day_from_timedelta(delta: timedelta) -> TimeOfDay:
88
88
 
89
89
  def time_of_day_to_python_time(time_obj: TimeOfDay) -> python_time:
90
90
  """Converts a TimeOfDay protobuf message to a Python time object.
91
-
91
+
92
92
  Args:
93
93
  time_obj: A TimeOfDay protobuf message
94
-
94
+
95
95
  Returns:
96
96
  A Python datetime.time object
97
-
97
+
98
98
  Raises:
99
99
  ValueError: If the time is invalid or represents end of day (24:00:00)
100
100
  """
101
101
  if not time_obj:
102
102
  raise ValueError("TimeOfDay object is None")
103
103
 
104
- if time_obj.hours == 24:
105
- raise ValueError("Cannot convert 24:00:00 to Python time object")
106
-
107
104
  try:
108
105
  return python_time(
109
106
  hour=time_obj.hours,
110
107
  minute=time_obj.minutes,
111
108
  second=time_obj.seconds,
112
- microsecond=time_obj.nanos // 1000 # Convert nanoseconds to microseconds
109
+ microsecond=time_obj.nanos // 1000, # Convert nanoseconds to microseconds
113
110
  )
114
111
  except ValueError as e:
115
- raise ValueError(f"Invalid time values: {e}")
112
+ raise ValueError(f"Invalid time values: {e}") from e
116
113
 
117
114
 
118
115
  def time_of_day_to_timedelta(time_obj: TimeOfDay) -> timedelta:
119
116
  """Converts a TimeOfDay to a timedelta representing time since midnight.
120
-
117
+
121
118
  Args:
122
119
  time_obj: A TimeOfDay protobuf message
123
-
120
+
124
121
  Returns:
125
122
  A timedelta object representing time elapsed since midnight
126
123
  """
@@ -131,20 +128,20 @@ def time_of_day_to_timedelta(time_obj: TimeOfDay) -> timedelta:
131
128
  hours=time_obj.hours,
132
129
  minutes=time_obj.minutes,
133
130
  seconds=time_obj.seconds,
134
- microseconds=time_obj.nanos // 1000 # Convert nanoseconds to microseconds
131
+ microseconds=time_obj.nanos // 1000, # Convert nanoseconds to microseconds
135
132
  )
136
133
 
137
134
 
138
135
  def time_of_day_to_datetime_with_date(time_obj: TimeOfDay, date_obj: Date) -> datetime:
139
136
  """Combines a TimeOfDay with a Date to create a datetime object.
140
-
137
+
141
138
  Args:
142
139
  time_obj: A TimeOfDay protobuf message
143
140
  date_obj: A Date protobuf message
144
-
141
+
145
142
  Returns:
146
143
  A Python datetime.datetime object
147
-
144
+
148
145
  Raises:
149
146
  ValueError: If either object is None/invalid or if date is incomplete
150
147
  """
@@ -154,24 +151,11 @@ def time_of_day_to_datetime_with_date(time_obj: TimeOfDay, date_obj: Date) -> da
154
151
  raise ValueError("Date object is None")
155
152
 
156
153
  # Import here to avoid circular imports
157
- from .date import is_complete
154
+ from .date import date_is_complete
158
155
 
159
- if not is_complete(date_obj):
156
+ if not date_is_complete(date_obj):
160
157
  raise ValueError("Date must be complete")
161
158
 
162
- if time_obj.hours == 24:
163
- # Handle end of day by adding a day and setting time to midnight
164
- base_datetime = datetime(
165
- year=date_obj.year,
166
- month=date_obj.month,
167
- day=date_obj.day,
168
- hour=0,
169
- minute=0,
170
- second=0,
171
- microsecond=0
172
- )
173
- return base_datetime + timedelta(days=1)
174
-
175
159
  try:
176
160
  return datetime(
177
161
  year=date_obj.year,
@@ -180,18 +164,18 @@ def time_of_day_to_datetime_with_date(time_obj: TimeOfDay, date_obj: Date) -> da
180
164
  hour=time_obj.hours,
181
165
  minute=time_obj.minutes,
182
166
  second=time_obj.seconds,
183
- microsecond=time_obj.nanos // 1000 # Convert nanoseconds to microseconds
167
+ microsecond=time_obj.nanos // 1000, # Convert nanoseconds to microseconds
184
168
  )
185
169
  except ValueError as e:
186
- raise ValueError(f"Invalid datetime values: {e}")
170
+ raise ValueError(f"Invalid datetime values: {e}") from e
187
171
 
188
172
 
189
- def is_valid(time_obj: TimeOfDay | None) -> bool:
173
+ def time_of_day_is_valid(time_obj: TimeOfDay | None) -> bool:
190
174
  """Checks if a TimeOfDay has valid values according to the protobuf constraints.
191
-
175
+
192
176
  Args:
193
177
  time_obj: A TimeOfDay protobuf message or None
194
-
178
+
195
179
  Returns:
196
180
  True if the time is valid, False otherwise
197
181
  """
@@ -205,47 +189,31 @@ def is_valid(time_obj: TimeOfDay | None) -> bool:
205
189
  return False
206
190
 
207
191
 
208
- def is_midnight(time_obj: TimeOfDay | None) -> bool:
192
+ def time_of_day_is_midnight(time_obj: TimeOfDay | None) -> bool:
209
193
  """Returns True if the time represents midnight (00:00:00.000000000).
210
-
211
- Args:
212
- time_obj: A TimeOfDay protobuf message or None
213
-
214
- Returns:
215
- True if the time is midnight, False otherwise
216
- """
217
- if not time_obj:
218
- return False
219
- return (time_obj.hours == 0 and time_obj.minutes == 0 and
220
- time_obj.seconds == 0 and time_obj.nanos == 0)
221
-
222
194
 
223
- def is_end_of_day(time_obj: TimeOfDay | None) -> bool:
224
- """Returns True if the time represents 24:00:00 (end of day).
225
-
226
195
  Args:
227
196
  time_obj: A TimeOfDay protobuf message or None
228
-
197
+
229
198
  Returns:
230
- True if the time is end of day, False otherwise
199
+ True if the time is midnight, False otherwise
231
200
  """
232
201
  if not time_obj:
233
202
  return False
234
- return (time_obj.hours == 24 and time_obj.minutes == 0 and
235
- time_obj.seconds == 0 and time_obj.nanos == 0)
203
+ return time_obj.hours == 0 and time_obj.minutes == 0 and time_obj.seconds == 0 and time_obj.nanos == 0
236
204
 
237
205
 
238
206
  def time_of_day_to_string(time_obj: TimeOfDay | None) -> str:
239
207
  """Returns a string representation of the time in HH:MM:SS.nnnnnnnnn format.
240
-
208
+
241
209
  Args:
242
210
  time_obj: A TimeOfDay protobuf message or None
243
-
211
+
244
212
  Returns:
245
213
  String representation of the time
246
214
  """
247
215
  if not time_obj:
248
- return "<None>"
216
+ return "<undefined>"
249
217
 
250
218
  if time_obj.nanos == 0:
251
219
  return f"{time_obj.hours:02d}:{time_obj.minutes:02d}:{time_obj.seconds:02d}"
@@ -253,47 +221,44 @@ def time_of_day_to_string(time_obj: TimeOfDay | None) -> str:
253
221
  return f"{time_obj.hours:02d}:{time_obj.minutes:02d}:{time_obj.seconds:02d}.{time_obj.nanos:09d}"
254
222
 
255
223
 
256
- def total_seconds(time_obj: TimeOfDay | None) -> float:
224
+ def time_of_day_total_seconds(time_obj: TimeOfDay | None) -> float:
257
225
  """Returns the total number of seconds since midnight as a float.
258
-
226
+
259
227
  Args:
260
228
  time_obj: A TimeOfDay protobuf message or None
261
-
229
+
262
230
  Returns:
263
231
  Total seconds since midnight
264
232
  """
265
233
  if not time_obj:
266
234
  return 0.0
267
235
 
268
- return (time_obj.hours * 3600 + time_obj.minutes * 60 +
269
- time_obj.seconds + time_obj.nanos / 1e9)
236
+ return time_obj.hours * 3600 + time_obj.minutes * 60 + time_obj.seconds + time_obj.nanos / 1e9
270
237
 
271
238
 
272
239
  def _validate_time_of_day(hours: int, minutes: int, seconds: int, nanos: int) -> None:
273
240
  """Validates the hours, minutes, seconds, and nanos values according to TimeOfDay constraints.
274
-
241
+
275
242
  Args:
276
243
  hours: Hours value
277
244
  minutes: Minutes value
278
245
  seconds: Seconds value
279
246
  nanos: Nanoseconds value
280
-
247
+
281
248
  Raises:
282
249
  ValueError: If the time values are invalid
283
250
  """
284
- # Hours validation (0-23, or 24 for end of day scenarios)
285
- if hours < 0 or hours > 24:
286
- raise ValueError(f"Hours must be between 0 and 24, got {hours}")
287
- if hours == 24 and (minutes != 0 or seconds != 0 or nanos != 0):
288
- raise ValueError("When hours is 24, minutes, seconds, and nanos must be 0")
251
+ # Hours validation
252
+ if hours < 0 or hours > 23:
253
+ raise ValueError(f"Hours must be between 0 and 23, got {hours}")
289
254
 
290
255
  # Minutes validation
291
256
  if minutes < 0 or minutes > 59:
292
257
  raise ValueError(f"Minutes must be between 0 and 59, got {minutes}")
293
258
 
294
- # Seconds validation (0-59, or 60 for leap seconds if allowed)
295
- if seconds < 0 or seconds > 60:
296
- raise ValueError(f"Seconds must be between 0 and 60, got {seconds}")
259
+ # Seconds validation
260
+ if seconds < 0 or seconds > 59:
261
+ raise ValueError(f"Seconds must be between 0 and 59, got {seconds}")
297
262
 
298
263
  # Nanos validation
299
264
  if nanos < 0 or nanos > 999999999:
@@ -24,14 +24,14 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
26
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtrade/type/v1/time_of_day.proto\x12\x11meshtrade.type.v1\"k\n\tTimeOfDay\x12\x14\n\x05hours\x18\x01 \x01(\x05R\x05hours\x12\x18\n\x07minutes\x18\x02 \x01(\x05R\x07minutes\x12\x18\n\x07seconds\x18\x03 \x01(\x05R\x07seconds\x12\x14\n\x05nanos\x18\x04 \x01(\x05R\x05nanosB,Z*github.com/meshtrade/api/go/type/v1;typev1b\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtrade/type/v1/time_of_day.proto\x12\x11meshtrade.type.v1\"k\n\tTimeOfDay\x12\x14\n\x05hours\x18\x01 \x01(\x05R\x05hours\x12\x18\n\x07minutes\x18\x02 \x01(\x05R\x07minutes\x12\x18\n\x07seconds\x18\x03 \x01(\x05R\x07seconds\x12\x14\n\x05nanos\x18\x04 \x01(\x05R\x05nanosBF\n\x18\x63o.meshtrade.api.type.v1Z*github.com/meshtrade/api/go/type/v1;typev1b\x06proto3')
28
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtrade.type.v1.time_of_day_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'Z*github.com/meshtrade/api/go/type/v1;typev1'
34
+ _globals['DESCRIPTOR']._serialized_options = b'\n\030co.meshtrade.api.type.v1Z*github.com/meshtrade/api/go/type/v1;typev1'
35
35
  _globals['_TIMEOFDAY']._serialized_start=58
36
36
  _globals['_TIMEOFDAY']._serialized_end=165
37
37
  # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,4 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
@@ -25,14 +25,14 @@ _sym_db = _symbol_database.Default()
25
25
  from meshtrade.type.v1 import ledger_pb2 as meshtrade_dot_type_dot_v1_dot_ledger__pb2
26
26
 
27
27
 
28
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dmeshtrade/type/v1/token.proto\x12\x11meshtrade.type.v1\x1a\x1emeshtrade/type/v1/ledger.proto\"f\n\x05Token\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x16\n\x06issuer\x18\x02 \x01(\tR\x06issuer\x12\x31\n\x06ledger\x18\x03 \x01(\x0e\x32\x19.meshtrade.type.v1.LedgerR\x06ledgerB,Z*github.com/meshtrade/api/go/type/v1;typev1b\x06proto3')
28
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dmeshtrade/type/v1/token.proto\x12\x11meshtrade.type.v1\x1a\x1emeshtrade/type/v1/ledger.proto\"f\n\x05Token\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x16\n\x06issuer\x18\x02 \x01(\tR\x06issuer\x12\x31\n\x06ledger\x18\x03 \x01(\x0e\x32\x19.meshtrade.type.v1.LedgerR\x06ledgerBF\n\x18\x63o.meshtrade.api.type.v1Z*github.com/meshtrade/api/go/type/v1;typev1b\x06proto3')
29
29
 
30
30
  _globals = globals()
31
31
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
32
32
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtrade.type.v1.token_pb2', _globals)
33
33
  if not _descriptor._USE_C_DESCRIPTORS:
34
34
  _globals['DESCRIPTOR']._loaded_options = None
35
- _globals['DESCRIPTOR']._serialized_options = b'Z*github.com/meshtrade/api/go/type/v1;typev1'
35
+ _globals['DESCRIPTOR']._serialized_options = b'\n\030co.meshtrade.api.type.v1Z*github.com/meshtrade/api/go/type/v1;typev1'
36
36
  _globals['_TOKEN']._serialized_start=84
37
37
  _globals['_TOKEN']._serialized_end=186
38
38
  # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,4 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
@@ -1,3 +1,18 @@
1
+ """Account v1 package."""
2
+
3
+ # ===================================================================
4
+ # AUTO-GENERATED SECTION - ONLY EDIT BELOW THE CLOSING COMMENT BLOCK
5
+ # ===================================================================
6
+ # This section is automatically managed by protoc-gen-meshpy.
7
+ #
8
+ # DO NOT EDIT ANYTHING IN THIS SECTION MANUALLY!
9
+ # Your changes will be overwritten during code generation.
10
+ #
11
+ # To add custom imports and exports, scroll down to the
12
+ # "MANUAL SECTION" indicated below.
13
+ # ===================================================================
14
+
15
+ # Generated protobuf imports
1
16
  from .account_pb2 import Account
2
17
  from .service_pb2 import (
3
18
  CreateAccountRequest,
@@ -8,8 +23,39 @@ from .service_pb2 import (
8
23
  SearchAccountsResponse,
9
24
  )
10
25
 
26
+ # Generated service imports
27
+ from .service_meshpy import (
28
+ AccountService,
29
+ AccountServiceGRPCClient,
30
+ AccountServiceGRPCClientInterface,
31
+ )
32
+ from .service_options_meshpy import ClientOptions
33
+
34
+ # ===================================================================
35
+ # END OF AUTO-GENERATED SECTION
36
+ # ===================================================================
37
+ #
38
+ # MANUAL SECTION - ADD YOUR CUSTOM IMPORTS AND EXPORTS BELOW
39
+ #
40
+ # You can safely add your own imports, functions, classes, and exports
41
+ # in this section. They will be preserved across code generation.
42
+ #
43
+ # Example:
44
+ # from my_custom_module import my_function
45
+ #
46
+ # ===================================================================
47
+
48
+ # ===================================================================
49
+ # MODULE EXPORTS
50
+ # ===================================================================
51
+ # Combined auto-generated and manual exports
11
52
  __all__ = [
53
+ # Generated exports
12
54
  "Account",
55
+ "AccountService",
56
+ "AccountServiceGRPCClient",
57
+ "AccountServiceGRPCClientInterface",
58
+ "ClientOptions",
13
59
  "CreateAccountRequest",
14
60
  "GetAccountRequest",
15
61
  "ListAccountsRequest",
@@ -24,14 +24,14 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
26
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)meshtrade/wallet/account/v1/account.proto\x12\x1bmeshtrade.wallet.account.v1\"\x1d\n\x07\x41\x63\x63ount\x12\x12\n\x04name\x18\x01 \x01(\tR\x04nameB9Z7github.com/meshtrade/api/go/wallet/account/v1;accountv1b\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)meshtrade/wallet/account/v1/account.proto\x12\x1bmeshtrade.wallet.account.v1\"\x1d\n\x07\x41\x63\x63ount\x12\x12\n\x04name\x18\x01 \x01(\tR\x04nameB]\n\"co.meshtrade.api.wallet.account.v1Z7github.com/meshtrade/api/go/wallet/account/v1;accountv1b\x06proto3')
28
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtrade.wallet.account.v1.account_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'Z7github.com/meshtrade/api/go/wallet/account/v1;accountv1'
34
+ _globals['DESCRIPTOR']._serialized_options = b'\n\"co.meshtrade.api.wallet.account.v1Z7github.com/meshtrade/api/go/wallet/account/v1;accountv1'
35
35
  _globals['_ACCOUNT']._serialized_start=74
36
36
  _globals['_ACCOUNT']._serialized_end=103
37
37
  # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,4 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
@@ -0,0 +1,204 @@
1
+ # Code generated by protoc-gen-meshpy. DO NOT EDIT.
2
+ # source: meshtrade/wallet/account/v1/service.proto
3
+
4
+ """
5
+ AccountService gRPC service wrapper with authentication, timeouts, and resource management.
6
+
7
+ This module provides a high-level gRPC service for the AccountService service that combines
8
+ the service interface with resource management capabilities, providing authentication,
9
+ timeouts, and proper connection handling.
10
+ """
11
+
12
+ from datetime import timedelta
13
+ from typing import Optional
14
+
15
+ from meshtrade.common import BaseGRPCClient
16
+ from meshtrade.iam.api_user.v1.api_credentials import find_credentials
17
+
18
+ from .account_pb2 import Account
19
+ from .service_options_meshpy import ServiceOptions
20
+ from .service_pb2 import (
21
+ CreateAccountRequest,
22
+ GetAccountRequest,
23
+ ListAccountsRequest,
24
+ ListAccountsResponse,
25
+ SearchAccountsRequest,
26
+ SearchAccountsResponse,
27
+ )
28
+ from .service_pb2_grpc import AccountServiceStub
29
+
30
+
31
+ def _create_accountservice_stub(channel):
32
+ """Factory function to create AccountServiceStub from gRPC channel."""
33
+ return AccountServiceStub(channel)
34
+
35
+
36
+ class AccountService(BaseGRPCClient):
37
+ """AccountService gRPC service with authentication, timeouts, and resource management.
38
+
39
+ This service provides a complete implementation of the AccountService with proper authentication, timeout handling, and automatic resource cleanup.
40
+
41
+ Full Service documentation: https://meshtrade.github.io/api/docs/api-reference/wallet/account/v1
42
+
43
+ Basic service usage with default SDK Configuration:
44
+ ```python
45
+ service = AccountService()
46
+
47
+ with service: # `with` ensures proper clean up of underlying connection after use
48
+ response = service.get_api_user(request)
49
+ ```
50
+
51
+ With default configuration API credentials are searched for using the standard discovery hierarchy:
52
+
53
+ 1. MESH_API_CREDENTIALS environment variable
54
+
55
+ 2. Default credential file location:
56
+
57
+ - Linux: `$XDG_CONFIG_HOME/mesh/credentials.json` or fallback to `$HOME/.config/mesh/credentials.json`
58
+ - macOS: `$HOME/Library/Application Support/mesh/credentials.json`
59
+ - Windows: `C:\\Users\\<user>\\AppData\\Roaming\\mesh\\credentials.json`
60
+
61
+ For more information on authentication: https://meshtrade.github.io/api/docs/architecture/authentication
62
+
63
+ The service may also be configured with custom options:
64
+ ```python
65
+ from .service_options_meshpy import ServiceOptions
66
+ from datetime import timedelta
67
+
68
+ options = ServiceOptions(
69
+ url="api.staging.example.com",
70
+ port=443,
71
+ api_key="your-api-key",
72
+ group="groups/your-group-id",
73
+ timeout=timedelta(seconds=60)
74
+ )
75
+
76
+ service = AccountService(options)
77
+
78
+ with service: # `with` ensures proper clean up of underlying connection after use
79
+ response = service.get_api_user(request)
80
+ ```
81
+
82
+ For more information on service configuration: https://meshtrade.github.io/api/docs/architecture/sdk-configuration
83
+ """
84
+
85
+ def __init__(self, options: Optional[ServiceOptions] = None):
86
+ """Construct and initialize the AccountService service.
87
+
88
+ Full Service documentation: https://meshtrade.github.io/api/docs/api-reference/wallet/account/v1
89
+
90
+ Args:
91
+ options: Optional ServiceOptions for configuring the service.
92
+ If None, service is constructed with default configuration.
93
+ With default configuration API credentials are searched for using the standard discovery hierarchy:
94
+
95
+ 1. MESH_API_CREDENTIALS environment variable
96
+
97
+ 2. Default credential file location:
98
+
99
+ - Linux: `$XDG_CONFIG_HOME/mesh/credentials.json` or fallback to `$HOME/.config/mesh/credentials.json`
100
+ - macOS: `$HOME/Library/Application Support/mesh/credentials.json`
101
+ - Windows: `C:\\Users\\<user>\\AppData\\Roaming\\mesh\\credentials.json`
102
+
103
+ For more information on authentication: https://meshtrade.github.io/api/docs/architecture/authentication
104
+
105
+ For more information on service configuration: https://meshtrade.github.io/api/docs/architecture/sdk-configuration
106
+
107
+ Example:
108
+ ```python
109
+ # construct with default configuration
110
+ service = AccountService()
111
+
112
+ # construct with custom configuration
113
+ options = ServiceOptions(
114
+ url="api.example.com",
115
+ api_key="your-key",
116
+ group="groups/your-group"
117
+ )
118
+ service = AccountService(options)
119
+ ```
120
+ """
121
+ if options is None:
122
+ options = ServiceOptions()
123
+
124
+ # Initialize the base client with all common functionality
125
+ super().__init__(
126
+ service_name="AccountService",
127
+ stub_factory=_create_accountservice_stub,
128
+ find_credentials_func=find_credentials,
129
+ url=options.url,
130
+ port=options.port,
131
+ api_key=options.api_key,
132
+ group=options.group,
133
+ timeout=options.timeout,
134
+ tls=options.tls,
135
+ )
136
+
137
+ def create_account(self, request: CreateAccountRequest, timeout: Optional[timedelta] = None) -> Account:
138
+ """CreateAccount method.
139
+
140
+ Args:
141
+ request: The CreateAccount request message
142
+ timeout: Optional timeout override for this call
143
+
144
+ Returns:
145
+ The CreateAccount response message
146
+
147
+ Raises:
148
+ grpc.RpcError: If the gRPC call fails
149
+ ValueError: If authentication credentials are missing
150
+ """
151
+ return self._execute_method("CreateAccount", request, timeout)
152
+
153
+ def get_account(self, request: GetAccountRequest, timeout: Optional[timedelta] = None) -> Account:
154
+ """GetAccount method.
155
+
156
+ Args:
157
+ request: The GetAccount request message
158
+ timeout: Optional timeout override for this call
159
+
160
+ Returns:
161
+ The GetAccount response message
162
+
163
+ Raises:
164
+ grpc.RpcError: If the gRPC call fails
165
+ ValueError: If authentication credentials are missing
166
+ """
167
+ return self._execute_method("GetAccount", request, timeout)
168
+
169
+ def list_accounts(self, request: ListAccountsRequest, timeout: Optional[timedelta] = None) -> ListAccountsResponse:
170
+ """ListAccounts method.
171
+
172
+ Args:
173
+ request: The ListAccounts request message
174
+ timeout: Optional timeout override for this call
175
+
176
+ Returns:
177
+ The ListAccounts response message
178
+
179
+ Raises:
180
+ grpc.RpcError: If the gRPC call fails
181
+ ValueError: If authentication credentials are missing
182
+ """
183
+ return self._execute_method("ListAccounts", request, timeout)
184
+
185
+ def search_accounts(self, request: SearchAccountsRequest, timeout: Optional[timedelta] = None) -> SearchAccountsResponse:
186
+ """SearchAccounts method.
187
+
188
+ Args:
189
+ request: The SearchAccounts request message
190
+ timeout: Optional timeout override for this call
191
+
192
+ Returns:
193
+ The SearchAccounts response message
194
+
195
+ Raises:
196
+ grpc.RpcError: If the gRPC call fails
197
+ ValueError: If authentication credentials are missing
198
+ """
199
+ return self._execute_method("SearchAccounts", request, timeout)
200
+
201
+
202
+ # Create aliases to match expected exports
203
+ AccountServiceGRPCClient = AccountService
204
+ AccountServiceGRPCClientInterface = AccountService