ic-code 1.2.8__tar.gz → 1.2.9__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 (254) hide show
  1. {ic_code-1.2.8/src/ic_code.egg-info → ic_code-1.2.9}/PKG-INFO +3 -2
  2. {ic_code-1.2.8 → ic_code-1.2.9}/README.md +1 -1
  3. {ic_code-1.2.8 → ic_code-1.2.9}/pyproject.toml +2 -1
  4. {ic_code-1.2.8 → ic_code-1.2.9}/requirements.txt +1 -0
  5. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/__init__.py +1 -1
  6. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/lb/info.py +16 -10
  7. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/clb/info.py +5 -3
  8. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/client.py +9 -4
  9. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/cvm/info.py +7 -9
  10. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/lighthouse/info.py +5 -6
  11. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/nat/info.py +7 -7
  12. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/sg/info.py +9 -9
  13. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/tke/info.py +7 -7
  14. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/vpc/info.py +7 -7
  15. {ic_code-1.2.8 → ic_code-1.2.9/src/ic_code.egg-info}/PKG-INFO +3 -2
  16. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic_code.egg-info/requires.txt +1 -0
  17. {ic_code-1.2.8 → ic_code-1.2.9}/LICENSE +0 -0
  18. {ic_code-1.2.8 → ic_code-1.2.9}/MANIFEST.in +0 -0
  19. {ic_code-1.2.8 → ic_code-1.2.9}/SECURITY.md +0 -0
  20. {ic_code-1.2.8 → ic_code-1.2.9}/config/default.yaml +0 -0
  21. {ic_code-1.2.8 → ic_code-1.2.9}/docs/README.md +0 -0
  22. {ic_code-1.2.8 → ic_code-1.2.9}/docs/_templates/configuration.md +0 -0
  23. {ic_code-1.2.8 → ic_code-1.2.9}/docs/_templates/installation.md +0 -0
  24. {ic_code-1.2.8 → ic_code-1.2.9}/docs/_templates/troubleshooting.md +0 -0
  25. {ic_code-1.2.8 → ic_code-1.2.9}/docs/_templates/usage.md +0 -0
  26. {ic_code-1.2.8 → ic_code-1.2.9}/docs/aws/README.md +0 -0
  27. {ic_code-1.2.8 → ic_code-1.2.9}/docs/aws/aws_cli_prd.md +0 -0
  28. {ic_code-1.2.8 → ic_code-1.2.9}/docs/aws/installation.md +0 -0
  29. {ic_code-1.2.8 → ic_code-1.2.9}/docs/ci-workflow-guide.md +0 -0
  30. {ic_code-1.2.8 → ic_code-1.2.9}/docs/cloudflare_configuration_example.md +0 -0
  31. {ic_code-1.2.8 → ic_code-1.2.9}/docs/config_migration.md +0 -0
  32. {ic_code-1.2.8 → ic_code-1.2.9}/docs/deployment.md +0 -0
  33. {ic_code-1.2.8 → ic_code-1.2.9}/docs/development/README.md +0 -0
  34. {ic_code-1.2.8 → ic_code-1.2.9}/docs/development/cleanup_summary.md +0 -0
  35. {ic_code-1.2.8 → ic_code-1.2.9}/docs/development/development_guide.md +0 -0
  36. {ic_code-1.2.8 → ic_code-1.2.9}/docs/development/import_patterns.md +0 -0
  37. {ic_code-1.2.8 → ic_code-1.2.9}/docs/development/migration_guide.md +0 -0
  38. {ic_code-1.2.8 → ic_code-1.2.9}/docs/gcp/GCP_CONFIGURATION_GUIDE.md +0 -0
  39. {ic_code-1.2.8 → ic_code-1.2.9}/docs/gcp/GCP_SECURITY_BEST_PRACTICES.md +0 -0
  40. {ic_code-1.2.8 → ic_code-1.2.9}/docs/gcp/README.md +0 -0
  41. {ic_code-1.2.8 → ic_code-1.2.9}/docs/general/configuration.md +0 -0
  42. {ic_code-1.2.8 → ic_code-1.2.9}/docs/installation.md +0 -0
  43. {ic_code-1.2.8 → ic_code-1.2.9}/docs/migration.md +0 -0
  44. {ic_code-1.2.8 → ic_code-1.2.9}/docs/migration_guide.md +0 -0
  45. {ic_code-1.2.8 → ic_code-1.2.9}/docs/oci/README.md +0 -0
  46. {ic_code-1.2.8 → ic_code-1.2.9}/docs/oci/installation.md +0 -0
  47. {ic_code-1.2.8 → ic_code-1.2.9}/docs/release-guide.md +0 -0
  48. {ic_code-1.2.8 → ic_code-1.2.9}/docs/security.md +0 -0
  49. {ic_code-1.2.8 → ic_code-1.2.9}/docs/ssh/configuration.md +0 -0
  50. {ic_code-1.2.8 → ic_code-1.2.9}/docs/troubleshooting.md +0 -0
  51. {ic_code-1.2.8 → ic_code-1.2.9}/docs/user_guide.md +0 -0
  52. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/analysis_summary.py +0 -0
  53. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/bump-version.sh +0 -0
  54. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/cf_edge_nsg_make/cf_edge_nsg_make.py +0 -0
  55. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/ci-detect-platforms.py +0 -0
  56. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/ci-generate-matrix.py +0 -0
  57. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/cli_usage_analysis.py +0 -0
  58. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/dependency_mapper.py +0 -0
  59. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/deploy.sh +0 -0
  60. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/final_validation_and_documentation.py +0 -0
  61. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/fix_consolidated_imports.py +0 -0
  62. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/migration_execution_and_validation.py +0 -0
  63. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/oracle-policy/user_policy.py +0 -0
  64. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/performance_optimization.py +0 -0
  65. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/setup_venv.py +0 -0
  66. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/test-ci-detection.sh +0 -0
  67. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/unset_env.sh +0 -0
  68. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/validate_config.py +0 -0
  69. {ic_code-1.2.8 → ic_code-1.2.9}/scripts/validate_dependencies.py +0 -0
  70. {ic_code-1.2.8 → ic_code-1.2.9}/setup.cfg +0 -0
  71. {ic_code-1.2.8 → ic_code-1.2.9}/setup.py +0 -0
  72. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/__init__.py +0 -0
  73. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/gather_env.py +0 -0
  74. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/gcp_config_validator.py +0 -0
  75. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/gcp_monitoring.py +0 -0
  76. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/gcp_utils.py +0 -0
  77. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/log.py +0 -0
  78. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/progress_decorator.py +0 -0
  79. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/slack.py +0 -0
  80. {ic_code-1.2.8 → ic_code-1.2.9}/src/common/utils.py +0 -0
  81. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/cli.py +0 -0
  82. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/commands/__init__.py +0 -0
  83. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/commands/config.py +0 -0
  84. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/commands/security.py +0 -0
  85. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/compat/__init__.py +0 -0
  86. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/compat/cli.py +0 -0
  87. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/compat/common.py +0 -0
  88. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/__init__.py +0 -0
  89. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/cleanup.py +0 -0
  90. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/docs_organizer.py +0 -0
  91. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/external.py +0 -0
  92. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/installer.py +0 -0
  93. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/manager.py +0 -0
  94. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/migration.py +0 -0
  95. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/migration_utils.py +0 -0
  96. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/path_manager.py +0 -0
  97. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/schema.py +0 -0
  98. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/secrets.py +0 -0
  99. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/config/security.py +0 -0
  100. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/core/__init__.py +0 -0
  101. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/core/dependency_validator.py +0 -0
  102. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/core/logging.py +0 -0
  103. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/core/platform_discovery.py +0 -0
  104. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/core/session.py +0 -0
  105. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/core/silence_logging.py +0 -0
  106. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/__init__.py +0 -0
  107. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/__init__.py +0 -0
  108. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/cloudfront/__init__.py +0 -0
  109. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/cloudfront/info.py +0 -0
  110. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/codepipeline/__init__.py +0 -0
  111. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/codepipeline/build.py +0 -0
  112. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/codepipeline/deploy.py +0 -0
  113. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/ec2/__init__.py +0 -0
  114. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/ec2/info.py +0 -0
  115. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/ec2/list_tags.py +0 -0
  116. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/ec2/tag_check.py +0 -0
  117. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/ecs/__init__.py +0 -0
  118. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/ecs/info.py +0 -0
  119. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/ecs/service.py +0 -0
  120. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/ecs/task.py +0 -0
  121. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/eks/__init__.py +0 -0
  122. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/eks/addons.py +0 -0
  123. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/eks/fargate.py +0 -0
  124. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/eks/info.py +0 -0
  125. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/eks/nodes.py +0 -0
  126. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/eks/pods.py +0 -0
  127. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/eks/update_config.py +0 -0
  128. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/fargate/__init__.py +0 -0
  129. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/fargate/info.py +0 -0
  130. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/lb/__init__.py +0 -0
  131. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/lb/list_tags.py +0 -0
  132. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/lb/tag_check.py +0 -0
  133. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/msk/__init__.py +0 -0
  134. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/msk/broker.py +0 -0
  135. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/msk/info.py +0 -0
  136. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/nat/__init__.py +0 -0
  137. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/nat/list_tags.py +0 -0
  138. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/nat/tag_check.py +0 -0
  139. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/profile/__init__.py +0 -0
  140. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/profile/info.py +0 -0
  141. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/rds/__init__.py +0 -0
  142. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/rds/info.py +0 -0
  143. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/rds/list_tags.py +0 -0
  144. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/rds/tag_check.py +0 -0
  145. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/s3/__init__.py +0 -0
  146. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/s3/info.py +0 -0
  147. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/s3/list_tags.py +0 -0
  148. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/s3/tag_check.py +0 -0
  149. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/sg/__init__.py +0 -0
  150. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/sg/info.py +0 -0
  151. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/vpc/__init__.py +0 -0
  152. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/vpc/info.py +0 -0
  153. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/vpc/list_tags.py +0 -0
  154. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/vpc/tag_check.py +0 -0
  155. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/vpn/__init__.py +0 -0
  156. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/aws/vpn/info.py +0 -0
  157. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/README.md +0 -0
  158. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/__init__.py +0 -0
  159. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/account/__init__.py +0 -0
  160. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/account/info.py +0 -0
  161. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/client.py +0 -0
  162. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/dns/__init__.py +0 -0
  163. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/dns/info.py +0 -0
  164. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/dns/list_info.py +0 -0
  165. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/rules/__init__.py +0 -0
  166. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/rules/info.py +0 -0
  167. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/traffic/__init__.py +0 -0
  168. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/traffic/info.py +0 -0
  169. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/waf/__init__.py +0 -0
  170. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/waf/info.py +0 -0
  171. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/zone/__init__.py +0 -0
  172. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/cloudflare/zone/info.py +0 -0
  173. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/README.md +0 -0
  174. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/__init__.py +0 -0
  175. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/billing/__init__.py +0 -0
  176. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/billing/info.py +0 -0
  177. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/billing/mock_data.json +0 -0
  178. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/compute/__init__.py +0 -0
  179. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/compute/info.py +0 -0
  180. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/compute/mock_data.json +0 -0
  181. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/firewall/__init__.py +0 -0
  182. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/firewall/info.py +0 -0
  183. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/functions/__init__.py +0 -0
  184. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/functions/info.py +0 -0
  185. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/gke/__init__.py +0 -0
  186. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/gke/info.py +0 -0
  187. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/gke/mock_data.json +0 -0
  188. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/lb/__init__.py +0 -0
  189. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/lb/info.py +0 -0
  190. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/run/__init__.py +0 -0
  191. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/run/info.py +0 -0
  192. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/sql/__init__.py +0 -0
  193. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/sql/info.py +0 -0
  194. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/storage/__init__.py +0 -0
  195. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/storage/info.py +0 -0
  196. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/vpc/__init__.py +0 -0
  197. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/vpc/info.py +0 -0
  198. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/gcp/vpc/mock_data.json +0 -0
  199. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/README.md +0 -0
  200. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/__init__.py +0 -0
  201. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/common/__init__.py +0 -0
  202. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/common/utils.py +0 -0
  203. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/compartment/__init__.py +0 -0
  204. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/compartment/info.py +0 -0
  205. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/cost/__init__.py +0 -0
  206. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/cost/credit.py +0 -0
  207. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/cost/usage.py +0 -0
  208. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/info/__init__.py +0 -0
  209. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/info/oci_info.py +0 -0
  210. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/lb/__init__.py +0 -0
  211. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/lb/info.py +0 -0
  212. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/nsg/__init__.py +0 -0
  213. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/nsg/info.py +0 -0
  214. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/obj/__init__.py +0 -0
  215. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/obj/info.py +0 -0
  216. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/policy/__init__.py +0 -0
  217. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/policy/info.py +0 -0
  218. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/policy/search.py +0 -0
  219. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/vcn/__init__.py +0 -0
  220. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/vcn/info.py +0 -0
  221. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/vm/__init__.py +0 -0
  222. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/vm/info.py +0 -0
  223. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/volume/__init__.py +0 -0
  224. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/oci/volume/info.py +0 -0
  225. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/ssh/README.md +0 -0
  226. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/ssh/__init__.py +0 -0
  227. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/ssh/auto/__init__.py +0 -0
  228. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/ssh/auto/scan.py +0 -0
  229. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/ssh/auto_ssh.py +0 -0
  230. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/ssh/server/__init__.py +0 -0
  231. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/ssh/server/info.py +0 -0
  232. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/ssh/server_info.py +0 -0
  233. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/__init__.py +0 -0
  234. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/clb/__init__.py +0 -0
  235. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/cvm/__init__.py +0 -0
  236. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/lighthouse/__init__.py +0 -0
  237. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/nat/__init__.py +0 -0
  238. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/profile/__init__.py +0 -0
  239. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/profile/info.py +0 -0
  240. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/sg/__init__.py +0 -0
  241. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/tke/__init__.py +0 -0
  242. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/platforms/tencent/vpc/__init__.py +0 -0
  243. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/security/README.md +0 -0
  244. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/security/__init__.py +0 -0
  245. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/security/config.py +0 -0
  246. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/security/detector.py +0 -0
  247. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/security/guidance.py +0 -0
  248. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/security/hooks.py +0 -0
  249. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/security/patterns.py +0 -0
  250. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic/security/scanner.py +0 -0
  251. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic_code.egg-info/SOURCES.txt +0 -0
  252. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic_code.egg-info/dependency_links.txt +0 -0
  253. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic_code.egg-info/entry_points.txt +0 -0
  254. {ic_code-1.2.8 → ic_code-1.2.9}/src/ic_code.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ic-code
