Repository: joke2k/faker

Issue:
dk_DK output is wrong.
* Faker version: 4.0.2
* OS: MAC

Almost all providers for dk_DK output wrong data. I have attached a list which will make it possible to correct this issue.

Sorry about this danish descriptions, i could not find english versions - possibly use google translator to read.

Thanks

<pre>
#### fake.address() ####
Description: 
https://www.postnord.dk/sende/praktik/udformningafbreve/adressering
https://danmarksadresser.dk/regler-og-vejledning/

Data of street names in denmark
http://dawa.aws.dk/vejstykker?format=json
(csv and json)

Current output:
'36192 Carlo Plains\nNew Samhaven, DC 76441'

Real format:
Streetname streetnumber
zipcode cityname

Correct Example:
Kastanjevej 38
2832 Solvang

#### fake.building_number() ####
Description: Looks ok, but never prepend zeros.
Numbers don’t go higher than 1000

Current output:
'02650'

Real format:
xxxx

Correct Example:
123

#### fake.city() ####
Description:
See https://pastebin.com/NcLj96e7 for a pretty and 
easily accessible list of zipcode => city. (Here is an
alternative: http://www.nr.dk/danmark.html )
Current output does not look danish at all, however 
format is ok

Current output:
'Marianneview'

Real format:
Cityname

Correct Example:
Kalundborg

#### fake.city_prefix() ####
We dont have city-prefix in Denmark

#### fake.city_suffix() ####
# 'land'
We dont have city-suffix in Denmark

fake.country()
# 'Turks and Caicos Islands'
Description: Wrong country names

See a complete list of correct names here:
https://paste.ubuntu.com/p/MCgfvMSgzy/

fake.country_code(representation='alpha-2')
# 'TT'
# Looks correct

fake.military_apo()
# 'PSC 0683, Box 2308'
We dont have that in Denmark

fake.military_dpo()
# 'Unit 2847 Box 2875'
We dont have that in Denmark

fake.military_ship()
# 'USCGC'
We dont have that in Denmark

fake.military_state()
# 'AA'
Not sure what this is

fake.postalcode()
# '42407'
Should be in the format 
####, minimum number is 1000. 
See https://pastebin.com/NcLj96e7 for a complete 
list

fake.postalcode_in_state(state_abbr=None)
# '87238'
We don’t have this in Denmark

fake.postalcode_plus4()
# '32765-7452'
Not sure about this

fake.postcode()
# '89418'
See fake.postalcode()

fake.postcode_in_state(state_abbr=None)
# '73182'
We don’t have this in Denmark

fake.secondary_address()
# 'Apt. 687'
Not sure about this

fake.state()
# 'Alabama'
There are no states in Denmark

fake.state_abbr(include_territories=True)
# 'NM'
There are no states in Denmark

fake.street_address()
# '537 Frandsen Path Suite 609'
See https://www.postnord.dk/sende/praktik/udformningafbreve/
for correct format

fake.street_name()
# 'Jeppesen Well'
See https://www.postnord.dk/sende/praktik/udformningafbreve/
for correct format

fake.street_suffix()
# 'Locks'
We don’t have this in Denmark

fake.zipcode()
# '46840'
See https://pastebin.com/NcLj96e7 for a complete list

fake.zipcode_in_state(state_abbr=None)
# '73129'
There are no states in Denmark

fake.zipcode_plus4()
# '60581-2946'
Not sure about this
</pre>

Discussion:
JoseNavy: After watching the errors in the CI, the tests that are not passing trough are the ones that I wrote. The error message shows the following: "`Invalid configuration for faker locale Dk_Dk`". But the provider dk_DK already exists. Is there another file that I need to edit so that this new provider can be found? 

Patch:
diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index 9484d411..831c984e 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 5.0.2
+current_version = 5.3.0
 files = VERSION faker/__init__.py docs/conf.py
 commit = True
 tag = True
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7536b0b5..1ab6edd7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,17 @@
 ## Changelog
 
+### [5.3.0 - 2020-12-30](https://github.com/joke2k/faker/compare/v5.3.0...v5.2.0)
+
+* ``json`` and ``fixed_width`` now allow for strings to be fixed or pinned to a static value by prepending ``@``. Thanks @johnbrandborg.
+
+### [5.2.0 - 2020-12-30](https://github.com/joke2k/faker/compare/v5.2.0...v5.1.0)
+
+* Add ``en_IN`` address + phone number provider. Thanks @pulkitgupta2k.
+
+### [5.1.0 - 2020-12-28](https://github.com/joke2k/faker/compare/v5.1.0...v5.0.1)
+
+* Add ``en_IN`` person provider. Thanks @pulkitgupta2k.
+
 ### [5.0.2 - 2020-12-15](https://github.com/joke2k/faker/compare/v5.0.1...v5.0.2)
 
 * Remove invalid surname in `nl_NL`. Thanks @TheoSinnige.
@@ -11,7 +23,7 @@
 ### [5.0.0 - 2020-12-03](https://github.com/joke2k/faker/compare/v4.18.0...v5.0.0)
 
 * Drop support for Python 3.5. Thanks @cclaus.
-* Add support fro Python 3.9. Thanks @cclaus.
+* Add support for Python 3.9. Thanks @cclaus.
 
 ### [4.18.0 - 2020-11-30](https://github.com/joke2k/faker/compare/v4.17.1...v4.18.0)
 
diff --git a/VERSION b/VERSION
index a1ef0cae..03f488b0 100644
--- a/VERSION
+++ b/VERSION
@@ -1,1 +1,1 @@
-5.0.2
+5.3.0
diff --git a/docs/conf.py b/docs/conf.py
index 93eef3eb..b2de611f 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -51,9 +51,9 @@ copyright = '2014, Daniele Faraglia'
 # built documents.
 #
 # The short X.Y version.
-version = '5.0.2'
+version = '5.3.0'
 # The full version, including alpha/beta/rc tags.
-release = '5.0.2'
+release = '5.3.0'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/faker/__init__.py b/faker/__init__.py
index 3ff5de8f..00c25dcd 100644
--- a/faker/__init__.py
+++ b/faker/__init__.py
@@ -2,6 +2,6 @@ from faker.factory import Factory
 from faker.generator import Generator
 from faker.proxy import Faker
 
-VERSION = '5.0.2'
+VERSION = '5.3.0'
 
 __all__ = ('Factory', 'Generator', 'Faker')
diff --git a/faker/providers/address/da_DK/__init__.py b/faker/providers/address/da_DK/__init__.py
new file mode 100644
index 00000000..593a3ef3
--- /dev/null
+++ b/faker/providers/address/da_DK/__init__.py
@@ -0,0 +1,107 @@
+from .. import Provider as AddressProvider
+
+
+class Provider(AddressProvider):
+
+    # Building numbers dont go higher than a 1000
+    building_number_formats = ('%##', '%#', '%')
+
+    street_name_formats = ('{{street_prefix}} {{street_suffix}}', )
+
+    street_address_formats = ('{{street_name}} {{building_number}}',)
+
+    street_prefixes = (
+        'Gade', 'Allé', 'Parkere', 'Baggade', 'Gyde', 'Motorvej',
+    )
+
+    street_suffixes = (
+        'Åbenrå', 'Adelgade', 'Lavendelstræde', 'Nygade', 'Pilestræde',
+        'Rigensgade', 'Silkegade', 'Toldbodgade', 'Blekingegade',
+        'Amalievej', 'Bülowsvej', 'Godthåbsvej', 'Howitzvej',
+        'Kingosgade', 'Martinsvej', 'Rolighedsvej', 'Schønbergsgade',
+        'Åboulevard', 'Ewaldsgade', 'Heinesgade', 'Kapelvej',
+    )
+
+    address_formats = ("{{street_address}}\n{{postcode}} {{city}}", )
+
+    # Postcode should be formatted as described in http://www.nr.dk/danmark.html
+    postcode_formats = ('%###', )
+
+    city_formats = ('{{city_name}}', )
+
+    cities = (
+        'Copenhagen', 'Aarhus', 'Odense', 'Aalborg', 'Esbjerg', 'Randers',
+        'Kolding', 'Horsens', 'Vejle', 'Roskilde', 'Herning', 'Hørsholm',
+        'Elsinore', 'Silkeborg', 'Næstved', 'Fredericia', 'Viborg', 'Køge',
+        'Holstebro', 'Taastrup', 'Slagelse', 'Hillerød', 'Holbæk', 'Sønderborg',
+        'Svendborg', 'Hjørring', 'Frederikshavn', 'Nørresundby', 'Ringsted',
+        'Haderslev', 'Stenløse', 'Skive', 'Birkerød', 'Farum', 'Smørumnedre',
+        'Skanderborg', 'Nyborg', 'Nykøbing F', 'Lillerød', 'Kalundborg',
+        'Frederikssund', 'Aabenraa', 'Solrød Strand', 'Ikast', 'Middelfart',
+        'Grenaa', 'Korsør', 'Varde', 'Rønne', 'Thisted',
+    )
+
+    countries = (
+        'Afghanistan', 'Albanien', 'Algeriet', 'Amerikanska Samoa', 'Andorra',
+        'Angola', 'Anguilla', 'Antarktis', 'Antigua och Barbuda', 'Argentina',
+        'Armenien', 'Aruba', 'Ascension', 'Australien', 'Azerbajdzjan',
+        'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Belgien',
+        'Belize', 'Benin', 'Bermuda', 'Bhutan', 'Bolivia', 'Bosnien och Hercegovina',
+        'Botswana', 'Brasilien', 'Brittiska Jungfruöarna', 'Brunei',
+        'Bulgarien', 'Burkina Faso', 'Burma', 'Burundi', 'Caymanöarna',
+        'Centralafrikanska republiken', 'Chile', 'Colombia', 'Cooköarna',
+        'Costa Rica', 'Cypern', 'Danmark', 'Diego Garcia', 'Djibouti',
+        'Dominica', 'Dominikanska republiken', 'Ecuador', 'Egypten',
+        'Ekvatorialguinea', 'Elfenbenskusten', 'El Salvador', 'Eritrea',
+        'Estland', 'Etiopien', 'England', 'Falklandsöarna', 'Fiji',
+        'Filippinerna', 'Finland', 'Frankrike', 'Franska Guyana',
+        'Franska Polynesien', 'Färöarna', 'Förenade Arabemiraten', 'Gabon',
+        'Gambia', 'Georgien', 'Ghana', 'Gibraltar', 'Grekland', 'Grenada',
+        'Grönland', 'Guadeloupe', 'Guatemala', 'Guinea', 'Guinea-Bissau',
+        'Guyana', 'Haiti', 'Honduras', 'Hongkong', 'Indien', 'Indonesien',
+        'Irak', 'Iran', 'Irland', 'Island', 'Israel', 'Italien', 'Jamaica',
+        'Japan', 'Jemen', 'Jordanien', 'Kambodja', 'Kamerun', 'Kanada',
+        'Kap Verde', 'Kazakstan', 'Kenya', 'Kina', 'Kirgizistan', 'Kiribati',
+        'Komorerna', 'Kongo-Brazzaville', 'Kongo-Kinshasa', 'Kosovo',
+        'Kroatien', 'Kuba', 'Kuwait', 'Laos', 'Lesotho', 'Lettland', 'Libanon',
+        'Liberia', 'Libyen', 'Liechtenstein', 'Litauen', 'Luxemburg', 'Macao',
+        'Madagaskar', 'Makedonien', 'Malawi', 'Malaysia', 'Maldiverna', 'Mali',
+        'Malta', 'Marianerna', 'Marocko', 'Marshallöarna', 'Martinique',
+        'Mauretanien', 'Mauritius', 'Mayotte', 'Mexiko', 'Midwayöarna',
+        'Mikronesiens federerade stater', 'Moçambique', 'Moldavien', 'Monaco',
+        'Mongoliet', 'Montenegro', 'Montserrat', 'Namibia', 'Nauru',
+        'Nederländerna', 'Nederländska Antillerna', 'Nepal',
+        'Nicaragua', 'Niger', 'Nigeria', 'Niue', 'Nordkorea', 'Nordmarianerna',
+        'Norfolkön', 'Norge', 'Nya Kaledonien', 'Nya Zeeland', 'Oman',
+        'Pakistan', 'Palau', 'Palestina', 'Panama', 'Papua Nya Guinea',
+        'Paraguay', 'Peru', 'Pitcairnöarna', 'Polen', 'Portugal', 'Qatar',
+        'Réunion', 'Rumänien', 'Rwanda', 'Ryssland', 'Saint Kitts och Nevis',
+        'Saint Lucia', 'Saint-Pierre och Miquelon',
+        'Saint Vincent och Grenadinerna', 'Salomonöarna', 'Samoa',
+        'Sankta Helena', 'San Marino', 'São Tomé och Príncipe',
+        'Saudiarabien', 'Schweiz', 'Senegal', 'Serbien', 'Seychellerna',
+        'SierraLeone', 'Singapore', 'Sint Maarten', 'Slovakien', 'Slovenien',
+        'Somalia', 'Spanien', 'Sri Lanka', 'Storbritannien', 'Sudan',
+        'Surinam', 'Sverige', 'Swaziland', 'Sydafrika', 'Sydkorea', 'Sydsudan',
+        'Syrien', 'Tadzjikistan', 'Taiwan', 'Tanzania', 'Tchad', 'Thailand',
+        'Tjeckien', 'Togo', 'Tokelauöarna', 'Tonga', 'Trinidad och Tobago',
+        'Tunisien', 'Turkiet', 'Turkmenistan', 'Turks-och Caicosöarna',
+        'Tuvalu', 'Tyskland', 'Uganda', 'Ukraina', 'Ungern', 'Uruguay', 'USA',
+        'Uzbekistan', 'Vanuatu', 'Vatikanstaten', 'Venezuela', 'Vietnam',
+        'Wake', 'Wallis-och Futunaöarna', 'Zambia', 'Zimbabwe',
+        'Österrike', 'Östtimor',
+    )
+
+    # Known as regions in Denmark
+    states = (
+        'Hovedstaden', 'Midtjylland', 'Nordjylland', 'Sjælland', 'Syddanmark',
+    )
+
+    def street_prefix(self):
+        return self.random_element(self.street_prefixes)
+
+    def city_name(self):
+        return self.random_element(self.cities)
+
+    def state(self):
+        return self.random_element(self.states)
diff --git a/faker/providers/address/en_IN/__init__.py b/faker/providers/address/en_IN/__init__.py
new file mode 100644
index 00000000..fa264f7b
--- /dev/null
+++ b/faker/providers/address/en_IN/__init__.py
@@ -0,0 +1,399 @@
+from .. import Provider as AddressProvider
+
+
+class Provider(AddressProvider):
+    # City and States names taken from wikipedia
+    # Street format taken from some common famous places in India
+    # Link for cities: https://en.wikipedia.org/wiki/List_of_cities_in_India_by_population
+    # Link for States: https://en.wikipedia.org/wiki/States_and_union_territories_of_India
+    # Links for street name formats: https://www.mumbai77.com/city/3313/travel/old-new-street-names/
+
+    city_formats = ('{{city_name}}', )
+
+    street_name_formats = (
+        '{{last_name}} Nagar',
+        '{{last_name}} Zila',
+        '{{last_name}} Street',
+        '{{last_name}} Ganj',
+        '{{last_name}} Road',
+        '{{last_name}} Path',
+        '{{last_name}} Marg',
+        '{{last_name}} Chowk',
+        '{{last_name}} Circle',
+        '{{last_name}}',
+    )
+
+    street_address_formats = (
+        '{{building_number}}, {{street_name}}',
+        '{{building_number}}\n{{street_name}}',
+    )
+
+    address_formats = (
+        '{{street_address}}\n{{city}} {{postcode}}',
+        '{{street_address}}\n{{city}}-{{postcode}}',
+        '{{street_address}}, {{city}} {{postcode}}',
+        '{{street_address}}, {{city}}-{{postcode}}',
+    )
+
+    building_number_formats = (
+        'H.No. ###', '###', 'H.No. ##', '##', '##/##', "##/###")
+
+    postcode_formats = ('######', )
+
+    cities = (
+        'Mumbai',
+        'Delhi',
+        'Kolkata',
+        'Chennai',
+        'Bangalore',
+        'Hyderabad',
+        'Ahmedabad',
+        'Kanpur',
+        'Pune',
+        'Surat',
+        'Jaipur',
+        'Lucknow',
+        'Nagpur',
+        'Indore',
+        'Bhopal',
+        'Ludhiana',
+        'Patna',
+        'Visakhapatnam',
+        'Vadodara',
+        'Agra',
+        'Thane',
+        'Kalyan-Dombivli',
+        'Varanasi',
+        'Ranchi',
+        'Nashik',
+        'Dhanbad',
+        'Faridabad',
+        'Meerut',
+        'Pimpri-Chinchwad',
+        'Howrah',
+        'Allahabad',
+        'Ghaziabad',
+        'Rajkot',
+        'Amritsar',
+        'Jabalpur',
+        'Coimbatore',
+        'Madurai',
+        'Srinagar',
+        'Aurangabad',
+        'Solapur',
+        'Vijayawada',
+        'Jodhpur',
+        'Gwalior',
+        'Guwahati',
+        'Chandigarh',
+        'Hubli–Dharwad',
+        'Mysore',
+        'Tiruchirappalli',
+        'Bareilly',
+        'Jalandhar',
+        'Navi Mumbai',
+        'Salem',
+        'Kota',
+        'Vasai-Virar',
+        'Aligarh',
+        'Moradabad',
+        'Bhubaneswar',
+        'Gorakhpur',
+        'Raipur',
+        'Bhiwandi',
+        'Kochi',
+        'Jamshedpur',
+        'Bhilai',
+        'Amravati',
+        'Cuttack',
+        'Warangal',
+        'Bikaner',
+        'Mira-Bhayandar',
+        'Guntur',
+        'Bhavnagar',
+        'Durgapur',
+        'Kolhapur',
+        'Ajmer',
+        'Asansol',
+        'Ulhasnagar',
+        'Siliguri',
+        'Jalgaon',
+        'Saharanpur',
+        'Jamnagar',
+        'Bhatpara',
+        'Sangli-Miraj & Kupwad',
+        'Kozhikode',
+        'Nanded',
+        'Ujjain',
+        'Dehradun',
+        'Rourkela',
+        'Gulbarga',
+        'Tirunelveli',
+        'Malegaon',
+        'Akola',
+        'Belgaum',
+        'Mangalore',
+        'Bokaro',
+        'South Dumdum',
+        'Udaipur',
+        'Gaya',
+        'Maheshtala',
+        'Jhansi',
+        'Nellore',
+        'Jammu',
+        'Thiruvananthapuram',
+        'Davanagere',
+        'Kollam',
+        'Panihati',
+        'Kurnool',
+        'Tiruppur',
+        'Dhule',
+        'Bhagalpur',
+        'Rajpur Sonarpur',
+        'Kakinada',
+        'Thrissur',
+        'Bellary',
+        'Muzaffarnagar',
+        'Korba',
+        'Rajahmundry',
+        'Kamarhati',
+        'Ambattur',
+        'Berhampur',
+        'Ahmednagar',
+        'Muzaffarpur',
+        'Noida',
+        'Patiala',
+        'Mathura',
+        'New Delhi',
+        'Latur',
+        'Sambalpur',
+        'Shahjahanpur',
+        'Kulti',
+        'Chandrapur',
+        'Nizamabad',
+        'Rohtak',
+        'Bardhaman',
+        'Rampur',
+        'Bhilwara',
+        'Firozabad',
+        'Bilaspur',
+        'Shimoga',
+        'Agartala',
+        'Gopalpur',
+        'Darbhanga',
+        'Panipat',
+        'Bally',
+        'Alwar',
+        'Parbhani',
+        'Ichalkaranji',
+        'Anantapuram',
+        'Baranagar',
+        'Tumkur',
+        'Ramagundam',
+        'Jalna',
+        'Durg',
+        'Sagar',
+        'Bihar Sharif',
+        'Dewas',
+        'Barasat',
+        'Avadi',
+        'Farrukhabad',
+        'Aizawl',
+        'Tirupati',
+        'Bijapur',
+        'Satara',
+        'Satna',
+        'Ratlam',
+        'Imphal',
+        'Pondicherry',
+        'North Dumdum',
+        'Anantapur',
+        'Khammam',
+        'Ozhukarai',
+        'Bathinda',
+        'Thoothukudi',
+        'Thanjavur',
+        'Naihati',
+        'Sonipat',
+        'Mau',
+        'Tiruvottiyur',
+        'Hapur',
+        'Sri Ganganagar',
+        'Karnal',
+        'Etawah',
+        'Nagercoil',
+        'Raichur',
+        'Raurkela Industrial Township',
+        'Secunderabad',
+        'Karimnagar',
+        'Mirzapur',
+        'Bharatpur',
+        'Ambarnath',
+        'Arrah',
+        'Uluberia',
+        'Serampore',
+        'Dindigul',
+        'Gandhinagar',
+        'Burhanpur',
+        'Nadiad',
+        'Eluru',
+        'Yamunanagar',
+        'Kharagpur',
+        'Munger',
+        'Pali',
+        'Katni',
+        'Singrauli',
+        'Tenali',
+        'Sikar',
+        'Silchar',
+        'Rewa',
+        'Sambhal',
+        'Machilipatnam',
+        'Vellore',
+        'Alappuzha',
+        'Bulandshahr',
+        'Haridwar',
+        'Vijayanagaram',
+        'Erode',
+        'Gurgaon',
+        'Bidar',
+        'Bhusawal',
+        'Khandwa',
+        'Purnia',
+        'Haldia',
+        'Chinsurah',
+        'Bhiwani',
+        'Raebareli',
+        'Junagadh',
+        'Bahraich',
+        'Gandhidham',
+        'Mango',
+        'Raiganj',
+        'Amroha',
+        'Sultan Pur Majra',
+        'Hospet',
+        'Bidhannagar',
+        'Malda',
+        'Sirsa',
+        'Berhampore',
+        'Jaunpur',
+        'Surendranagar Dudhrej',
+        'Madhyamgram',
+        'Kirari Suleman Nagar',
+        'Bhind',
+        'Nandyal',
+        'Chittoor',
+        'Bhalswa Jahangir Pur',
+        'Fatehpur',
+        'Morena',
+        'Nangloi Jat',
+        'Ongole',
+        'Karawal Nagar',
+        'Shivpuri',
+        'Morbi',
+        'Unnao',
+        'Pallavaram',
+        'Kumbakonam',
+        'Shimla',
+        'Mehsana',
+        'Panchkula',
+        'Orai',
+        'Ambala',
+        'Dibrugarh',
+        'Guna',
+        'Danapur',
+        'Sasaram',
+        'Anand',
+        'Kottayam',
+        'Hazaribagh',
+        'Kadapa',
+        'Saharsa',
+        'Nagaon',
+        'Loni',
+        'Hajipur',
+        'Dehri',
+        'Bettiah',
+        'Katihar',
+        'Deoghar',
+        'Jorhat',
+        'Siwan',
+        'Panvel',
+        'Hosur',
+        'Tinsukia',
+        'Bongaigaon',
+        'Motihari',
+        'Jamalpur',
+        'Suryapet',
+        'Begusarai',
+        'Miryalaguda',
+        'Proddatur',
+        'Karaikudi',
+        'Kishanganj',
+        'Phusro',
+        'Buxar',
+        'Tezpur',
+        'Jehanabad',
+        'Aurangabad',
+        'Chapra',
+        'Ramgarh',
+        'Gangtok',
+        'Adoni',
+        'Amaravati',
+        'Ballia',
+        'Bhimavaram',
+        'Dharmavaram',
+        'Giridih',
+        'Gudivada',
+        'Guntakal',
+        'Hindupur',
+        'Kavali',
+        'Khora ',
+        'Ghaziabad',
+        'Madanapalle',
+        'Mahbubnagar',
+        'Medininagar',
+        'Narasaraopet',
+        'Phagwara',
+        'Pudukkottai',
+        'Srikakulam',
+        'Tadepalligudem',
+        'Tadipatri',
+        'Udupi',
+    )
+
+    states = (
+        'Andhra Pradesh',
+        'Arunachal Pradesh',
+        'Assam',
+        'Bihar',
+        'Chhattisgarh',
+        'Goa',
+        'Gujarat',
+        'Haryana',
+        'Himachal Pradesh',
+        'Jharkhand',
+        'Karnataka',
+        'Kerala',
+        'Madhya Pradesh',
+        'Maharashtra',
+        'Manipur',
+        'Meghalaya',
+        'Mizoram',
+        'Nagaland',
+        'Odisha',
+        'Punjab',
+        'Rajasthan',
+        'Sikkim',
+        'Tamil Nadu',
+        'Telangana',
+        'Tripura',
+        'Uttar Pradesh',
+        'Uttarakhand',
+        'West Bengal',
+    )
+
+    def city_name(self):
+        return self.random_element(self.cities)
+
+    def state(self):
+        return self.random_element(self.states)
diff --git a/faker/providers/misc/__init__.py b/faker/providers/misc/__init__.py
index cb129ce5..68ca213d 100644
--- a/faker/providers/misc/__init__.py
+++ b/faker/providers/misc/__init__.py
@@ -2,6 +2,7 @@ import csv
 import hashlib
 import io
 import json
+import re
 import string
 import tarfile
 import uuid
@@ -399,12 +400,12 @@ class Provider(BaseProvider):
         data structures it is recommended to use the dictionary format.
 
         Data Column Dictionary format:
-            {'key name': 'definition'}}
+            {'key name': 'definition'}
 
