| 149 | ls, le = s, e |
| 150 | |
| 151 | def handleresponse(self, response): |
| 152 | # Check for Content Range |
| 153 | range_start = 0 |
| 154 | range_end = len(response.body) - 1 |
| 155 | if 'content-range' in response.headers: |
| 156 | m = re.search( |
| 157 | 'bytes (\d+)-(\d+)/(\d+|\*)', response.headers['content-range']) |
| 158 | if m: |
| 159 | range_start = int(m.group(1)) |
| 160 | range_end = int(m.group(2)) |
| 161 | if len(response.body) < (range_end - range_start + 1): |
| 162 | range_end = range_start + len(response.body) - 1 |
| 163 | try: |
| 164 | if int(m.group(3)) > self.size: |
| 165 | self.size = int(m.group(3)) |
| 166 | except: |
| 167 | pass |
| 168 | elif 'content-length' in response.headers: |
| 169 | try: |
| 170 | if int(response.headers['content-length']) > self.size: |
| 171 | self.size = int(response.headers['content-length']) |
| 172 | except: |
| 173 | pass |
| 174 | # Update range tracking |
| 175 | self.ranges.append((range_start, range_end)) |
| 176 | # Write part of file |
| 177 | if self.fh is not None: |
| 178 | self.fh.seek(range_start) |
| 179 | self.fh.write(response.body) |
| 180 | return (range_start, range_end) |
| 181 | |
| 182 | def done(self): |
| 183 | self.checkranges() |