FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
feast/sdk/python/feast/errors.py at v0.63.0 · feast-dev/feast · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
feast-dev
/
feast
Public
Notifications
You must be signed in to change notification settings
Fork
1.4k
Star
7.2k
Code
Issues
215
Pull requests
190
Discussions
Actions
Security and quality
1
Insights
Additional navigation options
Code
Issues
Pull requests
Discussions
Actions
Security and quality
Insights
Expand file tree
Breadcrumbs
feast
/
sdk
/
python
/
feast
/
errors.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
578 lines (420 loc) · 19.8 KB
Breadcrumbs
feast
/
sdk
/
python
/
feast
/
errors.py
Copy path
File metadata and controls
578 lines (420 loc) · 19.8 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
import
importlib
import
json
import
logging
from
typing
import
TYPE_CHECKING
,
Any
,
List
,
Optional
,
Set
from
colorama
import
Fore
,
Style
from
fastapi
import
status
as
HttpStatusCode
if
TYPE_CHECKING
:
from
grpc
import
StatusCode
as
GrpcStatusCode
from
feast
.
field
import
Field
logger
=
logging
.
getLogger
(
__name__
)
class
FeastError
(
Exception
):
pass
def
grpc_status_code
(
self
)
->
"GrpcStatusCode"
:
from
grpc
import
StatusCode
as
GrpcStatusCode
return
GrpcStatusCode
.
INTERNAL
def
http_status_code
(
self
)
->
int
:
return
HttpStatusCode
.
HTTP_500_INTERNAL_SERVER_ERROR
def
__str__
(
self
)
->
str
:
if
hasattr
(
self
,
"__overridden_message__"
):
return
str
(
getattr
(
self
,
"__overridden_message__"
))
return
super
().
__str__
()
def
__repr__
(
self
)
->
str
:
if
hasattr
(
self
,
"__overridden_message__"
):
return
f"
{
type
(
self
).
__name__
}
('
{
getattr
(
self
,
'__overridden_message__'
)
}
')"
return
super
().
__repr__
()
def
to_error_detail
(
self
)
->
str
:
"""
Returns a JSON representation of the error for serialization purposes.
Returns:
str: a string representation of a JSON document including `module`, `class` and `message` fields.
"""
m
=
{
"module"
:
f"
{
type
(
self
).
__module__
}
"
,
"class"
:
f"
{
type
(
self
).
__name__
}
"
,
"message"
:
f"
{
str
(
self
)
}
"
,
}
return
json
.
dumps
(
m
)
@
staticmethod
def
from_error_detail
(
detail
:
str
)
->
Optional
[
"FeastError"
]:
try
:
m
=
json
.
loads
(
detail
)
if
all
(
f
in
m
for
f
in
[
"module"
,
"class"
,
"message"
]):
module_name
=
m
[
"module"
]
class_name
=
m
[
"class"
]
message
=
m
[
"message"
]
module
=
importlib
.
import_module
(
module_name
)
class_reference
=
getattr
(
module
,
class_name
)
instance
=
class_reference
.
__new__
(
class_reference
)
setattr
(
instance
,
"__overridden_message__"
,
message
)
return
instance
except
Exception
as
e
:
logger
.
warning
(
f"Invalid error detail:
{
detail
}
:
{
e
}
"
)
return
None
class
DataSourceNotFoundException
(
FeastError
):
def
__init__
(
self
,
path
):
super
().
__init__
(
f"Unable to find table at '
{
path
}
'. Please check that table exists."
)
class
DataSourceNoNameException
(
FeastError
):
def
__init__
(
self
):
super
().
__init__
(
"Unable to infer a name for this data source. Either table or name must be specified."
)
class
DataSourceRepeatNamesException
(
FeastError
):
def
__init__
(
self
,
ds_name
:
str
):
super
().
__init__
(
f"Multiple data sources share the same case-insensitive name
{
ds_name
}
."
)
class
FeastObjectNotFoundException
(
FeastError
):
pass
def
grpc_status_code
(
self
)
->
"GrpcStatusCode"
:
from
grpc
import
StatusCode
as
GrpcStatusCode
return
GrpcStatusCode
.
NOT_FOUND
def
http_status_code
(
self
)
->
int
:
return
HttpStatusCode
.
HTTP_404_NOT_FOUND
class
EntityNotFoundException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
,
project
=
None
):
if
project
:
super
().
__init__
(
f"Entity
{
name
}
does not exist in project
{
project
}
"
)
else
:
super
().
__init__
(
f"Entity
{
name
}
does not exist"
)
class
FeatureServiceNotFoundException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
,
project
=
None
):
if
project
:
super
().
__init__
(
f"Feature service
{
name
}
does not exist in project
{
project
}
"
)
else
:
super
().
__init__
(
f"Feature service
{
name
}
does not exist"
)
class
FeatureViewNotFoundException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
,
project
=
None
):
if
project
:
super
().
__init__
(
f"Feature view
{
name
}
does not exist in project
{
project
}
"
)
else
:
super
().
__init__
(
f"Feature view
{
name
}
does not exist"
)
class
FeatureViewVersionNotFound
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
,
version
,
project
=
None
):
if
project
:
super
().
__init__
(
f"Version
{
version
}
of feature view
{
name
}
does not exist in project
{
project
}
"
)
else
:
super
().
__init__
(
f"Version
{
version
}
of feature view
{
name
}
does not exist"
)
class
VersionedOnlineReadNotSupported
(
FeastError
):
def
__init__
(
self
,
store_name
:
str
,
version
:
int
):
super
().
__init__
(
f"Versioned feature reads (@v
{
version
}
) are not yet supported by
{
store_name
}
. "
f"Currently only SQLite, PostgreSQL, MySQL, FAISS, Redis, and DynamoDB support version-qualified feature references. "
)
class
FeatureViewPinConflict
(
FeastError
):
def
__init__
(
self
,
name
,
version
):
super
().
__init__
(
f"Cannot pin feature view '
{
name
}
' to
{
version
}
because the definition has also been modified. "
f"To pin to an older version, only change the 'version' parameter — do not modify other fields. "
f"To apply a new definition, use version='latest' or omit the version parameter."
)
class
ConcurrentVersionConflict
(
FeastError
):
def
__init__
(
self
,
msg
:
str
):
super
().
__init__
(
msg
)
class
OnDemandFeatureViewNotFoundException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
,
project
=
None
):
if
project
:
super
().
__init__
(
f"On demand feature view
{
name
}
does not exist in project
{
project
}
"
)
else
:
super
().
__init__
(
f"On demand feature view
{
name
}
does not exist"
)
class
RequestDataNotFoundInEntityDfException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
feature_name
,
feature_view_name
):
super
().
__init__
(
f"Feature
{
feature_name
}
not found in the entity dataframe, but required by feature view
{
feature_view_name
}
"
)
class
RequestDataNotFoundInEntityRowsException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
feature_names
):
super
().
__init__
(
f"Required request data source features
{
feature_names
}
not found in the entity rows, but required by feature views"
)
class
DataSourceObjectNotFoundException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
,
project
=
None
):
if
project
:
super
().
__init__
(
f"Data source
{
name
}
does not exist in project
{
project
}
"
)
else
:
super
().
__init__
(
f"Data source
{
name
}
does not exist"
)
class
S3RegistryBucketNotExist
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
bucket
):
super
().
__init__
(
f"S3 bucket
{
bucket
}
for the Feast registry does not exist"
)
class
S3RegistryBucketForbiddenAccess
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
bucket
):
super
().
__init__
(
f"S3 bucket
{
bucket
}
for the Feast registry can't be accessed"
)
class
SavedDatasetNotFound
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
:
str
,
project
:
str
):
super
().
__init__
(
f"Saved dataset
{
name
}
does not exist in project
{
project
}
"
)
class
ValidationReferenceNotFound
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
:
str
,
project
:
str
):
super
().
__init__
(
f"Validation reference
{
name
}
does not exist in project
{
project
}
"
)
class
FeastProviderLoginError
(
FeastError
):
"""Error class that indicates a user has not authenticated with their provider."""
class
FeastProviderNotImplementedError
(
FeastError
):
def
__init__
(
self
,
provider_name
):
super
().
__init__
(
f"Provider '
{
provider_name
}
' is not implemented"
)
class
FeastRegistryNotSetError
(
FeastError
):
def
__init__
(
self
):
super
().
__init__
(
"Registry is not set, but is required"
)
class
FeastFeatureServerTypeInvalidError
(
FeastError
):
def
__init__
(
self
,
feature_server_type
:
str
):
super
().
__init__
(
f"Feature server type was set to
{
feature_server_type
}
, but this type is invalid"
)
class
FeastRegistryTypeInvalidError
(
FeastError
):
def
__init__
(
self
,
registry_type
:
str
):
super
().
__init__
(
f"Feature server type was set to
{
registry_type
}
, but this type is invalid"
)
class
FeastModuleImportError
(
FeastError
):
def
__init__
(
self
,
module_name
:
str
,
class_name
:
str
):
super
().
__init__
(
f"Could not import module '
{
module_name
}
' while attempting to load class '
{
class_name
}
'"
)
class
FeastClassImportError
(
FeastError
):
def
__init__
(
self
,
module_name
:
str
,
class_name
:
str
):
super
().
__init__
(
f"Could not import class '
{
class_name
}
' from module '
{
module_name
}
'"
)
class
FeastExtrasDependencyImportError
(
FeastError
):
def
__init__
(
self
,
extras_type
:
str
,
nested_error
:
str
):
message
=
(
nested_error
+
"
\n
"
+
f"You may need run
{
Style
.
BRIGHT
+
Fore
.
GREEN
}
pip install 'feast[
{
extras_type
}
]'
{
Style
.
RESET_ALL
}
"
)
super
().
__init__
(
message
)
class
FeastOfflineStoreUnsupportedDataSource
(
FeastError
):
def
__init__
(
self
,
offline_store_name
:
str
,
data_source_name
:
str
):
super
().
__init__
(
f"Offline Store '
{
offline_store_name
}
' does not support data source '
{
data_source_name
}
'"
)
class
FeatureNameCollisionError
(
FeastError
):
def
__init__
(
self
,
feature_refs_collisions
:
List
[
str
],
full_feature_names
:
bool
):
if
full_feature_names
:
collisions
=
[
ref
.
replace
(
":"
,
"__"
)
for
ref
in
feature_refs_collisions
]
error_message
=
(
"To resolve this collision, please ensure that the feature views or their own features "
"have different names. If you're intentionally joining the same feature view twice on "
"different sets of entities, please rename one of the feature views with '.with_name'."
)
else
:
collisions
=
[
ref
.
split
(
":"
)[
1
]
for
ref
in
feature_refs_collisions
]
error_message
=
(
"To resolve this collision, either use the full feature name by setting "
"'full_feature_names=True', or ensure that the features in question have different names."
)
feature_names
=
", "
.
join
(
set
(
collisions
))
super
().
__init__
(
f"Duplicate features named
{
feature_names
}
found.
\n
{
error_message
}
"
)
class
SpecifiedFeaturesNotPresentError
(
FeastError
):
def
__init__
(
self
,
specified_features
:
List
[
Field
],
inferred_features
:
List
[
Field
],
feature_view_name
:
str
,
):
super
().
__init__
(
f"Explicitly specified features
{
specified_features
}
not found in inferred list of features "
f"
{
inferred_features
}
for '
{
feature_view_name
}
'"
)
class
SavedDatasetLocationAlreadyExists
(
FeastError
):
def
__init__
(
self
,
location
:
str
):
super
().
__init__
(
f"Saved dataset location
{
location
}
already exists."
)
class
FeastOfflineStoreInvalidName
(
FeastError
):
def
__init__
(
self
,
offline_store_class_name
:
str
):
super
().
__init__
(
f"Offline Store Class '
{
offline_store_class_name
}
' should end with the string `OfflineStore`.'"
)
class
FeastOnlineStoreInvalidName
(
FeastError
):
def
__init__
(
self
,
online_store_class_name
:
str
):
super
().
__init__
(
f"Online Store Class '
{
online_store_class_name
}
' should end with the string `OnlineStore`.'"
)
class
FeastInvalidAuthConfigClass
(
FeastError
):
def
__init__
(
self
,
auth_config_class_name
:
str
):
super
().
__init__
(
f"Auth Config Class '
{
auth_config_class_name
}
' should end with the string `AuthConfig`.'"
)
class
FeastInvalidBaseClass
(
FeastError
):
def
__init__
(
self
,
class_name
:
str
,
class_type
:
str
):
super
().
__init__
(
f"Class '
{
class_name
}
' should have `
{
class_type
}
` as a base class."
)
class
FeastOnlineStoreUnsupportedDataSource
(
FeastError
):
def
__init__
(
self
,
online_store_name
:
str
,
data_source_name
:
str
):
super
().
__init__
(
f"Online Store '
{
online_store_name
}
' does not support data source '
{
data_source_name
}
'"
)
class
FeastEntityDFMissingColumnsError
(
FeastError
):
def
__init__
(
self
,
expected
,
missing
):
super
().
__init__
(
f"The entity dataframe you have provided must contain columns
{
expected
}
, "
f"but
{
missing
}
were missing."
)
class
FeastJoinKeysDuringMaterialization
(
FeastError
):
def
__init__
(
self
,
source
:
str
,
join_key_columns
:
Set
[
str
],
source_columns
:
Set
[
str
]
):
super
().
__init__
(
f"The DataFrame from
{
source
}
being materialized must have at least
{
join_key_columns
}
columns present, "
f"but these were missing:
{
join_key_columns
-
source_columns
}
"
)
class
DockerDaemonNotRunning
(
FeastError
):
def
__init__
(
self
):
super
().
__init__
(
"The Docker Python sdk cannot connect to the Docker daemon. Please make sure you have"
"the docker daemon installed, and that it is running."
)
class
RegistryInferenceFailure
(
FeastError
):
def
__init__
(
self
,
repo_obj_type
:
str
,
specific_issue
:
str
):
super
().
__init__
(
f"Inference to fill in missing information for
{
repo_obj_type
}
failed.
{
specific_issue
}
. "
"Try filling the information explicitly."
)
class
BigQueryJobStillRunning
(
FeastError
):
def
__init__
(
self
,
job_id
):
super
().
__init__
(
f"The BigQuery job with ID '
{
job_id
}
' is still running."
)
class
BigQueryJobCancelled
(
FeastError
):
def
__init__
(
self
,
job_id
):
super
().
__init__
(
f"The BigQuery job with ID '
{
job_id
}
' was cancelled"
)
class
RedshiftCredentialsError
(
FeastError
):
def
__init__
(
self
):
super
().
__init__
(
"Redshift API failed due to incorrect credentials"
)
class
RedshiftQueryError
(
FeastError
):
def
__init__
(
self
,
details
):
super
().
__init__
(
f"Redshift SQL Query failed to finish. Details:
{
details
}
"
)
class
RedshiftTableNameTooLong
(
FeastError
):
def
__init__
(
self
,
table_name
:
str
):
super
().
__init__
(
f"Redshift table names have a maximum length of 127 characters, but the table name
{
table_name
}
has length
{
len
(
table_name
)
}
characters."
)
class
SnowflakeCredentialsError
(
FeastError
):
def
__init__
(
self
):
super
().
__init__
(
"Snowflake Connector failed due to incorrect credentials"
)
class
SnowflakeQueryError
(
FeastError
):
def
__init__
(
self
,
details
):
super
().
__init__
(
f"Snowflake SQL Query failed to finish. Details:
{
details
}
"
)
class
EntityTimestampInferenceException
(
FeastError
):
def
__init__
(
self
,
expected_column_name
:
str
):
super
().
__init__
(
f"Please provide an entity_df with a column named
{
expected_column_name
}
representing the time of events."
)
class
FeatureViewMissingDuringFeatureServiceInference
(
FeastError
):
def
__init__
(
self
,
feature_view_name
:
str
,
feature_service_name
:
str
):
super
().
__init__
(
f"Missing
{
feature_view_name
}
feature view during inference for
{
feature_service_name
}
feature service."
)
class
InvalidEntityType
(
FeastError
):
def
__init__
(
self
,
entity_type
:
type
):
super
().
__init__
(
f"The entity dataframe you have provided must be a Pandas DataFrame or a SQL query, "
f"but we found:
{
entity_type
}
"
)
class
ConflictingFeatureViewNames
(
FeastError
):
# TODO: print file location of conflicting feature views
def
__init__
(
self
,
feature_view_name
:
str
,
existing_type
:
Optional
[
str
]
=
None
,
new_type
:
Optional
[
str
]
=
None
,
):
if
existing_type
and
new_type
:
if
existing_type
==
new_type
:
# Same-type duplicate
super
().
__init__
(
f"Multiple
{
existing_type
}
s with name '
{
feature_view_name
}
' found. "
f"Feature view names must be case-insensitively unique. "
f"It may be necessary to ignore certain files in your feature "
f"repository by using a .feastignore file."
)
else
:
# Cross-type conflict
super
().
__init__
(
f"Feature view name '
{
feature_view_name
}
' is already used by a
{
existing_type
}
. "
f"Cannot register a
{
new_type
}
with the same name. "
f"Feature view names must be unique across FeatureView, StreamFeatureView, and OnDemandFeatureView."
)
else
:
super
().
__init__
(
f"The feature view name:
{
feature_view_name
}
refers to feature views of different types."
)
class
FeastInvalidInfraObjectType
(
FeastError
):
def
__init__
(
self
):
super
().
__init__
(
"Could not identify the type of the InfraObject."
)
class
SnowflakeIncompleteConfig
(
FeastError
):
def
__init__
(
self
,
e
:
KeyError
):
super
().
__init__
(
f"
{
e
}
not defined in a config file or feature_store.yaml file"
)
class
SnowflakeQueryUnknownError
(
FeastError
):
def
__init__
(
self
,
query
:
str
):
super
().
__init__
(
f"Snowflake query failed:
{
query
}
"
)
class
InvalidFeaturesParameterType
(
FeastError
):
def
__init__
(
self
,
features
:
Any
):
super
().
__init__
(
f"Invalid `features` parameter type
{
type
(
features
)
}
. Expected one of List[str] and FeatureService."
)
class
EntitySQLEmptyResults
(
FeastError
):
def
__init__
(
self
,
entity_sql
:
str
):
super
().
__init__
(
f"No entity values found from the specified SQL query to generate the entity dataframe:
{
entity_sql
}
."
)
class
EntityDFNotDateTime
(
FeastError
):
def
__init__
(
self
):
super
().
__init__
(
"The entity dataframe specified does not have the timestamp field as a datetime."
)
class
PushSourceNotFoundException
(
FeastError
):
def
__init__
(
self
,
push_source_name
:
str
):
super
().
__init__
(
f"Unable to find push source '
{
push_source_name
}
'."
)
def
http_status_code
(
self
)
->
int
:
return
HttpStatusCode
.
HTTP_422_UNPROCESSABLE_ENTITY
class
ReadOnlyRegistryException
(
FeastError
):
def
__init__
(
self
):
super
().
__init__
(
"Registry implementation is read-only."
)
class
DataFrameSerializationError
(
FeastError
):
def
__init__
(
self
,
input
:
Any
):
if
isinstance
(
input
,
dict
):
super
().
__init__
(
f"Failed to serialize the provided dictionary into a pandas DataFrame:
{
input
.
keys
()
}
"
)
else
:
super
().
__init__
(
"Failed to serialize the provided input into a pandas DataFrame"
)
class
PermissionNotFoundException
(
FeastError
):
def
__init__
(
self
,
name
,
project
):
super
().
__init__
(
f"Permission
{
name
}
does not exist in project
{
project
}
"
)
class
PermissionObjectNotFoundException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
,
project
=
None
):
if
project
:
super
().
__init__
(
f"Permission
{
name
}
does not exist in project
{
project
}
"
)
else
:
super
().
__init__
(
f"Permission
{
name
}
does not exist"
)
class
ProjectNotFoundException
(
FeastError
):
def
__init__
(
self
,
project
):
super
().
__init__
(
f"Project
{
project
}
does not exist in registry"
)
class
ProjectObjectNotFoundException
(
FeastObjectNotFoundException
):
def
__init__
(
self
,
name
,
project
=
None
):
super
().
__init__
(
f"Project
{
name
}
does not exist"
)
class
ZeroRowsQueryResult
(
FeastError
):
def
__init__
(
self
,
query
:
str
):
super
().
__init__
(
f"This query returned zero rows:
\n
{
query
}
"
)
class
ZeroColumnQueryResult
(
FeastError
):
def
__init__
(
self
,
query
:
str
):
super
().
__init__
(
f"This query returned zero columns:
\n
{
query
}
"
)
class
FeastPermissionError
(
FeastError
,
PermissionError
):
def
__init__
(
self
,
details
:
str
):
super
().
__init__
(
f"Permission error:
\n
{
details
}
"
)
def
grpc_status_code
(
self
)
->
"GrpcStatusCode"
:
from
grpc
import
StatusCode
as
GrpcStatusCode
return
GrpcStatusCode
.
PERMISSION_DENIED
def
http_status_code
(
self
)
->
int
:
return
HttpStatusCode
.
HTTP_403_FORBIDDEN
Back
|
FazBrowse Home
|
New Git URL