stoobly-agent 1.7.0__tar.gz → 1.7.1__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 (754) hide show
  1. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/PKG-INFO +1 -1
  2. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/pyproject.toml +1 -1
  3. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/__init__.py +1 -1
  4. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/hosts_file_manager.py +10 -10
  5. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/service_workflow_validate_command.py +48 -12
  6. stoobly_agent-1.7.1/stoobly_agent/app/cli/scaffold/templates/app/.Dockerfile.context +6 -0
  7. stoobly_agent-1.7.1/stoobly_agent/app/cli/scaffold/validate_command.py +82 -0
  8. stoobly_agent-1.7.1/stoobly_agent/app/cli/scaffold/workflow_validate_command.py +112 -0
  9. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold_cli.py +7 -2
  10. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scaffold/e2e_test.py +3 -3
  11. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scaffold/hosts_file_manager_test.py +1 -1
  12. stoobly_agent-1.7.1/stoobly_agent/test/app/models/schemas/.stoobly/db/VERSION +1 -0
  13. stoobly_agent-1.7.0/stoobly_agent/app/cli/scaffold/templates/app/.Dockerfile.context +0 -6
  14. stoobly_agent-1.7.0/stoobly_agent/app/cli/scaffold/validate_command.py +0 -60
  15. stoobly_agent-1.7.0/stoobly_agent/app/cli/scaffold/workflow_validate_command.py +0 -87
  16. stoobly_agent-1.7.0/stoobly_agent/test/app/models/schemas/.stoobly/db/VERSION +0 -1
  17. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/LICENSE +0 -0
  18. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/README.md +0 -0
  19. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/__init__.py +0 -0
  20. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/__init__.py +0 -0
  21. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/application_http_request_handler.py +0 -0
  22. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/bodies_controller.py +0 -0
  23. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/configs_controller.py +0 -0
  24. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/headers_controller.py +0 -0
  25. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/proxy_controller.py +0 -0
  26. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/query_params_controller.py +0 -0
  27. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/replayed_response_headers_controller.py +0 -0
  28. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/replayed_responses_controller.py +0 -0
  29. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/requests_controller.py +0 -0
  30. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/response_headers_controller.py +0 -0
  31. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/responses_controller.py +0 -0
  32. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/routes.py +0 -0
  33. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/scenarios_controller.py +0 -0
  34. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/simple_http_request_handler.py +0 -0
  35. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/api/statuses_controller.py +0 -0
  36. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/__init__.py +0 -0
  37. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/ca_cert_cli.py +0 -0
  38. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/config_cli.py +0 -0
  39. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/decorators/__init__.py +0 -0
  40. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/decorators/config.py +0 -0
  41. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/decorators/exec.py +0 -0
  42. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/dev_tools_cli.py +0 -0
  43. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/endpoint_cli.py +0 -0
  44. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/feature_cli.py +0 -0
  45. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/handlers/request_cli_handler.py +0 -0
  46. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/handlers/scenario_cli_handler.py +0 -0
  47. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/__init__.py +0 -0
  48. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/certificate_authority.py +0 -0
  49. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/context.py +0 -0
  50. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/endpoint_facade.py +0 -0
  51. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/endpoints_apply_context.py +0 -0
  52. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/endpoints_apply_service.py +0 -0
  53. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/endpoints_import_context.py +0 -0
  54. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/endpoints_import_service.py +0 -0
  55. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/feature_flags.py +0 -0
  56. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/handle_config_update_service.py +0 -0
  57. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/handle_mock_service.py +0 -0
  58. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/handle_replay_service.py +0 -0
  59. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/handle_test_service.py +0 -0
  60. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/iterate_group_by.py +0 -0
  61. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/json_print.py +0 -0
  62. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/openapi_endpoint_adapter.py +0 -0
  63. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/print_service.py +0 -0
  64. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/project_facade.py +0 -0
  65. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/replay_facade.py +0 -0
  66. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/report_facade.py +0 -0
  67. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/request_facade.py +0 -0
  68. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/request_synchronize_handler.py +0 -0
  69. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/run_command_service.py +0 -0
  70. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/scenario_facade.py +0 -0
  71. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/schema_builder.py +0 -0
  72. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/shell.py +0 -0
  73. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/synchronize_request_service.py +0 -0
  74. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/tabulate_print_service.py +0 -0
  75. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/test_facade.py +0 -0
  76. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/test_replay_context.py +0 -0
  77. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/trace_aliases.py +0 -0
  78. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/trace_context_facade.py +0 -0
  79. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/validations.py +0 -0
  80. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/helpers/verify_raw_request_service.py +0 -0
  81. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/intercept_cli.py +0 -0
  82. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/main_group.py +0 -0
  83. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/project_cli.py +0 -0
  84. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/report_cli.py +0 -0
  85. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/request_cli.py +0 -0
  86. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/__init__.py +0 -0
  87. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/app.py +0 -0
  88. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/app_command.py +0 -0
  89. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/app_config.py +0 -0
  90. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/app_create_command.py +0 -0
  91. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/command.py +0 -0
  92. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/config.py +0 -0
  93. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/constants.py +0 -0
  94. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/containerized_app.py +0 -0
  95. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/__init__.py +0 -0
  96. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/app_builder.py +0 -0
  97. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/builder.py +0 -0
  98. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/constants.py +0 -0
  99. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/service/__init__.py +0 -0
  100. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/service/build_decorator.py +0 -0
  101. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/service/builder.py +0 -0
  102. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/service/configure_gateway.py +0 -0
  103. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/service/types.py +0 -0
  104. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/workflow/__init__.py +0 -0
  105. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/workflow/build_decorator.py +0 -0
  106. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/workflow/builder.py +0 -0
  107. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/workflow/decorators_factory.py +0 -0
  108. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/workflow/dns_decorator.py +0 -0
  109. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/workflow/mock_decorator.py +0 -0
  110. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/docker/workflow/reverse_proxy_decorator.py +0 -0
  111. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/env.py +0 -0
  112. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/managed_services_docker_compose.py +0 -0
  113. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/service.py +0 -0
  114. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/service_command.py +0 -0
  115. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/service_config.py +0 -0
  116. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/service_create_command.py +0 -0
  117. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/service_delete_command.py +0 -0
  118. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/service_docker_compose.py +0 -0
  119. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/service_workflow.py +0 -0
  120. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/__init__.py +0 -0
  121. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/.Makefile +0 -0
  122. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/.docker-compose.base.yml +0 -0
  123. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/.docker-compose.networks.yml +0 -0
  124. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/Makefile +0 -0
  125. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/.config.yml +0 -0
  126. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/.docker-compose.base.yml +0 -0
  127. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/mock/.docker-compose.mock.yml +0 -0
  128. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/mock/bin/configure +0 -0
  129. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/mock/bin/init +0 -0
  130. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/mock/docker-compose.yml +0 -0
  131. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/record/.docker-compose.record.yml +0 -0
  132. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/record/bin/configure +0 -0
  133. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/record/bin/init +0 -0
  134. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/record/docker-compose.yml +0 -0
  135. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/test/.docker-compose.test.yml +0 -0
  136. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/test/bin/configure +0 -0
  137. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/test/bin/init +0 -0
  138. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/build/test/docker-compose.yml +0 -0
  139. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/.config.yml +0 -0
  140. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/.docker-compose.base.yml +0 -0
  141. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/.docker-compose.mock.yml +0 -0
  142. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/bin/configure +0 -0
  143. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/bin/init +0 -0
  144. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/docker-compose.yml +0 -0
  145. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/record/.docker-compose.record.yml +0 -0
  146. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/record/bin/configure +0 -0
  147. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/record/bin/init +0 -0
  148. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/record/docker-compose.yml +0 -0
  149. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/.docker-compose.test.yml +0 -0
  150. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/bin/configure +0 -0
  151. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/bin/init +0 -0
  152. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/docker-compose.yml +0 -0
  153. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/gateway/.config.yml +0 -0
  154. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/gateway/.docker-compose.base.template.yml +0 -0
  155. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/gateway/mock/.docker-compose.mock.yml +0 -0
  156. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/gateway/record/.docker-compose.record.yml +0 -0
  157. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/gateway/test/.docker-compose.test.yml +0 -0
  158. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/stoobly-ui/.config.yml +0 -0
  159. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/stoobly-ui/.docker-compose.base.yml +0 -0
  160. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/stoobly-ui/exec/.docker-compose.exec.yml +0 -0
  161. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/stoobly-ui/mock/.docker-compose.mock.yml +0 -0
  162. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/app/stoobly-ui/record/.docker-compose.record.yml +0 -0
  163. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/build/mock/.configure +0 -0
  164. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/build/mock/.init +0 -0
  165. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/build/record/.configure +0 -0
  166. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/build/record/.init +0 -0
  167. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/build/test/.configure +0 -0
  168. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/build/test/.init +0 -0
  169. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/entrypoint/mock/.configure +0 -0
  170. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/entrypoint/mock/.init +0 -0
  171. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/entrypoint/record/.configure +0 -0
  172. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/entrypoint/record/.init +0 -0
  173. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/entrypoint/test/.configure +0 -0
  174. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/services/entrypoint/test/.init +0 -0
  175. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.create +0 -0
  176. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.delete +0 -0
  177. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.disable +0 -0
  178. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.down +0 -0
  179. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.enable +0 -0
  180. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.list +0 -0
  181. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.logs +0 -0
  182. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.mkcert +0 -0
  183. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.reset +0 -0
  184. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.services +0 -0
  185. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.snapshot +0 -0
  186. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/exec/.up +0 -0
  187. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/mock/.configure +0 -0
  188. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/mock/.init +0 -0
  189. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/record/.configure +0 -0
  190. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/record/.init +0 -0
  191. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/test/.configure +0 -0
  192. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/build/workflows/test/.init +0 -0
  193. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/constants.py +0 -0
  194. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/factory.py +0 -0
  195. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/run/nginx.tmpl +0 -0
  196. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/mock/bin/configure +0 -0
  197. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/mock/bin/init +0 -0
  198. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/mock/fixtures.yml +0 -0
  199. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/mock/lifecycle_hooks.py +0 -0
  200. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/mock/public/.gitignore +0 -0
  201. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/record/bin/configure +0 -0
  202. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/record/bin/init +0 -0
  203. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/record/lifecycle_hooks.py +0 -0
  204. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/test/bin/configure +0 -0
  205. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/test/bin/init +0 -0
  206. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/test/fixtures.yml +0 -0
  207. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/test/lifecycle_hooks.py +0 -0
  208. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/templates/workflow/test/public/.gitignore +0 -0
  209. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/validate_exceptions.py +0 -0
  210. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/workflow.py +0 -0
  211. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/workflow_command.py +0 -0
  212. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/workflow_config.py +0 -0
  213. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/workflow_copy_command.py +0 -0
  214. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/workflow_create_command.py +0 -0
  215. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/workflow_env.py +0 -0
  216. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/workflow_log_command.py +0 -0
  217. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scaffold/workflow_run_command.py +0 -0
  218. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/scenario_cli.py +0 -0
  219. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/snapshot_cli.py +0 -0
  220. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/trace_cli.py +0 -0
  221. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/types/__init__.py +0 -0
  222. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/types/output.py +0 -0
  223. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/types/print_options.py +0 -0
  224. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/types/request.py +0 -0
  225. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/types/scenario.py +0 -0
  226. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/cli/types/test.py +0 -0
  227. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/__init__.py +0 -0
  228. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/__init__.py +0 -0
  229. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/joined_request_adapter.py +0 -0
  230. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/mitmproxy/__init__.py +0 -0
  231. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/mitmproxy/request/__init__.py +0 -0
  232. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/mitmproxy/request/python_adapter.py +0 -0
  233. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/mitmproxy/response/__init__.py +0 -0
  234. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/mitmproxy/response/python_adapter.py +0 -0
  235. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/orm/__init__.py +0 -0
  236. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/orm/joined_request_string_adapter.py +0 -0
  237. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/orm/request/__init__.py +0 -0
  238. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/orm/request/mitmproxy_adapter.py +0 -0
  239. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/orm/request/python_adapter.py +0 -0
  240. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/orm/response/__init__.py +0 -0
  241. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/orm/response/mitmproxy_adapter.py +0 -0
  242. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/orm/response/python_adapter.py +0 -0
  243. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/python/__init__.py +0 -0
  244. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/python/request/__init__.py +0 -0
  245. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/python/request/mitmproxy_adapter.py +0 -0
  246. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/python/request/raw_adapter.py +0 -0
  247. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/python/request/stoobly_adapter.py +0 -0
  248. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/python/response/__init__.py +0 -0
  249. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/python/response/mitmproxy_adapter.py +0 -0
  250. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/python/response/raw_adapter.py +0 -0
  251. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/raw_http_request_adapter.py +0 -0
  252. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/raw_http_response_adapter.py +0 -0
  253. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/raw_joined/__init__.py +0 -0
  254. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/raw_joined/request/__init__.py +0 -0
  255. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/raw_joined/request/python_adapter.py +0 -0
  256. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/raw_joined/response/__init__.py +0 -0
  257. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/raw_joined/response/python_adapter.py +0 -0
  258. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/stoobly/__init__.py +0 -0
  259. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/stoobly/request/__init__.py +0 -0
  260. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/adapters/stoobly/request/mitmproxy_adapter.py +0 -0
  261. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/body_model.py +0 -0
  262. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/__init__.py +0 -0
  263. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/__init__.py +0 -0
  264. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/body.py +0 -0
  265. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/header.py +0 -0
  266. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/__init__.py +0 -0
  267. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/body_adapter.py +0 -0
  268. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/header_adapter.py +0 -0
  269. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/__init__.py +0 -0
  270. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/create_request_columns_service.py +0 -0
  271. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/log.py +0 -0
  272. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/log_event.py +0 -0
  273. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/request_builder.py +0 -0
  274. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/request_snapshot.py +0 -0
  275. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/scenario_snapshot.py +0 -0
  276. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/search.py +0 -0
  277. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/snapshot.py +0 -0
  278. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/snapshot_service.py +0 -0
  279. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/snapshot_types.py +0 -0
  280. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/helpers/tiebreak_scenario_request.py +0 -0
  281. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/local_db_adapter.py +0 -0
  282. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/orm_request_builder.py +0 -0
  283. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/query_param_adapter.py +0 -0
  284. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/replayed_response_adapter.py +0 -0
  285. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/request_adapter.py +0 -0
  286. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/response_adapter.py +0 -0
  287. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/response_header_adapter.py +0 -0
  288. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/local_db/scenario_adapter.py +0 -0
  289. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/query_param.py +0 -0
  290. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/replayed_response.py +0 -0
  291. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/request.py +0 -0
  292. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/response.py +0 -0
  293. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/response_header.py +0 -0
  294. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/scenario.py +0 -0
  295. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/stoobly/__init__.py +0 -0
  296. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/stoobly/request_adapter.py +0 -0
  297. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/factories/resource/stoobly/scenario_adapter.py +0 -0
  298. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/header_model.py +0 -0
  299. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/helpers/__init__.py +0 -0
  300. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/helpers/apply.py +0 -0
  301. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/helpers/create_request_params_service.py +0 -0
  302. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/model.py +0 -0
  303. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/query_param_model.py +0 -0
  304. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/replayed_response_model.py +0 -0
  305. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/request_model.py +0 -0
  306. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/response_header_model.py +0 -0
  307. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/response_model.py +0 -0
  308. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/scenario_model.py +0 -0
  309. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/schemas/__init__.py +0 -0
  310. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/schemas/request.py +0 -0
  311. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/types/__init__.py +0 -0
  312. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/types/endpoint.py +0 -0
  313. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/types/replayed_response.py +0 -0
  314. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/types/request.py +0 -0
  315. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/types/request_components.py +0 -0
  316. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/types/response.py +0 -0
  317. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/models/types/scenario.py +0 -0
  318. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/__init__.py +0 -0
  319. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/constants/__init__.py +0 -0
  320. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/constants/custom_response_codes.py +0 -0
  321. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/context.py +0 -0
  322. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/handle_mock_service.py +0 -0
  323. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/handle_record_service.py +0 -0
  324. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/handle_replay_service.py +0 -0
  325. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/handle_test_service.py +0 -0
  326. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/hot_reload.py +0 -0
  327. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/intercept_handler.py +0 -0
  328. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/intercept_settings.py +0 -0
  329. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mitmproxy/__init__.py +0 -0
  330. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mitmproxy/flow_mock.py +0 -0
  331. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mitmproxy/request.py +0 -0
  332. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mitmproxy/request_body_facade.py +0 -0
  333. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mitmproxy/request_facade.py +0 -0
  334. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mitmproxy/response.py +0 -0
  335. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mitmproxy/response_body_facade.py +0 -0
  336. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mitmproxy/response_facade.py +0 -0
  337. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/__init__.py +0 -0
  338. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/context.py +0 -0
  339. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/custom_not_found_response_builder.py +0 -0
  340. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/eval_fixtures_service.py +0 -0
  341. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/eval_request_service.py +0 -0
  342. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/hashed_request_decorator.py +0 -0
  343. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/ignored_components_response_builder.py +0 -0
  344. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/request_hasher.py +0 -0
  345. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/search_endpoint.py +0 -0
  346. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/mock/types/__init__.py +0 -0
  347. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/__init__.py +0 -0
  348. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/context.py +0 -0
  349. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/join_request_service.py +0 -0
  350. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/joined_request.py +0 -0
  351. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/overwrite_scenario_service.py +0 -0
  352. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/proxy_request.py +0 -0
  353. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/request_string.py +0 -0
  354. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/request_string_control.py +0 -0
  355. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/response_string.py +0 -0
  356. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/response_string_control.py +0 -0
  357. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/record/upload_request_service.py +0 -0
  358. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/__init__.py +0 -0
  359. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/alias_context.py +0 -0
  360. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/alias_resolver.py +0 -0
  361. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/body_parser_service.py +0 -0
  362. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/context.py +0 -0
  363. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/multipart.py +0 -0
  364. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/replay_request_service.py +0 -0
  365. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/replay_scenario_service.py +0 -0
  366. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/rewrite_params_service.py +0 -0
  367. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/replay/trace_context.py +0 -0
  368. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/run.py +0 -0
  369. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/settings.py +0 -0
  370. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/simulate_intercept_service.py +0 -0
  371. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/__init__.py +0 -0
  372. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/context.py +0 -0
  373. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/context_abc.py +0 -0
  374. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/context_response.py +0 -0
  375. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/__init__.py +0 -0
  376. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/diff_service.py +0 -0
  377. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/endpoint_facade.py +0 -0
  378. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/mitmproxy_response_adapter.py +0 -0
  379. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/request_component_names_facade.py +0 -0
  380. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/requests_response_adapter.py +0 -0
  381. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/stoobly_response_adapter.py +0 -0
  382. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/test_results_builder.py +0 -0
  383. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/helpers/upload_test_service.py +0 -0
  384. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/matchers/__init__.py +0 -0
  385. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/matchers/context.py +0 -0
  386. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/matchers/contract.py +0 -0
  387. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/matchers/custom.py +0 -0
  388. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/matchers/diff.py +0 -0
  389. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/matchers/errors.py +0 -0
  390. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/matchers/fuzzy.py +0 -0
  391. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/matchers/handlers/__init__.py +0 -0
  392. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/test/test_service.py +0 -0
  393. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/utils/__init__.py +0 -0
  394. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/utils/allowed_request_service.py +0 -0
  395. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/utils/publish_change_service.py +0 -0
  396. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/utils/request_handler.py +0 -0
  397. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/utils/response_handler.py +0 -0
  398. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/utils/rewrite.py +0 -0
  399. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/proxy/utils/rewrite_rules_to_ignored_components_service.py +0 -0
  400. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/__init__.py +0 -0
  401. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/cli_settings.py +0 -0
  402. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/constants/__init__.py +0 -0
  403. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/constants/firewall_action.py +0 -0
  404. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/constants/intercept_mode.py +0 -0
  405. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/constants/mode.py +0 -0
  406. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/constants/request_component.py +0 -0
  407. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/data_rules.py +0 -0
  408. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/data_settings.py +0 -0
  409. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/feature_settings.py +0 -0
  410. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/firewall_rule.py +0 -0
  411. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/firewall_settings.py +0 -0
  412. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/helpers/active_mode_settings_builder.py +0 -0
  413. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/intercept_settings.py +0 -0
  414. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/match_rule.py +0 -0
  415. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/match_settings.py +0 -0
  416. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/parameter_rule.py +0 -0
  417. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/proxy_settings.py +0 -0
  418. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/remote_settings.py +0 -0
  419. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/rewrite_rule.py +0 -0
  420. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/rewrite_settings.py +0 -0
  421. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/types/__init__.py +0 -0
  422. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/types/cli_settings.py +0 -0
  423. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/types/proxy_settings.py +0 -0
  424. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/types/remote_settings.py +0 -0
  425. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/types/ui_settings.py +0 -0
  426. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/ui_settings.py +0 -0
  427. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/app/settings/url_rule.py +0 -0
  428. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/cli.py +0 -0
  429. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/__init__.py +0 -0
  430. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/__init__.py +0 -0
  431. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/alias_resolve_strategy.py +0 -0
  432. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/custom_headers.py +0 -0
  433. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/env_vars.py +0 -0
  434. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/headers.py +0 -0
  435. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/intercept_policy.py +0 -0
  436. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/lifecycle_hooks.py +0 -0
  437. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/mock_policy.py +0 -0
  438. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/mode.py +0 -0
  439. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/query_params.py +0 -0
  440. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/record_policy.py +0 -0
  441. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/replay_policy.py +0 -0
  442. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/request_origin.py +0 -0
  443. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/statuses.py +0 -0
  444. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/test_filter.py +0 -0
  445. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/test_output_level.py +0 -0
  446. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/constants/test_strategy.py +0 -0
  447. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/data_dir.py +0 -0
  448. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/mitmproxy.py +0 -0
  449. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/schema.yml +0 -0
  450. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/settings.yml.sample +0 -0
  451. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/config/source_dir.py +0 -0
  452. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2022_03_17_060144_create_requests.py +0 -0
  453. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2022_03_17_074916_create_responses.py +0 -0
  454. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2022_05_10_003705_create_traces.py +0 -0
  455. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2022_05_10_003840_create_trace_aliases.py +0 -0
  456. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2022_06_29_234516_create_trace_requests.py +0 -0
  457. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2022_06_29_235155_add_trace_request_reference_to_trace_aliases.py +0 -0
  458. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2022_12_12_092437_align_requests.py +0 -0
  459. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2022_12_28_092917_add_filter_columns_to_requests.py +0 -0
  460. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_01_21_055426_create_scenarios.py +0 -0
  461. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_01_21_060225_add_scenario_id_reference_to_requests.py +0 -0
  462. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_02_02_022229_create_replayed_responses.py +0 -0
  463. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_03_20_192909_add_http_version_column_to_requests.py +0 -0
  464. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_03_20_220448_add_http_version_column_to_responses.py +0 -0
  465. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_04_18_071327_align_requests.py +0 -0
  466. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_05_15_212505_add_uuid_column_to_requests.py +0 -0
  467. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_05_15_213119_add_uuid_column_to_scenarios.py +0 -0
  468. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/2023_05_29_053649_add_overwritable_column_to_scenarios.py +0 -0
  469. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/db/migrations/__init__.py +0 -0
  470. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/__init__.py +0 -0
  471. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/__init__.py +0 -0
  472. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/agent_api.py +0 -0
  473. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/api.py +0 -0
  474. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/body_param_names_resource.py +0 -0
  475. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/endpoints_resource.py +0 -0
  476. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/header_names_resource.py +0 -0
  477. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/__init__.py +0 -0
  478. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/endpoints.py +0 -0
  479. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/headers.py +0 -0
  480. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/pagination_query_params.py +0 -0
  481. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/projects.py +0 -0
  482. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/query_params.py +0 -0
  483. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/reports.py +0 -0
  484. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/requests.py +0 -0
  485. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/response_headers.py +0 -0
  486. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/responses.py +0 -0
  487. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/scenarios.py +0 -0
  488. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/tests.py +0 -0
  489. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/traces.py +0 -0
  490. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/interfaces/users.py +0 -0
  491. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/json_response_builder.py +0 -0
  492. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/__init__.py +0 -0
  493. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/organization_key.py +0 -0
  494. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/project_key.py +0 -0
  495. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/report_key.py +0 -0
  496. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/request_key.py +0 -0
  497. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/resource_key.py +0 -0
  498. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/scenario_key.py +0 -0
  499. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/test_key.py +0 -0
  500. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/keys/uuid_key.py +0 -0
  501. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/param_builder.py +0 -0
  502. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/projects_resource.py +0 -0
  503. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/query_param_names_resource.py +0 -0
  504. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/reports_resource.py +0 -0
  505. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/requests_resource.py +0 -0
  506. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/response_header_names_resource.py +0 -0
  507. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/response_param_names_resource.py +0 -0
  508. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/scenarios_resource.py +0 -0
  509. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/stoobly_api.py +0 -0
  510. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/test_responses_resource.py +0 -0
  511. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/tests_resource.py +0 -0
  512. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/api/users_resource.py +0 -0
  513. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/cache.py +0 -0
  514. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/logger.py +0 -0
  515. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/__init__.py +0 -0
  516. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/base.py +0 -0
  517. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/migrate_service.py +0 -0
  518. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/replayed_response.py +0 -0
  519. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/request.py +0 -0
  520. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/response.py +0 -0
  521. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/scenario.py +0 -0
  522. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/trace.py +0 -0
  523. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/trace_alias.py +0 -0
  524. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/trace_request.py +0 -0
  525. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/transformers/__init__.py +0 -0
  526. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/transformers/orm_to_request_transformer.py +0 -0
  527. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/transformers/orm_to_requests_response_transformer.py +0 -0
  528. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/transformers/orm_to_stoobly_request_transformer.py +0 -0
  529. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/transformers/orm_to_stoobly_response_transformer.py +0 -0
  530. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/types/__init__.py +0 -0
  531. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/types/request_columns.py +0 -0
  532. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/types/response_columns.py +0 -0
  533. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/utils/__init__.py +0 -0
  534. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/utils/request_parse_handler.py +0 -0
  535. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/utils/requests_response_builder.py +0 -0
  536. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/orm/utils/response_parse_handler.py +0 -0
  537. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/utils/__init__.py +0 -0
  538. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/utils/conditional_decorator.py +0 -0
  539. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/utils/decode.py +0 -0
  540. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/utils/jmespath.py +0 -0
  541. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/utils/python_to_ruby_type.py +0 -0
  542. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/lib/utils/visitor.py +0 -0
  543. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/mock.py +0 -0
  544. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/0-es2015.c7c5a6d51b98cb85b9fc.js +0 -0
  545. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/0-es5.c7c5a6d51b98cb85b9fc.js +0 -0
  546. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/1-es2015.bb4492eeabe1fe937ada.js +0 -0
  547. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/1-es5.bb4492eeabe1fe937ada.js +0 -0
  548. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/10-es2015.56da22458086513ba0c7.js +0 -0
  549. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/10-es5.56da22458086513ba0c7.js +0 -0
  550. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/12-es2015.be58ed0ef449008b932e.js +0 -0
  551. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/12-es5.be58ed0ef449008b932e.js +0 -0
  552. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/13-es2015.343b0261a8b3b3f4a1fc.js +0 -0
  553. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/13-es5.343b0261a8b3b3f4a1fc.js +0 -0
  554. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/14-es2015.b6619d7742671d2a37fb.js +0 -0
  555. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/14-es5.b6619d7742671d2a37fb.js +0 -0
  556. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/15-es2015.d8855701408b0e1d7a3e.js +0 -0
  557. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/15-es5.d8855701408b0e1d7a3e.js +0 -0
  558. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/16-es2015.98fa59c2c96d2caac3c3.js +0 -0
  559. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/16-es5.98fa59c2c96d2caac3c3.js +0 -0
  560. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/17-es2015.7f60b56d1fd66d4d5544.js +0 -0
  561. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/17-es5.7f60b56d1fd66d4d5544.js +0 -0
  562. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/18-es2015.503207073756a9c8211a.js +0 -0
  563. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/18-es5.503207073756a9c8211a.js +0 -0
  564. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/19-es2015.e5acb2c1e0e91717efc2.js +0 -0
  565. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/19-es5.e5acb2c1e0e91717efc2.js +0 -0
  566. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/2-es2015.51eb8544ea9a21f2874c.js +0 -0
  567. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/2-es5.51eb8544ea9a21f2874c.js +0 -0
  568. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/20-es2015.90544c488f1f0900bab4.js +0 -0
  569. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/20-es5.90544c488f1f0900bab4.js +0 -0
  570. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/21-es2015.63ed4e6b242fbc047bd6.js +0 -0
  571. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/21-es5.63ed4e6b242fbc047bd6.js +0 -0
  572. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/22-es2015.1e96ef651f96d51191e2.js +0 -0
  573. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/22-es5.1e96ef651f96d51191e2.js +0 -0
  574. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/23-es2015.6d3052555b4fac38f16d.js +0 -0
  575. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/23-es5.6d3052555b4fac38f16d.js +0 -0
  576. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/28-es2015.a2bf42f38e4dd771ccea.js +0 -0
  577. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/28-es5.a2bf42f38e4dd771ccea.js +0 -0
  578. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/29-es2015.18b515f07c88753c7eb6.js +0 -0
  579. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/29-es5.18b515f07c88753c7eb6.js +0 -0
  580. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/30-es2015.d4d3dc4101400cadf3f3.js +0 -0
  581. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/30-es5.d4d3dc4101400cadf3f3.js +0 -0
  582. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/31-es2015.e3ea815f75c19c217b7d.js +0 -0
  583. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/31-es5.e3ea815f75c19c217b7d.js +0 -0
  584. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/32-es2015.57553995bff0ae518501.js +0 -0
  585. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/32-es5.57553995bff0ae518501.js +0 -0
  586. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/33-es2015.da5ba1e5baa164921198.js +0 -0
  587. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/33-es5.da5ba1e5baa164921198.js +0 -0
  588. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/34-es2015.87acbb95cfb824650157.js +0 -0
  589. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/34-es5.87acbb95cfb824650157.js +0 -0
  590. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/35-es2015.a23419c9c7bff162a8e3.js +0 -0
  591. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/35-es5.a23419c9c7bff162a8e3.js +0 -0
  592. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/36-es2015.e3a104020eeec02cb8c4.js +0 -0
  593. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/36-es5.e3a104020eeec02cb8c4.js +0 -0
  594. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/37-es2015.3b472e6cf303201bbf2c.js +0 -0
  595. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/37-es5.3b472e6cf303201bbf2c.js +0 -0
  596. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/38-es2015.39dbf43d46cdc94f78c6.js +0 -0
  597. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/38-es5.39dbf43d46cdc94f78c6.js +0 -0
  598. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/39-es2015.e5475ea4fb6ec5c60741.js +0 -0
  599. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/39-es5.e5475ea4fb6ec5c60741.js +0 -0
  600. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/3rdpartylicenses.txt +0 -0
  601. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/4-es2015.f8ac5475bf103969b2d2.js +0 -0
  602. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/4-es5.f8ac5475bf103969b2d2.js +0 -0
  603. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/40-es2015.47b2873a8439717af6a7.js +0 -0
  604. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/40-es5.47b2873a8439717af6a7.js +0 -0
  605. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/41-es2015.69f2771002745c066976.js +0 -0
  606. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/41-es5.69f2771002745c066976.js +0 -0
  607. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/42-es2015.b590b92ede890155dcd6.js +0 -0
  608. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/42-es5.b590b92ede890155dcd6.js +0 -0
  609. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/43-es2015.ad1d956bffba561ba64c.js +0 -0
  610. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/43-es5.ad1d956bffba561ba64c.js +0 -0
  611. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/44-es2015.3ef2c17996ed5be95ced.js +0 -0
  612. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/44-es5.3ef2c17996ed5be95ced.js +0 -0
  613. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/45-es2015.3d65d27e0a7085e96356.js +0 -0
  614. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/45-es5.3d65d27e0a7085e96356.js +0 -0
  615. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/46-es2015.e4f0a5b127eae13c27c0.js +0 -0
  616. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/46-es5.e4f0a5b127eae13c27c0.js +0 -0
  617. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/47-es2015.c7d45334a70131f133b5.js +0 -0
  618. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/47-es5.c7d45334a70131f133b5.js +0 -0
  619. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/5-es2015.90ea7bd4439d9749e052.js +0 -0
  620. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/5-es5.90ea7bd4439d9749e052.js +0 -0
  621. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/6-es2015.5fb726c0555664300974.js +0 -0
  622. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/6-es5.5fb726c0555664300974.js +0 -0
  623. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/7-es2015.ba9f789e186a8e3962d3.js +0 -0
  624. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/7-es5.ba9f789e186a8e3962d3.js +0 -0
  625. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/8-es2015.b901639e2aeff1358c3d.js +0 -0
  626. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/8-es5.b901639e2aeff1358c3d.js +0 -0
  627. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/9-es2015.1d75413af5d96b4ff1e5.js +0 -0
  628. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/9-es5.1d75413af5d96b4ff1e5.js +0 -0
  629. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/CHANGELOG.md +0 -0
  630. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/README.md +0 -0
  631. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/_redirects +0 -0
  632. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/1.jpg +0 -0
  633. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/2.jpg +0 -0
  634. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/3.jpg +0 -0
  635. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/4.jpg +0 -0
  636. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/5.jpg +0 -0
  637. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/6.jpg +0 -0
  638. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/7.jpg +0 -0
  639. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/8.jpg +0 -0
  640. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/landscape.jpg +0 -0
  641. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/demo/mountain-cinematic.jpg +0 -0
  642. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/illustrations/checklist.svg +0 -0
  643. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/illustrations/data_center.svg +0 -0
  644. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/illustrations/idea.svg +0 -0
  645. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/illustrations/it_support.svg +0 -0
  646. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/illustrations/peak_mountain_3.svg +0 -0
  647. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/illustrations/under_constructions_1.svg +0 -0
  648. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/logo/colored.png +0 -0
  649. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/logo/colored.svg +0 -0
  650. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/logo/white.png +0 -0
  651. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/assets/img/logo/white.svg +0 -0
  652. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/common-es2015.388805227aa99c527fba.js +0 -0
  653. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/common-es5.388805227aa99c527fba.js +0 -0
  654. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/favicon.ico +0 -0
  655. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/index.html +0 -0
  656. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/main-es2015.d682619f3d6d53d64c6a.js +0 -0
  657. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/main-es5.d682619f3d6d53d64c6a.js +0 -0
  658. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/polyfills-es2015.8ce2adc69f283f6c4c5e.js +0 -0
  659. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/polyfills-es5.7530172ddcec11a10eb3.js +0 -0
  660. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/runtime-es2015.7130ec4068d875dc38bd.js +0 -0
  661. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/runtime-es5.7130ec4068d875dc38bd.js +0 -0
  662. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/public/styles.ab281309cf423b2cdcb0.css +0 -0
  663. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/__init__.py +0 -0
  664. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/__init__.py +0 -0
  665. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/cli_mock_integration_test.py +0 -0
  666. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/config/firewall_test.py +0 -0
  667. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/config/match_test.py +0 -0
  668. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/config/project/config_project_set_test.py +0 -0
  669. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/config/rewrite_test.py +0 -0
  670. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/config/scenario/config_scenario_set_test.py +0 -0
  671. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/endpoint/endpoint_cli_apply_test.py +0 -0
  672. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/helpers/certificate_authority_test.py +0 -0
  673. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/helpers/openapi_endpoint_adapter_additional_props_test.py +0 -0
  674. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/helpers/openapi_endpoint_adapter_missing_info_test.py +0 -0
  675. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/helpers/openapi_endpoint_adapter_missing_oauth2_scopes_test.py +0 -0
  676. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/helpers/openapi_endpoint_adapter_missing_servers_test.py +0 -0
  677. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/helpers/openapi_endpoint_adapter_test.py +0 -0
  678. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/helpers/schema_builder_test.py +0 -0
  679. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/helpers/synchronize_request_service_test.py +0 -0
  680. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/intercept/intercept_configure_test.py +0 -0
  681. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/intercept/intercept_enable_test.py +0 -0
  682. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/request/request_delete_test.py +0 -0
  683. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/request/request_list_test.py +0 -0
  684. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/request/request_replay_test.py +0 -0
  685. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/request/request_reset_test.py +0 -0
  686. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/request/request_response_test.py +0 -0
  687. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/request/request_snapshot_test.py +0 -0
  688. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/request/request_test_test.py +0 -0
  689. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scaffold/cli_invoker.py +0 -0
  690. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scaffold/cli_test.py +0 -0
  691. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scenario/scenario_create_test.py +0 -0
  692. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scenario/scenario_replay_integration_test.py +0 -0
  693. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scenario/scenario_replay_test.py +0 -0
  694. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scenario/scenario_reset_test.py +0 -0
  695. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scenario/scenario_snapshot_test.py +0 -0
  696. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/scenario/scenario_test_integration_test.py +0 -0
  697. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/snapshot/snapshot_apply_test.py +0 -0
  698. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/snapshot/snapshot_copy_test.py +0 -0
  699. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/snapshot/snapshot_prune_test.py +0 -0
  700. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/cli/snapshot/snapshot_update_test.py +0 -0
  701. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/orm/joined_request_string_adapter_test.py +0 -0
  702. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/orm/request/orm_mitmproxy_request_adapter_test.py +0 -0
  703. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/orm/request/orm_python_request_adapter_test.py +0 -0
  704. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/orm/response/orm_mitmproxy_response_adapter_test.py +0 -0
  705. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/orm/response/orm_python_response_adapter_test.py +0 -0
  706. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/python/request/mitmproxy_adapter_test.py +0 -0
  707. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/python/request/raw_adapter_test.py +0 -0
  708. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/python/request/stoobly_adapter_test.py +0 -0
  709. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/python/response/mitmproxy_response_adapter_test.py +0 -0
  710. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/adapters/python/response/raw_response_adapter_test.py +0 -0
  711. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/factories/resource/local_db/helpers/log_test.py +0 -0
  712. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/factories/resource/local_db/helpers/tiebreak_scenario_request_test.py +0 -0
  713. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/factories/resource/local_db/request_adapter_test.py +0 -0
  714. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/factories/resource/local_db/response_adapter_test.py +0 -0
  715. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/schemas/.stoobly/db/stoobly_agent.sqlite3 +0 -0
  716. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/schemas/.stoobly/settings.yml +0 -0
  717. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/schemas/.stoobly/tmp/options.json +0 -0
  718. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/models/schemas/request_test.py +0 -0
  719. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/mitmproxy/request_facade_test.py +0 -0
  720. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/mock/eval_fixtures_service_test.py +0 -0
  721. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/replay/body_parser_service_test.py +0 -0
  722. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/replay/rewrite_params_service_test.py +0 -0
  723. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/replay/trace_context_test.py +0 -0
  724. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/replay/visitor_test.py +0 -0
  725. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/test/helpers/test_results_builder_test.py +0 -0
  726. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/upload/request_string_test.py +0 -0
  727. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/proxy/upload/response_string_test.py +0 -0
  728. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/test/__init__.py +0 -0
  729. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/test/matchers/contract_test.py +0 -0
  730. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/test/matchers/diff_test.py +0 -0
  731. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/app/test/matchers/fuzzy_test.py +0 -0
  732. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/cli/lifecycle_hooks_test.py +0 -0
  733. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/cli/mock_scenario_lifecycle_hooks.py +0 -0
  734. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/cli/mock_scenario_test.py +0 -0
  735. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/cli/mock_test.py +0 -0
  736. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/cli/record_test.py +0 -0
  737. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/config/data_dir_test.py +0 -0
  738. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/__init__.py +0 -0
  739. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/endpoint_show_response.py +0 -0
  740. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/lifecycle_hooks.py +0 -0
  741. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/petstore-additional-props.yaml +0 -0
  742. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/petstore-expanded.yaml +0 -0
  743. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/petstore-missing-info.yaml +0 -0
  744. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/petstore-missing-oauth2-scopes.yaml +0 -0
  745. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/petstore-missing-servers.yaml +0 -0
  746. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/petstore-references.yaml +0 -0
  747. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/petstore-swagger-io.yaml +0 -0
  748. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/petstore.yaml +0 -0
  749. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/request_show_response.py +0 -0
  750. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/scaffold/docker-compose-assets-service.yml +0 -0
  751. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/scaffold/docker-compose-local-service.yml +0 -0
  752. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/scaffold/index.html +0 -0
  753. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/mock_data/uspto.yaml +0 -0
  754. {stoobly_agent-1.7.0 → stoobly_agent-1.7.1}/stoobly_agent/test/test_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: stoobly-agent