3
- Version: 1.2.8
3
+ Version: 1.2.9
4
4
  Summary: Infrastructure CLI tool for managing AWS, GCP, OCI, CloudFlare, SSH, and more
5
5
  Home-page: https://github.com/dgr009/ic
6
6
  Author: SangYun Kim
@@ -69,6 +69,7 @@ Requires-Dist: pytest-cov<7.0.0,>=5.0.0; extra == "dev"
69
69
  Requires-Dist: black<25.0.0,>=24.0.0; extra == "dev"
70
70
  Requires-Dist: flake8<8.0.0,>=7.0.0; extra == "dev"
71
71
  Requires-Dist: mypy<2.0.0,>=1.10.0; extra == "dev"
72
+ Requires-Dist: pyrefly>=1.2.0; extra == "dev"
72
73
  Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
73
74
  Dynamic: author
74
75
  Dynamic: home-page
@@ -137,7 +138,7 @@ A comprehensive, production-grade Infrastructure Command Line Interface tool for
137
138
  ### From PyPI (Recommended)
138
139
 
139
140
  ```bash
140
- # Install the latest stable version (v1.2.8+)
141
+ # Install the latest stable version (v1.2.9+)
141
142
  pip install ic-code
142
143
 
143
144
  # Verify installation
@@ -60,7 +60,7 @@ A comprehensive, production-grade Infrastructure Command Line Interface tool for
60
60
  ### From PyPI (Recommended)
61
61
 
62
62
  ```bash
