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
 


Reply via email to