~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/http/response.py

  • Committer: John Arbash Meinel
  • Date: 2006-07-06 18:26:16 UTC
  • mto: This revision was merged to the branch mainline in revision 1869.
  • Revision ID: john@arbash-meinel.com-20060706182616-82f4555fe7613667
Found a few bugs in error handling code, updated tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
from bisect import bisect
26
26
import re
27
27
 
28
 
from bzrlib.errors import InvalidRange
 
28
from bzrlib import errors
29
29
from bzrlib.trace import mutter
30
30
 
31
31
 
94
94
        i = bisect(self._ranges, self._pos) - 1
95
95
 
96
96
        if i < 0 or self._pos > self._ranges[i]._ent_end:
97
 
            raise InvalidRange(self._path, self._pos)
 
97
            raise errors.InvalidRange(self._path, self._pos)
98
98
 
99
99
        r = self._ranges[i]
100
100
 
101
101
        mutter('found range %s %s for pos %s', i, self._ranges[i], self._pos)
102
102
 
103
103
        if (self._pos + size - 1) > r._ent_end:
104
 
            raise InvalidRange(self._path, self._pos)
 
104
            raise errors.InvalidRange(self._path, self._pos)
105
105
 
106
106
        start = r._data_start + (self._pos - r._ent_start)
107
107
        end   = start + size
141
141
        self._finish_ranges()
142
142
 
143
143
    def _parse_range(self, range):
 
144
        """Parse an http Content-range header and return start + end"""
144
145
        match = self.CONTENT_RANGE_RE.match(range)
145
146
        if not match:
146
 
            raise TransportError("Invalid Content-range in HTTP response!")
 
147
            raise errors.InvalidHttpRange(self._path, range,
 
148
                                          "Invalid Content-range")
147
149
 
148
150
        rtype, start, end, total = match.groups()
149
151
 
150
152
        if rtype != 'bytes':
151
 
            raise TransportError("Unsupported range type '%s' in HTTP "
152
 
                                 "response for %s!" % (rtype, self._path))
 
153
            raise errors.InvalidHttpRange(self._path, range,
 
154
                    "Unsupported range type '%s'" % (rtype,))
153
155
 
154
156
        try:
155
157
            start = int(start)
156
158
            end = int(end)
157
 
        except ValueError:
158
 
            raise TransportError("Invalid Content-range in HTTP "
159
 
                                 "response for %s!" % self._path)
 
159
        except ValueError, e:
 
160
            raise errors.InvalidHttpRange(self._path, range, str(e))
160
161
 
161
162
        return start, end
162
163