codeplain 0.3.11.dev22__tar.gz → 0.3.12.dev24__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.
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/PKG-INFO +1 -1
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/codeplain_REST_api.py +56 -1
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/file_utils.py +15 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_file_utils.py +58 -2
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.claude/settings.json +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.flake8 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/dependabot.yml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/e2e.yml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/lint-and-test.yml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/lint-powershell.yml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/nofity-slack-on-main-merge.yml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/publish-dev-to-pypi.yml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/publish-install-script.yml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/publish-to-pypi.yml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.gitignore +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.vscode/launch.json +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.vscode/settings.json +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/CLAUDE.md +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/CONTRIBUTING.md +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/LICENSE +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/README.md +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/change_detection.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/cli_output/__init__.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/cli_output/dry_run.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/cli_output/render_summary.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/cli_output/status.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/concept_utils.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/config/__init__.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/config/system_config.yaml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/conformance_fix_journal.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/diff_utils.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/docs/generate_cli.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/docs/plain2code_cli.md +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/docs/starting_a_plain_project_from_scratch.md +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/event_bus.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_golang/config.yaml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_golang/harness_tests/hello_world_test.go +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_golang/hello_world_golang.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_golang/run.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_python/config.yaml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_python/harness_tests/hello_world_display/test_hello_world.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_python/hello_world_python.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_python/run.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/config.yaml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/harness_tests/hello_world_display/cypress/e2e/hello_world.cy.ts +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/harness_tests/hello_world_display/cypress/support/e2e.ts +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/harness_tests/hello_world_display/cypress.config.ts +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/harness_tests/hello_world_display/package.json +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/harness_tests/hello_world_display/tsconfig.json +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/hello_world_react.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/run.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/run.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/git_preflight.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/git_utils.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/install/bash/examples.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/install/bash/install.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/install/bash/walkthrough.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/install/powershell/examples.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/install/powershell/install.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/install/powershell/walkthrough.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/memory_management.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/metadata_utils.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/module_renderer.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/partial_rendering.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/path_resolution.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_arguments.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_cli.md +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_console.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_events.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_exceptions.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_logger.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_nodes.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_read_config.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_state.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_telemetry.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain2code_utils.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain_file.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain_modules.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/plain_spec.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/pyproject.toml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/pytest.ini +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/__init__.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/analyze_specification_ambiguity.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/base_action.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/commit_conformance_tests_changes.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/commit_implementation_code_changes.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/create_dist.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/distill_conformance_test_memory.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/exit_with_error.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/finish_functional_requirement.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/fix_conformance_test.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/fix_unit_tests.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/prepare_repositories.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/prepare_testing_environment.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/refactor_code.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/render_conformance_tests.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/render_functional_requirement.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/run_conformance_tests.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/run_unit_tests.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/summarize_conformance_tests.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/code_renderer.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/conformance_tests.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/implementation_code_helpers.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/render_context.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/render_types.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/render_utils.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/state_machine_config.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/states.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/triggers.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/requirements.txt +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/resources/codeplain_overview.png +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/resources/plain_example.png +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/standard_template_library/golang-console-app-template.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/standard_template_library/python-console-app-template.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/standard_template_library/typescript-react-app-boilerplate.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/standard_template_library/typescript-react-app-template.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/system_config.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_cypress.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_cypress.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_golang.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_golang.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_python.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_python.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_unittests_flutter.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_unittests_flutter.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_unittests_golang.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_unittests_golang.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_unittests_python.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_unittests_python.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_unittests_react.ps1 +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_unittests_react.sh +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/__init__.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/conftest.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/acceptance_tests_warning/main_requiring_acceptance_tests.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/acceptance_tests_warning/required_with_acceptance_tests.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/circular_imports_1.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/circular_imports_2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/circular_imports_main.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/diamond_import_1.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/diamond_import_2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/diamond_import_common.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/diamond_imports_main.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/import_with_functionalities.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/imports_module_with_functionalities.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/non_existent_import.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_code_var.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_implement.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_leaf.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_middle.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_root.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_solo.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/add_new_task_modal_specification.yaml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/duplicate_specification_heading.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/empty_functional_specs_section.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/invalid_specification_order.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/missing_non_functional_requirements.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/no_functional_specs_section.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/plain_source_with_absolute_link.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/plain_source_with_missing_link.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/plain_source_with_url_link.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/task_list_ui_specification.yaml +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/task_manager_with_reference_links.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfile/without_non_functional_requirement.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_acceptance_tests.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_acceptance_tests_nondefined.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_defined_nondefined.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_defined_nondefined_2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_definition.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_noconcepts.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_nonconcept.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_nondefined.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_redefinition.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_several_concepts.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/concept_validation_valid.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/cyclic_definitions.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_base.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_defaults_exported.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_example.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_imported_exported.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_inherited_reexported.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_malformed.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_missing_definition.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_missing_definition_example.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_multiple_per_bullet.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_multiple_per_bullet_undefined.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_nested.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_nested_example.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_no_definitions.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_not_declared.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_not_declared_example.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_transitive_example.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_transitive_l1.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/exported_concepts_transitive_l2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/plain_file_parser_with_comments.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/plain_file_with_comments_indented.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/regular_plain_source.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts_defs.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts_example.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts_l1.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts_l2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts_missing.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts_module.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts_partial.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/required_concepts_partial_duplicate.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/requires_without_definitions_example.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/topological_sort.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/plainfileparser/topological_sort_not_referenced.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/circular_requires_main.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/circular_requires_sub.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/diamond_requires_1.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/diamond_requires_2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/diamond_requires_common.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/diamond_requires_main.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/independent_requires_1.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/independent_requires_2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/independent_requires_main.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/non_existent_require.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/normal_requires_1.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/normal_requires_2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/normal_requires_common.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/requires/normal_requires_main.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/sample_base64_image.txt +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/simple.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/templates/block_level_include.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/templates/code_variables.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/templates/header.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/templates/implement.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/templates/implement_2.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/templates/template_include.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/templates/test_hardest_problem.plain +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/e2e/Dockerfile +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/e2e/conftest.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/e2e/test_hello_world_python.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/e2e/test_hello_world_python_windows.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_arg_provenance.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_change_detection.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_cli_output.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_conformance_fix_journal.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_console_log_styles.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_distill_conformance_test_memory.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_dry_run_link_validation.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_fix_unit_tests_conformance_context.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_folder_path_resolution.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_git_preflight.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_git_utils.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_headless_logging.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_imports.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_log_file_name_resolution.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_logging_config_path_resolution.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_partial_rendering.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_path_resolution.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_plain2code.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_plain2code_state.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_plain2code_utils.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_plain_modules.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_plainfile.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_plainfileparser.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_plainspec.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_prepare_repositories_layout.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_render_finished_report.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_requires.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_resolve_config_file.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_script_path_resolution.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_system_config.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_telemetry.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_tui_components.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_tui_usage.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/test_usage_summary.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/__init__.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/components.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/models.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/plain2code_tui.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/plain_module_render_choice_tui.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/spinner.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/state_handlers.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/styles.css +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tui/widget_helpers.py +0 -0
- {codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/usage_summary.py +0 -0
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import socket
|
|
1
2
|
import time
|
|
2
3
|
from typing import Optional
|
|
3
4
|
|
|
4
5
|
import requests
|
|
6
|
+
from requests.adapters import HTTPAdapter
|
|
5
7
|
from requests.exceptions import ConnectionError, RequestException, Timeout
|
|
8
|
+
from urllib3.connection import HTTPConnection
|
|
6
9
|
|
|
7
10
|
import plain2code_exceptions
|
|
8
11
|
from plain2code_console import RETRY_COLOR
|
|
@@ -15,6 +18,57 @@ RETRY_DELAY = 3
|
|
|
15
18
|
# at exit, and requests waits indefinitely by default.
|
|
16
19
|
REPORT_TIMEOUT_SECONDS = 5
|
|
17
20
|
|
|
21
|
+
# A render call can leave the connection with nothing on it for several minutes while the
|
|
22
|
+
# service works on the answer. Network equipment between the two, such as the address
|
|
23
|
+
# translation a CI runner sits behind, drops a connection that quiet and tells neither end.
|
|
24
|
+
# The answer then has nowhere to go and the client waits for it for as long as it is allowed
|
|
25
|
+
# to run. These probes put a packet on the connection often enough to keep it, and they end
|
|
26
|
+
# it when the other end has really gone.
|
|
27
|
+
KEEPALIVE_IDLE_SECONDS = 60
|
|
28
|
+
KEEPALIVE_INTERVAL_SECONDS = 30
|
|
29
|
+
KEEPALIVE_FAILED_PROBES = 4
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def keepalive_socket_options():
|
|
33
|
+
"""The socket options that keep a long, quiet request alive, for the platforms that have them."""
|
|
34
|
+
options = list(HTTPConnection.default_socket_options)
|
|
35
|
+
options.append((socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1))
|
|
36
|
+
# The option that sets the idle time is named differently per platform, and Windows has
|
|
37
|
+
# none of the three. Whatever is missing is left out; the keepalive itself still applies.
|
|
38
|
+
for idle_option in ("TCP_KEEPIDLE", "TCP_KEEPALIVE"):
|
|
39
|
+
if hasattr(socket, idle_option):
|
|
40
|
+
options.append((socket.IPPROTO_TCP, getattr(socket, idle_option), KEEPALIVE_IDLE_SECONDS))
|
|
41
|
+
break
|
|
42
|
+
if hasattr(socket, "TCP_KEEPINTVL"):
|
|
43
|
+
options.append((socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, KEEPALIVE_INTERVAL_SECONDS))
|
|
44
|
+
if hasattr(socket, "TCP_KEEPCNT"):
|
|
45
|
+
options.append((socket.IPPROTO_TCP, socket.TCP_KEEPCNT, KEEPALIVE_FAILED_PROBES))
|
|
46
|
+
return options
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class KeepaliveAdapter(HTTPAdapter):
|
|
50
|
+
"""Opens every connection with keepalive on, whether it goes direct or through a proxy."""
|
|
51
|
+
|
|
52
|
+
def init_poolmanager(self, *args, **kwargs):
|
|
53
|
+
kwargs["socket_options"] = keepalive_socket_options()
|
|
54
|
+
return super().init_poolmanager(*args, **kwargs)
|
|
55
|
+
|
|
56
|
+
def proxy_manager_for(self, proxy, **proxy_kwargs):
|
|
57
|
+
# A request that goes through a proxy is served from a separate pool, which the
|
|
58
|
+
# options above never reach. A render behind a proxy is as quiet as any other and
|
|
59
|
+
# needs the same keepalive.
|
|
60
|
+
proxy_kwargs["socket_options"] = keepalive_socket_options()
|
|
61
|
+
return super().proxy_manager_for(proxy, **proxy_kwargs)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def new_session():
|
|
65
|
+
"""A requests session whose connections carry keepalive."""
|
|
66
|
+
session = requests.Session()
|
|
67
|
+
session.mount("https://", KeepaliveAdapter())
|
|
68
|
+
session.mount("http://", KeepaliveAdapter())
|
|
69
|
+
return session
|
|
70
|
+
|
|
71
|
+
|
|
18
72
|
RETRY_ERROR_CODES = [
|
|
19
73
|
"LLMInternalError",
|
|
20
74
|
]
|
|
@@ -36,6 +90,7 @@ class CodeplainAPI:
|
|
|
36
90
|
def __init__(self, api_key, console):
|
|
37
91
|
self.api_key = api_key
|
|
38
92
|
self.console = console
|
|
93
|
+
self.session = new_session()
|
|
39
94
|
|
|
40
95
|
@property
|
|
41
96
|
def api_url(self):
|
|
@@ -139,7 +194,7 @@ class CodeplainAPI:
|
|
|
139
194
|
|
|
140
195
|
for attempt in range(num_retries + 1):
|
|
141
196
|
try:
|
|
142
|
-
response =
|
|
197
|
+
response = self.session.post(endpoint_url, headers=headers, json=payload, timeout=timeout)
|
|
143
198
|
|
|
144
199
|
try:
|
|
145
200
|
response_json = response.json()
|
|
@@ -142,7 +142,20 @@ def get_existing_files_content(build_folder, existing_files):
|
|
|
142
142
|
return existing_files_content
|
|
143
143
|
|
|
144
144
|
|
|
145
|
+
def ensure_final_newline(content: str) -> str:
|
|
146
|
+
"""Ends non-empty text with a newline, as linters expect (e.g. RuboCop, ESLint eol-last, Ruff W292)."""
|
|
147
|
+
if content and not content.endswith("\n"):
|
|
148
|
+
return content + "\n"
|
|
149
|
+
return content
|
|
150
|
+
|
|
151
|
+
|
|
145
152
|
def store_response_files(target_folder, response_files, existing_files):
|
|
153
|
+
"""Writes the files returned by the API to target_folder. None content deletes the file.
|
|
154
|
+
|
|
155
|
+
Every written file ends with a newline - whole-file rewrites come back from the API without one. The
|
|
156
|
+
added newline is also written back into response_files, so callers that diff response_files against
|
|
157
|
+
the folder afterwards see exactly what is on disk.
|
|
158
|
+
"""
|
|
146
159
|
for file_name in response_files:
|
|
147
160
|
full_file_name = os.path.join(target_folder, file_name)
|
|
148
161
|
|
|
@@ -156,6 +169,8 @@ def store_response_files(target_folder, response_files, existing_files):
|
|
|
156
169
|
|
|
157
170
|
continue
|
|
158
171
|
|
|
172
|
+
response_files[file_name] = ensure_final_newline(response_files[file_name])
|
|
173
|
+
|
|
159
174
|
os.makedirs(os.path.dirname(full_file_name), exist_ok=True)
|
|
160
175
|
|
|
161
176
|
with open(full_file_name, "w", encoding="utf-8") as f:
|
|
@@ -3,7 +3,8 @@ import tempfile
|
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from diff_utils import get_code_diff
|
|
7
|
+
from file_utils import get_existing_files_content, load_linked_resources, store_response_files
|
|
7
8
|
from plain2code_exceptions import UnsupportedBase64Content, UnsupportedResourceType
|
|
8
9
|
from plain2code_utils import MAX_BASE64_BLOB_LENGTH
|
|
9
10
|
|
|
@@ -84,9 +85,64 @@ def test_load_linked_resources_real_base64_image_raises(template_dir):
|
|
|
84
85
|
def test_store_response_files_writes_unicode_as_utf8(template_dir):
|
|
85
86
|
# Content with a non-cp1252 character (📍 U+1F4CD) must be written as UTF-8
|
|
86
87
|
# regardless of the platform's default text encoding (e.g. cp1252 on Windows).
|
|
87
|
-
content = "Location 📍 marker"
|
|
88
|
+
content = "Location 📍 marker\n"
|
|
88
89
|
store_response_files(template_dir, {"notes.md": content}, [])
|
|
89
90
|
|
|
90
91
|
file_path = os.path.join(template_dir, "notes.md")
|
|
91
92
|
with open(file_path, "rb") as f:
|
|
92
93
|
assert f.read().decode("utf-8") == content
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _read_bytes(folder, file_name):
|
|
97
|
+
with open(os.path.join(folder, file_name), "rb") as f:
|
|
98
|
+
return f.read().decode("utf-8")
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@pytest.mark.parametrize(
|
|
102
|
+
"content, expected",
|
|
103
|
+
[
|
|
104
|
+
("class Foo\nend", "class Foo\nend\n"),
|
|
105
|
+
("class Foo\nend\n", "class Foo\nend\n"),
|
|
106
|
+
("class Foo\nend\n\n", "class Foo\nend\n\n"),
|
|
107
|
+
("class Foo\r\nend\r\n", "class Foo\r\nend\r\n"),
|
|
108
|
+
("", ""),
|
|
109
|
+
],
|
|
110
|
+
)
|
|
111
|
+
def test_store_response_files_ends_every_text_file_with_a_newline(template_dir, content, expected):
|
|
112
|
+
# Linters gate on a final newline (RuboCop Layout/TrailingEmptyLines, ESLint eol-last, Ruff W292), so a
|
|
113
|
+
# whole-file rewrite that comes back without one must not reach the disk that way.
|
|
114
|
+
store_response_files(template_dir, {"app/foo.rb": content}, [])
|
|
115
|
+
|
|
116
|
+
assert _read_bytes(template_dir, "app/foo.rb") == expected
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def test_store_response_files_hands_back_the_content_it_wrote(template_dir):
|
|
120
|
+
# Callers diff the response files against the build folder after storing them (fix journal, conformance
|
|
121
|
+
# fixes handed to the unit tests fixer), so the response files must match what is on disk.
|
|
122
|
+
response_files = {"app/foo.rb": "class Foo\nend", "app/bar.rb": "class Bar\nend\n"}
|
|
123
|
+
|
|
124
|
+
store_response_files(template_dir, response_files, [])
|
|
125
|
+
|
|
126
|
+
assert response_files == {"app/foo.rb": "class Foo\nend\n", "app/bar.rb": "class Bar\nend\n"}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def test_rewriting_a_file_without_its_final_newline_does_not_change_it(template_dir):
|
|
130
|
+
existing_files = store_response_files(template_dir, {"app/foo.rb": "class Foo\nend\n"}, [])
|
|
131
|
+
existing_files_content = get_existing_files_content(template_dir, existing_files)
|
|
132
|
+
|
|
133
|
+
rewrite = {"app/foo.rb": "class Foo\nend"}
|
|
134
|
+
store_response_files(template_dir, rewrite, existing_files)
|
|
135
|
+
|
|
136
|
+
assert get_existing_files_content(template_dir, existing_files) == existing_files_content
|
|
137
|
+
assert get_code_diff(rewrite, existing_files_content) == {}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def test_store_response_files_still_deletes_a_file_whose_content_is_none(template_dir):
|
|
141
|
+
existing_files = store_response_files(template_dir, {"app/foo.rb": "class Foo\nend\n"}, [])
|
|
142
|
+
|
|
143
|
+
response_files = {"app/foo.rb": None}
|
|
144
|
+
store_response_files(template_dir, response_files, existing_files)
|
|
145
|
+
|
|
146
|
+
assert not os.path.exists(os.path.join(template_dir, "app/foo.rb"))
|
|
147
|
+
assert existing_files == []
|
|
148
|
+
assert response_files == {"app/foo.rb": None}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/nofity-slack-on-main-merge.yml
RENAMED
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/.github/workflows/publish-install-script.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/docs/starting_a_plain_project_from_scratch.md
RENAMED
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_golang/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_golang/run.sh
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_python/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_python/run.sh
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/examples/example_hello_world_react/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/fix_conformance_test.py
RENAMED
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/prepare_repositories.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/render_conformance_tests.py
RENAMED
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/actions/run_conformance_tests.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/render_machine/implementation_code_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_cypress.ps1
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_cypress.sh
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_golang.ps1
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_golang.sh
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_python.ps1
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/test_scripts/run_conformance_tests_python.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/circular_imports_1.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/circular_imports_2.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/circular_imports_main.plain
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/diamond_import_common.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/diamond_imports_main.plain
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/imports/non_existent_import.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_code_var.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_implement.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_leaf.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_middle.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_root.plain
RENAMED
|
File without changes
|
{codeplain-0.3.11.dev22 → codeplain-0.3.12.dev24}/tests/data/partial_rendering/pr_solo.plain
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|