prancer-basic 3.0.26__tar.gz → 3.0.28__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 (155) hide show
  1. {prancer-basic-3.0.26/src/prancer_basic.egg-info → prancer-basic-3.0.28}/PKG-INFO +1 -1
  2. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/setup.py +1 -1
  3. {prancer-basic-3.0.26 → prancer-basic-3.0.28/src/prancer_basic.egg-info}/PKG-INFO +1 -1
  4. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/prancer_basic.egg-info/SOURCES.txt +3 -0
  5. prancer-basic-3.0.28/src/processor/__init__.py +3 -0
  6. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_azure.py +1 -1
  7. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_google.py +35 -14
  8. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/special_crawler/azure_crawler.py +3 -1
  9. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/special_crawler/base_crawler.py +1 -2
  10. prancer-basic-3.0.28/src/processor/connector/special_crawler/google_crawler.py +173 -0
  11. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/crawler/utils.py +4 -1
  12. prancer-basic-3.0.28/src/processor/helper/xml/xml_utils.py +19 -0
  13. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/logging/log_handler.py +17 -2
  14. prancer-basic-3.0.28/src/processor/templates/terraform/helper/function/__init__.py +0 -0
  15. prancer-basic-3.0.26/src/processor/__init__.py +0 -3
  16. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/LICENSE +0 -0
  17. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/MANIFEST.in +0 -0
  18. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/README.md +0 -0
  19. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/setup.cfg +0 -0
  20. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/prancer_basic.egg-info/dependency_links.txt +0 -0
  21. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/prancer_basic.egg-info/entry_points.txt +0 -0
  22. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/prancer_basic.egg-info/requires.txt +0 -0
  23. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/prancer_basic.egg-info/top_level.txt +0 -0
  24. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/collection_config/__init__.py +0 -0
  25. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/collection_config/config_handler.py +0 -0
  26. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/__init__.py +0 -0
  27. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/comparison_functions.py +0 -0
  28. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/comparisonantlr/__init__.py +0 -0
  29. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/comparisonantlr/comparatorLexer.py +0 -0
  30. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/comparisonantlr/comparatorListener.py +0 -0
  31. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/comparisonantlr/comparatorParser.py +0 -0
  32. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/comparisonantlr/compare_types.py +0 -0
  33. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/comparisonantlr/rule_interpreter.py +0 -0
  34. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/comparisonantlr/test_comparator.py +0 -0
  35. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/interpreter.py +0 -0
  36. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/__init__.py +0 -0
  37. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/arm/__init__.py +0 -0
  38. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/arm/secret_azure_iac.py +0 -0
  39. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/cloudformation/__init__.py +0 -0
  40. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/cloudformation/secret_aws_iac.py +0 -0
  41. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/common/__init__.py +0 -0
  42. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/common/sensitive_extension.py +0 -0
  43. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/deploymentmanager/__init__.py +0 -0
  44. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/deploymentmanager/secret_gcp_iac.py +0 -0
  45. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/terraform/__init__.py +0 -0
  46. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/comparison/rules/terraform/secret_tf.py +0 -0
  47. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/__init__.py +0 -0
  48. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/arn_parser.py +0 -0
  49. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/git_connector/__init__.py +0 -0
  50. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/git_connector/git_functions.py +0 -0
  51. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/git_connector/git_processor.py +0 -0
  52. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/populate_json.py +0 -0
  53. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot.py +0 -0
  54. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_aws.py +0 -0
  55. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_azure_refactor.py +0 -0
  56. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_base.py +0 -0
  57. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_custom.py +0 -0
  58. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_custom_refactor.py +0 -0
  59. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_db.py +0 -0
  60. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_exception.py +0 -0
  61. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_fs.py +0 -0
  62. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_kubernetes.py +0 -0
  63. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/snapshot_utils.py +0 -0
  64. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/special_compliance/__init__.py +0 -0
  65. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/special_compliance/compliances.py +0 -0
  66. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/special_crawler/__init__.py +0 -0
  67. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/special_node_pull/__init__.py +0 -0
  68. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/special_node_pull/azure_node_pull.py +0 -0
  69. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/special_node_pull/base_node_pull.py +0 -0
  70. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/validation.py +0 -0
  71. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/connector/vault.py +0 -0
  72. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/crawler/__init__.py +0 -0
  73. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/crawler/master_snapshot.py +0 -0
  74. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/database/__init__.py +0 -0
  75. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/database/database.py +0 -0
  76. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/__init__.py +0 -0
  77. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/config/__init__.py +0 -0
  78. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/config/config_utils.py +0 -0
  79. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/config/remote_utils.py +0 -0
  80. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/config/rundata_utils.py +0 -0
  81. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/file/__init__.py +0 -0
  82. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/file/file_utils.py +0 -0
  83. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/hcl/__init__.py +0 -0
  84. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/hcl/hcl_utils.py +0 -0
  85. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/hcl/parser.py +0 -0
  86. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/hcl/transformer.py +0 -0
  87. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/hcl/yacc.py +0 -0
  88. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/httpapi/__init__.py +0 -0
  89. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/httpapi/http_utils.py +0 -0
  90. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/httpapi/restapi.py +0 -0
  91. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/httpapi/restapi_azure.py +0 -0
  92. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/jinja/__init__.py +0 -0
  93. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/jinja/jinja_utils.py +0 -0
  94. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/json/__init__.py +0 -0
  95. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/json/commentjson.py +0 -0
  96. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/json/json_utils.py +0 -0
  97. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/__init__.py +0 -0
  98. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/cli_generate_azure_vault_key.py +0 -0
  99. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/cli_populate_json.py +0 -0
  100. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/cli_terraform_to_json.py +0 -0
  101. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/cli_validator.py +0 -0
  102. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/compliance_utils.py +0 -0
  103. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/jinjatemplates/__init__.py +0 -0
  104. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/jinjatemplates/fs_connector.json +0 -0
  105. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/jinjatemplates/git_connector.json +0 -0
  106. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/jinjatemplates/mastersnapshot.json +0 -0
  107. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/utils/jinjatemplates/mastertest.json +0 -0
  108. {prancer-basic-3.0.26/src/processor/helper/yaml → prancer-basic-3.0.28/src/processor/helper/xml}/__init__.py +0 -0
  109. {prancer-basic-3.0.26/src/processor/logging → prancer-basic-3.0.28/src/processor/helper/yaml}/__init__.py +0 -0
  110. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/helper/yaml/yaml_utils.py +0 -0
  111. {prancer-basic-3.0.26/src/processor/reporting → prancer-basic-3.0.28/src/processor/logging}/__init__.py +0 -0
  112. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/logging/dburl_kv.py +0 -0
  113. {prancer-basic-3.0.26/src/processor/template_processor → prancer-basic-3.0.28/src/processor/reporting}/__init__.py +0 -0
  114. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/reporting/json_output.py +0 -0
  115. {prancer-basic-3.0.26/src/processor/template_processor/base → prancer-basic-3.0.28/src/processor/template_processor}/__init__.py +0 -0
  116. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/ack_processor.py +0 -0
  117. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/aso_processor.py +0 -0
  118. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/aws_template_processor.py +0 -0
  119. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/azure_template_processor.py +0 -0
  120. {prancer-basic-3.0.26/src/processor/templates → prancer-basic-3.0.28/src/processor/template_processor/base}/__init__.py +0 -0
  121. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/base/base_template_constatns.py +0 -0
  122. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/base/base_template_processor.py +0 -0
  123. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/google_template_processor.py +0 -0
  124. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/helm_chart_template_processor.py +0 -0
  125. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/json_template_processor.py +0 -0
  126. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/kcc_processor.py +0 -0
  127. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/kubernetes_template_processor.py +0 -0
  128. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/terraform_template_processor.py +0 -0
  129. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/template_processor/yaml_template_processor.py +0 -0
  130. {prancer-basic-3.0.26/src/processor/templates/aws → prancer-basic-3.0.28/src/processor/templates}/__init__.py +0 -0
  131. {prancer-basic-3.0.26/src/processor/templates/azure → prancer-basic-3.0.28/src/processor/templates/aws}/__init__.py +0 -0
  132. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/aws/aws_parser.py +0 -0
  133. {prancer-basic-3.0.26/src/processor/templates/base → prancer-basic-3.0.28/src/processor/templates/azure}/__init__.py +0 -0
  134. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/azure/azure_parser.py +0 -0
  135. {prancer-basic-3.0.26/src/processor/templates/google → prancer-basic-3.0.28/src/processor/templates/base}/__init__.py +0 -0
  136. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/base/template_parser.py +0 -0
  137. {prancer-basic-3.0.26/src/processor/templates/helm → prancer-basic-3.0.28/src/processor/templates/google}/__init__.py +0 -0
  138. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/google/google_parser.py +0 -0
  139. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/google/util.py +0 -0
  140. {prancer-basic-3.0.26/src/processor/templates/kubernetes → prancer-basic-3.0.28/src/processor/templates/helm}/__init__.py +0 -0
  141. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/helm/helm_parser.py +0 -0
  142. {prancer-basic-3.0.26/src/processor/templates/terraform → prancer-basic-3.0.28/src/processor/templates/kubernetes}/__init__.py +0 -0
  143. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/kubernetes/kubernetes_parser.py +0 -0
  144. {prancer-basic-3.0.26/src/processor/templates/terraform/helper → prancer-basic-3.0.28/src/processor/templates/terraform}/__init__.py +0 -0
  145. {prancer-basic-3.0.26/src/processor/templates/terraform/helper/expression → prancer-basic-3.0.28/src/processor/templates/terraform/helper}/__init__.py +0 -0
  146. {prancer-basic-3.0.26/src/processor/templates/terraform/helper/function → prancer-basic-3.0.28/src/processor/templates/terraform/helper/expression}/__init__.py +0 -0
  147. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/helper/expression/base_expressions.py +0 -0
  148. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/helper/expression/terraform_expressions.py +0 -0
  149. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/helper/function/collection_functions.py +0 -0
  150. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/helper/function/encoding_function.py +0 -0
  151. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/helper/function/numeric_functions.py +0 -0
  152. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/helper/function/string_functions.py +0 -0
  153. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/helper/function/terraform_functions.py +0 -0
  154. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/helper/module_parser.py +0 -0
  155. {prancer-basic-3.0.26 → prancer-basic-3.0.28}/src/processor/templates/terraform/terraform_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: prancer-basic