3
- Version: 1.7.0
3
+ Version: 1.7.1
4
4
  Summary: Record, mock, and test HTTP(s) requests. CLI agent for Stoobly
5
5
  License: Apache-2.0
6
6
  Author: Matt Le
@@ -10,7 +10,7 @@ description = "Record, mock, and test HTTP(s) requests. CLI agent for Stoobly"
10
10
  license = "Apache License 2.0"
11
11
  name = "stoobly-agent"
12
12
  readme = "README.md"
13
- version = "1.7.0"
13
+ version = "1.7.1"
14
14
 
15
15
  [tool.poetry.dependencies]
16
16
  python = "^3.10"
@@ -1,2 +1,2 @@
1
1
  COMMAND = 'stoobly-agent'
2
- VERSION = '1.7.0'
2
+ VERSION = '1.7.1'
@@ -15,21 +15,21 @@ class HostsFileManager():
15
15
  ip_address: str
16
16
  hostnames: list[str]
17
17
 
18
- def __get_hosts_file_path(self) -> str:
18
+ # Split IP address and hostnames. Don't include inline comments
19
+ def __split_hosts_line(self, line: str) -> list[str]:
20
+ ip_addr_hosts_split = line.split('#')[0].split()
21
+ return ip_addr_hosts_split
22
+
23
+ def get_hosts_file_path(self) -> str:
19
24
  file_path = '/etc/hosts'
