1- from typing import TYPE_CHECKING , Generator
1+ from typing import TYPE_CHECKING , Generator , Callable , Any
22
33if TYPE_CHECKING :
44 from .pc import Path
@@ -31,6 +31,25 @@ def temp(
3131
3232 return dir .child (f'{ name } -{ id } .{ ext } ' )
3333
34+ class _Template :
35+
36+ def __init__ (self ,
37+ path : 'Path' ,
38+ default = ''
39+ ):
40+ self ._default = default
41+ self ._path = path
42+
43+ read = Callable [[], Any ]
44+ """
45+ Read data from the file
46+ """
47+
48+ save = Callable [[Any ], None ]
49+ """
50+ Save data to the file
51+ """
52+
3453class XML :
3554 """
3655 .XML File
@@ -69,35 +88,24 @@ def save(self) -> None:
6988
7089 self .path .write (d )
7190
72- class PKL :
91+ class PKL ( _Template ) :
7392 """
7493 .PKL File
7594 """
7695
77- def __init__ (self , path , default = None ):
78- from .pc import Path
79- self .path = Path (path )
80- self .default = default
81-
8296 def read (self ):
83- """
84- Read the data from the file
85- """
8697 from dill import load
8798
8899 try :
89- with self .path .open ('rb' ) as f :
100+ with self ._path .open ('rb' ) as f :
90101 return load (f )
91102 except :
92- return self .default
103+ return self ._default
93104
94105 def save (self , value ) -> None :
95- """
96- Save data to the file
97- """
98106 from dill import dump
99107
100- with self .path .open ('wb' ) as f :
108+ with self ._path .open ('wb' ) as f :
101109 dump (value , f )
102110
103111class VHDX :
@@ -163,140 +171,102 @@ def dismount(self):
163171 # Delete the mounting directory
164172 self .MNT .delete ()
165173
166- class JSON :
174+ class JSON ( _Template ) :
167175 """
168176 .JSON File
169177 """
170178
171- def __init__ (self ,
172- path : 'Path' ,
173- default = {}
174- ):
175- from .pc import Path
176-
177- self .path = Path (path )
178- self .__default = default
179-
180179 def read (self ):
181- """
182- Read the contents of the json file
183- """
184180 from json import load
185- from .text import hex
186181
187182 try :
188- return load (self .path .open ())
183+ return load (self ._path .open ())
189184 except :
190- return self .__default
185+ return self ._default
191186
192187 def save (self , data ):
193- """
194- Save data to the json file
195- """
196188 from json import dump
197- from .text import hex
198189
199190 dump (
200191 obj = data ,
201- fp = self .path .open ('w' ),
192+ fp = self ._path .open ('w' ),
202193 indent = 3
203194 )
204195
205- class INI :
196+ class INI ( _Template ) :
206197 """
207198 .INI/.PROPERTIES File
208199 """
209-
210- def __init__ (self , path :'Path' , default = '' ):
211- from .pc import Path
212-
213- self .path = Path (path )
214- self .__default = default
215200
216- def __obj (self ):
217- from configobj import ConfigObj
218-
219- return ConfigObj (self .path .path )
220-
221201 def read (self ):
202+ from configobj import ConfigObj
203+
222204 try :
223- return self .__obj ().dict ()
205+ obj = ConfigObj (str (self ._path ))
206+ return obj .dict ()
224207 except :
225- return self .__default
208+ return self ._default
226209
227210 def save (self , data ):
211+ from configobj import ConfigObj
228212
229- config = self .__obj ( )
213+ obj = ConfigObj ( str ( self ._path ) )
230214
231215 for name in data :
232- config [name ] = data [name ]
216+ obj [name ] = data [name ]
233217
234- config .write ()
218+ obj .write ()
235219
236- class YAML :
220+ class YAML ( _Template ) :
237221 """
238222 .YML/.YAML File
239223 """
240224
241- def __init__ (self , path , default = {}):
242- from .pc import Path
243-
244- self .path = Path (path )
245- self .__default = default
246-
247225 def read (self ):
248- """
249- Read the yaml file
250- """
251226 from yaml import safe_load
252227
253228 try :
254229
255- with self .path .open () as f :
230+ with self ._path .open () as f :
256231 data = safe_load (f )
257232
258- if data is None :
259- return self .__default
260- else :
233+ if data :
261234 return data
235+ else :
236+ return self ._default
262237
263238 except :
264- return self .__default
239+ return self ._default
265240
266241 def save (self , data ):
267- """
268- Save data to the yaml file
269- """
270242 from yaml import dump
271243
272- with self .path .open ('w' ) as file :
273- dump (data , file , default_flow_style = False , sort_keys = False )
244+ dump (
245+ data = data ,
246+ stream = self ._path .open ('w' ),
247+ default_flow_style = False ,
248+ sort_keys = False
249+ )
274250
275- class TXT :
251+ class TXT ( _Template ) :
276252 """
277253 .TXT File
278254 """
279-
280- def __init__ (self , path , default = '' ):
281- from .pc import Path
282-
283- self .path = Path (path )
284- self .__default = default
285255
286256 def read (self ):
287257 """
288258 Read data from the txt file
289259 """
290260 try :
291- self .path .open ('r' ).read ()
261+ return self ._path .open ('r' ).read ()
292262 except :
293- return self .__default
263+ return self ._default
294264
295- def save (self , data ) -> None :
265+ def save (self , data ):
296266 """
297267 Save data to the txt file
298268 """
299- self .path .open ('w' ).write (str (data ))
269+ self ._path .open ('w' ).write (str (data ))
300270
301271class ZIP :
302272 """
@@ -305,7 +275,6 @@ class ZIP:
305275
306276 def __init__ (self , zipfile :'Path' ):
307277 from zipfile import ZipFile
308- from .pc import Path
309278
310279 self .zipfile = zipfile
311280 self .__zip = ZipFile (str (zipfile ))
@@ -364,66 +333,42 @@ def extractAll(self,
364333 else :
365334 self .__zip .extractall (str (dst ))
366335
367- class CSV :
336+ class CSV ( _Template ) :
368337 """
369338 .CSV File
370339 """
371340
372- def __init__ (self , path , default = '' ):
373- from .pc import Path
374-
375- self .path = Path (path )
376- self .__default = default
377-
378341 def read (self ):
379- """
380- Read data from the csv file
381- """
382342 from csv import reader
383343
384344 try :
385- with self .path .open () as csvfile :
345+ with self ._path .open () as csvfile :
386346 return reader (csvfile )
387347 except :
388- return self .__default
348+ return self ._default
389349
390350 def save (self , data ) -> None :
391- """
392- Save data to the csv file
393- """
394351 from csv import writer
395352
396- with self .path .open ('w' ) as csvfile :
353+ with self ._path .open ('w' ) as csvfile :
397354 writer (csvfile ).writerows (data )
398355
399- class TOML :
356+ class TOML ( _Template ) :
400357 """
401358 .TOML File
402359 """
403360
404- def __init__ (self , path , default = '' ):
405- from .pc import Path
406-
407- self .path = Path (path )
408- self .__default = default
409-
410361 def read (self ):
411- """
412- Read data from the toml file
413- """
414362 from toml import load
415363
416364 try :
417- with self .path .open () as f :
365+ with self ._path .open () as f :
418366 return load (f )
419367 except :
420- return self .__default
368+ return self ._default
421369
422370 def save (self , data ) -> None :
423- """
424- Save data to the toml file
425- """
426371 from tomli_w import dump
427372
428- with self .path .open ('wb' ) as f :
373+ with self ._path .open ('wb' ) as f :
429374 dump (data , f , indent = 2 )
0 commit comments