alibabacloud-sls20201230 5.2.2__py3-none-any.whl → 5.3.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.
@@ -844,6 +844,96 @@ class Alert(TeaModel):
844
844
  return self
845
845
 
846
846
 
847
+ class ConsumeProcessorConfiguration(TeaModel):
848
+ def __init__(
849
+ self,
850
+ spl: str = None,
851
+ ):
852
+ # This parameter is required.
853
+ self.spl = spl
854
+
855
+ def validate(self):
856
+ pass
857
+
858
+ def to_map(self):
859
+ _map = super().to_map()
860
+ if _map is not None:
861
+ return _map
862
+
863
+ result = dict()
864
+ if self.spl is not None:
865
+ result['spl'] = self.spl
866
+ return result
867
+
868
+ def from_map(self, m: dict = None):
869
+ m = m or dict()
870
+ if m.get('spl') is not None:
871
+ self.spl = m.get('spl')
872
+ return self
873
+
874
+
875
+ class ConsumeProcessor(TeaModel):
876
+ def __init__(
877
+ self,
878
+ configuration: ConsumeProcessorConfiguration = None,
879
+ create_time: int = None,
880
+ description: str = None,
881
+ processor_id: str = None,
882
+ processor_name: str = None,
883
+ update_time: int = None,
884
+ ):
885
+ # This parameter is required.
886
+ self.configuration = configuration
887
+ self.create_time = create_time
888
+ self.description = description
889
+ # This parameter is required.
890
+ self.processor_id = processor_id
891
+ # This parameter is required.
892
+ self.processor_name = processor_name
893
+ self.update_time = update_time
894
+
895
+ def validate(self):
896
+ if self.configuration:
897
+ self.configuration.validate()
898
+
899
+ def to_map(self):
900
+ _map = super().to_map()
901
+ if _map is not None:
902
+ return _map
903
+
904
+ result = dict()
905
+ if self.configuration is not None:
906
+ result['configuration'] = self.configuration.to_map()
907
+ if self.create_time is not None:
908
+ result['createTime'] = self.create_time
909
+ if self.description is not None:
910
+ result['description'] = self.description
911
+ if self.processor_id is not None:
912
+ result['processorId'] = self.processor_id
913
+ if self.processor_name is not None:
914
+ result['processorName'] = self.processor_name
915
+ if self.update_time is not None:
916
+ result['updateTime'] = self.update_time
917
+ return result
918
+
919
+ def from_map(self, m: dict = None):
920
+ m = m or dict()
921
+ if m.get('configuration') is not None:
922
+ temp_model = ConsumeProcessorConfiguration()
923
+ self.configuration = temp_model.from_map(m['configuration'])
924
+ if m.get('createTime') is not None:
925
+ self.create_time = m.get('createTime')
926
+ if m.get('description') is not None:
927
+ self.description = m.get('description')
928
+ if m.get('processorId') is not None:
929
+ self.processor_id = m.get('processorId')
930
+ if m.get('processorName') is not None:
931
+ self.processor_name = m.get('processorName')
932
+ if m.get('updateTime') is not None:
933
+ self.update_time = m.get('updateTime')
934
+ return self
935
+
936
+
847
937
  class ConsumerGroup(TeaModel):
