77logger = logging .getLogger (__name__ )
88
99
10- class ReadOnlyListFile (object ):
10+ class ReadOnlyListFileMtime (object ):
1111
1212 def __init__ (self , file_name ):
1313 self .file_name = file_name
@@ -16,24 +16,25 @@ def __init__(self, file_name):
1616 if not os .path .exists (file_name ):
1717 fp = open (file_name , "x" )
1818 fp .close ()
19- self . lst = []
19+ _lst = []
2020 else :
21- self .lst = self ._read_info (self .file_name )
21+ _lst = self ._read_info (self .file_name )
22+
2223 def __getitem__ (self , item ):
2324 if self .is_changed (self .file_name ):
24- self . lst = self ._read_info (self .file_name )
25- if self . lst :
26- return self . lst [item ]
25+ _lst = self ._read_info (self .file_name )
26+ if _lst :
27+ return _lst [item ]
2728 else :
2829 return None
2930
3031 def __len__ (self ):
3132 if self .is_changed (self .file_name ):
32- self . lst = self ._read_info (self .file_name )
33- if self . lst is None or self . lst == []:
33+ _lst = self ._read_info (self .file_name )
34+ if _lst is None or _lst == []:
3435 return 0
3536
36- return len (self . lst )
37+ return len (_lst )
3738
3839 @staticmethod
3940 def get_mtime (fname ):
@@ -92,3 +93,44 @@ def _read_info(self, fname):
9293 _msg = f"No such file: '{ fname } '"
9394 logger .error (_msg )
9495 return None
96+
97+
98+ class ReadOnlyListFile (object ):
99+
100+ def __init__ (self , file_name ):
101+ self .file_name = file_name
102+
103+ if not os .path .exists (file_name ):
104+ fp = open (file_name , "x" )
105+ fp .close ()
106+
107+ def __getitem__ (self , item ):
108+ _lst = self ._read_info (self .file_name )
109+ if _lst :
110+ return _lst [item ]
111+ else :
112+ return None
113+
114+ def __len__ (self ):
115+ _lst = self ._read_info (self .file_name )
116+ if _lst is None or _lst == []:
117+ return 0
118+
119+ return len (_lst )
120+
121+ def _read_info (self , fname ):
122+ if os .path .isfile (fname ):
123+ try :
124+ lock = FileLock (f"{ fname } .lock" )
125+ with lock :
126+ fp = open (fname , "r" )
127+ info = [x .strip () for x in fp .readlines ()]
128+ lock .release ()
129+ return info or None
130+ except Exception as err :
131+ logger .error (err )
132+ raise
133+ else :
134+ _msg = f"No such file: '{ fname } '"
135+ logger .error (_msg )
136+ return None
0 commit comments