20
25
  if not os.path.exists(file_path):
21
26
  print(f"Error: File {file_path} not found.", file=sys.stderr)
22
27
  sys.exit(1)
23
28
  return file_path
24
29
 
25
- # Split IP address and hostnames. Don't include inline comments
26
- def __split_hosts_line(self, line: str) -> list[str]:
27
- ip_addr_hosts_split = line.split('#')[0].split()
28
- return ip_addr_hosts_split
29
-
30
30
  # Parses hosts file and returns a mapping of IP address to hostnames in a list.
31
31
  def get_hosts(self) -> list[IpAddressToHostnames]:
32
- hosts_file_path = self.__get_hosts_file_path()
32
+ hosts_file_path = self.get_hosts_file_path()
33
33
 
34
34
  if not hosts_file_path:
35
35
  return []
@@ -64,14 +64,14 @@ class HostsFileManager():
64
64
  return None
65
65
 
66
66
  def install_hostnames(self, hostnames: list[str]) -> None:
67
- hosts_file_path = self.__get_hosts_file_path()
67
+ hosts_file_path = self.get_hosts_file_path()
68
68
 
69
69
  self.__add_lines_between_markers(
70
70
  hosts_file_path, SCAFFOLD_HOSTS_DELIMITTER_BEGIN, SCAFFOLD_HOSTS_DELIMITTER_END, hostnames
71
71
  )
