~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/xml_serializer.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-03-06 06:48:25 UTC
  • mfrom: (4070.8.6 debug-config)
  • Revision ID: pqm@pqm.ubuntu.com-20090306064825-kbpwggw21dygeix6
(mbp) debug_flags configuration option

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""XML externalization support."""
18
18
 
22
22
# importing this module is fairly slow because it has to load several
23
23
# ElementTree bits
24
24
 
25
 
from bzrlib.serializer import Serializer
 
25
from bzrlib import registry
26
26
from bzrlib.trace import mutter, warning
27
27
 
28
28
try:
49
49
from bzrlib import errors
50
50
 
51
51
 
52
 
class XMLSerializer(Serializer):
53
 
    """Abstract XML object serialize/deserialize"""
 
52
class Serializer(object):
 
53
    """Abstract object serialize/deserialize"""
 
54
 
 
55
    def write_inventory(self, inv, f):
 
56
        """Write inventory to a file"""
 
57
        raise NotImplementedError(self.write_inventory)
 
58
 
 
59
    def write_inventory_to_string(self, inv):
 
60
        raise NotImplementedError(self.write_inventory_to_string)
54
61
 
55
62
    def read_inventory_from_string(self, xml_string, revision_id=None,
56
63
                                   entry_cache=None):
168
175
elementtree.ElementTree._escape_cdata = _escape_cdata
169
176
 
170
177
 
171
 
def escape_invalid_chars(message):
172
 
    """Escape the XML-invalid characters in a commit message.
173
 
 
174
 
    :param message: Commit message to escape
175
 
    :param count: Number of characters that were escaped
176
 
    """
177
 
    # Python strings can include characters that can't be
178
 
    # represented in well-formed XML; escape characters that
179
 
    # aren't listed in the XML specification
180
 
    # (http://www.w3.org/TR/REC-xml/#NT-Char).
181
 
    return re.subn(u'[^\x09\x0A\x0D\u0020-\uD7FF\uE000-\uFFFD]+',
182
 
            lambda match: match.group(0).encode('unicode_escape'),
183
 
            message)
 
178
class SerializerRegistry(registry.Registry):
 
179
    """Registry for serializer objects"""
 
180
 
 
181
 
 
182
format_registry = SerializerRegistry()
 
183
format_registry.register_lazy('4', 'bzrlib.xml4', 'serializer_v4')
 
184
format_registry.register_lazy('5', 'bzrlib.xml5', 'serializer_v5')
 
185
format_registry.register_lazy('6', 'bzrlib.xml6', 'serializer_v6')
 
186
format_registry.register_lazy('7', 'bzrlib.xml7', 'serializer_v7')
 
187
format_registry.register_lazy('8', 'bzrlib.xml8', 'serializer_v8')