3
- Version: 3.0.26
3
+ Version: 3.0.28
4
4
  Summary: Prancer Basic, http://prancer.io/
5
5
  Home-page: https://github.com/prancer-io/cloud-validation-framework
6
6
  Author: Farshid M/Ajey Khanapuri
@@ -18,7 +18,7 @@ LONG_DESCRIPTION = """
18
18
  setup(
19
19
  name='prancer-basic',
20
20
  # also update the version in processor.__init__.py file
21
- version='3.0.26',
21
+ version='3.0.28',
22
22
  description='Prancer Basic, http://prancer.io/',
23
23
  long_description=LONG_DESCRIPTION,
24
24
  license = "BSD",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: prancer-basic
3
- Version: 3.0.26
3
+ Version: 3.0.28
4
4
  Summary: Prancer Basic, http://prancer.io/
5
5
  Home-page: https://github.com/prancer-io/cloud-validation-framework
6
6
  Author: Farshid M/Ajey Khanapuri
@@ -58,6 +58,7 @@ src/processor/connector/special_compliance/compliances.py
58
58
  src/processor/connector/special_crawler/__init__.py
59
59
  src/processor/connector/special_crawler/azure_crawler.py
60
60
  src/processor/connector/special_crawler/base_crawler.py
61
+ src/processor/connector/special_crawler/google_crawler.py
61
62
  src/processor/connector/special_node_pull/__init__.py
62
63
  src/processor/connector/special_node_pull/azure_node_pull.py
63
64
  src/processor/connector/special_node_pull/base_node_pull.py
@@ -98,6 +99,8 @@ src/processor/helper/utils/jinjatemplates/fs_connector.json
98
99
  src/processor/helper/utils/jinjatemplates/git_connector.json
99
100
  src/processor/helper/utils/jinjatemplates/mastersnapshot.json
100
101
  src/processor/helper/utils/jinjatemplates/mastertest.json
102
+ src/processor/helper/xml/__init__.py
103
+ src/processor/helper/xml/xml_utils.py
101
104
  src/processor/helper/yaml/__init__.py
102
105
  src/processor/helper/yaml/yaml_utils.py
103
106
  src/processor/logging/__init__.py
@@ -0,0 +1,3 @@
1
+ # Prancer Basic
2
+
3
+ __version__ = '3.0.28'
@@ -133,7 +133,7 @@ def get_all_nodes(token, sub_name, sub_id, node, user, snapshot_source):
133
133
  put_in_currentdata('errors', data)
134
134
  logger.info("Get Id returned invalid status: %s", status)
135
135
 
136
- azure_crawler = AzureCrawler(resources, token=token, apiversions=get_api_versions(), subscription_id=sub_id, version=version, scope=scope)
136
+ azure_crawler = AzureCrawler(resources=resources, token=token, apiversions=get_api_versions(), subscription_id=sub_id, version=version, scope=scope)
137
137
  resources = azure_crawler.check_for_special_crawl(nodetype)
138
138
  if resources:
139
139
  for idx, value in enumerate(resources):
@@ -20,6 +20,7 @@ import os
20
20
  import re
21
21
  from googleapiclient import discovery
22
22
  from oauth2client.service_account import ServiceAccountCredentials
23
+ from processor.connector.special_crawler.google_crawler import GoogleCrawler
23
24
  from processor.helper.file.file_utils import exists_file
24
25
  from processor.logging.log_handler import getlogger
25
26
  from processor.helper.httpapi.http_utils import http_get_request
@@ -191,6 +192,8 @@ def get_params_for_get_method(response, url_var, project_id):
191
192
  elif item == r"{secret}":
192
193
  secret_name = response['name']
193
194
  params[item] = secret_name.split('/')[-1]
195
+ elif item == r"{selfLink}" and response.get("selfLink"):
196
+ params[item] = response['selfLink']
194
197
 
195
198
  return params
196
199
  except Exception as ex:
@@ -198,6 +201,9 @@ def get_params_for_get_method(response, url_var, project_id):
198
201
 
199
202
  def get_request_url_get_method(get_method, item, project_id=None):
200
203
  request_url, _ = get_method_api_path(get_method)
204
+ if not request_url:
205
+ return request_url
206
+
201
207
  url_list = request_url.split('/')
202
208
  url_var = []
203
209
  for elements in url_list:
@@ -207,6 +213,7 @@ def get_request_url_get_method(get_method, item, project_id=None):
207
213
 
208
214
  params = get_params_for_get_method(item , url_var, project_id)
209
215
  request_url = requested_get_method_url(request_url, params)
216
+ request_url = re.sub(r'(?<!:)\/\/', '/', request_url)
210
217
  return request_url
211
218
 
212
219
  def get_request_url_list_method(get_method, list_method, item, project_id=None, credentials=None):
@@ -273,6 +280,9 @@ def get_node(credentials, node, snapshot_source, snapshot):
273
280
  "Authorization" : ("Bearer %s" % access_token)
274
281
  }
275
282
 
283
+ status = False
284
+ data = {}
285
+
276
286
  if get_method:
277
287
  node_type = node['get_method'] if node and 'get_method' in node else ""
278
288
  if isinstance(node_type, list) and len(node_type) > 1:
@@ -286,7 +296,14 @@ def get_node(credentials, node, snapshot_source, snapshot):
286
296
  else:
287
297
  logger.error("Invalid node type %s", node_type)
288
298
  return db_record
289
- if method == "POST":
299
+
300
+ google_crawler = GoogleCrawler(access_token=access_token, project_id=project_id)
301
+ process_status, data = google_crawler.check_for_data_process(path, node_type)
302
+
303
+ if process_status:
304
+ status = 200
305
+
306
+ elif method == "POST":
290
307
  base_url = "%s%s" % (base_node_type, ".googleapis.com")
291
308
  request_url = "https://%s/%s" % (base_url, path)
292
309
  logger.info("Invoke request for get snapshot: %s", request_url)
@@ -391,22 +408,26 @@ def get_all_nodes(credentials, node, snapshot_source, snapshot, snapshot_data):
391
408
  "Authorization" : ("Bearer %s" % access_token)
392
409
  }
393
410
 
394
- base_node_type_list = node_type.split("/")
395
- if len(base_node_type_list) > 1:
396
- base_node_type = "/".join(base_node_type_list[1:])
397
- else:
398
- logger.error("Invalid node type '%s'", node_type)
399
- return db_record
411
+ google_crawler = GoogleCrawler(access_token=access_token, project_id=project_id)
412
+ crawler_status, data = google_crawler.check_for_special_crawl(node_type)
400
413
 
401
- request_url = get_api_path(base_node_type)
402
- if not request_url:
403
- logger.error("API URL not set in google parameters for resource type: %s", base_node_type)
414
+ if not crawler_status:
415
+ base_node_type_list = node_type.split("/")
416
+ if len(base_node_type_list) > 1:
417
+ base_node_type = "/".join(base_node_type_list[1:])
418
+ else:
419
+ logger.error("Invalid node type '%s'", node_type)
420
+ return db_record
421
+
422
+ request_url = get_api_path(base_node_type)
423
+ if not request_url:
424
+ logger.error("API URL not set in google parameters for resource type: %s", base_node_type)
404
425
 
405
- request_url = generate_request_url(request_url, project_id)
406
- logger.info("Invoke request for get snapshot: %s", request_url)
426
+ request_url = generate_request_url(request_url, project_id)
427
+ logger.info("Invoke request for get snapshot: %s", request_url)
407
428
 
408
- status, data = http_get_request(request_url, header)
409
- logger.info('Get snapshot status: %s', status)
429
+ status, data = http_get_request(request_url, header)
430
+ logger.info('Get snapshot status: %s', status)
410
431
 
411
432
  fn_str_list = ""
412
433
  if node and 'type' in node and node['type']:
@@ -6,7 +6,9 @@ from processor.helper.httpapi.restapi_azure import get_access_token, GRAPH_TOKEN
6
6
  class AzureCrawler(BaseCrawler):
7
7
 
8
8
  def __init__(self, resources, **kwargs):
9
- super().__init__(resources, **kwargs)
9
+ super().__init__(**kwargs)
10
+
11
+ self.resources = resources
10
12
  self.token = kwargs.get("token")
11
13
  self.apiversions = kwargs.get("apiversions")
12
14
  self.subscription_id = kwargs.get("subscription_id")
@@ -1,7 +1,6 @@
1
1
 
2
2
  class BaseCrawler:
3
- def __init__(self, resources, **kwargs):
4
- self.resources = resources
3
+ def __init__(self, **kwargs):
5
4
  self.resource_types = {}
6
5
 
7
6
  def check_for_special_crawl(self, resource_type):
@@ -0,0 +1,173 @@
1
+ from processor.logging.log_handler import getlogger
2
+ from processor.connector.special_crawler.base_crawler import BaseCrawler
3
+ from processor.helper.xml.xml_utils import xml_to_json
4
+ import requests
5
+ import zipfile
6
+ import io
7
+ import re
8
+
9
+ logger = getlogger()
10
+
11
+ class GoogleCrawler(BaseCrawler):
12
+
13
+ def __init__(self, **kwargs):
14
+ super().__init__(**kwargs)
15
+
16
+ self.response_data = None
17
+ self.status = False
18
+ self.project_id = kwargs.get("project_id")
19
+ self.access_token = kwargs.get("access_token")
20
+ self.special_resource_types = {
21
+ "apigee/organizations.apis.deployments.list" : self.crawl_apigee_deployments,
22
+ }
23
+ self.data_processing_resource_types = {
24
+ "apigee/organizations.apis.revisions.get" : self.process_apigee_version_data,
25
+ }
26
+
27
+ def get_header(self):
28
+ return {
29
+ "Authorization" : ("Bearer %s" % self.access_token)
30
+ }
31
+
32
+ def check_for_special_crawl(self, resource_type):
33
+ """
34
+ check the resource type need special crawling or not. if it need special crawling then
35
+ it will process the special crawler and returns the updated resources
36
+ """
37
+ if resource_type in self.special_resource_types:
38
+ self.status = True
39
+ crawl_function = self.special_resource_types.get(resource_type)
40
+ self.response_data = crawl_function()
41
+
42
+ return self.status, self.response_data
43
+
44
+ def check_for_data_process(self, path, resource_type):
45
+ """
46
+ check the resource type need processing on the data. if it need processing then
47
+ it will process it and returns the updated resource data
48
+ """
49
+ self.path = path
50
+ if resource_type in self.data_processing_resource_types:
51
+ self.status = True
52
+ process_data_function = self.data_processing_resource_types.get(resource_type)
53
+ self.response_data = process_data_function()
54
+
55
+ return self.status, self.response_data
56
+
57
+
58
+ def process_apigee_version_data(self):
59
+ response_data = {}
60
+ match = re.search(r"organizations/([^/]+)/apis/([^/]+)/revisions/([^/]+)", self.path)
61
+ if match:
62
+ organization = match.group(1)
63
+ api = match.group(2)
64
+ revision = match.group(3)
65
+ else:
66
+ logger.error("Invalid path for process apigee version")
67
+ return
68
+
69
+ request_url = f"https://apigee.googleapis.com/{self.path}?format=bundle"
70
+ response = requests.get(url=request_url, headers=self.get_header())
71
+
72
+ pattern_dict = {
73
+ "policies": r'.+/policies/[^/]+\.xml',
74
+ "proxies": r'.+/proxies/[^/]+\.xml',
75
+ "targets": r'.+/targets/[^/]+\.xml'
76
+ }
77
+
78
+ if response.status_code == 200:
79
+ bundle_zip = io.BytesIO(response.content)
80
+ policies_json = []
81
+ proxies_json = []
82
+ targets_json = []
83
+ with zipfile.ZipFile(bundle_zip, 'r') as zip_ref:
84
+ for file in zip_ref.filelist:
85
+ for pattern_key, pattern in pattern_dict.items():
86
+ matches = re.findall(pattern, file.filename)
87
+ if matches:
88
+ with zip_ref.open(file.filename) as xml_file:
89
+ xml_content = xml_file.read()
90
+ json_content = xml_to_json(xml_content)
91
+
92
+ if pattern_key == "policies":
93
+ policies_json.append(json_content)
94
+ elif pattern_key == "proxies":
95
+ proxies_json.append(json_content)
96
+ elif pattern_key == "targets":
97
+ targets_json.append(json_content)
98
+
99
+
100
+ response_data = {
101
+ "organization" : organization,
102
+ "api" : api,
103
+ "revision" : revision,
104
+ "policies" : policies_json,
105
+ "proxies" : proxies_json,
106
+ "targets" : targets_json
107
+ }
108
+ return response_data
109
+ else:
110
+ logger.error(f"Failed to retrieve API bundle. Status code: {response.status_code}, Error: {response.content}")
111
+ return response_data
112
+
113
+ def get_apigee_organizations(self):
114
+ organizations = []
115
+ request_url = "https://apigee.googleapis.com/v1/organizations"
116
+ response = requests.get(url=request_url, headers=self.get_header())
117
+ if response.status_code != 200:
118
+ logger.error(f"Failed to get the organization list. Status code: {response.status_code}, Error: {response.content}")
119
+ return organizations
120
+
121
+ data = response.json()
122
+ organizations = data.get("organizations", [])
123
+ return organizations
124
+
125
+ def get_apigee_apis(self, organization):
126
+ apis = []
127
+ request_url = f"https://apigee.googleapis.com/v1/organizations/{organization}/apis"
128
+ response = requests.get(url=request_url, headers=self.get_header())
129
+ if response.status_code != 200:
130
+ logger.error(f"Failed to get the apigee apis. Status code: {response.status_code}, Error: {response.content}")
131
+ return apis
132
+
133
+ data = response.json()
134
+ apis = data.get("proxies", [])
135
+ return apis
136
+
137
+ def get_apigee_deployments(self, organization, api):
138
+ deployments = []
139
+ request_url = f"https://apigee.googleapis.com/v1/organizations/{organization}/apis/{api}/deployments"
140
+ response = requests.get(url=request_url, headers=self.get_header())
141
+ if response.status_code != 200:
142
+ logger.error(f"Failed to get the apigee deployments. Status code: {response.status_code}, Error: {response.content}")
143
+ return deployments
144
+
145
+ data = response.json()
146
+ deployments = data.get("deployments", [])
147
+ return deployments
148
+
149
+ def crawl_apigee_deployments(self):
150
+ """
151
+ crawl "apigee/organizations.apis.deployments.list" resource type
152
+ """
153
+ deployment_list = []
154
+ organizations = self.get_apigee_organizations()
155
+ for organization in organizations:
156
+ if organization.get("projectId") != self.project_id:
157
+ continue
158
+ organization_name = organization.get("organization")
159
+ apigee_apis = self.get_apigee_apis(organization_name)
160
+ for api in apigee_apis:
161
+ api_name = api.get("name")
162
+ deployments = self.get_apigee_deployments(organization_name, api_name)
163
+ for deployment in deployments:
164
+ revision = deployment.get("revision")
165
+ deployment["selfLink"] = f"/organizations/{organization_name}/apis/{api_name}/revisions/{revision}"
166
+ deployment_list.append(deployment)
167
+ response_data = {
168
+ "items" : deployment_list
169
+ }
170
+ return response_data
171
+
172
+
173
+
@@ -166,6 +166,8 @@ def populate_gcp_projects(container, source, structure_data):
166
166
  private_key = user.get("private_key")
167
167
  name = re.sub(r"-\d+$", "", name)
168
168
  account_list += get_projects_list(private_key_id, private_key, client_email, client_id, name)
169
+ else:
170
+ account_list = structure_data.get("projects")
169
171
  updated_data = copy.deepcopy(structure_data)
170
172
  updated_data["projects"] = account_list
171
173
  update_collection_data(container, source, updated_data, dbname, collection)
@@ -199,6 +201,7 @@ def get_projects_list(private_key_id, private_key, client_email, client_id, test
199
201
  """ Get google projects list """
200
202
  project_list = []
201
203
  isremote = get_from_currentdata('remote')
204
+ private_key_set = True if private_key else False
202
205
  if not private_key and isremote:
203
206
  private_key = get_value_from_customer_keyvault(private_key_id)
204
207
  logger.info('Private key from customer keyvault, Secret: %s', '*' * len(private_key))
@@ -233,7 +236,7 @@ def get_projects_list(private_key_id, private_key, client_email, client_id, test
233
236
  "client_id": client_id,
234
237
  "name": "%s-%s" % (test_user, index),
235
238
  "private_key_id": private_key_id,
236
- "private_key" : private_key if private_key else "",
239
+ "private_key" : private_key if private_key_set else "",
237
240
  "type": "service_account"
238
241
  }
239
242
  ]
@@ -0,0 +1,19 @@
1
+ import xml.etree.ElementTree as ET
2
+
3
+ def parse_element(element):
4
+ parsed = {
5
+ "name": element.tag,
6
+ "text": element.text.strip() if element.text and element.text.strip() else None,
7
+ "attributes": element.attrib,
8
+ "children": []
9
+ }
10
+
11
+ for child in element:
12
+ parsed["children"].append(parse_element(child))
13
+
14
+ return parsed
15
+
16
+ def xml_to_json(xml_content):
17
+ root = ET.fromstring(xml_content)
18
+ parsed_xml = parse_element(root)
19
+ return parsed_xml
@@ -196,6 +196,11 @@ class MongoDBHandler(logging.Handler):
196
196
  """