-        The definition can simply be the 'name:argument_group' of a provider
-        method, or can also be string {{ tokens }} that are passed to python
-        provider pystr_format() method for complex string generation.
-        Argument Groups are used to pass arguments to the provider methods.
+        The definition can be 'provider', 'provider:argument_group', tokenized
+        'string {{ provider:argument_group }}' that is passed to the python
+        provider method pystr_format() for generation, or a fixed '@word'.
+        Using Lists, Tuples, and Dicts as a definition for structure.
 
         Example:
             fake.set_arguments('top_half', {'min_value': 50, 'max_value': 100})
@@ -426,8 +427,8 @@ class Provider(BaseProvider):
         :return: Serialized JSON data
         :rtype: str
 
-        :sample: data_columns={'ID': 'pyint', 'Details': {'Name': 'name',
-                'Address': 'address'}}, num_rows=1
+        :sample: data_columns={'Spec': '@1.0.1', 'ID': 'pyint',
+                'Details': {'Name': 'name', 'Address': 'address'}}, num_rows=2
         :sample: data_columns={'Candidates': ['name', 'name', 'name']},
                 num_rows=1
         :sample: data_columns=[('Name', 'name'), ('Points', 'pyint',
@@ -449,7 +450,7 @@ class Provider(BaseProvider):
                     raise TypeError('Invalid arguments type. Must be a dictionary')
 
                 if name is None:
-                    return self._format_selection(definition, **kwargs)
+                    return self._value_format_selection(definition, **kwargs)
 
                 if isinstance(definition, tuple):
                     entry[name] = process_list_structure(definition)
@@ -457,28 +458,27 @@ class Provider(BaseProvider):
                     entry[name] = [process_list_structure([item])
                                    for item in definition]
                 else:
-                    entry[name] = self._format_selection(definition, **kwargs)
+                    entry[name] = self._value_format_selection(definition, **kwargs)
             return entry
 
         def process_dict_structure(data: dict) -> dict:
             entry = {}
 
             if isinstance(data, str):
-                return self._format_selection(data)
+                return self._value_format_selection(data)
 
-            if isinstance(data, (float, int)):
-                return data
+            if isinstance(data, dict):
+                for name, definition in data.items():
+                    if isinstance(definition, (tuple, list, set)):
+                        entry[name] = [process_dict_structure(item)
+                                       for item in definition]
+                    elif isinstance(definition, (dict, int, float, bool)):
+                        entry[name] = process_dict_structure(definition)
+                    else:
+                        entry[name] = self._value_format_selection(definition)
+                return entry
 
-            for name, definition in data.items():
-                if isinstance(definition, (tuple, list)):
-                    entry[name] = [process_dict_structure(item)
-                                   for item in definition]
-                elif isinstance(definition, (dict, int, float)):
-                    entry[name] = process_dict_structure(definition)
-                else:
-                    entry[name] = self._format_selection(definition)
-
-            return entry
+            return data
 
         def create_json_structure(data_columns) -> dict:
             if isinstance(data_columns, dict):
@@ -510,9 +510,11 @@ class Provider(BaseProvider):
         Data Column List format
             [('field width', 'definition', {'arguments'})]
 
-        The definition can simply be the 'name:argument_group' of a provider
-        method, or can also be string tokens that are passed to python
-        provider method pystr_format() for data generation.
+        The definition can be 'provider', 'provider:argument_group', tokenized
+        'string {{ provider:argument_group }}' that is passed to the python
+        provider method pystr_format() for generation, or a fixed '@word'.
+        Using Lists, Tuples, and Dicts as a definition for structure.
+
         Argument Groups can be used to pass arguments to the provider methods,
         but will override the arguments supplied in the tuple record.
 
@@ -530,7 +532,7 @@ class Provider(BaseProvider):
         :rtype: str
 
         :sample: data_columns=[(20, 'name'), (3, 'pyint', {'min_value': 50,
-                'max_value': 100})], align='right', num_rows=1
+                'max_value': 100})], align='right', num_rows=2
         """
         default_data_columns = [
             (20, 'name'),
@@ -553,24 +555,39 @@ class Provider(BaseProvider):
                 if not isinstance(kwargs, dict):
                     raise TypeError('Invalid arguments type. Must be a dictionary')
 
-                result = self._format_selection(definition, **kwargs)
+                result = self._value_format_selection(definition, **kwargs)
                 field = "{0:%s%s}" % (align_map.get(align, '<'), width)
                 row.append(field.format(result)[:width])
 
             data.append(''.join(row))
         return '\n'.join(data)
 
-    def _format_selection(self, definition, **kwargs):
+    def _value_format_selection(self, definition, **kwargs):
         """