848
938
  def __init__(
849
939
  self,
@@ -1254,6 +1344,102 @@ class Histogram(TeaModel):
1254
1344
  return self
1255
1345
 
1256
1346
 
1347
+ class IngestProcessorConfiguration(TeaModel):
1348
+ def __init__(
1349
+ self,
1350
+ parse_fail: str = None,
1351
+ spl: str = None,
1352
+ ):
1353
+ self.parse_fail = parse_fail
1354
+ # This parameter is required.
1355
+ self.spl = spl
1356
+
1357
+ def validate(self):
1358
+ pass
1359
+
1360
+ def to_map(self):
1361
+ _map = super().to_map()
1362
+ if _map is not None:
1363
+ return _map
1364
+
1365
+ result = dict()
1366
+ if self.parse_fail is not None:
1367
+ result['parseFail'] = self.parse_fail
1368
+ if self.spl is not None:
1369
+ result['spl'] = self.spl
1370
+ return result
1371
+
1372
+ def from_map(self, m: dict = None):
1373
+ m = m or dict()
1374
+ if m.get('parseFail') is not None:
1375
+ self.parse_fail = m.get('parseFail')
1376
+ if m.get('spl') is not None:
1377
+ self.spl = m.get('spl')
1378
+ return self
1379
+
1380
+
1381
+ class IngestProcessor(TeaModel):
1382
+ def __init__(
1383
+ self,
1384
+ configuration: IngestProcessorConfiguration = None,
1385
+ create_time: int = None,
1386
+ description: str = None,
1387
+ processor_id: str = None,
1388
+ processor_name: str = None,
1389
+ update_time: int = None,
1390
+ ):
1391
+ # This parameter is required.
1392
+ self.configuration = configuration
1393
+ self.create_time = create_time
1394
+ self.description = description
1395
+ # This parameter is required.
1396
+ self.processor_id = processor_id
1397
+ # This parameter is required.
1398
+ self.processor_name = processor_name
1399
+ self.update_time = update_time
1400
+
1401
+ def validate(self):
1402
+ if self.configuration:
1403
+ self.configuration.validate()
1404
+
1405
+ def to_map(self):
1406
+ _map = super().to_map()
1407
+ if _map is not None:
1408
+ return _map
1409
+
1410
+ result = dict()
1411
+ if self.configuration is not None:
1412
+ result['configuration'] = self.configuration.to_map()
1413
+ if self.create_time is not None:
1414
+ result['createTime'] = self.create_time
1415
+ if self.description is not None:
1416
+ result['description'] = self.description
1417
+ if self.processor_id is not None:
1418
+ result['processorId'] = self.processor_id
1419
+ if self.processor_name is not None:
1420
+ result['processorName'] = self.processor_name
1421
+ if self.update_time is not None:
1422
+ result['updateTime'] = self.update_time
1423
+ return result
1424
+
1425
+ def from_map(self, m: dict = None):
1426
+ m = m or dict()
1427
+ if m.get('configuration') is not None:
1428
+ temp_model = IngestProcessorConfiguration()
1429
+ self.configuration = temp_model.from_map(m['configuration'])
1430
+ if m.get('createTime') is not None:
1431
+ self.create_time = m.get('createTime')
1432
+ if m.get('description') is not None:
1433
+ self.description = m.get('description')
1434
+ if m.get('processorId') is not None:
1435
+ self.processor_id = m.get('processorId')
1436
+ if m.get('processorName') is not None:
1437
+ self.processor_name = m.get('processorName')
1438
+ if m.get('updateTime') is not None:
1439
+ self.update_time = m.get('updateTime')
1440
+ return self
1441
+
1442
+
1257
1443
  class LogContent(TeaModel):
1258
1444
  def __init__(
1259
1445
  self,
@@ -2887,6 +3073,97 @@ class OSSIngestion(TeaModel):
2887
3073
  return self
2888
3074
 
2889
3075
 
3076
+ class ProcessorAssociate(TeaModel):
3077
+ def __init__(
3078
+ self,
3079
+ processor_id: str = None,
3080
+ ):
3081
+ # This parameter is required.
3082
+ self.processor_id = processor_id
3083
+
3084
+ def validate(self):
3085
+ pass
3086
+
3087
+ def to_map(self):
3088
+ _map = super().to_map()
3089
+ if _map is not None:
3090
+ return _map
3091
+
3092
+ result = dict()
3093
+ if self.processor_id is not None:
3094
+ result['processorId'] = self.processor_id
3095
+ return result
3096
+
3097
+ def from_map(self, m: dict = None):
3098
+ m = m or dict()
3099
+ if m.get('processorId') is not None:
3100
+ self.processor_id = m.get('processorId')
3101
+ return self
3102
+
3103
+
3104
+ class ProjectSummary(TeaModel):
3105
+ def __init__(
3106
+ self,
3107
+ create_time: int = None,
3108
+ description: str = None,
3109
+ project_name: str = None,
3110
+ region: str = None,
3111
+ resource_group_id: str = None,
3112
+ update_time: int = None,
3113
+ ):
3114
+ # This parameter is required.
3115
+ self.create_time = create_time
3116
+ # This parameter is required.
3117
+ self.description = description
3118
+ # This parameter is required.
3119
+ self.project_name = project_name
3120
+ # This parameter is required.
3121
+ self.region = region
3122
+ # This parameter is required.
3123
+ self.resource_group_id = resource_group_id
3124
+ # This parameter is required.
3125
+ self.update_time = update_time
3126
+
3127
+ def validate(self):
3128
+ pass
3129
+
3130
+ def to_map(self):
3131
+ _map = super().to_map()
3132
+ if _map is not None:
3133
+ return _map
3134
+
3135
+ result = dict()
3136
+ if self.create_time is not None:
3137
+ result['createTime'] = self.create_time
3138
+ if self.description is not None:
3139
+ result['description'] = self.description
3140
+ if self.project_name is not None:
3141
+ result['projectName'] = self.project_name
3142
+ if self.region is not None:
3143
+ result['region'] = self.region
3144
+ if self.resource_group_id is not None:
3145
+ result['resourceGroupId'] = self.resource_group_id
3146
+ if self.update_time is not None:
3147
+ result['updateTime'] = self.update_time
3148
+ return result
3149
+
3150
+ def from_map(self, m: dict = None):
3151
+ m = m or dict()
3152
+ if m.get('createTime') is not None:
3153
+ self.create_time = m.get('createTime')
3154
+ if m.get('description') is not None:
3155
+ self.description = m.get('description')
3156
+ if m.get('projectName') is not None:
3157
+ self.project_name = m.get('projectName')
3158
+ if m.get('region') is not None:
3159
+ self.region = m.get('region')
3160
+ if m.get('resourceGroupId') is not None:
3161
+ self.resource_group_id = m.get('resourceGroupId')
3162
+ if m.get('updateTime') is not None:
3163
+ self.update_time = m.get('updateTime')
3164
+ return self
3165
+
3166
+
2890
3167
  class SavedSearch(TeaModel):
2891
3168
  def __init__(
2892
3169
  self,
@@ -4427,12 +4704,22 @@ class ConsumerGroupUpdateCheckPointRequest(TeaModel):
4427
4704
  consumer: str = None,
4428
4705
  force_success: bool = None,
4429
4706
  ):
4707
+ # The value of the checkpoint.
4708
+ #
4430
4709
  # This parameter is required.
4431
4710
  self.checkpoint = checkpoint
4711
+ # The ID of the shard.
4712
+ #
4432
4713
  # This parameter is required.
4433
4714
  self.shard = shard
4715
+ # The consumer.
4716
+ #
4434
4717
  # This parameter is required.
4435
4718
  self.consumer = consumer
4719
+ # Specifies whether to enable forceful updates. Valid values:
4720
+ #
4721
+ # * true
4722
+ # * false
4436
4723
  self.force_success = force_success
4437
4724
 
4438
4725
  def validate(self):
@@ -5006,25 +5293,34 @@ class CreateDomainResponse(TeaModel):
5006
5293
  return self
5007
5294
 
5008
5295
 
5009
- class CreateETLRequest(TeaModel):
5296
+ class CreateDownloadJobRequestConfigurationSink(TeaModel):
5010
5297
  def __init__(
5011
5298
  self,
5012
- configuration: ETLConfiguration = None,
5013
- description: str = None,
5014
- display_name: str = None,
5015
- name: str = None,
5299
+ bucket: str = None,
5300
+ compression_type: str = None,
5301
+ content_type: str = None,
5302
+ prefix: str = None,
5303
+ role_arn: str = None,
5304
+ type: str = None,
5016
5305
  ):
5306
+ # 对象存储桶
5307
+ self.bucket = bucket
5308
+ # 压缩格式
5309
+ #
5017
5310
  # This parameter is required.
5018
- self.configuration = configuration
5019
- self.description = description
5311
+ self.compression_type = compression_type
5312
+ # 下载文件格式
5313
+ #
5020
5314
  # This parameter is required.
5021
- self.display_name = display_name
5315
+ self.content_type = content_type
5316
+ self.prefix = prefix
5317
+ # 下载使用roleArn
5318
+ self.role_arn = role_arn
5022
5319
  # This parameter is required.
5023
- self.name = name
5320
+ self.type = type
5024
5321
 
5025
5322
  def validate(self):
5026
- if self.configuration:
5027
- self.configuration.validate()
5323
+ pass
5028
5324
 
5029
5325
  def to_map(self):
5030
5326
  _map = super().to_map()
@@ -5032,9 +5328,238 @@ class CreateETLRequest(TeaModel):
5032
5328
  return _map
5033
5329
 
5034
5330
  result = dict()
5035
- if self.configuration is not None:
5036
- result['configuration'] = self.configuration.to_map()
5037
- if self.description is not None:
5331
+ if self.bucket is not None:
5332
+ result['bucket'] = self.bucket
5333
+ if self.compression_type is not None:
5334
+ result['compressionType'] = self.compression_type
5335
+ if self.content_type is not None:
5336
+ result['contentType'] = self.content_type
5337
+ if self.prefix is not None:
5338
+ result['prefix'] = self.prefix
5339
+ if self.role_arn is not None:
5340
+ result['roleArn'] = self.role_arn
5341
+ if self.type is not None:
5342
+ result['type'] = self.type
5343
+ return result
5344
+
5345
+ def from_map(self, m: dict = None):
5346
+ m = m or dict()
5347
+ if m.get('bucket') is not None:
5348
+ self.bucket = m.get('bucket')
5349
+ if m.get('compressionType') is not None:
5350
+ self.compression_type = m.get('compressionType')
5351
+ if m.get('contentType') is not None:
5352
+ self.content_type = m.get('contentType')
5353
+ if m.get('prefix') is not None:
5354
+ self.prefix = m.get('prefix')
5355
+ if m.get('roleArn') is not None:
5356
+ self.role_arn = m.get('roleArn')
5357
+ if m.get('type') is not None:
5358
+ self.type = m.get('type')
5359
+ return self
5360
+
5361
+
5362
+ class CreateDownloadJobRequestConfiguration(TeaModel):
5363
+ def __init__(
5364
+ self,
5365
+ allow_in_complete: bool = None,
5366
+ from_time: int = None,
5367
+ logstore: str = None,
5368
+ power_sql: bool = None,
5369
+ query: str = None,
5370
+ sink: CreateDownloadJobRequestConfigurationSink = None,
5371
+ to_time: int = None,
5372
+ ):
5373
+ # This parameter is required.
5374
+ self.allow_in_complete = allow_in_complete
5375
+ # 起点时间戳(精确到秒)
5376
+ #
5377
+ # This parameter is required.
5378
+ self.from_time = from_time
5379
+ # 源logstore
5380
+ #
5381
+ # This parameter is required.
5382
+ self.logstore = logstore
5383
+ # 是否启用powerSql
5384
+ self.power_sql = power_sql
5385
+ # 查询语句
5386
+ #
5387
+ # This parameter is required.
5388
+ self.query = query
5389
+ # 导出配置
5390
+ #
5391
+ # This parameter is required.
5392
+ self.sink = sink
5393
+ # 结束时间戳(精确到秒)
5394
+ #
5395
+ # This parameter is required.
5396
+ self.to_time = to_time
5397
+
5398
+ def validate(self):
5399
+ if self.sink:
5400
+ self.sink.validate()
5401
+
5402
+ def to_map(self):
5403
+ _map = super().to_map()
5404
+ if _map is not None:
5405
+ return _map
5406
+
5407
+ result = dict()
5408
+ if self.allow_in_complete is not None:
5409
+ result['allowInComplete'] = self.allow_in_complete
5410
+ if self.from_time is not None:
5411
+ result['fromTime'] = self.from_time
5412
+ if self.logstore is not None:
5413
+ result['logstore'] = self.logstore
5414
+ if self.power_sql is not None:
5415
+ result['powerSql'] = self.power_sql
5416
+ if self.query is not None:
5417
+ result['query'] = self.query
5418
+ if self.sink is not None:
5419
+ result['sink'] = self.sink.to_map()
5420
+ if self.to_time is not None:
5421
+ result['toTime'] = self.to_time
5422
+ return result
5423
+
5424
+ def from_map(self, m: dict = None):
5425
+ m = m or dict()
5426
+ if m.get('allowInComplete') is not None:
5427
+ self.allow_in_complete = m.get('allowInComplete')
5428
+ if m.get('fromTime') is not None:
5429
+ self.from_time = m.get('fromTime')
5430
+ if m.get('logstore') is not None:
5431
+ self.logstore = m.get('logstore')
5432
+ if m.get('powerSql') is not None:
5433
+ self.power_sql = m.get('powerSql')
5434
+ if m.get('query') is not None:
5435
+ self.query = m.get('query')
5436
+ if m.get('sink') is not None:
5437
+ temp_model = CreateDownloadJobRequestConfigurationSink()
5438
+ self.sink = temp_model.from_map(m['sink'])
5439
+ if m.get('toTime') is not None:
5440
+ self.to_time = m.get('toTime')
5441
+ return self
5442
+
5443
+
5444
+ class CreateDownloadJobRequest(TeaModel):
5445
+ def __init__(
5446
+ self,
5447
+ configuration: CreateDownloadJobRequestConfiguration = None,
5448
+ description: str = None,
5449
+ display_name: str = None,
5450
+ name: str = None,
5451
+ ):
5452
+ # 下载配置
5453
+ #
5454
+ # This parameter is required.
5455
+ self.configuration = configuration
5456
+ # 任务描述
5457
+ self.description = description
5458
+ # 任务显示名称
5459
+ #
5460
+ # This parameter is required.
5461
+ self.display_name = display_name
5462
+ # 代表资源名称的资源属性字段
5463
+ #
5464
+ # This parameter is required.
5465
+ self.name = name
5466
+
5467
+ def validate(self):
5468
+ if self.configuration:
5469
+ self.configuration.validate()
5470
+
5471
+ def to_map(self):
5472
+ _map = super().to_map()
5473
+ if _map is not None:
5474
+ return _map
5475
+
5476
+ result = dict()
5477
+ if self.configuration is not None:
5478
+ result['configuration'] = self.configuration.to_map()
5479
+ if self.description is not None:
5480
+ result['description'] = self.description
5481
+ if self.display_name is not None:
5482
+ result['displayName'] = self.display_name
5483
+ if self.name is not None:
5484
+ result['name'] = self.name
5485
+ return result
5486
+
5487
+ def from_map(self, m: dict = None):
5488
+ m = m or dict()
5489
+ if m.get('configuration') is not None:
5490
+ temp_model = CreateDownloadJobRequestConfiguration()
5491
+ self.configuration = temp_model.from_map(m['configuration'])
5492
+ if m.get('description') is not None:
5493
+ self.description = m.get('description')
5494
+ if m.get('displayName') is not None:
5495
+ self.display_name = m.get('displayName')
5496
+ if m.get('name') is not None:
5497
+ self.name = m.get('name')
5498
+ return self
5499
+
5500
+
5501
+ class CreateDownloadJobResponse(TeaModel):
5502
+ def __init__(
5503
+ self,
5504
+ headers: Dict[str, str] = None,
5505
+ status_code: int = None,
5506
+ ):
5507
+ self.headers = headers
5508
+ self.status_code = status_code
5509
+
5510
+ def validate(self):
5511
+ pass
5512
+
5513
+ def to_map(self):
5514
+ _map = super().to_map()
5515
+ if _map is not None:
5516
+ return _map
5517
+
5518
+ result = dict()
5519
+ if self.headers is not None:
5520
+ result['headers'] = self.headers
5521
+ if self.status_code is not None:
5522
+ result['statusCode'] = self.status_code
5523
+ return result
5524
+
5525
+ def from_map(self, m: dict = None):
5526
+ m = m or dict()
5527
+ if m.get('headers') is not None:
5528
+ self.headers = m.get('headers')
5529
+ if m.get('statusCode') is not None:
5530
+ self.status_code = m.get('statusCode')
5531
+ return self
5532
+
5533
+
5534
+ class CreateETLRequest(TeaModel):
5535
+ def __init__(
5536
+ self,
5537
+ configuration: ETLConfiguration = None,
5538
+ description: str = None,
5539
+ display_name: str = None,
5540
+ name: str = None,
5541
+ ):
5542
+ # This parameter is required.
5543
+ self.configuration = configuration
5544
+ self.description = description
5545
+ # This parameter is required.
5546
+ self.display_name = display_name
5547
+ # This parameter is required.
5548
+ self.name = name
5549
+
5550
+ def validate(self):
5551
+ if self.configuration:
5552
+ self.configuration.validate()
5553
+
5554
+ def to_map(self):
5555
+ _map = super().to_map()
5556
+ if _map is not None:
5557
+ return _map
5558
+
5559
+ result = dict()
5560
+ if self.configuration is not None:
5561
+ result['configuration'] = self.configuration.to_map()
5562
+ if self.description is not None:
5038
5563
  result['description'] = self.description
5039
5564
  if self.display_name is not None:
5040
5565
  result['displayName'] = self.display_name
@@ -7323,6 +7848,39 @@ class DeleteDomainResponse(TeaModel):
7323
7848
  return self
7324
7849
 
7325
7850
 
7851
+ class DeleteDownloadJobResponse(TeaModel):
7852
+ def __init__(
7853
+ self,
7854
+ headers: Dict[str, str] = None,
7855
+ status_code: int = None,
7856
+ ):
7857
+ self.headers = headers
7858
+ self.status_code = status_code
7859
+
7860
+ def validate(self):
7861
+ pass
7862
+
7863
+ def to_map(self):
7864
+ _map = super().to_map()
7865
+ if _map is not None:
7866
+ return _map
7867
+
7868
+ result = dict()
7869
+ if self.headers is not None:
7870
+ result['headers'] = self.headers
7871
+ if self.status_code is not None:
7872
+ result['statusCode'] = self.status_code
7873
+ return result
7874
+
7875
+ def from_map(self, m: dict = None):
7876
+ m = m or dict()
7877
+ if m.get('headers') is not None:
7878
+ self.headers = m.get('headers')
7879
+ if m.get('statusCode') is not None:
7880
+ self.status_code = m.get('statusCode')
7881
+ return self
7882
+
7883
+
7326
7884
  class DeleteETLResponse(TeaModel):
7327
7885
  def __init__(
7328
7886
  self,
@@ -9196,18 +9754,335 @@ class GetDashboardResponse(TeaModel):
9196
9754
  return self
9197
9755
 
9198
9756
 
9199
- class GetETLResponse(TeaModel):
9757
+ class GetDownloadJobResponseBodyConfigurationSink(TeaModel):
9200
9758
  def __init__(
9201
9759
  self,
9202
- headers: Dict[str, str] = None,
9203
- status_code: int = None,
9204
- body: ETL = None,
9760
+ bucket: str = None,
9761
+ compression_type: str = None,
9762
+ content_type: str = None,
9763
+ prefix: str = None,
9764
+ role_arn: str = None,
9765
+ type: str = None,
9205
9766
  ):
9206
- self.headers = headers
9207
- self.status_code = status_code
9208
- self.body = body
9209
-
9210
- def validate(self):
9767
+ # 对象存储桶
9768
+ self.bucket = bucket
9769
+ # 压缩格式
9770
+ self.compression_type = compression_type
9771
+ # 下载文件格式
9772
+ self.content_type = content_type
9773
+ self.prefix = prefix
9774
+ # 下载使用roleArn
9775
+ self.role_arn = role_arn
9776
+ self.type = type
9777
+
9778
+ def validate(self):
9779
+ pass
9780
+
9781
+ def to_map(self):
9782
+ _map = super().to_map()
9783
+ if _map is not None:
9784
+ return _map
9785
+
9786
+ result = dict()
9787
+ if self.bucket is not None:
9788
+ result['bucket'] = self.bucket
9789
+ if self.compression_type is not None:
9790
+ result['compressionType'] = self.compression_type
9791
+ if self.content_type is not None:
9792
+ result['contentType'] = self.content_type
9793
+ if self.prefix is not None:
9794
+ result['prefix'] = self.prefix
9795
+ if self.role_arn is not None:
9796
+ result['roleArn'] = self.role_arn
9797
+ if self.type is not None:
9798
+ result['type'] = self.type
9799
+ return result
9800
+
9801
+ def from_map(self, m: dict = None):
9802
+ m = m or dict()
9803
+ if m.get('bucket') is not None:
9804
+ self.bucket = m.get('bucket')
9805
+ if m.get('compressionType') is not None:
9806
+ self.compression_type = m.get('compressionType')
9807
+ if m.get('contentType') is not None:
9808
+ self.content_type = m.get('contentType')
9809
+ if m.get('prefix') is not None:
9810
+ self.prefix = m.get('prefix')
9811
+ if m.get('roleArn') is not None:
9812
+ self.role_arn = m.get('roleArn')
9813
+ if m.get('type') is not None:
9814
+ self.type = m.get('type')
9815
+ return self
9816
+
9817
+
9818
+ class GetDownloadJobResponseBodyConfiguration(TeaModel):
9819
+ def __init__(
9820
+ self,
9821
+ allow_in_complete: bool = None,
9822
+ from_time: int = None,
9823
+ logstore: str = None,
9824
+ power_sql: bool = None,
9825
+ query: str = None,
9826
+ sink: GetDownloadJobResponseBodyConfigurationSink = None,
9827
+ to_time: int = None,
9828
+ ):
9829
+ self.allow_in_complete = allow_in_complete
9830
+ # 起点时间戳(精确到秒)
9831
+ self.from_time = from_time
9832
+ # 源logstore
9833
+ self.logstore = logstore
9834
+ # 是否启用powerSql
9835
+ self.power_sql = power_sql
9836
+ # 查询语句
9837
+ self.query = query
9838
+ # 导出配置
9839
+ self.sink = sink
9840
+ # 结束时间戳(精确到秒)
9841
+ self.to_time = to_time
9842
+
9843
+ def validate(self):
9844
+ if self.sink:
9845
+ self.sink.validate()
9846
+
9847
+ def to_map(self):
9848
+ _map = super().to_map()
9849
+ if _map is not None:
9850
+ return _map
9851
+
9852
+ result = dict()
9853
+ if self.allow_in_complete is not None:
9854
+ result['allowInComplete'] = self.allow_in_complete
9855
+ if self.from_time is not None:
9856
+ result['fromTime'] = self.from_time
9857
+ if self.logstore is not None:
9858
+ result['logstore'] = self.logstore
9859
+ if self.power_sql is not None:
9860
+ result['powerSql'] = self.power_sql
9861
+ if self.query is not None:
9862
+ result['query'] = self.query
9863
+ if self.sink is not None:
9864
+ result['sink'] = self.sink.to_map()
9865
+ if self.to_time is not None:
9866
+ result['toTime'] = self.to_time
9867
+ return result
9868
+
9869
+ def from_map(self, m: dict = None):
9870
+ m = m or dict()
9871
+ if m.get('allowInComplete') is not None:
9872
+ self.allow_in_complete = m.get('allowInComplete')
9873
+ if m.get('fromTime') is not None:
9874
+ self.from_time = m.get('fromTime')
9875
+ if m.get('logstore') is not None:
9876
+ self.logstore = m.get('logstore')
9877
+ if m.get('powerSql') is not None:
9878
+ self.power_sql = m.get('powerSql')
9879
+ if m.get('query') is not None:
9880
+ self.query = m.get('query')
9881
+ if m.get('sink') is not None:
9882
+ temp_model = GetDownloadJobResponseBodyConfigurationSink()
9883
+ self.sink = temp_model.from_map(m['sink'])
9884
+ if m.get('toTime') is not None:
9885
+ self.to_time = m.get('toTime')
9886
+ return self
9887
+
9888
+
9889
+ class GetDownloadJobResponseBodyExecutionDetails(TeaModel):
9890
+ def __init__(
9891
+ self,
9892
+ check_sum: str = None,
9893
+ error_message: str = None,
9894
+ execute_time: int = None,
9895
+ file_path: str = None,
9896
+ file_size: int = None,
9897
+ log_count: int = None,
9898
+ progress: int = None,
9899
+ ):
9900
+ self.check_sum = check_sum
9901
+ # 下载错误信息
9902
+ self.error_message = error_message
9903
+ # 下载执行时间
9904
+ self.execute_time = execute_time
9905
+ # 下载结果链接
9906
+ self.file_path = file_path
9907
+ # 下载文件大小
9908
+ self.file_size = file_size
9909
+ # 下载日志条数
9910
+ self.log_count = log_count
9911
+ # 下载进度
9912
+ self.progress = progress
9913
+
9914
+ def validate(self):
9915
+ pass
9916
+
9917
+ def to_map(self):
9918
+ _map = super().to_map()
9919
+ if _map is not None:
9920
+ return _map
9921
+
9922
+ result = dict()
9923
+ if self.check_sum is not None:
9924
+ result['checkSum'] = self.check_sum
9925
+ if self.error_message is not None:
9926
+ result['errorMessage'] = self.error_message
9927
+ if self.execute_time is not None:
9928
+ result['executeTime'] = self.execute_time
9929
+ if self.file_path is not None:
9930
+ result['filePath'] = self.file_path
9931
+ if self.file_size is not None:
9932
+ result['fileSize'] = self.file_size
9933
+ if self.log_count is not None:
9934
+ result['logCount'] = self.log_count
9935
+ if self.progress is not None:
9936
+ result['progress'] = self.progress
9937
+ return result
9938
+
9939
+ def from_map(self, m: dict = None):
9940
+ m = m or dict()
9941
+ if m.get('checkSum') is not None:
9942
+ self.check_sum = m.get('checkSum')
9943
+ if m.get('errorMessage') is not None:
9944
+ self.error_message = m.get('errorMessage')
9945
+ if m.get('executeTime') is not None:
9946
+ self.execute_time = m.get('executeTime')
9947
+ if m.get('filePath') is not None:
9948
+ self.file_path = m.get('filePath')
9949
+ if m.get('fileSize') is not None:
9950
+ self.file_size = m.get('fileSize')
9951
+ if m.get('logCount') is not None:
9952
+ self.log_count = m.get('logCount')
9953
+ if m.get('progress') is not None:
9954
+ self.progress = m.get('progress')
9955
+ return self
9956
+
9957
+
9958
+ class GetDownloadJobResponseBody(TeaModel):
9959
+ def __init__(
9960
+ self,
9961
+ configuration: GetDownloadJobResponseBodyConfiguration = None,
9962
+ create_time: str = None,
9963
+ description: str = None,
9964
+ display_name: str = None,
9965
+ execution_details: GetDownloadJobResponseBodyExecutionDetails = None,
9966
+ name: str = None,
9967
+ status: str = None,
9968
+ ):
9969
+ # 下载配置
9970
+ self.configuration = configuration
9971
+ # 代表创建时间的资源属性字段
9972
+ self.create_time = create_time
9973
+ # 任务描述
9974
+ self.description = description
9975
+ # 任务显示名称
9976
+ self.display_name = display_name
9977
+ # 任务执行细节
9978
+ self.execution_details = execution_details
9979
+ # 代表资源名称的资源属性字段
9980
+ self.name = name
9981
+ # 代表资源状态的资源属性字段
9982
+ self.status = status
9983
+
9984
+ def validate(self):
9985
+ if self.configuration:
9986
+ self.configuration.validate()
9987
+ if self.execution_details:
9988
+ self.execution_details.validate()
9989
+
9990
+ def to_map(self):
9991
+ _map = super().to_map()
9992
+ if _map is not None:
9993
+ return _map
9994
+
9995
+ result = dict()
9996
+ if self.configuration is not None:
9997
+ result['configuration'] = self.configuration.to_map()
9998
+ if self.create_time is not None:
9999
+ result['createTime'] = self.create_time
10000
+ if self.description is not None:
10001
+ result['description'] = self.description
10002
+ if self.display_name is not None:
10003
+ result['displayName'] = self.display_name
10004
+ if self.execution_details is not None:
10005
+ result['executionDetails'] = self.execution_details.to_map()
10006
+ if self.name is not None:
10007
+ result['name'] = self.name
10008
+ if self.status is not None:
10009
+ result['status'] = self.status
10010
+ return result
10011
+
10012
+ def from_map(self, m: dict = None):
10013
+ m = m or dict()
10014
+ if m.get('configuration') is not None:
10015
+ temp_model = GetDownloadJobResponseBodyConfiguration()
10016
+ self.configuration = temp_model.from_map(m['configuration'])
10017
+ if m.get('createTime') is not None:
10018
+ self.create_time = m.get('createTime')
10019
+ if m.get('description') is not None:
10020
+ self.description = m.get('description')
10021
+ if m.get('displayName') is not None:
10022
+ self.display_name = m.get('displayName')
10023
+ if m.get('executionDetails') is not None:
10024
+ temp_model = GetDownloadJobResponseBodyExecutionDetails()
10025
+ self.execution_details = temp_model.from_map(m['executionDetails'])
10026
+ if m.get('name') is not None:
10027
+ self.name = m.get('name')
10028
+ if m.get('status') is not None:
10029
+ self.status = m.get('status')
10030
+ return self
10031
+
10032
+
10033
+ class GetDownloadJobResponse(TeaModel):
10034
+ def __init__(
10035
+ self,
10036
+ headers: Dict[str, str] = None,
10037
+ status_code: int = None,
10038
+ body: GetDownloadJobResponseBody = None,
10039
+ ):
10040
+ self.headers = headers
10041
+ self.status_code = status_code
10042
+ self.body = body
10043
+
10044
+ def validate(self):
10045
+ if self.body:
10046
+ self.body.validate()
10047
+
10048
+ def to_map(self):
10049
+ _map = super().to_map()
10050
+ if _map is not None:
10051
+ return _map
10052
+
10053
+ result = dict()
10054
+ if self.headers is not None:
10055
+ result['headers'] = self.headers
10056
+ if self.status_code is not None:
10057
+ result['statusCode'] = self.status_code
10058
+ if self.body is not None:
10059
+ result['body'] = self.body.to_map()
10060
+ return result
10061
+
10062
+ def from_map(self, m: dict = None):
10063
+ m = m or dict()
10064
+ if m.get('headers') is not None:
10065
+ self.headers = m.get('headers')
10066
+ if m.get('statusCode') is not None:
10067
+ self.status_code = m.get('statusCode')
10068
+ if m.get('body') is not None:
10069
+ temp_model = GetDownloadJobResponseBody()
10070
+ self.body = temp_model.from_map(m['body'])
10071
+ return self
10072
+
10073
+
10074
+ class GetETLResponse(TeaModel):
10075
+ def __init__(
10076
+ self,
10077
+ headers: Dict[str, str] = None,
10078
+ status_code: int = None,
10079
+ body: ETL = None,
10080
+ ):
10081
+ self.headers = headers
10082
+ self.status_code = status_code
10083
+ self.body = body
10084
+
10085
+ def validate(self):
9211
10086
  if self.body:
9212
10087
  self.body.validate()
9213
10088
 
@@ -12800,6 +13675,407 @@ class ListDomainsResponse(TeaModel):
12800
13675
  return self
12801
13676
 
12802
13677
 
13678
+ class ListDownloadJobsRequest(TeaModel):
13679
+ def __init__(
13680
+ self,
13681
+ logstore: str = None,
13682
+ offset: int = None,
13683
+ size: int = None,
13684
+ ):
13685
+ self.logstore = logstore
13686
+ self.offset = offset
13687
+ self.size = size
13688
+
13689
+ def validate(self):
13690
+ pass
13691
+
13692
+ def to_map(self):
13693
+ _map = super().to_map()
13694
+ if _map is not None:
13695
+ return _map
13696
+
13697
+ result = dict()
13698
+ if self.logstore is not None:
13699
+ result['logstore'] = self.logstore
13700
+ if self.offset is not None:
13701
+ result['offset'] = self.offset
13702
+ if self.size is not None:
13703
+ result['size'] = self.size
13704
+ return result
13705
+
13706
+ def from_map(self, m: dict = None):
13707
+ m = m or dict()
13708
+ if m.get('logstore') is not None:
13709
+ self.logstore = m.get('logstore')
13710
+ if m.get('offset') is not None:
13711
+ self.offset = m.get('offset')
13712
+ if m.get('size') is not None:
13713
+ self.size = m.get('size')
13714
+ return self
13715
+
13716
+
13717
+ class ListDownloadJobsResponseBodyResultsConfigurationSink(TeaModel):
13718
+ def __init__(
13719
+ self,
13720
+ bucket: str = None,
13721
+ compression_type: str = None,
13722
+ content_type: str = None,
13723
+ prefix: str = None,
13724
+ role_arn: str = None,
13725
+ type: str = None,
13726
+ ):
13727
+ # 对象存储桶
13728
+ self.bucket = bucket
13729
+ # 压缩格式
13730
+ self.compression_type = compression_type
13731
+ # 下载文件格式
13732
+ self.content_type = content_type
13733
+ self.prefix = prefix
13734
+ # 下载使用roleArn
13735
+ self.role_arn = role_arn
13736
+ self.type = type
13737
+
13738
+ def validate(self):
13739
+ pass
13740
+
13741
+ def to_map(self):
13742
+ _map = super().to_map()
13743
+ if _map is not None:
13744
+ return _map
13745
+
13746
+ result = dict()
13747
+ if self.bucket is not None:
13748
+ result['bucket'] = self.bucket
13749
+ if self.compression_type is not None:
13750
+ result['compressionType'] = self.compression_type
13751
+ if self.content_type is not None:
13752
+ result['contentType'] = self.content_type
13753
+ if self.prefix is not None:
13754
+ result['prefix'] = self.prefix
13755
+ if self.role_arn is not None:
13756
+ result['roleArn'] = self.role_arn
13757
+ if self.type is not None:
13758
+ result['type'] = self.type
13759
+ return result
13760
+
13761
+ def from_map(self, m: dict = None):
13762
+ m = m or dict()
13763
+ if m.get('bucket') is not None:
13764
+ self.bucket = m.get('bucket')
13765
+ if m.get('compressionType') is not None:
13766
+ self.compression_type = m.get('compressionType')
13767
+ if m.get('contentType') is not None:
13768
+ self.content_type = m.get('contentType')
13769
+ if m.get('prefix') is not None:
13770
+ self.prefix = m.get('prefix')
13771
+ if m.get('roleArn') is not None:
13772
+ self.role_arn = m.get('roleArn')
13773
+ if m.get('type') is not None:
13774
+ self.type = m.get('type')
13775
+ return self
13776
+
13777
+
13778
+ class ListDownloadJobsResponseBodyResultsConfiguration(TeaModel):
13779
+ def __init__(
13780
+ self,
13781
+ allow_in_complete: str = None,
13782
+ from_time: int = None,
13783
+ logstore: str = None,
13784
+ power_sql: bool = None,
13785
+ query: str = None,
13786
+ sink: ListDownloadJobsResponseBodyResultsConfigurationSink = None,
13787
+ to_time: int = None,
13788
+ ):
13789
+ self.allow_in_complete = allow_in_complete
13790
+ # 起点时间戳(精确到秒)
13791
+ self.from_time = from_time
13792
+ # 源logstore
13793
+ self.logstore = logstore
13794
+ # 是否启用powerSql
13795
+ self.power_sql = power_sql
13796
+ # 查询语句
13797
+ self.query = query
13798
+ # 导出配置
13799
+ self.sink = sink
13800
+ # 结束时间戳(精确到秒)
13801
+ self.to_time = to_time
13802
+
13803
+ def validate(self):
13804
+ if self.sink:
13805
+ self.sink.validate()
13806
+
13807
+ def to_map(self):
13808
+ _map = super().to_map()
13809
+ if _map is not None:
13810
+ return _map
13811
+
13812
+ result = dict()
13813
+ if self.allow_in_complete is not None:
13814
+ result['allowInComplete'] = self.allow_in_complete
13815
+ if self.from_time is not None:
13816
+ result['fromTime'] = self.from_time
13817
+ if self.logstore is not None:
13818
+ result['logstore'] = self.logstore
13819
+ if self.power_sql is not None:
13820
+ result['powerSql'] = self.power_sql
13821
+ if self.query is not None:
13822
+ result['query'] = self.query
13823
+ if self.sink is not None:
13824
+ result['sink'] = self.sink.to_map()
13825
+ if self.to_time is not None:
13826
+ result['toTime'] = self.to_time
13827
+ return result
13828
+
13829
+ def from_map(self, m: dict = None):
13830
+ m = m or dict()
13831
+ if m.get('allowInComplete') is not None:
13832
+ self.allow_in_complete = m.get('allowInComplete')
13833
+ if m.get('fromTime') is not None:
13834
+ self.from_time = m.get('fromTime')
13835
+ if m.get('logstore') is not None:
13836
+ self.logstore = m.get('logstore')
13837
+ if m.get('powerSql') is not None:
13838
+ self.power_sql = m.get('powerSql')
13839
+ if m.get('query') is not None:
13840
+ self.query = m.get('query')
13841
+ if m.get('sink') is not None:
13842
+ temp_model = ListDownloadJobsResponseBodyResultsConfigurationSink()
13843
+ self.sink = temp_model.from_map(m['sink'])
13844
+ if m.get('toTime') is not None:
13845
+ self.to_time = m.get('toTime')
13846
+ return self
13847
+
13848
+
13849
+ class ListDownloadJobsResponseBodyResultsExecutionDetails(TeaModel):
13850
+ def __init__(
13851
+ self,
13852
+ check_sum: str = None,
13853
+ error_message: str = None,
13854
+ execute_time: int = None,
13855
+ file_path: str = None,
13856
+ file_size: int = None,
13857
+ log_count: int = None,
13858
+ progress: int = None,
13859
+ ):
13860
+ self.check_sum = check_sum
13861
+ # 下载错误信息
13862
+ self.error_message = error_message
13863
+ # 下载执行时间
13864
+ self.execute_time = execute_time
13865
+ # 下载结果链接
13866
+ self.file_path = file_path
13867
+ # 下载文件大小
13868
+ self.file_size = file_size
13869
+ # 下载日志条数
13870
+ self.log_count = log_count
13871
+ # 下载进度
13872
+ self.progress = progress
13873
+
13874
+ def validate(self):
13875
+ pass
13876
+
13877
+ def to_map(self):
13878
+ _map = super().to_map()
13879
+ if _map is not None:
13880
+ return _map
13881
+
13882
+ result = dict()
13883
+ if self.check_sum is not None:
13884
+ result['checkSum'] = self.check_sum
13885
+ if self.error_message is not None:
13886
+ result['errorMessage'] = self.error_message
13887
+ if self.execute_time is not None:
13888
+ result['executeTime'] = self.execute_time
13889
+ if self.file_path is not None:
13890
+ result['filePath'] = self.file_path
13891
+ if self.file_size is not None:
13892
+ result['fileSize'] = self.file_size
13893
+ if self.log_count is not None:
13894
+ result['logCount'] = self.log_count
13895
+ if self.progress is not None:
13896
+ result['progress'] = self.progress
13897
+ return result
13898
+
13899
+ def from_map(self, m: dict = None):
13900
+ m = m or dict()
13901
+ if m.get('checkSum') is not None:
13902
+ self.check_sum = m.get('checkSum')
13903
+ if m.get('errorMessage') is not None:
13904
+ self.error_message = m.get('errorMessage')
13905
+ if m.get('executeTime') is not None:
13906
+ self.execute_time = m.get('executeTime')
13907
+ if m.get('filePath') is not None:
13908
+ self.file_path = m.get('filePath')
13909
+ if m.get('fileSize') is not None:
13910
+ self.file_size = m.get('fileSize')
13911
+ if m.get('logCount') is not None:
13912
+ self.log_count = m.get('logCount')
13913
+ if m.get('progress') is not None:
13914
+ self.progress = m.get('progress')
13915
+ return self
13916
+
13917
+
13918
+ class ListDownloadJobsResponseBodyResults(TeaModel):
13919
+ def __init__(
13920
+ self,
13921
+ configuration: ListDownloadJobsResponseBodyResultsConfiguration = None,
13922
+ create_time: str = None,
13923
+ description: str = None,
13924
+ display_name: str = None,
13925
+ execution_details: ListDownloadJobsResponseBodyResultsExecutionDetails = None,
13926
+ name: str = None,
13927
+ status: str = None,
13928
+ ):
13929
+ # 下载配置
13930
+ self.configuration = configuration
13931
+ self.create_time = create_time
13932
+ # 任务描述
13933
+ self.description = description
13934
+ # 任务显示名称
13935
+ self.display_name = display_name
13936
+ # 任务执行细节
13937
+ self.execution_details = execution_details
13938
+ # 代表资源名称的资源属性字段
13939
+ self.name = name
13940
+ self.status = status
13941
+
13942
+ def validate(self):
13943
+ if self.configuration:
13944
+ self.configuration.validate()
13945
+ if self.execution_details:
13946
+ self.execution_details.validate()
13947
+
13948
+ def to_map(self):
13949
+ _map = super().to_map()
13950
+ if _map is not None:
13951
+ return _map
13952
+
13953
+ result = dict()
13954
+ if self.configuration is not None:
13955
+ result['configuration'] = self.configuration.to_map()
13956
+ if self.create_time is not None:
13957
+ result['createTime'] = self.create_time
13958
+ if self.description is not None:
13959
+ result['description'] = self.description
13960
+ if self.display_name is not None:
13961
+ result['displayName'] = self.display_name
13962
+ if self.execution_details is not None:
13963
+ result['executionDetails'] = self.execution_details.to_map()
13964
+ if self.name is not None:
13965
+ result['name'] = self.name
13966
+ if self.status is not None:
13967
+ result['status'] = self.status
13968
+ return result
13969
+
13970
+ def from_map(self, m: dict = None):
13971
+ m = m or dict()
13972
+ if m.get('configuration') is not None:
13973
+ temp_model = ListDownloadJobsResponseBodyResultsConfiguration()
13974
+ self.configuration = temp_model.from_map(m['configuration'])
13975
+ if m.get('createTime') is not None:
13976
+ self.create_time = m.get('createTime')
13977
+ if m.get('description') is not None:
13978
+ self.description = m.get('description')
13979
+ if m.get('displayName') is not None:
13980
+ self.display_name = m.get('displayName')
13981
+ if m.get('executionDetails') is not None:
13982
+ temp_model = ListDownloadJobsResponseBodyResultsExecutionDetails()
13983
+ self.execution_details = temp_model.from_map(m['executionDetails'])
13984
+ if m.get('name') is not None:
13985
+ self.name = m.get('name')
13986
+ if m.get('status') is not None:
13987
+ self.status = m.get('status')
13988
+ return self
13989
+
13990
+
13991
+ class ListDownloadJobsResponseBody(TeaModel):
13992
+ def __init__(
13993
+ self,
13994
+ count: int = None,
13995
+ results: List[ListDownloadJobsResponseBodyResults] = None,
13996
+ total: int = None,
13997
+ ):
13998
+ self.count = count
13999
+ self.results = results
14000
+ self.total = total
14001
+
14002
+ def validate(self):
14003
+ if self.results:
14004
+ for k in self.results:
14005
+ if k:
14006
+ k.validate()
14007
+
14008
+ def to_map(self):
14009
+ _map = super().to_map()
14010
+ if _map is not None:
14011
+ return _map
14012
+
14013
+ result = dict()
14014
+ if self.count is not None:
14015
+ result['count'] = self.count
14016
+ result['results'] = []
14017
+ if self.results is not None:
14018
+ for k in self.results:
14019
+ result['results'].append(k.to_map() if k else None)
14020
+ if self.total is not None:
14021
+ result['total'] = self.total
14022
+ return result
14023
+
14024
+ def from_map(self, m: dict = None):
14025
+ m = m or dict()
14026
+ if m.get('count') is not None:
14027
+ self.count = m.get('count')
14028
+ self.results = []
14029
+ if m.get('results') is not None:
14030
+ for k in m.get('results'):
14031
+ temp_model = ListDownloadJobsResponseBodyResults()
14032
+ self.results.append(temp_model.from_map(k))
14033
+ if m.get('total') is not None:
14034
+ self.total = m.get('total')
14035
+ return self
14036
+
14037
+
14038
+ class ListDownloadJobsResponse(TeaModel):
14039
+ def __init__(
14040
+ self,
14041
+ headers: Dict[str, str] = None,
14042
+ status_code: int = None,
14043
+ body: ListDownloadJobsResponseBody = None,
14044
+ ):
14045
+ self.headers = headers
14046
+ self.status_code = status_code
14047
+ self.body = body
14048
+
14049
+ def validate(self):
14050
+ if self.body:
14051
+ self.body.validate()
14052
+
14053
+ def to_map(self):
14054
+ _map = super().to_map()
14055
+ if _map is not None:
14056
+ return _map
14057
+
14058
+ result = dict()
14059
+ if self.headers is not None:
14060
+ result['headers'] = self.headers
14061
+ if self.status_code is not None:
14062
+ result['statusCode'] = self.status_code
14063
+ if self.body is not None:
14064
+ result['body'] = self.body.to_map()
14065
+ return result
14066
+
14067
+ def from_map(self, m: dict = None):
14068
+ m = m or dict()
14069
+ if m.get('headers') is not None:
14070
+ self.headers = m.get('headers')
14071
+ if m.get('statusCode') is not None:
14072
+ self.status_code = m.get('statusCode')
14073
+ if m.get('body') is not None:
14074
+ temp_model = ListDownloadJobsResponseBody()
14075
+ self.body = temp_model.from_map(m['body'])
14076
+ return self
14077
+
14078
+
12803
14079
  class ListETLsRequest(TeaModel):
12804
14080
  def __init__(
12805
14081
  self,