pycep-parser 0.7.0.dev7__tar.gz → 0.7.0.dev8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/PKG-INFO +1 -1
  2. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/bicep.lark +3 -0
  3. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/transformer.py +33 -1
  4. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/typing.py +31 -2
  5. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pyproject.toml +2 -2
  6. pycep_parser-0.7.0.dev8/tests/examples/basic/07-func/main.bicep +27 -0
  7. pycep_parser-0.7.0.dev8/tests/examples/basic/07-func/result.json +140 -0
  8. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_parse_general.py +13 -0
  9. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/LICENSE +0 -0
  10. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/README.md +0 -0
  11. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/__init__.py +0 -0
  12. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/main.py +0 -0
  13. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/models.py +0 -0
  14. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/py.typed +0 -0
  15. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/rules/__init__.py +0 -0
  16. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/rules/decorators.py +0 -0
  17. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/rules/functions.py +0 -0
  18. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/utils.py +0 -0
  19. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/pycep/validator.py +0 -0
  20. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/__init__.py +0 -0
  21. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/01-param/main.bicep +0 -0
  22. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/01-param/result.json +0 -0
  23. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/02-var/main.bicep +0 -0
  24. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/02-var/result.json +0 -0
  25. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/03-output/main.bicep +0 -0
  26. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/03-output/result.json +0 -0
  27. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/04-resource/main.bicep +0 -0
  28. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/04-resource/result.json +0 -0
  29. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/05-module/main.bicep +0 -0
  30. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/05-module/result.json +0 -0
  31. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/06-type/main.bicep +0 -0
  32. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/basic/06-type/result.json +0 -0
  33. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complete/playground/main.bicep +0 -0
  34. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complete/playground/result-line-numbers.json +0 -0
  35. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complete/playground/result.json +0 -0
  36. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/01-param-decorator/main.bicep +0 -0
  37. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/01-param-decorator/result.json +0 -0
  38. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/02-resource-module-decorator/main.bicep +0 -0
  39. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/02-resource-module-decorator/result.json +0 -0
  40. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/03-resource-existing/main.bicep +0 -0
  41. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/03-resource-existing/result.json +0 -0
  42. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/04-child-resource/main.bicep +0 -0
  43. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/04-child-resource/result.json +0 -0
  44. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/05-deploy-condition/main.bicep +0 -0
  45. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/05-deploy-condition/result.json +0 -0
  46. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/06-output-decorator/main.bicep +0 -0
  47. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/06-output-decorator/result.json +0 -0
  48. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/07-module-alias/main.bicep +0 -0
  49. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/07-module-alias/result.json +0 -0
  50. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/08-var-decorator/main.bicep +0 -0
  51. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/08-var-decorator/result.json +0 -0
  52. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/09-metadata/main.bicep +0 -0
  53. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/09-metadata/result.json +0 -0
  54. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/10-extension/main.bicep +0 -0
  55. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/10-extension/result.json +0 -0
  56. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/11-typed-var/main.bicep +0 -0
  57. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/11-typed-var/result.json +0 -0
  58. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/12-nullable-type/main.bicep +0 -0
  59. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/12-nullable-type/result.json +0 -0
  60. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/13-import/main.bicep +0 -0
  61. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/13-import/result.json +0 -0
  62. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/14-type-decorator/main.bicep +0 -0
  63. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/complex/14-type-decorator/result.json +0 -0
  64. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/invalid/invalid_multi_line.bicep +0 -0
  65. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/array/main.bicep +0 -0
  66. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/array/result.json +0 -0
  67. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/array-index/main.bicep +0 -0
  68. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/array-index/result.json +0 -0
  69. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/array-w-newline/main.bicep +0 -0
  70. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/array-w-newline/result.json +0 -0
  71. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/child/main.bicep +0 -0
  72. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/child/result.json +0 -0
  73. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/condition/main.bicep +0 -0
  74. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/condition/result.json +0 -0
  75. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/object/main.bicep +0 -0
  76. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/loop/object/result.json +0 -0
  77. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/scope/management_group/main.bicep +0 -0
  78. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/scope/management_group/result.json +0 -0
  79. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/scope/resource_group/main.bicep +0 -0
  80. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/scope/resource_group/result.json +0 -0
  81. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/scope/subscription/main.bicep +0 -0
  82. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/scope/subscription/result.json +0 -0
  83. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/scope/tenant/main.bicep +0 -0
  84. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/examples/scope/tenant/result.json +0 -0
  85. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/__init__.py +0 -0
  86. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/any/any/main.bicep +0 -0
  87. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/any/any/result.json +0 -0
  88. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/array/main.bicep +0 -0
  89. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/array/result.json +0 -0
  90. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/concat/main.bicep +0 -0
  91. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/concat/result.json +0 -0
  92. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/contains/main.bicep +0 -0
  93. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/contains/result.json +0 -0
  94. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/empty/main.bicep +0 -0
  95. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/empty/result.json +0 -0
  96. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/first/main.bicep +0 -0
  97. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/first/result.json +0 -0
  98. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/flatten/main.bicep +0 -0
  99. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/flatten/result.json +0 -0
  100. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/intersection/main.bicep +0 -0
  101. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/intersection/result.json +0 -0
  102. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/last/main.bicep +0 -0
  103. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/last/result.json +0 -0
  104. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/length/main.bicep +0 -0
  105. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/length/result.json +0 -0
  106. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/max/main.bicep +0 -0
  107. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/max/result.json +0 -0
  108. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/min/main.bicep +0 -0
  109. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/min/result.json +0 -0
  110. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/skip/main.bicep +0 -0
  111. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/skip/result.json +0 -0
  112. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/take/main.bicep +0 -0
  113. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/take/result.json +0 -0
  114. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/union/main.bicep +0 -0
  115. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/array/union/result.json +0 -0
  116. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/date/date_time_add/main.bicep +0 -0
  117. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/date/date_time_add/result.json +0 -0
  118. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/date/date_time_from_epoch/main.bicep +0 -0
  119. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/date/date_time_from_epoch/result.json +0 -0
  120. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/date/date_time_to_epoch/main.bicep +0 -0
  121. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/date/date_time_to_epoch/result.json +0 -0
  122. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/date/utc_now/main.bicep +0 -0
  123. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/date/utc_now/result.json +0 -0
  124. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/deployment/deployment/main.bicep +0 -0
  125. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/deployment/deployment/result.json +0 -0
  126. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/deployment/environment/main.bicep +0 -0
  127. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/deployment/environment/result.json +0 -0
  128. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/file/load_file_as_base64/main.bicep +0 -0
  129. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/file/load_file_as_base64/result.json +0 -0
  130. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/file/load_json_content/main.bicep +0 -0
  131. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/file/load_json_content/result.json +0 -0
  132. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/file/load_text_content/main.bicep +0 -0
  133. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/file/load_text_content/result.json +0 -0
  134. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/file/load_yaml_content/main.bicep +0 -0
  135. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/file/load_yaml_content/result.json +0 -0
  136. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/lambda/filter/main.bicep +0 -0
  137. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/lambda/filter/result.json +0 -0
  138. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/logical/bool/main.bicep +0 -0
  139. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/logical/bool/result.json +0 -0
  140. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/numeric/int/main.bicep +0 -0
  141. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/numeric/int/result.json +0 -0
  142. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/object/json/main.bicep +0 -0
  143. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/object/json/result.json +0 -0
  144. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/extension_resource_id/main.bicep +0 -0
  145. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/extension_resource_id/result.json +0 -0
  146. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/list_keys/main.bicep +0 -0
  147. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/list_keys/result.json +0 -0
  148. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/management_group_resource_id/main.bicep +0 -0
  149. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/management_group_resource_id/result.json +0 -0
  150. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/pick_zones/main.bicep +0 -0
  151. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/pick_zones/result.json +0 -0
  152. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/reference/main.bicep +0 -0
  153. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/reference/result.json +0 -0
  154. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/resource_id/main.bicep +0 -0
  155. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/resource_id/result.json +0 -0
  156. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/subscription_resource_id/main.bicep +0 -0
  157. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/subscription_resource_id/result.json +0 -0
  158. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/tenant_resource_id/main.bicep +0 -0
  159. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/resource/tenant_resource_id/result.json +0 -0
  160. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/scope/management_group/main.bicep +0 -0
  161. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/scope/management_group/result.json +0 -0
  162. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/scope/resource_group/main.bicep +0 -0
  163. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/scope/resource_group/result.json +0 -0
  164. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/scope/subscription/main.bicep +0 -0
  165. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/scope/subscription/result.json +0 -0
  166. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/scope/tenant/main.bicep +0 -0
  167. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/scope/tenant/result.json +0 -0
  168. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/base64/main.bicep +0 -0
  169. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/base64/result.json +0 -0
  170. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/base64_to_json/main.bicep +0 -0
  171. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/base64_to_json/result.json +0 -0
  172. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/base64_to_string/main.bicep +0 -0
  173. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/base64_to_string/result.json +0 -0
  174. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/data_uri/main.bicep +0 -0
  175. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/data_uri/result.json +0 -0
  176. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/data_uri_to_string/main.bicep +0 -0
  177. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/data_uri_to_string/result.json +0 -0
  178. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/ends_with/main.bicep +0 -0
  179. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/ends_with/result.json +0 -0
  180. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/format/main.bicep +0 -0
  181. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/format/result.json +0 -0
  182. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/guid/main.bicep +0 -0
  183. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/guid/result.json +0 -0
  184. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/index_of/main.bicep +0 -0
  185. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/index_of/result.json +0 -0
  186. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/join/main.bicep +0 -0
  187. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/join/result.json +0 -0
  188. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/last_index_of/main.bicep +0 -0
  189. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/last_index_of/result.json +0 -0
  190. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/new_guid/main.bicep +0 -0
  191. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/new_guid/result.json +0 -0
  192. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/pad_left/main.bicep +0 -0
  193. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/pad_left/result.json +0 -0
  194. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/replace/main.bicep +0 -0
  195. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/replace/result.json +0 -0
  196. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/split/main.bicep +0 -0
  197. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/split/result.json +0 -0
  198. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/starts_with/main.bicep +0 -0
  199. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/starts_with/result.json +0 -0
  200. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/string/main.bicep +0 -0
  201. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/string/result.json +0 -0
  202. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/substring/main.bicep +0 -0
  203. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/substring/result.json +0 -0
  204. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/to_lower/main.bicep +0 -0
  205. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/to_lower/result.json +0 -0
  206. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/to_upper/main.bicep +0 -0
  207. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/to_upper/result.json +0 -0
  208. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/trim/main.bicep +0 -0
  209. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/trim/result.json +0 -0
  210. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/unique_string/main.bicep +0 -0
  211. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/unique_string/result.json +0 -0
  212. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/uri/main.bicep +0 -0
  213. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/uri/result.json +0 -0
  214. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/uri_component/main.bicep +0 -0
  215. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/uri_component/result.json +0 -0
  216. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/uri_component_to_string/main.bicep +0 -0
  217. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/examples/string/uri_component_to_string/result.json +0 -0
  218. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_any.py +0 -0
  219. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_array.py +0 -0
  220. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_date.py +0 -0
  221. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_deployment.py +0 -0
  222. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_file.py +0 -0
  223. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_lambda.py +0 -0
  224. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_logical.py +0 -0
  225. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_numeric.py +0 -0
  226. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_object.py +0 -0
  227. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_resource.py +0 -0
  228. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_scope.py +0 -0
  229. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_function/test_parse_string.py +0 -0
  230. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_main.py +0 -0
  231. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/function/main.bicep +0 -0
  232. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/function/result.json +0 -0
  233. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/index/main.bicep +0 -0
  234. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/index/result.json +0 -0
  235. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/nested_resource/main.bicep +0 -0
  236. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/nested_resource/result.json +0 -0
  237. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/non_null/main.bicep +0 -0
  238. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/non_null/result.json +0 -0
  239. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/property/main.bicep +0 -0
  240. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/accessor/property/result.json +0 -0
  241. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/equals/main.bicep +0 -0
  242. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/equals/result.json +0 -0
  243. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/equals_case_insensitive/main.bicep +0 -0
  244. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/equals_case_insensitive/result.json +0 -0
  245. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/greater_than/main.bicep +0 -0
  246. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/greater_than/result.json +0 -0
  247. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/greater_than_or_equals/main.bicep +0 -0
  248. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/greater_than_or_equals/result.json +0 -0
  249. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/less_than/main.bicep +0 -0
  250. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/less_than/result.json +0 -0
  251. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/less_than_or_equals/main.bicep +0 -0
  252. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/less_than_or_equals/result.json +0 -0
  253. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/not_equals/main.bicep +0 -0
  254. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/not_equals/result.json +0 -0
  255. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/not_equals_case_insensitive/main.bicep +0 -0
  256. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/comparison/not_equals_case_insensitive/result.json +0 -0
  257. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/and/main.bicep +0 -0
  258. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/and/result.json +0 -0
  259. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/coalesce/main.bicep +0 -0
  260. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/coalesce/result.json +0 -0
  261. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/conditional/main.bicep +0 -0
  262. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/conditional/result.json +0 -0
  263. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/not/main.bicep +0 -0
  264. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/not/result.json +0 -0
  265. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/or/main.bicep +0 -0
  266. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/logical/or/result.json +0 -0
  267. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/add/main.bicep +0 -0
  268. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/add/result.json +0 -0
  269. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/divide/main.bicep +0 -0
  270. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/divide/result.json +0 -0
  271. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/minus/main.bicep +0 -0
  272. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/minus/result.json +0 -0
  273. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/modulo/main.bicep +0 -0
  274. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/modulo/result.json +0 -0
  275. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/multiply/main.bicep +0 -0
  276. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/multiply/result.json +0 -0
  277. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/substract/main.bicep +0 -0
  278. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/numeric/substract/result.json +0 -0
  279. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/safe_dereference/main.bicep +0 -0
  280. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/examples/safe_dereference/result.json +0 -0
  281. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/test_parse_accessor.py +0 -0
  282. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/test_parse_comparison.py +0 -0
  283. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/test_parse_logical.py +0 -0
  284. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/test_parse_numeric.py +0 -0
  285. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_operator/test_parse_safe_dereference.py +0 -0
  286. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_parse_loop.py +0 -0
  287. {pycep_parser-0.7.0.dev7 → pycep_parser-0.7.0.dev8}/tests/test_parse_scope.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycep-parser
