From 22a96cb2dee066b5afd509bf38392d4dad6b578e Mon Sep 17 00:00:00 2001 From: Melvyn Sopacua <78786958+melvyn-oviavo@users.noreply.github.com> Date: Thu, 21 Apr 2022 13:45:39 +0200 Subject: [PATCH 1/2] chore(modernise): Modernise setup - Move to setup configuration file - Upgrade various dependencies, including build, dev and test tools --- .bumpversion.cfg | 8 +++ .coveragerc | 5 +- dev-requirements.txt | 6 +- faker_e164/__init__.py | 2 +- faker_e164/providers.py | 125 ++++++++++++++++++++++++---------------- pyproject.toml | 3 + requirements.txt | 4 +- setup.cfg | 38 ++++++++++++ setup.py | 100 -------------------------------- test-requirements.txt | 4 +- tox.ini | 10 ++-- 11 files changed, 141 insertions(+), 164 deletions(-) create mode 100644 .bumpversion.cfg create mode 100644 pyproject.toml create mode 100644 setup.cfg delete mode 100755 setup.py diff --git a/.bumpversion.cfg b/.bumpversion.cfg new file mode 100644 index 0000000..4ba838f --- /dev/null +++ b/.bumpversion.cfg @@ -0,0 +1,8 @@ +[bumpversion] +current_version = 0.1.0 +commit = True +tag = True + +[bumpversion:file:setup.cfg] + +[bumpversion:file:faker_e164/__init__.py] diff --git a/.coveragerc b/.coveragerc index 39fa41c..c59652f 100644 --- a/.coveragerc +++ b/.coveragerc @@ -4,15 +4,14 @@ omit = ./*/tests/* ./.venv/* ./.tox/* -note = Coverage for faker_e164 # parallel = True [report] -fail_under = 50 +fail_under = 80 include = ./faker_e164/*.py show_missing = True skip_covered = True sort = Cover [html] -title = Coverage for faker_e164 \ No newline at end of file +title = Coverage for faker_e164 diff --git a/dev-requirements.txt b/dev-requirements.txt index ec468cf..57fc4db 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,4 +1,6 @@ -r requirements.txt -r test-requirements.txt -twine==1.8.1 -ipython==6.1.0 \ No newline at end of file +ipython==8.2.0 +bump2version==1.0.1 +wheel==0.37.1 +build==0.7.0 diff --git a/faker_e164/__init__.py b/faker_e164/__init__.py index fd87178..8349338 100644 --- a/faker_e164/__init__.py +++ b/faker_e164/__init__.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = '0.1.0' +__version__ = "0.1.0" diff --git a/faker_e164/providers.py b/faker_e164/providers.py index 0d96ff1..f481b9b 100644 --- a/faker_e164/providers.py +++ b/faker_e164/providers.py @@ -3,55 +3,55 @@ "safe_numbers" provided by https://fakenumber.org/, the GB/United Kingdom "safe_numbers" are reported as invalid by the phonenumbers package. """ -import os import logging -import phonenumbers -from phonenumbers import PhoneNumber +import os +import phonenumbers from faker.providers import BaseProvider +from phonenumbers import PhoneNumber logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) logger = logging.getLogger(__name__) safe_numbers = { - 'AU': [ - '+61491570156', - '+61491570157', - '+61491570158', - '+61491570159', - '+61491570110', + "AU": [ + "+61491570156", + "+61491570157", + "+61491570158", + "+61491570159", + "+61491570110", ], - 'US': [ - '+12025550191', - '+12025550188', - '+12025550187', - '+12025550137', - '+12025550105', - '+12025550124', + "US": [ + "+12025550191", + "+12025550188", + "+12025550187", + "+12025550137", + "+12025550105", + "+12025550124", ], - 'GB': [ - '+441632960600', - '+441632960541', - '+441632960702', - '+441632960979', - '+441632960570', - '+441632960864', + "GB": [ + "+441632960600", + "+441632960541", + "+441632960702", + "+441632960979", + "+441632960570", + "+441632960864", + ], + "CA": [ + "+16135550110", + "+16135550120", + "+16135550109", + "+16135550151", + "+16135550136", + "+16135550119", ], - 'CA': [ - '+16135550110', - '+16135550120', - '+16135550109', - '+16135550151', - '+16135550136', - '+16135550119', - ] } class E164Provider(BaseProvider): """ Provider to generate random phone numbers for various countries - + >>> from faker import Faker >>> from faker_e164.providers import E164Provider >>> fake = Faker() @@ -59,20 +59,24 @@ class E164Provider(BaseProvider): >>> phone_number = fake.e164() """ - _e164_numerify_pattern = '%######!!!!!!!!' # https://en.wikipedia.org/wiki/E.164 + _e164_numerify_pattern = "%######!!!!!!!!" # https://en.wikipedia.org/wiki/E.164 def _get_e164_numerify_pattern(self, region_code: str, is_possible=True): if not is_possible: - return '#!!!!!!' + return "#!!!!!!" country_code = phonenumbers.country_code_for_region(region_code) - return str(country_code)+self._e164_numerify_pattern[len(str(country_code)):] + return str(country_code) + self._e164_numerify_pattern[len(str(country_code)) :] def _e164(self, region_code: str, is_valid=True, is_possible=True) -> PhoneNumber: """ Generate an e164 phone number """ - assert not (is_valid and not is_possible), 'is_valid must be False if is_possible is False' - e164_numerify_pattern = self._get_e164_numerify_pattern(region_code, is_possible=is_possible) + assert not ( + is_valid and not is_possible + ), "is_valid must be False if is_possible is False" + e164_numerify_pattern = self._get_e164_numerify_pattern( + region_code, is_possible=is_possible + ) phone_number = self.numerify(e164_numerify_pattern) while not isinstance(phone_number, PhoneNumber): try: @@ -101,17 +105,26 @@ def e164(self, region_code: str = None, valid=True, possible=True) -> str: """Return a random e164 formatted phone number""" if region_code is None: region_code = self.random_element(phonenumbers.SUPPORTED_REGIONS) - return phonenumbers.format_number(self._e164(region_code, is_valid=valid, is_possible=possible), phonenumbers.PhoneNumberFormat.E164) + return phonenumbers.format_number( + self._e164(region_code, is_valid=valid, is_possible=possible), + phonenumbers.PhoneNumberFormat.E164, + ) def safe_e164(self, region_code: str = None) -> str: """Return a "safe" e164 phone number""" if region_code is None: region_code = self.random_element(list(safe_numbers.keys())) - phone_number = phonenumbers.parse(self.random_element(safe_numbers[region_code])) - return phonenumbers.format_number(phone_number, phonenumbers.PhoneNumberFormat.E164) + phone_number = phonenumbers.parse( + self.random_element(safe_numbers[region_code]) + ) + return phonenumbers.format_number( + phone_number, phonenumbers.PhoneNumberFormat.E164 + ) # Deprecated methods - def _e164_phone_number(self, region_code, is_valid=True, is_possible=True): # pragma: no cover + def _e164_phone_number( + self, region_code, is_valid=True, is_possible=True + ): # pragma: no cover """ Generate an e164 phone number @@ -125,11 +138,18 @@ def invalid_e164_phone_number(self, country=None): # pragma: no cover DEPRECATED """ - logger.warning('invalid_e164_phone_number(...) will be deprecated in favor of the .e164(...) method.') - countries = ['AU', 'US', 'GB', 'NZ'] + logger.warning( + "invalid_e164_phone_number(...) will be deprecated in favor of the .e164(...) method." + ) + countries = ["AU", "US", "GB", "NZ"] country = country or self.random_element(countries) - phone_number = self._e164_phone_number(country, is_valid=False, ) - return phonenumbers.format_number(phone_number, phonenumbers.PhoneNumberFormat.E164) + phone_number = self._e164_phone_number( + country, + is_valid=False, + ) + return phonenumbers.format_number( + phone_number, phonenumbers.PhoneNumberFormat.E164 + ) def valid_e164_phone_number(self, country=None): # pragma: no cover """ @@ -137,8 +157,15 @@ def valid_e164_phone_number(self, country=None): # pragma: no cover DEPRECATED """ - logger.warning('valid_e164_phone_number(...) will be deprecated in favor of the .e164(...) method.') - countries = ['AU', 'US', 'GB', 'NZ'] + logger.warning( + "valid_e164_phone_number(...) will be deprecated in favor of the .e164(...) method." + ) + countries = ["AU", "US", "GB", "NZ"] country = country or self.random_element(countries) - phone_number = self._e164_phone_number(country, is_valid=True, ) - return phonenumbers.format_number(phone_number, phonenumbers.PhoneNumberFormat.E164) + phone_number = self._e164_phone_number( + country, + is_valid=True, + ) + return phonenumbers.format_number( + phone_number, phonenumbers.PhoneNumberFormat.E164 + ) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..9787c3b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta" diff --git a/requirements.txt b/requirements.txt index 36fde41..134153b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -Faker==0.7.11 -phonenumberslite==8.4.2 +Faker==13.3.5 +phonenumberslite==8.12.46 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..ca83514 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,38 @@ +[metadata] +name = faker-e164 +package = faker_e164 +description = Faker Provider to generate phone numbers in E164 format. +url = https://github.com/crowdcomms/faker-e164 +author = Adam Jacquier-Parr +author_email = ajparr@crowdcomms.com.au +maintainer = Melvyn Sopacua +maintainer_email = opensource@get-apryl.com +license = Apache-2.0 +license_files = LICENSE +version = 0.1.0 +long_description = file:README.md +long_description_content_type = text/markdown +classifiers = + Development Status :: 3 - Alpha + Environment :: Console + Intended Audience :: Developers + License :: OSI Approved :: Apache Software License + Operating System :: OS Independent + Natural Language :: English + Programming Language :: Python :: 3.3 + Programming Language :: Python :: 3.4 + Programming Language :: Python :: 3.5 + Programming Language :: Python :: 3.6 + Topic :: Software Development :: Libraries :: Python Modules + Topic :: Software Development :: Testing + Topic :: Utilities + +[options] +packages = faker_e164 +include_package_data = yes +install_requires = + phonenumberslite>=8.12 + Faker>=13 +test_requires = + tox + coverage diff --git a/setup.py b/setup.py deleted file mode 100755 index e9e6ee6..0000000 --- a/setup.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import re -import os -import sys -from setuptools import setup - - -name = 'faker-e164' -package = 'faker_e164' -description = """Faker Provider to generate phone numbers in E164 format.""" -url = 'https://github.com/crowdcomms/faker-e164' -author = 'Adam Jacquier-Parr' -author_email = 'ajparr@crowdcomms.com.au' -license = 'Apache' - - -def get_version(package): - """ - Return package version as listed in `__version__` in `init.py`. - """ - init_py = open(os.path.join(package, '__init__.py')).read() - return re.search("^__version__ = ['\"]([^'\"]+)['\"]", - init_py, re.MULTILINE).group(1) - - -def get_packages(package): - """ - Return root package and all sub-packages. - """ - return [dirpath - for dirpath, dirnames, filenames in os.walk(package) - if os.path.exists(os.path.join(dirpath, '__init__.py'))] - - -def get_package_data(package): - """ - Return all files under the root package, that are not in a - package themselves. - """ - walk = [(dirpath.replace(package + os.sep, '', 1), filenames) - for dirpath, dirnames, filenames in os.walk(package) - if not os.path.exists(os.path.join(dirpath, '__init__.py'))] - - filepaths = [] - for base, filenames in walk: - filepaths.extend([os.path.join(base, filename) - for filename in filenames]) - return {package: filepaths} - - -version = get_version(package) - -TWINE_USERNAME = os.environ.get("TWINE_USERNAME") -TWINE_PASSWORD = os.environ.get("TWINE_PASSWORD") - -if sys.argv[-1] == 'publish': - if os.system("pip freeze | grep twine"): - print("twine not installed.\nUse `pip install twine`.\nExiting.") - sys.exit() - os.system("python setup.py sdist") - os.system("twine upload -u '{}' -p '{}' dist/{}-{}.tar.gz".format( - TWINE_USERNAME, TWINE_PASSWORD, name, version)) - print("You probably want to also tag the version now:") - print(" git tag -a {0} -m 'version {0}'".format(version)) - print(" git push --tags") - sys.exit() - - -setup( - name=name, - version=version, - url=url, - license=license, - description=description, - long_description=open('README.md').read(), - author=author, - author_email=author_email, - packages=get_packages(package), - package_data=get_package_data(package), - install_requires=[ - 'phonenumberslite>=8.4.2', - 'Faker>=0.7.7' - ], - classifiers=[ - 'Development Status :: 3 - Alpha', - 'Environment :: Console', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: Apache Software License', - 'Operating System :: OS Independent', - 'Natural Language :: English', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Topic :: Software Development :: Libraries :: Python Modules', - 'Topic :: Software Development :: Testing', - 'Topic :: Utilities' - ] -) \ No newline at end of file diff --git a/test-requirements.txt b/test-requirements.txt index e7c7118..ba8d110 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,3 +1,3 @@ -r requirements.txt -tox==2.7.0 -coverage==4.4.1 \ No newline at end of file +tox==3.25.0 +coverage==6.3.2 diff --git a/tox.ini b/tox.ini index 859df96..d0f3493 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = .py36 +envlist = py37,py38,py39 skipsdist = True skip_missing_interpreters = True @@ -16,7 +16,7 @@ commands = coverage run -m unittest tests.test_providers coverage report coverage html -setenv = - PYTHONPATH = {toxinidir}:{toxinidir} -# LOGLEVEL = DEBUG -passenv = *% \ No newline at end of file +;setenv = +; PYTHONPATH = {toxinidir}:{toxinidir} +; LOGLEVEL = DEBUG +passenv = LOGLEVEL CI TESTING From 2a92392610be54602bd3bfc6320aa45767936503 Mon Sep 17 00:00:00 2001 From: Melvyn Sopacua <78786958+melvyn-oviavo@users.noreply.github.com> Date: Thu, 21 Apr 2022 13:48:41 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Bump=20version:=200.1.0=20=E2=86=92=200.1.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- faker_e164/__init__.py | 2 +- setup.cfg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 4ba838f..6012e42 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.1.0 +current_version = 0.1.1 commit = True tag = True diff --git a/faker_e164/__init__.py b/faker_e164/__init__.py index 8349338..aab269f 100644 --- a/faker_e164/__init__.py +++ b/faker_e164/__init__.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.1.0" +__version__ = "0.1.1" diff --git a/setup.cfg b/setup.cfg index ca83514..0519f41 100644 --- a/setup.cfg +++ b/setup.cfg @@ -9,7 +9,7 @@ maintainer = Melvyn Sopacua maintainer_email = opensource@get-apryl.com license = Apache-2.0 license_files = LICENSE -version = 0.1.0 +version = 0.1.1 long_description = file:README.md long_description_content_type = text/markdown classifiers =