@@ -351,6 +351,46 @@ def get_valid_refs(self):
351
351
results [pseudoparam ] = element
352
352
return results
353
353
354
+ def _get_valid_getatts_from_schema (self , schema , pointer ):
355
+ results = {}
356
+ try :
357
+ item = resolve_pointer (schema , pointer )
358
+ except KeyError :
359
+ return results
360
+
361
+ pointer = pointer .replace ("/properties/" , "" ).replace ("#/definitions/" , "" )
362
+
363
+ item_type = item .get ("type" )
364
+ if item_type is None :
365
+ if "$ref" in item :
366
+ results .update (
367
+ self ._get_valid_getatts_from_schema (schema , item .get ("$ref" ))
368
+ )
369
+ else :
370
+ return results
371
+ _type = None
372
+ primitive_type = None
373
+ if item_type == "string" :
374
+ primitive_type = "String"
375
+ elif item_type == "number" :
376
+ primitive_type = "Double"
377
+ elif item_type == "integer" :
378
+ primitive_type = "Integer"
379
+ elif item_type == "boolean" :
380
+ primitive_type = "Boolean"
381
+ elif item_type == "array" :
382
+ _type = "List"
383
+ primitive_type = "String"
384
+
385
+ results ["." .join (pointer .split ("/" ))] = {}
386
+ if _type :
387
+ results ["." .join (pointer .split ("/" ))]["Type" ] = _type
388
+ results ["." .join (pointer .split ("/" ))]["PrimitiveItemType" ] = primitive_type
389
+ elif primitive_type :
390
+ results ["." .join (pointer .split ("/" ))]["PrimitiveType" ] = primitive_type
391
+
392
+ return results
393
+
354
394
# pylint: disable=too-many-locals
355
395
def get_valid_getatts (self ):
356
396
resourcetypes = cfnlint .helpers .RESOURCE_SPECS ["us-east-1" ].get ("ResourceTypes" )
@@ -424,40 +464,11 @@ def build_output_string(resource_type, property_name):
424
464
if value ["Type" ] == schema ["typeName" ]:
425
465
results [name ] = {}
426
466
for ro_property in schema .get ("readOnlyProperties" , []):
427
- try :
428
- item = resolve_pointer (schema , ro_property )
429
- except KeyError :
430
- continue
431
- item_type = item ["type" ]
432
- _type = None
433
- primitive_type = None
434
- if item_type == "string" :
435
- primitive_type = "String"
436
- elif item_type == "number" :
437
- primitive_type = "Double"
438
- elif item_type == "integer" :
439
- primitive_type = "Integer"
440
- elif item_type == "boolean" :
441
- primitive_type = "Boolean"
442
- elif item_type == "array" :
443
- _type = "List"
444
- primitive_type = "String"
445
-
446
- ro_property = ro_property .replace (
447
- "/properties/" , ""
467
+ results [name ].update (
468
+ self ._get_valid_getatts_from_schema (
469
+ schema , ro_property
470
+ )
448
471
)
449
- results [name ]["." .join (ro_property .split ("/" ))] = {}
450
- if _type :
451
- results [name ]["." .join (ro_property .split ("/" ))][
452
- "Type"
453
- ] = _type
454
- results [name ]["." .join (ro_property .split ("/" ))][
455
- "PrimitiveItemType"
456
- ] = primitive_type
457
- elif primitive_type :
458
- results [name ]["." .join (ro_property .split ("/" ))][
459
- "PrimitiveType"
460
- ] = primitive_type
461
472
462
473
return results
463
474
0 commit comments