Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-fake-useragent for openSUSE:Factory checked in at 2022-12-06 14:24:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-fake-useragent (Old) and /work/SRC/openSUSE:Factory/.python-fake-useragent.new.1835 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-fake-useragent" Tue Dec 6 14:24:17 2022 rev:5 rq:1040545 version:1.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-fake-useragent/python-fake-useragent.changes 2022-11-21 16:19:39.679875016 +0100 +++ /work/SRC/openSUSE:Factory/.python-fake-useragent.new.1835/python-fake-useragent.changes 2022-12-06 14:24:31.762217136 +0100 @@ -1,0 +2,9 @@ +Tue Dec 6 03:26:51 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com> + +- Update to v1.1.1 + * Remove whitespaces from user agent strings, this is a patch release + +- Update to v1.1.0 + * Add pkg_resource as fallback mechanism in trying to retrieve the local JSON data file + +------------------------------------------------------------------- Old: ---- fake-useragent-1.0.1.tar.gz New: ---- fake-useragent-1.1.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-fake-useragent.spec ++++++ --- /var/tmp/diff_new_pack.gntt6U/_old 2022-12-06 14:24:32.278221535 +0100 +++ /var/tmp/diff_new_pack.gntt6U/_new 2022-12-06 14:24:32.282221569 +0100 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-fake-useragent -Version: 1.0.1 +Version: 1.1.0 Release: 0 License: Apache-2.0 Summary: Useragent faker package for Python ++++++ fake-useragent-1.0.1.tar.gz -> fake-useragent-1.1.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fake-useragent-1.0.1/README.md new/fake-useragent-1.1.0/README.md --- old/fake-useragent-1.0.1/README.md 2022-11-19 22:05:49.000000000 +0100 +++ new/fake-useragent-1.1.0/README.md 2022-11-26 21:09:40.000000000 +0100 @@ -170,6 +170,17 @@ ### Changelog +- 1.1.0 November 26, 2022 + + - Add `pkg_resource` as fallback mechanism in trying to retrieve the local JSON data file + +- 1.0.1 November 10, 2022 + + - Add `importlib-metadata` & `importlib-resources` as dependencies + - Check on specific Python version regarding the importlib resources (python v3.10 or higher) in order to have `files()` working + - `importlib_metadata` should now also work on Python version before 3.8 + - Remove obsolete `MANIFEST.in` file + - 1.0.0 November 17, 2022 - Make the JSON Lines data file part of the Python package, data is retrieved locally diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fake-useragent-1.0.1/pyproject.toml new/fake-useragent-1.1.0/pyproject.toml --- old/fake-useragent-1.0.1/pyproject.toml 2022-11-19 22:05:49.000000000 +0100 +++ new/fake-useragent-1.1.0/pyproject.toml 2022-11-26 21:09:40.000000000 +0100 @@ -4,7 +4,7 @@ [project] name = "fake-useragent" -version = "1.0.1" +version = "1.1.0" authors = [ {name = "Victor Kovtun", email = "hellysm...@gmail.com"}, {name = "Melroy van den Berg", email = "mel...@melroy.org"}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fake-useragent-1.0.1/src/fake_useragent/utils.py new/fake-useragent-1.1.0/src/fake_useragent/utils.py --- old/fake-useragent-1.0.1/src/fake_useragent/utils.py 2022-11-19 22:05:49.000000000 +0100 +++ new/fake-useragent-1.1.0/src/fake_useragent/utils.py 2022-11-26 21:09:40.000000000 +0100 @@ -20,6 +20,12 @@ from urllib import request from fake_useragent.log import logger +# Fallback method for retrieving data file +try: + from pkg_resources import resource_filename +except: + pass + str_types = (str,) text = str urlopen_args = inspect.getfullargspec(request.urlopen).kwonlyargs @@ -123,16 +129,31 @@ ) for line in json_lines.splitlines(): data.update(json.loads(line)) + fetch_online = False + ret = data except Exception as exc: - # Empty data again + # Empty data just to be sure data = {} logger.warning( - "Could not find local data/json file or could not parse the contents. Fallback to external resource.", + "Unable to find local data/json file or could not parse the contents using importlib-resources. Try pkg-resource next.", exc_info=exc, ) - else: - fetch_online = False - ret = data + try: + with open( + resource_filename("fake_useragent", "data/browsers.json") + ) as file: + json_lines = file.read() + for line in json_lines.splitlines(): + data.update(json.loads(line)) + fetch_online = False + ret = data + except Exception as exc2: + # Empty data just to be sure + data = {} + logger.warning( + "Could not find local data/json file or could not parse the contents using pkg-resource. Fallback to external resource.", + exc_info=exc2, + ) # Fallback behaviour or use_external_data parameter is explicitly set to True if fetch_online: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fake-useragent-1.0.1/tests/test_utils.py new/fake-useragent-1.1.0/tests/test_utils.py --- old/fake-useragent-1.0.1/tests/test_utils.py 2022-11-19 22:05:49.000000000 +0100 +++ new/fake-useragent-1.1.0/tests/test_utils.py 2022-11-26 21:09:40.000000000 +0100 @@ -1,9 +1,15 @@ -import io -import json +import sys import os import time +import io +import json from functools import partial +if sys.version_info >= (3, 10): + import importlib.resources as ilr +else: + import importlib_resources as ilr + import urllib from urllib.error import HTTPError import unittest @@ -169,6 +175,35 @@ self.assertTrue(data["chrome"]) self.assertTrue(data["edge"]) + self.assertTrue(data["firefox"]) + self.assertTrue(data["opera"]) + self.assertTrue(data["safari"]) + self.assertTrue(data["internet explorer"]) + self.assertIsInstance(data["chrome"], list) + self.assertIsInstance(data["edge"], list) + self.assertIsInstance(data["firefox"], list) + self.assertIsInstance(data["opera"], list) + self.assertIsInstance(data["safari"], list) + self.assertIsInstance(data["internet explorer"], list) + + def test_utils_load_use_local_file_pkg_resource_fallback(self): + browsers = [ + "chrome", + "edge", + "internet explorer", + "firefox", + "safari", + "opera", + ] + # By default use_local_file is also True during production + # We will not allow the default importlib resources to be used, by triggering an Exception + with patch.object(ilr, "files") as mocked_importlib_resources_files: + # This exception should trigger the alternative path, trying to use pkg_resource as fallback + mocked_importlib_resources_files.side_effect = Exception("Error") + data = utils.load(browsers, use_local_file=True) + + self.assertTrue(data["chrome"]) + self.assertTrue(data["edge"]) self.assertTrue(data["firefox"]) self.assertTrue(data["opera"]) self.assertTrue(data["safari"])