197
197
  def __init__(self, dburl, dbname, collection='logs', log_type=None):
198
198
  logging.Handler.__init__(self)
199
+
200
+ self.max_docsize = 15.5*1024*1024
201
+ self.cursize = 0
202
+ self.index = 0
203
+
199
204
  try:
200
205
  dbconnection = MongoClient(host=dburl, serverSelectionTimeoutMS=3000)
201
206
  _ = dbconnection.list_database_names()
@@ -220,7 +225,7 @@ class MongoDBHandler(logging.Handler):
220
225
  self.collection = self.db[self.coll_name]
221
226
  DBLOGGER = get_dblog_name(log_type)
222
227
  self.dblog_name = DBLOGGER
223
- self.collection.insert_one({'name': self.dblog_name, 'logs': []})
228
+ self.collection.insert_one({'name': self.dblog_name, 'index': self.index, 'logs': []})
224
229
 
225
230
  def get_log_collection(self):
226
231
  return self.dblog_name
@@ -242,10 +247,20 @@ class MongoDBHandler(logging.Handler):
242
247
  "log_type": getattr(record, "type", "DEFAULT")
243
248
  }
244
249
 
250
+ try:
251
+ self.cursize += len(json.dumps(db_record))
252
+ except:
253
+ self.cursize += len(str(db_record))
254
+
255
+ if self.cursize // self.max_docsize >= 1:
256
+ self.index += 1
257
+ self.cursize = 0
258
+ self.collection.insert_one({'name': self.dblog_name, 'index': self.index, 'logs': []})
259
+
245
260
  try:
246
261
  if self.collection is not None and self.dblog_name:
247
262
  # self.collection.insert(db_record, check_keys=False)
248
- self.collection.update_one({'name': self.dblog_name}, {'$push': {'logs': db_record}})
263
+ self.collection.update_one({'name': self.dblog_name, 'index': self.index}, {'$push': {'logs': db_record}})
249
264
  except Exception as e:
250
265
  print('CRITICAL Logger DB ERROR: Logging to database not possible!')
251
266
 
@@ -1,3 +0,0 @@
1
- # Prancer Basic
2
-
3
- __version__ = '3.0.26'
File without changes
File without changes
File without changes