Repository: joke2k/faker

Issue:
Add method to generate a cell phone number to pt-BR
Faker doesn't have a function to generate a cellphone to Brazilian.

Steps to reproduce
Create fake instance using localization "pt_BR"
Call fake.msisdn() or fake.phone_number()
Expected behavior
It should generate a cell phone number.

Actual behavior
Sometimes these methods return a "residential" numbers.

Reference difference between cell phones and residential numbers:

http://www.teleco.com.br/num.asp

Comments:

Patch:
diff --git a/faker/providers/internet/__init__.py b/faker/providers/internet/__init__.py
index 30c1fed4..e256c8a5 100644
--- a/faker/providers/internet/__init__.py
+++ b/faker/providers/internet/__init__.py
@@ -111,7 +111,7 @@ class Provider(BaseProvider):
         '{{url}}{{uri_path}}/{{uri_page}}{{uri_extension}}',
     )
     image_placeholder_services = (
-        'https://placeholdit.imgix.net/~text',
+        '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}',
diff --git a/faker/providers/job/th_TH/__init__.py b/faker/providers/job/th_TH/__init__.py
new file mode 100644
index 00000000..35ea47c6
--- /dev/null
+++ b/faker/providers/job/th_TH/__init__.py
@@ -0,0 +1,89 @@
+# coding=utf-8
+from __future__ import unicode_literals
+from .. import Provider as BaseProvider
+
+
+# Reference:
+# https://th.wikipedia.org/wiki/หมวดหมู่:บุคคลแบ่งตามอาชีพ
+# on 2018-10-16
+class Provider(BaseProvider):
+    jobs = [
+        'นักกฎหมาย',
+        'กวี',
+        'นักการทูต',
+        'นักการเมือง',
+        'นักการศึกษา',
+        'นักกีฬา',
+        'นักการกุศล',
+        'เกษตรกร',
+        'นักเขียน',
+        'ข้าราชการ',
+        'นักคณิตศาสตร์',
+        'คนขับรถแท็กซี่',
+        'โฆษก',
+        'จ๊อกกี้',
+        'นักจัดรายการวิทยุ',
+        'จารชน',
+        'จิตรกร',
+        'นักจิตวิทยา',
+        'เจ้าหน้าทีรักษาความปลอดภัย',
+        'เจ้าหน้าที่รัฐบาล',
+        'ช่างทำเครื่องดนตรี',
+        'ช่างทำผม',
+        'นักชีววิทยา',
+        'นักดนตรี',
+        'นักดาราศาสตร์',
+        'นักแต่งเพลง',
+        'ตำรวจ',
+        'นักถ่ายภาพ',
+        'ทนายความ',
+        'ทหารบก',
+        'นักธุรกิจ',
+        'นักเคลื่อนไหว',
+        'นักบวช',
+        'นักบิน',
+        'นักบินอวกาศ',
+        'นักประชาสัมพันธ์',
+        'นักผจญภัย',
+        'นักสะสมศิลปะ',
+        'นักแสดง',
+        'นักหนังสือพิมพ์',
+        'นางงาม',
+        'นางแบบ',
+        'นายแบบ',
+        'บรรณาธิการ',
+        'นักโบราณคดี',
+        'นักแปล',
+        'นักประดิษฐ์',
+        'นักประวัติศาสตร์',
+        'นักปรัชญา',
+        'ผู้กำกับ',
+        'ผู้กำกับภาพยนตร์',
+        'ผู้กำกับละครโทรทัศน์',
+        'ผู้จัดพิมพ์',
+        'นักพจนานุกรม',
+        'แพทย์',
+        'นักพากย์',
+        'พิธีกร',
+        'นักโภชนาการ',
+        'นักภาษาศาสตร์',
+        'เภสัชกร',
+        'มัคคุเทศก์',
+        'นักมายากล',
+        'นักวาดการ์ตูน',
+        'นักวิทยาศาสตร์',
+        'วิศวกร',
+        'วีเจ',
+        'นักเศรษฐศาสตร์',
+        'ศิลปิน',
+        'สถาปนิก',
+        'นักสังคมวิทยา',
+        'นักสังคมศาสตร์',
+        'นักสัตววิทยา',
+        'นักสำรวจ',
+        'นักสืบ',
+        'นักอนุรักษ์ธรรมชาติ',
+        'นักออกแบบ',
+        'อัยการ',
+        'โปรแกรมเมอร์',
+    ]
diff --git a/faker/providers/phone_number/pt_BR/__init__.py b/faker/providers/phone_number/pt_BR/__init__.py
index 95707ba6..ca3efbd3 100644
--- a/faker/providers/phone_number/pt_BR/__init__.py
+++ b/faker/providers/phone_number/pt_BR/__init__.py
@@ -71,6 +71,7 @@ class Provider(PhoneNumberProvider):
         '#### ####',
         '####-####',
     )
+
     msisdn_formats = (
         '5511#########',
         '5521#########',
@@ -81,3 +82,11 @@ class Provider(PhoneNumberProvider):
         '5571#########',
         '5581#########',
     )
+
+    cellphone_formats = (
+        '+55 9#### ####',
+    )
+
+    def cellphone_number(self):
+        pattern = self.random_element(self.cellphone_formats)
+        return self.numerify(self.generator.parse(pattern))


Test patch:
diff --git a/tests/providers/test_phone_number.py b/tests/providers/test_phone_number.py
index 156082cb..572e80d7 100644
--- a/tests/providers/test_phone_number.py
+++ b/tests/providers/test_phone_number.py
@@ -64,6 +64,12 @@ class TestPhoneNumber(unittest.TestCase):
         assert msisdn.isdigit()
         assert msisdn[0:4] in formats
 
+    def test_cellphone_pt_br(self):
+        factory = Faker('pt_BR')
+        cellphone = factory.cellphone_number()
+        assert cellphone is not None
+        assert len(cellphone) == 14
+
 
 class TestHuHU(unittest.TestCase):