11import uuid
2- import os
2+ import time
33
4+ from dls_barcode .data_store .backup import Backup
5+ from dls_barcode .data_store .store_writer import StoreWriter
46from .record import Record
57
68
@@ -9,18 +11,12 @@ class Store:
911 """ Maintains a list of records of previous barcodes scans. Any changes (additions
1012 or deletions) are automatically written to the backing file.
1113 """
12- MIN_STORE_CAPACITY = 2
1314
14- def __init__ (self , comms_manager , backup , store_capacity ):
15+ def __init__ (self , store_writer , records ):
1516 """ Initializes a new instance of Store.
1617 """
17- self ._store_capacity = store_capacity
18- self ._backup = backup
19- self ._comms_manager = comms_manager
20- self ._img_dir = self ._comms_manager .make_img_dir ()
21- self .records = self ._comms_manager .load_records_from_file ()
22- self ._truncate_record_list ()
23- self ._sort_records ()
18+ self ._store_writer = store_writer
19+ self .records = records
2420
2521 def size (self ):
2622 """ Returns the number of records in the store
@@ -30,17 +26,17 @@ def size(self):
3026 def get_record (self , index ):
3127 """ Get record by index where the 0th record is the most recent
3228 """
29+ self ._sort_records ()
3330 return self .records [index ] if self .records else None
3431
3532 def _add_record (self , holder_barcode , plate , holder_img , pins_img ):
3633 """ Add a new record to the store and save to the backing file.
3734 """
3835 merged_img = self ._merge_holder_image_into_pins_image (holder_img , pins_img )
3936 guid = str (uuid .uuid4 ())
40- filename = os .path .abspath (os .path .join (self ._img_dir , guid + '.png' ))
41- merged_img .save_as (filename )
37+ self ._store_writer .to_image (merged_img , guid )
4238
43- record = Record .from_plate (holder_barcode , plate , filename )
39+ record = Record .from_plate (holder_barcode , plate , self . _store_writer . get_img_path () )
4440
4541 self .records .append (record )
4642 self ._process_change ()
@@ -53,35 +49,30 @@ def merge_record(self, holder_barcode, plate, holder_img, pins_img):
5349
5450 self ._add_record (holder_barcode , plate , holder_img , pins_img )
5551
52+ def backup_records (self , directory ):
53+ ts = time .localtime ()
54+ file_name = time .strftime ("%Y-%m-%d_%H-%M-%S" , ts )
55+ backup_writer = StoreWriter (directory , file_name )
56+ backup = Backup (backup_writer )
57+ self ._sort_records ()
58+ backup .backup_records (self .records )
59+
5660 def delete_records (self , records_to_delete ):
5761 """ Remove all of the records in the supplied list from the store and
5862 save changes to the backing file.
5963 """
6064 for record in records_to_delete :
6165 self .records .remove (record )
62- self ._comms_manager .remove_img_file (record )
66+ self ._store_writer .remove_img_file (record )
6367
6468 self ._process_change ()
6569
66- def backup_records (self , records_to_backup ):
67- self ._backup .backup_records (records_to_backup )
68-
69- def _truncate_record_list (self ):
70-
71- actual_store_capacity = max (self ._store_capacity .value (), self .MIN_STORE_CAPACITY )
72-
73- if len (self .records ) > actual_store_capacity :
74- to_delete = self .records [actual_store_capacity :]
75- self .backup_records (to_delete )
76- self .delete_records (to_delete )
77-
7870 def _process_change (self ):
7971 """ Sort the records and save to file.
8072 """
8173 self ._sort_records ()
82- self ._truncate_record_list ()
83- self ._comms_manager .to_file (self .records )
84- self ._comms_manager .to_csv_file (self .records )
74+ self ._store_writer .to_file (self .records )
75+ self ._store_writer .to_csv_file (self .records )
8576
8677 def _sort_records (self ):
8778 """ Sort the records in descending date order (most recent first).
@@ -97,5 +88,6 @@ def _merge_holder_image_into_pins_image(self, holder_img, pins_img):
9788 return merged_img
9889
9990 def is_latest_holder_barcode (self , holder_barcode ):
91+ self ._sort_records ()
10092 latest_record = self .get_record (0 )
10193 return latest_record is not None and holder_barcode == latest_record .holder_barcode
0 commit comments