3
- Version: 0.7.0.dev7
3
+ Version: 0.7.0.dev8
4
4
  Summary: A Python based Bicep parser
5
5
  Keywords: bicep,parser,lark
6
6
  Author: Anton Grübel
@@ -10,6 +10,7 @@ element: "targetScope" "=" QUOTED_INTERPOLATION
10
10
  | [decorators] "resource" STRING type_api_pair [EXISTING] "=" resource_value -> resource
11
11
  | [decorators] "module" STRING module_path "=" module_value -> module
12
12
  | [decorators] "type" STRING "=" type_value -> custom_type
13
+ | [decorators] "func" _func_statement -> custom_func
13
14
 
14
15
  ?value: _NEWLINE? "null" -> null
15
16
  | _NEWLINE? "true" -> true
@@ -30,6 +31,8 @@ element: "targetScope" "=" QUOTED_INTERPOLATION
30
31
 
31
32
  _import_statement: (("{" import_alias ("," import_alias)* "}" | import_alias) "from" QUOTED_INTERPOLATION | QUOTED_INTERPOLATION)
32
33
 
34
+ _func_statement: STRING "(" (STRING data_type ("," STRING data_type)*)? ")" data_type "=>" value_brackets
35
+
33
36
  // element values
34
37
 
35
38
  ?var_value: value_brackets | loop
