diff --git a/.gitignore b/.gitignore index 7b0bfac03fcbfc6c19eddbd0d7d80a536c781924..65b5e4b821f6a3be65d643ae85ea619032fd4603 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 0000000000000000000000000000000000000000..ce16b56c9535b88db1df63eb3da706dd8e8f9951 --- /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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyporter b/pyporter/pyporter.py similarity index 97% rename from pyporter rename to pyporter/pyporter.py index 104812f9bb0efdc6fb3a9299639a96f5c00cc1aa..dd70ca72c9f8b024d43d63b5a5d9fad1d6ca61b2 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 b1d101e066d70f270d3dd18dba3f786e44c685b2..830fe650ff0ff571f5cc4c85d35a7232ea8cc3b9 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 0000000000000000000000000000000000000000..044f2ca4a3c0be2f259b03e8392021771e912227 --- /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 0000000000000000000000000000000000000000..cfe4bda48bd0abe4581e21ddde9a60eaf90f9f4f --- /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 0000000000000000000000000000000000000000..75d95fa5114cc004654d655716731823994720c9 --- /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 0000000000000000000000000000000000000000..2503b9fb973d380c5ef54198c067d845d3abc910 --- /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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_get_home.py b/tests/test_get_home.py new file mode 100644 index 0000000000000000000000000000000000000000..5a086b5304836abcc8676e9d81d5b7d2d7bdc7d0 --- /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()