gyomu-python-analysis 0.4.0__tar.gz → 0.5.0__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 (169) hide show
  1. gyomu_python_analysis-0.5.0/PKG-INFO +25 -0
  2. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/pyproject.toml +13 -0
  3. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/helpers.py +8 -6
  4. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/initialize.py +20 -0
  5. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/project/context.py +2 -0
  6. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/snapshot/analyze.py +1 -1
  7. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/snapshot/commit.py +1 -1
  8. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/snapshot/create.py +1 -1
  9. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/snapshot/diff.py +1 -2
  10. gyomu_python_analysis-0.5.0/src/gyomu_python_analysis/snapshot/models.py +27 -0
  11. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/test_initialize.py +81 -4
  12. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/snapshot/test_commit.py +3 -3
  13. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/snapshot/test_create.py +4 -1
  14. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/snapshot/test_diff.py +2 -2
  15. gyomu_python_analysis-0.4.0/PKG-INFO +0 -16
  16. gyomu_python_analysis-0.4.0/src/gyomu_python_analysis/snapshot/models.py +0 -103
  17. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/.gitignore +0 -0
  18. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/README.md +0 -0
  19. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/experiments/griffe_analysis.py +0 -0
  20. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/experiments/griffe_dump.py +0 -0
  21. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/experiments/sample/__init__.py +0 -0
  22. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/experiments/sample/user.py +0 -0
  23. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/experiments/sample.py +0 -0
  24. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/__init__.py +0 -0
  25. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/pyproject.toml +0 -0
  26. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/__init__.py +0 -0
  27. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/__init__.py +0 -0
  28. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/ast/call.py +0 -0
  29. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/ast/comprehension.py +0 -0
  30. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/ast/for.py +0 -0
  31. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/ast/function.py +0 -0
  32. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/ast/if.py +0 -0
  33. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/ast/match.py +0 -0
  34. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/ast/try.py +0 -0
  35. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/ast/with.py +0 -0
  36. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/01-simple.py +0 -0
  37. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/02-args.py +0 -0
  38. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/03-typed-return.py +0 -0
  39. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/04-raises.py +0 -0
  40. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/05-examples.py +0 -0
  41. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/06-notes.py +0 -0
  42. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/07-complex.py +0 -0
  43. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/08-gyomu-context.py +0 -0
  44. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/09-custom-section.py +0 -0
  45. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/10-edge-cases.py +0 -0
  46. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/11-custom-and-gyomu-context.py +0 -0
  47. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/12-module.py +0 -0
  48. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/13-class.py +0 -0
  49. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/14-variable.py +0 -0
  50. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/15-custom-list-section.py +0 -0
  51. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/docstring/__init__.py +0 -0
  52. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/import/__init__.py +0 -0
  53. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/import/all.py +0 -0
  54. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/import/all2.py +0 -0
  55. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/import/imports.py +0 -0
  56. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/import/relative.py +0 -0
  57. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/shared.py +0 -0
  58. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/__init__.py +0 -0
  59. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/call.py +0 -0
  60. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/callable.py +0 -0
  61. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/classes.py +0 -0
  62. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/decorator.py +0 -0
  63. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/functions.py +0 -0
  64. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/generics.py +0 -0
  65. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/location.py +0 -0
  66. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/pydantic.py +0 -0
  67. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/type_alias.py +0 -0
  68. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/types.py +0 -0
  69. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/symbol/variable.py +0 -0
  70. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/types/__init__.py +0 -0
  71. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/fixtures/src/analysis/types/name.py +0 -0
  72. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/monorepo_fixtures/packages/project_a/pyproject.toml +0 -0
  73. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/monorepo_fixtures/packages/project_a/src/project_a/__init__.py +0 -0
  74. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/monorepo_fixtures/packages/project_a/src/project_a/module.py +0 -0
  75. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/monorepo_fixtures/packages/project_b/pyproject.toml +0 -0
  76. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/monorepo_fixtures/packages/project_b/src/project_b/__init__.py +0 -0
  77. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/monorepo_fixtures/packages/project_b/src/project_b/module.py +0 -0
  78. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/python_analysis_test_support/monorepo_fixtures/pyproject.toml +0 -0
  79. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/roadmap.md +0 -0
  80. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/__init__.py +0 -0
  81. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/__init__.py +0 -0
  82. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/__init__.py +0 -0
  83. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/ast/__init__.py +0 -0
  84. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/ast/statement.py +0 -0
  85. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/ast/symbol.py +0 -0
  86. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/cls.py +0 -0
  87. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/context.py +0 -0
  88. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/decorator.py +0 -0
  89. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/dependency.py +0 -0
  90. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/docstring.py +0 -0
  91. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/expression/__init__.py +0 -0
  92. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/expression/expr.py +0 -0
  93. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/functions.py +0 -0
  94. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/imports.py +0 -0
  95. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/internal/__init__.py +0 -0
  96. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/internal/common.py +0 -0
  97. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/internal/location.py +0 -0
  98. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/internal/visibility.py +0 -0
  99. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/pydantic.py +0 -0
  100. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/type_alias.py +0 -0
  101. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/types.py +0 -0
  102. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/analyzers/variables.py +0 -0
  103. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/delete_cache.py +0 -0
  104. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/extract/__init__.py +0 -0
  105. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/extract/symbols.py +0 -0
  106. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/file/__init__.py +0 -0
  107. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/file/source_file_context.py +0 -0
  108. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/get_module.py +0 -0
  109. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/load.py +0 -0
  110. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/load_file_context.py +0 -0
  111. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/load_module.py +0 -0
  112. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/metadata.py +0 -0
  113. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/parser/__init__.py +0 -0
  114. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/parser/docstring.py +0 -0
  115. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/analysis/workspace.py +0 -0
  116. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/error/__init__.py +0 -0
  117. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/error/analysis.py +0 -0
  118. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/path/__init__.py +0 -0
  119. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/path/conversion.py +0 -0
  120. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/project/__init__.py +0 -0
  121. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/project/workspace.py +0 -0
  122. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/snapshot/__init__.py +0 -0
  123. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/snapshot/project.py +0 -0
  124. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/src/gyomu_python_analysis/snapshot/types.py +0 -0
  125. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/__init__.py +0 -0
  126. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/__init__.py +0 -0
  127. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/__init__.py +0 -0
  128. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/__init__.py +0 -0
  129. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/conftest.py +0 -0
  130. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/helper.py +0 -0
  131. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_call.py +0 -0
  132. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_comprehension.py +0 -0
  133. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_conversion.py +0 -0
  134. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_dependency.py +0 -0
  135. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_for.py +0 -0
  136. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_function.py +0 -0
  137. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_if.py +0 -0
  138. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_match.py +0 -0
  139. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_statement.py +0 -0
  140. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_try.py +0 -0
  141. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/ast/test_with.py +0 -0
  142. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/expression/__init__.py +0 -0
  143. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/expression/test_analyze_expression_name.py +0 -0
  144. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/internal/__init__.py +0 -0
  145. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/internal/test_location.py +0 -0
  146. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/internal/test_visibility.py +0 -0
  147. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_classes.py +0 -0
  148. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_decorator.py +0 -0
  149. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_dependency.py +0 -0
  150. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_docstring.py +0 -0
  151. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_functions.py +0 -0
  152. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_imports.py +0 -0
  153. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_pydantic.py +0 -0
  154. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_type_alias.py +0 -0
  155. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_types.py +0 -0
  156. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_analyze_variable.py +0 -0
  157. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/analyzers/test_context.py +0 -0
  158. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/test_get_module.py +0 -0
  159. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/test_load.py +0 -0
  160. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/test_load_file.py +0 -0
  161. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/test_load_module.py +0 -0
  162. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/test_metadata.py +0 -0
  163. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/analysis/test_workspace.py +0 -0
  164. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/path/__init__.py +0 -0
  165. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/path/test_conversion.py +0 -0
  166. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/project/test_config.py +0 -0
  167. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/snapshot/__init__.py +0 -0
  168. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/snapshot/test_analyze.py +0 -0
  169. {gyomu_python_analysis-0.4.0 → gyomu_python_analysis-0.5.0}/tests/unit/snapshot/test_project.py +0 -0