@@ -63,7 +63,7 @@ class BicepToJson(Transformer[Token, pycep_typing.BicepJson]):
63
63
  # very unlikely this will happen in a real Bicep file, but in test files possible
64
64
  continue
65
65
  for key, value in arg.items():
66
- result.setdefault(key, {})[value["__name__"]] = value["__attrs__"] # ty: ignore[non-subscriptable, no-matching-overload]
66
+ result.setdefault(key, {})[value["__name__"]] = value["__attrs__"] # ty: ignore[not-subscriptable, no-matching-overload]
67
67
 
68
68
  return result
69
69
 
@@ -356,6 +356,38 @@ class BicepToJson(Transformer[Token, pycep_typing.BicepJson]):
356
356
 
357
357
  return result
358
358
 
359
+ @v_args(meta=True)
360
+ def custom_func(
361
+ self,
362
+ meta: Meta,
363
+ args: tuple[
364
+ list[pycep_typing.Decorator] | None,
365
+ Token,
366
+ pycep_typing.PossibleValue,
367
+ pycep_typing.PossibleValue,
368
+ ],
369
+ ) -> pycep_typing.FunctionResponse:
370
+ decorators, name, *arg_type_pairs, return_type, expression = args
371
+
372
+ result: pycep_typing.FunctionResponse = {
373
+ "functions": {
374
+ "__name__": str(name),
375
+ "__attrs__": {
376
+ "decorators": decorators or [],
377
+ # TODO: change `zip` to `itertools.pairwise` when updating to Python 3.10
378
+ "args": {str(arg_name): arg_type for arg_name, arg_type in zip(*[iter(arg_type_pairs)] * 2)},
379
+ "type": return_type,
380
+ "expression": expression,
381
+ },
382
+ }
383
+ }
384
+
385
+ if self.add_line_numbers:
386
+ result["functions"]["__attrs__"]["__start_line__"] = meta.line
387
+ result["functions"]["__attrs__"]["__end_line__"] = meta.end_line
388
+
389
+ return result
390
+
359
391
  ####################
