diff options
Diffstat (limited to 'pym/portage/env/config.py')
-rw-r--r-- | pym/portage/env/config.py | 169 |
1 files changed, 2 insertions, 167 deletions
diff --git a/pym/portage/env/config.py b/pym/portage/env/config.py index 9f81d633f..4af7ac47b 100644 --- a/pym/portage/env/config.py +++ b/pym/portage/env/config.py @@ -3,173 +3,8 @@ # Distributed under the terms of the GNU General Public License v2 # $Id$ -import os from UserDict import UserDict - -class DataLoader(object): - - def load(self): - """ - Function to do the actual work of a Loader - """ - pass - -class AtomFileLoader(DataLoader): - """ - Class to load data from a file full of atoms one per line - - >>> atom1 - >>> atom2 - >>> atom3 - - becomes ['atom1', 'atom2', 'atom3'] - """ - - _recursive = False - - def __init__(self, filename): - DataLoader.__init__(self) - self.fname = filename - - def load(self): - data = {} - errors = {} - line_count = 0 - file_list = None - if self._recursive and os.path.isdir(self.fname): - for root, dirs, files in os.walk(self.fname): - if 'CVS' in dirs: - dirs.remove('CVS') - files = filter(files,startswith('.')) - file_list.append([f.join(root,f) for f in files]) - else: - file_list = [self.fname] - - for file in file_list: - f = open(file, 'rb') - for line in f: - line_count = line_count + 1 - if line.startswith('#'): - continue - split = line.strip().split() - if not len(split): - errors.setdefault(self.fname,[]).append( - "Malformed data at line: %s, data: %s" - % (line_count, split)) - key = split[0] - data[key] = None - return (data,errors) - -class KeyListFileLoader(DataLoader): - """ - Class to load data from a file full of key [list] tuples - - >>>>key foo1 foo2 foo3 - becomes - {'key':['foo1','foo2','foo3']} - """ - - _recursive = False - - def __init__(self, filename): - DataLoader.__init__(self) - self.fname = filename - - def load(self): - data = {} - errors = {} - line_count = 0 - file_list = None - if self._recursive and os.path.isdir(self.fname): - for root, dirs, files in os.walk(self.fname): - if 'CVS' in dirs: - dirs.remove('CVS') - files = filter(files,startswith('.')) - file_list.append([f.join(root,f) for f in files]) - else: - file_list = [self.fname] - - for file in file_list: - f = open(file, 'rb') - for line in f: - line_count = line_count + 1 - if line.startswith('#'): - continue - split = line.strip().split() - if len(split) < 2: - errors.setdefault(self.fname,[]).append( - "Malformed data at line: %s, data: %s" - % (line_count, split)) - key = split[0] - value = split[1:] - if key in data: - data[key].append(value) - else: - data[key] = value - return (data,errors) - -class KeyValuePairFileLoader(DataLoader): - """ - Class to load data from a file full of key=value pairs - - >>>>key=value - >>>>foo=bar - becomes: - {'key':'value', - 'foo':'bar'} - """ - - _recursive = False - - def __init__(self, filename): - DataLoader.__init__(self) - self.fname = filename - - def load(self): - """ - Return the {source: {key: value}} pairs from a file - Return the {source: [list of errors] from a load - - @param recursive: If set and self.fname is a directory; - load all files in self.fname - @type: Boolean - @rtype: tuple - @returns: - Returns (data,errors), both may be empty dicts or populated. - """ - - DataLoader.load(self) - data = {} - errors = {} - line_count = 0 - file_list = None - if self._recursive and os.path.isdir(self.fname): - for root, dirs, files in os.walk(self.fname): - if 'CVS' in dirs: - dirs.remove('CVS') - files = filter(files,startswith('.')) - file_list.append([f.join(root,f) for f in files]) - else: - file_list = [self.fname] - - for file in file_list: - f = open(file, 'rb') - for line in f: - line_count = line_count + 1 # Increment line count - if line.startswith('#'): - continue - split = line.strip().split('=') - if len(split) < 2: - errors.setdefault(self.fname,[]).append( - "Malformed data at line: %s, data %s" - % (line_count, split)) - key = split[0] - value = split[1:] - if key in data: - data[key].append(value) - else: - data[key] = value - return (data,errors) +from portage.env.loaders import KeyListFileLoader, KeyValuePairFileLoader, AtomFileLoader class PackageKeywords(UserDict): """ @@ -287,7 +122,7 @@ class PackageMaskFile(PackageMask): to revert a previous mask; this only works when masking files are stacked """ - default_loader = KeyValuePairFileLoader + default_loader = AtomFileLoader def __init__(self, filename): self.loader = self.default_loader(filename) |