Releases: Hum9183/deep_reloader
Releases · Hum9183/deep_reloader
v0.8.0
deep_reloader v0.8.0
主な変更点
🔧 リファクタリング
- リロードロジックの簡素化: 冗長な
_copy_symbols_to()関数を削除し、リロード処理をシンプル化importlib.reload()がimport文を自動的に再実行するため、from-importしたシンボルも最新の値が自動設定される仕組みに変更
🐛 デバッグ機能の強化
- 例外ハンドラへのデバッグログ追加: トラブルシューティングを容易にするため、全ての例外ハンドラにデバッグログを追加
- AST解析失敗時のログ(
dependency_extractor.py) - サブモジュールインポート失敗時のログ(
from_clause.py) - 相対インポート失敗時のログ(
from_clause.py) - 親パッケージインポート失敗時のログ(
from_clause.py)
- AST解析失敗時のログ(
技術的な詳細
変更されたファイル:
deep_reloader.py: リロードロジックの簡素化、_copy_symbols_to()関数を削除dependency_extractor.py: 例外ハンドラにデバッグログを追加from_clause.py: 全ての例外ハンドラにデバッグログを追加tests/unit/test_deep_reloader.py: 不要になったテストケースを削除
破壊的変更: なし
v0.7.0
deep_reloader v0.7.0
🐛 バグ修正
重要な修正: importlib.reload()パターンの採用
- 修正内容:
sys.modules.pop()+import_module()パターンからimportlib.reload()に変更 - 背景: 親モジュールが複数の子モジュールに対して
importlib.reload()を呼び出すケースで、sys.modules.pop()パターンでは2つ目以降の子モジュールのreload時に "module xxx not in sys.modules" エラーが発生していた - 影響: より安全で標準的なリロード処理に改善
テストの安定性向上
- テスト独立性を保証する cleanup 実装を追加
🔧 アーキテクチャ改善
大規模リファクタリング: データクラスと関数型プログラミング
- タプルから
Dependencyデータクラスへ: 依存関係の表現を型安全かつ明確に - クラスから関数へ:
FromClause/ImportClauseを純粋関数に変換し、不要な抽象化を削減 - ファイル構成の再編成:
module_info.py/symbol_extractor.py削除domain.py:Dependency/DependencyNodeエンティティを新設dependency_extractor.py: AST解析ロジックを分離deep_reloader.py: コア処理をモジュールトップレベルに配置
命名とドメインモデルの明確化
ModuleInfo→DependencyNode: エンティティとしての役割を明確化- 変数名とパラメータ名の改善(
module_info→module_nodeなど)
📝 ドキュメント
README更新(全言語対応)
- ファイル構成を最新に更新
- Maya対応バージョンを明記: Maya 2022-2026での動作を確認・明記
- 空の
__init__.pyにおける子モジュール検出の制限事項を追加
🧪 テスト
新規テストの追加
- 複数の子モジュールをreloadするケースの回帰テスト(
test_parent_reloads_child.py) - 同一モジュールからの重複インポート検出テスト(
test_multiple_imports_from_same_module.py) DependencyExtractorのユニットテスト新設
テスト整理
test_architecture_demo.pyをpytest専用に整理from_clause/import_clauseのテストを関数ベースに簡素化- ユニットテストの大幅な整理
v0.6.0
deep_reloader v0.6.0
🐛 Bug Fixes
- 依存検出:
__init__.pyでfrom . import xxx形式の依存検出バグを修正 (90cb588)__init__.py内でfrom . importを使用した場合に依存関係が正しく検出されない問題を修正
✨ Enhancements
- CI/CD: GitHub Actions ワークフローを追加 (cbb31c5)
- Python 3.9-3.13でのテスト自動実行
- プルリクエスト時の自動テスト
🧪 Tests
- namespace package:
__init__.pyなしのnamespace packageでの動作検証テストを追加 (b3d2954)- Python 3.3以降(PEP 420)のnamespace packageサポートを検証
create_test_modules()にcreate_initパラメータを追加
- 統合テスト: インポート文を統一(ファイル先頭に移動) (502dc0c)
- 9つの統合テストファイルで
from deep_reloader import deep_reloadを先頭に統一
- 9つの統合テストファイルで
📚 Documentation
-
README多言語化: 英語・日本語・中国語の3言語対応 (c529a52)
- メインREADME: 英語版
docs/README.ja.md: 日本語版docs/README.zh-CN.md: 中国語版(簡体字)- 各言語版に相互リンクを追加
-
README整備: 制限事項セクションを簡潔化・構造化 (a497f71)
- 箇条書きから見出し構造(
###)に変更し可読性を向上 - デコレーターのクロージャ問題セクションを削除(isinstance()問題と本質的に同じため冗長)
- 各制限事項の説明を簡潔化
- 箇条書きから見出し構造(
-
仕様明記: import文非対応とパッケージ構造必須を明確化 (dd665bf)
import xxx形式が非対応であることを仕様として明記- パッケージ構造が必須であることを追加
__init__.pyを含むディレクトリ構造を推奨
📊 Statistics
- ファイル変更: 17ファイル
- 追加: +709行
- 削除: -193行
- テスト追加: 2テスト(namespace package関連)
v0.5.0
deep_reloader v0.5.0
🎉 新機能
ワイルドカードインポート対応の大幅強化
- クロスパッケージワイルドカードインポート対応: 異なるパッケージ間の
from package import *を完全サポート - 相対インポートのワイルドカード対応:
from . import *パターンを含む全ワイルドカードパターンに対応
サブモジュール検出機能
from package import nameのnameがサブモジュールの場合も正しく追跡されるように改善
アーキテクチャ改善
- FromClauseクラス導入:
from句の処理を専門化したクラスを追加 - ImportClauseクラス導入:
ImportedSymbolsを置き換え、より明確なAPIを提供 - コード削減: リファクタリングにより約220行削減
🧪 テスト強化
単体テスト追加(46テスト新規作成)
ImportClause: 10テストFromClause: 12テストSymbolExtractor: 12テストModuleInfo: 4テストdeep_reloader: 8テスト
テスト構造改善
- テストピラミッド実現: 単体テスト79%(46個)、統合テスト21%(12個)の理想的な構造
- ディレクトリ分割:
tests/unit/とtests/integration/に整理 - 冗長テスト削減: 統合テストを38個から12個に削減
⚠️ 破壊的変更
pytest専用化
- スクリプト実行サポートを完全削除
- ❌
python tests/test_runner.py- 使用不可 - ❌
python tests/test_xxx.py- 使用不可 - ✅
pytestまたはpython -m pytest- 推奨
- ❌
移行方法:
# 以前(使用不可)
python tests/test_runner.py
# 現在(推奨)
pytest
# または
python -m pytest tests/v0.4.0
v0.3.0
deep_reloader v0.3.0
新機能
- ✅ 循環インポート対応: A→B→A のような循環参照を正しくリロード
- ✅ 単一パッケージスコープ: 組み込み/サードパーティモジュールを自動除外
改善
- リロードロジックの簡素化と最適化
- テストスイート拡充(9→12テスト)
- コード品質向上とドキュメント更新
詳細
循環参照サポートにより、より複雑なモジュール構成でも安全にリロード可能になりました。
単一パッケージスコープにより、システムモジュールへの影響を防ぎ、安定性が向上しました。
破壊的変更はなく、v0.2.0からシームレスにアップグレード可能です。
v.0.2.0
deep_reloader v0.2.0
🚨 破壊的変更 (Breaking Changes)
APIの大幅な簡素化
クラスベースからシンプルな関数ベースのAPIに変更しました。
変更前 (v0.1.1):
from deep_reloader import DeepReloader
dr = DeepReloader()
dr.reload(my_module)変更後 (v0.2.0):
from deep_reloader import deep_reload
deep_reload(my_module)移行ガイド
DeepReloaderクラスは削除されました
代わりにdeep_reload()関数を直接使用してください
インスタンス化が不要になり、より直感的なAPIになりました