Skip to content

Commit

Permalink
Merge pull request #9 from crd/develop
Browse files Browse the repository at this point in the history
Prepare for 0.2.0 Release
  • Loading branch information
crd committed Sep 6, 2018
2 parents ecbc574 + 3ebc84e commit 9865872
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 51 deletions.
21 changes: 21 additions & 0 deletions .codacy.yml
@@ -0,0 +1,21 @@
---
engines:
pylint:
enabled: true
python_version: 3

duplication:
enabled: true

metrics:
enabled: true

coverage:
enabled: true

languages:
python:

exclude_paths:
- tests/*
- setup.py
2 changes: 1 addition & 1 deletion .coveragerc
@@ -1,3 +1,3 @@
[run]
source = .
omit = setup.py,tests/*,faker_credit_score/__version__.py
omit = setup.py,tests/*,faker_credit_score/__version__.py,.venv/*
3 changes: 2 additions & 1 deletion .travis.yml
Expand Up @@ -8,4 +8,5 @@ env:
# command to install dependencies
install: make setup
# # command to run tests
script: make test
script: make test
after_success: make coverage
7 changes: 5 additions & 2 deletions Makefile
Expand Up @@ -11,9 +11,12 @@ setup:
pipenv install --dev --three

activate:
pipenv shell -c
pipenv shell

test:
pipenv run python -m unittest tests/test_faker_credit_score.py
pipenv run coverage run -m unittest tests/*

coverage:
pipenv run coveralls

.PHONY: help activate test
1 change: 1 addition & 0 deletions Pipfile
Expand Up @@ -8,6 +8,7 @@ name = "pypi"
[dev-packages]
coverage = "*"
faker = "*"
python-coveralls = "*"

[requires]
python_version = "3.6"
111 changes: 78 additions & 33 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 32 additions & 13 deletions faker_credit_score/__init__.py
@@ -1,18 +1,24 @@
# coding=utf-8
from __future__ import unicode_literals
from collections import namedtuple, OrderedDict
from collections import OrderedDict

from faker.providers import BaseProvider


class CreditScoreObject(object):
def __init__(self, name="FICO SCORE 8", provider="FICO", score_range=[300, 850]):
""" Credit Score Object that uses fico8 as a sensible default. """
def __init__(
self,
name="FICO Score 8",
providers=("Equifax", "Experian", "TransUnion"),
score_range=(300, 850),
):
self.name = name
self.provider = provider
self.providers = providers
self.score_range = score_range


class CreditScore(BaseProvider):
class Provider(BaseProvider):

# FICO 8 Score is the most widely-used non-industry specific credit score model,
# followed by 5, 2, and 4 as per https://www.myfico.com/credit-education/credit-scores/fico-score-versions
Expand All @@ -22,17 +28,28 @@ class CreditScore(BaseProvider):
# * https://blog.myfico.com/whats-a-good-credit-score-range/
# * https://www.wrightrealtors.com/home/credit-score.htm

fico8_range = [300, 850]
fico5_range = [334, 818]
fico2_range = [320, 844]
fico4_range = [309, 839]
fico8_name = "FICO Score 8"
fico8_providers = ("Equifax", "Experian", "TransUnion")
fico8_range = (300, 850)

fico5_name = "Equifax Beacon 5.0"
fico5_providers = ("Equifax",)
fico5_range = (334, 818)

fico2_name = "Experian/Fair Isaac Risk Model V2SM"
fico2_providers = ("Experian",)
fico2_range = (320, 844)

fico4_name = "TransUnion FICO Risk Score, Classic 04"
fico4_providers = ("TransUnion",)
fico4_range = (309, 839)

credit_score_types = OrderedDict(
(
("fico8", CreditScoreObject("FICO Score 8", "FICO", fico8_range)),
("fico5", CreditScoreObject("Equifax Beacon 5.0", "Equifax", fico5_range)),
("fico2", CreditScoreObject("Experian/Fair Isaac Risk Model V2SM", "Experian", fico2_range)),
("fico4", CreditScoreObject("TransUnion FICO Risk Score, Classic 04", "TransUnion", fico4_range)),
("fico8", CreditScoreObject(fico8_name, fico8_providers, fico8_range)),
("fico5", CreditScoreObject(fico5_name, fico5_providers, fico5_range)),
("fico2", CreditScoreObject(fico2_name, fico2_providers, fico2_range)),
("fico4", CreditScoreObject(fico4_name, fico4_providers, fico4_range)),
)
)
credit_score_types["fico"] = credit_score_types["fico8"]
Expand All @@ -47,7 +64,7 @@ def credit_score_provider(self, score_type=None):
""" Returns the name of the credit score provider. """
if score_type is None:
score_type = self.random_element(self.credit_score_types.keys())
return self._credit_score_type(score_type).provider
return self.random_element(self._credit_score_type(score_type).providers)

def credit_score(self, score_type=None):
""" Returns a valid credit score. """
Expand Down Expand Up @@ -78,3 +95,5 @@ def _credit_score_type(self, score_type=None):
def _generate_credit_score(self, credit_score_range):
""" Returns an integer within the range specified by credit_score_range. """
return self.generator.random_int(*credit_score_range)

CreditScore = Provider
2 changes: 1 addition & 1 deletion faker_credit_score/__version__.py
@@ -1,4 +1,4 @@
"""Package version."""
VERSION = (0, 1, 1)
VERSION = (0, 2, 0)

__version__ = '.'.join(map(str, VERSION))

0 comments on commit 9865872

Please sign in to comment.