1 """GNUmed export tray / filing cabinet.
2
3 Think shopping cart in a web shop.
4 """
5
6 __license__ = "GPL"
7 __author__ = "K.Hilbert <Karsten.Hilbert@gmx.net>"
8
9
10 import sys
11 import logging
12 import shutil
13 import os
14
15
16 if __name__ == '__main__':
17 sys.path.insert(0, '../../')
18 from Gnumed.pycommon import gmTools
19
20
21
22
23
24 _log = logging.getLogger('gm.tray')
25
27
29 if not gmTools.mkdir(directory = directory):
30 raise ValueError('[%s.__init__()]: path [%s] is not valid' % (self.__class__.__name__, directory))
31 self.__dir = directory
32 _log.debug('export tray [%s]', self.__dir)
33 self.__tray_items = {}
34
35 - def add_file(self, filename=None, description=None, remove_source_file=False):
36
37 src_filename = filename
38 if description is None:
39 description = src_filename
40
41
42 try:
43 item_fname = self.__tray_items[description]
44 item_md5 = gmTools.file2md5(filename = item_fname, return_hex = False)
45 src_md5 = gmTools.file2md5(filename = src_filename, return_hex = False)
46 if item_md5 == src_md5:
47 _log.debug('md5 match: [%s] (%s) already in tray as [%s]', description, src_filename, item_fname)
48 return True
49 except KeyError:
50 pass
51 except StandardError:
52 _log.exception('cannot check [%s] for dupes in export tray [%s]', src_filename, self.__dir)
53 return False
54
55
56 src_dir, src_name = os.path.split(src_filename)
57 target_filename = os.path.join(self.__dir, src_name)
58 try:
59 shutil.copy2(src_filename, target_filename)
60 except StandardError:
61 _log.exception('cannot copy [%s] into export tray as [%s]', src_filename, target_filename)
62 return False
63 self.__tray_items[description] = target_filename
64
65
66 if remove_source_file:
67 try:
68 os.remove(src_filename)
69 except StandardError:
70 _log.exception('cannot remove [%s]', src_filename)
71
72 return True
73
75 return self.__tray_items
76
77 items = property(_get_tray_items, lambda x:x)
78
80 return self.__tray_items.values()
81
82 filenames = property(_get_filenames, lambda x:x)
83
84 if __name__ == '__main__':
85
86 if len(sys.argv) < 2:
87 sys.exit()
88
89 if sys.argv[1] != 'test':
90 sys.exit()
91
92 from Gnumed.pycommon import gmI18N
93
94 gmI18N.activate_locale()
95 gmI18N.install_domain()
96
97
103
104 test_tray()
105