@@ -0,0 +1,25 @@
1
+ Metadata-Version: 2.5
2
+ Name: gyomu-python-analysis
3
+ Version: 0.5.0
4
+ Summary: Gyomu Python Analysis
5
+ Author: Yoshihisa Matsumoto
6
+ License-Expression: MIT
7
+ Classifier: Development Status :: 4 - Beta
8
+ Classifier: Intended Audience :: Developers
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Topic :: Software Development :: Libraries
13
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
14
+ Requires-Python: >=3.13
15
+ Requires-Dist: docstring-parser>=0.18.0
16
+ Requires-Dist: griffelib>=2.2.0
17
+ Requires-Dist: gyomu-infra
18
+ Requires-Dist: gyomu-schema
19
+ Requires-Dist: pydantic
20
+ Requires-Dist: returns
21
+ Description-Content-Type: text/markdown
22
+
23
+ # gyomu-python-analysis
24
+
25
+ python analysis components for Gyomu Python.
@@ -12,6 +12,19 @@ dependencies = [
12
12
  "griffelib>=2.2.0",
13
13
  "docstring-parser>=0.18.0",
14
14
  ]
15
+ license = "MIT"
16
+ authors = [
17
+ { name = "Yoshihisa Matsumoto" },
18
+ ]
19
+ classifiers = [
20
+ "Development Status :: 4 - Beta",
21
+ "Intended Audience :: Developers",
22
+ "License :: OSI Approved :: MIT License",
23
+ "Programming Language :: Python :: 3",
24
+ "Programming Language :: Python :: 3.13",
25
+ "Topic :: Software Development :: Libraries",
26
+ "Topic :: Software Development :: Libraries :: Python Modules",
27
+ ]
15
28
 
