Skip to content
This repository was archived by the owner on Jun 30, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions medcat/config/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ class ModelMeta(SerialisableBaseModel):
unsup_trained: list[TrainingDescriptor] = [] # TODO - implement
sup_trained: list[TrainingDescriptor] = [] # TODO - implement
medcat_version: str = ''
saved_environ: Environment = get_environment_info()
saved_environ: Environment = Field(default_factory=get_environment_info)

def mark_saved_now(self):
self.last_saved = datetime.now()
Expand Down Expand Up @@ -606,7 +606,7 @@ class Config(SerialisableBaseModel):
cdb_maker: CDBMaker = CDBMaker()
# ner: Ner = Ner()
annotation_output: AnnotationOutput = AnnotationOutput()
meta: ModelMeta = ModelMeta()
meta: ModelMeta = Field(default_factory=ModelMeta)


def get_important_config_parameters(config: Config) -> dict[str, Any]:
Expand Down
49 changes: 49 additions & 0 deletions tests/config/test_config_env_at_import_time.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import subprocess
import sys
import tempfile
import textwrap

import unittest


class EnvAtImportTimeTests(unittest.TestCase):

def test_import_time_behavior(self):
# Create a test script that patches before import
test_script = textwrap.dedent("""
import unittest.mock

# Patch BEFORE importing medcat
with unittest.mock.patch(
'medcat.utils.envsnapshot.get_environment_info'
) as mock_get_env:
mock_get_env.side_effect = Exception(
"Should not be called at import time!")

try:
from medcat.config.config import ModelMeta
print("SUCCESS: Import completed without "
"calling get_environment_info")
except Exception as e:
if "Should not be called at import time" in str(e):
print("FAILED: get_environment_info was called "
"during import")
raise
else:
print(f"OTHER ERROR: {e}")
raise
""")

with tempfile.NamedTemporaryFile(
mode='w', suffix='.py', delete=False) as f:
f.write(test_script)
f.flush()
result = subprocess.run(
[sys.executable, f.name], capture_output=True, text=True)

if result.returncode != 0:
raise AssertionError(
"Import test failed:\n"
f"STDOUT: {result.stdout}\n"
f"STDERR: {result.stderr}")
self.assertIn("SUCCESS", result.stdout)