360
392
  #
361
393
  # element type extras
@@ -10,7 +10,7 @@ PossibleNoneValue: TypeAlias = "PossibleValue | None"
10
10
  ModulePath: TypeAlias = "LocalModulePath | BicepRegistryModulePath | BicepRegistryAliasModulePath | TemplateSpecModulePath | TemplateSpecAliasModulePath"
11
11
  ModuleDetail: TypeAlias = "_LocalModulePathDetail | _BicepRegistryModulePathDetail | _BicepRegistryAliasModulePathDetail | _TemplateSpecModulePathDetail | _TemplateSpecAliasModulePathDetail"
12
12
  LoopType: TypeAlias = "LoopArray | LoopArrayIndex | LoopObject | LoopRange"
13
- ElementResponse: TypeAlias = "ImportResponse | ParamResponse | VarResponse | ResourceResponse | ModuleResponse | OutputResponse | TypeResponse | ExtensionResponse"
13
+ ElementResponse: TypeAlias = "ImportResponse | ParamResponse | VarResponse | ResourceResponse | ModuleResponse | OutputResponse | TypeResponse | ExtensionResponse | FunctionResponse"
14
14
  Decorator: TypeAlias = "DecoratorAllowed | DecoratorBatchSize | DecoratorDescription | DecoratorExport | DecoratorMinLength | DecoratorMaxLength | DecoratorMinValue | DecoratorMaxValue | DecoratorMetadata | DecoratorSealed | DecoratorSecure | UnknownDecorator"