16
29
  [build-system]
17
30
  requires = ["hatchling"]
@@ -18,12 +18,6 @@ from gyomu_python_analysis.analysis.load_module import load_module_analysis
18
18
  from gyomu_python_analysis.project.context import ProjectContext, PyProjectConfig
19
19
  from gyomu_python_analysis.snapshot.models import (
20
20
  AnalyzeProjectChangesResult,
21
- FileAdded,
22
- FileChange,
23
- FileDeleted,
24
- FileSnapshot,
25
- FileUpdated,
26
- ProjectSnapshot,
27
21
  )
28
22
  from gyomu_schema.schemas.python.class_analysis import ClassAnalysis
29
23
  from gyomu_schema.schemas.python.function_analysis import FunctionAnalysis
@@ -36,6 +30,14 @@ from gyomu_schema.schemas.python.types import (
36
30
  WorkspaceRelativePath,
37
31
  )
38
32
  from gyomu_schema.schemas.python.variable import VariableAnalysis
33
+ from gyomu_schema.schemas.snapshot.types import (
34
+ FileAdded,
35
+ FileChange,
36
+ FileDeleted,
37
+ FileSnapshot,
38
+ FileUpdated,
39
+ ProjectSnapshot,
40
+ )
39
41
  from gyomu_schema.schemas.types import FullPath
40
42
  from returns.result import Failure
41
43
 
@@ -71,16 +71,36 @@ def initialize_project_context(
71
71
  files = find_included_python_files(
72
72
  project_root=project_root, source_root=source_root
73
73
  )
74
+
75
+ package_roots = find_package_roots(
76
+ project_root=project_root,
77
+ source_root=source_root,
78
+ )
79
+
74
80
  return Success(
75
81
  ProjectContext(
76
82
  project_root=project_root,
77
83
  source_root=source_root,
78
84
  config=config_result.unwrap(),
79
85
  included_files=files,
86
+ package_roots=package_roots,
80
87
  )
81
88
  )
82
89
 
83
90
 
91
+ def find_package_roots(
92
+ project_root: FullPath,
93
+ source_root: ProjectRelativePath,
94
+ ) -> tuple[ProjectRelativePath, ...]:
95
+ source_path = project_root / source_root
96
+
97
+ return tuple(
98
+ ProjectRelativePath(path.relative_to(project_root))
99
+ for path in sorted(source_path.iterdir(), key=lambda path: path.name)
100
+ if path.is_dir() and (path / "__init__.py").is_file()
101
+ )
102
+
103
+
84
104
  def find_included_python_files(
85
105
  project_root: FullPath, source_root: ProjectRelativePath
86
106
  ) -> frozenset[ProjectRelativePath]:
@@ -109,6 +109,7 @@ class ProjectContext:
109
109
  source_root: ProjectRelativePath,
110
110
  config: PyProjectConfig,
111
111
  included_files: frozenset[ProjectRelativePath] = frozenset(),
112
+ package_roots: tuple[ProjectRelativePath, ...] = tuple(),
112
113
  ) -> None:
