Repository: joke2k/faker
Pull request #659 (2017-11-24 19:21:42)

fi_FI address and job lists updated based on Finnish open data 
### What does this changes

- fi_FI job list updated based on a Finnish open data service.
- City list updated from the open data, contains all the cities of Finland.
- Original fruit based address prefixes replaced by the real prefixes from the city of Helsinki. Now prefixes contains spaces and special characters for matching better with the real addresses.
- Some basic unit tests added


Patch:
diff --git a/faker/providers/address/fi_FI/__init__.py b/faker/providers/address/fi_FI/__init__.py
index cd8a9e6f..d6e0e213 100644
--- a/faker/providers/address/fi_FI/__init__.py
+++ b/faker/providers/address/fi_FI/__init__.py
@@ -4,39 +4,54 @@ from .. import Provider as AddressProvider
 
 
 class Provider(AddressProvider):
-
     building_number_formats = ('###', '##', '#')
 
     postcode_formats = ('#####', )
 
     city_formats = ('{{city_name}}', )
 
-    street_name_formats = ('{{fruit}}{{street_suffix}}', )
+    street_name_formats = ('{{street_prefix}}{{street_suffix}}', )
 
-    street_address_formats = ('{{street_name}} {{building_number}}',)
+    street_address_formats = ('{{street_name}} {{building_number}}', )
 
     address_formats = ("{{street_address}}\n{{postcode}} {{city}}", )
 
