From ea5d2748ef983f7979b2dad63098615c271a1403 Mon Sep 17 00:00:00 2001 From: lcrpkking Date: Tue, 17 Jan 2023 12:36:06 +0000 Subject: [PATCH] add some test and fix Homepage nonexisted exception Signed-off-by: lcrpkking --- .gitignore | 1 + Makefile | 12 ++++ pyporter/__init__.py | 0 pyporter => pyporter/pyporter.py | 25 ++++++-- setup.py | 7 ++- tests/TestNoHomepageNone.json | 1 + tests/TestNoHomepageUseHomePage.json | 1 + tests/TestNoHomepageUsePackageUrl.json | 1 + tests/TestNoHomepageUseProjectUrl.json | 1 + tests/__init__.py | 0 tests/test_get_home.py | 84 ++++++++++++++++++++++++++ 11 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 Makefile create mode 100644 pyporter/__init__.py rename pyporter => pyporter/pyporter.py (97%) create mode 100644 tests/TestNoHomepageNone.json create mode 100644 tests/TestNoHomepageUseHomePage.json create mode 100644 tests/TestNoHomepageUsePackageUrl.json create mode 100644 tests/TestNoHomepageUseProjectUrl.json create mode 100644 tests/__init__.py create mode 100644 tests/test_get_home.py diff --git a/.gitignore b/.gitignore index 7b0bfac..65b5e4b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ pyporter.egg-info .tox .venv *.egg +*.pyc *.swp *~ .cache diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ce16b56 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +.PHONY: check test build unittests + +check: + $(MAKE) unittests + +test: check + +unittests: + python -m unittest discover tests + +build: + python -m build -w diff --git a/pyporter/__init__.py b/pyporter/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pyporter b/pyporter/pyporter.py similarity index 97% rename from pyporter rename to pyporter/pyporter.py index 104812f..dd70ca7 100755 --- a/pyporter +++ b/pyporter/pyporter.py @@ -33,8 +33,6 @@ from pathlib import Path import hashlib # python3-wget is not default available on openEuler yet. -# import wget - json_file_template = '{pkg_name}.json' name_tag_template = 'Name:\t\t{pkg_name}' @@ -95,7 +93,20 @@ class PyPorter: return self.__json["info"]["summary"] def get_home(self): - return self.__json["info"]["project_urls"]["Homepage"] + # try to get homepage from project_urls + # or else try with project_url, home_page, package_url + try: + home = self.__json["info"]["project_urls"]["Homepage"] + except: + home = ( + self.__json["info"]["project_url"] + or self.__json["info"]["home_page"] + or self.__json["info"]["package_url"] + ) + if home is None: + print("Cant find home page url") + sys.exit(1) + return home def get_license(self): """ @@ -519,7 +530,7 @@ def build_spec(porter, output): return build_req_list -def do_args(root): +def do_args(dft_root_path): parser = argparse.ArgumentParser() parser.add_argument("-s", "--spec", help="Create spec file", action="store_true") @@ -545,8 +556,7 @@ def porter_creator(t_str, arch, pkg): return None -if __name__ == "__main__": - +def main(): dft_root_path = os.path.join(str(Path.home())) parser = do_args(dft_root_path) @@ -579,3 +589,6 @@ if __name__ == "__main__": download_source(porter, args.path) elif args.json: porter.store_json(args.path) + +if __name__ == "__main__": + main() diff --git a/setup.py b/setup.py index b1d101e..830fe65 100644 --- a/setup.py +++ b/setup.py @@ -36,5 +36,10 @@ setuptools.setup( 'Topic :: Utilities', ], long_description=open('README.md').read(), - scripts=['pyporter'], +# scripts=['pyporter'], + entry_points={ + 'console_scripts': [ + 'pyporter = pyporter.pyporter:main', + ] + } ) diff --git a/tests/TestNoHomepageNone.json b/tests/TestNoHomepageNone.json new file mode 100644 index 0000000..044f2ca --- /dev/null +++ b/tests/TestNoHomepageNone.json @@ -0,0 +1 @@ +{"info":{"author":"Roland Hedberg","author_email":"roland@catalogix.se","bugtrack_url":null,"classifiers":["Development Status :: 4 - Beta","License :: OSI Approved :: Apache Software License","Programming Language :: Python :: 2.7","Programming Language :: Python :: 3.5","Topic :: Software Development :: Libraries :: Python Modules"],"description":"","description_content_type":"","docs_url":null,"download_url":"","downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"home_page": null,"keywords":"","license":"Apache 2.0","maintainer":"","maintainer_email":"","name":"pyjwkest","package_url":null,"platform":"","project_url":null,"project_urls":null,"release_url":"https://pypi.org/project/pyjwkest/1.4.2/","requires_dist":null,"requires_python":"","summary":"Python implementation of JWT, JWE, JWS and JWK","version":"1.4.2","yanked":false,"yanked_reason":null},"last_serial":5455412,"releases":{"1.4.2":[{"comment_text":"","digests":{"blake2b_256":"531713eb3b49999171e265a8eff6415a39006c63af2ff8427d88639541605f30","md5":"e5da7de4c94266b99b4c79f635d73991","sha256":"35ace8f52d87dd4d5b108e615882d04f40eb3151cc6e3b370ed65409814bcc3d"},"downloads":-1,"filename":"pyjwkest-0.3.0.tar.gz","has_sig":false,"md5_digest":"e5da7de4c94266b99b4c79f635d73991","packagetype":"sdist","python_version":"source","requires_python":null,"size":35970,"upload_time":"2014-03-07T08:44:35","upload_time_iso_8601":"2014-03-07T08:44:35.936721Z","url":"https://files.pythonhosted.org/packages/53/17/13eb3b49999171e265a8eff6415a39006c63af2ff8427d88639541605f30/pyjwkest-0.3.0.tar.gz","yanked":false,"yanked_reason":null}]}} diff --git a/tests/TestNoHomepageUseHomePage.json b/tests/TestNoHomepageUseHomePage.json new file mode 100644 index 0000000..cfe4bda --- /dev/null +++ b/tests/TestNoHomepageUseHomePage.json @@ -0,0 +1 @@ +{"info":{"author":"Roland Hedberg","author_email":"roland@catalogix.se","bugtrack_url":null,"classifiers":["Development Status :: 4 - Beta","License :: OSI Approved :: Apache Software License","Programming Language :: Python :: 2.7","Programming Language :: Python :: 3.5","Topic :: Software Development :: Libraries :: Python Modules"],"description":"","description_content_type":"","docs_url":null,"download_url":"","downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"home_page":"test_home_page","keywords":"","license":"Apache 2.0","maintainer":"","maintainer_email":"","name":"pyjwkest","package_url":"test_package/","platform":"","project_url":null,"project_urls":null,"release_url":"https://pypi.org/project/pyjwkest/1.4.2/","requires_dist":null,"requires_python":"","summary":"Python implementation of JWT, JWE, JWS and JWK","version":"1.4.2","yanked":false,"yanked_reason":null},"last_serial":5455412,"releases":{"1.4.2":[{"comment_text":"","digests":{"blake2b_256":"531713eb3b49999171e265a8eff6415a39006c63af2ff8427d88639541605f30","md5":"e5da7de4c94266b99b4c79f635d73991","sha256":"35ace8f52d87dd4d5b108e615882d04f40eb3151cc6e3b370ed65409814bcc3d"},"downloads":-1,"filename":"pyjwkest-0.3.0.tar.gz","has_sig":false,"md5_digest":"e5da7de4c94266b99b4c79f635d73991","packagetype":"sdist","python_version":"source","requires_python":null,"size":35970,"upload_time":"2014-03-07T08:44:35","upload_time_iso_8601":"2014-03-07T08:44:35.936721Z","url":"https://files.pythonhosted.org/packages/53/17/13eb3b49999171e265a8eff6415a39006c63af2ff8427d88639541605f30/pyjwkest-0.3.0.tar.gz","yanked":false,"yanked_reason":null}]}} diff --git a/tests/TestNoHomepageUsePackageUrl.json b/tests/TestNoHomepageUsePackageUrl.json new file mode 100644 index 0000000..75d95fa --- /dev/null +++ b/tests/TestNoHomepageUsePackageUrl.json @@ -0,0 +1 @@ +{"info":{"author":"Roland Hedberg","author_email":"roland@catalogix.se","bugtrack_url":null,"classifiers":["Development Status :: 4 - Beta","License :: OSI Approved :: Apache Software License","Programming Language :: Python :: 2.7","Programming Language :: Python :: 3.5","Topic :: Software Development :: Libraries :: Python Modules"],"description":"","description_content_type":"","docs_url":null,"download_url":"","downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"home_page":"","keywords":"","license":"Apache 2.0","maintainer":"","maintainer_email":"","name":"pyjwkest","package_url":"test_package_url","platform":"","project_url":null,"project_urls":null,"release_url":"https://pypi.org/project/pyjwkest/1.4.2/","requires_dist":null,"requires_python":"","summary":"Python implementation of JWT, JWE, JWS and JWK","version":"1.4.2","yanked":false,"yanked_reason":null},"last_serial":5455412,"releases":{"1.4.2":[{"comment_text":"","digests":{"blake2b_256":"531713eb3b49999171e265a8eff6415a39006c63af2ff8427d88639541605f30","md5":"e5da7de4c94266b99b4c79f635d73991","sha256":"35ace8f52d87dd4d5b108e615882d04f40eb3151cc6e3b370ed65409814bcc3d"},"downloads":-1,"filename":"pyjwkest-0.3.0.tar.gz","has_sig":false,"md5_digest":"e5da7de4c94266b99b4c79f635d73991","packagetype":"sdist","python_version":"source","requires_python":null,"size":35970,"upload_time":"2014-03-07T08:44:35","upload_time_iso_8601":"2014-03-07T08:44:35.936721Z","url":"https://files.pythonhosted.org/packages/53/17/13eb3b49999171e265a8eff6415a39006c63af2ff8427d88639541605f30/pyjwkest-0.3.0.tar.gz","yanked":false,"yanked_reason":null}]}} diff --git a/tests/TestNoHomepageUseProjectUrl.json b/tests/TestNoHomepageUseProjectUrl.json new file mode 100644 index 0000000..2503b9f --- /dev/null +++ b/tests/TestNoHomepageUseProjectUrl.json @@ -0,0 +1 @@ +{"info":{"author":"Roland Hedberg","author_email":"roland@catalogix.se","bugtrack_url":null,"classifiers":["Development Status :: 4 - Beta","License :: OSI Approved :: Apache Software License","Programming Language :: Python :: 2.7","Programming Language :: Python :: 3.5","Topic :: Software Development :: Libraries :: Python Modules"],"description":"","description_content_type":"","docs_url":null,"download_url":"","downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"home_page":"","keywords":"","license":"Apache 2.0","maintainer":"","maintainer_email":"","name":"pyjwkest","package_url":"https://pypi.org/project/pyjwkest/","platform":"","project_url":"test_project_url","project_urls":null,"release_url":"https://pypi.org/project/pyjwkest/1.4.2/","requires_dist":null,"requires_python":"","summary":"Python implementation of JWT, JWE, JWS and JWK","version":"1.4.2","yanked":false,"yanked_reason":null},"last_serial":5455412,"releases":{"1.4.2":[{"comment_text":"","digests":{"blake2b_256":"531713eb3b49999171e265a8eff6415a39006c63af2ff8427d88639541605f30","md5":"e5da7de4c94266b99b4c79f635d73991","sha256":"35ace8f52d87dd4d5b108e615882d04f40eb3151cc6e3b370ed65409814bcc3d"},"downloads":-1,"filename":"pyjwkest-0.3.0.tar.gz","has_sig":false,"md5_digest":"e5da7de4c94266b99b4c79f635d73991","packagetype":"sdist","python_version":"source","requires_python":null,"size":35970,"upload_time":"2014-03-07T08:44:35","upload_time_iso_8601":"2014-03-07T08:44:35.936721Z","url":"https://files.pythonhosted.org/packages/53/17/13eb3b49999171e265a8eff6415a39006c63af2ff8427d88639541605f30/pyjwkest-0.3.0.tar.gz","yanked":false,"yanked_reason":null}]}} diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_get_home.py b/tests/test_get_home.py new file mode 100644 index 0000000..5a086b5 --- /dev/null +++ b/tests/test_get_home.py @@ -0,0 +1,84 @@ +import unittest +import io +import os +import urllib.request +from unittest.mock import patch, MagicMock +from pyporter.pyporter import porter_creator + +class TestNoHomepageNone(unittest.TestCase): + def setUp(self): + self.f = open(os.path.join('tests', __class__.__name__+'.json')) + self.data = self.f.read().encode() + + @patch('urllib.request.urlopen') + def test_no_homepage_in_project_urls(self, m): + cm = MagicMock() + cm.read.return_value = self.data + cm.__enter__.return_value = cm + m.return_value = cm + + p = porter_creator('python', None, None) + self.assertRaises(SystemExit, p.get_home) + + def tearDown(self): + self.f.close() + + +class TestNoHomepageUseProjectUrl(unittest.TestCase): + def setUp(self): + self.f = open(os.path.join('tests', __class__.__name__+'.json')) + self.data = self.f.read().encode() + + @patch('urllib.request.urlopen') + def test_no_homepage_in_project_urls(self, m): + cm = MagicMock() + cm.read.return_value = self.data + cm.__enter__.return_value = cm + m.return_value = cm + + p = porter_creator('python', None, None) + self.assertEqual("test_project_url", p.get_home()) + + def tearDown(self): + self.f.close() + + +class TestNoHomepageUsePackageUrl(unittest.TestCase): + def setUp(self): + self.f = open(os.path.join('tests', __class__.__name__+'.json')) + self.data = self.f.read().encode() + + @patch('urllib.request.urlopen') + def test_no_homepage_in_project_urls(self, m): + cm = MagicMock() + cm.read.return_value = self.data + cm.__enter__.return_value = cm + m.return_value = cm + + p = porter_creator('python', None, None) + self.assertEqual("test_package_url", p.get_home()) + + def tearDown(self): + self.f.close() + + +class TestNoHomepageUseHomePage(unittest.TestCase): + def setUp(self): + self.f = open(os.path.join('tests', __class__.__name__+'.json')) + self.data = self.f.read().encode() + + @patch('urllib.request.urlopen') + def test_no_homepage_in_project_urls(self, m): + cm = MagicMock() + cm.read.return_value = self.data + cm.__enter__.return_value = cm + m.return_value = cm + + p = porter_creator('python', None, None) + self.assertEqual("test_home_page", p.get_home()) + + def tearDown(self): + self.f.close() + +if __name__ == '__main__': + unittest.main() -- Gitee