~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/rules.py

  • Committer: Ian Clatworthy
  • Date: 2008-06-30 00:47:30 UTC
  • mto: (3515.1.1 ianc-integration)
  • mto: This revision was merged to the branch mainline in revision 3516.
  • Revision ID: ian.clatworthy@canonical.com-20080630004730-mbd1jiwipzdg15hc
changed API design as requested by jam during review

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
class _RulesSearcher(object):
40
40
    """An object that provides rule-based preferences."""
41
41
 
42
 
    def get_items(self, path, names=None):
43
 
        """Return the preferences for a path as a sequence of name,value tuples.
 
42
    def get_items(self, path):
 
43
        """Return the preferences for a path as name,value tuples.
44
44
 
45
45
        :param path: tree relative path
46
 
        :param names: the list of preferences to lookup - None for all
47
 
        :return: None if no rule matched, otherwise a sequence of name,value
48
 
          tuples. If names is not None, the sequence is the same length as
49
 
          names, tuple order matches the order in names, and undefined
50
 
          preferences are given the value None.
 
46
        :return: [] if no rule matched, otherwise a sequence of name,value
 
47
          tuples.
51
48
        """
52
49
        raise NotImplementedError(self.get_items)
53
50
 
 
51
    def get_selected_items(self, path, names):
 
52
        """Return selected preferences for a path as name,value tuples.
 
53
 
 
54
        :param path: tree relative path
 
55
        :param names: the list of preferences to lookup
 
56
        :return: [] if no rule matched, otherwise a sequence of name,value
 
57
          tuples. The sequence is the same length as names,
 
58
          tuple order matches the order in names, and
 
59
          undefined preferences are given the value None.
 
60
        """
 
61
        raise NotImplementedError(self.get_selected_items)
 
62
 
54
63
 
55
64
class _IniBasedRulesSearcher(_RulesSearcher):
56
65
 
75
84
        else:
76
85
            self._globster = None
77
86
 
78
 
    def get_items(self, path, names=None):
 
87
    def get_items(self, path):
79
88
        """See _RulesSearcher.get_items."""
80
89
        if self._globster is None:
81
 
            return None
82
 
        pat = self._globster.match(path)
83
 
        if pat is None:
84
 
            return None
85
 
        else:
86
 
            all = self._cfg[FILE_PREFS_PREFIX + pat]
87
 
            if names is None:
88
 
                return tuple(all.items())
89
 
            else:
90
 
                return tuple((k, all.get(k)) for k in names)
 
90
            return []
 
91
        pat = self._globster.match(path)
 
92
        if pat is None:
 
93
            return []
 
94
        else:
 
95
            all = self._cfg[FILE_PREFS_PREFIX + pat]
 
96
            return tuple(all.items())
 
97
 
 
98
    def get_selected_items(self, path, names):
 
99
        """See _RulesSearcher.get_selected_items."""
 
100
        if self._globster is None:
 
101
            return []
 
102
        pat = self._globster.match(path)
 
103
        if pat is None:
 
104
            return []
 
105
        else:
 
106
            all = self._cfg[FILE_PREFS_PREFIX + pat]
 
107
            return tuple((k, all.get(k)) for k in names)
91
108
 
92
109
 
93
110
class _StackedRulesSearcher(_RulesSearcher):
99
116
        """
100
117
        self.searchers = searchers
101
118
 
102
 
    def get_items(self, path, names=None):
 
119
    def get_items(self, path):
103
120
        """See _RulesSearcher.get_items."""
104
121
        for searcher in self.searchers:
105
 
            result = searcher.get_items(path, names)
106
 
            if result is not None:
107
 
                return result
108
 
        return None
 
122
            result = searcher.get_items(path)
 
123
            if result:
 
124
                return result
 
125
        return []
 
126
 
 
127
    def get_selected_items(self, path, names):
 
128
        """See _RulesSearcher.get_selected_items."""
 
129
        for searcher in self.searchers:
 
130
            result = searcher.get_selected_items(path, names)
 
131
            if result:
 
132
                return result
 
133
        return []
109
134
 
110
135
 
111
136
def rules_filename():