+    # Data from: https://www.avoindata.fi/data/en/dataset/kunnat/resource/b1cb9870-191f-4616-9c53-5388b7ca6beb
     cities = (
-        'Akaa', 'Alajärvi', 'Alavus', 'Espoo', 'Forssa', 'Haapajärvi',
-        'Haapavesi', 'Hämeenlinna', 'Hamina', 'Hanko', 'Harjavalta',
-        'Haukipudas', 'Heinola', 'Helsinki', 'Huittinen', 'Hyvinkää',
-        'Iisalmi', 'Ikaalinen', 'Imatra', 'Jakobstad', 'Joensuu', 'Juankoski',
-        'Jyväskylä', 'Jämsä', 'Järvenpää', 'Kaarina', 'Kajaani', 'Kalajoki',
-        'Kankaanpää', 'Kannus', 'Karkkila', 'Kaskinen', 'Kauhajoki', 'Kauhava',
-        'Kauniainen', 'Kemi', 'Kemijärvi', 'Kerava', 'Keuruu', 'Kitee',
-        'Kiuruvesi', 'Kokemäki', 'Kokkola', 'Kotka', 'Kouvola', 'Kristinestad',
-        'Kuhmo', 'Kuopio', 'Kurikka', 'Kuusamo', 'Lahti', 'Laitila',
-        'Lappeenranta', 'Lapua', 'Lieksa', 'Lohja', 'Loimaa', 'Loviisa',
-        'Mänttä-Vilppula', 'Mariehamn', 'Mikkeli', 'Naantali', 'Närpes',
-        'Nilsiä', 'Nivala', 'Nokia', 'Nurmes', 'Nykarleby', 'Orimattila',
-        'Orivesi', 'Oulainen', 'Oulu', 'Outokumpu', 'Paimio', 'Pargas',
-        'Parkano', 'Pieksämäki', 'Pori', 'Porvoo', 'Pudasjärvi', 'Pyhäjärvi',
-        'Raahe', 'Raseborg', 'Rauma', 'Raisio', 'Riihimäki', 'Rovaniemi',
-        'Saarijärvi', 'Salo', 'Sastamala', 'Savonlinna', 'Seinäjoki', 'Siuntio',
-        'Somero', 'Suonenjoki', 'Tampere', 'Tornio', 'Turku', 'Ulvila',
-        'Uusikaupunki', 'Vaasa', 'Valkeakoski', 'Vantaa', 'Varkaus',
-        'Viitasaari', 'Virrat', 'Ylivieska', 'Ylöjärvi', 'Äänekoski', 'Ähtäri',
+        'Alajärvi', 'Alavieska', 'Alavus', 'Asikkala', 'Askola', 'Aura', 'Akaa', 'Brändö', 'Eckerö', 'Enonkoski',
+        'Enontekiö', 'Espoo', 'Eura', 'Eurajoki', 'Evijärvi', 'Finström', 'Forssa', 'Föglö', 'Geta', 'Haapajärvi',
+        'Haapavesi', 'Hailuoto', 'Halsua', 'Hamina', 'Hammarland', 'Hankasalmi', 'Hanko', 'Harjavalta', 'Hartola',
+        'Hattula', 'Hausjärvi', 'Heinävesi', 'Helsinki', 'Vantaa', 'Hirvensalmi', 'Hollola', 'Honkajoki', 'Huittinen',
+        'Humppila', 'Hyrynsalmi', 'Hyvinkää', 'Hämeenkyrö', 'Hämeenlinna', 'Heinola', 'Ii', 'Iisalmi', 'Iitti',
+        'Ikaalinen', 'Ilmajoki', 'Ilomantsi', 'Inari', 'Inkoo', 'Isojoki', 'Isokyrö', 'Imatra', 'Janakkala', 'Joensuu',
+        'Jokioinen', 'Jomala', 'Joroinen', 'Joutsa', 'Juuka', 'Juupajoki', 'Juva', 'Jyväskylä', 'Jämijärvi', 'Jämsä',
+        'Järvenpää', 'Kaarina', 'Kaavi', 'Kajaani', 'Kalajoki', 'Kangasala', 'Kangasniemi', 'Kankaanpää', 'Kannonkoski',
+        'Kannus', 'Karijoki', 'Karkkila', 'Karstula', 'Karvia', 'Kaskinen', 'Kauhajoki', 'Kauhava', 'Kauniainen',
+        'Kaustinen', 'Keitele', 'Kemi', 'Keminmaa', 'Kempele', 'Kerava', 'Keuruu', 'Kihniö', 'Kinnula', 'Kirkkonummi',
+        'Kitee', 'Kittilä', 'Kiuruvesi', 'Kivijärvi', 'Kokemäki', 'Kokkola', 'Kolari', 'Konnevesi', 'Kontiolahti',
+        'Korsnäs', 'Koski Tl', 'Kotka', 'Kouvola', 'Kristiinankaupunki', 'Kruunupyy', 'Kuhmo', 'Kuhmoinen', 'Kumlinge',
+        'Kuopio', 'Kuortane', 'Kurikka', 'Kustavi', 'Kuusamo', 'Outokumpu', 'Kyyjärvi', 'Kärkölä', 'Kärsämäki', 'Kökar',
+        'Kemijärvi', 'Kemiönsaari', 'Lahti', 'Laihia', 'Laitila', 'Lapinlahti', 'Lappajärvi', 'Lappeenranta',
+        'Lapinjärvi', 'Lapua', 'Laukaa', 'Lemi', 'Lemland', 'Lempäälä', 'Leppävirta', 'Lestijärvi', 'Lieksa', 'Lieto',
+        'Liminka', 'Liperi', 'Loimaa', 'Loppi', 'Loviisa', 'Luhanka', 'Lumijoki', 'Lumparland', 'Luoto', 'Luumäki',
+        'Lohja', 'Parainen', 'Maalahti', 'Maarianhamina', 'Marttila', 'Masku', 'Merijärvi', 'Merikarvia', 'Miehikkälä',
+        'Mikkeli', 'Muhos', 'Multia', 'Muonio', 'Mustasaari', 'Muurame', 'Mynämäki', 'Myrskylä', 'Mäntsälä',
+        'Mäntyharju', 'Mänttä-Vilppula', 'Naantali', 'Nakkila', 'Nivala', 'Nokia', 'Nousiainen', 'Nurmes', 'Nurmijärvi',
+        'Närpiö', 'Orimattila', 'Oripää', 'Orivesi', 'Oulainen', 'Oulu', 'Padasjoki', 'Paimio', 'Paltamo', 'Parikkala',
+        'Parkano', 'Pelkosenniemi', 'Perho', 'Pertunmaa', 'Petäjävesi', 'Pieksämäki', 'Pielavesi', 'Pietarsaari',
+        'Pedersören kunta', 'Pihtipudas', 'Pirkkala', 'Polvijärvi', 'Pomarkku', 'Pori', 'Pornainen', 'Posio',
+        'Pudasjärvi', 'Pukkila', 'Punkalaidun', 'Puolanka', 'Puumala', 'Pyhtää', 'Pyhäjoki', 'Pyhäjärvi', 'Pyhäntä',
+        'Pyhäranta', 'Pälkäne', 'Pöytyä', 'Porvoo', 'Raahe', 'Raisio', 'Rantasalmi', 'Ranua', 'Rauma', 'Rautalampi',
+        'Rautavaara', 'Rautjärvi', 'Reisjärvi', 'Riihimäki', 'Ristijärvi', 'Rovaniemi', 'Ruokolahti', 'Ruovesi',
+        'Rusko', 'Rääkkylä', 'Raasepori', 'Saarijärvi', 'Salla', 'Salo', 'Saltvik', 'Sauvo', 'Savitaipale',
+        'Savonlinna', 'Savukoski', 'Seinäjoki', 'Sievi', 'Siikainen', 'Siikajoki', 'Siilinjärvi', 'Simo', 'Sipoo',
+        'Siuntio', 'Sodankylä', 'Soini', 'Somero', 'Sonkajärvi', 'Sotkamo', 'Sottunga', 'Sulkava', 'Sund',
+        'Suomussalmi', 'Suonenjoki', 'Sysmä', 'Säkylä', 'Vaala', 'Sastamala', 'Siikalatva', 'Taipalsaari',
+        'Taivalkoski', 'Taivassalo', 'Tammela', 'Tampere', 'Tervo', 'Tervola', 'Teuva', 'Tohmajärvi', 'Toholampi',
+        'Toivakka', 'Tornio', 'Turku', 'Pello', 'Tuusniemi', 'Tuusula', 'Tyrnävä', 'Ulvila', 'Urjala', 'Utajärvi',
+        'Utsjoki', 'Uurainen', 'Uusikaarlepyy', 'Uusikaupunki', 'Vaasa', 'Valkeakoski', 'Valtimo', 'Varkaus', 'Vehmaa',
+        'Vesanto', 'Vesilahti', 'Veteli', 'Vieremä', 'Vihti', 'Viitasaari', 'Vimpeli', 'Virolahti', 'Virrat', 'Värdö',
+        'Vöyri', 'Ylitornio', 'Ylivieska', 'Ylöjärvi', 'Ypäjä', 'Ähtäri', 'Äänekoski'
     )
 
     countries = (
@@ -104,39 +119,41 @@ class Provider(AddressProvider):
 
     street_suffixes = ('tie', 'katu', 'polku', 'kuja', 'bulevardi')
 
-    # Using fruits to generate street names, since it doesn't make
-    # much grammatical sense to use first names
-
-    fruits = (
-        'Ananas', 'Ananaskirsikka', 'Annoona', 'Appelsiini', 'Aprikoosi',
-        'Avokado', 'Banaani', 'Cantaloupemeloni', 'Durio', 'Feijoa',
-        'Galiameloni', 'Granaattiomena', 'Granadilla', 'Greippi', 'Guava',
-        'Hunajameloni', 'Jakkihedelmä', 'Kaki', 'Kaktusviikuna', 'Karambola',
-        'Kastanja', 'Keittobanaani', 'Keltainen', 'kiivi', 'Keltapassio',
-        'Kiivi', 'Kirsikka', 'Kirsikkaluumu', 'Kiwai', 'Kiwano', 'Kookospähkinä',
-        'Kumkvatti', 'Limetti', 'Limkvatti', 'Litsi', 'Longaani', 'Luumu',
-        'Mandariini', 'Mango', 'Mangostaani', 'Maracuya', 'Meloni', 'Nashi',
-        'Nektariini', 'Omena', 'Papaija', 'Passionhedelmä', 'Persikka', 'Pepino',
-        'Pikkusitrukset', 'Pitahaya', 'Pomelo', 'Pähkinä', 'Päärynä',
-        'Rambutani', 'Rumeliini', 'Sapodilla', 'Salaki', 'Sitruuna',
-        'Sokerimeloni', 'Sweetie', 'Taateli', 'Tamarillo', 'Tomaatti',
-        'Verkkomeloni', 'Vesimeloni', 'Viikuna', 'Viinirypäle', 'Ananas',
-        'Annoona', 'Appelsiini', 'Aprikoosi', 'Avokado', 'Banaani',
-        'Cantaloupemeloni', 'Durio', 'Feijoa', 'Galiameloni', 'Granaattiomena',
-        'Granadilla', 'Greippi', 'Guava', 'Hunajameloni', 'Jakkihedelmä', 'Kaki',
-        'Kaktusviikuna', 'Karambola', 'Kastanja', 'Keittobanaani', 'Keltapassio',
-        'Kiivi', 'Kirsikka', 'Kirsikkaluumu', 'Kiwai', 'Kiwano', 'Kookospähkinä',
-        'Kumkvatti', 'Limetti', 'Limkvatti', 'Litsi', 'Longaani', 'Luumu',
-        'Mandariini', 'Mango', 'Mangostaani', 'Maracuya', 'Meloni', 'Nashi',
-        'Nektariini', 'Omena', 'Papaija', 'Passionhedelmä', 'Persikka', 'Pepino',
-        'Pikkusitrukset', 'Pitahaya', 'Pomelo', 'Pähkinä', 'Päärynä',
-        'Rambutani', 'Rumeliini', 'Sapodilla', 'Salaki', 'Sitruuna',
-        'Sokerimeloni', 'Sweetie', 'Taateli', 'Tamarillo', 'Tomaatti',
-        'Verkkomeloni', 'Vesimeloni', 'Viikuna', 'Viinirypäle'
+    # Prefixes parsed from a street list of Helsinki: http://kartta.hel.fi/ws/geoserver/avoindata/wfs?outputFormat=application/json&REQUEST=GetFeature&typeNames=avoindata:Helsinki_osoiteluettelo
+
+    street_prefixes = (
+        'Adolf Lindforsin ', 'Agnes Sjöbergin ', 'Agnetan', 'Agricolan', 'Ahomäen', 'Ahvenkosken', 'Aidasmäen',
+        'Agroksen', 'Agronomin', 'Ahdekaunokin', 'Bertel Jungin ', 'Bertha Pauligin ', 'Betlehemin', 'Betoni',
+        'Biologin', 'Birger Kaipiaisen ', 'Bysantin', 'Böstaksen', 'Bengalin', 'Benktan', 'Bergan', 'Caloniuksen',
+        'Capellan puisto', 'Castrénin', 'Chydeniuksen', 'Cygnaeuksen', 'Dagmarin', 'Damaskuksen', 'Degermosan', 'Disan',
+        'Dosentin', 'Dunckerin', 'Döbelnin', 'Ehrensvärdin', 'Eino Leinon ', 'Elimäen', 'Elisabeth Kochin ', 'Eljaksen',
+        'Elon', 'Elon', 'Edelfeltin', 'Eduskunta', 'Eerik Pyhän ', 'Franzénin', 'Fredrikin', 'Freesen',
+        'Fabianin', 'Fagotti', 'Fahlanderin puisto', 'Fallin', 'Fallkullan', 'Fallpakan', 'Fastbölen', 'Gadolinin',
+        'Gneissi', 'Granfeltin', 'Gunillan', 'Gunnel Nymanin ', 'Graniitti', 'Gustav Pauligin ', 'Gyldénin',
+        'Gotlannin', 'Haapa', 'Haagan pappilan', 'Haahka', 'Haakoninlahden', 'Haaksi', 'Hankasuon', 'Hannukselan',
+        'Harakkamyllyn', 'Harava', 'Harbon', 'Ilmattaren', 'Ilomäen', 'Ilotulitus', 'Iltaruskon', 'Iltatähden', 'Ilves',
+        'Immolan', 'Ilkan', 'Ida Ekmanin ', 'Ies', 'Jälsi', 'Jämsän', 'Jänkä', 'Jänne', 'Järkäle', 'Jätkäsaaren',
+        'Jättiläisen', 'Jyvä', 'Jägerhornin', 'Jäkälä', 'Kukkaniityn', 'Kolsin', 'Kolu', 'Kolvi', 'Kuhankeittäjän',
+        'Katajaharjun', 'Kiitäjän', 'Kilpolan', 'Kimalais', 'Kimmon', 'Laajasalon', 'Laakavuoren', 'Lemun',
+        'Lentokapteenin ', 'Lepolan', 'Louhen', 'Louhikko', 'Lukkarimäen', 'Laurinniityn', 'Lautamiehen',
+        'Mamsellimyllyn', 'Mannerheimin', 'Maanmittarin', 'Maapadon', 'Maa', 'Maasalon', 'Maasälvän', 'Maatullin',
+        'Malminkartanon', 'Maneesi', 'Niittylän', 'Niemi', 'Niitynperän', 'Nikon', 'Nils Westermarckin ',
+        'Nordenskiöldin', 'Nelikko', 'Neon', 'Nervanderin', 'Neulapadon', 'Ostos', 'Orapihlaja', 'Oras', 'Orava',
+        'Osmon', 'Osuuskunnan', 'Orisaaren', 'Ormus', 'Orvokki', 'Oterman', 'Pore', 'Porin', 'Porkkalan', 'Pyörökiven',
+        'Puusepän', 'Puuska', 'Pohjolan', 'Poikasaarten', 'Purjetuulen', 'Puroniityn', 'Rukkilan', 'Ruko',
+        'Rukoushuoneen', 'Runebergin', 'Runoilijan', 'Runokylän', 'Runonlaulajan', 'Rantavaraston', 'Rapakiven',
+        'Rapolan', 'Santerlan', 'Saparon', 'Sapilas', 'Saramäen', 'Saanatunturin', 'Sade', 'Sahaajan', 'Salakka',
+        'Salama', 'Salava', 'Tuomarinkylän', 'Tuulilasin', 'Taavetti Laitisen ', 'Taavin', 'Tahti', 'Taimiston',
+        'Tukkisillan', 'Tuohikoivun', 'Tyynelän', 'Tyynylaavan', 'Uussillan', 'Urheilu', 'Urkurin', 'Urpu', 'Uskalikon',
+        'Usva', 'Uudenkaupungin', 'Uunilinnun', 'Uunisepän', 'Uurtajan', 'Vanha Raja', 'Veropellon', 'Veräjämäen',
+        'Vesakko', 'Vesalan', 'Vellikellon', 'Verkko', 'Verso', 'Vaakalinnun', 'Vaarna', 'Wavulinin',
+        'Walentin Chorellin ', 'Wallinin', 'Waseniuksen puisto', 'Wecksellin', 'Willebrandin', 'Winqvistin',
+        'Wäinö Aaltosen ', 'Werner Wirénin ', 'Yhteiskoulun', 'Ylipalon', 'Yllästunturin', 'Ylä-Fallin ', 'Yläkasken',
+        'Ylänkö', 'Ylätuvan', 'Yrjö-Koskisen ', 'Yrjön', 'Yrttimaan', 'Zaidan'
     )
 
-    def fruit(self):
-        return self.random_element(self.fruits)
+    def street_prefix(self):
+        return self.random_element(self.street_prefixes)
 
     def city_name(self):
         return self.random_element(self.cities)
diff --git a/faker/providers/job/fi_FI/__init__.py b/faker/providers/job/fi_FI/__init__.py
new file mode 100644
index 00000000..eeb89597
--- /dev/null
+++ b/faker/providers/job/fi_FI/__init__.py
@@ -0,0 +1,201 @@
+# coding=utf-8
+from __future__ import unicode_literals
+from .. import Provider as BaseProvider
+
+
+class Provider(BaseProvider):
+    #jobs parsed from a list provided by State Treasury: http://www.valtiokonttori.fi/download/noname/%7BF69EA5BD-C919-49FE-8D51-91434E4B030D%7D/82158
+    jobs = ["Agrologi",
+            "Aikuiskoulutusjohtaja",
+            "Aineenopettaja",
+            "Ajojärjestelijä",
+            "Akatemian tutkijatohtori",
+            "Aktuaari",
+            "Alakoulujen apulaisrehtori",
+            "Alikersantti",
+            "Alkoholiasiain ylitarkastaja",
+            "Back office asiantuntija",
+            "Ballistikko",
+            "Bioanalyytikko",
+            "Brand manager",
+            "Budjettiassistentti",
+            "Business controller",
+            "Cc-yritysneuvoja",
+            "Cert-fi -yksikön päällikkö",
+            "Communication officer",
+            "Consul",
+            "Counsellor",
+            "Data-analyytikko",
+            "Dekaanin sihteeri",
+            "Dieettikeittäjä",
+            "Digitaalisen kokeen toteuttaja",
+            "Diplomi-insinööri",
+            "Dokumentoija",
+            "Dosentti",
+            "Eakr-koordinaattori",
+            "Editoija",
+            "Edunvalvontasihteeri",
+            "Egr-ohjaaja",
+            "Ekokampuskoordinaattori",
+            "Elektroniikka-asentaja",
+            "Elinkeinopäällikkö",
+            "Elokuvakonemestari",
+            "Elputeknikko",
+            "Eläinlääkintöneuvos",
+            "Faktori",
+            "Farmakologi",
+            "Fidipro-professori",
+            "Filmiteknikko",
+            "Financial controller",
+            "Floristi",
+            "Fysioterapeutti",
+            "Fyysikko",
+            "Gemmologi",
+            "Gentax-järjestelmäasiantuntija",
+            "Geofyysikko",
+            "Gis-asiantuntija",
+            "Gm huto pääkäyttäjä",
+            "Graafikko",
+            "Haastattelija",
+            "Hakukoordinaattori",
+            "Hallimestari",
+            "Hammashoitaja",
+            "Hankearkkitehti",
+            "Harjaantumisopetuksen erityisluokanopettaja",
+            "Havainnontarkastaja",
+            "Helikopterihuoltoaliupseeri",
+            "Henkikirjoittaja",
+            "Johtava kuluttajaoikeusneuvoja",
+            "Ict-arkkitehti",
+            "Ihmisoikeuskeskuksen johtaja",
+            "Iktyonomi",
+            "Ilma-aluksen päällikkö",
+            "Iltapäiväkerhon ohjaaja",
+            "Immunologi",
+            "Info-palvelupisteen hoitaja",
+            "Innoittaja",
+            "Jakeluvastaava",
+            "Jalkaväen tarkastaja",
+            "Jaoksen johtaja",
+            "Jatkokoulutettava eläinlääkäri",
+            "Jhs-projektipäällikkö",
+            "Johdon asiantuntija",
+            "Joukkoliikenneasiantuntija",
+            "Julkaisu- ja markkinointisuunnittelija",
+            "Junamies",
+            "Juontaja",
+            "Kaapeli-insinööri",
+            "Kabinettisihteeri",
+            "Kadettikoulun johtaja",
+            "Kahvila-apulainen",
+            "Kairaaja",
+            "Kalabiologi",
+            "Kampanjapäällikkö",
+            "Kanavanhoitaja",
+            "Kapellimestari",
+            "Karjamestari",
+            "Laadunvarmistuksen asiantuntija",
+            "Laboraattori",
+            "Laillisuusvalvontasihteeri",
+            "Laki- ja henkilöstöasiainjohtaja",
+            "Lapsiasiavaltuutettu",
+            "Laskennan kehittämispäällikkö",
+            "Lataamoinsinööri",
+            "Lautakuntasihteeri",
+            "Lavastaja",
+            "Maa- ja vesirakennustyöntekijä",
+            "Maisema-arkkitehti",
+            "Majakkateknikko",
+            "Maksatusasiantuntija",
+            "Malli",
+            "Mareografihoitaja",
+            "Mastoteknikko",
+            "Matemaatikko",
+            "Media- ja kulttuurikoordinaattori",
+            "Neuropsykologi",
+            "Nimikkeistöpäällikkö",
+            "Nosturinkuljettaja",
+            "Notaari",
+            "Nukutuslääkäri",
+            "Numerointisihteeri",
+            "Nuorempi konstaapeli",
+            "Näytearkistonhoitaja",
+            "Näönkäytön asiantuntija",
+            "Obduktiokoordinaattori",
+            "Observaattori",
+            "Offset-monistaja",
+            "Ohjaaja",
+            "Oikaisulautakunnan puheenjohtaja",
+            "Oleskelulupakäsittelijä",
+            "Omistajaohjausyksikön johtaja",
+            "Ompelija",
+            "Opas",
+            "Operaatiopäällikkö",
+            "Padonhoitaja",
+            "Paikallisjohtaja",
+            "Pakolaiskeskuksen johtaja",
+            "Palkanlaskentapäällikkö",
+            "Panostaja",
+            "Paperikonservaattori",
+            "Parturi-kampaaja",
+            "Passi- ja maahantulolupavirkailija/toimistovirkailija",
+            "Pataljoonan komentaja",
+            "Pedagogi",
+            "Radioasentaja",
+            "Rahakammion johtaja",
+            "Raideliikennejohtaja",
+            "Rajaeläinlääkäri",
+            "Rakennemuutosjohtaja",
+            "Raportoinnin asiantuntija",
+            "Ratainsinööri",
+            "Rauhanturvaaja",
+            "Ravintohaastattelija",
+            "Rehtori",
+            "Saamelaisarkistonhoitaja",
+            "Sadehavainnontekijä",
+            "Sairaala-apulainen",
+            "Saksan, englannin ja ruotsinkielen lehtori",
+            "Salkunhoitaja",
+            "Sanomakeskusaliupseeri",
+            "Satamapäällikkö",
+            "Seismologi",
+            "Sektorijohtaja",
+            "Selvittelijä",
+            "Taajuussuunnittelija",
+            "Taideamanuenssi",
+            "Tallentaja",
+            "Tanssija",
+            "Tapahtumakoordinaattori",
+            "Tarjoilija",
+            "Tasa-arvoneuvos",
+            "Tavaraliikennelupakäsittelijä",
+            "Team finland kasvu- ja kansainvälistymiskoordinaattori",
+            "Teemapäällikkö",
+            "Ulkoasiainneuvos",
+            "Ulosottojohtaja",
+            "Ultraäänihoitaja",
+            "Unix-asiantuntija",
+            "Upseeri",
+            "Urakonsultti",
+            "Urheiluohjaaja",
+            "Vaaitsija",
+            "Vac-yhdyshenkilö",
+            "Vahingonkorvausasiantuntija",
+            "Vaihteenhoitaja",
+            "Vakuustoimittaja",
+            "Valaistusmestari",
+            "Vammaisasiamies",
+            "Vanhempi tutkijainsinööri",
+            "Vapaa-ajan ohjaaja",
+            "Varadekaani",
+            "Www-asiantuntija",
+            "Yhdenvertaisuusvaltuutettu",
+            "Yhteinen tuntiopettaja",
+            "Yksikkösihteeri",
+            "Yleinen edunvalvoja",
+            "Yliaktuaari",
+            "Ylläpidon palvelupäällikkö",
+            "Yläasteen rehtori",
+            "Ympärintönsuojeluyksikön päällikkö",
+            "Yrittäjyysneuvoja",
+            "Yva-koordinaattori"]
diff --git a/faker/utils/loading.py b/faker/utils/loading.py
index 00034637..40e4b5da 100644
--- a/faker/utils/loading.py
+++ b/faker/utils/loading.py
@@ -26,7 +26,6 @@ def find_available_locales(providers):
 def find_available_providers(modules):
     available_providers = set()
     for providers_mod in modules:
-        providers = ['.'.join([providers_mod.__package__, mod])
-                     for mod in list_module(providers_mod) if mod != '__pycache__']
+        providers = ['.'.join([providers_mod.__package__, mod]) for mod in list_module(providers_mod)]
         available_providers.update(providers)
     return sorted(available_providers)


Test patch:
diff --git a/tests/providers/test_address.py b/tests/providers/test_address.py
index f7dd5b71..91b82f9d 100644
--- a/tests/providers/test_address.py
+++ b/tests/providers/test_address.py
@@ -14,6 +14,7 @@ from faker.providers.address.el_GR import Provider as GrProvider
 from faker.providers.address.en_AU import Provider as EnAuProvider
 from faker.providers.address.en_CA import Provider as EnCaProvider
 from faker.providers.address.en_US import Provider as EnUsProvider
+from faker.providers.address.fi_FI import Provider as FiProvider
 from faker.providers.address.ja_JP import Provider as JaProvider
 from faker.providers.address.ne_NP import Provider as NeProvider
 from six import string_types
@@ -51,6 +52,23 @@ class TestDeDE(unittest.TestCase):
         assert country in DeProvider.countries
 
 
+class TestFiFI(unittest.TestCase):
+    """ Tests in addresses in the fi_FI locale """
+
+    def setUp(self):
+        self.factory = Faker('fi_FI')
+
+    def test_city(self):
+        city = self.factory.city()
+        assert isinstance(city, string_types)
+        assert city in FiProvider.cities
+
+    def test_street_suffix(self):
+        suffix = self.factory.street_suffix()
+        assert isinstance(suffix, string_types)
+        assert suffix in FiProvider.street_suffixes
+
+
 class TestElGR(unittest.TestCase):
     """ Tests addresses in the el_GR locale """
 
diff --git a/tests/providers/test_job.py b/tests/providers/test_job.py
index a6cb19c5..46a168b3 100644
--- a/tests/providers/test_job.py
+++ b/tests/providers/test_job.py
@@ -7,6 +7,7 @@ import unittest
 from faker import Faker
 
 from tests import string_types
+from faker.providers.job.fi_FI import Provider as fiFiProvider
 
 
 
@@ -44,3 +45,17 @@ class TestHuHU(unittest.TestCase):
     def test_job(self):
         job = self.factory.job()
         assert isinstance(job, string_types)
+
+
+class TestFiFI(unittest.TestCase):
+    "Tests for fi_FI locale"
+
+    def setUp(self):
+        self.factory = Faker('fi_FI')
+
+    def test_job(self):
+        job = self.factory.job()
+        self.assertTrue(isinstance(job, string_types))
+        self.assertTrue(job in fiFiProvider.jobs)
+
+