Hello community, here is the log from the commit of package python-Faker for openSUSE:Factory checked in at 2019-05-27 08:35:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-Faker (Old) and /work/SRC/openSUSE:Factory/.python-Faker.new.5148 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Faker" Mon May 27 08:35:57 2019 rev:11 rq:704961 version:1.0.7 Changes: -------- --- /work/SRC/openSUSE:Factory/python-Faker/python-Faker.changes 2019-05-03 22:35:14.609082251 +0200 +++ /work/SRC/openSUSE:Factory/.python-Faker.new.5148/python-Faker.changes 2019-05-27 08:36:01.619126137 +0200 @@ -1,0 +2,14 @@ +Thu May 23 08:28:50 UTC 2019 - [email protected] + +- version update to 1.0.7 + * Remove dead url from ``image_placeholder_services``. Thanks @Monstrofil. + * Fix missing ``first_names`` in Romanian person provider. Thanks @xlotlu. + * Add Catalan, adds doi/nie/nif/cif to Spain ssn. Thanks @kingbuzzman. + * Add ``texts`` to generate list of texts. Thanks @pishchalnikov. + * Add provider for ``pl_PL`` automotive and Polish pesel number. Thanks @adwojak. + * Corrected behavior for ``pyfloat``. Thanks @ariksu. + * Add missing commas to company/nl_NL provider. Thanks @francoisfreitag. + * Add bounds to ``pyint``. Thanks @francoisfreitag. + * Accept step argument in ``random_int()``. Thanks @francoisfreitag. + +------------------------------------------------------------------- Old: ---- Faker-1.0.5.tar.gz New: ---- Faker-1.0.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-Faker.spec ++++++ --- /var/tmp/diff_new_pack.r300SD/_old 2019-05-27 08:36:02.443125816 +0200 +++ /var/tmp/diff_new_pack.r300SD/_new 2019-05-27 08:36:02.443125816 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define oldpython python Name: python-Faker -Version: 1.0.5 +Version: 1.0.7 Release: 0 Summary: Python package that generates fake data License: MIT ++++++ Faker-1.0.5.tar.gz -> Faker-1.0.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/CHANGELOG.rst new/Faker-1.0.7/CHANGELOG.rst --- old/Faker-1.0.5/CHANGELOG.rst 2019-04-12 17:10:07.000000000 +0200 +++ new/Faker-1.0.7/CHANGELOG.rst 2019-05-14 17:55:14.000000000 +0200 @@ -1,6 +1,23 @@ Changelog ========= +`1.0.7 - 14-May-2019 <https://github.com/joke2k/faker/compare/v1.0.6...v1.0.7>`__ +--------------------------------------------------------------------------------- + +* Remove dead url from ``image_placeholder_services``. Thanks @Monstrofil. +* Fix missing ``first_names`` in Romanian person provider. Thanks @xlotlu. +* Add Catalan, adds doi/nie/nif/cif to Spain ssn. Thanks @kingbuzzman. +* Add ``texts`` to generate list of texts. Thanks @pishchalnikov. +* Add provider for ``pl_PL`` automotive and Polish pesel number. Thanks @adwojak. +* Corrected behavior for ``pyfloat``. Thanks @ariksu. + +`1.0.6 - 26-April-2019 <https://github.com/joke2k/faker/compare/v1.0.5...v1.0.6>`__ +----------------------------------------------------------------------------------- + +* Add missing commas to company/nl_NL provider. Thanks @francoisfreitag. +* Add bounds to ``pyint``. Thanks @francoisfreitag. +* Accept step argument in ``random_int()``. Thanks @francoisfreitag. + `1.0.5 - 12-April-2019 <https://github.com/joke2k/faker/compare/v1.0.4...v1.0.5>`__ ----------------------------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/Faker.egg-info/PKG-INFO new/Faker-1.0.7/Faker.egg-info/PKG-INFO --- old/Faker-1.0.5/Faker.egg-info/PKG-INFO 2019-04-12 17:10:32.000000000 +0200 +++ new/Faker-1.0.7/Faker.egg-info/PKG-INFO 2019-05-14 18:11:36.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: Faker -Version: 1.0.5 +Version: 1.0.7 Summary: Faker is a Python package that generates fake data for you. Home-page: https://github.com/joke2k/faker Author: joke2k @@ -98,12 +98,12 @@ from faker import Faker from faker.providers import internet - + fake = Faker() fake.add_provider(internet) - + print(fake.ipv4_private()) - + Check the `extended docs`_ for a list of `bundled providers`_ and a list of `community providers`_. @@ -364,23 +364,11 @@ Tests ----- - Installing dependencies: - - .. code:: bash - - $ pip install -e . - Run tests: .. code:: bash - $ python setup.py test - - or - - .. code:: bash - - $ python -m unittest -v tests + $ tox Write documentation for providers: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/Faker.egg-info/SOURCES.txt new/Faker-1.0.7/Faker.egg-info/SOURCES.txt --- old/Faker-1.0.5/Faker.egg-info/SOURCES.txt 2019-04-12 17:10:32.000000000 +0200 +++ new/Faker-1.0.7/Faker.egg-info/SOURCES.txt 2019-05-14 18:11:36.000000000 +0200 @@ -77,6 +77,7 @@ faker/providers/automotive/en_US/__init__.py faker/providers/automotive/hu_HU/__init__.py faker/providers/automotive/id_ID/__init__.py +faker/providers/automotive/pl_PL/__init__.py faker/providers/automotive/pt_BR/__init__.py faker/providers/automotive/ru_RU/__init__.py faker/providers/automotive/sv_SE/__init__.py @@ -238,6 +239,7 @@ faker/providers/person/en_NZ/__init__.py faker/providers/person/en_TH/__init__.py faker/providers/person/en_US/__init__.py +faker/providers/person/es_CA/__init__.py faker/providers/person/es_ES/__init__.py faker/providers/person/es_MX/__init__.py faker/providers/person/et_EE/__init__.py @@ -338,6 +340,7 @@ faker/providers/ssn/en_GB/__init__.py faker/providers/ssn/en_IE/__init__.py faker/providers/ssn/en_US/__init__.py +faker/providers/ssn/es_CA/__init__.py faker/providers/ssn/es_ES/__init__.py faker/providers/ssn/et_EE/__init__.py faker/providers/ssn/fi_FI/__init__.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/MANIFEST.in new/Faker-1.0.7/MANIFEST.in --- old/Faker-1.0.5/MANIFEST.in 2019-03-11 20:05:44.000000000 +0100 +++ new/Faker-1.0.7/MANIFEST.in 2019-04-15 17:09:53.000000000 +0200 @@ -13,4 +13,3 @@ exclude build32bit.sh prune docs prune .circleci - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/PKG-INFO new/Faker-1.0.7/PKG-INFO --- old/Faker-1.0.5/PKG-INFO 2019-04-12 17:10:32.000000000 +0200 +++ new/Faker-1.0.7/PKG-INFO 2019-05-14 18:11:37.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: Faker -Version: 1.0.5 +Version: 1.0.7 Summary: Faker is a Python package that generates fake data for you. Home-page: https://github.com/joke2k/faker Author: joke2k @@ -98,12 +98,12 @@ from faker import Faker from faker.providers import internet - + fake = Faker() fake.add_provider(internet) - + print(fake.ipv4_private()) - + Check the `extended docs`_ for a list of `bundled providers`_ and a list of `community providers`_. @@ -364,23 +364,11 @@ Tests ----- - Installing dependencies: - - .. code:: bash - - $ pip install -e . - Run tests: .. code:: bash - $ python setup.py test - - or - - .. code:: bash - - $ python -m unittest -v tests + $ tox Write documentation for providers: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/README.rst new/Faker-1.0.7/README.rst --- old/Faker-1.0.5/README.rst 2019-04-12 17:10:07.000000000 +0200 +++ new/Faker-1.0.7/README.rst 2019-04-15 17:09:53.000000000 +0200 @@ -90,12 +90,12 @@ from faker import Faker from faker.providers import internet - + fake = Faker() fake.add_provider(internet) - + print(fake.ipv4_private()) - + Check the `extended docs`_ for a list of `bundled providers`_ and a list of `community providers`_. @@ -356,23 +356,11 @@ Tests ----- -Installing dependencies: - -.. code:: bash - - $ pip install -e . - Run tests: .. code:: bash - $ python setup.py test - -or - -.. code:: bash - - $ python -m unittest -v tests + $ tox Write documentation for providers: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/VERSION new/Faker-1.0.7/VERSION --- old/Faker-1.0.5/VERSION 2019-04-12 17:10:21.000000000 +0200 +++ new/Faker-1.0.7/VERSION 2019-05-14 18:10:06.000000000 +0200 @@ -1 +1 @@ -1.0.5 +1.0.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/__init__.py new/Faker-1.0.7/faker/__init__.py --- old/Faker-1.0.5/faker/__init__.py 2019-04-12 17:10:21.000000000 +0200 +++ new/Faker-1.0.7/faker/__init__.py 2019-05-14 18:10:06.000000000 +0200 @@ -1,6 +1,6 @@ from faker.generator import Generator # noqa F401 from faker.factory import Factory # noqa F401 -VERSION = '1.0.5' +VERSION = '1.0.7' Faker = Factory.create diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/__init__.py new/Faker-1.0.7/faker/providers/__init__.py --- old/Faker-1.0.5/faker/providers/__init__.py 2019-03-05 18:07:52.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/__init__.py 2019-04-15 17:09:53.000000000 +0200 @@ -93,15 +93,16 @@ def language_code(self): return self.random_element(BaseProvider.language_locale_codes.keys()) - def random_int(self, min=0, max=9999): + def random_int(self, min=0, max=9999, step=1): """ Returns a random integer between two values. :param min: lower bound value (inclusive; default=0) :param max: upper bound value (inclusive; default=9999) + :param step: range step (default=1) :returns: random integer between min and max """ - return self.generator.random.randint(min, max) + return self.generator.random.randrange(min, max + 1, step) def random_digit(self): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/automotive/pl_PL/__init__.py new/Faker-1.0.7/faker/providers/automotive/pl_PL/__init__.py --- old/Faker-1.0.5/faker/providers/automotive/pl_PL/__init__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/automotive/pl_PL/__init__.py 2019-05-14 17:28:28.000000000 +0200 @@ -0,0 +1,28 @@ +# coding=utf-8 + +from __future__ import unicode_literals +from .. import Provider as AutomotiveProvider + + +class Provider(AutomotiveProvider): + # from + # https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Poland + license_formats = ( + '?? #####', + '?? ####?', + '?? ###??', + '?? #?###', + '?? #??##', + '??? ?###', + '??? ##??', + '??? #?##', + '??? ##?#', + '??? #??#', + '??? ??##', + '??? #####', + '??? ####?', + '??? ###??', + ) + + def license_plate_regex_formats(self): + return [plate.replace('?', '[A-Z]').replace('#', '[0-9]') for plate in self.license_formats] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/company/nl_NL/__init__.py new/Faker-1.0.7/faker/providers/company/nl_NL/__init__.py --- old/Faker-1.0.5/faker/providers/company/nl_NL/__init__.py 2019-04-12 17:10:07.000000000 +0200 +++ new/Faker-1.0.7/faker/providers/company/nl_NL/__init__.py 2019-04-15 17:09:53.000000000 +0200 @@ -1,109 +1,109 @@ -# coding=utf-8 - -from __future__ import unicode_literals -from .. import Provider as CompanyProvider - - -class Provider(CompanyProvider): - - formats = ( - '{{last_name}} {{company_suffix}}', - '{{last_name}} & {{last_name}}', - '{{company_prefix}} {{last_name}}', - '{{large_company}}', - ) - - company_prefixes = ( - 'Stichting', 'Koninklijke', 'Royal', - ) - - company_suffixes = ( - 'BV', 'NV', 'Groep', - ) - - # Source: https://www.mt.nl/management/reputatie/mt-500-2018-de-lijst/559930 - large_companies = ( - 'Shell', 'Coolblue', 'ASML', 'Ahold', 'Tata Steel', 'KLM', 'Bol.com', 'BP Nederland', 'De Efteling', 'Eneco', - 'De Persgroep', 'ING', 'Royal HaskoningDHV', 'Randstad', 'Google', 'Ikea', 'Rockwool', 'BAM', 'Achmea', - 'Damen Shipyard', 'ABN Amro', 'Remeha Group', 'TenneT', 'Coca-Cola', 'Van Leeuwen Buizen', 'Wavin', 'Rabobank', - 'AkzoNobel', 'Arcadis', 'AFAS', 'Cisco', 'DAF Trucks', 'DHL', 'Hanos', 'Boon Edam', 'BMW Nederland', - 'The Greenery', 'Dutch Flower Group', 'Koninklijke Mosa', 'Yacht', 'Rituals', 'Microsoft', 'Esso', - '3W Vastgoed', 'Deloitte', 'Corio', 'Voortman Steel Group', 'Agrifirm', 'Makro Nederland', - 'Nederlandse Publieke Omroep', 'De Alliantie', 'Heijmans', 'McDonalds', 'ANWB', 'Mediamarkt', 'Kruidvat' - 'Van Merksteijn Steel', 'Dura Vermeer', 'Alliander', 'Unilever', 'Enexis', 'Berenschot', 'Jumbo', - 'Technische Unie', 'Havenbedrijf Rotterdam', 'Ballast Nedam', 'RTL Nederland', 'Talpa Media', - 'Blauwhoed Vastgoed', 'DSM', 'Ymere', 'Witteveen+Bos', 'NS', 'Action', 'FloraHolland', 'Heineken', 'Nuon', 'EY', - 'Dow Benelux', 'Bavaria', 'Schiphol', 'Holland Casino', 'Binck bank', 'BDO', 'HEMA', 'Alphabet Nederland', - 'Croon Elektrotechniek', 'ASR Vastgoed ontwikkeling', 'PwC', 'Mammoet', 'KEMA', 'IBM', 'A.S. Watson', - 'KPMG', 'VodafoneZiggo', 'YoungCapital', 'Triodos Bank', 'Aviko', 'AgruniekRijnvallei', 'Heerema', 'Accenture', - 'Aegon', 'NXP', 'Breman Installatiegroep', 'Movares Groep', 'Q-Park', 'FleuraMetz', 'Sanoma', - 'Bakker Logistiek', 'VDL Group', 'Bayer', 'Boskalis', 'Nutreco', 'Dell', 'Brunel', 'Exact', 'Manpower', - 'Essent', 'Canon', 'ONVZ Zorgverzekeraar', 'Telegraaf Media Group', 'Nationale Nederlanden', 'Andus Group', - 'Den Braven Group', 'ADP', 'ASR', 'ArboNed', 'Plieger', 'De Heus Diervoeders', 'USG People', 'Bidvest Deli XL', - 'Apollo Vredestein', 'Tempo-Team', 'Trespa', 'Janssen Biologics', 'Starbucks', 'PostNL', 'Vanderlande', - 'FrieslandCampina', 'Constellium', 'Huisman', 'Abbott', 'Koninklijke Boom Uitgevers', 'Bosch Rexroth', 'BASF', - 'Audax', 'VolkerWessels', 'Hunkemöller', 'Athlon Car Lease', 'DSW Zorgverzekeraar', 'Mars', - 'De Brauw Blackstone Westbroek', 'NDC Mediagroep', 'Bluewater', 'Stedin', 'Feenstra', - 'Wuppermann Staal Nederland', 'Kramp', 'SABIC', 'Iv-Groep', 'Bejo Zaden', 'Wolters Kluwer', 'Nyrstar holding', - 'Adecco', 'Tauw', 'Robeco', 'Eriks', 'Allianz Nederland Groep', 'Driessen', 'Burger King', 'Lekkerland', - 'Van Lanschot', 'Brocacef', 'Bureau Veritas', 'Relx', 'Pathé Bioscopen', 'Bosal', - 'Ardagh Group', 'Maandag', 'Inalfa', 'Atradius', 'Capgemini', 'Greenchoice', 'Q8 (Kuwait Petroleum Europe)', - 'ASM International', 'Van der Valk', 'Delta Lloyd', 'GlaxoSmithKline', 'ABB', - 'Fabory, a Grainger company', 'Veen Bosch & Keuning Uitgeversgroep', 'CZ', 'Plus', 'RET Rotterdam', - 'Loyens & Loeff', 'Holland Trading', 'Archer Daniels Midland Nederland', 'Ten Brinke', 'NAM', 'DAS', - 'Samsung Electronics Benelux', 'Koopman International', 'TUI', 'Lannoo Meulenhoff', 'AC Restaurants', - 'Stage Entertainment', 'Acer', 'HDI Global SE', 'Detailresult', 'Nestle', 'GVB Amsterdam', 'Dekamarkt', 'Dirk', - 'MSD', 'Arriva', 'Baker Tilly Berk', 'SBM Offshore', 'TomTom', 'Fujifilm', 'B&S', 'BCC', 'Gasunie', - 'Oracle Nederland', 'Astellas Pharma', 'SKF', 'Woningstichting Eigen Haard', 'Rijk Zwaan', 'Chubb', 'Fugro', - 'Total', 'Rochdale', 'ASVB', 'Atos', 'Acomo', 'KPN', 'Van Drie Group', 'Olympia uitzendbureau', - 'Bacardi Nederland', 'JMW Horeca Uitzendbureau', 'Warner Bros/Eyeworks', 'Aalberts Industries', 'SNS Bank', - 'Amtrada Holding', 'VGZ', 'Grolsch', 'Office Depot', 'De Rijke Group', 'Bovemij Verzekeringsgroep', - 'Coop Nederland', 'Eaton Industries', 'ASN', 'Yara Sluiskil', 'HSF Logistics', 'Fokker', 'Deutsche Bank', - 'Sweco', 'Univé Groep', 'Koninklijke Wagenborg', 'Strukton', 'Conclusion', 'Philips', 'In Person', - 'Fluor', 'Vroegop-Windig', 'ArboUnie', 'Centraal Boekhuis', 'Siemens', 'Connexxion', 'Fujitsu', 'Consolid', - 'AVR Afvalverwerking', 'Brabant Alucast', 'Centric', 'Havensteder', 'Novartis', 'Booking.com', 'Menzis', - 'Frankort & Koning Groep', 'Jan de Rijk', 'Brand Loyalty Group', 'Ohra Verzekeringen', 'Terberg Group', - 'Cloetta', 'Holland & Barrett', 'Enza Zaden', 'VION', 'Woonzorg Nederland', - 'T-Mobile', 'Crucell', 'NautaDutilh', 'BNP Paribas', 'NIBC Bank', 'VastNed', 'CCV Holland', - 'IHC Merwede', 'Neways', 'NSI N.V.', 'Deen', 'Accor', 'HTM', 'ITM Group', 'Ordina', 'Dümmen Orange', 'Optiver', - 'Zara', 'L\'Oreal Nederland B.V.', 'Vinci Energies', 'Suit Supply Topco', 'Sita', 'Vos Logistics', - 'Altran', 'St. Clair', 'BESI', 'Fiat Chrysler Automobiles', 'UPS', 'Jacobs', 'Emté', 'TBI', 'De Bijenkorf', - 'Aldi Nederland', 'Van Wijnen', 'Vitens', 'De Goudse Verzekeringen', 'SBS Broadcasting', - 'Sandd', 'Omron', 'Sogeti', 'Alfa Accountants & Adviseurs', 'Harvey Nash', 'Stork', 'Glencore Grain', - 'Meijburg & Co', 'Honeywell', 'Meyn', 'Ericsson Telecommunicatie', 'Hurks', 'Mitsubishi', 'GGN', - 'CGI Nederland', 'Staples Nederland', 'Denkavit International', 'Ecorys', 'Rexel Nederland', - 'A. Hakpark', 'DuPont Nederland', 'CBRE Group', 'Bolsius', 'Marel', 'Metro', - 'Flynth Adviseurs en Accountants', 'Kropman Installatietechniek', 'Kuijpers', 'Medtronic', 'Cefetra', - 'Simon Loos', 'Citadel Enterprises', 'Intergamma', 'Ceva Logistics', 'Beter Bed', 'Subway', 'Gamma', 'Karwei' - 'Varo Energy', 'APM Terminals', 'Center Parcs', 'Brenntag Nederland', 'NFI', 'Hoogvliet', - 'Van Gansewinkel', 'Nedap', 'Blokker', 'Perfetti Van Melle', 'Vestia', 'Kuehne + Nagel Logistics', - 'Rensa Group', 'NTS Group', 'Joh. Mourik & Co. Holding', 'Mercedes-Benz', 'DIT Personeel', 'Verkade', - 'Hametha', 'Vopak', 'IFF', 'Pearle', 'Mainfreight', 'De Jong & Laan', 'DSV', 'P4People', 'Mazars', 'Cargill', - 'Ten Brinke Groep', 'Alewijnse', 'Agio Cigars', 'Peter Appel Transport', 'Syngenta', 'Avery Dennison', - 'Accon AVM', 'Vitol', 'Vermaat Groep', 'BMC', 'Alcatel-Lucent', 'Maxeda DIY', 'Equens', - 'Van Gelder Groep', 'Emerson Electric Nederland', 'Bakkersland', 'Specsavers', 'E.On', 'Landal Greenparks', - 'IMC Trading', 'Barentz Group', 'Epson', 'Raet', 'Van Oord', 'Thomas Cook Nederland', 'SDU uitgevers', - 'Nedschroef', 'Linde Gas', 'Ewals Cargo Care', 'Theodoor Gilissen', 'TMF Group', 'Cornelis Vrolijk', - 'Jan Linders Supermarkten', 'SIF group', 'BT Nederland', 'Kinepolis', 'Pink Elephant', - 'General Motors Nederland', 'Carlson Wagonlit', 'Bruna', 'Docdata', 'Schenk Tanktransport', 'WPG', 'Peak-IT', - 'Martinair', 'Reesink', 'Elopak Nederland', 'Fagron N.V.', 'OVG Groep', 'Ford Nederland', 'Multi Corporation', - 'Simac', 'Primark', 'Tech Data Nederland', 'Vleesgroothandel Zandbergen', 'Raben Group', 'Farm Frites', - 'Libéma', 'Caldic', 'Portaal', 'Syntus', 'Jacobs DE', 'Stena Line', 'The Phone House', 'Interfood Group', - 'Thales', 'Teva Pharmaceuticals', 'RFS Holland', 'Aebi Schmidt Nederland', - 'Rockwell Automation Nederland', 'Engie Services', 'Hendrix Genetics', 'Qbuzz', 'Unica', - '2SistersFoodGroup', 'Ziut', 'Munckhof Groep', 'Spar Holding', 'Samskip', 'Continental Bakeries', 'Sligro', - 'Merck', 'Foot Locker Europe', 'Unit4', 'PepsiCo', 'Sulzer', 'Tebodin', 'Value8', 'Boels', - 'DKG Groep', 'Bruynzeel Keukens', 'Janssen de Jong Groep', 'ProRail', 'Solid Professionals', 'Hermes Partners', - ) - - def large_company(self): - """ - :example: 'Bol.com' - """ - return self.random_element(self.large_companies) - - def company_prefix(self): - """ - :example 'Stichting' - """ - return self.random_element(self.company_prefixes) +# coding=utf-8 + +from __future__ import unicode_literals +from .. import Provider as CompanyProvider + + +class Provider(CompanyProvider): + + formats = ( + '{{last_name}} {{company_suffix}}', + '{{last_name}} & {{last_name}}', + '{{company_prefix}} {{last_name}}', + '{{large_company}}', + ) + + company_prefixes = ( + 'Stichting', 'Koninklijke', 'Royal', + ) + + company_suffixes = ( + 'BV', 'NV', 'Groep', + ) + + # Source: https://www.mt.nl/management/reputatie/mt-500-2018-de-lijst/559930 + large_companies = ( + 'Shell', 'Coolblue', 'ASML', 'Ahold', 'Tata Steel', 'KLM', 'Bol.com', 'BP Nederland', 'De Efteling', 'Eneco', + 'De Persgroep', 'ING', 'Royal HaskoningDHV', 'Randstad', 'Google', 'Ikea', 'Rockwool', 'BAM', 'Achmea', + 'Damen Shipyard', 'ABN Amro', 'Remeha Group', 'TenneT', 'Coca-Cola', 'Van Leeuwen Buizen', 'Wavin', 'Rabobank', + 'AkzoNobel', 'Arcadis', 'AFAS', 'Cisco', 'DAF Trucks', 'DHL', 'Hanos', 'Boon Edam', 'BMW Nederland', + 'The Greenery', 'Dutch Flower Group', 'Koninklijke Mosa', 'Yacht', 'Rituals', 'Microsoft', 'Esso', + '3W Vastgoed', 'Deloitte', 'Corio', 'Voortman Steel Group', 'Agrifirm', 'Makro Nederland', + 'Nederlandse Publieke Omroep', 'De Alliantie', 'Heijmans', 'McDonalds', 'ANWB', 'Mediamarkt', 'Kruidvat' + 'Van Merksteijn Steel', 'Dura Vermeer', 'Alliander', 'Unilever', 'Enexis', 'Berenschot', 'Jumbo', + 'Technische Unie', 'Havenbedrijf Rotterdam', 'Ballast Nedam', 'RTL Nederland', 'Talpa Media', + 'Blauwhoed Vastgoed', 'DSM', 'Ymere', 'Witteveen+Bos', 'NS', 'Action', 'FloraHolland', 'Heineken', 'Nuon', 'EY', + 'Dow Benelux', 'Bavaria', 'Schiphol', 'Holland Casino', 'Binck bank', 'BDO', 'HEMA', 'Alphabet Nederland', + 'Croon Elektrotechniek', 'ASR Vastgoed ontwikkeling', 'PwC', 'Mammoet', 'KEMA', 'IBM', 'A.S. Watson', + 'KPMG', 'VodafoneZiggo', 'YoungCapital', 'Triodos Bank', 'Aviko', 'AgruniekRijnvallei', 'Heerema', 'Accenture', + 'Aegon', 'NXP', 'Breman Installatiegroep', 'Movares Groep', 'Q-Park', 'FleuraMetz', 'Sanoma', + 'Bakker Logistiek', 'VDL Group', 'Bayer', 'Boskalis', 'Nutreco', 'Dell', 'Brunel', 'Exact', 'Manpower', + 'Essent', 'Canon', 'ONVZ Zorgverzekeraar', 'Telegraaf Media Group', 'Nationale Nederlanden', 'Andus Group', + 'Den Braven Group', 'ADP', 'ASR', 'ArboNed', 'Plieger', 'De Heus Diervoeders', 'USG People', 'Bidvest Deli XL', + 'Apollo Vredestein', 'Tempo-Team', 'Trespa', 'Janssen Biologics', 'Starbucks', 'PostNL', 'Vanderlande', + 'FrieslandCampina', 'Constellium', 'Huisman', 'Abbott', 'Koninklijke Boom Uitgevers', 'Bosch Rexroth', 'BASF', + 'Audax', 'VolkerWessels', 'Hunkemöller', 'Athlon Car Lease', 'DSW Zorgverzekeraar', 'Mars', + 'De Brauw Blackstone Westbroek', 'NDC Mediagroep', 'Bluewater', 'Stedin', 'Feenstra', + 'Wuppermann Staal Nederland', 'Kramp', 'SABIC', 'Iv-Groep', 'Bejo Zaden', 'Wolters Kluwer', 'Nyrstar holding', + 'Adecco', 'Tauw', 'Robeco', 'Eriks', 'Allianz Nederland Groep', 'Driessen', 'Burger King', 'Lekkerland', + 'Van Lanschot', 'Brocacef', 'Bureau Veritas', 'Relx', 'Pathé Bioscopen', 'Bosal', + 'Ardagh Group', 'Maandag', 'Inalfa', 'Atradius', 'Capgemini', 'Greenchoice', 'Q8 (Kuwait Petroleum Europe)', + 'ASM International', 'Van der Valk', 'Delta Lloyd', 'GlaxoSmithKline', 'ABB', + 'Fabory, a Grainger company', 'Veen Bosch & Keuning Uitgeversgroep', 'CZ', 'Plus', 'RET Rotterdam', + 'Loyens & Loeff', 'Holland Trading', 'Archer Daniels Midland Nederland', 'Ten Brinke', 'NAM', 'DAS', + 'Samsung Electronics Benelux', 'Koopman International', 'TUI', 'Lannoo Meulenhoff', 'AC Restaurants', + 'Stage Entertainment', 'Acer', 'HDI Global SE', 'Detailresult', 'Nestle', 'GVB Amsterdam', 'Dekamarkt', 'Dirk', + 'MSD', 'Arriva', 'Baker Tilly Berk', 'SBM Offshore', 'TomTom', 'Fujifilm', 'B&S', 'BCC', 'Gasunie', + 'Oracle Nederland', 'Astellas Pharma', 'SKF', 'Woningstichting Eigen Haard', 'Rijk Zwaan', 'Chubb', 'Fugro', + 'Total', 'Rochdale', 'ASVB', 'Atos', 'Acomo', 'KPN', 'Van Drie Group', 'Olympia uitzendbureau', + 'Bacardi Nederland', 'JMW Horeca Uitzendbureau', 'Warner Bros/Eyeworks', 'Aalberts Industries', 'SNS Bank', + 'Amtrada Holding', 'VGZ', 'Grolsch', 'Office Depot', 'De Rijke Group', 'Bovemij Verzekeringsgroep', + 'Coop Nederland', 'Eaton Industries', 'ASN', 'Yara Sluiskil', 'HSF Logistics', 'Fokker', 'Deutsche Bank', + 'Sweco', 'Univé Groep', 'Koninklijke Wagenborg', 'Strukton', 'Conclusion', 'Philips', 'In Person', + 'Fluor', 'Vroegop-Windig', 'ArboUnie', 'Centraal Boekhuis', 'Siemens', 'Connexxion', 'Fujitsu', 'Consolid', + 'AVR Afvalverwerking', 'Brabant Alucast', 'Centric', 'Havensteder', 'Novartis', 'Booking.com', 'Menzis', + 'Frankort & Koning Groep', 'Jan de Rijk', 'Brand Loyalty Group', 'Ohra Verzekeringen', 'Terberg Group', + 'Cloetta', 'Holland & Barrett', 'Enza Zaden', 'VION', 'Woonzorg Nederland', + 'T-Mobile', 'Crucell', 'NautaDutilh', 'BNP Paribas', 'NIBC Bank', 'VastNed', 'CCV Holland', + 'IHC Merwede', 'Neways', 'NSI N.V.', 'Deen', 'Accor', 'HTM', 'ITM Group', 'Ordina', 'Dümmen Orange', 'Optiver', + 'Zara', 'L\'Oreal Nederland B.V.', 'Vinci Energies', 'Suit Supply Topco', 'Sita', 'Vos Logistics', + 'Altran', 'St. Clair', 'BESI', 'Fiat Chrysler Automobiles', 'UPS', 'Jacobs', 'Emté', 'TBI', 'De Bijenkorf', + 'Aldi Nederland', 'Van Wijnen', 'Vitens', 'De Goudse Verzekeringen', 'SBS Broadcasting', + 'Sandd', 'Omron', 'Sogeti', 'Alfa Accountants & Adviseurs', 'Harvey Nash', 'Stork', 'Glencore Grain', + 'Meijburg & Co', 'Honeywell', 'Meyn', 'Ericsson Telecommunicatie', 'Hurks', 'Mitsubishi', 'GGN', + 'CGI Nederland', 'Staples Nederland', 'Denkavit International', 'Ecorys', 'Rexel Nederland', + 'A. Hakpark', 'DuPont Nederland', 'CBRE Group', 'Bolsius', 'Marel', 'Metro', + 'Flynth Adviseurs en Accountants', 'Kropman Installatietechniek', 'Kuijpers', 'Medtronic', 'Cefetra', + 'Simon Loos', 'Citadel Enterprises', 'Intergamma', 'Ceva Logistics', 'Beter Bed', 'Subway', 'Gamma', 'Karwei' + 'Varo Energy', 'APM Terminals', 'Center Parcs', 'Brenntag Nederland', 'NFI', 'Hoogvliet', + 'Van Gansewinkel', 'Nedap', 'Blokker', 'Perfetti Van Melle', 'Vestia', 'Kuehne + Nagel Logistics', + 'Rensa Group', 'NTS Group', 'Joh. Mourik & Co. Holding', 'Mercedes-Benz', 'DIT Personeel', 'Verkade', + 'Hametha', 'Vopak', 'IFF', 'Pearle', 'Mainfreight', 'De Jong & Laan', 'DSV', 'P4People', 'Mazars', 'Cargill', + 'Ten Brinke Groep', 'Alewijnse', 'Agio Cigars', 'Peter Appel Transport', 'Syngenta', 'Avery Dennison', + 'Accon AVM', 'Vitol', 'Vermaat Groep', 'BMC', 'Alcatel-Lucent', 'Maxeda DIY', 'Equens', + 'Van Gelder Groep', 'Emerson Electric Nederland', 'Bakkersland', 'Specsavers', 'E.On', 'Landal Greenparks', + 'IMC Trading', 'Barentz Group', 'Epson', 'Raet', 'Van Oord', 'Thomas Cook Nederland', 'SDU uitgevers', + 'Nedschroef', 'Linde Gas', 'Ewals Cargo Care', 'Theodoor Gilissen', 'TMF Group', 'Cornelis Vrolijk', + 'Jan Linders Supermarkten', 'SIF group', 'BT Nederland', 'Kinepolis', 'Pink Elephant', + 'General Motors Nederland', 'Carlson Wagonlit', 'Bruna', 'Docdata', 'Schenk Tanktransport', 'WPG', 'Peak-IT', + 'Martinair', 'Reesink', 'Elopak Nederland', 'Fagron N.V.', 'OVG Groep', 'Ford Nederland', 'Multi Corporation', + 'Simac', 'Primark', 'Tech Data Nederland', 'Vleesgroothandel Zandbergen', 'Raben Group', 'Farm Frites', + 'Libéma', 'Caldic', 'Portaal', 'Syntus', 'Jacobs DE', 'Stena Line', 'The Phone House', 'Interfood Group', + 'Thales', 'Teva Pharmaceuticals', 'RFS Holland', 'Aebi Schmidt Nederland', + 'Rockwell Automation Nederland', 'Engie Services', 'Hendrix Genetics', 'Qbuzz', 'Unica', + '2SistersFoodGroup', 'Ziut', 'Munckhof Groep', 'Spar Holding', 'Samskip', 'Continental Bakeries', 'Sligro', + 'Merck', 'Foot Locker Europe', 'Unit4', 'PepsiCo', 'Sulzer', 'Tebodin', 'Value8', 'Boels', + 'DKG Groep', 'Bruynzeel Keukens', 'Janssen de Jong Groep', 'ProRail', 'Solid Professionals', 'Hermes Partners', + ) + + def large_company(self): + """ + :example: 'Bol.com' + """ + return self.random_element(self.large_companies) + + def company_prefix(self): + """ + :example 'Stichting' + """ + return self.random_element(self.company_prefixes) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/internet/__init__.py new/Faker-1.0.7/faker/providers/internet/__init__.py --- old/Faker-1.0.5/faker/providers/internet/__init__.py 2019-03-05 18:07:52.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/internet/__init__.py 2019-05-08 18:02:39.000000000 +0200 @@ -111,8 +111,6 @@ '{{url}}{{uri_path}}/{{uri_page}}{{uri_extension}}', ) image_placeholder_services = ( - 'https://placeholdit.imgix.net/~text' - '?txtsize=55&txt={width}x{height}&w={width}&h={height}', 'https://www.lorempixel.com/{width}/{height}', 'https://dummyimage.com/{width}x{height}', 'https://placekitten.com/{width}/{height}', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/lorem/__init__.py new/Faker-1.0.7/faker/providers/lorem/__init__.py --- old/Faker-1.0.5/faker/providers/lorem/__init__.py 2019-03-05 18:07:52.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/lorem/__init__.py 2019-05-08 18:02:39.000000000 +0200 @@ -196,3 +196,16 @@ text.pop() return "".join(text) + + def texts(self, nb_texts=3, max_nb_chars=200, ext_word_list=None): + """ + Generate an array of texts + :example [text1, text2, text3] + :param nb_texts: How many texts to return + :param max_nb_chars: Maximum number of characters the text should contain (minimum 5) + :param ext_word_list: a list of words you would like to have instead of 'Lorem ipsum'. + + :rtype: list + """ + return [self.text(max_nb_chars, ext_word_list) + for _ in range(0, nb_texts)] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/person/es_CA/__init__.py new/Faker-1.0.7/faker/providers/person/es_CA/__init__.py --- old/Faker-1.0.5/faker/providers/person/es_CA/__init__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/person/es_CA/__init__.py 2019-05-08 18:02:39.000000000 +0200 @@ -0,0 +1,92 @@ +# coding=utf-8 +from __future__ import unicode_literals +from ..es_ES import Provider as PersonProvider + + +class Provider(PersonProvider): + """ + Adds popular Catalan names. + https://www.idescat.cat/pub/?id=aec&n=946&lang=es&t=2018 + https://www.idescat.cat/pub/?id=aec&n=947&lang=es&t=2018 + """ + first_names_male = ( + 'Adam', + 'Albert', + 'Aleix', + 'Álex', + 'Antonio', + 'Arnau', + 'Biel', + 'Bruno', + 'Carlos', + 'Daniel', + 'David', + 'Enzo', + 'Èric', + 'Francisco', + 'Hugo', + 'Jan', + 'Javier', + 'Joan', + 'Jordi', + 'Jorge', + 'Josep', + 'José', + 'José María', + 'Juan', + 'Leo', + 'Lucas', + 'Manuel', + 'Marc', + 'Martí', + 'Max', + 'Miguel', + 'Nil', + 'Pau', + 'Pedro', + 'Pol', + 'Ramón', + 'Xavier') + + first_names_female = ( + 'Abril', + 'Aina', + 'Ana', + 'Anna', + 'Antonia', + 'Antònia', + 'Arlet', + 'Carla', + 'Carmen', + 'Chlóe', + 'Clàudia', + 'Cristina', + 'Dolores', + 'Emma', + 'Francisca', + 'Isabel', + 'Jana', + 'Josefa', + 'Júlia', + 'Laia', + 'Laura', + 'Lucia', + 'Marta', + 'Martina', + 'María', + 'María Del Carmen', + 'María Dolores', + 'María Teresa', + 'Mia', + 'Montserrat', + 'Noa', + 'Núria', + 'Ona', + 'Paula', + 'Rosa', + 'Sara', + 'Sofía', + 'Sílvia', + 'Valèria') + + first_names = first_names_male + first_names_female diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/person/pl_PL/__init__.py new/Faker-1.0.7/faker/providers/person/pl_PL/__init__.py --- old/Faker-1.0.5/faker/providers/person/pl_PL/__init__.py 2019-03-05 18:07:52.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/person/pl_PL/__init__.py 2019-05-14 17:28:28.000000000 +0200 @@ -21,6 +21,28 @@ return check_digit +def generate_pesel_checksum_value(pesel_digits): + """ + Calculates and returns a control digit for given PESEL. + """ + checksum_values = [9, 7, 3, 1, 9, 7, 3, 1, 9, 7] + + checksum = sum((int(a) * b for a, b in zip(list(pesel_digits), checksum_values))) + + return checksum % 10 + + +def checksum_pesel_number(pesel_digits): + """ + Calculates and returns True if PESEL is valid. + """ + checksum_values = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1] + + checksum = sum((int(a) * b for a, b in zip(list(pesel_digits), checksum_values))) + + return checksum % 10 == 0 + + class Provider(PersonProvider): formats = ( '{{first_name}} {{last_name}}', @@ -702,3 +724,31 @@ identity[3] = checksum_identity_card_number(identity) return ''.join(str(character) for character in identity) + + def pesel(self): + """ + Returns 11 characters of Universal Electronic System for Registration of the Population. + Polish: Powszechny Elektroniczny System Ewidencji Ludności. + + PESEL has 11 digits which identifies just one person. + Month: if person was born in 1900-2000, december is 12. If person was born > 2000, we have to add 20 to month, + so december is 32. + Person id: last digit identifies person's sex. Even for females, odd for males. + + https://en.wikipedia.org/wiki/PESEL + """ + + birth = self.generator.date_of_birth() + + year_pesel = str(birth.year)[-2:] + month_pesel = birth.month if birth.year < 2000 else birth.month + 20 + day_pesel = birth.day + person_id = self.random_int(1000, 9999) + + current_pesel = '{year}{month:02d}{day:02d}{person_id:04d}'.format(year=year_pesel, month=month_pesel, + day=day_pesel, + person_id=person_id) + + checksum_value = generate_pesel_checksum_value(current_pesel) + return '{pesel_without_checksum}{checksum_value}'.format(pesel_without_checksum=current_pesel, + checksum_value=checksum_value) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/person/ro_RO/__init__.py new/Faker-1.0.7/faker/providers/person/ro_RO/__init__.py --- old/Faker-1.0.5/faker/providers/person/ro_RO/__init__.py 2019-03-05 18:07:52.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/person/ro_RO/__init__.py 2019-05-08 18:02:39.000000000 +0200 @@ -104,6 +104,8 @@ 'Vasilică', 'Veniamin', 'Vicențiu', 'Victor', 'Vincențiu', 'Viorel', 'Visarion', 'Vlad', 'Vladimir', 'Vlaicu', 'Voicu', 'Zamfir', 'Zeno') + first_names = first_names_female + first_names_male + # sources: https://ro.wikipedia.org/wiki/Lista_celor_mai_uzuale_nume_de_familie#Rom%C3%A2nia last_names = ( 'Aanei', 'Ababei', 'Albu', 'Ardelean', 'Barbu', 'Cristea', 'Diaconescu', 'Diaconu', 'Dima', 'Dinu', 'Dobre', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/python/__init__.py new/Faker-1.0.7/faker/providers/python/__init__.py --- old/Faker-1.0.5/faker/providers/python/__init__.py 2019-04-12 17:10:07.000000000 +0200 +++ new/Faker-1.0.7/faker/providers/python/__init__.py 2019-05-14 17:28:28.000000000 +0200 @@ -53,8 +53,7 @@ self.random_int(1, sys.float_info.dig)) right_digits = right_digits if right_digits is not None else ( self.random_int(0, sys.float_info.dig - left_digits)) - sign = 1 if positive else self.random_element((-1, 1)) - + sign = '' if (min_value is not None) or (max_value is not None): if min_value is None: min_value = max_value - self.random_int() @@ -63,15 +62,17 @@ left_number = self.random_int(min_value, max_value) else: - left_number = sign * self.random_number(left_digits) + sign = '+' if positive else self.random_element(('+', '-')) + left_number = self.random_number(left_digits) - return float("{0}.{1}".format( + return float("{0}{1}.{2}".format( + sign, left_number, self.random_number(right_digits), )) - def pyint(self): - return self.generator.random_int() + def pyint(self, min=0, max=9999, step=1): + return self.generator.random_int(min, max, step=step) def pydecimal(self, left_digits=None, right_digits=None, positive=False, min_value=None, max_value=None): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/ssn/es_CA/__init__.py new/Faker-1.0.7/faker/providers/ssn/es_CA/__init__.py --- old/Faker-1.0.5/faker/providers/ssn/es_CA/__init__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/ssn/es_CA/__init__.py 2019-05-08 18:02:39.000000000 +0200 @@ -0,0 +1,10 @@ +# coding=utf-8 +from ..es_ES import Provider as BaseProvider + + +class Provider(BaseProvider): + """ + A Faker provider for the Spanish VAT IDs and DOIs + """ + + pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/faker/providers/ssn/es_ES/__init__.py new/Faker-1.0.7/faker/providers/ssn/es_ES/__init__.py --- old/Faker-1.0.5/faker/providers/ssn/es_ES/__init__.py 2019-03-05 18:07:52.000000000 +0100 +++ new/Faker-1.0.7/faker/providers/ssn/es_ES/__init__.py 2019-05-08 18:02:39.000000000 +0200 @@ -1,10 +1,12 @@ # coding=utf-8 +import random + from .. import Provider as BaseProvider class Provider(BaseProvider): """ - A Faker provider for the Spanish VAT IDs + A Faker provider for the Spanish VAT IDs and DOIs """ vat_id_formats = ( @@ -20,3 +22,86 @@ """ return self.bothify(self.random_element(self.vat_id_formats)) + + def nie(self): + """ + https://es.wikipedia.org/wiki/N%C3%BAmero_de_identidad_de_extranjero + :return: a random Spanish NIE + """ + + first_chr = random.randrange(0, 3) + doi_body = str(random.randrange(0, 10000000)).zfill(7) + control = self._calculate_control_doi(str(first_chr) + doi_body) + return "XYZ"[first_chr] + doi_body + control + + def nif(self): + """ + https://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal + :return: NIF + """ + + nie_body = str(random.randrange(0, 100000000)) # generate a number of a maximum of 8 characters long + return nie_body.zfill(8) + self._calculate_control_doi(nie_body) + + def cif(self): + """ + https://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal + :return: a random Spanish CIF + """ + + first_chr = random.choice('ABCDEFGHJNPQRSUVW') + doi_body = str(random.randrange(0, 10000000)).zfill(7) + cif = first_chr + doi_body + return cif + self._calculate_control_cif(cif) + + def doi(self): + """ + https://es.wikipedia.org/wiki/Identificador_de_objeto_digital + :return: a random Spanish CIF or NIE or NIF + """ + + return random.choice([self.cif, self.nie, self.nif])() + + @staticmethod + def _calculate_control_doi(doi): + """ + Calculate the letter that corresponds to the end of a DOI + :param doi: calculated value so far needing a control character + :return: DOI control character + """ + + lookup = 'TRWAGMYFPDXBNJZSQVHLCKE' + return lookup[int(doi) % 23] + + @classmethod + def _calculate_control_cif(cls, cif): + """ + Calculate the letter that corresponds to the end of a CIF + :param cif: calculated value so far needing a control character + :return: CIF control character + + Code was converted from the minified js of: https://generadordni.es/ + """ + + sum_ = 0 + first_chr, cif_value = cif[0], cif[1:] + for index, char in enumerate(cif_value): + if index % 2: + sum_ += int(char) + else: + sum_ += sum(map(int, str(int(char) * 2))) + if sum_ > 10: + sum_ = int(str(sum_)[-1]) + else: + sum_ = sum_ + sum_ = 10 - (sum_ % 10) + + if first_chr in ['F', 'J', 'K', 'N', 'P', 'Q', 'R', 'S', 'U', 'V', 'W']: + return chr(64 + sum_) + elif first_chr in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'L', 'M']: + if sum_ == 10: + sum_ = 0 + return str(sum_) + else: # K, L, M # pragma: no cover + # Old format that is no longer used, here for full compatability + return cls._calculate_control_doi(cif) # pragma: no cover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/setup.py new/Faker-1.0.7/setup.py --- old/Faker-1.0.5/setup.py 2019-04-12 17:10:07.000000000 +0200 +++ new/Faker-1.0.7/setup.py 2019-05-14 17:28:28.000000000 +0200 @@ -71,9 +71,9 @@ tests_require=[ "email_validator>=1.0.1,<1.1.0", "ukpostcodeparser>=1.1.1", - "mock", + "mock ; python_version < '3.3'", "pytest>=3.8.0,<3.9", - "more-itertools<6.0.0", + "more-itertools<6.0.0 ; python_version < '3.0'", "random2==1.0.1", "freezegun==0.3.11", ], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/tests/providers/test_automotive.py new/Faker-1.0.7/tests/providers/test_automotive.py --- old/Faker-1.0.5/tests/providers/test_automotive.py 2019-03-05 18:07:52.000000000 +0100 +++ new/Faker-1.0.7/tests/providers/test_automotive.py 2019-05-14 17:28:28.000000000 +0200 @@ -49,3 +49,15 @@ def test_sv_SE_plate_format(self): plate = self.factory.license_plate() assert re.match(r"[A-Z]{3} \d{2}[\dA-Z]{1}", plate), "%s is not in the correct format." % plate + + +class TestPlPL(unittest.TestCase): + + def setUp(self): + self.factory = Faker('pl_PL') + + def test_pl_PL_plate_format(self): + plate = self.factory.license_plate() + patterns = self.factory.license_plate_regex_formats() + assert re.match(r'{patterns}'.format(patterns='|'.join(patterns)), + plate), '{plate} is not the correct format.'.format(plate=plate) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/tests/providers/test_internet.py new/Faker-1.0.7/tests/providers/test_internet.py --- old/Faker-1.0.5/tests/providers/test_internet.py 2019-03-05 18:07:52.000000000 +0100 +++ new/Faker-1.0.7/tests/providers/test_internet.py 2019-05-14 17:28:28.000000000 +0200 @@ -5,8 +5,10 @@ from itertools import cycle import unittest - -import mock +try: + from unittest import mock +except ImportError: + import mock import pytest import six diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/tests/providers/test_person.py new/Faker-1.0.7/tests/providers/test_person.py --- old/Faker-1.0.5/tests/providers/test_person.py 2019-04-12 17:10:07.000000000 +0200 +++ new/Faker-1.0.7/tests/providers/test_person.py 2019-05-14 17:28:28.000000000 +0200 @@ -16,6 +16,7 @@ from faker.providers.person.cs_CZ import Provider as CsCZProvider from faker.providers.person.pl_PL import ( checksum_identity_card_number as pl_checksum_identity_card_number, + checksum_pesel_number as pl_checksum_pesel_number, ) from faker.providers.person.zh_CN import Provider as ZhCNProvider from faker.providers.person.zh_TW import Provider as ZhTWProvider @@ -206,6 +207,14 @@ for _ in range(100): assert re.search(r'^[A-Z]{3}\d{6}$', self.factory.identity_card_number()) + def test_pesel_number_checksum(self): + assert pl_checksum_pesel_number('31090655159') is True + assert pl_checksum_pesel_number('95030853577') is True + assert pl_checksum_pesel_number('05260953442') is True + assert pl_checksum_pesel_number('31090655158') is False + assert pl_checksum_pesel_number('95030853576') is False + assert pl_checksum_pesel_number('05260953441') is False + class TestCsCZ(unittest.TestCase): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/tests/providers/test_python.py new/Faker-1.0.7/tests/providers/test_python.py --- old/Faker-1.0.5/tests/providers/test_python.py 2019-04-12 17:10:07.000000000 +0200 +++ new/Faker-1.0.7/tests/providers/test_python.py 2019-04-15 17:10:34.000000000 +0200 @@ -5,6 +5,33 @@ from faker import Faker +class TestPyint(unittest.TestCase): + def setUp(self): + self.factory = Faker() + + def test_pyint(self): + self.assertIsInstance(self.factory.pyint(), int) + + def test_pyint_bounds(self): + self.assertTrue(0 <= self.factory.pyint() <= 9999) + + def test_pyint_step(self): + random_int = self.factory.pyint(step=2) + self.assertEqual(0, random_int % 2) + + def test_pyint_bound_0(self): + self.assertEqual(0, self.factory.pyint(min=0, max=0)) + + def test_pyint_bound_positive(self): + self.assertEqual(5, self.factory.pyint(min=5, max=5)) + + def test_pyint_bound_negative(self): + self.assertEqual(-5, self.factory.pyint(min=-5, max=-5)) + + def test_pyint_range(self): + self.assertTrue(0 <= self.factory.pyint(min=0, max=2) <= 2) + + class TestPyfloat(unittest.TestCase): def setUp(self): self.factory = Faker() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/tests/providers/test_ssn.py new/Faker-1.0.7/tests/providers/test_ssn.py --- old/Faker-1.0.5/tests/providers/test_ssn.py 2019-03-12 16:19:53.000000000 +0100 +++ new/Faker-1.0.7/tests/providers/test_ssn.py 2019-05-08 18:02:39.000000000 +0200 @@ -268,6 +268,92 @@ self.factory.ssn(taxpayer_identification_number_type='ssn') +def nif_nie_validation(doi, number_by_letter, special_cases): + """ + Validate if the doi is a NIF or a NIE. + :param doi: DOI to validate. + :return: boolean if it's valid. + """ + doi = doi.upper() + if doi in special_cases: + return False + + table = 'TRWAGMYFPDXBNJZSQVHLCKE' + + if len(doi) == 9: + control = doi[8] + + # If it is not a DNI, convert the first letter to the corresponding digit + numbers = number_by_letter.get(doi[0], doi[0]) + doi[1:8] + + return numbers.isdigit() and control == table[int(numbers) % 23] + + return False + + +def is_cif(doi): + """ + Validate if the doi is a CIF. + :param doi: DOI to validate. + :return: boolean if it's valid. + """ + doi = doi.upper() + + if len(doi) != 9: + return False + + table = 'JABCDEFGHI' + first_chr = doi[0] + doi_body = doi[1:8] + control = doi[8] + + if not doi_body.isdigit(): + return False + + # Multiply each each odd position doi digit by 2 and sum it all together + odd_result = sum(int(x) for x in ''.join(str(int(x) * 2) for x in doi_body[0::2])) + # Sum all even doi digits + even_result = sum(map(int, doi_body[1::2])) + + res = (10 - (even_result + odd_result) % 10) % 10 + + if first_chr in 'ABEH': # Number type + return str(res) == control + elif first_chr in 'PSQW': # Letter type + return table[res] == control + elif first_chr not in 'CDFGJNRUV': + return False + + return control == str(res) or control == table[res] + + +def is_nif(doi): + """ + Validate if the doi is a NIF. + :param doi: DOI to validate. + :return: boolean if it's valid. + """ + number_by_letter = {'L': '0', 'M': '0', 'K': '0'} + special_cases = ['X0000000T', '00000000T', '00000001R', '00000001R'] + return nif_nie_validation(doi, number_by_letter, special_cases) + + +def is_nie(doi): + """ + Validate if the doi is a NIE. + :param doi: DOI to validate. + :return: boolean if it's valid. + """ + number_by_letter = {'X': '0', 'Y': '1', 'Z': '2'} + special_cases = ['X0000000T'] + + # NIE must must start with X Y or Z + if not doi or doi[0] not in number_by_letter.keys(): + return False + + return nif_nie_validation(doi, number_by_letter, special_cases) + + class TestEsES(unittest.TestCase): def setUp(self): self.factory = Faker('es_ES') @@ -276,6 +362,26 @@ for _ in range(100): assert re.search(r'^ES\w\d{8}$|^ES\d{8}\w$|^ES\w\d{7}\w$', self.factory.vat_id()) + def test_nie(self): + for _ in range(100): + assert is_nie(self.factory.nie()) + + def test_nif(self): + for _ in range(100): + assert is_nif(self.factory.nif()) + + def test_cif(self): + for _ in range(100): + assert is_cif(self.factory.cif()) + + def test_doi(self): + assert len(self.factory.doi()) == 9 + + +class TestEsCA(TestEsES): + def setUp(self): + self.factory = Faker('es_CA') + class TestEtEE(unittest.TestCase): """ Tests SSN in the et_EE locale """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Faker-1.0.5/tests/test_factory.py new/Faker-1.0.7/tests/test_factory.py --- old/Faker-1.0.5/tests/test_factory.py 2019-03-05 21:15:19.000000000 +0100 +++ new/Faker-1.0.7/tests/test_factory.py 2019-05-14 17:28:28.000000000 +0200 @@ -410,6 +410,30 @@ assert word not in checked_words checked_words.append(word) + def test_texts_count(self): + faker = Faker() + + texts_count = 5 + assert texts_count == len(faker.texts(nb_texts=texts_count)) + + def test_texts_chars_count(self): + faker = Faker() + + chars_count = 5 + for faker_text in faker.texts(max_nb_chars=chars_count): + assert chars_count >= len(faker_text) + + def test_texts_word_list(self): + faker = Faker() + + word_list = [ + 'test', + 'faker', + ] + for faker_text in faker.texts(ext_word_list=word_list): + for word in word_list: + assert word in faker_text.lower() + def test_random_pystr_characters(self): from faker.providers.python import Provider provider = Provider(self.generator) @@ -436,6 +460,13 @@ with pytest.raises(ValueError): provider.pyfloat(left_digits=0, right_digits=0) + def test_negative_pyfloat(self): + # tests for https://github.com/joke2k/faker/issues/813 + factory = Faker() + factory.seed_instance(32167) + assert any(factory.pyfloat(left_digits=0, positive=False) < 0 for _ in range(100)) + assert any(factory.pydecimal(left_digits=0, positive=False) < 0 for _ in range(100)) + def test_us_ssn_valid(self): from faker.providers.ssn.en_US import Provider
