/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-02-05 05:42:28 UTC
  • mfrom: (3959.1.5 debug-sftp)
  • Revision ID: pqm@pqm.ubuntu.com-20090205054228-3qyiv92vtgs94e0c
(mbp) better and less redundant debug flag docs

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
"""Handlers for HTTP Responses.
18
18
 
67
67
    # maximum size of read requests -- used to avoid MemoryError issues in recv
68
68
    _max_read_size = 512 * 1024
69
69
 
70
 
    def __init__(self, path, infile):
 
70
    def __init__(self, path, infile, report_activity=None):
71
71
        """Constructor.
72
72
 
73
73
        :param path: File url, for error reports.
74
74
        :param infile: File-like socket set at body start.
 
75
        :param report_activity: A Transport._report_activity function to call
 
76
            as bytes are read.
75
77
        """
76
78
        self._path = path
77
79
        self._file = infile
78
80
        self._boundary = None
 
81
        self._report_activity = report_activity
79
82
        # When using multi parts response, this will be set with the headers
80
83
        # associated with the range currently read.
81
84
        self._headers = None
91
94
 
92
95
    def set_boundary(self, boundary):
93
96
        """Define the boundary used in a multi parts message.
94
 
 
 
97
        
95
98
        The file should be at the beginning of the body, the first range
96
99
        definition is read and taken into account.
97
100
        """
114
117
            # IIS 6 and 7 incorrectly wrap boundary strings in <>
115
118
            # together they make a beautiful bug, which we will be gracious
116
119
            # about here
117
 
            if (self._unquote_boundary(boundary_line) !=
 
120
            if (self._unquote_boundary(boundary_line) != 
118
121
                '--' + self._boundary + '\r\n'):
119
122
                raise errors.InvalidHttpResponse(
120
123
                    self._path,
228
231
            limited = self._start + self._size - self._pos
229
232
            if size >= 0:
230
233
                limited = min(limited, size)
231
 
        osutils.pumpfile(self._file, buffer, limited, self._max_read_size)
 
234
        osutils.pumpfile(self._file, buffer, limited, self._max_read_size,
 
235
            report_activity=self._report_activity, direction='read')
232
236
        data = buffer.getvalue()
233
237
 
234
238
        # Update _pos respecting the data effectively read
277
281
        return self._pos
278
282
 
279
283
 
280
 
def handle_response(url, code, msg, data):
 
284
def handle_response(url, code, msg, data, report_activity=None):
281
285
    """Interpret the code & headers and wrap the provided data in a RangeFile.
282
286
 
283
287
    This is a factory method which returns an appropriate RangeFile based on
288
292
    :param msg: An HTTPMessage containing the headers for the response
289
293
    :param data: A file-like object that can be read() to get the
290
294
                 requested data
291
 
    :return: A file-like object that can seek()+read() the
 
295
    :return: A file-like object that can seek()+read() the 
292
296
             ranges indicated by the headers.
293
297
    """
294
 
    rfile = RangeFile(url, data)
 
298
    rfile = RangeFile(url, data, report_activity=report_activity)
295
299
    if code == 200:
296
300
        # A whole file
297
301
        size = msg.getheader('content-length', None)