Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-serverfiles for openSUSE:Factory checked in at 2021-09-09 23:07:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-serverfiles (Old) and /work/SRC/openSUSE:Factory/.python-serverfiles.new.1899 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-serverfiles" Thu Sep 9 23:07:39 2021 rev:3 rq:917713 version:0.3.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-serverfiles/python-serverfiles.changes 2019-03-24 15:00:40.463174109 +0100 +++ /work/SRC/openSUSE:Factory/.python-serverfiles.new.1899/python-serverfiles.changes 2021-09-09 23:08:06.528870277 +0200 @@ -1,0 +2,6 @@ +Wed Sep 8 09:04:12 UTC 2021 - pgaj...@suse.com + +- version update to 0.3.1 + * no upstream changelog + +------------------------------------------------------------------- Old: ---- serverfiles-0.3.0.tar.gz New: ---- serverfiles-0.3.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-serverfiles.spec ++++++ --- /var/tmp/diff_new_pack.haTy3b/_old 2021-09-09 23:08:07.072870909 +0200 +++ /var/tmp/diff_new_pack.haTy3b/_new 2021-09-09 23:08:07.076870913 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-serverfiles # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-serverfiles -Version: 0.3.0 +Version: 0.3.1 Release: 0 Summary: A utility to locally store files on a HTTP server License: GPL-3.0-or-later @@ -50,7 +50,7 @@ %python_expand %fdupes %{buildroot}%{$python_sitelib} %check -%python_exec setup.py test +%pyunittest discover -v %files %{python_files} %license LICENSE.txt ++++++ serverfiles-0.3.0.tar.gz -> serverfiles-0.3.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/serverfiles-0.3.0/PKG-INFO new/serverfiles-0.3.1/PKG-INFO --- old/serverfiles-0.3.0/PKG-INFO 2018-11-23 12:35:37.000000000 +0100 +++ new/serverfiles-0.3.1/PKG-INFO 2021-01-22 16:10:02.966226300 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: serverfiles -Version: 0.3.0 +Version: 0.3.1 Summary: An utility that accesses files on a HTTP server and stores them locally for reuse. Home-page: https://github.com/biolab/serverfiles Author: Bioinformatics Laboratory, FRI UL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/serverfiles-0.3.0/serverfiles/__init__.py new/serverfiles-0.3.1/serverfiles/__init__.py --- old/serverfiles-0.3.0/serverfiles/__init__.py 2018-11-23 11:45:46.000000000 +0100 +++ new/serverfiles-0.3.1/serverfiles/__init__.py 2021-01-22 16:08:55.000000000 +0100 @@ -168,22 +168,18 @@ self.password = password """Password for authenticated HTTP queried.""" - self.req = requests.Session() - a = requests.adapters.HTTPAdapter(max_retries=2) - self.req.mount('https://', a) - self.req.mount('http://', a) - # cached info for all files on server # None is not loaded, False if it does not exist self._info = None def _download_server_info(self): if self._info is None: - t = self._open("__INFO__") - if t.status_code == 200: - self._info = {tuple(a): b for a, b in json.loads(t.text)} + response = self._open("__INFO__") + if response.status_code == 200: + self._info = {tuple(a): b for a, b in json.loads(response.text)} else: self._info = False #do not check again + response.close() def listfiles(self, *args, **kwargs): """Return a list of files on the server. Do not list .info files.""" @@ -191,9 +187,10 @@ self._download_server_info() if self._info: return [a for a in self._info.keys() if _is_prefix(args, a)] - text = self._open(*args).text + response = self._open(*args) parser = _FindLinksParser() - parser.feed(text) + parser.feed(response.text) + response.close() links = parser.links files = [args + (f,) for f in links if not f.endswith("/") and not f.endswith(".info")] if recursive: @@ -213,35 +210,35 @@ target = kwargs.get("target", None) _create_path(os.path.dirname(target)) - req = self._open(*path) - if req.status_code == 404: + response = self._open(*path) + if response.status_code == 404: raise FileNotFoundError - elif req.status_code != 200: + elif response.status_code != 200: raise IOError - size = req.headers.get('content-length') + size = response.headers.get('content-length') if size: size = int(size) - f = tempfile.TemporaryFile() - - chunksize = 1024*8 - lastchunkreport= 0.0001 - - readb = 0 + with tempfile.TemporaryFile() as f: + chunksize = 1024*8 + lastchunkreport= 0.0001 + + readb = 0 + + for buf in response.iter_content(chunksize): + readb += len(buf) + while size and float(readb) / size > lastchunkreport+0.01: + lastchunkreport += 0.01 + if callback: + callback() + f.write(buf) + + f.seek(0) + with open(target, "wb") as fo: + shutil.copyfileobj(f, fo) - for buf in req.iter_content(chunksize): - readb += len(buf) - while size and float(readb) / size > lastchunkreport+0.01: - lastchunkreport += 0.01 - if callback: - callback() - f.write(buf) - - f.seek(0) - - with open(target, "wb") as fo: - shutil.copyfileobj(f, fo) + response.close() if callback and not size: #size was unknown, call callbacks for i in range(99): @@ -280,20 +277,29 @@ return self._info.get(path, {}) path = list(path) path[-1] += ".info" - t = self._open(*path) - if t.status_code == 200: - return json.loads(t.text) - else: - return {} + response = self._open(*path) + + _info = {} + if response.status_code == 200: + _info = json.loads(response.text) - def _server_request(self, root, *path): + response.close() + return _info + + def _server_request(self, root, *path) -> requests.Response: auth = None if self.username and self.password: auth = (self.username, self.password) - return self.req.get(root + "/".join(path), auth=auth, - timeout=TIMEOUT, stream=True) - def _open(self, *args): + adapter = requests.adapters.HTTPAdapter(max_retries=3) + session = requests.Session() + session.mount('http://', adapter) + session.mount('https://', adapter) + + return session.get(root + "/".join(path), auth=auth, + timeout=TIMEOUT, stream=True) + + def _open(self, *args) -> requests.Response: return self._server_request(self.server, *args) @@ -373,22 +379,26 @@ _save_file_info(target + '.info', info) - if extract: - if info.get("compression") in ["tar.gz", "tar.bz2"]: - f = tarfile.open(target + ".tmp") + if not extract: + return + + if info.get("compression") in ["tar.gz", "tar.bz2"]: + with tarfile.open(target + ".tmp") as temp_fp: try: os.mkdir(target) except OSError: pass - f.extractall(target) - elif info.get("compression") == "gz": - f = gzip.open(target + ".tmp") - shutil.copyfileobj(f, open(target, "wb")) - elif info.get("compression") == "bz2": - f = bz2.BZ2File(target + ".tmp", "r") - shutil.copyfileobj(f, open(target, "wb")) - f.close() - os.remove(target + ".tmp") + temp_fp.extractall(target) + elif info.get("compression") == "gz": + with gzip.open(target + ".tmp") as temp_fp: + with open(target, "wb") as fp: + shutil.copyfileobj(temp_fp, fp) + elif info.get("compression") == "bz2": + with bz2.BZ2File(target + ".tmp", "r") as temp_fp: + with open(target, "wb") as fp: + shutil.copyfileobj(temp_fp, fp) + + os.remove(target + ".tmp") @_locked def localpath_download(self, *path, **kwargs): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/serverfiles-0.3.0/serverfiles.egg-info/PKG-INFO new/serverfiles-0.3.1/serverfiles.egg-info/PKG-INFO --- old/serverfiles-0.3.0/serverfiles.egg-info/PKG-INFO 2018-11-23 12:35:37.000000000 +0100 +++ new/serverfiles-0.3.1/serverfiles.egg-info/PKG-INFO 2021-01-22 16:10:02.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: serverfiles -Version: 0.3.0 +Version: 0.3.1 Summary: An utility that accesses files on a HTTP server and stores them locally for reuse. Home-page: https://github.com/biolab/serverfiles Author: Bioinformatics Laboratory, FRI UL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/serverfiles-0.3.0/setup.py new/serverfiles-0.3.1/setup.py --- old/serverfiles-0.3.0/setup.py 2018-11-23 12:31:34.000000000 +0100 +++ new/serverfiles-0.3.1/setup.py 2021-01-22 16:09:06.000000000 +0100 @@ -13,7 +13,7 @@ install_requires=[ 'requests>=2.11.1', ], - version='0.3.0', + version='0.3.1', zip_safe=False, url="https://github.com/biolab/serverfiles", test_suite="tests.suite"