-        Formats the string with PyStr Format if special characters are found.
+        Formats the string in different ways depending on it's contents.
+
+        The return can be the '@word' itself, a '{{ token }}' passed to PyStr,
+        or a 'provider:argument_group' format field that returns potentially
+        a non-string type.
+
+        This ensures that Numbers, Boolean types that are generated in the
+        JSON structures in there proper type, and not just strings.
         """
-        if '{{' in definition and '}}' in definition:
+
+        # Check for PyStr first as complex strings may start with @
+        if re.match(r'.*\{\{.*\}\}.*', definition):
             return self.generator.pystr_format(definition)
 
-        if definition.count(':') == 1:
+        # Check for fixed @words that won't be generated
+        if re.match(r'^@.*', definition):
+            return definition.lstrip('@')
+
+        # Check if a argument group has been supplied
+        if re.match(r'^[a-zA-Z0-9_-]*:\w', definition):
             definition, argument_group = definition.split(':')
             arguments = self.generator.get_arguments(argument_group.strip())
 
             return self.generator.format(definition.strip(), **arguments)
 
+        # Assume the string is refering to a provider
         return self.generator.format(definition, **kwargs)
diff --git a/faker/providers/person/en_IN/__init__.py b/faker/providers/person/en_IN/__init__.py
new file mode 100644
index 00000000..5d66568f
--- /dev/null
+++ b/faker/providers/person/en_IN/__init__.py
@@ -0,0 +1,680 @@
+from .. import Provider as PersonProvider
+
+
+class Provider(PersonProvider):
+    formats = (
+        '{{first_name}} {{last_name}}',
+    )
+
+    # First names are from https://www.babycenter.in/a25010193/modern-indian-baby-names
+    # Last names are from https://www.familyeducation.com/baby-names/browse-origin/surname/indian
+
+    first_names = (
+        'Aarav',
+        'Aarush',
+        'Aayush',
+        'Abram',
+        'Advik',
+        'Akarsh',
+        'Anay',
+        'Aniruddh',
+        'Arhaan',
+        'Armaan',
+        'Arnav',
+        'Azad',
+        'Badal',
+        'Bhavin',
+        'Chirag',
+        'Darshit',
+        'Devansh',
+        'Dhanuk',
+        'Dhruv',
+        'Divij',
+        'Divit',
+        'Divyansh',
+        'Ehsaan',
+        'Emir',
+        'Faiyaz',
+        'Farhan',
+        'Fateh',
+        'Gatik',
+        'Gokul',
+        'Hansh',
+        'Himmat',
+        'Hiran',
+        'Hridaan',
+        'Hunar',
+        'Indrajit',
+        'Indranil',
+        'Ishaan',
+        'Ivan',
+        'Jayant',
+        'Jayesh',
+        'Jivin',
+        'Kabir',
+        'Kanav',
+        'Kartik',
+        'Kiaan',
+        'Krish',
+        'Lagan',
+        'Lakshay',
+        'Lakshit',
+        'Madhav',
+        'Madhup',
+        'Manikya',
+        'Mehul',
+        'Miraan',
+        'Nakul',
+        'Nirvaan',
+        'Nishith',
+        'Ojas',
+        'Onkar',
+        'Pranay',
+        'Prerak',
+        'Priyansh',
+        'Purab',
+        'Raghav',
+        'Ranbir',
+        'Raunak',
+        'Reyansh',
+        'Riaan',
+        'Ritvik',
+        'Rohan',
+        'Romil',
+        'Ryan',
+        'Sahil',
+        'Saksham',
+        'Samar',
+        'Samarth',
+        'Shaan',
+        'Shalv',
+        'Shamik',
+        'Shayak',
+        'Shlok',
+        'Shray',
+        'Stuvan',
+        'Sumer',
+        'Taimur',
+        'Taran',
+        'Tejas',
+        'Tushar',
+        'Umang',
+        'Uthkarsh',
+        'Vaibhav',
+        'Veer',
+        'Vidur',
+        'Vihaan',
+        'Vivaan',
+        'Yakshit',
+        'Yuvaan',
+        'Yuvraj ',
+        'Zain',
+        'Zeeshan',
+        'Aaina',
+        'Aarna',
+        'Aaryahi',
+        'Adah',
+        'Adira',
+        'Advika',
+        'Ahana ',
+        'Alia',
+        'Alisha',
+        'Amani',
+        'Amira',
+        'Anahi',
+        'Anahita',
+        'Anaya',
+        'Anika',
+        'Anvi',
+        'Anya',
+        'Aradhya',
+        'Ayesha',
+        'Bhamini',
+        'Charvi',
+        'Damini',
+        'Dishani',
+        'Diya',
+        'Drishya',
+        'Ela',
+        'Elakshi',
+        'Eshani',
+        'Eva',
+        'Hazel',
+        'Heer',
+        'Hrishita',
+        'Inaaya ',
+        'Ira',
+        'Ishita',
+        'Ivana',
+        'Jhanvi',
+        'Jivika',
+        'Jiya',
+        'Kaira',
+        'Kashvi',
+        'Kavya',
+        'Keya',
+        'Khushi',
+        'Kiara',
+        'Kimaya',
+        'Kismat',
+        'Lavanya',
+        'Mahika',
+        'Manjari',
+        'Mannat',
+        'Miraya',
+        'Misha',
+        'Mishti',
+        'Myra',
+        'Navya',
+        'Nayantara',
+        'Neelofar',
+        'Nehmat',
+        'Neysa',
+        'Nirvi',
+        'Nitara',
+        'Nitya',
+        'Oorja',
+        'Pari',
+        'Parinaaz',
+        'Pihu',
+        'Piya',
+        'Prisha',
+        'Rania',
+        'Rasha',
+        'Rati',
+        'Renee',
+        'Rhea',
+        'Riya',
+        'Saanvi',
+        'Saira',
+        'Samaira',
+        'Samiha',
+        'Sana',
+        'Sara',
+        'Seher',
+        'Shanaya',
+        'Siya',
+        'Suhana',
+        'Tanya',
+        'Tara',
+        'Tarini',
+        'Tiya',
+        'Trisha',
+        'Urvi',
+        'Vanya',
+        'Vardaniya',
+        'Vedika',
+        'Vritika',
+        'Yashvi',
+        'Yasmin',
+        'Zaina',
+        'Zara',
+        'Zoya',
+    )
+
+    last_names = (
+        'Acharya',
+        'Agarwal',
+        'Agate',
+        'Aggarwal',
+        'Agrawal',
+        'Ahluwalia',
+        'Ahuja',
+        'Amble',
+        'Anand',
+        'Andra',
+        'Anne',
+        'Apte',
+        'Arora',
+        'Arya',
+        'Atwal',
+        'Aurora',
+        'Babu',
+        'Badal',
+        'Badami',
+        'Bahl',
+        'Bahri',
+        'Bail',
+        'Bains',
+        'Bajaj',
+        'Bajwa',
+        'Bakshi',
+        'Bal',
+        'Bala',
+        'Bala',
+        'Balakrishnan',
+        'Balan',
+        'Balasubramanian',
+        'Balay',
+        'Bali',
+        'Bandi',
+        'Banerjee',
+        'Banik',
+        'Bansal',
+        'Barad',
+        'Barad',
+        'Baral',
+        'Baria',
+        'Barman',
+        'Basak',
+        'Bassi',
+        'Basu',
+        'Bath',
+        'Batra',
+        'Batta',
+        'Bava',
+        'Bawa',
+        'Bedi',
+        'Behl',
+        'Ben',
+        'Bera',
+        'Bhagat',
+        'Bhakta',
+        'Bhalla',
+        'Bhandari',
+        'Bhardwaj',
+        'Bhargava',
+        'Bhasin',
+        'Bhat',
+        'Bhatia',
+        'Bhatnagar',
+        'Bhatt',
+        'Bhattacharyya',
+        'Bhatti',
+        'Bhavsar',
+        'Bir',
+        'Biswas',
+        'Boase',
+        'Bobal',
+        'Bora',
+        'Bora',
+        'Borah',
+        'Borde',
+        'Borra',
+        'Bose',
+        'Brahmbhatt',
+        'Brar',
+        'Buch',
+        'Buch',
+        'Bumb',
+        'Butala',
+        'Chacko',
+        'Chad',
+        'Chada',
+        'Chadha',
+        'Chahal',
+        'Chakrabarti',
+        'Chakraborty',
+        'Chana',
+        'Chand',
+        'Chanda',
+        'Chander',
+        'Chandra',
+        'Chandran',
+        'Char',
+        'Chatterjee',
+        'Chaudhari',
+        'Chaudhary',
+        'Chaudhry',
+        'Chaudhuri',
+        'Chaudry',
+        'Chauhan',
+        'Chawla',
+        'Cheema',
+        'Cherian',
+        'Chhabra',
+        'Chokshi',
+        'Chopra',
+        'Choudhary',
+        'Choudhry',
+        'Choudhury',
+        'Chowdhury',
+        'Comar',
+        'Contractor',
+        'D’Alia',
+        'Dada',
+        'Dalal',
+        'Dani',
+        'Dar',
+        'Dara',
+        'Dara',
+        'Das',
+        'Dasgupta',
+        'Dash',
+        'Dass',
+        'Date',
+        'Datta',
+        'Dave',
+        'Dayal',
+        'De',
+        'Deep',
+        'Deo',
+        'Deol',
+        'Desai',
+        'Deshmukh',
+        'Deshpande',
+        'Devan',
+        'Devi',
+        'Dewan',
+        'Dey',
+        'Dhaliwal',
+        'Dhar',
+        'Dhar',
+        'Dhawan',
+        'Dhillon',
+        'Dhingra',
+        'Din',
+        'Divan',
+        'Dixit',
+        'Doctor',
+        'Dora',
+        'Doshi',
+        'Dua',
+        'Dube',
+        'Dubey',
+        'Dugal',
+        'Dugar',
+        'Dugar',
+        'Dutt',
+        'Dutta',
+        'Dyal',
+        'Edwin',
+        'Gaba',
+        'Gade',
+        'Gala',
+        'Gandhi',
+        'Ganesan',
+        'Ganesh',
+        'Ganguly',
+        'Gara',
+        'Garde',
+        'Garg',
+        'Gera',
+        'Ghose',
+        'Ghosh',
+        'Gill',
+        'Goda',
+        'Goel',
+        'Gokhale',
+        'Gola',
+        'Gole',
+        'Golla',
+        'Gopal',
+        'Goswami',
+        'Gour',
+        'Goyal',
+        'Grewal',
+        'Grover',
+        'Guha',
+        'Gulati',
+        'Gupta',
+        'Halder',
+        'Handa',
+        'Hans',
+        'Hari',
+        'Hayer',
+        'Hayre',
+        'Hegde',
+        'Hora',
+        'Issac',
+        'Iyengar',
+        'Iyer',
+        'Jaggi',
+        'Jain',
+        'Jani',
+        'Jayaraman',
+        'Jha',
+        'Jhaveri',
+        'Johal',
+        'Joshi',
+        'Kadakia',
+        'Kade',
+        'Kakar',
+        'Kala',
+        'Kala',
+        'Kala',
+        'Kale',
+        'Kalita',
+        'Kalla',
+        'Kamdar',
+        'Kanda',
+        'Kannan',
+        'Kant',
+        'Kapadia',
+        'Kapoor',
+        'Kapur',
+        'Kar',
+        'Kara',
+        'Karan',
+        'Kari',
+        'Karnik',
+        'Karpe',
+        'Kashyap',
+        'Kata',
+        'Kaul',
+        'Kaur',
+        'Keer',
+        'Keer',
+        'Khalsa',
+        'Khanna',
+        'Khare',
+        'Khatri',
+        'Khosla',
+        'Khurana',
+        'Kibe',
+        'Kohli',
+        'Konda',
+        'Korpal',
+        'Koshy',
+        'Kota',
+        'Kothari',
+        'Krish',
+        'Krishna',
+        'Krishnamurthy',
+        'Krishnan',
+        'Kulkarni',
+        'Kumar',
+        'Kumer',
+        'Kunda',
+        'Kurian',
+        'Kuruvilla',
+        'Lad',
+        'Lad',
+        'Lal',
+        'Lala',
+        'Lall',
+        'Lalla',
+        'Lanka',
+        'Lata',
+        'Loke',
+        'Loyal',
+        'Luthra',
+        'Madan',
+        'Madan',
+        'Magar',
+        'Mahajan',
+        'Mahal',
+        'Maharaj',
+        'Majumdar',
+        'Malhotra',
+        'Mall',
+        'Mallick',
+        'Mammen',
+        'Mand',
+        'Manda',
+        'Mandal',
+        'Mander',
+        'Mane',
+        'Mangal',
+        'Mangat',
+        'Mani',
+        'Mani',
+        'Mann',
+        'Mannan',
+        'Manne',
+        'Master',
+        'Raj',
+        'Raja',
+        'Rajagopal',
+        'Rajagopalan',
+        'Rajan',
+        'Raju',
+        'Ram',
+        'Rama',
+        'Ramachandran',
+        'Ramakrishnan',
+        'Raman',
+        'Ramanathan',
+        'Ramaswamy',
+        'Ramesh',
+        'Rana',
+        'Randhawa',
+        'Ranganathan',
+        'Rao',
+        'Rastogi',
+        'Ratta',
+        'Rattan',
+        'Ratti',
+        'Rau',
+        'Raval',
+        'Ravel',
+        'Ravi',
+        'Ray',
+        'Reddy',
+        'Rege',
+        'Rout',
+        'Roy',
+        'Sabharwal',
+        'Sachar',
+        'Sachdev',
+        'Sachdeva',
+        'Sagar',
+        'Saha',
+        'Sahni',
+        'Sahota',
+        'Saini',
+        'Salvi',
+        'Sama',
+        'Sami',
+        'Sampath',
+        'Samra',
+        'Sandal',
+        'Sandhu',
+        'Sane',
+        'Sangha',
+        'Sanghvi',
+        'Sani',
+        'Sankar',
+        'Sankaran',
+        'Sant',
+        'Saraf',
+        'Saran',
+        'Sarin',
+        'Sarkar',
+        'Sarma',
+        'Sarna',
+        'Sarraf',
+        'Sastry',
+        'Sathe',
+        'Savant',
+        'Sawhney',
+        'Saxena',
+        'Sehgal',
+        'Sekhon',
+        'Sem',
+        'Sen',
+        'Sengupta',
+        'Seshadri',
+        'Seth',
+        'Sethi',
+        'Setty',
+        'Sha',
+        'Shah',
+        'Shan',
+        'Shankar',
+        'Shanker',
+        'Sharaf',
+        'Sharma',
+        'Shenoy',
+        'Shere',
+        'Sheth',
+        'Shetty',
+        'Shroff',
+        'Shukla',
+        'Sibal',
+        'Sidhu',
+        'Singh',
+        'Singhal',
+        'Sinha',
+        'Sodhi',
+        'Solanki',
+        'Som',
+        'Soman',
+        'Soni',
+        'Sood',
+        'Sridhar',
+        'Srinivas',
+        'Srinivasan',
+        'Srivastava',
+        'Subramaniam',
+        'Subramanian',
+        'Sule',
+        'Sundaram',
+        'Sunder',
+        'Sur',
+        'Sura',
+        'Suresh',
+        'Suri',
+        'Swaminathan',
+        'Swamy',
+        'Tailor',
+        'Tak',
+        'Talwar',
+        'Tandon',
+        'Taneja',
+        'Tank',
+        'Tara',
+        'Tata',
+        'Tella',
+        'Thaker',
+        'Thakkar',
+        'Thakur',
+        'Thaman',
+        'Tiwari',
+        'Toor',
+        'Tripathi',
+        'Trivedi',
+        'Upadhyay',
+        'Uppal',
+        'Vaidya',
+        'Vala',
+        'Varghese',
+        'Varkey',
+        'Varma',
+        'Varty',
+        'Varughese',
+        'Vasa',
+        'Venkataraman',
+        'Venkatesh',
+        'Verma',
+        'Vig',
+        'Virk',
+        'Viswanathan',
+        'Vohra',
+        'Vora',
+        'Vyas',
+        'Wable',
+        'Wadhwa',
+        'Wagle',
+        'Wali',
+        'Wali',
+        'Walia',
+        'Walla',
+        'Warrior',
+        'Wason',
+        'Yadav',
+        'Yogi',
+        'Yohannan',
+        'Zacharia',
+        'Zachariah',
+    )
diff --git a/faker/providers/phone_number/en_IN/__init__.py b/faker/providers/phone_number/en_IN/__init__.py
new file mode 100644
index 00000000..96a86bdd
--- /dev/null
+++ b/faker/providers/phone_number/en_IN/__init__.py
@@ -0,0 +1,9 @@
+from .. import Provider as PhoneNumberProvider
+
+
+class Provider(PhoneNumberProvider):
+    formats = (
+        '+91##########',
+        '0##########',
+        '##########',
+    )


Test patch:
diff --git a/tests/providers/test_address.py b/tests/providers/test_address.py
index cae8b6ab..15bbcde3 100644
--- a/tests/providers/test_address.py
+++ b/tests/providers/test_address.py
@@ -7,12 +7,14 @@ import pytest
 from ukpostcodeparser.parser import parse_uk_postcode
 
 from faker.providers.address.cs_CZ import Provider as CsCzAddressProvider
+from faker.providers.address.da_DK import Provider as DaDkAddressProvider
 from faker.providers.address.de_AT import Provider as DeAtAddressProvider
 from faker.providers.address.de_DE import Provider as DeDeAddressProvider
 from faker.providers.address.el_GR import Provider as ElGrAddressProvider
 from faker.providers.address.en_AU import Provider as EnAuAddressProvider
 from faker.providers.address.en_CA import Provider as EnCaAddressProvider
 from faker.providers.address.en_GB import Provider as EnGbAddressProvider
+from faker.providers.address.en_IN import Provider as EnInAddressProvider
 from faker.providers.address.en_PH import Provider as EnPhAddressProvider
 from faker.providers.address.en_US import Provider as EnUsAddressProvider
 from faker.providers.address.es_ES import Provider as EsEsAddressProvider
@@ -110,6 +112,34 @@ class TestCsCz:
             assert match.group('city') in CsCzAddressProvider.cities
 
 
+class TestDaDk:
+    """Test dk_DK address provider methods"""
+
+    def test_street_prefix(self, faker, num_samples):
+        for _ in range(num_samples):
+            street_prefix = faker.street_prefix()
+            assert isinstance(street_prefix, str)
+            assert street_prefix in DaDkAddressProvider.street_prefixes
+
+    def test_city_name(self, faker, num_samples):
+        for _ in range(num_samples):
+            city = faker.city_name()
+            assert isinstance(city, str)
+            assert city in DaDkAddressProvider.cities
+
+    def test_state(self, faker, num_samples):
+        for _ in range(num_samples):
+            state = faker.state()
+            assert isinstance(state, str)
+            assert state in DaDkAddressProvider.states
+
+    def test_postcode(self, faker, num_samples):
+        for _ in range(num_samples):
+            postcode = faker.postcode()
+            assert isinstance(postcode, str)
+            assert re.fullmatch(r"\d{4}", postcode)
+
+
 class TestDeAt:
     """Test de_AT address provider methods"""
 
@@ -291,7 +321,7 @@ class TestEnCa:
     """Test en_CA address provider methods"""
 
     valid_postcode_letter_re = r'[{}]'.format(
-            ''.join(EnCaAddressProvider.postal_code_letters))
+        ''.join(EnCaAddressProvider.postal_code_letters))
     valid_postcode_re = r"{0}[0-9]{0} ?[0-9]{0}[0-9]".format(valid_postcode_letter_re)
 
     def test_postcode(self, faker, num_samples):
@@ -1443,3 +1473,19 @@ class TestThTh:
             postcode = faker.postcode()
             assert isinstance(postcode, str)
             assert re.fullmatch(r'[1-9]\d{4}', postcode)
+
+
+class TestEnIn:
+    """Test en_IN address provider methods"""
+
+    def test_city_name(self, faker, num_samples):
+        for _ in range(num_samples):
+            city_name = faker.city_name()
+            assert isinstance(city_name, str)
+            assert city_name in EnInAddressProvider.cities
+
+    def test_state(self, faker, num_samples):
+        for _ in range(num_samples):
+            state = faker.state()
+            assert isinstance(state, str)
+            assert state in EnInAddressProvider.states
diff --git a/tests/providers/test_misc.py b/tests/providers/test_misc.py
index d51d80c3..d54dfa2b 100644
--- a/tests/providers/test_misc.py
+++ b/tests/providers/test_misc.py
@@ -477,11 +477,13 @@ class TestMiscProvider:
 
         assert isinstance(json_data, list) and len(json_data) == 2
 
-    def test_json_passthrough_int_float(self, faker_with_foobar):
+    def test_json_passthrough_values(self, faker_with_foobar):
         kwargs = {
             'data_columns': {
                 'item1': 1,
                 'item2': 1.0,
+                'item3': True,
+                'item4': '@fixed',
             },
             'num_rows': 1,
         }
@@ -489,6 +491,8 @@ class TestMiscProvider:
 
         assert json_data['item1'] == 1
         assert json_data['item2'] == 1.0
+        assert json_data['item3'] is True
+        assert json_data['item4'] == 'fixed'
 
     def test_json_type_integrity_int(self, faker_with_foobar):
         kwargs = {
diff --git a/tests/providers/test_person.py b/tests/providers/test_person.py
index ec7bb910..d1f5e23e 100644
--- a/tests/providers/test_person.py
+++ b/tests/providers/test_person.py
@@ -8,6 +8,7 @@ from faker import Faker
 from faker.providers.person.ar_AA import Provider as ArProvider
 from faker.providers.person.cs_CZ import Provider as CsCZProvider
 from faker.providers.person.en import Provider as EnProvider
+from faker.providers.person.en_IN import Provider as EnINProvider
 from faker.providers.person.en_US import Provider as EnUSProvider
 from faker.providers.person.es_ES import Provider as EsESProvider
 from faker.providers.person.fi_FI import Provider as FiProvider
@@ -804,3 +805,19 @@ class TestOrIN(unittest.TestCase):
         """ test the last name is generating from the provided tuple """
         last_name = self.fake.last_name()
         assert last_name in OrINProvider.last_names
+
+
+class TestEnIN(unittest.TestCase):
+    """ Tests person in the en_IN locale """
+
+    def setUp(self):
+        self.fake = Faker('en_IN')
+        Faker.seed(0)
+
+    def test_first_name(self):
+        first_name = self.fake.first_name()
+        assert first_name in EnINProvider.first_names
+
+    def test_last_name(self):
+        last_name = self.fake.last_name()
+        assert last_name in EnINProvider.last_names