1- # pandas/core/frame_versioning.py
21from __future__ import annotations
32
43from dataclasses import dataclass
54from datetime import datetime
65import uuid
7- from typing import Dict , Optional
6+ from typing import Dict , Optional , TYPE_CHECKING
87
9- import pandas as pd
8+ if TYPE_CHECKING :
9+ import pandas as pd # only used for type hints
1010
1111
1212def _generate_snapshot_id (name : Optional [str ] = None ) -> str :
@@ -31,17 +31,17 @@ class DataFrameSnapshotStore:
3131
3232 def __init__ (self ) -> None :
3333 # snapshot_id -> DataFrame
34- self ._snapshots : Dict [str , pd .DataFrame ] = {}
34+ self ._snapshots : Dict [str , " pd.DataFrame" ] = {}
3535 self ._meta : Dict [str , SnapshotMeta ] = {}
3636
37- def snapshot (self , df : pd .DataFrame , name : Optional [str ] = None ) -> str :
37+ def snapshot (self , df : " pd.DataFrame" , name : Optional [str ] = None ) -> str :
3838 sid = _generate_snapshot_id (name )
3939 # deep copy for safety
4040 self ._snapshots [sid ] = df .copy (deep = True )
4141 self ._meta [sid ] = SnapshotMeta (name = sid , created_at = datetime .utcnow ())
4242 return sid
4343
44- def restore (self , name : str ) -> pd .DataFrame :
44+ def restore (self , name : str ) -> " pd.DataFrame" :
4545 if name not in self ._snapshots :
4646 raise KeyError (f"Snapshot not found: { name } " )
4747 # return a deep copy so modifications don't change stored snapshot
@@ -66,4 +66,5 @@ def info(self, name: Optional[str] = None) -> dict:
6666 raise KeyError (f"Snapshot not found: { name } " )
6767 meta = self ._meta [name ]
6868 return {"name" : meta .name , "created_at" : meta .created_at .isoformat ()}
69- return {"count" : len (self ._snapshots ), "snapshots" : [m .name for m in self ._meta .values ()]}
69+ return {"count" : len (self ._snapshots ),
70+ "snapshots" : [m .name for m in self ._meta .values ()]}
0 commit comments