33import datetime
44import logging
55import time
6+ from typing import TYPE_CHECKING , cast
67
78import web
89
1213from infogami .infobase ._dbstore .indexer import Indexer
1314from infogami .infobase ._dbstore .read import RecentChanges , get_bot_users
1415from infogami .infobase ._dbstore .save import PropertyManager , SaveImpl
15- from infogami .infobase ._dbstore .schema import Schema # noqa: F401
16+ from infogami .infobase ._dbstore .schema import Schema
17+
18+ if TYPE_CHECKING :
19+ from infogami .infobase .cache import Cache
1620
1721default_schema = None
1822
@@ -25,21 +29,21 @@ def process_json(key, json_data):
2529
2630
2731class DBSiteStore (common .SiteStore ):
28- def __init__ (self , db , schema ):
32+ def __init__ (self , db : web . DB , schema : Schema ):
2933 self .db = db
3034 self .schema = schema
3135 self .sitename = None
3236 self .indexer = Indexer ()
3337 self .store = store .Store (self .db )
3438 self .seq = sequence .SequenceImpl (self .db )
3539
36- self .cache = None
40+ self .cache : "Cache | None" = None
3741 self .property_manager = PropertyManager (self .db )
3842
3943 def get_store (self ):
4044 return self .store
4145
42- def set_cache (self , cache ):
46+ def set_cache (self , cache : "Cache" ):
4347 self .cache = cache
4448
4549 def get_metadata (self , key , for_update = False ):
@@ -657,9 +661,9 @@ class DBStore(common.Store):
657661 It always returns a the same site irrespective of the sitename.
658662 """
659663
660- def __init__ (self , schema ):
664+ def __init__ (self , schema : Schema ):
661665 self .schema = schema
662- self .sitestore = None
666+ self .sitestore : DBSiteStore | None = None
663667 self .db = create_database (** web .config .db_parameters )
664668
665669 def has_initialized (self ):
@@ -669,7 +673,7 @@ def has_initialized(self):
669673 except Exception :
670674 return False
671675
672- def create (self , sitename ) :
676+ def create (self , sitename : str ) -> DBSiteStore :
673677 if self .sitestore is None :
674678 self .sitestore = DBSiteStore (self .db , self .schema )
675679 if not self .has_initialized ():
@@ -678,7 +682,7 @@ def create(self, sitename):
678682 self .sitestore .initialize ()
679683 return self .sitestore
680684
681- def get (self , sitename ) :
685+ def get (self , sitename : str ) -> DBSiteStore | None :
682686 if self .sitestore is None :
683687 sitestore = DBSiteStore (self .db , self .schema )
684688 if not self .has_initialized ():
@@ -699,9 +703,9 @@ def delete(self, sitename):
699703class MultiDBStore (DBStore ):
700704 """DBStore that works with multiple sites."""
701705
702- def __init__ (self , schema ):
706+ def __init__ (self , schema : Schema ):
703707 self .schema = schema
704- self .sitestores = {}
708+ self .sitestores : dict [ str , MultiDBSiteStore ] = {}
705709 self .db = create_database (** web .config .db_parameters )
706710
707711 def create (self , sitename ):
@@ -783,8 +787,8 @@ def delete(self):
783787 pass
784788
785789
786- def create_database (** params ):
787- db = web .database (** params )
790+ def create_database (** params ) -> web . DB :
791+ db = cast ( " web.DB" , web . database (** params ) )
788792
789793 # monkey-patch query method to collect stats
790794 _query = db .query
0 commit comments