11# coding=utf-8
22from __future__ import unicode_literals
3- from collections import namedtuple , OrderedDict
3+ from collections import OrderedDict
44
55from faker .providers import BaseProvider
66
77
88class CreditScoreObject (object ):
9- def __init__ (self , name = "FICO SCORE 8" , provider = "FICO" , score_range = [300 , 850 ]):
9+ """ Credit Score Object that uses fico8 as a sensible default. """
10+ def __init__ (
11+ self ,
12+ name = "FICO Score 8" ,
13+ providers = ("Equifax" , "Experian" , "TransUnion" ),
14+ score_range = (300 , 850 ),
15+ ):
1016 self .name = name
11- self .provider = provider
17+ self .providers = providers
1218 self .score_range = score_range
1319
1420
15- class CreditScore (BaseProvider ):
21+ class Provider (BaseProvider ):
1622
1723 # FICO 8 Score is the most widely-used non-industry specific credit score model,
1824 # followed by 5, 2, and 4 as per https://www.myfico.com/credit-education/credit-scores/fico-score-versions
@@ -22,17 +28,28 @@ class CreditScore(BaseProvider):
2228 # * https://blog.myfico.com/whats-a-good-credit-score-range/
2329 # * https://www.wrightrealtors.com/home/credit-score.htm
2430
25- fico8_range = [300 , 850 ]
26- fico5_range = [334 , 818 ]
27- fico2_range = [320 , 844 ]
28- fico4_range = [309 , 839 ]
31+ fico8_name = "FICO Score 8"
32+ fico8_providers = ("Equifax" , "Experian" , "TransUnion" )
33+ fico8_range = (300 , 850 )
34+
35+ fico5_name = "Equifax Beacon 5.0"
36+ fico5_providers = ("Equifax" ,)
37+ fico5_range = (334 , 818 )
38+
39+ fico2_name = "Experian/Fair Isaac Risk Model V2SM"
40+ fico2_providers = ("Experian" ,)
41+ fico2_range = (320 , 844 )
42+
43+ fico4_name = "TransUnion FICO Risk Score, Classic 04"
44+ fico4_providers = ("TransUnion" ,)
45+ fico4_range = (309 , 839 )
2946
3047 credit_score_types = OrderedDict (
3148 (
32- ("fico8" , CreditScoreObject ("FICO Score 8" , "FICO" , fico8_range )),
33- ("fico5" , CreditScoreObject ("Equifax Beacon 5.0" , "Equifax" , fico5_range )),
34- ("fico2" , CreditScoreObject ("Experian/Fair Isaac Risk Model V2SM" , "Experian" , fico2_range )),
35- ("fico4" , CreditScoreObject ("TransUnion FICO Risk Score, Classic 04" , "TransUnion" , fico4_range )),
49+ ("fico8" , CreditScoreObject (fico8_name , fico8_providers , fico8_range )),
50+ ("fico5" , CreditScoreObject (fico5_name , fico5_providers , fico5_range )),
51+ ("fico2" , CreditScoreObject (fico2_name , fico2_providers , fico2_range )),
52+ ("fico4" , CreditScoreObject (fico4_name , fico4_providers , fico4_range )),
3653 )
3754 )
3855 credit_score_types ["fico" ] = credit_score_types ["fico8" ]
@@ -47,7 +64,7 @@ def credit_score_provider(self, score_type=None):
4764 """ Returns the name of the credit score provider. """
4865 if score_type is None :
4966 score_type = self .random_element (self .credit_score_types .keys ())
50- return self ._credit_score_type (score_type ).provider
67+ return self .random_element ( self . _credit_score_type (score_type ).providers )
5168
5269 def credit_score (self , score_type = None ):
5370 """ Returns a valid credit score. """
@@ -78,3 +95,5 @@ def _credit_score_type(self, score_type=None):
7895 def _generate_credit_score (self , credit_score_range ):
7996 """ Returns an integer within the range specified by credit_score_range. """
8097 return self .generator .random_int (* credit_score_range )
98+
99+ CreditScore = Provider
0 commit comments