113
114
  self.project_root = project_root
114
115
  self.source_root = source_root
@@ -118,3 +119,4 @@ class ProjectContext:
118
119
  )
119
120
  self.config = config
120
121
  self.included_files = included_files
122
+ self.package_roots = package_roots
@@ -1,5 +1,6 @@
1
1
  from gyomu_infra.filesystem.file_io import read_json
2
2
  from gyomu_schema.schemas.python.types import WorkspaceRelativePath
3
+ from gyomu_schema.schemas.snapshot.types import ProjectSnapshot
3
4
  from gyomu_schema.schemas.types import FullPath
4
5
  from returns.result import Failure, Result, Success
5
6
 
@@ -9,7 +10,6 @@ from gyomu_python_analysis.snapshot.create import create_snapshot
9
10
  from gyomu_python_analysis.snapshot.diff import diff_snapshot
10
11
  from gyomu_python_analysis.snapshot.models import (
11
12
  AnalyzeProjectChangesResult,
12
- ProjectSnapshot,
13
13
  )
14
14
  from gyomu_python_analysis.snapshot.project import ensure_project_workspace
15
15
 
@@ -3,6 +3,7 @@ from collections import Counter
3
3
  from gyomu_infra.filesystem.file_io import write_json
4
4
  from gyomu_infra.logger import logger
5
5
  from gyomu_schema.schemas.python.types import WorkspaceRelativePath
6
+ from gyomu_schema.schemas.snapshot.types import ProjectSnapshot
6
7
  from gyomu_schema.schemas.types import FullPath
7
8
  from returns.result import Failure, Result
8
9
 
@@ -10,7 +11,6 @@ from gyomu_python_analysis.error.analysis import AnalysisError
10
11
  from gyomu_python_analysis.project.context import ProjectContext
11
12
  from gyomu_python_analysis.snapshot.create import create_snapshot
12
13
  from gyomu_python_analysis.snapshot.diff import diff_snapshot
13
- from gyomu_python_analysis.snapshot.models import ProjectSnapshot
14
14
  from gyomu_python_analysis.snapshot.project import ensure_project_workspace
15
15
 
16
16
 
@@ -5,12 +5,12 @@ from gyomu_infra.filesystem.file_search import FileSearch
5
5
  from gyomu_infra.hash.hash import hash_file
6
6
  from gyomu_schema.filesystem.file import FileCompareType, FileFilterInfo, FileFilterType
7
7
  from gyomu_schema.schemas.python.types import ProjectRelativePath, WorkspaceRelativePath
8
+ from gyomu_schema.schemas.snapshot.types import FileSnapshot, ProjectSnapshot
8
9
  from gyomu_schema.schemas.types import FullPath
9
10
  from returns.result import Failure, Result, Success
10
11
 
11
12
  from gyomu_python_analysis.error.analysis import AnalysisError
12
13
  from gyomu_python_analysis.project.context import ProjectContext
13
- from gyomu_python_analysis.snapshot.models import FileSnapshot, ProjectSnapshot
14
14
 
15
15
 
