7
7
logger = logging .getLogger (__name__ )
8
8
9
9
10
- class ReadOnlyListFile (object ):
10
+ class ReadOnlyListFileMtime (object ):
11
11
12
12
def __init__ (self , file_name ):
13
13
self .file_name = file_name
@@ -16,24 +16,25 @@ def __init__(self, file_name):
16
16
if not os .path .exists (file_name ):
17
17
fp = open (file_name , "x" )
18
18
fp .close ()
19
- self . lst = []
19
+ _lst = []
20
20
else :
21
- self .lst = self ._read_info (self .file_name )
21
+ _lst = self ._read_info (self .file_name )
22
+
22
23
def __getitem__ (self , item ):
23
24
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 ]
27
28
else :
28
29
return None
29
30
30
31
def __len__ (self ):
31
32
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 == []:
34
35
return 0
35
36
36
- return len (self . lst )
37
+ return len (_lst )
37
38
38
39
@staticmethod
39
40
def get_mtime (fname ):
@@ -92,3 +93,44 @@ def _read_info(self, fname):
92
93
_msg = f"No such file: '{ fname } '"
93
94
logger .error (_msg )
94
95
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