22import os
33
44from dls_barcode .data_store .backup import Backup
5- from dls_util . file import FileManager
5+ from dls_barcode . data_store . comms_manager import CommsManager
66from .record import Record
77
88
99class Store :
10+
1011 """ Maintains a list of records of previous barcodes scans. Any changes (additions
1112 or deletions) are automatically written to the backing file.
1213 """
13- def __init__ (self , directory , store_capacity ):
14+ MIN_STORE_CAPACITY = 2
15+
16+ def __init__ (self , directory , store_capacity , backup_time ):
1417 """ Initializes a new instance of Store.
1518 """
1619 self ._store_capacity = store_capacity
17- self ._directory = directory
18- self ._file_manager = FileManager ()
19- self ._file = os .path .join (directory , "store.txt" )
20- self ._csv_file = os .path .join (directory , "store.csv" )
21- self ._backup = Backup (os .path .join (directory , "backup.txt" ))
20+ self ._backup = Backup (directory , backup_time )
21+ self ._comms_manager = CommsManager (directory , "store" )
2222 self ._img_dir = os .path .join (directory , "img_dir" )
23+ self ._comms_manager .make_img_dir (self ._img_dir )
2324
24- if not self ._file_manager .is_dir (self ._img_dir ):
25- self ._file_manager .make_dir (self ._img_dir )
26-
27- self .records = []
28- self ._load_records_from_file ()
29- self ._sort_records ()
30-
31- def _load_records_from_file (self ):
32- """ Clear the current record store and load a new set of records from the specified file. """
33- self .records = []
34-
35- if not self ._file_manager .is_file (self ._file ):
36- return
37-
38- lines = self ._file_manager .read_lines (self ._file )
39- for line in lines :
40- try :
41- record = Record .from_string (line )
42- self .records .append (record )
43- except Exception :
44- print ("Failed to parse store Record: {}" .format (line ))
45-
25+ self .records = self ._comms_manager .load_records_from_file ()
4626 self ._truncate_record_list ()
27+ self ._sort_records ()
4728
4829 def size (self ):
4930 """ Returns the number of records in the store
@@ -82,17 +63,16 @@ def delete_records(self, records_to_delete):
8263 """
8364 for record in records_to_delete :
8465 self .records .remove (record )
85- if self ._file_manager .is_file (record .image_path ):
86- self ._file_manager .remove (record .image_path )
66+ self ._comms_manager .remove_img_file (record )
8767
8868 self ._process_change ()
8969
9070 def backup_records (self , records_to_backup ):
9171 self ._backup .backup_records (records_to_backup )
9272
9373 def _truncate_record_list (self ):
94- min_store_capacity = 2
95- actual_store_capacity = max (self ._store_capacity .value (), min_store_capacity )
74+
75+ actual_store_capacity = max (self ._store_capacity .value (), self . MIN_STORE_CAPACITY )
9676
9777 if len (self .records ) > actual_store_capacity :
9878 to_delete = self .records [actual_store_capacity :]
@@ -104,27 +84,14 @@ def _process_change(self):
10484 """
10585 self ._sort_records ()
10686 self ._truncate_record_list ()
107- self ._to_file ( )
108- self ._to_csv_file ( )
87+ self ._comms_manager . to_file ( self . records )
88+ self ._comms_manager . to_csv_file ( self . records )
10989
11090 def _sort_records (self ):
11191 """ Sort the records in descending date order (most recent first).
11292 """
11393 self .records .sort (reverse = True , key = lambda record : record .timestamp )
11494
115- def _to_file (self ):
116- """ Save the contents of the store to the backing file
117- """
118- record_lines = [rec .to_string () + "\n " for rec in self .records ]
119- self ._file_manager .write_lines (self ._file , record_lines )
120-
121- def _to_csv_file (self ):
122- """ Save the contents of the store to the backing csv file
123- """
124- record_lines = [rec .to_csv_string () + "\n " for rec in self .records ]
125- self ._file_manager .write_lines (self ._csv_file , record_lines )
126-
127-
12895 def _merge_holder_image_into_pins_image (self , holder_img , pins_img ):
12996 factor = 0.22 * pins_img .width / holder_img .width
13097 small_holder_img = holder_img .rescale (factor )
0 commit comments