16
16
  def create_snapshot(
@@ -1,6 +1,5 @@
1
1
  from gyomu_schema.schemas.python.types import ProjectRelativePath
2
-
3
- from gyomu_python_analysis.snapshot.models import (
2
+ from gyomu_schema.schemas.snapshot.types import (
4
3
  FileAdded,
5
4
  FileChange,
6
5
  FileDeleted,
@@ -0,0 +1,27 @@
1
+ from dataclasses import dataclass
2
+
3
+ from gyomu_schema.schemas.snapshot.types import FileChange, ProjectSnapshot
4
+ from gyomu_schema.schemas.types import FullPath
5
+
6
+
7
+ @dataclass
8
+ class AnalyzeProjectChangesResult:
9
+ """Represents the result of analyzing project changes, containing project
10
+ identification, snapshot paths, previous and current snapshots, and file
11
+ differences.
12
+ """
13
+
14
+ project_id: str
15
+ """The identifier of the analyzed project."""
16
+
17
+ snapshot_path: FullPath
18
+ """The full path to the snapshot storage or record."""
19
+
20
+ previous_snapshot: ProjectSnapshot | None
21
+ """The previous project snapshot, or None if this is the initial snapshot."""
22
+
23
+ current_snapshot: ProjectSnapshot
24
+ """The current project snapshot."""
25
+
26
+ diff: tuple[FileChange, ...]
27
+ """A tuple of file changes detected between the previous and current snapshots."""
@@ -3,6 +3,7 @@ from pathlib import Path
3
3
  import pytest
4
4
  from gyomu_python_analysis.analysis.initialize import (
5
5
  find_included_python_files,
6
+ find_package_roots,
6
7
  initialize_project_context,
7
8
  initialize_project_from_workspace,
8
9
  read_version,
@@ -87,10 +88,7 @@ class TestFindIncludedPythonFiles:
87
88
 
88
89
 
89
90
  class TestInitializeProjectContext:
90
- def test_initialize_project_context(
91
- self,
92
- tmp_path: Path,
93
- ) -> None:
91
+ def test_initialize_project_context(self, tmp_path: Path, mocker) -> None:
94
92
  source_root = tmp_path / "src"
95
93
 
96
94
  pyproject = """\
@@ -118,6 +116,14 @@ class TestInitializeProjectContext:
118
116
  encoding="utf-8",
119
117
  )
120
118
 
119
+ mocker.patch(
120
+ "gyomu_python_analysis.analysis.initialize.find_package_roots",
121
+ return_value=(
122
+ ProjectRelativePath(Path("a")),
123
+ ProjectRelativePath(Path("b")),
124
+ ),
125
+ )
126
+
121
127
  result = initialize_project_context(
122
128
  FullPath(tmp_path),
123
129
  ProjectRelativePath(Path("src")),
@@ -137,6 +143,10 @@ class TestInitializeProjectContext:
137
143
  ProjectRelativePath(Path("src/example/foo.py")),
138
144
  }
139
145
  )
146
+ assert context.package_roots == (
147
+ ProjectRelativePath(Path("a")),
148
+ ProjectRelativePath(Path("b")),
149
+ )
140
150
 
141
151
  def test_initialize_project_context_with_hatch_dynamic_version(
142
152
  self,
@@ -307,6 +317,13 @@ class TestInitializeProjectFromWorkspace:
307
317
  "gyomu_python_analysis.analysis.initialize.find_included_python_files",
308
318
  return_value=frozenset(),
309
319
  )
320
+ mocker.patch(
321
+ "gyomu_python_analysis.analysis.initialize.find_package_roots",
322
+ return_value=(
323
+ ProjectRelativePath(Path("a")),
324
+ ProjectRelativePath(Path("b")),
325
+ ),
326
+ )
310
327
 
311
328
  result = initialize_project_context(
312
329
  project_root=project_root,
@@ -331,3 +348,63 @@ class TestInitializeProjectFromWorkspace:
331
348
  "src/generated",
332
349
  "tests/resources",
333
350
  ]
351
+
352
+
353
+ class TestFindPackageRoots:
354
+ def test_find_roots(
355
+ self,
356
+ tmp_path: Path,
357
+ ) -> None:
358
+ # fixture:
359
+ #
360
+ # src/
361
+ # package_a/
362
+ # __init__.py
363
+ # package_b/
364
+ # __init__.py
365
+ # not_package/
366
+ # module.py
367
+ #
368
+ project_root = tmp_path
369
+ source_root = ProjectRelativePath(Path("src"))
370
+
371
+ (project_root / "src" / "package_a").mkdir(parents=True)
372
+ (project_root / "src" / "package_a" / "__init__.py").touch()
373
+
374
+ (project_root / "src" / "package_b").mkdir(parents=True)
375
+ (project_root / "src" / "package_b" / "__init__.py").touch()
376
+
377
+ (project_root / "src" / "not_package").mkdir(parents=True)
378
+ (project_root / "src" / "not_package" / "module.py").touch()
379
+
380
+ result = find_package_roots(
381
+ project_root=FullPath(project_root),
382
+ source_root=source_root,
383
+ )
384
+
385
+ assert result == (
386
+ ProjectRelativePath(Path("src/package_a")),
387
+ ProjectRelativePath(Path("src/package_b")),
388
+ )
389
+
390
+ def test_does_not_include_nested_packages(
391
+ self,
392
+ tmp_path: Path,
393
+ ) -> None:
394
+ project_root = FullPath(tmp_path)
395
+ source_root = ProjectRelativePath(Path("src"))
396
+
397
+ package = project_root / "src" / "package"
398
+ package.mkdir(parents=True)
399
+ (package / "__init__.py").touch()
400
+
401
+ nested_package = package / "nested"
402
+ nested_package.mkdir()
403
+ (nested_package / "__init__.py").touch()
404
+
405
+ result = find_package_roots(
406
+ project_root=project_root,
407
+ source_root=source_root,
408
+ )
409
+
410
+ assert result == (ProjectRelativePath(Path("src/package")),)
@@ -3,15 +3,15 @@ from pathlib import Path
3
3
 
4
4
  from gyomu_python_analysis.error.analysis import AnalysisError
5
5
  from gyomu_python_analysis.snapshot.commit import commit_project_changes
6
- from gyomu_python_analysis.snapshot.models import (
6
+ from gyomu_schema.error.io import GyomuIOError, IOLayer, IOOperation
7
+ from gyomu_schema.schemas.python.types import ProjectRelativePath, WorkspaceRelativePath
8
+ from gyomu_schema.schemas.snapshot.types import (
7
9
  FileAdded,
8
10
  FileDeleted,
9
11
  FileSnapshot,
10
12
  FileUpdated,
11
13
  ProjectSnapshot,
12
14
  )
13
- from gyomu_schema.error.io import GyomuIOError, IOLayer, IOOperation
14
- from gyomu_schema.schemas.python.types import ProjectRelativePath, WorkspaceRelativePath
15
15
  from gyomu_schema.schemas.types import FullPath
16
16
  from returns.result import Failure, Success
17
17
 
@@ -9,9 +9,12 @@ from gyomu_python_analysis.snapshot.create import (
9
9
  create_snapshot,
10
10
  enumerate_target_files,
11
11
  )
12
- from gyomu_python_analysis.snapshot.models import FileSnapshot, ProjectSnapshot
13
12
  from gyomu_schema.error.io import GyomuIOError, IOLayer, IOOperation
14
13
  from gyomu_schema.schemas.python.types import ProjectRelativePath, WorkspaceRelativePath
14
+ from gyomu_schema.schemas.snapshot.types import (
15
+ FileSnapshot,
16
+ ProjectSnapshot,
17
+ )
15
18
  from gyomu_schema.schemas.types import FullPath
16
19
  from returns.result import Failure, Success
17
20
 
@@ -2,14 +2,14 @@ from datetime import UTC, datetime
2
2
  from pathlib import Path
3
3
 
4
4
  from gyomu_python_analysis.snapshot.diff import diff_snapshot
5
- from gyomu_python_analysis.snapshot.models import (
5
+ from gyomu_schema.schemas.python.types import ProjectRelativePath, WorkspaceRelativePath
6
+ from gyomu_schema.schemas.snapshot.types import (
6
7
  FileAdded,
7
8
  FileDeleted,
8
9
  FileSnapshot,
9
10
  FileUpdated,
10
11
  ProjectSnapshot,
11
12
  )
12
- from gyomu_schema.schemas.python.types import ProjectRelativePath, WorkspaceRelativePath
13
13
 
14
14
  PROJECT_ROOT = WorkspaceRelativePath(Path("packages/example"))
15
15
 
@@ -1,16 +0,0 @@
1
- Metadata-Version: 2.5
2
- Name: gyomu-python-analysis
3
- Version: 0.4.0
4
- Summary: Gyomu Python Analysis
5
- Requires-Python: >=3.13
6
- Requires-Dist: docstring-parser>=0.18.0
7
- Requires-Dist: griffelib>=2.2.0
8
- Requires-Dist: gyomu-infra
9
- Requires-Dist: gyomu-schema
10
- Requires-Dist: pydantic
11
- Requires-Dist: returns
12
- Description-Content-Type: text/markdown
13
-
14
- # gyomu-python-analysis
15
-
16
- python analysis components for Gyomu Python.
@@ -1,103 +0,0 @@
1
- from dataclasses import dataclass
2
- from datetime import datetime
3
- from typing import Literal
4
-
5
- from gyomu_schema.schemas.python.types import ProjectRelativePath, WorkspaceRelativePath
6
- from gyomu_schema.schemas.types import FullPath
7
- from pydantic import BaseModel
8
-
9
-
10
- class FileSnapshot(BaseModel):
11
- """Represents a snapshot of an individual file containing its relative path,
12
- content hash, and modification timestamp.
13
- """
14
-
15
- project_relative_path: ProjectRelativePath
16
- """The project-relative path of the file."""
17
-
18
- raw_hash: str
19
- """The raw content hash of the file."""
20
-
21
- modified_at: datetime
22
- """The timestamp when the file was last modified."""
23
-
24
-
25
- class ProjectSnapshot(BaseModel):
26
- """Represents a snapshot of a project containing its root path and a collection
27
- of file snapshots.
28
- """
29
-
30
- project_root: WorkspaceRelativePath
31
- """The workspace-relative path of the project root."""
32
-
33
- files: tuple[FileSnapshot, ...]
34
- """A collection of file snapshots belonging to the project."""
35
-
36
-
37
- class FileAdded(BaseModel):
38
- """Represents the addition of a new file in the project."""
39
-
40
- project_relative_path: ProjectRelativePath
41
- """The project-relative path of the added file."""
42
-
43
- current: FileSnapshot
44
- """The current file snapshot."""
45
-
46
- type: Literal["added"] = "added"
47
- """The change type discriminator, set to 'added'."""
48
-
49
-
50
- class FileUpdated(BaseModel):
51
- """Represents an update to an existing file in the project."""
52
-
53
- project_relative_path: ProjectRelativePath
54
- """The project-relative path of the updated file."""
55
-
56
- previous: FileSnapshot
57
- """The previous file snapshot before the update."""
58
-
59
- current: FileSnapshot
60
- """The current file snapshot after the update."""
61
-
62
- type: Literal["updated"] = "updated"
63
- """The change type discriminator, set to 'updated'."""
64
-
65
-
66
- class FileDeleted(BaseModel):
67
- """Represents the deletion of a file from the project."""
68
-
69
- project_relative_path: ProjectRelativePath
70
- """The project-relative path of the deleted file."""
71
-
72
- previous: FileSnapshot
73
- """The previous file snapshot before deletion."""
74
-
75
- type: Literal["deleted"] = "deleted"
76
- """The change type discriminator, set to 'deleted'."""
77
-
78
-
79
- type FileChange = FileAdded | FileUpdated | FileDeleted
80
- """Represents any file change event (added, updated, or deleted)."""
81
-
82
-
83
- @dataclass
84
- class AnalyzeProjectChangesResult:
85
- """Represents the result of analyzing project changes, containing project
86
- identification, snapshot paths, previous and current snapshots, and file
87
- differences.
88
- """
89
-
90
- project_id: str
91
- """The identifier of the analyzed project."""
92
-
93
- snapshot_path: FullPath
94
- """The full path to the snapshot storage or record."""
95
-
96
- previous_snapshot: ProjectSnapshot | None
97
- """The previous project snapshot, or None if this is the initial snapshot."""
98
-
99
- current_snapshot: ProjectSnapshot
100
- """The current project snapshot."""
101
-
102
- diff: tuple[FileChange, ...]
103
- """A tuple of file changes detected between the previous and current snapshots."""