(plain_module: PlainModule)
| 25 | |
| 26 | |
| 27 | def spec_change(plain_module: PlainModule) -> PlainModule | None: |
| 28 | all_modules = plain_module.all_required_modules + [plain_module] |
| 29 | for _module in all_modules: |
| 30 | module_metadata = _module.load_module_metadata() |
| 31 | if ( |
| 32 | module_metadata |
| 33 | and "source_hash" in module_metadata |
| 34 | and module_metadata["source_hash"] != _module.get_module_source_hash() |
| 35 | ): |
| 36 | return _module |
| 37 | |
| 38 | return None |
| 39 | |
| 40 | |
| 41 | def code_change(plain_module: PlainModule) -> PlainModule | None: |