15
15
 
16
16
  ComparisonOperators: TypeAlias = "GreaterThanOrEquals | GreaterThan | LessThanOrEquals | LessThan | Equals | NotEquals | EqualsCaseInsensitive | NotEqualsCaseInsensitive"
@@ -209,8 +209,34 @@ class ApiTypeVersion(TypedDict):
209
209
  api_version: str
210
210
 
211
211
 
212
+ TypeAttributes: TypeAlias = VariableAttributes
213
+
214
+
215
+ class _Types(TypedDict):
216
+ __name__: str
217
+ __attrs__: TypeAttributes
218
+
219
+
212
220
  class TypeResponse(TypedDict):
213
- types: _Variables
221
+ types: _Types
222
+
223
+
224
+ class FunctionAttributes(TypedDict):
225
+ decorators: list[Decorator]
226
+ args: dict[str, str]
227
+ type: str
228
+ expression: PossibleValue
229
+ __start_line__: NotRequired[int]
230
+ __end_line__: NotRequired[int]
231
+
232
+
233
+ class _Functions(TypedDict):
234
+ __name__: str
235
+ __attrs__: FunctionAttributes
236
+
237
+
238
+ class FunctionResponse(TypedDict):
239
+ functions: _Functions
214
240
 
215
241
 
216
242
  ####################