72
72
 
73
73
  def uninstall_hostnames(self, hostnames: list[str] = []) -> None:
74
- hosts_file_path = self.__get_hosts_file_path()
74
+ hosts_file_path = self.get_hosts_file_path()
75
75
 
76
76
  self.__remove_lines_between_markers(
77
77
  hosts_file_path, SCAFFOLD_HOSTS_DELIMITTER_BEGIN, SCAFFOLD_HOSTS_DELIMITTER_END, hostnames
@@ -182,4 +182,4 @@ class HostsFileManager():
182
182
  filtered_lines.append(line)
183
183
 
184
184
  with open(file_path, "w") as file:
185
- file.writelines(filtered_lines)
185
+ file.writelines(filtered_lines)
@@ -4,6 +4,7 @@ import socket
4
4
  import time
5
5
 
6
6
  from collections import Counter
7
+ from docker import errors as docker_errors
7
8
  from pathlib import Path
8
9
 
9
10
  import yaml
@@ -25,6 +26,7 @@ from stoobly_agent.app.cli.scaffold.service_docker_compose import ServiceDockerC
25
26
  from stoobly_agent.app.cli.scaffold.validate_command import ValidateCommand
26
27
  from stoobly_agent.app.cli.scaffold.validate_exceptions import ScaffoldValidateException
27
28
  from stoobly_agent.config.data_dir import DATA_DIR_NAME
29
+ from stoobly_agent.lib.logger import bcolors
28
30
 
29
31
  from .app import App
30
32
 
@@ -84,7 +86,10 @@ class ServiceWorkflowValidateCommand(ServiceCommand, ValidateCommand):
84
86
  if attempt < retries - 1:
85
87
  time.sleep(delay)
86
88
 
87
- raise ScaffoldValidateException(f"Connection failed to hostname: {hostname}, port: {port}")
89
+ hostname_not_reachable_message = f"{bcolors.FAIL}Connection failed to hostname: {hostname}, port: {port}, num_retries: {retries}{bcolors.ENDC}"
90
+ suggestion_message = f"{bcolors.BOLD}Try confirming that {hostname} is reachable from your machine or environment.{bcolors.ENDC}"
91
+ error_message = f"{hostname_not_reachable_message}\n\n{suggestion_message}"
92
+ raise ScaffoldValidateException(error_message)
88
93
 
89
94
  # Check if hostname is defined in hosts file
90
95
  def hostname_exists(self, hostname: str) -> bool:
@@ -96,7 +101,12 @@ class ServiceWorkflowValidateCommand(ServiceCommand, ValidateCommand):
96
101
  print(f"Correct hosts mapping found for {hostname}")
97
102
  return True
98
103
 
99
- raise ScaffoldValidateException(f"Missing hosts mapping for {hostname}")
104
+ hosts_file_path = hosts_file_manager.get_hosts_file_path()
105
+
106
+ missing_host_message = f"{bcolors.FAIL}Missing hosts mapping for {hostname}{bcolors.ENDC}"
107
+ suggestion_message = f"{bcolors.BOLD}Confirm hostname '{hostname}' is in your hosts file at '{hosts_file_path}'. If not there, please add it{bcolors.ENDC}"
108
+ error_message = f"{missing_host_message}\n\n{suggestion_message}"
109
+ raise ScaffoldValidateException(error_message)
100
110
 
101
111
  def validate_hostname(self, hostname: str, port: int) -> None:
102
112
  print(f"Validating hostname: {hostname}")
@@ -188,8 +198,13 @@ class ServiceWorkflowValidateCommand(ServiceCommand, ValidateCommand):
188
198
 
189
199
  def validate_proxy_container(self, service_proxy_container: Container):
190
200
  print(f"Validating proxy container: {service_proxy_container.name}")
201
+
202
+ if service_proxy_container.status == 'exited' or service_proxy_container.attrs['State']['ExitCode'] != 0:
203
+ raise ScaffoldValidateException(f"Proxy container is exited: {service_proxy_container.name}")
204
+ if service_proxy_container.status != 'running':
205
+ raise ScaffoldValidateException(f"Proxy container is not running: {service_proxy_container.name}")
191
206
  if not service_proxy_container.attrs:
192
- raise ScaffoldValidateException(f"Container attributes are missing for: {container.name}")
207
+ raise ScaffoldValidateException(f"Container attributes are missing for: {service_proxy_container.name}")
193
208
 
194
209
  if not self.service_config.detached:
195
210
  self.validate_public_folder(service_proxy_container)
@@ -219,32 +234,53 @@ class ServiceWorkflowValidateCommand(ServiceCommand, ValidateCommand):
219
234
  self.validate_public_folder(init_container)
220
235
 
221
236
  if self.service_config.hostname:
222
- service_proxy_container = self.docker_client.containers.get(self.service_docker_compose.proxy_container_name)
237
+ try:
238
+ service_proxy_container = self.docker_client.containers.get(self.service_docker_compose.proxy_container_name)
239
+ except docker_errors.NotFound:
240
+ error_message = self._ValidateCommand__generate_container_not_found_error(self.service_docker_compose.proxy_container_name)
241
+ raise ScaffoldValidateException(error_message)
242
+
223
243
  self.validate_proxy_container(service_proxy_container)
224
244
 
245
+ # External services won't have a container to check
246
+ if self.is_local() or self.service_config.detached:
247
+ container_name = self.service_docker_compose.container_name
248
+ try:
249
+ service_container = self.docker_client.containers.get(container_name)
250
+ except docker_errors.NotFound:
251
+ error_message = self._ValidateCommand__generate_container_not_found_error(container_name)
252
+ raise ScaffoldValidateException(error_message)
253
+ if service_container.status == 'exited' or service_container.attrs['State']['ExitCode'] != 0:
254
+ raise ScaffoldValidateException(f"Custom container is exited: {service_container.name}")
255
+ if service_container.status != 'running':
256
+ raise ScaffoldValidateException(f"Custom container is not running: {service_container.name}")
257
+
225
258
  if self.is_local():
226
259
  print(f"Validating local user defined service: {self.service_name}")
227
260
  # Validate docker-compose path exists
228
261
  docker_compose_path = f"{self.app_dir_path}/{DATA_DIR_NAME}/docker/{self.service_docker_compose.service_name}/{self.workflow_name}/docker-compose.yml"
229
262
  destination_path = Path(docker_compose_path)
263
+
264
+ if not destination_path.exists():
265
+ message = f"{bcolors.FAIL}Docker Compose file does not exist: {destination_path}{bcolors.ENDC}"
266
+ suggestion_message = f"{bcolors.BOLD}A missing Docker Compose file often means it got deleted by accident. Please restore from backup or rerun the scaffold service create command.{bcolors.ENDC}"
267
+ error_message = f"{message}\n\n{suggestion_message}"
268
+ raise ScaffoldValidateException(error_message)
230
269
  if not destination_path.is_file():
231
270
  raise ScaffoldValidateException(f"Docker compose path is not a file: {destination_path}")
232
271
 
233
272
  # Validate docker-compose.yml file has the service defined
234
273
  with open(destination_path) as f:
235
274
  if self.service_name not in f.read():
236
- raise ScaffoldValidateException(f"Local service is not defined in Docker Compose file: {destination_path}")
237
-
238
- service_container = self.docker_client.containers.get(self.service_docker_compose.container_name)
239
- if service_container.status == 'exited':
240
- return False
275
+ message = f"{bcolors.FAIL}Custom container service is not defined in Docker Compose file: {destination_path}{bcolors.ENDC}"
276
+ suggestion_message = f"{bcolors.BOLD}Please add your service definition. See https://docs.docker.com/reference/compose-file/services {bcolors.ENDC}"
277
+ error_message = f"{message}\n\n{suggestion_message}"
278
+ raise ScaffoldValidateException(error_message)
241
279
 
242
280
  if self.service_config.detached:
243
- service_container = self.docker_client.containers.get(self.service_docker_compose.container_name)
244
281
  self.validate_detached(service_container)
245
282
 
246
- print(f"Done validating service: {self.service_name}, success!")
247
- print()
283
+ print(f"{bcolors.OKGREEN}✔ Done validating service: {self.service_name}, success!{bcolors.ENDC}\n")
248
284
 
249
285
  return True
250
286
 
@@ -0,0 +1,6 @@
1
+ FROM stoobly/agent:1.7
2
+
3
+ ARG USER_ID
4
+
5
+ # Change user id of stoobly user to that of host's user id
6
+ RUN if [ -n "$USER_ID" ]; then usermod -u $USER_ID stoobly; fi
@@ -0,0 +1,82 @@
1
+ import pdb
2
+ import re
3
+ from time import sleep
4
+ from typing import Union
5
+
6
+ import docker
7
+ from docker import errors as docker_errors
8
+ from docker.models.containers import Container
9
+
10
+ from stoobly_agent.app.cli.scaffold.validate_exceptions import ScaffoldValidateException
11
+ from stoobly_agent.config.data_dir import DATA_DIR_NAME
12
+ from stoobly_agent.lib.logger import bcolors
13
+
14
+
15
+ class ValidateCommand():
16
+ def __init__(self):
17
+ self.docker_client = docker.from_env()
18
+
19
+ def __generate_container_not_found_error(self, container_name: Union[str, None]) -> str:
20
+ not_found_error_message = f"{bcolors.FAIL}Container not found: {container_name}{bcolors.ENDC}"
21
+ suggestion_message = f"{bcolors.BOLD}Run 'docker ps -a | grep {container_name}'. If found, then inspect the logs with 'docker logs {container_name}'{bcolors.ENDC}"
22
+ error_message = f"{not_found_error_message}\n\n{suggestion_message}"
23
+
24
+ return error_message
25
+
26
+ # Some containers like init and configure can take longer than expected to finish so retry
27
+ def __get_container_with_retries(self, container_name: str) -> Container:
28
+ tries = 30
29
+ for _ in range(tries):
30
+ try:
31
+ container = self.docker_client.containers.get(container_name)
32
+ return container
33
+ except docker_errors.NotFound:
34
+ sleep(0.5)
35
+
36
+ error_message = self.__generate_container_not_found_error(container_name)
37
+ raise ScaffoldValidateException(error_message)
38
+
39
+ def validate_init_containers(self, init_container_name, configure_container_name) -> None:
40
+ print(f"Validating setup containers: {init_container_name}, {configure_container_name}")
41
+
42
+ init_container = self.__get_container_with_retries(init_container_name)
43
+ logs = init_container.logs()
44
+
45
+ if logs and re.search('error', str(logs), re.IGNORECASE):
46
+ error_found_message = f"{bcolors.FAIL}Error logs potentially detected in: {init_container_name}{bcolors.ENDC}"
47
+ suggestion_message = f"{bcolors.BOLD}Run 'docker logs {init_container_name}'{bcolors.ENDC}"
48
+ error_message = f"{error_found_message}\n\n{suggestion_message}"
49
+ raise ScaffoldValidateException(error_message)
50
+
51
+ if init_container.status != 'exited' or init_container.attrs['State']['ExitCode'] != 0:
52
+ init_exit_message = f"{bcolors.FAIL}init container {init_container_name} exited with: {init_container.attrs['State']['ExitCode']}{bcolors.ENDC}"
53
+ suggestion_message = f"{bcolors.BOLD}Run 'docker logs {init_container_name}'{bcolors.ENDC}"
54
+ error_message = f"{init_exit_message}\n\n{suggestion_message}"
55
+ raise ScaffoldValidateException(error_message)
56
+
57
+ configure_container = self.__get_container_with_retries(configure_container_name)
58
+
59
+ configure_container_ran = False
60
+ if configure_container.status == 'exited' and configure_container.attrs['State']['ExitCode'] == 0:
61
+ configure_container_ran = True
62
+ if not configure_container_ran:
63
+ raise ScaffoldValidateException(f"configure container {configure_container_name} exited with: {configure_container.attrs['State']['ExitCode']}")
64
+
65
+ def validate_detached(self, container: Container) -> None:
66
+ print(f"Validating detached for: {container.name}")
67
+
68
+ if not container.attrs:
69
+ error_message = self.__generate_container_not_found_error(container.name)
70
+ raise ScaffoldValidateException(error_message)
71
+
72
+ volume_mounts = container.attrs['Mounts']
73
+ for volume_mount in volume_mounts:
74
+ if DATA_DIR_NAME in volume_mount['Source']:
75
+ return
76
+
77
+ message = f"{bcolors.FAIL}Data directory is missing from container: {container.name}{bcolors.ENDC}"
78
+ suggestion_message = f"{bcolors.BOLD}Data directory might have failed to mount{bcolors.ENDC}"
79
+ error_message = f"{message}\n\n{suggestion_message}"
80
+
81
+ raise ScaffoldValidateException(error_message)
82
+
@@ -0,0 +1,112 @@
1
+ import pdb
2
+
3
+ from docker import errors as docker_errors
4
+
5
+ from stoobly_agent.app.cli.scaffold.constants import WORKFLOW_TEST_TYPE
6
+ from stoobly_agent.app.cli.scaffold.managed_services_docker_compose import (
7
+ ManagedServicesDockerCompose,
8
+ )
9
+ from stoobly_agent.app.cli.scaffold.templates.constants import (
10
+ CORE_ENTRYPOINT_SERVICE_NAME,
11
+ CORE_GATEWAY_SERVICE_NAME,
12
+ CORE_MOCK_UI_SERVICE_NAME,
13
+ CORE_SERVICES,
14
+ )
15
+ from stoobly_agent.app.cli.scaffold.validate_command import ValidateCommand
16
+ from stoobly_agent.app.cli.scaffold.validate_exceptions import ScaffoldValidateException
17
+ from stoobly_agent.app.cli.scaffold.workflow_command import WorkflowCommand
18
+ from stoobly_agent.lib.logger import bcolors
19
+
20
+ from .app import App
21
+
22
+
23
+ class WorkflowValidateCommand(WorkflowCommand, ValidateCommand):
24
+ def __init__(self, app: App, **kwargs):
25
+ WorkflowCommand.__init__(self, app, **kwargs)
26
+ ValidateCommand.__init__(self)
27
+ self.managed_services_docker_compose = ManagedServicesDockerCompose(target_workflow_name=self.workflow_name)
28
+
29
+ # Gateway core service runs in all workflows
30
+ def validate_gateway_service(self):
31
+ print(f"Validating core service: {CORE_GATEWAY_SERVICE_NAME}")
32
+ gateway_container_name = self.managed_services_docker_compose.gateway_container_name
33
+
34
+ container_missing_message = f"{bcolors.FAIL}Container '{gateway_container_name}' not found for service '{CORE_GATEWAY_SERVICE_NAME}'{bcolors.ENDC}"
35
+ suggestion_message = f"{bcolors.BOLD}Workflow might not be running yet. Try running 'scaffold workflow up <WORKFLOW_NAME>'{bcolors.ENDC}"
36
+ error_message = f"{container_missing_message}\n\n{suggestion_message}"
37
+
38
+ try:
39
+ gateway_container = self.docker_client.containers.get(gateway_container_name)
40
+ if not gateway_container or (gateway_container.status != 'running'):
41
+ raise ScaffoldValidateException(error_message)
42
+ except docker_errors.NotFound:
43
+ raise ScaffoldValidateException(error_message)
44
+
45
+ def validate_mock_ui_service(self):
46
+ mock_ui_container_name = self.managed_services_docker_compose.mock_ui_container_name
47
+
48
+ # The stoobly-ui service does not run in test workflows
49
+ if self.workflow_name == WORKFLOW_TEST_TYPE:
50
+ try:
51
+ mock_ui_container = self.docker_client.containers.get(mock_ui_container_name)
52
+
53
+ if mock_ui_container:
54
+ ui_found_message = f"{bcolors.FAIL}Stoobly UI container is running when it shouldn't: {mock_ui_container_name}{bcolors.ENDC}"
55
+ suggestion_message = f"{bcolors.BOLD}Run 'docker ps | grep stoobly_ui' to check if the Stoobly UI is running during the test workflow. Did you stop the record or mock workflow yet?{bcolors.ENDC}"
56
+ error_message = f"{ui_found_message}\n\n{suggestion_message}"
57
+ raise ScaffoldValidateException(error_message)
58
+ except docker_errors.NotFound:
59
+ print(f"Skipping validating core service: {CORE_MOCK_UI_SERVICE_NAME}")
60
+ return
61
+
62
+ print(f"Validating core service: {CORE_MOCK_UI_SERVICE_NAME}")
63
+ container_missing_message = f"{bcolors.FAIL}Container '{mock_ui_container_name}' not found for service '{CORE_MOCK_UI_SERVICE_NAME}'{bcolors.ENDC}"
64
+ suggestion_message = f"{bcolors.BOLD}Stoobly UI is not running. Check if the container is up with 'docker ps -a | grep {mock_ui_container_name}'{bcolors.ENDC}"
65
+ mock_ui_missing_error_message = f"{container_missing_message}\n\n{suggestion_message}"
66
+
67
+ try:
68
+ mock_ui_container = self.docker_client.containers.get(mock_ui_container_name)
69
+ if not mock_ui_container or (mock_ui_container.status != 'running'):
70
+ raise ScaffoldValidateException(mock_ui_missing_error_message)
71
+ except docker_errors.NotFound:
72
+ raise ScaffoldValidateException(mock_ui_missing_error_message)
73
+
74
+ def validate_entrypoint_service(self):
75
+ print(f"Validating core service: {CORE_ENTRYPOINT_SERVICE_NAME}")
76
+
77
+ core_entrypoint_init_container_name = None
78
+ try:
79
+ core_entrypoint_init_container_name = self.managed_services_docker_compose.entrypoint_init_container_name
80
+ entrypoint_init_container = self.docker_client.containers.get(core_entrypoint_init_container_name)
81
+ except docker_errors.NotFound:
82
+ error_message = self._ValidateCommand__generate_container_not_found_error(core_entrypoint_init_container_name)
83
+ raise ScaffoldValidateException(error_message)
84
+
85
+ core_entrypoint_configure_container_name = None
86
+ try:
87
+ core_entrypoint_configure_container_name = self.managed_services_docker_compose.entrypoint_configure_container_name
88
+ entrypoint_configure_container = self.docker_client.containers.get(core_entrypoint_configure_container_name)
89
+ except docker_errors.NotFound:
90
+ error_message = self._ValidateCommand__generate_container_not_found_error(core_entrypoint_configure_container_name)
91
+ raise ScaffoldValidateException(error_message)
92
+
93
+ # NOTE: we should check the correct workflow mode is enabled one day
94
+ # That's not currently queryable
95
+
96
+ print(f"{bcolors.OKGREEN}✔ Done validating core services for workflow: {self.workflow_name}, success!\n{bcolors.ENDC}")
97
+
98
+ def validate_core_services(self):
99
+ self.validate_gateway_service()
100
+ self.validate_mock_ui_service()
101
+ self.validate_init_containers(self.managed_services_docker_compose.init_container_name, self.managed_services_docker_compose.configure_container_name)
102
+ self.validate_entrypoint_service()
103
+
104
+ def validate(self) -> bool:
105
+ print(f"Validating workflow: {self.workflow_name}\n")
106
+ print(f"Validating core services: {CORE_SERVICES}")
107
+
108
+ self.validate_core_services()
109
+
110
+ return True
111
+
112
+
@@ -518,6 +518,7 @@ def up(**kwargs):
518
518
 
519
519
  __run_script(script, kwargs['dry_run'])
520
520
 
521
+
521
522
  @workflow.command(
522
523
  help="Validate a scaffold workflow"
523
524
  )
@@ -536,7 +537,8 @@ def validate(**kwargs):
536
537
  command = WorkflowValidateCommand(app, **config)
537
538
  command.validate()
538
539
  except ScaffoldValidateException as sve:
539
- print(f"\nFatal Scaffold Validation Exception: {sve}", file=sys.stderr)
540
+ print(f"{bcolors.FAIL}\nFatal scaffold validation exception:{bcolors.ENDC}\n{sve}", file=sys.stderr)
541
+ print("\nSee the scaffold workflow troubleshooting guide at: https://docs.stoobly.com/guides/how-to-integrate-e2e-testing/how-to-run-a-workflow/troubleshooting", file=sys.stderr)
540
542
  sys.exit(1)
541
543
 
542
544
  try:
@@ -546,9 +548,12 @@ def validate(**kwargs):
546
548
  command = ServiceWorkflowValidateCommand(app, **config)
547
549
  command.validate()
548
550
  except ScaffoldValidateException as sve:
549
- print(f"\nFatal Scaffold Validation Exception: {sve}", file=sys.stderr)
551
+ print(f"{bcolors.FAIL}\nFatal scaffold validation exception:{bcolors.ENDC}\n{sve}", file=sys.stderr)
552
+ print("\nSee the scaffold workflow troubleshooting guide at: https://docs.stoobly.com/guides/how-to-integrate-e2e-testing/how-to-run-a-workflow/troubleshooting", file=sys.stderr)
550
553
  sys.exit(1)
551
554
 
555
+ print(f"{bcolors.OKCYAN}✔ Done validating Stoobly scaffold and services, success!{bcolors.ENDC}")
556
+
552
557
  @hostname.command(
553
558
  help="Update the system hosts file for all scaffold service hostnames"
554
559
  )
@@ -121,7 +121,7 @@ class TestScaffoldE2e():
121
121
  # Validate docker-compose path exists
122
122
  destination_path = Path(local_service_docker_compose.docker_compose_path)
123
123
  assert destination_path.is_file()
124
- # Add user defined Docker Compose file for the local service
124
+ # Add user defined Docker Compose file for the custom container service
125
125
  shutil.copyfile(local_service_mock_docker_compose_path, destination_path)
126
126
 
127
127
  # Record workflow doesn't have a public folder
@@ -137,7 +137,7 @@ class TestScaffoldE2e():
137
137
  ScaffoldCliInvoker.cli_workflow_down(runner, app_dir_path, target_workflow_name)
138
138
  shutil.rmtree(app_dir_path)
139
139
 
140
- def test_core_components(self, app_dir_path, target_workflow_name):
140
+ def test_core_services(self, app_dir_path, target_workflow_name):
141
141
  app = App(app_dir_path, DOCKER_NAMESPACE)
142
142
  config = {
143
143
  'workflow_name': target_workflow_name,
@@ -260,7 +260,7 @@ class TestScaffoldE2e():
260
260
  ScaffoldCliInvoker.cli_workflow_down(runner, app_dir_path, target_workflow_name)
261
261
  shutil.rmtree(app_dir_path)
262
262
 
263
- def test_no_core_components(self, app_dir_path, target_workflow_name):
263
+ def test_no_core_services(self, app_dir_path, target_workflow_name):
264
264
  app = App(app_dir_path, DOCKER_NAMESPACE)
265
265
  config = {
266
266
  'workflow_name': target_workflow_name,
@@ -11,7 +11,7 @@ class TestHostsFileManager():
11
11
  yield HostsFileManager()
12
12
 
13
13
  def test_get_hosts_file_path(self, hosts_file_manager):
14
- hosts_file_path = hosts_file_manager._HostsFileManager__get_hosts_file_path()
14
+ hosts_file_path = hosts_file_manager.get_hosts_file_path()
15
15
 
16
16
  # Test runners are all Linux distros for now
17
17
  assert hosts_file_path == '/etc/hosts'
@@ -1,6 +0,0 @@
1
- FROM stoobly/agent:1.6
2
-
3
- ARG USER_ID
4
-
5
- # Change user id of stoobly user to that of host's user id
6
- RUN if [ -n "$USER_ID" ]; then usermod -u $USER_ID stoobly; fi
@@ -1,60 +0,0 @@
1
- import pdb
2
- import re
3
- from time import sleep
4
-
5
- import docker
6
- from docker import errors as docker_errors
7
- from docker.models.containers import Container
8
-
9
- from stoobly_agent.app.cli.scaffold.validate_exceptions import ScaffoldValidateException
10
- from stoobly_agent.config.data_dir import DATA_DIR_NAME
11
-
12
-
13
- class ValidateCommand():
14
- def __init__(self):
15
- self.docker_client = docker.from_env()
16
-
17
- # Some containers like init and configure can take longer than expected to finish so retry
18
- def __get_container(self, container_name: str) -> Container:
19
- tries = 30
20
- for _ in range(tries):
21
- try:
22
- container = self.docker_client.containers.get(container_name)
23
- return container
24
- except docker_errors.NotFound:
25
- sleep(0.5)
26
-
27
- raise ScaffoldValidateException(f"Container not found: {container_name}")
28
-
29
- def validate_init_containers(self, init_container_name, configure_container_name) -> None:
30
- print(f"Validating setup containers: {init_container_name}, {configure_container_name}")
31
-
32
-
33
- init_container = self.__get_container(init_container_name)
34
- logs = init_container.logs()
35
- if logs and re.search('error', str(logs), re.IGNORECASE):
36
- raise ScaffoldValidateException(f"Error logs potentially detected in: {init_container_name}")
37
- if init_container.status != 'exited' or init_container.attrs['State']['ExitCode'] != 0:
38
- raise ScaffoldValidateException(f"init container {init_container_name} exited with: {init_container.attrs['State']['ExitCode']}")
39
-
40
- configure_container = self.__get_container(configure_container_name)
41
-
42
- configure_container_ran = False
43
- if configure_container.status == 'exited' and configure_container.attrs['State']['ExitCode'] == 0:
44
- configure_container_ran = True
45
- if not configure_container_ran:
46
- raise ScaffoldValidateException(f"configure container {configure_container_name} exited with: {configure_container.attrs['State']['ExitCode']}")
47
-
48
- def validate_detached(self, container: Container) -> None:
49
- print(f"Validating detached for: {container.name}")
50
-
51
- if not container.attrs:
52
- raise ScaffoldValidateException(f"Container is missing: {container.name}")
53
-
54
- volume_mounts = container.attrs['Mounts']
55
- for volume_mount in volume_mounts:
56
- if DATA_DIR_NAME in volume_mount['Source']:
57
- return
58
-
59
- raise ScaffoldValidateException(f"Data directory is missing from container: {container.name}")
60
-
@@ -1,87 +0,0 @@
1
- import pdb
2
-
3
- from docker import errors as docker_errors
4
-
5
- from stoobly_agent.app.cli.scaffold.constants import WORKFLOW_TEST_TYPE
6
- from stoobly_agent.app.cli.scaffold.managed_services_docker_compose import (
7
- ManagedServicesDockerCompose,
8
- )
9
- from stoobly_agent.app.cli.scaffold.templates.constants import (
10
- CORE_ENTRYPOINT_SERVICE_NAME,
11
- CORE_GATEWAY_SERVICE_NAME,
12
- CORE_MOCK_UI_SERVICE_NAME,
13
- CORE_SERVICES,
14
- )
15
- from stoobly_agent.app.cli.scaffold.validate_command import ValidateCommand
16
- from stoobly_agent.app.cli.scaffold.validate_exceptions import ScaffoldValidateException
17
- from stoobly_agent.app.cli.scaffold.workflow_command import WorkflowCommand
18
-
19
- from .app import App
20
-
21
-
22
- class WorkflowValidateCommand(WorkflowCommand, ValidateCommand):
23
- def __init__(self, app: App, **kwargs):
24
- WorkflowCommand.__init__(self, app, **kwargs)
25
- ValidateCommand.__init__(self)
26
- self.managed_services_docker_compose = ManagedServicesDockerCompose(target_workflow_name=self.workflow_name)
27
-
28
- def validate_core_components(self):
29
- print(f"Validating core component: {CORE_GATEWAY_SERVICE_NAME}")
30
- gateway_container_name = self.managed_services_docker_compose.gateway_container_name
31
- gateway_container = self.docker_client.containers.get(gateway_container_name)
32
- if not gateway_container or (gateway_container.status != 'running'):
33
- raise ScaffoldValidateException(f"Container '{gateway_container_name}' not found for service '{CORE_GATEWAY_SERVICE_NAME}'")
34
-
35
- print(f"Validating core component: {CORE_MOCK_UI_SERVICE_NAME}")
36
- mock_ui_container_name = self.managed_services_docker_compose.mock_ui_container_name
37
- mock_ui_container = self.docker_client.containers.get(mock_ui_container_name)
38
- if not mock_ui_container or (mock_ui_container.status != 'running'):
39
- raise ScaffoldValidateException(f"Container '{mock_ui_container_name}' not found for service '{CORE_MOCK_UI_SERVICE_NAME}'")
40
-
41
- def validate_no_core_components(self):
42
- try:
43
- core_mock_ui_container_name = self.docker_client.containers.get(self.managed_services_docker_compose.mock_ui_container_name)
44
- if core_mock_ui_container_name:
45
- raise ScaffoldValidateException(f"Stoobly UI container is running when it shouldn't: {core_mock_ui_container_name.name}")
46
- except docker_errors.NotFound:
47
- pass
48
-
49
- print(f"Skipping validating core component: {CORE_GATEWAY_SERVICE_NAME}")
50
- print(f"Skipping validating core component: {CORE_MOCK_UI_SERVICE_NAME}")
51
-
52
-
53
- def validate(self) -> bool:
54
- print(f"Validating workflow: {self.workflow_name}")
55
- print(f"Validating core components: {CORE_SERVICES}")
56
-
57
- if self.workflow_name == WORKFLOW_TEST_TYPE:
58
- # Don't validate the gateway and mock_ui core components in the "test" workflow
59
- self.validate_no_core_components()
60
- else:
61
- self.validate_core_components()
62
-
63
- self.validate_init_containers(self.managed_services_docker_compose.init_container_name, self.managed_services_docker_compose.configure_container_name)
64
-
65
- print(f"Validating core component: {CORE_ENTRYPOINT_SERVICE_NAME}")
66
-
67
- try:
68
- core_entrypoint_init_container_name = self.managed_services_docker_compose.entrypoint_init_container_name
69
- entrypoint_init_container = self.docker_client.containers.get(core_entrypoint_init_container_name)
70
- except docker_errors.NotFound:
71
- raise ScaffoldValidateException(f"Container not found: {core_entrypoint_init_container_name}")
72
-
73
- try:
74
- core_entrypoint_configure_container_name = self.managed_services_docker_compose.entrypoint_configure_container_name
75
- entrypoint_configure_container = self.docker_client.containers.get(core_entrypoint_configure_container_name)
76
- except docker_errors.NotFound:
77
- raise ScaffoldValidateException(f"Container not found: {core_entrypoint_configure_container_name}")
78
-
79
- # NOTE: we should check the correct workflow mode is enabled one day
80
- # That's not currently queryable
81
-
82
- print(f"Done validating workflow: {self.workflow_name}, success!")
83
- print()
84
-
85
- return True
86
-
87
-
File without changes
File without changes