MCPcopy
hub / github.com/pyload/pyload / getHandle

Method getHandle

module/network/HTTPChunk.py:164–207  ·  view source on GitHub ↗

returns a Curl handle ready to use for perform/multiperform

(self)

Source from the content-addressed store, hash-verified

162 return self.p.cj
163
164 def getHandle(self):
165 """ returns a Curl handle ready to use for perform/multiperform """
166
167 self.setRequestContext(self.p.url, self.p.get, self.p.post, self.p.referer, self.p.cj)
168 self.c.setopt(pycurl.WRITEFUNCTION, self.writeBody)
169 self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader)
170
171 # request all bytes, since some servers in russia seems to have a defect arihmetic unit
172
173 fs_name = fs_encode(self.p.info.getChunkName(self.id))
174 if self.resume:
175 self.fp = open(fs_name, "ab")
176 self.arrived = self.fp.tell()
177 if not self.arrived:
178 self.arrived = os.stat(fs_name).st_size
179
180 if self.range:
181 # do nothing if chunk already finished
182 if self.arrived + self.range[0] >= self.range[1]: return None
183
184 if self.id == len(self.p.info.chunks) - 1: # as last chunk dont set end range, so we get everything
185 range = "%i-" % (self.arrived + self.range[0])
186 else:
187 range = "%i-%i" % (self.arrived + self.range[0], min(self.range[1] + 1, self.p.size - 1))
188
189 self.log.debug("Chunked resume with range %s" % range)
190 self.c.setopt(pycurl.RANGE, range)
191 else:
192 self.log.debug("Resume File from %i" % self.arrived)
193 self.c.setopt(pycurl.RESUME_FROM, self.arrived)
194
195 else:
196 if self.range:
197 if self.id == len(self.p.info.chunks) - 1: # see above
198 range = "%i-" % self.range[0]
199 else:
200 range = "%i-%i" % (self.range[0], min(self.range[1] + 1, self.p.size - 1))
201
202 self.log.debug("Chunked with range %s" % range)
203 self.c.setopt(pycurl.RANGE, range)
204
205 self.fp = open(fs_name, "wb")
206
207 return self.c
208
209 def writeHeader(self, buf):
210 self.header += buf

Callers 1

_downloadMethod · 0.95

Calls 3

fs_encodeFunction · 0.90
setRequestContextMethod · 0.80
getChunkNameMethod · 0.80

Tested by

no test coverage detected