Skip to content

Commit 6336082

Browse files
authored
Metalink: optimize size calculation (#582)
* optimize size calculation in metalink * added metalink size tests
1 parent 10be4ae commit 6336082

3 files changed

Lines changed: 25 additions & 3 deletions

File tree

pywps/inout/basic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ def post_data(self, value):
498498
@property
499499
def size(self):
500500
"""Get content-length of URL without download"""
501-
req = requests.head(self.url)
501+
req = self._openurl(self.url)
502502
if req.ok:
503503
size = int(req.headers.get('content-length', '0'))
504504
else:

pywps/inout/outputs.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ def __init__(self, identity=None, description=None, fmt=None):
320320
The metalink document is created by a `MetaLink` instance, which
321321
holds a number of `MetaFile` instances.
322322
"""
323+
self._size = None
323324
self._output = ComplexOutput(
324325
identifier=identity or '',
325326
title=description or '',
@@ -360,8 +361,15 @@ def name(self):
360361

361362
@property
362363
def size(self):
363-
"""Length of the linked content in octets."""
364-
return self._output.size
364+
"""Size of the linked content in bytes."""
365+
if self._size is None:
366+
self._size = self._output.size
367+
return self._size
368+
369+
@size.setter
370+
def size(self, value):
371+
"""Set size to avoid size calculation."""
372+
self._size = int(value)
365373

366374
@property
367375
def urls(self):

tests/test_inout.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,20 @@ def test_size(self):
832832
ml4.append(self.metafile_with_url())
833833
assert 'size' in ml4.xml
834834

835+
def test_no_size(self):
836+
ml4 = self.metalink4()
837+
mf = self.metafile_with_url()
838+
mf.size = 0
839+
ml4.files = [mf]
840+
assert 'size' not in ml4.xml
841+
842+
def test_set_size(self):
843+
ml4 = self.metalink4()
844+
mf = self.metafile_with_url()
845+
mf.size = 100
846+
ml4.files = [mf]
847+
assert '<size>100</size>' in ml4.xml
848+
835849

836850
def load_tests(loader=None, tests=None, pattern=None):
837851
if not loader:

0 commit comments

Comments
 (0)