Package linda :: Module overrides
[hide private]

Source Code for Module linda.overrides

 1  import os, re 
 2  from linda import root, clparser 
 3  from linda.debug import dprint 
 4  from linda.funcs import run_external_cmd, ExtCmdException 
 5  from linda.parser.debfilename import DebFilenameParser 
 6  from linda.parser.override import OverrideParser, OverrideParserException 
 7   
8 -class Overrides:
9 - def __init__(self, file, lab):
10 self.file = file 11 debfn = DebFilenameParser(file) 12 self.pkg_name = debfn.package 13 self.data = {} 14 self.lab = lab
15
16 - def parse(self):
17 for directory in ('%s/overrides' % root, '/etc/linda/overrides', \ 18 os.path.expanduser('~/.linda/overrides')): 19 for file in ('all', self.pkg_name): 20 dprint(_('Trying to parse %s/%s for overrides.') % \ 21 (directory, file), 2) 22 try: 23 override = OverrideParser('%s/%s' % (directory, file)) 24 except EnvironmentError: 25 continue 26 except OverrideParserException, e: 27 dprint(_('Failed to parse %s/s for overrides: %s.') % \ 28 (directory, file, e), 2) 29 self.merge(override) 30 if clparser['more-overrides']: 31 dprint(_('Trying to parse %s for overrides.') % \ 32 clparser['more-overrides'], 2) 33 override = OverrideParser(clparser['more-overrides']) 34 self.merge(override) 35 if os.path.exists(os.path.join(self.lab, 'data.tar.gz')): 36 file_name = './usr/share/linda/overrides/%s' % self.pkg_name 37 dprint(_('Trying to parse in-deb overrides.'), 2) 38 indeb = open(os.path.join(self.lab, 'indeb'), 'w') 39 try: 40 output = run_external_cmd('tar zxfO %s %s' % \ 41 (os.path.join(self.lab, 'data.tar.gz'), file_name)) 42 indeb.write(output) 43 indeb.close() 44 override = OverrideParser(os.path.join(self.lab, 'indeb')) 45 self.merge(override) 46 except ExtCmdException: 47 pass 48 except OverrideParserException, e: 49 dprint(_('Failed to parse in-deb overrides: %s.') % e, 2) 50 os.unlink(os.path.join(self.lab, 'indeb')) 51 if clparser['print-overrides']: 52 print _("Overrides: %s") % self.data
53
54 - def merge(self, data):
55 for key in data.keys(): 56 self.data[key] = data[key]
57
58 - def check(self, err_dicts, data_files):
59 for err_dict in err_dicts.keys(): 60 for tag in err_dicts[err_dict].keys(): 61 dprint("Checking overrides for %s." % tag) 62 if self.data.has_key(tag): 63 if not self.data[tag]: 64 del err_dicts[err_dict][tag] 65 dprint(_("Overridding tag %s.") % tag) 66 elif self.data[tag].has_key('Type'): 67 dprint("Overridding tag %s's type of %s to %s." % \ 68 (tag, data_files[err_dict][tag]['Type'], \ 69 self.data[tag]['Type'])) 70 data_files[err_dict][tag]['Type'] = \ 71 self.data[tag]['Type'] 72 elif self.data[tag].has_key('Data'): 73 to_del = [] 74 if not err_dicts[err_dict][tag][0]: 75 if not self.data[tag].has_key('Type'): 76 del err_dicts[err_dict][tag] 77 continue 78 for error in range(len(err_dicts[err_dict][tag])): 79 for data in err_dicts[err_dict][tag][error]: 80 if re.search(self.data[tag]['Data'], 81 str(data)) and error not in to_del: 82 to_del.insert(0, error) 83 for deleting in to_del: 84 del err_dicts[err_dict][tag][deleting] 85 dprint("Overridding tag %s which has data %s." % \ 86 (tag, self.data[tag]['Data'])) 87 return err_dicts, data_files
88