63
- # Install the latest stable version (v1.2.8+)
63
+ # Install the latest stable version (v1.2.9+)
64
64
  pip install ic-code
65
65
 
66
66
  # Verify installation
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ic-code"
7
- version = "1.2.8"
7
+ version = "1.2.9"
8
8
  authors = [
9
9
  {name = "sykim", email = "cruiser594@gmail.com"},
10
10
  ]
@@ -91,6 +91,7 @@ dev = [
91
91
  "black>=24.0.0,<25.0.0",
92
92
  "flake8>=7.0.0,<8.0.0",
93
93
  "mypy>=1.10.0,<2.0.0",
94
+ "pyrefly>=1.2.0",
94
95
  "pre-commit>=3.7.0,<4.0.0",
95
96
  ]
96
97
 
@@ -55,3 +55,4 @@ setuptools>=69.0.0,<76.0.0 # Package building tools
55
55
  # Development and Testing
56
56
  pytest>=8.0.0,<9.0.0
57
57
  pytest-cov>=5.0.0,<7.0.0
58
+ pyrefly>=1.2.0
@@ -4,7 +4,7 @@ IC (Infra Resource Management CLI) - A comprehensive tool for managing cloud inf
4
4
  This package provides CLI tools and libraries for managing AWS, GCP, OCI, CloudFlare, and SSH resources.
