~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/lazy_regex.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-05-11 11:47:36 UTC
  • mfrom: (5200.3.8 lock_return)
  • Revision ID: pqm@pqm.ubuntu.com-20100511114736-mc1sq9zyo3vufec7
(lifeless) Provide a consistent interface to Tree, Branch,
 Repository where lock methods return an object with an unlock method to
 unlock the lock. This breaks the API for Branch,
 Repository on their lock_write methods. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Lazily compiled regex objects.
18
18
 
19
 
This module defines a class which creates proxy objects for regex
20
 
compilation.  This allows overriding re.compile() to return lazily compiled
21
 
objects.  
22
 
 
23
 
We do this rather than just providing a new interface so that it will also
24
 
be used by existing Python modules that create regexs.
 
19
This module defines a class which creates proxy objects for regex compilation.
 
20
This allows overriding re.compile() to return lazily compiled objects.
25
21
"""
26
22
 
27
23
import re
28
24
 
29
 
from bzrlib import errors
30
 
 
31
25
 
32
26
class LazyRegex(object):
33
27
    """A proxy around a real regex, which won't be compiled until accessed."""
48
42
    def __init__(self, args=(), kwargs={}):
49
43
        """Create a new proxy object, passing in the args to pass to re.compile
50
44
 
51
 
        :param args: The `*args` to pass to re.compile
52
 
        :param kwargs: The `**kwargs` to pass to re.compile
 
45
        :param args: The *args to pass to re.compile
 
46
        :param kwargs: The **kwargs to pass to re.compile
53
47
        """
54
48
        self._real_regex = None
55
49
        self._regex_args = args
64
58
 
65
59
    def _real_re_compile(self, *args, **kwargs):
66
60
        """Thunk over to the original re.compile"""
67
 
        try:
68
 
            return _real_re_compile(*args, **kwargs)
69
 
        except re.error, e:
70
 
            # raise InvalidPattern instead of re.error as this gives a
71
 
            # cleaner message to the user.
72
 
            raise errors.InvalidPattern('"' + args[0] + '" ' +str(e))
 
61
        return _real_re_compile(*args, **kwargs)
73
62
 
74
63
    def __getattr__(self, attr):
75
64
        """Return a member from the proxied regex object.