@@ -1337,6 +1363,9 @@ class PropertyAccessor(TypedDict):
1337
1363
  class BicepJson(TypedDict):
1338
1364
  globals: GlobalsAttributes
1339
1365
  imports: NotRequired[dict[str, ImportAttributes]]
1366
+ extensions: NotRequired[dict[str, ExtensionAttributes]]
1367
+ types: NotRequired[dict[str, VariableAttributes]]
1368
+ functions: NotRequired[dict[str, FunctionAttributes]]
1340
1369
  parameters: NotRequired[dict[str, ParameterAttributes]]
1341
1370
  variables: NotRequired[dict[str, VariableAttributes]]
1342
1371
  resources: NotRequired[dict[str, ResourceAttributes]]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pycep-parser"
3
- version = "0.7.0.dev7"
3
+ version = "0.7.0.dev8"
4
4
  description = "A Python based Bicep parser"
5
5
  authors = [
6
6
  { name = "Anton Grübel", email = "anton.gruebel@gmail.com" }
@@ -39,7 +39,7 @@ dev = [
39
39
  "assertpy>=1.1,<2.0",
40
40
  "prek>=0.2.25,<0.3.0",
41
41
  "pytest>=8.4.2,<9.0.0",
42
- "ty>=0.0.7,<0.1.0",
42
+ "ty>=0.0.8,<0.1.0",
43
43
  ]
44
44
 
45
45
  [build-system]
@@ -0,0 +1,27 @@
1
+ // https://docs.azure.cn/en-us/azure-resource-manager/bicep/user-defined-functions
2
+
3
+ // definition
4
+ func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
5
+
6
+ func sayHelloString(name string) string => 'Hi ${name}!'
7
+
8
+ func sayHelloObject(name string) object => {
9
+ hello: 'Hi ${name}!'
10
+ }
11
+
12
+ func nameArray(name string) array => [
13
+ name
14
+ ]
15
+
16
+ func addNameArray(name string) array => [
17
+ 'Mary'
18
+ 'Bob'
19
+ name
20
+ ]
21
+
22
+ // usage
23
+ output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
24
+ output greetingArray array = map(['Evie', 'Casper'], name => sayHelloString(name))
25
+ output greetingObject object = sayHelloObject('John')
26
+ output nameArray array = nameArray('John')
27
+ output addNameArray array = addNameArray('John')
@@ -0,0 +1,140 @@
1
+ {
2
+ "globals": {
3
+ "scope": {
4
+ "value": "resourceGroup"
5
+ }
6
+ },
7
+ "functions": {
8
+ "buildUrl": {
9
+ "decorators": [],
10
+ "args": {
11
+ "https": "bool",
12
+ "hostname": "string",
13
+ "path": "string"
14
+ },
15
+ "type": "string",
16
+ "expression": "${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}"
17
+ },
18
+ "sayHelloString": {
19
+ "decorators": [],
20
+ "args": {
21
+ "name": "string"
22
+ },
23
+ "type": "string",
24
+ "expression": "Hi ${name}!"
25
+ },
26
+ "sayHelloObject": {
27
+ "decorators": [],
28
+ "args": {
29
+ "name": "string"
30
+ },
31
+ "type": "object",
32
+ "expression": {
33
+ "hello": "Hi ${name}!"
34
+ }
35
+ },
36
+ "nameArray": {
37
+ "decorators": [],
38
+ "args": {
39
+ "name": "string"
40
+ },
41
+ "type": "array",
42
+ "expression": [
43
+ "name"
44
+ ]
45
+ },
46
+ "addNameArray": {
47
+ "decorators": [],
48
+ "args": {
49
+ "name": "string"
50
+ },
51
+ "type": "array",
52
+ "expression": [
53
+ "Mary",
54
+ "Bob",
55
+ "name"
56
+ ]
57
+ }
58
+ },
59
+ "outputs": {
60
+ "azureUrl": {
61
+ "decorators": [],
62
+ "type": "string",
63
+ "value": {
64
+ "function": {
65
+ "type": "buildUrl",
66
+ "parameters": {
67
+ "arg_1": true,
68
+ "arg_2": "microsoft.com",
69
+ "arg_3": "azure"
70
+ }
71
+ }
72
+ }
73
+ },
74
+ "greetingArray": {
75
+ "decorators": [],
76
+ "type": "array",
77
+ "value": {
78
+ "function": {
79
+ "type": "map",
80
+ "parameters": {
81
+ "arg_1": [
82
+ "Evie",
83
+ "Casper"
84
+ ],
85
+ "arg_2": {
86
+ "type": "lambda_expression",
87
+ "detail": {
88
+ "var_1": "name",
89
+ "expression": {
90
+ "function": {
91
+ "type": "sayHelloString",
92
+ "parameters": {
93
+ "arg_1": "name"
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ },
103
+ "greetingObject": {
104
+ "decorators": [],
105
+ "type": "object",
106
+ "value": {
107
+ "function": {
108
+ "type": "sayHelloObject",
109
+ "parameters": {
110
+ "arg_1": "John"
111
+ }
112
+ }
113
+ }
114
+ },
115
+ "nameArray": {
116
+ "decorators": [],
117
+ "type": "array",
118
+ "value": {
119
+ "function": {
120
+ "type": "nameArray",
121
+ "parameters": {
122
+ "arg_1": "John"
123
+ }
124
+ }
125
+ }
126
+ },
127
+ "addNameArray": {
128
+ "decorators": [],
129
+ "type": "array",
130
+ "value": {
131
+ "function": {
132
+ "type": "addNameArray",
133
+ "parameters": {
134
+ "arg_1": "John"
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
@@ -87,6 +87,19 @@ def test_parse_type() -> None:
87
87
  assert_that(result).is_equal_to(expected_result)
88
88
 
89
89
 
90
+ def test_parse_func() -> None:
91
+ # given
92
+ sub_dir_path = EXAMPLES_DIR / "basic/07-func"
93
+ file_path = sub_dir_path / "main.bicep"
94
+ expected_result = json.loads((sub_dir_path / "result.json").read_text())
95
+
96
+ # when
97
+ result = BICEP_PARSER.parse(file_path=file_path)
98
+
99
+ # then
100
+ assert_that(result).is_equal_to(expected_result)
101
+
102
+
90
103
  def test_parse_param_decorator() -> None:
91
104
  # given
92
105
  sub_dir_path = EXAMPLES_DIR / "complex/01-param-decorator"