5
5
  """
6
6
 
7
- __version__ = "1.2.8"
7
+ __version__ = "1.2.9"
8
8
  __author__ = "SangYun"
9
9
  __email__ = "cruiser594@gmail.com"
10
10
 
@@ -181,18 +181,22 @@ def print_lb_table(all_rows):
181
181
  keys = ["account", "region", "lb_name", "type", "scheme", "listener", "target_group", "hc_path", "targets", "health"]
182
182
 
183
183
  for h in headers:
184
- style = {}
185
- if h == "Account": style = {"style": "bold magenta"}
186
- elif h == "Region": style = {"style": "bold cyan"}
187
- elif h == "Health": style = {"justify": "center"}
188
- table.add_column(h, **style)
189
-
190
- last_account, last_region, last_lb, last_tg = None, None, None, None
184
+ if h == "Account":
185
+ table.add_column(h, style="bold magenta")
186
+ elif h == "Region":
187
+ table.add_column(h, style="bold cyan")
188
+ elif h == "Health":
189
+ table.add_column(h, justify="center")
190
+ else:
191
+ table.add_column(h)
192
+
193
+ last_account, last_region, last_lb, last_listener, last_tg = None, None, None, None, None
191
194
  for i, row in enumerate(all_rows):
192
195
  account_changed = row["account"] != last_account
193
196
  region_changed = row["region"] != last_region
194
197
  lb_changed = row["lb_name"] != last_lb or account_changed or region_changed
195
- tg_changed = row["target_group"] != last_tg or lb_changed
198
+ listener_changed = row["listener"] != last_listener or lb_changed
199
+ tg_changed = row["target_group"] != last_tg or listener_changed
196
200
 
197
201
  if i > 0:
198
202
  if account_changed:
@@ -201,6 +205,8 @@ def print_lb_table(all_rows):
201
205
  table.add_row("", *[Rule(style="dim") for _ in headers[1:]])
202
206
  elif lb_changed:
203
207
  table.add_row("", "", *[Rule(style="dim") for _ in headers[2:]])
208
+ elif listener_changed:
209
+ table.add_row("", "", "", "", "", *[Rule(style="dim") for _ in headers[5:]])
204
210
  elif tg_changed:
205
211
  table.add_row("", "", "", "", "", "", *[Rule(style="dim") for _ in headers[6:]])
206
212
 
@@ -210,7 +216,7 @@ def print_lb_table(all_rows):
210
216
  display_values.append(row["lb_name"] if lb_changed else "")
211
217
  display_values.append(row["type"] if lb_changed else "")
212
218
  display_values.append(row["scheme"] if lb_changed else "")
213
- display_values.append(row["listener"] if lb_changed else "")
219
+ display_values.append(row["listener"] if listener_changed else "")
214
220
  display_values.append(row["target_group"] if tg_changed else "")
215
221
  display_values.append(row["hc_path"] if tg_changed else "")
216
222
  display_values.append(row["targets"])
@@ -218,7 +224,7 @@ def print_lb_table(all_rows):
218
224
 
219
225
  table.add_row(*display_values)
220
226
 
221
- last_account, last_region, last_lb, last_tg = row["account"], row["region"], row["lb_name"], row["target_group"]
227
+ last_account, last_region, last_lb, last_listener, last_tg = row["account"], row["region"], row["lb_name"], row["listener"], row["target_group"]
222
228
 
223
229
  console.print(table)
224
230
 
@@ -90,15 +90,17 @@ def fetch_clb_one_account_region(
90
90
  req = models.DescribeLoadBalancersRequest()
91
91
  req.Offset = offset
92
92
  req.Limit = limit
93
- if name_filter:
94
- req.LoadBalancerName = name_filter
95
-
96
93
  resp = client.DescribeLoadBalancers(req)
97
94
  lbs = resp.LoadBalancerSet or []
98
95
 
99
96
  for lb in lbs:
100
97
  lb_id = lb.LoadBalancerId or "-"
101
98
  lb_name = lb.LoadBalancerName or "-"
99
+
100
+ if name_filter:
101
+ nf = name_filter.lower()
102
+ if nf not in lb_name.lower() and nf not in lb_id.lower():
103
+ continue
102
104
  lb_type_raw = lb.LoadBalancerType or "-"
103
105
  lb_type = _LB_TYPE_COLORS.get(lb_type_raw, lb_type_raw)
104
106
  vips = ", ".join(lb.LoadBalancerVips or []) or "-"
@@ -51,6 +51,9 @@ try:
51
51
  TENCENT_SDK_AVAILABLE = True
52
52
  except ImportError:
53
53
  TENCENT_SDK_AVAILABLE = False
54
+ class TencentCloudSDKException(Exception):
55
+ code: str = ""
56
+ message: str = ""
54
57
 
55
58
  # 기본 리전 목록
56
59
  TENCENT_DEFAULT_REGIONS = ["ap-seoul", "ap-tokyo"]
@@ -315,12 +318,14 @@ def get_accounts(account_filter: Optional[str] = None) -> List[Dict[str, str]]:
315
318
  if not account_filter:
316
319
  return all_accounts
317
320
 
318
- # 이름 또는 ID 기반 필터
319
- filter_set = {f.strip().lower() for f in account_filter.split(",") if f.strip()}
321
+ # 이름 또는 ID 기반 필터 (부분 일치 / substring matching)
322
+ filters = [f.strip().lower() for f in account_filter.split(",") if f.strip()]
320
323
  filtered = [
321
324
  a for a in all_accounts
322
- if a.get("name", "").lower() in filter_set
323
- or str(a.get("id", "")).lower() in filter_set
325
+ if any(
326
+ f in a.get("name", "").lower() or f in str(a.get("id", "")).lower()
327
+ for f in filters
328
+ )
324
329
  ]
325
330
  return filtered
326
331
 
@@ -98,12 +98,6 @@ def fetch_cvm_one_account_region(
98
98
  req.Offset = offset
99
99
  req.Limit = limit
100
100
 
101
- if name_filter:
102
- filter_obj = models.Filter()
103
- filter_obj.Name = "instance-name"
104
- filter_obj.Values = [f"*{name_filter}*"]
105
- req.Filters = [filter_obj]
106
-
107
101
  resp = client.DescribeInstances(req)
108
102
  instances = resp.InstanceSet or []
109
103
 
@@ -113,6 +107,13 @@ def fetch_cvm_one_account_region(
113
107
  if state.upper() == "TERMINATED":
114
108
  continue
115
109
 
110
+ inst_name = inst.InstanceName or inst.InstanceId or "-"
111
+
112
+ if name_filter:
113
+ nf = name_filter.lower()
114
+ if nf not in inst_name.lower() and nf not in (inst.InstanceId or "").lower():
115
+ continue
116
+
116
117
  # 스펙 정보
117
118
  itype = inst.InstanceType or "-"
118
119
  cpu = str(inst.CPU) if inst.CPU is not None else "?"
@@ -145,9 +146,6 @@ def fetch_cvm_one_account_region(
145
146
  for sg in (inst.SecurityGroupIds or [])
146
147
  ) or "-"
147
148
 
148
- # 태그에서 Name 추출
149
- inst_name = inst.InstanceName or inst.InstanceId or "-"
150
-
151
149
  rows.append({
152
150
  "account": account_name,
153
151
  "region": region,
@@ -89,18 +89,17 @@ def fetch_lighthouse_one_account_region(
89
89
  req.Offset = offset
90
90
  req.Limit = limit
91
91
 
92
- if name_filter:
93
- f = models.Filter()
94
- f.Name = "instance-name"
95
- f.Values = [f"*{name_filter}*"]
96
- req.Filters = [f]
97
-
98
92
  resp = client.DescribeInstances(req)
99
93
  instances = resp.InstanceSet or []
100
94
 
101
95
  for inst in instances:
102
96
  inst_id = inst.InstanceId or "-"
103
97
  inst_name = inst.InstanceName or inst_id
98
+
99
+ if name_filter:
100
+ nf = name_filter.lower()
101
+ if nf not in inst_name.lower() and nf not in inst_id.lower():
102
+ continue
104
103
  state = color_state(inst.InstanceState or "UNKNOWN")
105
104
 
106
105
  # CPU / Memory 스펙 정보
@@ -32,7 +32,8 @@ except ImportError:
32
32
 
33
33
  from ic.platforms.tencent.client import (
34
34
  get_accounts, get_credential_for_account, get_tencent_regions,
35
- make_client_profile, check_sdk_available, TENCENT_SDK_AVAILABLE
35
+ make_client_profile, check_sdk_available, TENCENT_SDK_AVAILABLE,
36
+ TencentCloudSDKException
36
37
  )
37
38
 
38
39
  console = Console()
@@ -78,18 +79,17 @@ def fetch_nat_one_account_region(
78
79
  req = models.DescribeNatGatewaysRequest()
79
80
  req.Offset = offset
80
81
  req.Limit = limit
81
- if name_filter:
82
- f = models.Filter()
83
- f.Name = "nat-gateway-name"
84
- f.Values = [f"*{name_filter}*"]
85
- req.Filters = [f]
86
-
87
82
  resp = client.DescribeNatGateways(req)
88
83
  nats = resp.NatGatewaySet or []
89
84
 
90
85
  for nat in nats:
91
86
  nat_id = nat.NatGatewayId or "-"
92
87
  nat_name = nat.NatGatewayName or nat_id
88
+
89
+ if name_filter:
90
+ nf = name_filter.lower()
91
+ if nf not in nat_name.lower() and nf not in nat_id.lower():
92
+ continue
93
93
  state = color_state(nat.State or "UNKNOWN")
94
94
  vpc_id = nat.VpcId or "-"
95
95
 
@@ -34,7 +34,8 @@ except ImportError:
34
34
 
35
35
  from ic.platforms.tencent.client import (
36
36
  get_accounts, get_credential_for_account, get_tencent_regions,
37
- make_client_profile, check_sdk_available, TENCENT_SDK_AVAILABLE
37
+ make_client_profile, check_sdk_available, TENCENT_SDK_AVAILABLE,
38
+ TencentCloudSDKException
38
39
  )
39
40
 
40
41
  console = Console()
@@ -104,12 +105,6 @@ def fetch_sg_one_account_region(
104
105
  req = models.DescribeSecurityGroupsRequest()
105
106
  req.Offset = str(offset)
106
107
  req.Limit = str(limit)
107
- if name_filter:
108
- f = models.Filter()
109
- f.Name = "security-group-name"
110
- f.Values = [f"*{name_filter}*"]
111
- req.Filters = [f]
112
-
113
108
  resp = client.DescribeSecurityGroups(req)
114
109
  sgs = resp.SecurityGroupSet or []
115
110
 
@@ -117,6 +112,11 @@ def fetch_sg_one_account_region(
117
112
  sg_id = sg.SecurityGroupId or "-"
118
113
  sg_name = sg.SecurityGroupName or sg_id
119
114
 
115
+ if name_filter:
116
+ nf = name_filter.lower()
117
+ if nf not in sg_name.lower() and nf not in sg_id.lower():
118
+ continue
119
+
120
120
  # 룰 조회
121
121
  try:
122
122
  req2 = models.DescribeSecurityGroupPoliciesRequest()
@@ -127,13 +127,13 @@ def fetch_sg_one_account_region(
127
127
  if rule_type in ("all", "ingress") and policy_set and policy_set.Ingress:
128
128
  for p in policy_set.Ingress:
129
129
  r = _parse_policy(p, "Ingress")
130
- r.update({"account_id": account_name, "region": region, "sg_name": sg_name, "sg_id": sg_id})
130
+ r.update({"account_id": str(account_name), "region": str(region), "sg_name": str(sg_name), "sg_id": str(sg_id)})
131
131
  results.append(r)
132
132
 
133
133
  if rule_type in ("all", "egress") and policy_set and policy_set.Egress:
134
134
  for p in policy_set.Egress:
135
135
  r = _parse_policy(p, "Egress")
136
- r.update({"account_id": account_name, "region": region, "sg_name": sg_name, "sg_id": sg_id})
136
+ r.update({"account_id": str(account_name), "region": str(region), "sg_name": str(sg_name), "sg_id": str(sg_id)})
137
137
  results.append(r)
138
138
 
139
139
  if not results or (results and results[-1].get("sg_id") != sg_id):
@@ -33,7 +33,8 @@ except ImportError:
33
33
 
34
34
  from ic.platforms.tencent.client import (
35
35
  get_accounts, get_credential_for_account, get_tencent_regions,
36
- make_client_profile, check_sdk_available, TENCENT_SDK_AVAILABLE
36
+ make_client_profile, check_sdk_available, TENCENT_SDK_AVAILABLE,
37
+ TencentCloudSDKException
37
38
  )
38
39
 
39
40
  console = Console()
@@ -82,18 +83,17 @@ def fetch_tke_one_account_region(
82
83
  req = models.DescribeClustersRequest()
83
84
  req.Offset = offset
84
85
  req.Limit = limit
85
- if name_filter:
86
- f = models.Filter()
87
- f.Name = "ClusterName"
88
- f.Values = [name_filter]
89
- req.Filters = [f]
90
-
91
86
  resp = client.DescribeClusters(req)
92
87
  clusters = resp.Clusters or []
93
88
 
94
89
  for c in clusters:
95
90
  cluster_id = c.ClusterId or "-"
96
91
  cluster_name = c.ClusterName or cluster_id
92
+
93
+ if name_filter:
94
+ nf = name_filter.lower()
95
+ if nf not in cluster_name.lower() and nf not in cluster_id.lower():
96
+ continue
97
97
  status = color_status(c.ClusterStatus or "Unknown")
98
98
  version = c.ClusterVersion or "-"
99
99
  node_count = str(c.ClusterNodeNum or 0)
@@ -32,7 +32,8 @@ except ImportError:
32
32
 
33
33
  from ic.platforms.tencent.client import (
34
34
  get_accounts, get_credential_for_account, get_tencent_regions,
35
- make_client_profile, check_sdk_available, TENCENT_SDK_AVAILABLE
35
+ make_client_profile, check_sdk_available, TENCENT_SDK_AVAILABLE,
36
+ TencentCloudSDKException
36
37
  )
37
38
 
38
39
  console = Console()
@@ -68,18 +69,17 @@ def fetch_vpc_one_account_region(
68
69
  req = models.DescribeVpcsRequest()
69
70
  req.Offset = str(offset)
70
71
  req.Limit = str(limit)
71
- if name_filter:
72
- f = models.Filter()
73
- f.Name = "vpc-name"
74
- f.Values = [f"*{name_filter}*"]
75
- req.Filters = [f]
76
-
77
72
  resp = client.DescribeVpcs(req)
78
73
  vpcs = resp.VpcSet or []
79
74
 
80
75
  for vpc in vpcs:
81
76
  vpc_name = vpc.VpcName or "-"
82
77
  vpc_id = vpc.VpcId or "-"
78
+
79
+ if name_filter:
80
+ nf = name_filter.lower()
81
+ if nf not in vpc_name.lower() and nf not in vpc_id.lower():
82
+ continue
83
83
  cidr = vpc.CidrBlock or "-"
84
84
  is_default = "[bold green]Yes[/bold green]" if vpc.IsDefault else "No"
85
85
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ic-code
3
- Version: 1.2.8
3
+ Version: 1.2.9
4
4
  Summary: Infrastructure CLI tool for managing AWS, GCP, OCI, CloudFlare, SSH, and more
5
5
  Home-page: https://github.com/dgr009/ic
6
6
  Author: SangYun Kim
@@ -69,6 +69,7 @@ Requires-Dist: pytest-cov<7.0.0,>=5.0.0; extra == "dev"
69
69
  Requires-Dist: black<25.0.0,>=24.0.0; extra == "dev"
70
70
  Requires-Dist: flake8<8.0.0,>=7.0.0; extra == "dev"
71
71
  Requires-Dist: mypy<2.0.0,>=1.10.0; extra == "dev"
72
+ Requires-Dist: pyrefly>=1.2.0; extra == "dev"
72
73
  Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
73
74
  Dynamic: author
74
75
  Dynamic: home-page
@@ -137,7 +138,7 @@ A comprehensive, production-grade Infrastructure Command Line Interface tool for
137
138
  ### From PyPI (Recommended)
138
139
 
139
140
  ```bash
140
- # Install the latest stable version (v1.2.8+)
141
+ # Install the latest stable version (v1.2.9+)
141
142
  pip install ic-code
142
143
 
143
144
  # Verify installation
@@ -40,4 +40,5 @@ pytest-cov<7.0.0,>=5.0.0
40
40
  black<25.0.0,>=24.0.0
41
41
  flake8<8.0.0,>=7.0.0
42
42
  mypy<2.0.0,>=1.10.0
43
+ pyrefly>=1.2.0
43
44
  pre-commit<4.0.0,>=3.7.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes