Skip to content

Commit 868e88d

Browse files
committed
works fine
1 parent 22b2ed2 commit 868e88d

File tree

8 files changed

+52
-86
lines changed

8 files changed

+52
-86
lines changed

dls_barcode/config/barcode_config.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@ def __init__(self, file, file_manager):
2222

2323
if IS_BUNDLED:
2424
default_store = "./store/"
25+
default_backup = "./backup/"
2526
else:
2627
default_store = "../store/"
28+
default_backup = "../backup/"
29+
2730

2831
self.color_ok = add(ColorConfigItem, "Pin/Puck Read", Color.Green())
2932
self.color_accept = add(ColorConfigItem, "Puck Partially Read", Color.Yellow())
@@ -43,8 +46,9 @@ def __init__(self, file, file_manager):
4346
self.image_crop = add(BoolConfigItem, "Crop to Puck", default=True)
4447

4548
self.store_directory = add(DirectoryConfigItem, "Store Directory", default=default_store)
46-
self.store_capacity = add(IntConfigItem, "Results History Size", default=50)
47-
self.backup_time = add(IntConfigItem, "Backup in Weeks", default=3)
49+
self.backup = add(BoolConfigItem, "Backup before Delete", default=True)
50+
self.backup_directory = add(DirectoryConfigItem, "Backup Directory", default=default_backup)
51+
4852

4953
self.console_frame = add(BoolConfigItem, "Print Frame Summary", default=False)
5054
self.slot_images = add(BoolConfigItem, "Save Debug Images", default=False)
@@ -60,6 +64,12 @@ def __init__(self, file, file_manager):
6064

6165
self.initialize_from_file()
6266

67+
def get_store_directory(self):
68+
return self.store_directory.value()
69+
70+
def get_backup_directory(self):
71+
return self.backup_directory.value()
72+
6373
def col_ok(self):
6474
return self.color_ok.value()
6575

dls_barcode/config/barcode_config_dialog.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ def _init_ui(self):
5555

5656
self.start_group("Store")
5757
self._add_control(StoreDirectoryConfigControl(cfg.store_directory))
58-
add(cfg.backup_time)
59-
add(cfg.store_capacity)
58+
add(cfg.backup)
59+
add(cfg.backup_directory)
6060

6161
self.start_group("Debug")
6262
add(cfg.console_frame)

dls_barcode/data_store/backup.py

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,13 @@
1-
import time
2-
3-
from dls_barcode.data_store.comms_manager import CommsManager
4-
5-
61
class Backup:
72

83
"""
94
Backup class maintains the short time backaup of records which is kept in the same folder as the store files.
105
"""
116

12-
WEEK_IN_SECONDS = 604800
13-
14-
def __init__(self, comms_man, backup_time):
7+
def __init__(self, comms_man):
158
self._comms = comms_man
16-
self._backup_time = backup_time.value()
17-
self._records = self._comms.load_records_from_file()
18-
19-
def _truncate_record_list(self):
20-
self._records = list(filter(lambda x: not self._is_old(x), self._records))
219

2210
def backup_records(self, to_back):
23-
self._records.extend(to_back)
24-
self._truncate_record_list()
25-
self._comms.to_csv_file(self._records)
11+
self._comms.to_csv_file(to_back)
2612

27-
def _is_old(self, record):
28-
tm = time.time()
29-
record_time = record.timestamp
30-
delta = tm - record_time
31-
weeks = self._backup_time * self.WEEK_IN_SECONDS # weeks in seconds
32-
return delta > weeks
3313

dls_barcode/data_store/comms_manager.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ class CommsManager:
1010

1111
def __init__(self, directory, file_name):
1212
self._file_manager = FileManager()
13-
self._directory = directory.value()
13+
self._make_dir(directory)
14+
self._directory = directory
1415
self._file_name = file_name
16+
self._img_dir = None
1517

1618
def load_records_from_file(self):
1719
""" Clear the current record store and load a new set of records from the specified file. """
@@ -46,10 +48,15 @@ def to_csv_file(self, records):
4648
self._file_manager.write_lines(csv_file, record_lines)
4749

4850
def make_img_dir(self):
49-
img_dir = os.path.join(self._directory, "img_dir")
50-
if not self._file_manager.is_dir(img_dir):
51-
self._file_manager.make_dir(img_dir)
52-
return img_dir
51+
self._img_dir = os.path.join(self._directory, "img_dir")
52+
self._make_dir(self._img_dir)
53+
54+
def get_img_dir(self):
55+
return self._img_dir
56+
57+
def _make_dir(self, dr):
58+
if not self._file_manager.is_dir(dr):
59+
self._file_manager.make_dir(dr)
5360

5461
def remove_img_file(self, record):
5562
if self._file_manager.is_file(record.image_path):

dls_barcode/data_store/store.py

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import uuid
22
import os
3+
import time
34

5+
from dls_barcode.data_store.backup import Backup
6+
from dls_barcode.data_store.comms_manager import CommsManager
47
from .record import Record
58

69

@@ -9,17 +12,15 @@ class Store:
912
""" Maintains a list of records of previous barcodes scans. Any changes (additions
1013
or deletions) are automatically written to the backing file.
1114
"""
12-
MIN_STORE_CAPACITY = 2
1315

14-
def __init__(self, comms_manager, backup, store_capacity):
16+
def __init__(self, comms_manager):
1517
""" Initializes a new instance of Store.
1618
"""
17-
self._store_capacity = store_capacity
18-
self._backup = backup
1919
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()
20+
self._comms_manager.make_img_dir()
21+
self._img_dir = self._comms_manager.get_img_dir()
22+
records = self._comms_manager.load_records_from_file()
23+
self.records = records
2324
self._sort_records()
2425

2526
def size(self):
@@ -53,6 +54,13 @@ def merge_record(self, holder_barcode, plate, holder_img, pins_img):
5354

5455
self._add_record(holder_barcode, plate, holder_img, pins_img)
5556

57+
def backup_records(self, directory):
58+
ts = time.localtime()
59+
file_name = time.strftime("%Y-%m-%d_%H-%M-%S", ts)
60+
backup_manger = CommsManager(directory, file_name)
61+
backup = Backup(backup_manger)
62+
backup.backup_records(self.records)
63+
5664
def delete_records(self, records_to_delete):
5765
""" Remove all of the records in the supplied list from the store and
5866
save changes to the backing file.
@@ -63,23 +71,11 @@ def delete_records(self, records_to_delete):
6371

6472
self._process_change()
6573

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)
7774

7875
def _process_change(self):
7976
""" Sort the records and save to file.
8077
"""
8178
self._sort_records()
82-
self._truncate_record_list()
8379
self._comms_manager.to_file(self.records)
8480
self._comms_manager.to_csv_file(self.records)
8581

dls_barcode/data_store/store_manager.py

Lines changed: 0 additions & 31 deletions
This file was deleted.

dls_barcode/datamatrix/read/interpret.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,14 @@ def interpret_bytes(data_bytes):
5858
#log.error(NotImplementedError("Datamatrix Extended Channel Interpretation code not implemented"))
5959
raise NotImplementedError("Datamatrix Extended Channel Interpretation code not implemented")
6060

61-
elif 242 <= byte < 256 or byte == 0: # Unused parts of message space.
61+
elif 242 <= byte < 256: # Unused parts of message space.
6262
#log = log = logging.getLogger(".".join([__name__]))
6363
error = ValueError("Code {} is not used in Datamatrix specification".format(byte))
6464
#.error(error)
6565
raise error
66+
elif byte == 0:
67+
error = ValueError("Code {} is not used in Datamatrix specification".format(byte))
68+
print(error)
6669

6770
return ''.join(m for m in message)
6871

dls_barcode/gui/record_table.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
from PyQt5.QtWidgets import QGroupBox, QVBoxLayout, QHBoxLayout, QTableWidget, QMessageBox
66

77
from dls_barcode.data_store import Store
8-
from dls_barcode.data_store.store_manager import StoreManager
9-
from dls_util.file import FileManager
8+
from dls_barcode.data_store.comms_manager import CommsManager
109

1110
# todo: allow delete key to be used for deletion
1211
# todo: allow record selection with arrow keys
@@ -23,7 +22,8 @@ def __init__(self, barcode_table, image_frame, options):
2322
super(ScanRecordTable, self).__init__()
2423

2524
# Read the store from file
26-
self._store = StoreManager(options.store_directory, options.store_capacity, options.backup_time).create_store()
25+
comms_manger = CommsManager(options.get_store_directory(), "store")
26+
self._store = Store(comms_manger)
2727
self._options = options
2828

2929
self._barcodeTable = barcode_table
@@ -136,7 +136,8 @@ def _delete_selected_records(self):
136136
record = self._store.get_record(index)
137137
records_to_delete.append(record)
138138

139-
self._store.backup_records(records_to_delete)
139+
if self._options.backup.value():
140+
self._store.backup_records(self._options.get_backup_directory())
140141
self._store.delete_records(records_to_delete)
141142

142143
self._load_store_records()

0 commit comments

Comments
 (0)