diff --git a/authentication/admin.py b/authentication/admin.py
index 5714dc1c..f5feb1ea 100644
--- a/authentication/admin.py
+++ b/authentication/admin.py
@@ -9,18 +9,21 @@
class CustomUserAdmin(ModelAdmin):
search_fields = ("email",)
- ordering = ('email_or_cell', 'email')
+ ordering = ("email_or_cell", "email")
+
+ list_display = ("email_or_cell", "is_staff")
- list_display = ('email_or_cell', 'is_staff')
class CustomGroupAdmin(ModelAdmin, GroupAdmin):
pass
+
class CustomTokenAdmin(ModelAdmin, TokenAdmin):
pass
+
admin.site.register(User, CustomUserAdmin)
admin.site.unregister(Group)
admin.site.register(Group, CustomGroupAdmin)
admin.site.unregister(TokenProxy)
-admin.site.register(TokenProxy, CustomTokenAdmin)
\ No newline at end of file
+admin.site.register(TokenProxy, CustomTokenAdmin)
diff --git a/authentication/apps.py b/authentication/apps.py
index ead97686..7b90ca12 100644
--- a/authentication/apps.py
+++ b/authentication/apps.py
@@ -2,5 +2,5 @@
class AuthConfig(AppConfig):
- default_auto_field = 'django.db.models.BigAutoField'
- name = 'authentication'
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "authentication"
diff --git a/authentication/migrations/0001_initial.py b/authentication/migrations/0001_initial.py
index dc1b18f1..8b950326 100644
--- a/authentication/migrations/0001_initial.py
+++ b/authentication/migrations/0001_initial.py
@@ -7,38 +7,88 @@
class Migration(migrations.Migration):
-
initial = True
dependencies = [
- ('auth', '0012_alter_user_first_name_max_length'),
+ ("auth", "0012_alter_user_first_name_max_length"),
]
operations = [
migrations.CreateModel(
- name='User',
+ name="User",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('password', models.CharField(max_length=128, verbose_name='password')),
- ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
- ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
- ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
- ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
- ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
- ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
- ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
- ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
- ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
- ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
- ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("password", models.CharField(max_length=128, verbose_name="password")),
+ ("last_login", models.DateTimeField(blank=True, null=True, verbose_name="last login")),
+ (
+ "is_superuser",
+ models.BooleanField(
+ default=False,
+ help_text="Designates that this user has all permissions without explicitly assigning them.",
+ verbose_name="superuser status",
+ ),
+ ),
+ (
+ "username",
+ models.CharField(
+ error_messages={"unique": "A user with that username already exists."},
+ help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
+ max_length=150,
+ unique=True,
+ validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
+ verbose_name="username",
+ ),
+ ),
+ ("first_name", models.CharField(blank=True, max_length=150, verbose_name="first name")),
+ ("last_name", models.CharField(blank=True, max_length=150, verbose_name="last name")),
+ ("email", models.EmailField(blank=True, max_length=254, verbose_name="email address")),
+ (
+ "is_staff",
+ models.BooleanField(
+ default=False,
+ help_text="Designates whether the user can log into this admin site.",
+ verbose_name="staff status",
+ ),
+ ),
+ (
+ "is_active",
+ models.BooleanField(
+ default=True,
+ help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
+ verbose_name="active",
+ ),
+ ),
+ ("date_joined", models.DateTimeField(default=django.utils.timezone.now, verbose_name="date joined")),
+ (
+ "groups",
+ models.ManyToManyField(
+ blank=True,
+ help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
+ related_name="user_set",
+ related_query_name="user",
+ to="auth.group",
+ verbose_name="groups",
+ ),
+ ),
+ (
+ "user_permissions",
+ models.ManyToManyField(
+ blank=True,
+ help_text="Specific permissions for this user.",
+ related_name="user_set",
+ related_query_name="user",
+ to="auth.permission",
+ verbose_name="user permissions",
+ ),
+ ),
],
options={
- 'verbose_name': 'user',
- 'verbose_name_plural': 'users',
- 'abstract': False,
+ "verbose_name": "user",
+ "verbose_name_plural": "users",
+ "abstract": False,
},
managers=[
- ('objects', django.contrib.auth.models.UserManager()),
+ ("objects", django.contrib.auth.models.UserManager()),
],
),
]
diff --git a/authentication/migrations/0002_remove_user_username_user_cell_user_email_or_cell_and_more.py b/authentication/migrations/0002_remove_user_username_user_cell_user_email_or_cell_and_more.py
index 3de50bff..aaef7d13 100644
--- a/authentication/migrations/0002_remove_user_username_user_cell_user_email_or_cell_and_more.py
+++ b/authentication/migrations/0002_remove_user_username_user_cell_user_email_or_cell_and_more.py
@@ -5,31 +5,32 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0001_initial'),
+ ("authentication", "0001_initial"),
]
operations = [
migrations.RemoveField(
- model_name='user',
- name='username',
+ model_name="user",
+ name="username",
),
migrations.AddField(
- model_name='user',
- name='cell',
- field=phonenumber_field.modelfields.PhoneNumberField(default='+17202373591', max_length=128, region=None, unique=True),
+ model_name="user",
+ name="cell",
+ field=phonenumber_field.modelfields.PhoneNumberField(
+ default="+17202373591", max_length=128, region=None, unique=True
+ ),
preserve_default=False,
),
migrations.AddField(
- model_name='user',
- name='email_or_cell',
- field=models.CharField(default='bhiatt@garycommunity.org', max_length=320, unique=True),
+ model_name="user",
+ name="email_or_cell",
+ field=models.CharField(default="bhiatt@garycommunity.org", max_length=320, unique=True),
preserve_default=False,
),
migrations.AlterField(
- model_name='user',
- name='email',
- field=models.EmailField(max_length=254, unique=True, verbose_name='email address'),
+ model_name="user",
+ name="email",
+ field=models.EmailField(max_length=254, unique=True, verbose_name="email address"),
),
]
diff --git a/authentication/migrations/0003_user_screen.py b/authentication/migrations/0003_user_screen.py
index 07047841..85a6e3bf 100644
--- a/authentication/migrations/0003_user_screen.py
+++ b/authentication/migrations/0003_user_screen.py
@@ -5,17 +5,22 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0016_remove_screen_email'),
- ('authentication', '0002_remove_user_username_user_cell_user_email_or_cell_and_more'),
+ ("screener", "0016_remove_screen_email"),
+ ("authentication", "0002_remove_user_username_user_cell_user_email_or_cell_and_more"),
]
operations = [
migrations.AddField(
- model_name='user',
- name='screen',
- field=models.ForeignKey(blank=True, default=1, on_delete=django.db.models.deletion.CASCADE, related_name='screen', to='screener.screen'),
+ model_name="user",
+ name="screen",
+ field=models.ForeignKey(
+ blank=True,
+ default=1,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="screen",
+ to="screener.screen",
+ ),
preserve_default=False,
),
]
diff --git a/authentication/migrations/0004_user_tcpa_consent.py b/authentication/migrations/0004_user_tcpa_consent.py
index c4cbf267..0558880e 100644
--- a/authentication/migrations/0004_user_tcpa_consent.py
+++ b/authentication/migrations/0004_user_tcpa_consent.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0003_user_screen'),
+ ("authentication", "0003_user_screen"),
]
operations = [
migrations.AddField(
- model_name='user',
- name='tcpa_consent',
+ model_name="user",
+ name="tcpa_consent",
field=models.BooleanField(default=False),
preserve_default=False,
),
diff --git a/authentication/migrations/0005_alter_user_cell_alter_user_email_alter_user_screen.py b/authentication/migrations/0005_alter_user_cell_alter_user_email_alter_user_screen.py
index 85b1efa5..c75960cb 100644
--- a/authentication/migrations/0005_alter_user_cell_alter_user_email_alter_user_screen.py
+++ b/authentication/migrations/0005_alter_user_cell_alter_user_email_alter_user_screen.py
@@ -6,26 +6,27 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0017_screen_last_email_request_date'),
- ('authentication', '0004_user_tcpa_consent'),
+ ("screener", "0017_screen_last_email_request_date"),
+ ("authentication", "0004_user_tcpa_consent"),
]
operations = [
migrations.AlterField(
- model_name='user',
- name='cell',
+ model_name="user",
+ name="cell",
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None, unique=True),
),
migrations.AlterField(
- model_name='user',
- name='email',
- field=models.EmailField(blank=True, max_length=254, unique=True, verbose_name='email address'),
+ model_name="user",
+ name="email",
+ field=models.EmailField(blank=True, max_length=254, unique=True, verbose_name="email address"),
),
migrations.AlterField(
- model_name='user',
- name='screen',
- field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='users', to='screener.screen'),
+ model_name="user",
+ name="screen",
+ field=models.ForeignKey(
+ blank=True, on_delete=django.db.models.deletion.CASCADE, related_name="users", to="screener.screen"
+ ),
),
]
diff --git a/authentication/migrations/0006_remove_user_screen.py b/authentication/migrations/0006_remove_user_screen.py
index 9f9d471e..0cde4425 100644
--- a/authentication/migrations/0006_remove_user_screen.py
+++ b/authentication/migrations/0006_remove_user_screen.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0005_alter_user_cell_alter_user_email_alter_user_screen'),
+ ("authentication", "0005_alter_user_cell_alter_user_email_alter_user_screen"),
]
operations = [
migrations.RemoveField(
- model_name='user',
- name='screen',
+ model_name="user",
+ name="screen",
),
]
diff --git a/authentication/migrations/0007_alter_user_cell_alter_user_email.py b/authentication/migrations/0007_alter_user_cell_alter_user_email.py
index 62269fb8..23e4f715 100644
--- a/authentication/migrations/0007_alter_user_cell_alter_user_email.py
+++ b/authentication/migrations/0007_alter_user_cell_alter_user_email.py
@@ -5,20 +5,21 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0006_remove_user_screen'),
+ ("authentication", "0006_remove_user_screen"),
]
operations = [
migrations.AlterField(
- model_name='user',
- name='cell',
- field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None, unique=True),
+ model_name="user",
+ name="cell",
+ field=phonenumber_field.modelfields.PhoneNumberField(
+ blank=True, max_length=128, null=True, region=None, unique=True
+ ),
),
migrations.AlterField(
- model_name='user',
- name='email',
- field=models.EmailField(blank=True, max_length=254, null=True, unique=True, verbose_name='email address'),
+ model_name="user",
+ name="email",
+ field=models.EmailField(blank=True, max_length=254, null=True, unique=True, verbose_name="email address"),
),
]
diff --git a/authentication/migrations/0008_user_send_offers_user_send_updates.py b/authentication/migrations/0008_user_send_offers_user_send_updates.py
index 139f8ed8..00018186 100644
--- a/authentication/migrations/0008_user_send_offers_user_send_updates.py
+++ b/authentication/migrations/0008_user_send_offers_user_send_updates.py
@@ -4,20 +4,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0007_alter_user_cell_alter_user_email'),
+ ("authentication", "0007_alter_user_cell_alter_user_email"),
]
operations = [
migrations.AddField(
- model_name='user',
- name='send_offers',
+ model_name="user",
+ name="send_offers",
field=models.BooleanField(default=False),
),
migrations.AddField(
- model_name='user',
- name='send_updates',
+ model_name="user",
+ name="send_updates",
field=models.BooleanField(default=False),
),
]
diff --git a/authentication/migrations/0009_alter_user_first_name_alter_user_last_name.py b/authentication/migrations/0009_alter_user_first_name_alter_user_last_name.py
index 6766c753..1a19ce8f 100644
--- a/authentication/migrations/0009_alter_user_first_name_alter_user_last_name.py
+++ b/authentication/migrations/0009_alter_user_first_name_alter_user_last_name.py
@@ -4,20 +4,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0008_user_send_offers_user_send_updates'),
+ ("authentication", "0008_user_send_offers_user_send_updates"),
]
operations = [
migrations.AlterField(
- model_name='user',
- name='first_name',
+ model_name="user",
+ name="first_name",
field=models.CharField(blank=True, max_length=320, null=True),
),
migrations.AlterField(
- model_name='user',
- name='last_name',
+ model_name="user",
+ name="last_name",
field=models.CharField(blank=True, max_length=320, null=True),
),
]
diff --git a/authentication/migrations/0010_user_language_code.py b/authentication/migrations/0010_user_language_code.py
index 369c56a5..6522d847 100644
--- a/authentication/migrations/0010_user_language_code.py
+++ b/authentication/migrations/0010_user_language_code.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0009_alter_user_first_name_alter_user_last_name'),
+ ("authentication", "0009_alter_user_first_name_alter_user_last_name"),
]
operations = [
migrations.AddField(
- model_name='user',
- name='language_code',
+ model_name="user",
+ name="language_code",
field=models.CharField(blank=True, max_length=12, null=True),
),
]
diff --git a/authentication/migrations/0011_alter_user_managers.py b/authentication/migrations/0011_alter_user_managers.py
index 5371c3ef..db9c6959 100644
--- a/authentication/migrations/0011_alter_user_managers.py
+++ b/authentication/migrations/0011_alter_user_managers.py
@@ -4,15 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0010_user_language_code'),
+ ("authentication", "0010_user_language_code"),
]
operations = [
migrations.AlterModelManagers(
- name='user',
- managers=[
- ],
+ name="user",
+ managers=[],
),
]
diff --git a/authentication/migrations/0012_user_external_id.py b/authentication/migrations/0012_user_external_id.py
index 9713bd33..90a0380f 100644
--- a/authentication/migrations/0012_user_external_id.py
+++ b/authentication/migrations/0012_user_external_id.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('authentication', '0011_alter_user_managers'),
+ ("authentication", "0011_alter_user_managers"),
]
operations = [
migrations.AddField(
- model_name='user',
- name='external_id',
+ model_name="user",
+ name="external_id",
field=models.CharField(blank=True, max_length=320, null=True),
),
]
diff --git a/authentication/models.py b/authentication/models.py
index fb734b6e..4facb483 100644
--- a/authentication/models.py
+++ b/authentication/models.py
@@ -10,12 +10,9 @@ def create_user(self, email_or_cell, tcpa_consent, password=None):
Creates and saves a User with the given email or cell and password.
"""
if not email_or_cell:
- raise ValueError('Users must have an email address or cell phone number')
+ raise ValueError("Users must have an email address or cell phone number")
- user = self.model(
- email_or_cell=email_or_cell,
- tcpa_consent=tcpa_consent
- )
+ user = self.model(email_or_cell=email_or_cell, tcpa_consent=tcpa_consent)
user.set_password(password)
user.save(using=self._db)
@@ -26,17 +23,14 @@ def create_superuser(self, email_or_cell, tcpa_consent, password=None):
Creates and saves a superuser with the given email, date of
birth and password.
"""
- user = self.create_user(
- email_or_cell=email_or_cell,
- password=password,
- tcpa_consent=tcpa_consent
- )
+ user = self.create_user(email_or_cell=email_or_cell, password=password, tcpa_consent=tcpa_consent)
user.is_admin = True
user.is_superuser = True
user.is_staff = True
user.save(using=self._db)
return user
+
# Users are created by the screener when someone signs up to provide feedback
# or be notified of future benefits that are available to them. The unique id
# can be either a cell phone number or email address.
@@ -44,7 +38,7 @@ class User(AbstractUser):
username = None
email_or_cell = models.CharField(max_length=320, unique=True)
cell = PhoneNumberField(unique=True, blank=True, null=True)
- email = models.EmailField(_('email address'), unique=True, blank=True, null=True)
+ email = models.EmailField(_("email address"), unique=True, blank=True, null=True)
first_name = models.CharField(max_length=320, blank=True, null=True)
last_name = models.CharField(max_length=320, blank=True, null=True)
language_code = models.CharField(max_length=12, blank=True, null=True)
@@ -55,8 +49,8 @@ class User(AbstractUser):
objects = UserManager()
- USERNAME_FIELD = 'email_or_cell'
- REQUIRED_FIELDS = ['tcpa_consent']
+ USERNAME_FIELD = "email_or_cell"
+ REQUIRED_FIELDS = ["tcpa_consent"]
def save(self, **kwargs):
self.cell = self.cell or None
diff --git a/authentication/serializers.py b/authentication/serializers.py
index 13c1d838..6c9c143b 100644
--- a/authentication/serializers.py
+++ b/authentication/serializers.py
@@ -8,30 +8,30 @@ class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
- 'id',
- 'date_joined',
- 'last_login',
- 'cell',
- 'email',
- 'first_name',
- 'last_name',
- 'email_or_cell',
- 'language_code',
- 'tcpa_consent',
- 'send_offers',
- 'send_updates'
+ "id",
+ "date_joined",
+ "last_login",
+ "cell",
+ "email",
+ "first_name",
+ "last_name",
+ "email_or_cell",
+ "language_code",
+ "tcpa_consent",
+ "send_offers",
+ "send_updates",
)
create_only_fields = (
- 'id',
- 'date_joined',
- 'last_login',
- 'cell',
- 'email',
- 'first_name',
- 'last_name',
- 'email_or_cell',
- 'language_code',
- 'tcpa_consent',
+ "id",
+ "date_joined",
+ "last_login",
+ "cell",
+ "email",
+ "first_name",
+ "last_name",
+ "email_or_cell",
+ "language_code",
+ "tcpa_consent",
)
@@ -40,8 +40,4 @@ class UserOffersSerializer(serializers.ModelSerializer):
class Meta:
model = User
- fields = (
- 'id',
- 'send_offers',
- 'send_updates'
- )
+ fields = ("id", "send_offers", "send_updates")
diff --git a/authentication/urls.py b/authentication/urls.py
index ca03f0d0..ebab708d 100644
--- a/authentication/urls.py
+++ b/authentication/urls.py
@@ -3,10 +3,8 @@
from . import views
router = routers.DefaultRouter()
-router.register(r'users', views.UserViewSet)
+router.register(r"users", views.UserViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
-urlpatterns = [
- path('', include(router.urls))
-]
+urlpatterns = [path("", include(router.urls))]
diff --git a/benefits/asgi.py b/benefits/asgi.py
index 9c3d038c..9d278da0 100644
--- a/benefits/asgi.py
+++ b/benefits/asgi.py
@@ -11,6 +11,6 @@
from django.core.asgi import get_asgi_application
-os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'benefits.settings')
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "benefits.settings")
application = get_asgi_application()
diff --git a/benefits/settings.py b/benefits/settings.py
index e4ba34ed..ef1658e8 100644
--- a/benefits/settings.py
+++ b/benefits/settings.py
@@ -23,25 +23,25 @@
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
-MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
-MEDIA_URL = '/media/'
+MEDIA_ROOT = os.path.join(BASE_DIR, "media")
+MEDIA_URL = "/media/"
LOCALE_PATHS = [
- os.path.join(BASE_DIR, 'locale'),
+ os.path.join(BASE_DIR, "locale"),
]
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = config('SECRET_KEY')
+SECRET_KEY = config("SECRET_KEY")
# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = config('DJANGO_DEBUG', 'False') == 'True'
+DEBUG = config("DJANGO_DEBUG", "False") == "True"
-ALLOWED_HOSTS = ['*']
+ALLOWED_HOSTS = ["*"]
-AUTH_USER_MODEL = 'authentication.User'
+AUTH_USER_MODEL = "authentication.User"
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
@@ -49,13 +49,13 @@
]
REST_FRAMEWORK = {
- 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
- 'DEFAULT_AUTHENTICATION_CLASSES': [
- 'rest_framework.authentication.SessionAuthentication',
- 'rest_framework.authentication.TokenAuthentication',
+ "DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"],
+ "DEFAULT_AUTHENTICATION_CLASSES": [
+ "rest_framework.authentication.SessionAuthentication",
+ "rest_framework.authentication.TokenAuthentication",
],
- 'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated'],
- 'EXCEPTION_HANDLER': 'benefits.views.drf_exception_handler',
+ "DEFAULT_PERMISSION_CLASSES": ["rest_framework.permissions.IsAuthenticated"],
+ "EXCEPTION_HANDLER": "benefits.views.drf_exception_handler",
}
CORS_ALLOW_ALL_ORIGINS = True
@@ -70,71 +70,71 @@
"unfold.contrib.guardian", # optional, if django-guardian package is used
# optional, if django-simple-history package is used
"unfold.contrib.simple_history",
- 'authentication.apps.AuthConfig',
- 'corsheaders',
- 'screener.apps.ScreenerConfig',
- 'programs.apps.ProgramsConfig',
- 'configuration.apps.ConfigurationConfig',
- 'integrations.apps.IntegrationsConfig',
- 'translations.apps.TranslationsConfig',
- 'rest_framework',
- 'rest_framework.authtoken',
- 'phonenumber_field',
- 'parler',
- 'django_filters',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'drf_yasg',
+ "authentication.apps.AuthConfig",
+ "corsheaders",
+ "screener.apps.ScreenerConfig",
+ "programs.apps.ProgramsConfig",
+ "configuration.apps.ConfigurationConfig",
+ "integrations.apps.IntegrationsConfig",
+ "translations.apps.TranslationsConfig",
+ "rest_framework",
+ "rest_framework.authtoken",
+ "phonenumber_field",
+ "parler",
+ "django_filters",
+ "django.contrib.admin",
+ "django.contrib.auth",
+ "django.contrib.contenttypes",
+ "django.contrib.sessions",
+ "django.contrib.messages",
+ "django.contrib.staticfiles",
+ "drf_yasg",
]
MIDDLEWARE = [
- 'django.middleware.security.SecurityMiddleware',
- 'whitenoise.middleware.WhiteNoiseMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'corsheaders.middleware.CorsMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- 'django.middleware.locale.LocaleMiddleware',
+ "django.middleware.security.SecurityMiddleware",
+ "whitenoise.middleware.WhiteNoiseMiddleware",
+ "django.contrib.sessions.middleware.SessionMiddleware",
+ "corsheaders.middleware.CorsMiddleware",
+ "django.middleware.common.CommonMiddleware",
+ "django.middleware.csrf.CsrfViewMiddleware",
+ "django.contrib.auth.middleware.AuthenticationMiddleware",
+ "django.contrib.messages.middleware.MessageMiddleware",
+ "django.middleware.clickjacking.XFrameOptionsMiddleware",
+ "django.middleware.locale.LocaleMiddleware",
]
-ROOT_URLCONF = 'benefits.urls'
+ROOT_URLCONF = "benefits.urls"
TEMPLATES = [
{
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [os.path.join(BASE_DIR, 'templates')],
- 'APP_DIRS': True,
- 'OPTIONS': {
- 'context_processors': [
- 'django.template.context_processors.debug',
- 'django.template.context_processors.request',
- 'django.contrib.auth.context_processors.auth',
- 'django.contrib.messages.context_processors.messages',
+ "BACKEND": "django.template.backends.django.DjangoTemplates",
+ "DIRS": [os.path.join(BASE_DIR, "templates")],
+ "APP_DIRS": True,
+ "OPTIONS": {
+ "context_processors": [
+ "django.template.context_processors.debug",
+ "django.template.context_processors.request",
+ "django.contrib.auth.context_processors.auth",
+ "django.contrib.messages.context_processors.messages",
],
},
},
]
-WSGI_APPLICATION = 'benefits.wsgi.application'
+WSGI_APPLICATION = "benefits.wsgi.application"
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.postgresql',
- 'NAME': config('DB_NAME'),
- 'USER': config('DB_USER'),
- 'PASSWORD': config('DB_PASS'),
- 'HOST': config('DB_HOST', 'localhost'),
+ "default": {
+ "ENGINE": "django.db.backends.postgresql",
+ "NAME": config("DB_NAME"),
+ "USER": config("DB_USER"),
+ "PASSWORD": config("DB_PASS"),
+ "HOST": config("DB_HOST", "localhost"),
}
}
@@ -144,16 +144,16 @@
AUTH_PASSWORD_VALIDATORS = [
{
- 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
},
{
- 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
},
{
- 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
},
{
- 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
},
]
@@ -161,23 +161,23 @@
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
-LANGUAGE_CODE = 'en-us'
+LANGUAGE_CODE = "en-us"
LANGUAGES = (
- ('en-us', _("US English")),
- ('es', _('Spanish')),
- ('vi', _('Vietnamese')),
- ('fr', _('French')),
- ('am', _('Amharic')),
- ('so', _('Somali')),
- ('ru', _('Russian')),
- ('ne', _('Nepali')),
- ('my', _('Burmese')),
- ('zh', _('Chinese')),
- ('ar', _('Arabic')),
+ ("en-us", _("US English")),
+ ("es", _("Spanish")),
+ ("vi", _("Vietnamese")),
+ ("fr", _("French")),
+ ("am", _("Amharic")),
+ ("so", _("Somali")),
+ ("ru", _("Russian")),
+ ("ne", _("Nepali")),
+ ("my", _("Burmese")),
+ ("zh", _("Chinese")),
+ ("ar", _("Arabic")),
)
-TIME_ZONE = 'UTC'
+TIME_ZONE = "UTC"
USE_I18N = True
@@ -187,46 +187,46 @@
PARLER_DEFAULT_ACTIVATE = True
PARLER_LANGUAGES = {
None: (
- {'code': 'en-us'},
- {'code': 'es'},
- {'code': 'vi'},
- {'code': 'fr'},
- {'code': 'am'},
- {'code': 'so'},
- {'code': 'ru'},
- {'code': 'ne'},
- {'code': 'my'},
- {'code': 'zh'},
- {'code': 'ar'},
+ {"code": "en-us"},
+ {"code": "es"},
+ {"code": "vi"},
+ {"code": "fr"},
+ {"code": "am"},
+ {"code": "so"},
+ {"code": "ru"},
+ {"code": "ne"},
+ {"code": "my"},
+ {"code": "zh"},
+ {"code": "ar"},
),
- 'default': {
- 'fallbacks': ['en-us'], # defaults to PARLER_DEFAULT_LANGUAGE_CODE
+ "default": {
+ "fallbacks": ["en-us"], # defaults to PARLER_DEFAULT_LANGUAGE_CODE
# the default; let .active_translations() return fallbacks too.
- 'hide_untranslated': True,
+ "hide_untranslated": True,
},
}
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
-STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
-STATIC_URL = '/static/'
-STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
+STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
+STATIC_URL = "/static/"
+STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
-DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
-CSRF_FAILURE_VIEW = 'benefits.views.catch_403_view'
+DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
+CSRF_FAILURE_VIEW = "benefits.views.catch_403_view"
-SWAGGER_SETTINGS = {'SUPPORTED_SUBMIT_METHODS': ('get',)}
+SWAGGER_SETTINGS = {"SUPPORTED_SUBMIT_METHODS": ("get",)}
# Enable logging with Sentry if it is enabled
-if config('SENTRY_DSN', None) is not None:
+if config("SENTRY_DSN", None) is not None:
sentry_sdk.init(
- dsn=config('SENTRY_DSN'),
+ dsn=config("SENTRY_DSN"),
integrations=[DjangoIntegration()],
- environment='dev' if DEBUG else 'production',
+ environment="dev" if DEBUG else "production",
)
django_heroku.settings(locals())
@@ -236,9 +236,9 @@
UNFOLD = {
"SITE_HEADER": _("MFB Admin"),
"SITE_TITLE": _("MFB Admin"),
- 'APP_NAME': 'Benefits',
- 'APP_VERSION': '1.0.0',
- 'APP_DESCRIPTION': 'Benefits is a Django application that helps people find and apply for benefits.',
+ "APP_NAME": "Benefits",
+ "APP_VERSION": "1.0.0",
+ "APP_DESCRIPTION": "Benefits is a Django application that helps people find and apply for benefits.",
"SIDEBAR": {
"show_search": True,
"show_all_applications": True,
@@ -271,7 +271,7 @@
"icon": "translate",
"link": reverse_lazy("admin:translations_translation_changelist"),
},
- ]
+ ],
},
{
"separator": True,
@@ -304,5 +304,5 @@
],
},
],
- }
+ },
}
diff --git a/benefits/urls.py b/benefits/urls.py
index 0cf296a6..0caf97f5 100644
--- a/benefits/urls.py
+++ b/benefits/urls.py
@@ -1,4 +1,4 @@
-'''benefits URL Configuration
+"""benefits URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.2/topics/http/urls/
@@ -12,22 +12,22 @@
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
-'''
+"""
from django.contrib import admin
from django.urls import include, path
from sesame.views import LoginView
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
-handler403 = 'benefits.views.catch_403_view'
-handler400 = 'benefits.views.catch_400_view'
+handler403 = "benefits.views.catch_403_view"
+handler400 = "benefits.views.catch_400_view"
schema_view = get_schema_view(
openapi.Info(
- default_version='v1',
- title='Colorado Open Benefits API',
- description='API calculates eligibility across over 40 benefit programs in Colorado',
- version='0.0.1',
+ default_version="v1",
+ title="Colorado Open Benefits API",
+ description="API calculates eligibility across over 40 benefit programs in Colorado",
+ version="0.0.1",
),
public=True,
permission_classes=[],
@@ -35,16 +35,16 @@
)
urlpatterns = [
- path('api/', include('configuration.urls')),
- path('api/', include('screener.urls')),
- path('api/', include('programs.urls')),
- path('api/', include('authentication.urls')),
- path('api/translations/', include('translations.urls')),
- path('admin/', admin.site.urls),
- path('sesame/login/', LoginView.as_view(), name='sesame-login'),
+ path("api/", include("configuration.urls")),
+ path("api/", include("screener.urls")),
+ path("api/", include("programs.urls")),
+ path("api/", include("authentication.urls")),
+ path("api/translations/", include("translations.urls")),
+ path("admin/", admin.site.urls),
+ path("sesame/login/", LoginView.as_view(), name="sesame-login"),
path(
- 'api/documentation/',
- schema_view.with_ui('swagger', cache_timeout=0),
- name='schema-swagger-ui',
+ "api/documentation/",
+ schema_view.with_ui("swagger", cache_timeout=0),
+ name="schema-swagger-ui",
),
]
diff --git a/benefits/views.py b/benefits/views.py
index 4be4d2c6..f0321de6 100644
--- a/benefits/views.py
+++ b/benefits/views.py
@@ -4,15 +4,15 @@
def catch_403_view(*args, **kwargs):
- capture_message('Unauthorized', level='warning')
+ capture_message("Unauthorized", level="warning")
- return HttpResponseForbidden('Forbidden')
+ return HttpResponseForbidden("Forbidden")
def catch_400_view(*args, **kwargs):
- capture_message('Bad Request', level='warning')
+ capture_message("Bad Request", level="warning")
- return HttpResponseBadRequest('Bad Request')
+ return HttpResponseBadRequest("Bad Request")
def drf_exception_handler(exc, context):
@@ -23,7 +23,7 @@ def drf_exception_handler(exc, context):
capture_message(
response.reason_phrase,
- level='warning',
+ level="warning",
)
return response
diff --git a/benefits/wsgi.py b/benefits/wsgi.py
index f5d67b28..3ef70567 100644
--- a/benefits/wsgi.py
+++ b/benefits/wsgi.py
@@ -11,6 +11,6 @@
from django.core.wsgi import get_wsgi_application
-os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'benefits.settings')
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "benefits.settings")
application = get_wsgi_application()
diff --git a/configuration/admin.py b/configuration/admin.py
index 8db196be..64d648ed 100644
--- a/configuration/admin.py
+++ b/configuration/admin.py
@@ -4,7 +4,7 @@
class ConfigurationAdmin(ModelAdmin):
- search_fields = ('name',)
+ search_fields = ("name",)
admin.site.register(Configuration, ConfigurationAdmin)
diff --git a/configuration/management/commands/add_config.py b/configuration/management/commands/add_config.py
index 92900bdc..8e12c15a 100644
--- a/configuration/management/commands/add_config.py
+++ b/configuration/management/commands/add_config.py
@@ -1,41 +1,2588 @@
from django.core.management.base import BaseCommand
from configuration.models import (
- Configuration,
+ Configuration,
)
class Command(BaseCommand):
- help = (
- 'Create and add config data to database'
- )
+ help = "Create and add config data to database"
- acute_condition_options = {"food": {"icon": {"_name": "Food", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.food", "_default_message": "Food or groceries"}, "housing": {"icon": {"_name": "Housing", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.housing", "_default_message": "Help with managing your mortgage, rent, or utilities"}, "support": {"icon": {"_name": "Support", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.support", "_default_message": "A challenge you or your child would like to talk about"}, "dentalCare": {"icon": {"_name": "Dental_care", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.dentalCare", "_default_message": "Low-cost dental care"}, "babySupplies": {"icon": {"_name": "Baby_supplies", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.babySupplies", "_default_message": "Diapers and other baby supplies"}, "jobResources": {"icon": {"_name": "Job_resources", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.jobResources", "_default_message": "Finding a job"}, "legalServices": {"icon": {"_name": "Legal_services", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.legalServices", "_default_message": "Free or low-cost help with civil legal needs"}, "familyPlanning": {"icon": {"_name": "Family_planning", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.familyPlanning", "_default_message": "Family planning or birth control"}, "childDevelopment": {"icon": {"_name": "Child_development", "_classname": "option-card-icon"}, "_label": "acuteConditionOptions.childDevelopment", "_default_message": "Concern about your baby or toddler's development"}}
+ acute_condition_options = {
+ "food": {
+ "icon": {"_name": "Food", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.food",
+ "_default_message": "Food or groceries",
+ },
+ "housing": {
+ "icon": {"_name": "Housing", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.housing",
+ "_default_message": "Help with managing your mortgage, rent, or utilities",
+ },
+ "support": {
+ "icon": {"_name": "Support", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.support",
+ "_default_message": "A challenge you or your child would like to talk about",
+ },
+ "dentalCare": {
+ "icon": {"_name": "Dental_care", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.dentalCare",
+ "_default_message": "Low-cost dental care",
+ },
+ "babySupplies": {
+ "icon": {"_name": "Baby_supplies", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.babySupplies",
+ "_default_message": "Diapers and other baby supplies",
+ },
+ "jobResources": {
+ "icon": {"_name": "Job_resources", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.jobResources",
+ "_default_message": "Finding a job",
+ },
+ "legalServices": {
+ "icon": {"_name": "Legal_services", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.legalServices",
+ "_default_message": "Free or low-cost help with civil legal needs",
+ },
+ "familyPlanning": {
+ "icon": {"_name": "Family_planning", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.familyPlanning",
+ "_default_message": "Family planning or birth control",
+ },
+ "childDevelopment": {
+ "icon": {"_name": "Child_development", "_classname": "option-card-icon"},
+ "_label": "acuteConditionOptions.childDevelopment",
+ "_default_message": "Concern about your baby or toddler's development",
+ },
+ }
- sign_up_options = {"sendOffers": {"_label": "signUpOptions.sendOffers", "_default_message": "Please notify me when there are paid opportunities to provide feedback on MyFriendBen."}, "sendUpdates": {"_label": "signUpOptions.sendUpdates", "_default_message": "Please notify me when new benefits become available to me that I am likely eligible for based on the information I have provided."}}
+ sign_up_options = {
+ "sendOffers": {
+ "_label": "signUpOptions.sendOffers",
+ "_default_message": "Please notify me when there are paid opportunities to provide feedback on MyFriendBen.",
+ },
+ "sendUpdates": {
+ "_label": "signUpOptions.sendUpdates",
+ "_default_message": "Please notify me when new benefits become available to me that I am likely eligible for based on the information I have provided.",
+ },
+ }
- relationship_options = {"child": {"_label": "relationshipOptions.child", "_default_message": "Child"}, "parent": {"_label": "relationshipOptions.parent", "_default_message": "Parent"}, "spouse": {"_label": "relationshipOptions.spouse", "_default_message": "Spouse"}, "stepChild": {"_label": "relationshipOptions.stepChild", "_default_message": "Step-child"}, "unrelated": {"_label": "relationshipOptions.unrelated", "_default_message": "Unrelated"}, "grandChild": {"_label": "relationshipOptions.grandChild", "_default_message": "Grandchild"}, "stepParent": {"_label": "relationshipOptions.stepParent", "_default_message": "Step-parent"}, "fosterChild": {"_label": "relationshipOptions.fosterChildOrKinshipChild", "_default_message": "Foster Child / Kinship Care"}, "grandParent": {"_label": "relationshipOptions.grandParent", "_default_message": "Grandparent"}, "fosterParent": {"_label": "relationshipOptions.fosterParent", "_default_message": "Foster Parent"}, "relatedOther": {"_label": "relationshipOptions.relatedOther", "_default_message": "Related in some other way"}, "domesticPartner": {"_label": "relationshipOptions.domesticPartner", "_default_message": "Domestic Partner"}, "sisterOrBrother": {"_label": "relationshipOptions.sisterOrBrother", "_default_message": "Sister/Brother"}, "stepSisterOrBrother": {"_label": "relationshipOptions.stepSisterOrBrother", "_default_message": "Step-sister/Step-brother"}, "boyfriendOrGirlfriend": {"_label": "relationshipOptions.boyfriendOrGirlfriend", "_default_message": "Boyfriend/Girlfriend"}}
+ relationship_options = {
+ "child": {"_label": "relationshipOptions.child", "_default_message": "Child"},
+ "parent": {"_label": "relationshipOptions.parent", "_default_message": "Parent"},
+ "spouse": {"_label": "relationshipOptions.spouse", "_default_message": "Spouse"},
+ "stepChild": {"_label": "relationshipOptions.stepChild", "_default_message": "Step-child"},
+ "unrelated": {"_label": "relationshipOptions.unrelated", "_default_message": "Unrelated"},
+ "grandChild": {"_label": "relationshipOptions.grandChild", "_default_message": "Grandchild"},
+ "stepParent": {"_label": "relationshipOptions.stepParent", "_default_message": "Step-parent"},
+ "fosterChild": {
+ "_label": "relationshipOptions.fosterChildOrKinshipChild",
+ "_default_message": "Foster Child / Kinship Care",
+ },
+ "grandParent": {"_label": "relationshipOptions.grandParent", "_default_message": "Grandparent"},
+ "fosterParent": {"_label": "relationshipOptions.fosterParent", "_default_message": "Foster Parent"},
+ "relatedOther": {"_label": "relationshipOptions.relatedOther", "_default_message": "Related in some other way"},
+ "domesticPartner": {"_label": "relationshipOptions.domesticPartner", "_default_message": "Domestic Partner"},
+ "sisterOrBrother": {"_label": "relationshipOptions.sisterOrBrother", "_default_message": "Sister/Brother"},
+ "stepSisterOrBrother": {
+ "_label": "relationshipOptions.stepSisterOrBrother",
+ "_default_message": "Step-sister/Step-brother",
+ },
+ "boyfriendOrGirlfriend": {
+ "_label": "relationshipOptions.boyfriendOrGirlfriend",
+ "_default_message": "Boyfriend/Girlfriend",
+ },
+ }
- referral_options = {"bia": "Benefits in Action", "cch": "Colorado Coalition for the Homeless", "gac": "Get Ahead Colorado", "lgs": "Let's Get Set", "cedp": "Community Economic Defense Project (CEDP)", "frca": "Family Resource Center Association", "211co": "2-1-1 Colorado", "other": {"_label": "referralOptions.other", "_default_message": "Other"}, "jeffcoHS": "Jeffco Human Services", "socialMedia": {"_label": "referralOptions.socialMedia", "_default_message": "Social Media"}, "searchEngine": {"_label": "referralOptions.searchEngine", "_default_message": "Google or other search engine"}, "testOrProspect": {"_label": "referralOptions.testOrProspect", "_default_message": "Test / Prospective Partner"}, "villageExchange": "Village Exchange", "taxAssistanceSite": {"_label": "referralOptions.taxAssistanceSite", "_default_message": "Tax Assistance Site (VITA/Tax Help Colorado)"}}
+ referral_options = {
+ "bia": "Benefits in Action",
+ "cch": "Colorado Coalition for the Homeless",
+ "gac": "Get Ahead Colorado",
+ "lgs": "Let's Get Set",
+ "cedp": "Community Economic Defense Project (CEDP)",
+ "frca": "Family Resource Center Association",
+ "211co": "2-1-1 Colorado",
+ "other": {"_label": "referralOptions.other", "_default_message": "Other"},
+ "jeffcoHS": "Jeffco Human Services",
+ "socialMedia": {"_label": "referralOptions.socialMedia", "_default_message": "Social Media"},
+ "searchEngine": {"_label": "referralOptions.searchEngine", "_default_message": "Google or other search engine"},
+ "testOrProspect": {
+ "_label": "referralOptions.testOrProspect",
+ "_default_message": "Test / Prospective Partner",
+ },
+ "villageExchange": "Village Exchange",
+ "taxAssistanceSite": {
+ "_label": "referralOptions.taxAssistanceSite",
+ "_default_message": "Tax Assistance Site (VITA/Tax Help Colorado)",
+ },
+ }
- language_options = {"am": "አማርኛ", "es": "Español", "fr": "Français", "my": "မြန်မာဘာသာစကား", "ne": "नेपाली", "ru": "Русский", "so": "Soomaali", "vi": "Tiếng Việt", "zh": "汉语", "en-us": "English"}
+ language_options = {
+ "am": "አማርኛ",
+ "es": "Español",
+ "fr": "Français",
+ "my": "မြန်မာဘာသာစကား",
+ "ne": "नेपाली",
+ "ru": "Русский",
+ "so": "Soomaali",
+ "vi": "Tiếng Việt",
+ "zh": "汉语",
+ "en-us": "English",
+ }
- income_options = {"sSI": {"_label": "incomeOptions.sSI", "_default_message": "Supplemental Security Income (SSI)"}, "gifts": {"_label": "incomeOptions.gifts", "_default_message": "Gifts/Contributions (Received)"}, "wages": {"_label": "incomeOptions.wages", "_default_message": "Wages, salaries, tips"}, "rental": {"_label": "incomeOptions.rental", "_default_message": "Rental Income"}, "alimony": {"_label": "incomeOptions.alimony", "_default_message": "Alimony (Received)"}, "boarder": {"_label": "incomeOptions.boarder", "_default_message": "Boarder or Lodger"}, "pension": {"_label": "incomeOptions.pension", "_default_message": "Military, Government, or Private Pension"}, "veteran": {"_label": "incomeOptions.veteran", "_default_message": "Veteran's Pension or Benefits"}, "investment": {"_label": "incomeOptions.investment", "_default_message": "Investment Income (interest, dividends, and profit from selling stocks)"}, "sSSurvivor": {"_label": "incomeOptions.sSSurvivor", "_default_message": "Social Security Survivor's Benefits (Widow/Widower)"}, "sSDependent": {"_label": "incomeOptions.sSDependent", "_default_message": "Social Security Dependent Benefits (retirement, disability, or survivors)"}, "workersComp": {"_label": "incomeOptions.workersComp", "_default_message": "Worker's Compensation"}, "childSupport": {"_label": "incomeOptions.childSupport", "_default_message": "Child Support (Received)"}, "deferredComp": {"_label": "incomeOptions.deferredComp", "_default_message": "Withdrawals from Deferred Compensation (IRA, Keogh, etc.)"}, "sSDisability": {"_label": "incomeOptions.sSDisability", "_default_message": "Social Security Disability Benefits"}, "sSRetirement": {"_label": "incomeOptions.sSRetirement", "_default_message": "Social Security Retirement Benefits"}, "unemployment": {"_label": "incomeOptions.unemployment", "_default_message": "Unemployment Benefits"}, "cOSDisability": {"_label": "incomeOptions.cOSDisability", "_default_message": "Colorado State Disability Benefits"}, "cashAssistance": {"_label": "incomeOptions.cashAssistance", "_default_message": "Cash Assistance Grant"}, "selfEmployment": {"_label": "incomeOptions.selfEmployment", "_default_message": "Income from freelance, independent contractor, or self-employment work"}}
+ income_options = {
+ "sSI": {"_label": "incomeOptions.sSI", "_default_message": "Supplemental Security Income (SSI)"},
+ "gifts": {"_label": "incomeOptions.gifts", "_default_message": "Gifts/Contributions (Received)"},
+ "wages": {"_label": "incomeOptions.wages", "_default_message": "Wages, salaries, tips"},
+ "rental": {"_label": "incomeOptions.rental", "_default_message": "Rental Income"},
+ "alimony": {"_label": "incomeOptions.alimony", "_default_message": "Alimony (Received)"},
+ "boarder": {"_label": "incomeOptions.boarder", "_default_message": "Boarder or Lodger"},
+ "pension": {"_label": "incomeOptions.pension", "_default_message": "Military, Government, or Private Pension"},
+ "veteran": {"_label": "incomeOptions.veteran", "_default_message": "Veteran's Pension or Benefits"},
+ "investment": {
+ "_label": "incomeOptions.investment",
+ "_default_message": "Investment Income (interest, dividends, and profit from selling stocks)",
+ },
+ "sSSurvivor": {
+ "_label": "incomeOptions.sSSurvivor",
+ "_default_message": "Social Security Survivor's Benefits (Widow/Widower)",
+ },
+ "sSDependent": {
+ "_label": "incomeOptions.sSDependent",
+ "_default_message": "Social Security Dependent Benefits (retirement, disability, or survivors)",
+ },
+ "workersComp": {"_label": "incomeOptions.workersComp", "_default_message": "Worker's Compensation"},
+ "childSupport": {"_label": "incomeOptions.childSupport", "_default_message": "Child Support (Received)"},
+ "deferredComp": {
+ "_label": "incomeOptions.deferredComp",
+ "_default_message": "Withdrawals from Deferred Compensation (IRA, Keogh, etc.)",
+ },
+ "sSDisability": {
+ "_label": "incomeOptions.sSDisability",
+ "_default_message": "Social Security Disability Benefits",
+ },
+ "sSRetirement": {
+ "_label": "incomeOptions.sSRetirement",
+ "_default_message": "Social Security Retirement Benefits",
+ },
+ "unemployment": {"_label": "incomeOptions.unemployment", "_default_message": "Unemployment Benefits"},
+ "cOSDisability": {
+ "_label": "incomeOptions.cOSDisability",
+ "_default_message": "Colorado State Disability Benefits",
+ },
+ "cashAssistance": {"_label": "incomeOptions.cashAssistance", "_default_message": "Cash Assistance Grant"},
+ "selfEmployment": {
+ "_label": "incomeOptions.selfEmployment",
+ "_default_message": "Income from freelance, independent contractor, or self-employment work",
+ },
+ }
- health_insurance_options = {"you": {"chp": {"icon": {"_name": "Chp", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.chp", "_default_message": "Child Health Plan Plus (CHP+)"}, "none": {"icon": {"_name": "None", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.none-I", "_default_message": "I do not have health insurance"}, "private": {"icon": {"_name": "PrivateInsurance", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.private", "_default_message": "Private (non-employer) health insurance"}, "employer": {"icon": {"_name": "Employer", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.employer", "_default_message": "Employer-provided health insurance"}, "medicaid": {"icon": {"_name": "Medicaid", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.medicaid", "_default_message": "Health First Colorado (Full Medicaid)"}, "medicare": {"icon": {"_name": "Medicare", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.medicare", "_default_message": "Medicare"}, "dont_know": {"icon": {"_name": "Dont_know", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.dont_know", "_default_message": "Don't Know"}, "family_planning": {"icon": {"_name": "Family_planning", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.family_planning", "_default_message": "Family Planning Limited Medicaid"}, "emergency_medicaid": {"icon": {"_name": "Emergency_medicaid", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.emergency_medicaid", "_default_message": "Emergency Medicaid / Reproductive Health"}}, "them": {"chp": {"icon": {"_name": "Chp", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.chp", "_default_message": "Child Health Plan Plus (CHP+)"}, "none": {"icon": {"_name": "None", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.none-they", "_default_message": "They do not have health insurance"}, "private": {"icon": {"_name": "PrivateInsurance", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.private", "_default_message": "Private (non-employer) health insurance"}, "employer": {"icon": {"_name": "Employer", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.employer", "_default_message": "Employer-provided health insurance"}, "medicaid": {"icon": {"_name": "Medicaid", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.medicaid", "_default_message": "Health First Colorado (Full Medicaid)"}, "medicare": {"icon": {"_name": "Medicare", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.medicare", "_default_message": "Medicare"}, "dont_know": {"icon": {"_name": "Dont_know", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.dont_know", "_default_message": "Don't Know"}, "family_planning": {"icon": {"_name": "Family_planning", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.family_planning", "_default_message": "Family Planning Limited Medicaid"}, "emergency_medicaid": {"icon": {"_name": "Emergency_medicaid", "_classname": "option-card-icon"}, "_label": "healthInsuranceOptions.emergency_medicaid", "_default_message": "Emergency Medicaid / Reproductive Health"}}}
+ health_insurance_options = {
+ "you": {
+ "chp": {
+ "icon": {"_name": "Chp", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.chp",
+ "_default_message": "Child Health Plan Plus (CHP+)",
+ },
+ "none": {
+ "icon": {"_name": "None", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.none-I",
+ "_default_message": "I do not have health insurance",
+ },
+ "private": {
+ "icon": {"_name": "PrivateInsurance", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.private",
+ "_default_message": "Private (non-employer) health insurance",
+ },
+ "employer": {
+ "icon": {"_name": "Employer", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.employer",
+ "_default_message": "Employer-provided health insurance",
+ },
+ "medicaid": {
+ "icon": {"_name": "Medicaid", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.medicaid",
+ "_default_message": "Health First Colorado (Full Medicaid)",
+ },
+ "medicare": {
+ "icon": {"_name": "Medicare", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.medicare",
+ "_default_message": "Medicare",
+ },
+ "dont_know": {
+ "icon": {"_name": "Dont_know", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.dont_know",
+ "_default_message": "Don't Know",
+ },
+ "family_planning": {
+ "icon": {"_name": "Family_planning", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.family_planning",
+ "_default_message": "Family Planning Limited Medicaid",
+ },
+ "emergency_medicaid": {
+ "icon": {"_name": "Emergency_medicaid", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.emergency_medicaid",
+ "_default_message": "Emergency Medicaid / Reproductive Health",
+ },
+ },
+ "them": {
+ "chp": {
+ "icon": {"_name": "Chp", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.chp",
+ "_default_message": "Child Health Plan Plus (CHP+)",
+ },
+ "none": {
+ "icon": {"_name": "None", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.none-they",
+ "_default_message": "They do not have health insurance",
+ },
+ "private": {
+ "icon": {"_name": "PrivateInsurance", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.private",
+ "_default_message": "Private (non-employer) health insurance",
+ },
+ "employer": {
+ "icon": {"_name": "Employer", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.employer",
+ "_default_message": "Employer-provided health insurance",
+ },
+ "medicaid": {
+ "icon": {"_name": "Medicaid", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.medicaid",
+ "_default_message": "Health First Colorado (Full Medicaid)",
+ },
+ "medicare": {
+ "icon": {"_name": "Medicare", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.medicare",
+ "_default_message": "Medicare",
+ },
+ "dont_know": {
+ "icon": {"_name": "Dont_know", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.dont_know",
+ "_default_message": "Don't Know",
+ },
+ "family_planning": {
+ "icon": {"_name": "Family_planning", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.family_planning",
+ "_default_message": "Family Planning Limited Medicaid",
+ },
+ "emergency_medicaid": {
+ "icon": {"_name": "Emergency_medicaid", "_classname": "option-card-icon"},
+ "_label": "healthInsuranceOptions.emergency_medicaid",
+ "_default_message": "Emergency Medicaid / Reproductive Health",
+ },
+ },
+ }
- housing_options = {"hotel": {"_label": "housingOptions.hotel", "_default_message": "In a hotel"}, "owner": {"_label": "housingOptions.owner", "_default_message": "You or a household member owns the home or apartment"}, "renting": {"_label": "housingOptions.renting", "_default_message": "Renting"}, "shelter": {"_label": "housingOptions.shelter", "_default_message": "In a shelter or homeless"}, "preferNotToSay": {"_label": "housingOptions.preferNotToSay", "_default_message": "Prefer not to say"}, "stayingWithFriend": {"_label": "housingOptions.stayingWithFriend", "_default_message": "Staying with friend"}}
+ housing_options = {
+ "hotel": {"_label": "housingOptions.hotel", "_default_message": "In a hotel"},
+ "owner": {
+ "_label": "housingOptions.owner",
+ "_default_message": "You or a household member owns the home or apartment",
+ },
+ "renting": {"_label": "housingOptions.renting", "_default_message": "Renting"},
+ "shelter": {"_label": "housingOptions.shelter", "_default_message": "In a shelter or homeless"},
+ "preferNotToSay": {"_label": "housingOptions.preferNotToSay", "_default_message": "Prefer not to say"},
+ "stayingWithFriend": {"_label": "housingOptions.stayingWithFriend", "_default_message": "Staying with friend"},
+ }
- frequency_options = {"hourly": {"_label": "frequencyOptions.hourly", "_default_message": "hourly"}, "weekly": {"_label": "frequencyOptions.weekly", "_default_message": "every week"}, "monthly": {"_label": "frequencyOptions.monthly", "_default_message": "every month"}, "biweekly": {"_label": "frequencyOptions.biweekly", "_default_message": "every 2 weeks"}}
+ frequency_options = {
+ "hourly": {"_label": "frequencyOptions.hourly", "_default_message": "hourly"},
+ "weekly": {"_label": "frequencyOptions.weekly", "_default_message": "every week"},
+ "monthly": {"_label": "frequencyOptions.monthly", "_default_message": "every month"},
+ "biweekly": {"_label": "frequencyOptions.biweekly", "_default_message": "every 2 weeks"},
+ }
- expense_options = {"auto": {"_label": "expenseOptions.auto", "_default_message": "Auto Insurance Premium &/or Payment"}, "rent": {"_label": "expenseOptions.rent", "_default_message": "Rent"}, "cooling": {"_label": "expenseOptions.cooling", "_default_message": "Cooling"}, "heating": {"_label": "expenseOptions.heating", "_default_message": "Heating"}, "medical": {"_label": "expenseOptions.medical", "_default_message": "Medical Insurance Premium &/or Bills"}, "internet": {"_label": "expenseOptions.internet", "_default_message": "Internet"}, "mortgage": {"_label": "expenseOptions.mortgage", "_default_message": "Mortgage"}, "childCare": {"_label": "expenseOptions.childCare", "_default_message": "Child Care"}, "telephone": {"_label": "expenseOptions.telephone", "_default_message": "Telephone"}, "creditCard": {"_label": "expenseOptions.creditCard", "_default_message": "Credit Card Debt"}, "childSupport": {"_label": "expenseOptions.childSupport", "_default_message": "Child Support (Paid)"}, "personalLoan": {"_label": "expenseOptions.personalLoan", "_default_message": "Personal Loan"}, "studentLoans": {"_label": "expenseOptions.studentLoans", "_default_message": "Student Loans"}, "dependentCare": {"_label": "expenseOptions.dependentCare", "_default_message": "Dependent Care"}, "otherUtilities": {"_label": "expenseOptions.otherUtilities", "_default_message": "Other Utilities"}}
+ expense_options = {
+ "auto": {"_label": "expenseOptions.auto", "_default_message": "Auto Insurance Premium &/or Payment"},
+ "rent": {"_label": "expenseOptions.rent", "_default_message": "Rent"},
+ "cooling": {"_label": "expenseOptions.cooling", "_default_message": "Cooling"},
+ "heating": {"_label": "expenseOptions.heating", "_default_message": "Heating"},
+ "medical": {"_label": "expenseOptions.medical", "_default_message": "Medical Insurance Premium &/or Bills"},
+ "internet": {"_label": "expenseOptions.internet", "_default_message": "Internet"},
+ "mortgage": {"_label": "expenseOptions.mortgage", "_default_message": "Mortgage"},
+ "childCare": {"_label": "expenseOptions.childCare", "_default_message": "Child Care"},
+ "telephone": {"_label": "expenseOptions.telephone", "_default_message": "Telephone"},
+ "creditCard": {"_label": "expenseOptions.creditCard", "_default_message": "Credit Card Debt"},
+ "childSupport": {"_label": "expenseOptions.childSupport", "_default_message": "Child Support (Paid)"},
+ "personalLoan": {"_label": "expenseOptions.personalLoan", "_default_message": "Personal Loan"},
+ "studentLoans": {"_label": "expenseOptions.studentLoans", "_default_message": "Student Loans"},
+ "dependentCare": {"_label": "expenseOptions.dependentCare", "_default_message": "Dependent Care"},
+ "otherUtilities": {"_label": "expenseOptions.otherUtilities", "_default_message": "Other Utilities"},
+ }
- condition_options = {"you": {"student": {"icon": {"_name": "Student", "_classname": "option-card-icon"}, "_label": "conditionOptions.student", "_default_message": "Student at a college, university, or other post-secondary institution like a job-training program"}, "disabled": {"icon": {"_name": "Disabled", "_classname": "option-card-icon"}, "_label": "conditionOptions.disabled", "_default_message": "Have any disabilities that make you unable to work now or in the future"}, "pregnant": {"icon": {"_name": "Pregnant", "_classname": "option-card-icon"}, "_label": "conditionOptions.pregnant", "_default_message": "Pregnant"}, "longTermDisability": {"icon": {"_name": "LongTermDisability", "_classname": "option-card-icon"}, "_label": "conditionOptions.longTermDisability", "_default_message": "Any medical or developmental condition that has lasted, or is expected to last, more than 12 months"}, "blindOrVisuallyImpaired": {"icon": {"_name": "BlindOrVisuallyImpaired", "_classname": "option-card-icon"}, "_label": "conditionOptions.blindOrVisuallyImpaired", "_default_message": "Blind or visually impaired"}}, "them": {"student": {"icon": {"_name": "Student", "_classname": "option-card-icon"}, "_label": "conditionOptions.student", "_default_message": "Student at a college, university, or other post-secondary institution like a job-training program"}, "disabled": {"icon": {"_name": "Disabled", "_classname": "option-card-icon"}, "_label": "conditionOptions.disabled-them", "_default_message": "Have any disabilities that make them unable to work now or in the future"}, "pregnant": {"icon": {"_name": "Pregnant", "_classname": "option-card-icon"}, "_label": "conditionOptions.pregnant", "_default_message": "Pregnant"}, "longTermDisability": {"icon": {"_name": "LongTermDisability", "_classname": "option-card-icon"}, "_label": "conditionOptions.longTermDisability", "_default_message": "Any medical or developmental condition that has lasted, or is expected to last, more than 12 months"}, "blindOrVisuallyImpaired": {"icon": {"_name": "BlindOrVisuallyImpaired", "_classname": "option-card-icon"}, "_label": "conditionOptions.blindOrVisuallyImpaired", "_default_message": "Blind or visually impaired"}}}
+ condition_options = {
+ "you": {
+ "student": {
+ "icon": {"_name": "Student", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.student",
+ "_default_message": "Student at a college, university, or other post-secondary institution like a job-training program",
+ },
+ "disabled": {
+ "icon": {"_name": "Disabled", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.disabled",
+ "_default_message": "Have any disabilities that make you unable to work now or in the future",
+ },
+ "pregnant": {
+ "icon": {"_name": "Pregnant", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.pregnant",
+ "_default_message": "Pregnant",
+ },
+ "longTermDisability": {
+ "icon": {"_name": "LongTermDisability", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.longTermDisability",
+ "_default_message": "Any medical or developmental condition that has lasted, or is expected to last, more than 12 months",
+ },
+ "blindOrVisuallyImpaired": {
+ "icon": {"_name": "BlindOrVisuallyImpaired", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.blindOrVisuallyImpaired",
+ "_default_message": "Blind or visually impaired",
+ },
+ },
+ "them": {
+ "student": {
+ "icon": {"_name": "Student", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.student",
+ "_default_message": "Student at a college, university, or other post-secondary institution like a job-training program",
+ },
+ "disabled": {
+ "icon": {"_name": "Disabled", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.disabled-them",
+ "_default_message": "Have any disabilities that make them unable to work now or in the future",
+ },
+ "pregnant": {
+ "icon": {"_name": "Pregnant", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.pregnant",
+ "_default_message": "Pregnant",
+ },
+ "longTermDisability": {
+ "icon": {"_name": "LongTermDisability", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.longTermDisability",
+ "_default_message": "Any medical or developmental condition that has lasted, or is expected to last, more than 12 months",
+ },
+ "blindOrVisuallyImpaired": {
+ "icon": {"_name": "BlindOrVisuallyImpaired", "_classname": "option-card-icon"},
+ "_label": "conditionOptions.blindOrVisuallyImpaired",
+ "_default_message": "Blind or visually impaired",
+ },
+ },
+ }
- co_zipcodes = {"80001": "80001", "80002": "80002", "80003": "80003", "80004": "80004", "80005": "80005", "80006": "80006", "80007": "80007", "80010": "80010", "80011": "80011", "80012": "80012", "80013": "80013", "80014": "80014", "80015": "80015", "80016": "80016", "80017": "80017", "80018": "80018", "80019": "80019", "80020": "80020", "80021": "80021", "80022": "80022", "80023": "80023", "80024": "80024", "80025": "80025", "80026": "80026", "80027": "80027", "80028": "80028", "80030": "80030", "80031": "80031", "80033": "80033", "80034": "80034", "80035": "80035", "80036": "80036", "80037": "80037", "80038": "80038", "80040": "80040", "80041": "80041", "80042": "80042", "80044": "80044", "80045": "80045", "80046": "80046", "80047": "80047", "80101": "80101", "80102": "80102", "80103": "80103", "80104": "80104", "80105": "80105", "80106": "80106", "80107": "80107", "80108": "80108", "80109": "80109", "80110": "80110", "80111": "80111", "80112": "80112", "80113": "80113", "80116": "80116", "80117": "80117", "80118": "80118", "80120": "80120", "80121": "80121", "80122": "80122", "80123": "80123", "80124": "80124", "80125": "80125", "80126": "80126", "80127": "80127", "80128": "80128", "80129": "80129", "80130": "80130", "80131": "80131", "80132": "80132", "80133": "80133", "80134": "80134", "80135": "80135", "80136": "80136", "80137": "80137", "80138": "80138", "80150": "80150", "80151": "80151", "80155": "80155", "80160": "80160", "80161": "80161", "80162": "80162", "80163": "80163", "80165": "80165", "80166": "80166", "80201": "80201", "80202": "80202", "80203": "80203", "80204": "80204", "80205": "80205", "80206": "80206", "80207": "80207", "80208": "80208", "80209": "80209", "80210": "80210", "80211": "80211", "80212": "80212", "80214": "80214", "80215": "80215", "80216": "80216", "80217": "80217", "80218": "80218", "80219": "80219", "80220": "80220", "80221": "80221", "80222": "80222", "80223": "80223", "80224": "80224", "80225": "80225", "80226": "80226", "80227": "80227", "80228": "80228", "80229": "80229", "80230": "80230", "80231": "80231", "80232": "80232", "80233": "80233", "80234": "80234", "80235": "80235", "80236": "80236", "80237": "80237", "80238": "80238", "80239": "80239", "80241": "80241", "80243": "80243", "80244": "80244", "80246": "80246", "80247": "80247", "80248": "80248", "80249": "80249", "80250": "80250", "80251": "80251", "80252": "80252", "80256": "80256", "80257": "80257", "80259": "80259", "80260": "80260", "80261": "80261", "80262": "80262", "80263": "80263", "80264": "80264", "80265": "80265", "80266": "80266", "80271": "80271", "80273": "80273", "80274": "80274", "80279": "80279", "80280": "80280", "80281": "80281", "80290": "80290", "80291": "80291", "80293": "80293", "80294": "80294", "80295": "80295", "80299": "80299", "80301": "80301", "80302": "80302", "80303": "80303", "80304": "80304", "80305": "80305", "80306": "80306", "80307": "80307", "80308": "80308", "80309": "80309", "80310": "80310", "80314": "80314", "80321": "80321", "80322": "80322", "80323": "80323", "80328": "80328", "80329": "80329", "80401": "80401", "80402": "80402", "80403": "80403", "80419": "80419", "80420": "80420", "80421": "80421", "80422": "80422", "80423": "80423", "80424": "80424", "80425": "80425", "80426": "80426", "80427": "80427", "80428": "80428", "80429": "80429", "80430": "80430", "80432": "80432", "80433": "80433", "80434": "80434", "80435": "80435", "80436": "80436", "80437": "80437", "80438": "80438", "80439": "80439", "80440": "80440", "80442": "80442", "80443": "80443", "80444": "80444", "80446": "80446", "80447": "80447", "80448": "80448", "80449": "80449", "80451": "80451", "80452": "80452", "80453": "80453", "80454": "80454", "80455": "80455", "80456": "80456", "80457": "80457", "80459": "80459", "80461": "80461", "80463": "80463", "80465": "80465", "80466": "80466", "80467": "80467", "80468": "80468", "80469": "80469", "80470": "80470", "80471": "80471", "80473": "80473", "80474": "80474", "80475": "80475", "80476": "80476", "80477": "80477", "80478": "80478", "80479": "80479", "80480": "80480", "80481": "80481", "80482": "80482", "80483": "80483", "80487": "80487", "80488": "80488", "80497": "80497", "80498": "80498", "80501": "80501", "80502": "80502", "80503": "80503", "80504": "80504", "80510": "80510", "80511": "80511", "80512": "80512", "80513": "80513", "80514": "80514", "80515": "80515", "80516": "80516", "80517": "80517", "80520": "80520", "80521": "80521", "80522": "80522", "80523": "80523", "80524": "80524", "80525": "80525", "80526": "80526", "80527": "80527", "80528": "80528", "80530": "80530", "80532": "80532", "80533": "80533", "80534": "80534", "80535": "80535", "80536": "80536", "80537": "80537", "80538": "80538", "80539": "80539", "80540": "80540", "80541": "80541", "80542": "80542", "80543": "80543", "80544": "80544", "80545": "80545", "80546": "80546", "80547": "80547", "80549": "80549", "80550": "80550", "80551": "80551", "80553": "80553", "80601": "80601", "80602": "80602", "80603": "80603", "80610": "80610", "80611": "80611", "80612": "80612", "80614": "80614", "80615": "80615", "80620": "80620", "80621": "80621", "80622": "80622", "80623": "80623", "80624": "80624", "80631": "80631", "80632": "80632", "80633": "80633", "80634": "80634", "80638": "80638", "80639": "80639", "80640": "80640", "80642": "80642", "80643": "80643", "80644": "80644", "80645": "80645", "80646": "80646", "80648": "80648", "80649": "80649", "80650": "80650", "80651": "80651", "80652": "80652", "80653": "80653", "80654": "80654", "80701": "80701", "80705": "80705", "80720": "80720", "80721": "80721", "80722": "80722", "80723": "80723", "80726": "80726", "80727": "80727", "80728": "80728", "80729": "80729", "80731": "80731", "80732": "80732", "80733": "80733", "80734": "80734", "80735": "80735", "80736": "80736", "80737": "80737", "80740": "80740", "80741": "80741", "80742": "80742", "80743": "80743", "80744": "80744", "80745": "80745", "80746": "80746", "80747": "80747", "80749": "80749", "80750": "80750", "80751": "80751", "80754": "80754", "80755": "80755", "80757": "80757", "80758": "80758", "80759": "80759", "80801": "80801", "80802": "80802", "80804": "80804", "80805": "80805", "80807": "80807", "80808": "80808", "80809": "80809", "80810": "80810", "80812": "80812", "80813": "80813", "80814": "80814", "80815": "80815", "80816": "80816", "80817": "80817", "80818": "80818", "80819": "80819", "80820": "80820", "80821": "80821", "80822": "80822", "80823": "80823", "80824": "80824", "80825": "80825", "80826": "80826", "80827": "80827", "80828": "80828", "80829": "80829", "80830": "80830", "80831": "80831", "80832": "80832", "80833": "80833", "80834": "80834", "80835": "80835", "80836": "80836", "80840": "80840", "80841": "80841", "80860": "80860", "80861": "80861", "80862": "80862", "80863": "80863", "80864": "80864", "80866": "80866", "80901": "80901", "80902": "80902", "80903": "80903", "80904": "80904", "80905": "80905", "80906": "80906", "80907": "80907", "80908": "80908", "80909": "80909", "80910": "80910", "80911": "80911", "80912": "80912", "80913": "80913", "80914": "80914", "80915": "80915", "80916": "80916", "80917": "80917", "80918": "80918", "80919": "80919", "80920": "80920", "80921": "80921", "80922": "80922", "80923": "80923", "80924": "80924", "80925": "80925", "80926": "80926", "80927": "80927", "80928": "80928", "80929": "80929", "80930": "80930", "80931": "80931", "80932": "80932", "80933": "80933", "80934": "80934", "80935": "80935", "80936": "80936", "80937": "80937", "80938": "80938", "80939": "80939", "80940": "80940", "80941": "80941", "80942": "80942", "80943": "80943", "80944": "80944", "80945": "80945", "80946": "80946", "80947": "80947", "80949": "80949", "80950": "80950", "80951": "80951", "80960": "80960", "80962": "80962", "80970": "80970", "80977": "80977", "80995": "80995", "80997": "80997", "81001": "81001", "81002": "81002", "81003": "81003", "81004": "81004", "81005": "81005", "81006": "81006", "81007": "81007", "81008": "81008", "81009": "81009", "81010": "81010", "81011": "81011", "81012": "81012", "81019": "81019", "81020": "81020", "81021": "81021", "81022": "81022", "81023": "81023", "81024": "81024", "81025": "81025", "81027": "81027", "81029": "81029", "81030": "81030", "81033": "81033", "81034": "81034", "81036": "81036", "81038": "81038", "81039": "81039", "81040": "81040", "81041": "81041", "81043": "81043", "81044": "81044", "81045": "81045", "81046": "81046", "81047": "81047", "81049": "81049", "81050": "81050", "81052": "81052", "81054": "81054", "81055": "81055", "81057": "81057", "81058": "81058", "81059": "81059", "81062": "81062", "81063": "81063", "81064": "81064", "81067": "81067", "81069": "81069", "81071": "81071", "81073": "81073", "81075": "81075", "81076": "81076", "81077": "81077", "81081": "81081", "81082": "81082", "81084": "81084", "81087": "81087", "81089": "81089", "81090": "81090", "81091": "81091", "81092": "81092", "81101": "81101", "81102": "81102", "81120": "81120", "81121": "81121", "81122": "81122", "81123": "81123", "81124": "81124", "81125": "81125", "81126": "81126", "81127": "81127", "81128": "81128", "81129": "81129", "81130": "81130", "81131": "81131", "81132": "81132", "81133": "81133", "81134": "81134", "81135": "81135", "81136": "81136", "81137": "81137", "81138": "81138", "81140": "81140", "81141": "81141", "81143": "81143", "81144": "81144", "81146": "81146", "81147": "81147", "81148": "81148", "81149": "81149", "81151": "81151", "81152": "81152", "81153": "81153", "81154": "81154", "81155": "81155", "81157": "81157", "81201": "81201", "81210": "81210", "81211": "81211", "81212": "81212", "81215": "81215", "81220": "81220", "81221": "81221", "81222": "81222", "81223": "81223", "81224": "81224", "81225": "81225", "81226": "81226", "81227": "81227", "81228": "81228", "81230": "81230", "81231": "81231", "81232": "81232", "81233": "81233", "81235": "81235", "81236": "81236", "81237": "81237", "81239": "81239", "81240": "81240", "81241": "81241", "81242": "81242", "81243": "81243", "81244": "81244", "81247": "81247", "81248": "81248", "81251": "81251", "81252": "81252", "81253": "81253", "81290": "81290", "81301": "81301", "81302": "81302", "81303": "81303", "81320": "81320", "81321": "81321", "81323": "81323", "81324": "81324", "81325": "81325", "81326": "81326", "81327": "81327", "81328": "81328", "81329": "81329", "81330": "81330", "81331": "81331", "81332": "81332", "81334": "81334", "81335": "81335", "81401": "81401", "81402": "81402", "81403": "81403", "81410": "81410", "81411": "81411", "81413": "81413", "81414": "81414", "81415": "81415", "81416": "81416", "81418": "81418", "81419": "81419", "81420": "81420", "81422": "81422", "81423": "81423", "81424": "81424", "81425": "81425", "81426": "81426", "81427": "81427", "81428": "81428", "81429": "81429", "81430": "81430", "81431": "81431", "81432": "81432", "81433": "81433", "81434": "81434", "81435": "81435", "81501": "81501", "81502": "81502", "81503": "81503", "81504": "81504", "81505": "81505", "81506": "81506", "81507": "81507", "81520": "81520", "81521": "81521", "81522": "81522", "81523": "81523", "81524": "81524", "81525": "81525", "81526": "81526", "81527": "81527", "81601": "81601", "81602": "81602", "81610": "81610", "81611": "81611", "81612": "81612", "81615": "81615", "81620": "81620", "81621": "81621", "81623": "81623", "81624": "81624", "81625": "81625", "81626": "81626", "81630": "81630", "81631": "81631", "81632": "81632", "81633": "81633", "81635": "81635", "81636": "81636", "81637": "81637", "81638": "81638", "81639": "81639", "81640": "81640", "81641": "81641", "81642": "81642", "81643": "81643", "81645": "81645", "81646": "81646", "81647": "81647", "81648": "81648", "81649": "81649", "81650": "81650", "81652": "81652", "81653": "81653", "81654": "81654", "81655": "81655", "81656": "81656", "81657": "81657", "81658": "81658"}
-
- counties_by_zipcode = {"80002": {"Adams County": "Adams County", "Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80003": {"Adams County": "Adams County", "Jefferson County": "Jefferson County"}, "80004": {"Jefferson County": "Jefferson County"}, "80005": {"Jefferson County": "Jefferson County", "Broomfield County": "Broomfield County"}, "80007": {"Boulder County": "Boulder County", "Jefferson County": "Jefferson County", "Broomfield County": "Broomfield County"}, "80010": {"Adams County": "Adams County", "Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80011": {"Adams County": "Adams County", "Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80012": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80013": {"Arapahoe County": "Arapahoe County"}, "80014": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80015": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80016": {"Denver County": "Denver County", "Elbert County": "Elbert County", "Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80017": {"Arapahoe County": "Arapahoe County"}, "80018": {"Adams County": "Adams County", "Arapahoe County": "Arapahoe County"}, "80019": {"Adams County": "Adams County", "Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80020": {"Adams County": "Adams County", "Boulder County": "Boulder County", "Jefferson County": "Jefferson County", "Broomfield County": "Broomfield County"}, "80021": {"Boulder County": "Boulder County", "Jefferson County": "Jefferson County", "Broomfield County": "Broomfield County"}, "80022": {"Adams County": "Adams County", "Denver County": "Denver County"}, "80023": {"Weld County": "Weld County", "Adams County": "Adams County", "Boulder County": "Boulder County", "Broomfield County": "Broomfield County"}, "80024": {"Adams County": "Adams County"}, "80025": {"Boulder County": "Boulder County", "Jefferson County": "Jefferson County"}, "80026": {"Weld County": "Weld County", "Boulder County": "Boulder County", "Broomfield County": "Broomfield County"}, "80027": {"Boulder County": "Boulder County", "Jefferson County": "Jefferson County", "Broomfield County": "Broomfield County"}, "80030": {"Adams County": "Adams County", "Jefferson County": "Jefferson County"}, "80031": {"Adams County": "Adams County", "Jefferson County": "Jefferson County", "Broomfield County": "Broomfield County"}, "80033": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80045": {"Adams County": "Adams County", "Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80101": {"Elbert County": "Elbert County", "Arapahoe County": "Arapahoe County"}, "80102": {"Weld County": "Weld County", "Adams County": "Adams County", "Elbert County": "Elbert County", "Arapahoe County": "Arapahoe County"}, "80103": {"Adams County": "Adams County", "Elbert County": "Elbert County", "Morgan County": "Morgan County", "Arapahoe County": "Arapahoe County"}, "80104": {"Douglas County": "Douglas County"}, "80105": {"Adams County": "Adams County", "Elbert County": "Elbert County", "Lincoln County": "Lincoln County", "Arapahoe County": "Arapahoe County", "Washington County": "Washington County"}, "80106": {"Elbert County": "Elbert County", "Douglas County": "Douglas County", "El Paso County": "El Paso County"}, "80107": {"Elbert County": "Elbert County", "Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80108": {"Douglas County": "Douglas County"}, "80109": {"Douglas County": "Douglas County"}, "80110": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80111": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80112": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80113": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80116": {"Elbert County": "Elbert County", "Douglas County": "Douglas County"}, "80117": {"Elbert County": "Elbert County"}, "80118": {"Elbert County": "Elbert County", "Douglas County": "Douglas County", "El Paso County": "El Paso County"}, "80120": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80121": {"Arapahoe County": "Arapahoe County"}, "80122": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80123": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County", "Jefferson County": "Jefferson County"}, "80124": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80125": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County", "Jefferson County": "Jefferson County"}, "80126": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80127": {"Denver County": "Denver County", "Douglas County": "Douglas County", "Jefferson County": "Jefferson County"}, "80128": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County", "Jefferson County": "Jefferson County"}, "80129": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80130": {"Douglas County": "Douglas County"}, "80131": {"Douglas County": "Douglas County"}, "80132": {"Douglas County": "Douglas County", "El Paso County": "El Paso County"}, "80133": {"Teller County": "Teller County", "Douglas County": "Douglas County", "El Paso County": "El Paso County"}, "80134": {"Elbert County": "Elbert County", "Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80135": {"Park County": "Park County", "Teller County": "Teller County", "Douglas County": "Douglas County", "El Paso County": "El Paso County", "Jefferson County": "Jefferson County"}, "80136": {"Weld County": "Weld County", "Adams County": "Adams County", "Elbert County": "Elbert County", "Arapahoe County": "Arapahoe County"}, "80137": {"Adams County": "Adams County", "Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80138": {"Elbert County": "Elbert County", "Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"}, "80202": {"Denver County": "Denver County"}, "80203": {"Denver County": "Denver County"}, "80204": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80205": {"Denver County": "Denver County"}, "80206": {"Denver County": "Denver County"}, "80207": {"Denver County": "Denver County"}, "80209": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80210": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80211": {"Denver County": "Denver County"}, "80212": {"Adams County": "Adams County", "Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80214": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80215": {"Jefferson County": "Jefferson County"}, "80216": {"Adams County": "Adams County", "Denver County": "Denver County"}, "80218": {"Denver County": "Denver County"}, "80219": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County", "Jefferson County": "Jefferson County"}, "80220": {"Adams County": "Adams County", "Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80221": {"Adams County": "Adams County", "Denver County": "Denver County"}, "80222": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80223": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80224": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80226": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80227": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80228": {"Jefferson County": "Jefferson County"}, "80229": {"Adams County": "Adams County"}, "80230": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80231": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80232": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80233": {"Adams County": "Adams County"}, "80234": {"Adams County": "Adams County", "Broomfield County": "Broomfield County"}, "80235": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"}, "80236": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County", "Jefferson County": "Jefferson County"}, "80237": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80238": {"Adams County": "Adams County", "Denver County": "Denver County"}, "80239": {"Adams County": "Adams County", "Denver County": "Denver County"}, "80241": {"Adams County": "Adams County"}, "80246": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80247": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"}, "80249": {"Adams County": "Adams County", "Denver County": "Denver County"}, "80260": {"Adams County": "Adams County"}, "80264": {"Denver County": "Denver County"}, "80290": {"Denver County": "Denver County"}, "80293": {"Denver County": "Denver County"}, "80294": {"Denver County": "Denver County"}, "80301": {"Boulder County": "Boulder County"}, "80302": {"Boulder County": "Boulder County"}, "80303": {"Boulder County": "Boulder County", "Jefferson County": "Jefferson County"}, "80304": {"Boulder County": "Boulder County"}, "80305": {"Boulder County": "Boulder County"}, "80310": {"Boulder County": "Boulder County"}, "80401": {"Jefferson County": "Jefferson County"}, "80403": {"Gilpin County": "Gilpin County", "Boulder County": "Boulder County", "Jefferson County": "Jefferson County", "Clear Creek County": "Clear Creek County"}, "80419": {"Jefferson County": "Jefferson County"}, "80420": {"Lake County": "Lake County", "Park County": "Park County", "Summit County": "Summit County"}, "80421": {"Park County": "Park County", "Jefferson County": "Jefferson County", "Clear Creek County": "Clear Creek County"}, "80422": {"Grand County": "Grand County", "Gilpin County": "Gilpin County", "Boulder County": "Boulder County", "Jefferson County": "Jefferson County", "Clear Creek County": "Clear Creek County"}, "80423": {"Eagle County": "Eagle County", "Grand County": "Grand County", "Routt County": "Routt County", "Summit County": "Summit County"}, "80424": {"Lake County": "Lake County", "Park County": "Park County", "Summit County": "Summit County"}, "80425": {"Douglas County": "Douglas County", "Jefferson County": "Jefferson County"}, "80426": {"Eagle County": "Eagle County", "Routt County": "Routt County", "Garfield County": "Garfield County"}, "80427": {"Gilpin County": "Gilpin County", "Jefferson County": "Jefferson County", "Clear Creek County": "Clear Creek County"}, "80428": {"Routt County": "Routt County", "Jackson County": "Jackson County"}, "80432": {"Park County": "Park County"}, "80433": {"Park County": "Park County", "Douglas County": "Douglas County", "Jefferson County": "Jefferson County"}, "80434": {"Jackson County": "Jackson County"}, "80435": {"Park County": "Park County", "Summit County": "Summit County", "Clear Creek County": "Clear Creek County"}, "80436": {"Grand County": "Grand County", "Clear Creek County": "Clear Creek County"}, "80438": {"Grand County": "Grand County", "Clear Creek County": "Clear Creek County"}, "80439": {"Park County": "Park County", "Gilpin County": "Gilpin County", "Jefferson County": "Jefferson County", "Clear Creek County": "Clear Creek County"}, "80440": {"Lake County": "Lake County", "Park County": "Park County", "Summit County": "Summit County"}, "80442": {"Grand County": "Grand County"}, "80443": {"Lake County": "Lake County", "Park County": "Park County", "Eagle County": "Eagle County", "Summit County": "Summit County"}, "80444": {"Park County": "Park County", "Summit County": "Summit County", "Clear Creek County": "Clear Creek County"}, "80446": {"Grand County": "Grand County", "Boulder County": "Boulder County", "Jackson County": "Jackson County"}, "80447": {"Grand County": "Grand County", "Boulder County": "Boulder County", "Jackson County": "Jackson County", "Larimer County": "Larimer County"}, "80448": {"Park County": "Park County", "Summit County": "Summit County", "Jefferson County": "Jefferson County", "Clear Creek County": "Clear Creek County"}, "80449": {"Lake County": "Lake County", "Park County": "Park County", "Chaffee County": "Chaffee County", "Fremont County": "Fremont County"}, "80451": {"Grand County": "Grand County"}, "80452": {"Park County": "Park County", "Grand County": "Grand County", "Gilpin County": "Gilpin County", "Clear Creek County": "Clear Creek County"}, "80453": {"Jefferson County": "Jefferson County"}, "80454": {"Jefferson County": "Jefferson County"}, "80455": {"Boulder County": "Boulder County"}, "80456": {"Park County": "Park County", "Summit County": "Summit County", "Jefferson County": "Jefferson County"}, "80457": {"Jefferson County": "Jefferson County"}, "80459": {"Eagle County": "Eagle County", "Grand County": "Grand County", "Routt County": "Routt County", "Summit County": "Summit County", "Jackson County": "Jackson County"}, "80461": {"Lake County": "Lake County", "Park County": "Park County", "Eagle County": "Eagle County", "Pitkin County": "Pitkin County", "Summit County": "Summit County", "Chaffee County": "Chaffee County"}, "80463": {"Eagle County": "Eagle County", "Grand County": "Grand County", "Routt County": "Routt County"}, "80465": {"Jefferson County": "Jefferson County"}, "80466": {"Grand County": "Grand County", "Gilpin County": "Gilpin County", "Boulder County": "Boulder County"}, "80467": {"Grand County": "Grand County", "Routt County": "Routt County", "Rio Blanco County": "Rio Blanco County"}, "80468": {"Grand County": "Grand County", "Summit County": "Summit County", "Clear Creek County": "Clear Creek County"}, "80469": {"Routt County": "Routt County", "Rio Blanco County": "Rio Blanco County"}, "80470": {"Park County": "Park County", "Jefferson County": "Jefferson County", "Clear Creek County": "Clear Creek County"}, "80471": {"Gilpin County": "Gilpin County", "Boulder County": "Boulder County"}, "80473": {"Grand County": "Grand County", "Jackson County": "Jackson County"}, "80475": {"Park County": "Park County"}, "80476": {"Grand County": "Grand County", "Summit County": "Summit County", "Clear Creek County": "Clear Creek County"}, "80477": {"Routt County": "Routt County"}, "80478": {"Grand County": "Grand County"}, "80479": {"Eagle County": "Eagle County", "Routt County": "Routt County"}, "80480": {"Grand County": "Grand County", "Routt County": "Routt County", "Jackson County": "Jackson County", "Larimer County": "Larimer County"}, "80481": {"Grand County": "Grand County", "Boulder County": "Boulder County"}, "80482": {"Grand County": "Grand County", "Gilpin County": "Gilpin County", "Boulder County": "Boulder County", "Clear Creek County": "Clear Creek County"}, "80483": {"Routt County": "Routt County", "Garfield County": "Garfield County", "Rio Blanco County": "Rio Blanco County"}, "80487": {"Grand County": "Grand County", "Routt County": "Routt County", "Jackson County": "Jackson County"}, "80488": {"Routt County": "Routt County"}, "80497": {"Grand County": "Grand County", "Summit County": "Summit County", "Clear Creek County": "Clear Creek County"}, "80498": {"Eagle County": "Eagle County", "Grand County": "Grand County", "Summit County": "Summit County"}, "80501": {"Weld County": "Weld County", "Boulder County": "Boulder County"}, "80503": {"Boulder County": "Boulder County", "Larimer County": "Larimer County"}, "80504": {"Weld County": "Weld County", "Boulder County": "Boulder County", "Larimer County": "Larimer County"}, "80510": {"Grand County": "Grand County", "Boulder County": "Boulder County", "Larimer County": "Larimer County"}, "80511": {"Larimer County": "Larimer County"}, "80512": {"Grand County": "Grand County", "Jackson County": "Jackson County", "Larimer County": "Larimer County"}, "80513": {"Weld County": "Weld County", "Boulder County": "Boulder County", "Larimer County": "Larimer County"}, "80514": {"Weld County": "Weld County", "Broomfield County": "Broomfield County"}, "80515": {"Larimer County": "Larimer County"}, "80516": {"Weld County": "Weld County", "Adams County": "Adams County", "Boulder County": "Boulder County", "Broomfield County": "Broomfield County"}, "80517": {"Grand County": "Grand County", "Boulder County": "Boulder County", "Larimer County": "Larimer County"}, "80520": {"Weld County": "Weld County"}, "80521": {"Larimer County": "Larimer County"}, "80524": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80525": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80526": {"Larimer County": "Larimer County"}, "80528": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80530": {"Weld County": "Weld County"}, "80532": {"Larimer County": "Larimer County"}, "80534": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80535": {"Larimer County": "Larimer County"}, "80536": {"Larimer County": "Larimer County"}, "80537": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80538": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80540": {"Boulder County": "Boulder County", "Larimer County": "Larimer County"}, "80542": {"Weld County": "Weld County"}, "80543": {"Weld County": "Weld County"}, "80544": {"Boulder County": "Boulder County"}, "80545": {"Larimer County": "Larimer County"}, "80546": {"Weld County": "Weld County"}, "80547": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80549": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80550": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80601": {"Weld County": "Weld County", "Adams County": "Adams County"}, "80602": {"Weld County": "Weld County", "Adams County": "Adams County", "Broomfield County": "Broomfield County"}, "80603": {"Weld County": "Weld County", "Adams County": "Adams County", "Denver County": "Denver County", "Broomfield County": "Broomfield County"}, "80610": {"Weld County": "Weld County"}, "80611": {"Weld County": "Weld County", "Morgan County": "Morgan County"}, "80612": {"Weld County": "Weld County", "Larimer County": "Larimer County"}, "80615": {"Weld County": "Weld County"}, "80620": {"Weld County": "Weld County"}, "80621": {"Weld County": "Weld County"}, "80622": {"Weld County": "Weld County"}, "80623": {"Weld County": "Weld County"}, "80624": {"Weld County": "Weld County"}, "80631": {"Weld County": "Weld County"}, "80634": {"Weld County": "Weld County"}, "80640": {"Adams County": "Adams County"}, "80642": {"Weld County": "Weld County", "Adams County": "Adams County", "Denver County": "Denver County"}, "80643": {"Weld County": "Weld County", "Adams County": "Adams County"}, "80644": {"Weld County": "Weld County"}, "80645": {"Weld County": "Weld County"}, "80648": {"Weld County": "Weld County"}, "80649": {"Weld County": "Weld County", "Morgan County": "Morgan County"}, "80650": {"Weld County": "Weld County"}, "80651": {"Weld County": "Weld County"}, "80652": {"Weld County": "Weld County", "Adams County": "Adams County", "Morgan County": "Morgan County"}, "80653": {"Morgan County": "Morgan County"}, "80654": {"Weld County": "Weld County", "Adams County": "Adams County", "Morgan County": "Morgan County"}, "80701": {"Weld County": "Weld County", "Adams County": "Adams County", "Morgan County": "Morgan County", "Washington County": "Washington County"}, "80705": {"Morgan County": "Morgan County"}, "80720": {"Yuma County": "Yuma County", "Logan County": "Logan County", "Morgan County": "Morgan County", "Washington County": "Washington County"}, "80721": {"Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County"}, "80722": {"Logan County": "Logan County", "Washington County": "Washington County"}, "80723": {"Morgan County": "Morgan County", "Washington County": "Washington County"}, "80726": {"Logan County": "Logan County", "Sedgwick County": "Sedgwick County"}, "80727": {"Yuma County": "Yuma County"}, "80728": {"Logan County": "Logan County", "Sedgwick County": "Sedgwick County", "Washington County": "Washington County"}, "80729": {"Weld County": "Weld County"}, "80731": {"Yuma County": "Yuma County", "Logan County": "Logan County", "Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County", "Washington County": "Washington County"}, "80733": {"Logan County": "Logan County", "Morgan County": "Morgan County", "Washington County": "Washington County"}, "80734": {"Yuma County": "Yuma County", "Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County"}, "80735": {"Yuma County": "Yuma County", "Kit Carson County": "Kit Carson County"}, "80736": {"Logan County": "Logan County"}, "80737": {"Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County"}, "80740": {"Lincoln County": "Lincoln County", "Washington County": "Washington County"}, "80741": {"Weld County": "Weld County", "Logan County": "Logan County", "Morgan County": "Morgan County", "Washington County": "Washington County"}, "80742": {"Weld County": "Weld County", "Logan County": "Logan County", "Morgan County": "Morgan County"}, "80743": {"Yuma County": "Yuma County", "Logan County": "Logan County", "Washington County": "Washington County"}, "80744": {"Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County"}, "80745": {"Weld County": "Weld County", "Logan County": "Logan County"}, "80746": {"Phillips County": "Phillips County"}, "80747": {"Logan County": "Logan County"}, "80749": {"Logan County": "Logan County", "Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County"}, "80750": {"Weld County": "Weld County", "Logan County": "Logan County", "Morgan County": "Morgan County", "Washington County": "Washington County"}, "80751": {"Logan County": "Logan County", "Washington County": "Washington County"}, "80754": {"Weld County": "Weld County", "Logan County": "Logan County", "Morgan County": "Morgan County"}, "80755": {"Yuma County": "Yuma County"}, "80757": {"Adams County": "Adams County", "Morgan County": "Morgan County", "Lincoln County": "Lincoln County", "Arapahoe County": "Arapahoe County", "Washington County": "Washington County"}, "80758": {"Yuma County": "Yuma County", "Phillips County": "Phillips County"}, "80759": {"Yuma County": "Yuma County", "Logan County": "Logan County", "Phillips County": "Phillips County", "Washington County": "Washington County"}, "80801": {"Washington County": "Washington County"}, "80802": {"Kiowa County": "Kiowa County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County"}, "80804": {"Lincoln County": "Lincoln County", "Kit Carson County": "Kit Carson County", "Washington County": "Washington County"}, "80805": {"Yuma County": "Yuma County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County"}, "80807": {"Yuma County": "Yuma County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County"}, "80808": {"Elbert County": "Elbert County", "El Paso County": "El Paso County"}, "80809": {"Teller County": "Teller County", "El Paso County": "El Paso County"}, "80810": {"Kiowa County": "Kiowa County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County"}, "80812": {"Yuma County": "Yuma County", "Kit Carson County": "Kit Carson County", "Washington County": "Washington County"}, "80813": {"Teller County": "Teller County", "El Paso County": "El Paso County", "Fremont County": "Fremont County"}, "80814": {"Teller County": "Teller County"}, "80815": {"Lincoln County": "Lincoln County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County", "Washington County": "Washington County"}, "80816": {"Park County": "Park County", "Teller County": "Teller County", "Fremont County": "Fremont County"}, "80817": {"Pueblo County": "Pueblo County", "El Paso County": "El Paso County"}, "80818": {"Lincoln County": "Lincoln County", "Washington County": "Washington County"}, "80819": {"Teller County": "Teller County", "El Paso County": "El Paso County"}, "80820": {"Park County": "Park County", "Teller County": "Teller County", "Fremont County": "Fremont County"}, "80821": {"Elbert County": "Elbert County", "Lincoln County": "Lincoln County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County"}, "80822": {"Yuma County": "Yuma County", "Kit Carson County": "Kit Carson County", "Washington County": "Washington County"}, "80823": {"Kiowa County": "Kiowa County", "Crowley County": "Crowley County", "Lincoln County": "Lincoln County", "Cheyenne County": "Cheyenne County"}, "80824": {"Yuma County": "Yuma County", "Kit Carson County": "Kit Carson County"}, "80825": {"Kiowa County": "Kiowa County", "Lincoln County": "Lincoln County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County"}, "80827": {"Park County": "Park County", "Teller County": "Teller County", "Douglas County": "Douglas County", "Jefferson County": "Jefferson County"}, "80828": {"Elbert County": "Elbert County", "Lincoln County": "Lincoln County", "Arapahoe County": "Arapahoe County", "Washington County": "Washington County"}, "80829": {"Teller County": "Teller County", "El Paso County": "El Paso County"}, "80830": {"Elbert County": "Elbert County", "El Paso County": "El Paso County", "Lincoln County": "Lincoln County"}, "80831": {"Elbert County": "Elbert County", "El Paso County": "El Paso County"}, "80832": {"Elbert County": "Elbert County", "El Paso County": "El Paso County", "Lincoln County": "Lincoln County"}, "80833": {"Elbert County": "Elbert County", "Pueblo County": "Pueblo County", "Crowley County": "Crowley County", "El Paso County": "El Paso County", "Lincoln County": "Lincoln County"}, "80834": {"Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County", "Washington County": "Washington County"}, "80835": {"Elbert County": "Elbert County", "El Paso County": "El Paso County"}, "80836": {"Yuma County": "Yuma County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County"}, "80840": {"El Paso County": "El Paso County"}, "80860": {"Teller County": "Teller County", "El Paso County": "El Paso County", "Fremont County": "Fremont County"}, "80861": {"Yuma County": "Yuma County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County", "Washington County": "Washington County"}, "80862": {"Lincoln County": "Lincoln County", "Cheyenne County": "Cheyenne County", "Kit Carson County": "Kit Carson County"}, "80863": {"Teller County": "Teller County", "Douglas County": "Douglas County", "El Paso County": "El Paso County"}, "80864": {"Pueblo County": "Pueblo County", "Crowley County": "Crowley County", "El Paso County": "El Paso County", "Lincoln County": "Lincoln County"}, "80902": {"El Paso County": "El Paso County"}, "80903": {"El Paso County": "El Paso County"}, "80904": {"El Paso County": "El Paso County"}, "80905": {"El Paso County": "El Paso County"}, "80906": {"Teller County": "Teller County", "El Paso County": "El Paso County"}, "80907": {"El Paso County": "El Paso County"}, "80908": {"Elbert County": "Elbert County", "Douglas County": "Douglas County", "El Paso County": "El Paso County"}, "80909": {"El Paso County": "El Paso County"}, "80910": {"El Paso County": "El Paso County"}, "80911": {"El Paso County": "El Paso County"}, "80913": {"El Paso County": "El Paso County"}, "80914": {"El Paso County": "El Paso County"}, "80915": {"El Paso County": "El Paso County"}, "80916": {"El Paso County": "El Paso County"}, "80917": {"El Paso County": "El Paso County"}, "80918": {"El Paso County": "El Paso County"}, "80919": {"El Paso County": "El Paso County"}, "80920": {"El Paso County": "El Paso County"}, "80921": {"Teller County": "Teller County", "El Paso County": "El Paso County"}, "80922": {"El Paso County": "El Paso County"}, "80923": {"El Paso County": "El Paso County"}, "80924": {"El Paso County": "El Paso County"}, "80925": {"El Paso County": "El Paso County"}, "80926": {"Teller County": "Teller County", "El Paso County": "El Paso County", "Fremont County": "Fremont County"}, "80927": {"El Paso County": "El Paso County"}, "80928": {"Pueblo County": "Pueblo County", "El Paso County": "El Paso County"}, "80929": {"El Paso County": "El Paso County"}, "80930": {"El Paso County": "El Paso County"}, "80938": {"El Paso County": "El Paso County"}, "80939": {"El Paso County": "El Paso County"}, "80951": {"El Paso County": "El Paso County"}, "81001": {"Pueblo County": "Pueblo County"}, "81003": {"Pueblo County": "Pueblo County"}, "81004": {"Pueblo County": "Pueblo County"}, "81005": {"Custer County": "Custer County", "Pueblo County": "Pueblo County", "Fremont County": "Fremont County"}, "81006": {"Pueblo County": "Pueblo County"}, "81007": {"Pueblo County": "Pueblo County", "Fremont County": "Fremont County"}, "81008": {"Pueblo County": "Pueblo County", "El Paso County": "El Paso County"}, "81019": {"Pueblo County": "Pueblo County"}, "81020": {"Pueblo County": "Pueblo County", "Huerfano County": "Huerfano County", "Las Animas County": "Las Animas County"}, "81021": {"Bent County": "Bent County", "Kiowa County": "Kiowa County", "Otero County": "Otero County", "Crowley County": "Crowley County", "Lincoln County": "Lincoln County"}, "81022": {"Pueblo County": "Pueblo County", "Huerfano County": "Huerfano County"}, "81023": {"Custer County": "Custer County", "Pueblo County": "Pueblo County"}, "81024": {"Las Animas County": "Las Animas County"}, "81025": {"Pueblo County": "Pueblo County", "Crowley County": "Crowley County", "El Paso County": "El Paso County", "Lincoln County": "Lincoln County"}, "81027": {"Las Animas County": "Las Animas County"}, "81029": {"Baca County": "Baca County"}, "81030": {"Otero County": "Otero County"}, "81033": {"Crowley County": "Crowley County"}, "81036": {"Bent County": "Bent County", "Kiowa County": "Kiowa County", "Prowers County": "Prowers County", "Cheyenne County": "Cheyenne County"}, "81038": {"Bent County": "Bent County"}, "81039": {"Otero County": "Otero County", "Pueblo County": "Pueblo County", "Crowley County": "Crowley County", "Huerfano County": "Huerfano County", "Las Animas County": "Las Animas County"}, "81040": {"Custer County": "Custer County", "Pueblo County": "Pueblo County", "Alamosa County": "Alamosa County", "Costilla County": "Costilla County", "Huerfano County": "Huerfano County", "Saguache County": "Saguache County"}, "81041": {"Baca County": "Baca County", "Prowers County": "Prowers County"}, "81043": {"Prowers County": "Prowers County"}, "81044": {"Baca County": "Baca County", "Bent County": "Bent County"}, "81045": {"Kiowa County": "Kiowa County", "Lincoln County": "Lincoln County", "Cheyenne County": "Cheyenne County"}, "81047": {"Baca County": "Baca County", "Kiowa County": "Kiowa County", "Prowers County": "Prowers County"}, "81049": {"Baca County": "Baca County", "Bent County": "Bent County", "Otero County": "Otero County", "Las Animas County": "Las Animas County"}, "81050": {"Bent County": "Bent County", "Kiowa County": "Kiowa County", "Otero County": "Otero County", "Crowley County": "Crowley County", "Las Animas County": "Las Animas County"}, "81052": {"Baca County": "Baca County", "Bent County": "Bent County", "Kiowa County": "Kiowa County", "Prowers County": "Prowers County"}, "81054": {"Baca County": "Baca County", "Bent County": "Bent County", "Kiowa County": "Kiowa County", "Otero County": "Otero County", "Las Animas County": "Las Animas County"}, "81055": {"Costilla County": "Costilla County", "Huerfano County": "Huerfano County", "Las Animas County": "Las Animas County"}, "81057": {"Bent County": "Bent County"}, "81058": {"Otero County": "Otero County", "Crowley County": "Crowley County"}, "81059": {"Otero County": "Otero County", "Pueblo County": "Pueblo County", "Las Animas County": "Las Animas County"}, "81062": {"Otero County": "Otero County", "Pueblo County": "Pueblo County", "Crowley County": "Crowley County", "El Paso County": "El Paso County", "Lincoln County": "Lincoln County"}, "81063": {"Otero County": "Otero County", "Crowley County": "Crowley County", "Lincoln County": "Lincoln County"}, "81064": {"Baca County": "Baca County", "Las Animas County": "Las Animas County"}, "81067": {"Otero County": "Otero County", "Pueblo County": "Pueblo County", "Crowley County": "Crowley County", "Las Animas County": "Las Animas County"}, "81069": {"Custer County": "Custer County", "Pueblo County": "Pueblo County", "Huerfano County": "Huerfano County"}, "81071": {"Kiowa County": "Kiowa County", "Prowers County": "Prowers County", "Cheyenne County": "Cheyenne County"}, "81073": {"Baca County": "Baca County", "Bent County": "Bent County", "Prowers County": "Prowers County", "Las Animas County": "Las Animas County"}, "81076": {"Kiowa County": "Kiowa County", "Otero County": "Otero County", "Crowley County": "Crowley County", "Lincoln County": "Lincoln County"}, "81077": {"Otero County": "Otero County"}, "81081": {"Las Animas County": "Las Animas County"}, "81082": {"Las Animas County": "Las Animas County"}, "81084": {"Baca County": "Baca County", "Prowers County": "Prowers County"}, "81087": {"Baca County": "Baca County"}, "81089": {"Pueblo County": "Pueblo County", "Huerfano County": "Huerfano County", "Las Animas County": "Las Animas County"}, "81090": {"Baca County": "Baca County", "Prowers County": "Prowers County"}, "81091": {"Costilla County": "Costilla County", "Huerfano County": "Huerfano County", "Las Animas County": "Las Animas County"}, "81092": {"Bent County": "Bent County", "Kiowa County": "Kiowa County", "Prowers County": "Prowers County"}, "81101": {"Alamosa County": "Alamosa County", "Conejos County": "Conejos County", "Costilla County": "Costilla County", "Rio Grande County": "Rio Grande County"}, "81120": {"Conejos County": "Conejos County", "Costilla County": "Costilla County", "Archuleta County": "Archuleta County", "Rio Grande County": "Rio Grande County"}, "81121": {"La Plata County": "La Plata County", "Archuleta County": "Archuleta County"}, "81122": {"Hinsdale County": "Hinsdale County", "La Plata County": "La Plata County", "San Juan County": "San Juan County", "Archuleta County": "Archuleta County"}, "81123": {"Alamosa County": "Alamosa County", "Conejos County": "Conejos County", "Costilla County": "Costilla County", "Huerfano County": "Huerfano County"}, "81124": {"Conejos County": "Conejos County"}, "81125": {"Alamosa County": "Alamosa County", "Saguache County": "Saguache County", "Rio Grande County": "Rio Grande County"}, "81126": {"Costilla County": "Costilla County"}, "81128": {"Conejos County": "Conejos County", "Archuleta County": "Archuleta County"}, "81129": {"Conejos County": "Conejos County"}, "81130": {"Mineral County": "Mineral County", "Hinsdale County": "Hinsdale County", "Saguache County": "Saguache County", "San Juan County": "San Juan County", "Archuleta County": "Archuleta County", "Rio Grande County": "Rio Grande County"}, "81131": {"Custer County": "Custer County", "Alamosa County": "Alamosa County", "Huerfano County": "Huerfano County", "Saguache County": "Saguache County"}, "81132": {"Conejos County": "Conejos County", "Mineral County": "Mineral County", "Saguache County": "Saguache County", "Rio Grande County": "Rio Grande County"}, "81133": {"Costilla County": "Costilla County", "Huerfano County": "Huerfano County"}, "81136": {"Alamosa County": "Alamosa County", "Saguache County": "Saguache County"}, "81137": {"La Plata County": "La Plata County", "Archuleta County": "Archuleta County"}, "81138": {"Costilla County": "Costilla County"}, "81140": {"Alamosa County": "Alamosa County", "Conejos County": "Conejos County", "Rio Grande County": "Rio Grande County"}, "81141": {"Conejos County": "Conejos County", "Costilla County": "Costilla County"}, "81143": {"Custer County": "Custer County", "Saguache County": "Saguache County"}, "81144": {"Alamosa County": "Alamosa County", "Conejos County": "Conejos County", "Rio Grande County": "Rio Grande County"}, "81146": {"Alamosa County": "Alamosa County", "Costilla County": "Costilla County", "Huerfano County": "Huerfano County", "Saguache County": "Saguache County"}, "81147": {"Conejos County": "Conejos County", "Mineral County": "Mineral County", "Hinsdale County": "Hinsdale County", "La Plata County": "La Plata County", "San Juan County": "San Juan County", "Archuleta County": "Archuleta County", "Rio Grande County": "Rio Grande County"}, "81148": {"Conejos County": "Conejos County"}, "81149": {"Mineral County": "Mineral County", "Saguache County": "Saguache County"}, "81151": {"Alamosa County": "Alamosa County", "Conejos County": "Conejos County", "Costilla County": "Costilla County"}, "81152": {"Conejos County": "Conejos County", "Costilla County": "Costilla County", "Huerfano County": "Huerfano County", "Las Animas County": "Las Animas County"}, "81154": {"Conejos County": "Conejos County", "Mineral County": "Mineral County", "Archuleta County": "Archuleta County", "Rio Grande County": "Rio Grande County"}, "81155": {"Custer County": "Custer County", "Chaffee County": "Chaffee County", "Fremont County": "Fremont County", "Saguache County": "Saguache County"}, "81201": {"Park County": "Park County", "Chaffee County": "Chaffee County", "Fremont County": "Fremont County", "Gunnison County": "Gunnison County", "Saguache County": "Saguache County"}, "81210": {"Pitkin County": "Pitkin County", "Chaffee County": "Chaffee County", "Gunnison County": "Gunnison County"}, "81211": {"Lake County": "Lake County", "Park County": "Park County", "Pitkin County": "Pitkin County", "Chaffee County": "Chaffee County", "Gunnison County": "Gunnison County"}, "81212": {"Park County": "Park County", "Custer County": "Custer County", "Teller County": "Teller County", "Fremont County": "Fremont County"}, "81220": {"Ouray County": "Ouray County", "Gunnison County": "Gunnison County", "Hinsdale County": "Hinsdale County", "Montrose County": "Montrose County"}, "81221": {"Fremont County": "Fremont County"}, "81222": {"Fremont County": "Fremont County", "Saguache County": "Saguache County"}, "81223": {"Custer County": "Custer County", "Fremont County": "Fremont County", "Saguache County": "Saguache County"}, "81224": {"Pitkin County": "Pitkin County", "Gunnison County": "Gunnison County"}, "81225": {"Pitkin County": "Pitkin County", "Gunnison County": "Gunnison County"}, "81226": {"Custer County": "Custer County", "Fremont County": "Fremont County"}, "81227": {"Chaffee County": "Chaffee County"}, "81230": {"Delta County": "Delta County", "Mineral County": "Mineral County", "Gunnison County": "Gunnison County", "Hinsdale County": "Hinsdale County", "Montrose County": "Montrose County", "Saguache County": "Saguache County"}, "81231": {"Gunnison County": "Gunnison County"}, "81232": {"Custer County": "Custer County", "Fremont County": "Fremont County"}, "81233": {"Fremont County": "Fremont County", "Saguache County": "Saguache County"}, "81235": {"Ouray County": "Ouray County", "Mineral County": "Mineral County", "Gunnison County": "Gunnison County", "Hinsdale County": "Hinsdale County", "Saguache County": "Saguache County", "San Juan County": "San Juan County"}, "81236": {"Chaffee County": "Chaffee County", "Gunnison County": "Gunnison County"}, "81237": {"Gunnison County": "Gunnison County"}, "81239": {"Gunnison County": "Gunnison County", "Saguache County": "Saguache County"}, "81240": {"Pueblo County": "Pueblo County", "Teller County": "Teller County", "El Paso County": "El Paso County", "Fremont County": "Fremont County"}, "81241": {"Gunnison County": "Gunnison County"}, "81242": {"Chaffee County": "Chaffee County"}, "81243": {"Gunnison County": "Gunnison County", "Hinsdale County": "Hinsdale County", "Saguache County": "Saguache County"}, "81244": {"Fremont County": "Fremont County"}, "81248": {"Chaffee County": "Chaffee County", "Gunnison County": "Gunnison County", "Saguache County": "Saguache County"}, "81251": {"Lake County": "Lake County", "Pitkin County": "Pitkin County", "Chaffee County": "Chaffee County"}, "81252": {"Custer County": "Custer County", "Fremont County": "Fremont County", "Huerfano County": "Huerfano County", "Saguache County": "Saguache County"}, "81253": {"Custer County": "Custer County", "Pueblo County": "Pueblo County", "Fremont County": "Fremont County"}, "81301": {"Dolores County": "Dolores County", "La Plata County": "La Plata County", "San Juan County": "San Juan County", "Montezuma County": "Montezuma County", "San Miguel County": "San Miguel County"}, "81303": {"La Plata County": "La Plata County"}, "81320": {"Dolores County": "Dolores County", "Montezuma County": "Montezuma County", "San Miguel County": "San Miguel County"}, "81321": {"Montezuma County": "Montezuma County"}, "81323": {"Dolores County": "Dolores County", "La Plata County": "La Plata County", "San Juan County": "San Juan County", "Montezuma County": "Montezuma County", "San Miguel County": "San Miguel County"}, "81324": {"Dolores County": "Dolores County", "Montezuma County": "Montezuma County", "San Miguel County": "San Miguel County"}, "81325": {"Dolores County": "Dolores County", "Montrose County": "Montrose County", "Montezuma County": "Montezuma County", "San Miguel County": "San Miguel County"}, "81326": {"La Plata County": "La Plata County", "Montezuma County": "Montezuma County"}, "81327": {"Montezuma County": "Montezuma County"}, "81328": {"La Plata County": "La Plata County", "Montezuma County": "Montezuma County"}, "81330": {"Montezuma County": "Montezuma County"}, "81331": {"Dolores County": "Dolores County", "Montezuma County": "Montezuma County"}, "81332": {"Dolores County": "Dolores County", "La Plata County": "La Plata County", "San Juan County": "San Juan County", "Montezuma County": "Montezuma County", "San Miguel County": "San Miguel County"}, "81334": {"La Plata County": "La Plata County", "Montezuma County": "Montezuma County"}, "81335": {"Montezuma County": "Montezuma County"}, "81401": {"Delta County": "Delta County", "Ouray County": "Ouray County", "Gunnison County": "Gunnison County", "Montrose County": "Montrose County"}, "81403": {"Ouray County": "Ouray County", "Gunnison County": "Gunnison County", "Montrose County": "Montrose County", "San Miguel County": "San Miguel County"}, "81410": {"Delta County": "Delta County"}, "81411": {"Montrose County": "Montrose County", "San Miguel County": "San Miguel County"}, "81413": {"Mesa County": "Mesa County", "Delta County": "Delta County"}, "81415": {"Delta County": "Delta County", "Gunnison County": "Gunnison County", "Montrose County": "Montrose County"}, "81416": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Montrose County": "Montrose County"}, "81418": {"Delta County": "Delta County"}, "81419": {"Mesa County": "Mesa County", "Delta County": "Delta County"}, "81422": {"Mesa County": "Mesa County", "Montrose County": "Montrose County", "San Miguel County": "San Miguel County"}, "81423": {"Dolores County": "Dolores County", "Montrose County": "Montrose County", "San Miguel County": "San Miguel County"}, "81424": {"Montrose County": "Montrose County"}, "81425": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Montrose County": "Montrose County"}, "81426": {"Dolores County": "Dolores County", "San Juan County": "San Juan County", "San Miguel County": "San Miguel County"}, "81427": {"Ouray County": "Ouray County", "Hinsdale County": "Hinsdale County", "San Juan County": "San Juan County", "San Miguel County": "San Miguel County"}, "81428": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Gunnison County": "Gunnison County"}, "81429": {"Montrose County": "Montrose County", "San Miguel County": "San Miguel County"}, "81430": {"Ouray County": "Ouray County", "Dolores County": "Dolores County", "Montrose County": "Montrose County", "San Miguel County": "San Miguel County"}, "81431": {"Montrose County": "Montrose County", "San Miguel County": "San Miguel County"}, "81432": {"Ouray County": "Ouray County", "Gunnison County": "Gunnison County", "Hinsdale County": "Hinsdale County", "Montrose County": "Montrose County", "San Miguel County": "San Miguel County"}, "81433": {"Ouray County": "Ouray County", "Hinsdale County": "Hinsdale County", "La Plata County": "La Plata County", "San Juan County": "San Juan County", "San Miguel County": "San Miguel County"}, "81434": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Pitkin County": "Pitkin County", "Gunnison County": "Gunnison County"}, "81435": {"Ouray County": "Ouray County", "Dolores County": "Dolores County", "San Juan County": "San Juan County", "San Miguel County": "San Miguel County"}, "81501": {"Mesa County": "Mesa County"}, "81503": {"Mesa County": "Mesa County"}, "81504": {"Mesa County": "Mesa County"}, "81505": {"Mesa County": "Mesa County"}, "81506": {"Mesa County": "Mesa County"}, "81507": {"Mesa County": "Mesa County"}, "81520": {"Mesa County": "Mesa County"}, "81521": {"Mesa County": "Mesa County"}, "81522": {"Mesa County": "Mesa County", "Montrose County": "Montrose County"}, "81523": {"Mesa County": "Mesa County"}, "81524": {"Mesa County": "Mesa County", "Garfield County": "Garfield County"}, "81525": {"Mesa County": "Mesa County", "Garfield County": "Garfield County"}, "81526": {"Mesa County": "Mesa County"}, "81527": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Montrose County": "Montrose County"}, "81601": {"Eagle County": "Eagle County", "Pitkin County": "Pitkin County", "Garfield County": "Garfield County"}, "81610": {"Moffat County": "Moffat County", "Rio Blanco County": "Rio Blanco County"}, "81611": {"Lake County": "Lake County", "Pitkin County": "Pitkin County", "Chaffee County": "Chaffee County", "Gunnison County": "Gunnison County"}, "81612": {"Pitkin County": "Pitkin County"}, "81615": {"Pitkin County": "Pitkin County"}, "81620": {"Eagle County": "Eagle County"}, "81621": {"Eagle County": "Eagle County", "Pitkin County": "Pitkin County", "Garfield County": "Garfield County"}, "81623": {"Mesa County": "Mesa County", "Eagle County": "Eagle County", "Pitkin County": "Pitkin County", "Garfield County": "Garfield County", "Gunnison County": "Gunnison County"}, "81624": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Pitkin County": "Pitkin County", "Garfield County": "Garfield County", "Gunnison County": "Gunnison County"}, "81625": {"Routt County": "Routt County", "Moffat County": "Moffat County"}, "81630": {"Mesa County": "Mesa County", "Garfield County": "Garfield County", "Rio Blanco County": "Rio Blanco County"}, "81631": {"Eagle County": "Eagle County"}, "81632": {"Eagle County": "Eagle County"}, "81633": {"Moffat County": "Moffat County", "Rio Blanco County": "Rio Blanco County"}, "81635": {"Mesa County": "Mesa County", "Garfield County": "Garfield County", "Rio Blanco County": "Rio Blanco County"}, "81637": {"Eagle County": "Eagle County", "Routt County": "Routt County", "Garfield County": "Garfield County", "Rio Blanco County": "Rio Blanco County"}, "81638": {"Routt County": "Routt County", "Moffat County": "Moffat County", "Rio Blanco County": "Rio Blanco County"}, "81639": {"Routt County": "Routt County", "Moffat County": "Moffat County", "Rio Blanco County": "Rio Blanco County"}, "81640": {"Moffat County": "Moffat County", "Rio Blanco County": "Rio Blanco County"}, "81641": {"Routt County": "Routt County", "Moffat County": "Moffat County", "Garfield County": "Garfield County", "Rio Blanco County": "Rio Blanco County"}, "81642": {"Lake County": "Lake County", "Eagle County": "Eagle County", "Pitkin County": "Pitkin County"}, "81643": {"Mesa County": "Mesa County", "Delta County": "Delta County"}, "81645": {"Lake County": "Lake County", "Eagle County": "Eagle County", "Pitkin County": "Pitkin County", "Summit County": "Summit County"}, "81646": {"Mesa County": "Mesa County", "Delta County": "Delta County"}, "81647": {"Mesa County": "Mesa County", "Pitkin County": "Pitkin County", "Garfield County": "Garfield County", "Rio Blanco County": "Rio Blanco County"}, "81648": {"Moffat County": "Moffat County", "Garfield County": "Garfield County", "Rio Blanco County": "Rio Blanco County"}, "81649": {"Eagle County": "Eagle County", "Summit County": "Summit County"}, "81650": {"Mesa County": "Mesa County", "Garfield County": "Garfield County", "Rio Blanco County": "Rio Blanco County"}, "81652": {"Mesa County": "Mesa County", "Garfield County": "Garfield County"}, "81653": {"Routt County": "Routt County", "Moffat County": "Moffat County"}, "81654": {"Pitkin County": "Pitkin County", "Gunnison County": "Gunnison County"}, "81655": {"Eagle County": "Eagle County", "Summit County": "Summit County"}, "81656": {"Pitkin County": "Pitkin County"}, "81657": {"Eagle County": "Eagle County", "Summit County": "Summit County"}, "82063": {"Jackson County": "Jackson County", "Larimer County": "Larimer County"}}
+ co_zipcodes = {
+ "80001": "80001",
+ "80002": "80002",
+ "80003": "80003",
+ "80004": "80004",
+ "80005": "80005",
+ "80006": "80006",
+ "80007": "80007",
+ "80010": "80010",
+ "80011": "80011",
+ "80012": "80012",
+ "80013": "80013",
+ "80014": "80014",
+ "80015": "80015",
+ "80016": "80016",
+ "80017": "80017",
+ "80018": "80018",
+ "80019": "80019",
+ "80020": "80020",
+ "80021": "80021",
+ "80022": "80022",
+ "80023": "80023",
+ "80024": "80024",
+ "80025": "80025",
+ "80026": "80026",
+ "80027": "80027",
+ "80028": "80028",
+ "80030": "80030",
+ "80031": "80031",
+ "80033": "80033",
+ "80034": "80034",
+ "80035": "80035",
+ "80036": "80036",
+ "80037": "80037",
+ "80038": "80038",
+ "80040": "80040",
+ "80041": "80041",
+ "80042": "80042",
+ "80044": "80044",
+ "80045": "80045",
+ "80046": "80046",
+ "80047": "80047",
+ "80101": "80101",
+ "80102": "80102",
+ "80103": "80103",
+ "80104": "80104",
+ "80105": "80105",
+ "80106": "80106",
+ "80107": "80107",
+ "80108": "80108",
+ "80109": "80109",
+ "80110": "80110",
+ "80111": "80111",
+ "80112": "80112",
+ "80113": "80113",
+ "80116": "80116",
+ "80117": "80117",
+ "80118": "80118",
+ "80120": "80120",
+ "80121": "80121",
+ "80122": "80122",
+ "80123": "80123",
+ "80124": "80124",
+ "80125": "80125",
+ "80126": "80126",
+ "80127": "80127",
+ "80128": "80128",
+ "80129": "80129",
+ "80130": "80130",
+ "80131": "80131",
+ "80132": "80132",
+ "80133": "80133",
+ "80134": "80134",
+ "80135": "80135",
+ "80136": "80136",
+ "80137": "80137",
+ "80138": "80138",
+ "80150": "80150",
+ "80151": "80151",
+ "80155": "80155",
+ "80160": "80160",
+ "80161": "80161",
+ "80162": "80162",
+ "80163": "80163",
+ "80165": "80165",
+ "80166": "80166",
+ "80201": "80201",
+ "80202": "80202",
+ "80203": "80203",
+ "80204": "80204",
+ "80205": "80205",
+ "80206": "80206",
+ "80207": "80207",
+ "80208": "80208",
+ "80209": "80209",
+ "80210": "80210",
+ "80211": "80211",
+ "80212": "80212",
+ "80214": "80214",
+ "80215": "80215",
+ "80216": "80216",
+ "80217": "80217",
+ "80218": "80218",
+ "80219": "80219",
+ "80220": "80220",
+ "80221": "80221",
+ "80222": "80222",
+ "80223": "80223",
+ "80224": "80224",
+ "80225": "80225",
+ "80226": "80226",
+ "80227": "80227",
+ "80228": "80228",
+ "80229": "80229",
+ "80230": "80230",
+ "80231": "80231",
+ "80232": "80232",
+ "80233": "80233",
+ "80234": "80234",
+ "80235": "80235",
+ "80236": "80236",
+ "80237": "80237",
+ "80238": "80238",
+ "80239": "80239",
+ "80241": "80241",
+ "80243": "80243",
+ "80244": "80244",
+ "80246": "80246",
+ "80247": "80247",
+ "80248": "80248",
+ "80249": "80249",
+ "80250": "80250",
+ "80251": "80251",
+ "80252": "80252",
+ "80256": "80256",
+ "80257": "80257",
+ "80259": "80259",
+ "80260": "80260",
+ "80261": "80261",
+ "80262": "80262",
+ "80263": "80263",
+ "80264": "80264",
+ "80265": "80265",
+ "80266": "80266",
+ "80271": "80271",
+ "80273": "80273",
+ "80274": "80274",
+ "80279": "80279",
+ "80280": "80280",
+ "80281": "80281",
+ "80290": "80290",
+ "80291": "80291",
+ "80293": "80293",
+ "80294": "80294",
+ "80295": "80295",
+ "80299": "80299",
+ "80301": "80301",
+ "80302": "80302",
+ "80303": "80303",
+ "80304": "80304",
+ "80305": "80305",
+ "80306": "80306",
+ "80307": "80307",
+ "80308": "80308",
+ "80309": "80309",
+ "80310": "80310",
+ "80314": "80314",
+ "80321": "80321",
+ "80322": "80322",
+ "80323": "80323",
+ "80328": "80328",
+ "80329": "80329",
+ "80401": "80401",
+ "80402": "80402",
+ "80403": "80403",
+ "80419": "80419",
+ "80420": "80420",
+ "80421": "80421",
+ "80422": "80422",
+ "80423": "80423",
+ "80424": "80424",
+ "80425": "80425",
+ "80426": "80426",
+ "80427": "80427",
+ "80428": "80428",
+ "80429": "80429",
+ "80430": "80430",
+ "80432": "80432",
+ "80433": "80433",
+ "80434": "80434",
+ "80435": "80435",
+ "80436": "80436",
+ "80437": "80437",
+ "80438": "80438",
+ "80439": "80439",
+ "80440": "80440",
+ "80442": "80442",
+ "80443": "80443",
+ "80444": "80444",
+ "80446": "80446",
+ "80447": "80447",
+ "80448": "80448",
+ "80449": "80449",
+ "80451": "80451",
+ "80452": "80452",
+ "80453": "80453",
+ "80454": "80454",
+ "80455": "80455",
+ "80456": "80456",
+ "80457": "80457",
+ "80459": "80459",
+ "80461": "80461",
+ "80463": "80463",
+ "80465": "80465",
+ "80466": "80466",
+ "80467": "80467",
+ "80468": "80468",
+ "80469": "80469",
+ "80470": "80470",
+ "80471": "80471",
+ "80473": "80473",
+ "80474": "80474",
+ "80475": "80475",
+ "80476": "80476",
+ "80477": "80477",
+ "80478": "80478",
+ "80479": "80479",
+ "80480": "80480",
+ "80481": "80481",
+ "80482": "80482",
+ "80483": "80483",
+ "80487": "80487",
+ "80488": "80488",
+ "80497": "80497",
+ "80498": "80498",
+ "80501": "80501",
+ "80502": "80502",
+ "80503": "80503",
+ "80504": "80504",
+ "80510": "80510",
+ "80511": "80511",
+ "80512": "80512",
+ "80513": "80513",
+ "80514": "80514",
+ "80515": "80515",
+ "80516": "80516",
+ "80517": "80517",
+ "80520": "80520",
+ "80521": "80521",
+ "80522": "80522",
+ "80523": "80523",
+ "80524": "80524",
+ "80525": "80525",
+ "80526": "80526",
+ "80527": "80527",
+ "80528": "80528",
+ "80530": "80530",
+ "80532": "80532",
+ "80533": "80533",
+ "80534": "80534",
+ "80535": "80535",
+ "80536": "80536",
+ "80537": "80537",
+ "80538": "80538",
+ "80539": "80539",
+ "80540": "80540",
+ "80541": "80541",
+ "80542": "80542",
+ "80543": "80543",
+ "80544": "80544",
+ "80545": "80545",
+ "80546": "80546",
+ "80547": "80547",
+ "80549": "80549",
+ "80550": "80550",
+ "80551": "80551",
+ "80553": "80553",
+ "80601": "80601",
+ "80602": "80602",
+ "80603": "80603",
+ "80610": "80610",
+ "80611": "80611",
+ "80612": "80612",
+ "80614": "80614",
+ "80615": "80615",
+ "80620": "80620",
+ "80621": "80621",
+ "80622": "80622",
+ "80623": "80623",
+ "80624": "80624",
+ "80631": "80631",
+ "80632": "80632",
+ "80633": "80633",
+ "80634": "80634",
+ "80638": "80638",
+ "80639": "80639",
+ "80640": "80640",
+ "80642": "80642",
+ "80643": "80643",
+ "80644": "80644",
+ "80645": "80645",
+ "80646": "80646",
+ "80648": "80648",
+ "80649": "80649",
+ "80650": "80650",
+ "80651": "80651",
+ "80652": "80652",
+ "80653": "80653",
+ "80654": "80654",
+ "80701": "80701",
+ "80705": "80705",
+ "80720": "80720",
+ "80721": "80721",
+ "80722": "80722",
+ "80723": "80723",
+ "80726": "80726",
+ "80727": "80727",
+ "80728": "80728",
+ "80729": "80729",
+ "80731": "80731",
+ "80732": "80732",
+ "80733": "80733",
+ "80734": "80734",
+ "80735": "80735",
+ "80736": "80736",
+ "80737": "80737",
+ "80740": "80740",
+ "80741": "80741",
+ "80742": "80742",
+ "80743": "80743",
+ "80744": "80744",
+ "80745": "80745",
+ "80746": "80746",
+ "80747": "80747",
+ "80749": "80749",
+ "80750": "80750",
+ "80751": "80751",
+ "80754": "80754",
+ "80755": "80755",
+ "80757": "80757",
+ "80758": "80758",
+ "80759": "80759",
+ "80801": "80801",
+ "80802": "80802",
+ "80804": "80804",
+ "80805": "80805",
+ "80807": "80807",
+ "80808": "80808",
+ "80809": "80809",
+ "80810": "80810",
+ "80812": "80812",
+ "80813": "80813",
+ "80814": "80814",
+ "80815": "80815",
+ "80816": "80816",
+ "80817": "80817",
+ "80818": "80818",
+ "80819": "80819",
+ "80820": "80820",
+ "80821": "80821",
+ "80822": "80822",
+ "80823": "80823",
+ "80824": "80824",
+ "80825": "80825",
+ "80826": "80826",
+ "80827": "80827",
+ "80828": "80828",
+ "80829": "80829",
+ "80830": "80830",
+ "80831": "80831",
+ "80832": "80832",
+ "80833": "80833",
+ "80834": "80834",
+ "80835": "80835",
+ "80836": "80836",
+ "80840": "80840",
+ "80841": "80841",
+ "80860": "80860",
+ "80861": "80861",
+ "80862": "80862",
+ "80863": "80863",
+ "80864": "80864",
+ "80866": "80866",
+ "80901": "80901",
+ "80902": "80902",
+ "80903": "80903",
+ "80904": "80904",
+ "80905": "80905",
+ "80906": "80906",
+ "80907": "80907",
+ "80908": "80908",
+ "80909": "80909",
+ "80910": "80910",
+ "80911": "80911",
+ "80912": "80912",
+ "80913": "80913",
+ "80914": "80914",
+ "80915": "80915",
+ "80916": "80916",
+ "80917": "80917",
+ "80918": "80918",
+ "80919": "80919",
+ "80920": "80920",
+ "80921": "80921",
+ "80922": "80922",
+ "80923": "80923",
+ "80924": "80924",
+ "80925": "80925",
+ "80926": "80926",
+ "80927": "80927",
+ "80928": "80928",
+ "80929": "80929",
+ "80930": "80930",
+ "80931": "80931",
+ "80932": "80932",
+ "80933": "80933",
+ "80934": "80934",
+ "80935": "80935",
+ "80936": "80936",
+ "80937": "80937",
+ "80938": "80938",
+ "80939": "80939",
+ "80940": "80940",
+ "80941": "80941",
+ "80942": "80942",
+ "80943": "80943",
+ "80944": "80944",
+ "80945": "80945",
+ "80946": "80946",
+ "80947": "80947",
+ "80949": "80949",
+ "80950": "80950",
+ "80951": "80951",
+ "80960": "80960",
+ "80962": "80962",
+ "80970": "80970",
+ "80977": "80977",
+ "80995": "80995",
+ "80997": "80997",
+ "81001": "81001",
+ "81002": "81002",
+ "81003": "81003",
+ "81004": "81004",
+ "81005": "81005",
+ "81006": "81006",
+ "81007": "81007",
+ "81008": "81008",
+ "81009": "81009",
+ "81010": "81010",
+ "81011": "81011",
+ "81012": "81012",
+ "81019": "81019",
+ "81020": "81020",
+ "81021": "81021",
+ "81022": "81022",
+ "81023": "81023",
+ "81024": "81024",
+ "81025": "81025",
+ "81027": "81027",
+ "81029": "81029",
+ "81030": "81030",
+ "81033": "81033",
+ "81034": "81034",
+ "81036": "81036",
+ "81038": "81038",
+ "81039": "81039",
+ "81040": "81040",
+ "81041": "81041",
+ "81043": "81043",
+ "81044": "81044",
+ "81045": "81045",
+ "81046": "81046",
+ "81047": "81047",
+ "81049": "81049",
+ "81050": "81050",
+ "81052": "81052",
+ "81054": "81054",
+ "81055": "81055",
+ "81057": "81057",
+ "81058": "81058",
+ "81059": "81059",
+ "81062": "81062",
+ "81063": "81063",
+ "81064": "81064",
+ "81067": "81067",
+ "81069": "81069",
+ "81071": "81071",
+ "81073": "81073",
+ "81075": "81075",
+ "81076": "81076",
+ "81077": "81077",
+ "81081": "81081",
+ "81082": "81082",
+ "81084": "81084",
+ "81087": "81087",
+ "81089": "81089",
+ "81090": "81090",
+ "81091": "81091",
+ "81092": "81092",
+ "81101": "81101",
+ "81102": "81102",
+ "81120": "81120",
+ "81121": "81121",
+ "81122": "81122",
+ "81123": "81123",
+ "81124": "81124",
+ "81125": "81125",
+ "81126": "81126",
+ "81127": "81127",
+ "81128": "81128",
+ "81129": "81129",
+ "81130": "81130",
+ "81131": "81131",
+ "81132": "81132",
+ "81133": "81133",
+ "81134": "81134",
+ "81135": "81135",
+ "81136": "81136",
+ "81137": "81137",
+ "81138": "81138",
+ "81140": "81140",
+ "81141": "81141",
+ "81143": "81143",
+ "81144": "81144",
+ "81146": "81146",
+ "81147": "81147",
+ "81148": "81148",
+ "81149": "81149",
+ "81151": "81151",
+ "81152": "81152",
+ "81153": "81153",
+ "81154": "81154",
+ "81155": "81155",
+ "81157": "81157",
+ "81201": "81201",
+ "81210": "81210",
+ "81211": "81211",
+ "81212": "81212",
+ "81215": "81215",
+ "81220": "81220",
+ "81221": "81221",
+ "81222": "81222",
+ "81223": "81223",
+ "81224": "81224",
+ "81225": "81225",
+ "81226": "81226",
+ "81227": "81227",
+ "81228": "81228",
+ "81230": "81230",
+ "81231": "81231",
+ "81232": "81232",
+ "81233": "81233",
+ "81235": "81235",
+ "81236": "81236",
+ "81237": "81237",
+ "81239": "81239",
+ "81240": "81240",
+ "81241": "81241",
+ "81242": "81242",
+ "81243": "81243",
+ "81244": "81244",
+ "81247": "81247",
+ "81248": "81248",
+ "81251": "81251",
+ "81252": "81252",
+ "81253": "81253",
+ "81290": "81290",
+ "81301": "81301",
+ "81302": "81302",
+ "81303": "81303",
+ "81320": "81320",
+ "81321": "81321",
+ "81323": "81323",
+ "81324": "81324",
+ "81325": "81325",
+ "81326": "81326",
+ "81327": "81327",
+ "81328": "81328",
+ "81329": "81329",
+ "81330": "81330",
+ "81331": "81331",
+ "81332": "81332",
+ "81334": "81334",
+ "81335": "81335",
+ "81401": "81401",
+ "81402": "81402",
+ "81403": "81403",
+ "81410": "81410",
+ "81411": "81411",
+ "81413": "81413",
+ "81414": "81414",
+ "81415": "81415",
+ "81416": "81416",
+ "81418": "81418",
+ "81419": "81419",
+ "81420": "81420",
+ "81422": "81422",
+ "81423": "81423",
+ "81424": "81424",
+ "81425": "81425",
+ "81426": "81426",
+ "81427": "81427",
+ "81428": "81428",
+ "81429": "81429",
+ "81430": "81430",
+ "81431": "81431",
+ "81432": "81432",
+ "81433": "81433",
+ "81434": "81434",
+ "81435": "81435",
+ "81501": "81501",
+ "81502": "81502",
+ "81503": "81503",
+ "81504": "81504",
+ "81505": "81505",
+ "81506": "81506",
+ "81507": "81507",
+ "81520": "81520",
+ "81521": "81521",
+ "81522": "81522",
+ "81523": "81523",
+ "81524": "81524",
+ "81525": "81525",
+ "81526": "81526",
+ "81527": "81527",
+ "81601": "81601",
+ "81602": "81602",
+ "81610": "81610",
+ "81611": "81611",
+ "81612": "81612",
+ "81615": "81615",
+ "81620": "81620",
+ "81621": "81621",
+ "81623": "81623",
+ "81624": "81624",
+ "81625": "81625",
+ "81626": "81626",
+ "81630": "81630",
+ "81631": "81631",
+ "81632": "81632",
+ "81633": "81633",
+ "81635": "81635",
+ "81636": "81636",
+ "81637": "81637",
+ "81638": "81638",
+ "81639": "81639",
+ "81640": "81640",
+ "81641": "81641",
+ "81642": "81642",
+ "81643": "81643",
+ "81645": "81645",
+ "81646": "81646",
+ "81647": "81647",
+ "81648": "81648",
+ "81649": "81649",
+ "81650": "81650",
+ "81652": "81652",
+ "81653": "81653",
+ "81654": "81654",
+ "81655": "81655",
+ "81656": "81656",
+ "81657": "81657",
+ "81658": "81658",
+ }
- category_benefits = {"cash": {"benefits": {"oap": {"_label": "cashAssistanceBenefits.oap", "_default_message": "State cash assistance for individuals 60 years of age or older (Old Age Pension/OAP)"}, "ssi": {"_label": "cashAssistanceBenefits.ssi", "_default_message": "Federal cash assistance for individuals who are disabled, blind, or 65 years of age or older (Supplemental Security Income/SSI)"}, "ssdi": {"_label": "cashAssistanceBenefits.ssdi", "_default_message": "Social security benefit for people with disabilities (Social Security Disability Insurance/SSDI)"}, "tanf": {"_label": "cashAssistanceBenefits.tanf", "_default_message": "Cash assistance and work support (Temporary Assistance for Needy Families (TANF/Colorado Works))"}, "andcs": {"_label": "cashAssistanceBenefits.andcs", "_default_message": "State cash assistance for individuals who are disabled and receiving SSI (Aid to the Needy Disabled - Colorado Supplement/AND-CS)"}}, "category_name": "Cash Assistance"}, "childCare": {"benefits": {"upk": {"_label": "childCareBenefits.univpresc", "_default_message": "Free preschool (Universal Preschool Colorado)"}, "pell": {"_label": "childCareBenefits.pell", "_default_message": "Federal grant to finance college costs (Pell Grant)"}, "cccap": {"_label": "childCareBenefits.cccap", "_default_message": "Help with child care costs (Colorado Child Care Assistance Program/CCCAP)"}, "mydenver": {"_label": "childCareBenefits.mydenver", "_default_message": "Reduced-cost youth programs (MY Denver Card)"}, "coheadstart": {"_label": "childCareBenefits.coheadstart", "_default_message": "Free early child care and preschool (Colorado Head Start)"}, "denverpresc": {"_label": "childCareBenefits.denverpresc", "_default_message": "Tuition credits for Denver preschoolers (Denver Preschool Program)"}}, "category_name": "Child Care, Youth, and Education"}, "healthCare": {"benefits": {"dentallowincseniors": {"_label": "healthCareBenefits.dentallowincseniors", "_default_message": "Low-cost dental care for people 60 years of age or older (Colorado Dental Health Program for Low-Income Seniors)"}}, "category_name": "Health Care"}, "taxCredits": {"benefits": {"ctc": {"_label": "taxCreditBenefits.ctc", "_default_message": "Federal tax credit: child tax credit (Child Tax Credit)"}, "eitc": {"_label": "taxCreditBenefits.eitc", "_default_message": "Federal tax credit: earned income (Earned Income Tax Credit)"}, "coctc": {"_label": "taxCreditBenefits.coctc", "_default_message": "State tax credit: Colorado child tax credit"}, "coeitc": {"_label": "taxCreditBenefits.coeitc", "_default_message": "State tax credit: earned income (Colorado Earned Income Tax Credit/Expanded Earned Income Tax Credit)"}}, "category_name": "Tax Credits"}, "transportation": {"benefits": {"rtdlive": {"_label": "transportationBenefits.rtdlive", "_default_message": "Discounted RTD fares (RTD LiVE)"}}, "category_name": "Transportation"}, "foodAndNutrition": {"benefits": {"ede": {"_label": "foodAndNutritionBenefits.ede", "_default_message": "Food support for people 60 years of age or older (Everyday Eats)"}, "wic": {"_label": "foodAndNutritionBenefits.wic", "_default_message": "Food and breastfeeding assistance (Special Supplemental Nutrition Program for Women, Infants, and Children/WIC)"}, "nslp": {"_label": "foodAndNutritionBenefits.nslp", "_default_message": "Free school meals (National School Lunch Program)"}, "snap": {"_label": "foodAndNutritionBenefits.snap", "_default_message": "Food assistance (Supplemental Nutrition Assistance Program/SNAP)"}}, "category_name": "Food and Nutrition"}, "housingAndUtilities": {"benefits": {"acp": {"_label": "housingAndUtilities.acp", "_default_message": "Home internet discount (Affordable Connectivity Program)"}, "ubp": {"_label": "housingAndUtilities.ubp", "_default_message": "Help paying utility bills (Colorado Utility Bill Help Program)"}, "leap": {"_label": "housingAndUtilities.leap", "_default_message": "Help with winter heating bills (Low-Income Energy Assistance Program/LEAP)"}, "cowap": {"_label": "housingAndUtilities.cowap", "_default_message": "Free home energy upgrades (Weatherization Assistance Program)"}, "lifeline": {"_label": "housingAndUtilities.lifeline", "_default_message": "Phone or internet discount (Lifeline Phone/Internet Service)"}, "coPropTaxRentHeatCreditRebate": {"_label": "cashAssistanceBenefits.coPropTaxRentHeatCreditRebate", "_default_message": "Cash to pay property tax, rent, and heat bills (Colorado Property Tax/Rent/Heat Credit Rebate)"}}, "category_name": "Housing and Utilities"}}
+ counties_by_zipcode = {
+ "80002": {
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80003": {"Adams County": "Adams County", "Jefferson County": "Jefferson County"},
+ "80004": {"Jefferson County": "Jefferson County"},
+ "80005": {"Jefferson County": "Jefferson County", "Broomfield County": "Broomfield County"},
+ "80007": {
+ "Boulder County": "Boulder County",
+ "Jefferson County": "Jefferson County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80010": {
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80011": {
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80012": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80013": {"Arapahoe County": "Arapahoe County"},
+ "80014": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80015": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80016": {
+ "Denver County": "Denver County",
+ "Elbert County": "Elbert County",
+ "Douglas County": "Douglas County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80017": {"Arapahoe County": "Arapahoe County"},
+ "80018": {"Adams County": "Adams County", "Arapahoe County": "Arapahoe County"},
+ "80019": {
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80020": {
+ "Adams County": "Adams County",
+ "Boulder County": "Boulder County",
+ "Jefferson County": "Jefferson County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80021": {
+ "Boulder County": "Boulder County",
+ "Jefferson County": "Jefferson County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80022": {"Adams County": "Adams County", "Denver County": "Denver County"},
+ "80023": {
+ "Weld County": "Weld County",
+ "Adams County": "Adams County",
+ "Boulder County": "Boulder County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80024": {"Adams County": "Adams County"},
+ "80025": {"Boulder County": "Boulder County", "Jefferson County": "Jefferson County"},
+ "80026": {
+ "Weld County": "Weld County",
+ "Boulder County": "Boulder County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80027": {
+ "Boulder County": "Boulder County",
+ "Jefferson County": "Jefferson County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80030": {"Adams County": "Adams County", "Jefferson County": "Jefferson County"},
+ "80031": {
+ "Adams County": "Adams County",
+ "Jefferson County": "Jefferson County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80033": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"},
+ "80045": {
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80101": {"Elbert County": "Elbert County", "Arapahoe County": "Arapahoe County"},
+ "80102": {
+ "Weld County": "Weld County",
+ "Adams County": "Adams County",
+ "Elbert County": "Elbert County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80103": {
+ "Adams County": "Adams County",
+ "Elbert County": "Elbert County",
+ "Morgan County": "Morgan County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80104": {"Douglas County": "Douglas County"},
+ "80105": {
+ "Adams County": "Adams County",
+ "Elbert County": "Elbert County",
+ "Lincoln County": "Lincoln County",
+ "Arapahoe County": "Arapahoe County",
+ "Washington County": "Washington County",
+ },
+ "80106": {
+ "Elbert County": "Elbert County",
+ "Douglas County": "Douglas County",
+ "El Paso County": "El Paso County",
+ },
+ "80107": {
+ "Elbert County": "Elbert County",
+ "Douglas County": "Douglas County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80108": {"Douglas County": "Douglas County"},
+ "80109": {"Douglas County": "Douglas County"},
+ "80110": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80111": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80112": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"},
+ "80113": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80116": {"Elbert County": "Elbert County", "Douglas County": "Douglas County"},
+ "80117": {"Elbert County": "Elbert County"},
+ "80118": {
+ "Elbert County": "Elbert County",
+ "Douglas County": "Douglas County",
+ "El Paso County": "El Paso County",
+ },
+ "80120": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"},
+ "80121": {"Arapahoe County": "Arapahoe County"},
+ "80122": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"},
+ "80123": {
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80124": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"},
+ "80125": {
+ "Douglas County": "Douglas County",
+ "Arapahoe County": "Arapahoe County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80126": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"},
+ "80127": {
+ "Denver County": "Denver County",
+ "Douglas County": "Douglas County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80128": {
+ "Douglas County": "Douglas County",
+ "Arapahoe County": "Arapahoe County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80129": {"Douglas County": "Douglas County", "Arapahoe County": "Arapahoe County"},
+ "80130": {"Douglas County": "Douglas County"},
+ "80131": {"Douglas County": "Douglas County"},
+ "80132": {"Douglas County": "Douglas County", "El Paso County": "El Paso County"},
+ "80133": {
+ "Teller County": "Teller County",
+ "Douglas County": "Douglas County",
+ "El Paso County": "El Paso County",
+ },
+ "80134": {
+ "Elbert County": "Elbert County",
+ "Douglas County": "Douglas County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80135": {
+ "Park County": "Park County",
+ "Teller County": "Teller County",
+ "Douglas County": "Douglas County",
+ "El Paso County": "El Paso County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80136": {
+ "Weld County": "Weld County",
+ "Adams County": "Adams County",
+ "Elbert County": "Elbert County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80137": {
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80138": {
+ "Elbert County": "Elbert County",
+ "Douglas County": "Douglas County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80202": {"Denver County": "Denver County"},
+ "80203": {"Denver County": "Denver County"},
+ "80204": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"},
+ "80205": {"Denver County": "Denver County"},
+ "80206": {"Denver County": "Denver County"},
+ "80207": {"Denver County": "Denver County"},
+ "80209": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80210": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80211": {"Denver County": "Denver County"},
+ "80212": {
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80214": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"},
+ "80215": {"Jefferson County": "Jefferson County"},
+ "80216": {"Adams County": "Adams County", "Denver County": "Denver County"},
+ "80218": {"Denver County": "Denver County"},
+ "80219": {
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80220": {
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ },
+ "80221": {"Adams County": "Adams County", "Denver County": "Denver County"},
+ "80222": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80223": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80224": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80226": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"},
+ "80227": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"},
+ "80228": {"Jefferson County": "Jefferson County"},
+ "80229": {"Adams County": "Adams County"},
+ "80230": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80231": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80232": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"},
+ "80233": {"Adams County": "Adams County"},
+ "80234": {"Adams County": "Adams County", "Broomfield County": "Broomfield County"},
+ "80235": {"Denver County": "Denver County", "Jefferson County": "Jefferson County"},
+ "80236": {
+ "Denver County": "Denver County",
+ "Arapahoe County": "Arapahoe County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80237": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80238": {"Adams County": "Adams County", "Denver County": "Denver County"},
+ "80239": {"Adams County": "Adams County", "Denver County": "Denver County"},
+ "80241": {"Adams County": "Adams County"},
+ "80246": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80247": {"Denver County": "Denver County", "Arapahoe County": "Arapahoe County"},
+ "80249": {"Adams County": "Adams County", "Denver County": "Denver County"},
+ "80260": {"Adams County": "Adams County"},
+ "80264": {"Denver County": "Denver County"},
+ "80290": {"Denver County": "Denver County"},
+ "80293": {"Denver County": "Denver County"},
+ "80294": {"Denver County": "Denver County"},
+ "80301": {"Boulder County": "Boulder County"},
+ "80302": {"Boulder County": "Boulder County"},
+ "80303": {"Boulder County": "Boulder County", "Jefferson County": "Jefferson County"},
+ "80304": {"Boulder County": "Boulder County"},
+ "80305": {"Boulder County": "Boulder County"},
+ "80310": {"Boulder County": "Boulder County"},
+ "80401": {"Jefferson County": "Jefferson County"},
+ "80403": {
+ "Gilpin County": "Gilpin County",
+ "Boulder County": "Boulder County",
+ "Jefferson County": "Jefferson County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80419": {"Jefferson County": "Jefferson County"},
+ "80420": {"Lake County": "Lake County", "Park County": "Park County", "Summit County": "Summit County"},
+ "80421": {
+ "Park County": "Park County",
+ "Jefferson County": "Jefferson County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80422": {
+ "Grand County": "Grand County",
+ "Gilpin County": "Gilpin County",
+ "Boulder County": "Boulder County",
+ "Jefferson County": "Jefferson County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80423": {
+ "Eagle County": "Eagle County",
+ "Grand County": "Grand County",
+ "Routt County": "Routt County",
+ "Summit County": "Summit County",
+ },
+ "80424": {"Lake County": "Lake County", "Park County": "Park County", "Summit County": "Summit County"},
+ "80425": {"Douglas County": "Douglas County", "Jefferson County": "Jefferson County"},
+ "80426": {"Eagle County": "Eagle County", "Routt County": "Routt County", "Garfield County": "Garfield County"},
+ "80427": {
+ "Gilpin County": "Gilpin County",
+ "Jefferson County": "Jefferson County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80428": {"Routt County": "Routt County", "Jackson County": "Jackson County"},
+ "80432": {"Park County": "Park County"},
+ "80433": {
+ "Park County": "Park County",
+ "Douglas County": "Douglas County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80434": {"Jackson County": "Jackson County"},
+ "80435": {
+ "Park County": "Park County",
+ "Summit County": "Summit County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80436": {"Grand County": "Grand County", "Clear Creek County": "Clear Creek County"},
+ "80438": {"Grand County": "Grand County", "Clear Creek County": "Clear Creek County"},
+ "80439": {
+ "Park County": "Park County",
+ "Gilpin County": "Gilpin County",
+ "Jefferson County": "Jefferson County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80440": {"Lake County": "Lake County", "Park County": "Park County", "Summit County": "Summit County"},
+ "80442": {"Grand County": "Grand County"},
+ "80443": {
+ "Lake County": "Lake County",
+ "Park County": "Park County",
+ "Eagle County": "Eagle County",
+ "Summit County": "Summit County",
+ },
+ "80444": {
+ "Park County": "Park County",
+ "Summit County": "Summit County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80446": {
+ "Grand County": "Grand County",
+ "Boulder County": "Boulder County",
+ "Jackson County": "Jackson County",
+ },
+ "80447": {
+ "Grand County": "Grand County",
+ "Boulder County": "Boulder County",
+ "Jackson County": "Jackson County",
+ "Larimer County": "Larimer County",
+ },
+ "80448": {
+ "Park County": "Park County",
+ "Summit County": "Summit County",
+ "Jefferson County": "Jefferson County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80449": {
+ "Lake County": "Lake County",
+ "Park County": "Park County",
+ "Chaffee County": "Chaffee County",
+ "Fremont County": "Fremont County",
+ },
+ "80451": {"Grand County": "Grand County"},
+ "80452": {
+ "Park County": "Park County",
+ "Grand County": "Grand County",
+ "Gilpin County": "Gilpin County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80453": {"Jefferson County": "Jefferson County"},
+ "80454": {"Jefferson County": "Jefferson County"},
+ "80455": {"Boulder County": "Boulder County"},
+ "80456": {
+ "Park County": "Park County",
+ "Summit County": "Summit County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80457": {"Jefferson County": "Jefferson County"},
+ "80459": {
+ "Eagle County": "Eagle County",
+ "Grand County": "Grand County",
+ "Routt County": "Routt County",
+ "Summit County": "Summit County",
+ "Jackson County": "Jackson County",
+ },
+ "80461": {
+ "Lake County": "Lake County",
+ "Park County": "Park County",
+ "Eagle County": "Eagle County",
+ "Pitkin County": "Pitkin County",
+ "Summit County": "Summit County",
+ "Chaffee County": "Chaffee County",
+ },
+ "80463": {"Eagle County": "Eagle County", "Grand County": "Grand County", "Routt County": "Routt County"},
+ "80465": {"Jefferson County": "Jefferson County"},
+ "80466": {"Grand County": "Grand County", "Gilpin County": "Gilpin County", "Boulder County": "Boulder County"},
+ "80467": {
+ "Grand County": "Grand County",
+ "Routt County": "Routt County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "80468": {
+ "Grand County": "Grand County",
+ "Summit County": "Summit County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80469": {"Routt County": "Routt County", "Rio Blanco County": "Rio Blanco County"},
+ "80470": {
+ "Park County": "Park County",
+ "Jefferson County": "Jefferson County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80471": {"Gilpin County": "Gilpin County", "Boulder County": "Boulder County"},
+ "80473": {"Grand County": "Grand County", "Jackson County": "Jackson County"},
+ "80475": {"Park County": "Park County"},
+ "80476": {
+ "Grand County": "Grand County",
+ "Summit County": "Summit County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80477": {"Routt County": "Routt County"},
+ "80478": {"Grand County": "Grand County"},
+ "80479": {"Eagle County": "Eagle County", "Routt County": "Routt County"},
+ "80480": {
+ "Grand County": "Grand County",
+ "Routt County": "Routt County",
+ "Jackson County": "Jackson County",
+ "Larimer County": "Larimer County",
+ },
+ "80481": {"Grand County": "Grand County", "Boulder County": "Boulder County"},
+ "80482": {
+ "Grand County": "Grand County",
+ "Gilpin County": "Gilpin County",
+ "Boulder County": "Boulder County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80483": {
+ "Routt County": "Routt County",
+ "Garfield County": "Garfield County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "80487": {"Grand County": "Grand County", "Routt County": "Routt County", "Jackson County": "Jackson County"},
+ "80488": {"Routt County": "Routt County"},
+ "80497": {
+ "Grand County": "Grand County",
+ "Summit County": "Summit County",
+ "Clear Creek County": "Clear Creek County",
+ },
+ "80498": {"Eagle County": "Eagle County", "Grand County": "Grand County", "Summit County": "Summit County"},
+ "80501": {"Weld County": "Weld County", "Boulder County": "Boulder County"},
+ "80503": {"Boulder County": "Boulder County", "Larimer County": "Larimer County"},
+ "80504": {"Weld County": "Weld County", "Boulder County": "Boulder County", "Larimer County": "Larimer County"},
+ "80510": {
+ "Grand County": "Grand County",
+ "Boulder County": "Boulder County",
+ "Larimer County": "Larimer County",
+ },
+ "80511": {"Larimer County": "Larimer County"},
+ "80512": {
+ "Grand County": "Grand County",
+ "Jackson County": "Jackson County",
+ "Larimer County": "Larimer County",
+ },
+ "80513": {"Weld County": "Weld County", "Boulder County": "Boulder County", "Larimer County": "Larimer County"},
+ "80514": {"Weld County": "Weld County", "Broomfield County": "Broomfield County"},
+ "80515": {"Larimer County": "Larimer County"},
+ "80516": {
+ "Weld County": "Weld County",
+ "Adams County": "Adams County",
+ "Boulder County": "Boulder County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80517": {
+ "Grand County": "Grand County",
+ "Boulder County": "Boulder County",
+ "Larimer County": "Larimer County",
+ },
+ "80520": {"Weld County": "Weld County"},
+ "80521": {"Larimer County": "Larimer County"},
+ "80524": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80525": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80526": {"Larimer County": "Larimer County"},
+ "80528": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80530": {"Weld County": "Weld County"},
+ "80532": {"Larimer County": "Larimer County"},
+ "80534": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80535": {"Larimer County": "Larimer County"},
+ "80536": {"Larimer County": "Larimer County"},
+ "80537": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80538": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80540": {"Boulder County": "Boulder County", "Larimer County": "Larimer County"},
+ "80542": {"Weld County": "Weld County"},
+ "80543": {"Weld County": "Weld County"},
+ "80544": {"Boulder County": "Boulder County"},
+ "80545": {"Larimer County": "Larimer County"},
+ "80546": {"Weld County": "Weld County"},
+ "80547": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80549": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80550": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80601": {"Weld County": "Weld County", "Adams County": "Adams County"},
+ "80602": {
+ "Weld County": "Weld County",
+ "Adams County": "Adams County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80603": {
+ "Weld County": "Weld County",
+ "Adams County": "Adams County",
+ "Denver County": "Denver County",
+ "Broomfield County": "Broomfield County",
+ },
+ "80610": {"Weld County": "Weld County"},
+ "80611": {"Weld County": "Weld County", "Morgan County": "Morgan County"},
+ "80612": {"Weld County": "Weld County", "Larimer County": "Larimer County"},
+ "80615": {"Weld County": "Weld County"},
+ "80620": {"Weld County": "Weld County"},
+ "80621": {"Weld County": "Weld County"},
+ "80622": {"Weld County": "Weld County"},
+ "80623": {"Weld County": "Weld County"},
+ "80624": {"Weld County": "Weld County"},
+ "80631": {"Weld County": "Weld County"},
+ "80634": {"Weld County": "Weld County"},
+ "80640": {"Adams County": "Adams County"},
+ "80642": {"Weld County": "Weld County", "Adams County": "Adams County", "Denver County": "Denver County"},
+ "80643": {"Weld County": "Weld County", "Adams County": "Adams County"},
+ "80644": {"Weld County": "Weld County"},
+ "80645": {"Weld County": "Weld County"},
+ "80648": {"Weld County": "Weld County"},
+ "80649": {"Weld County": "Weld County", "Morgan County": "Morgan County"},
+ "80650": {"Weld County": "Weld County"},
+ "80651": {"Weld County": "Weld County"},
+ "80652": {"Weld County": "Weld County", "Adams County": "Adams County", "Morgan County": "Morgan County"},
+ "80653": {"Morgan County": "Morgan County"},
+ "80654": {"Weld County": "Weld County", "Adams County": "Adams County", "Morgan County": "Morgan County"},
+ "80701": {
+ "Weld County": "Weld County",
+ "Adams County": "Adams County",
+ "Morgan County": "Morgan County",
+ "Washington County": "Washington County",
+ },
+ "80705": {"Morgan County": "Morgan County"},
+ "80720": {
+ "Yuma County": "Yuma County",
+ "Logan County": "Logan County",
+ "Morgan County": "Morgan County",
+ "Washington County": "Washington County",
+ },
+ "80721": {"Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County"},
+ "80722": {"Logan County": "Logan County", "Washington County": "Washington County"},
+ "80723": {"Morgan County": "Morgan County", "Washington County": "Washington County"},
+ "80726": {"Logan County": "Logan County", "Sedgwick County": "Sedgwick County"},
+ "80727": {"Yuma County": "Yuma County"},
+ "80728": {
+ "Logan County": "Logan County",
+ "Sedgwick County": "Sedgwick County",
+ "Washington County": "Washington County",
+ },
+ "80729": {"Weld County": "Weld County"},
+ "80731": {
+ "Yuma County": "Yuma County",
+ "Logan County": "Logan County",
+ "Phillips County": "Phillips County",
+ "Sedgwick County": "Sedgwick County",
+ "Washington County": "Washington County",
+ },
+ "80733": {
+ "Logan County": "Logan County",
+ "Morgan County": "Morgan County",
+ "Washington County": "Washington County",
+ },
+ "80734": {
+ "Yuma County": "Yuma County",
+ "Phillips County": "Phillips County",
+ "Sedgwick County": "Sedgwick County",
+ },
+ "80735": {"Yuma County": "Yuma County", "Kit Carson County": "Kit Carson County"},
+ "80736": {"Logan County": "Logan County"},
+ "80737": {"Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County"},
+ "80740": {"Lincoln County": "Lincoln County", "Washington County": "Washington County"},
+ "80741": {
+ "Weld County": "Weld County",
+ "Logan County": "Logan County",
+ "Morgan County": "Morgan County",
+ "Washington County": "Washington County",
+ },
+ "80742": {"Weld County": "Weld County", "Logan County": "Logan County", "Morgan County": "Morgan County"},
+ "80743": {
+ "Yuma County": "Yuma County",
+ "Logan County": "Logan County",
+ "Washington County": "Washington County",
+ },
+ "80744": {"Phillips County": "Phillips County", "Sedgwick County": "Sedgwick County"},
+ "80745": {"Weld County": "Weld County", "Logan County": "Logan County"},
+ "80746": {"Phillips County": "Phillips County"},
+ "80747": {"Logan County": "Logan County"},
+ "80749": {
+ "Logan County": "Logan County",
+ "Phillips County": "Phillips County",
+ "Sedgwick County": "Sedgwick County",
+ },
+ "80750": {
+ "Weld County": "Weld County",
+ "Logan County": "Logan County",
+ "Morgan County": "Morgan County",
+ "Washington County": "Washington County",
+ },
+ "80751": {"Logan County": "Logan County", "Washington County": "Washington County"},
+ "80754": {"Weld County": "Weld County", "Logan County": "Logan County", "Morgan County": "Morgan County"},
+ "80755": {"Yuma County": "Yuma County"},
+ "80757": {
+ "Adams County": "Adams County",
+ "Morgan County": "Morgan County",
+ "Lincoln County": "Lincoln County",
+ "Arapahoe County": "Arapahoe County",
+ "Washington County": "Washington County",
+ },
+ "80758": {"Yuma County": "Yuma County", "Phillips County": "Phillips County"},
+ "80759": {
+ "Yuma County": "Yuma County",
+ "Logan County": "Logan County",
+ "Phillips County": "Phillips County",
+ "Washington County": "Washington County",
+ },
+ "80801": {"Washington County": "Washington County"},
+ "80802": {
+ "Kiowa County": "Kiowa County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ },
+ "80804": {
+ "Lincoln County": "Lincoln County",
+ "Kit Carson County": "Kit Carson County",
+ "Washington County": "Washington County",
+ },
+ "80805": {
+ "Yuma County": "Yuma County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ },
+ "80807": {
+ "Yuma County": "Yuma County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ },
+ "80808": {"Elbert County": "Elbert County", "El Paso County": "El Paso County"},
+ "80809": {"Teller County": "Teller County", "El Paso County": "El Paso County"},
+ "80810": {
+ "Kiowa County": "Kiowa County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ },
+ "80812": {
+ "Yuma County": "Yuma County",
+ "Kit Carson County": "Kit Carson County",
+ "Washington County": "Washington County",
+ },
+ "80813": {
+ "Teller County": "Teller County",
+ "El Paso County": "El Paso County",
+ "Fremont County": "Fremont County",
+ },
+ "80814": {"Teller County": "Teller County"},
+ "80815": {
+ "Lincoln County": "Lincoln County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ "Washington County": "Washington County",
+ },
+ "80816": {"Park County": "Park County", "Teller County": "Teller County", "Fremont County": "Fremont County"},
+ "80817": {"Pueblo County": "Pueblo County", "El Paso County": "El Paso County"},
+ "80818": {"Lincoln County": "Lincoln County", "Washington County": "Washington County"},
+ "80819": {"Teller County": "Teller County", "El Paso County": "El Paso County"},
+ "80820": {"Park County": "Park County", "Teller County": "Teller County", "Fremont County": "Fremont County"},
+ "80821": {
+ "Elbert County": "Elbert County",
+ "Lincoln County": "Lincoln County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ },
+ "80822": {
+ "Yuma County": "Yuma County",
+ "Kit Carson County": "Kit Carson County",
+ "Washington County": "Washington County",
+ },
+ "80823": {
+ "Kiowa County": "Kiowa County",
+ "Crowley County": "Crowley County",
+ "Lincoln County": "Lincoln County",
+ "Cheyenne County": "Cheyenne County",
+ },
+ "80824": {"Yuma County": "Yuma County", "Kit Carson County": "Kit Carson County"},
+ "80825": {
+ "Kiowa County": "Kiowa County",
+ "Lincoln County": "Lincoln County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ },
+ "80827": {
+ "Park County": "Park County",
+ "Teller County": "Teller County",
+ "Douglas County": "Douglas County",
+ "Jefferson County": "Jefferson County",
+ },
+ "80828": {
+ "Elbert County": "Elbert County",
+ "Lincoln County": "Lincoln County",
+ "Arapahoe County": "Arapahoe County",
+ "Washington County": "Washington County",
+ },
+ "80829": {"Teller County": "Teller County", "El Paso County": "El Paso County"},
+ "80830": {
+ "Elbert County": "Elbert County",
+ "El Paso County": "El Paso County",
+ "Lincoln County": "Lincoln County",
+ },
+ "80831": {"Elbert County": "Elbert County", "El Paso County": "El Paso County"},
+ "80832": {
+ "Elbert County": "Elbert County",
+ "El Paso County": "El Paso County",
+ "Lincoln County": "Lincoln County",
+ },
+ "80833": {
+ "Elbert County": "Elbert County",
+ "Pueblo County": "Pueblo County",
+ "Crowley County": "Crowley County",
+ "El Paso County": "El Paso County",
+ "Lincoln County": "Lincoln County",
+ },
+ "80834": {
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ "Washington County": "Washington County",
+ },
+ "80835": {"Elbert County": "Elbert County", "El Paso County": "El Paso County"},
+ "80836": {
+ "Yuma County": "Yuma County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ },
+ "80840": {"El Paso County": "El Paso County"},
+ "80860": {
+ "Teller County": "Teller County",
+ "El Paso County": "El Paso County",
+ "Fremont County": "Fremont County",
+ },
+ "80861": {
+ "Yuma County": "Yuma County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ "Washington County": "Washington County",
+ },
+ "80862": {
+ "Lincoln County": "Lincoln County",
+ "Cheyenne County": "Cheyenne County",
+ "Kit Carson County": "Kit Carson County",
+ },
+ "80863": {
+ "Teller County": "Teller County",
+ "Douglas County": "Douglas County",
+ "El Paso County": "El Paso County",
+ },
+ "80864": {
+ "Pueblo County": "Pueblo County",
+ "Crowley County": "Crowley County",
+ "El Paso County": "El Paso County",
+ "Lincoln County": "Lincoln County",
+ },
+ "80902": {"El Paso County": "El Paso County"},
+ "80903": {"El Paso County": "El Paso County"},
+ "80904": {"El Paso County": "El Paso County"},
+ "80905": {"El Paso County": "El Paso County"},
+ "80906": {"Teller County": "Teller County", "El Paso County": "El Paso County"},
+ "80907": {"El Paso County": "El Paso County"},
+ "80908": {
+ "Elbert County": "Elbert County",
+ "Douglas County": "Douglas County",
+ "El Paso County": "El Paso County",
+ },
+ "80909": {"El Paso County": "El Paso County"},
+ "80910": {"El Paso County": "El Paso County"},
+ "80911": {"El Paso County": "El Paso County"},
+ "80913": {"El Paso County": "El Paso County"},
+ "80914": {"El Paso County": "El Paso County"},
+ "80915": {"El Paso County": "El Paso County"},
+ "80916": {"El Paso County": "El Paso County"},
+ "80917": {"El Paso County": "El Paso County"},
+ "80918": {"El Paso County": "El Paso County"},
+ "80919": {"El Paso County": "El Paso County"},
+ "80920": {"El Paso County": "El Paso County"},
+ "80921": {"Teller County": "Teller County", "El Paso County": "El Paso County"},
+ "80922": {"El Paso County": "El Paso County"},
+ "80923": {"El Paso County": "El Paso County"},
+ "80924": {"El Paso County": "El Paso County"},
+ "80925": {"El Paso County": "El Paso County"},
+ "80926": {
+ "Teller County": "Teller County",
+ "El Paso County": "El Paso County",
+ "Fremont County": "Fremont County",
+ },
+ "80927": {"El Paso County": "El Paso County"},
+ "80928": {"Pueblo County": "Pueblo County", "El Paso County": "El Paso County"},
+ "80929": {"El Paso County": "El Paso County"},
+ "80930": {"El Paso County": "El Paso County"},
+ "80938": {"El Paso County": "El Paso County"},
+ "80939": {"El Paso County": "El Paso County"},
+ "80951": {"El Paso County": "El Paso County"},
+ "81001": {"Pueblo County": "Pueblo County"},
+ "81003": {"Pueblo County": "Pueblo County"},
+ "81004": {"Pueblo County": "Pueblo County"},
+ "81005": {
+ "Custer County": "Custer County",
+ "Pueblo County": "Pueblo County",
+ "Fremont County": "Fremont County",
+ },
+ "81006": {"Pueblo County": "Pueblo County"},
+ "81007": {"Pueblo County": "Pueblo County", "Fremont County": "Fremont County"},
+ "81008": {"Pueblo County": "Pueblo County", "El Paso County": "El Paso County"},
+ "81019": {"Pueblo County": "Pueblo County"},
+ "81020": {
+ "Pueblo County": "Pueblo County",
+ "Huerfano County": "Huerfano County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81021": {
+ "Bent County": "Bent County",
+ "Kiowa County": "Kiowa County",
+ "Otero County": "Otero County",
+ "Crowley County": "Crowley County",
+ "Lincoln County": "Lincoln County",
+ },
+ "81022": {"Pueblo County": "Pueblo County", "Huerfano County": "Huerfano County"},
+ "81023": {"Custer County": "Custer County", "Pueblo County": "Pueblo County"},
+ "81024": {"Las Animas County": "Las Animas County"},
+ "81025": {
+ "Pueblo County": "Pueblo County",
+ "Crowley County": "Crowley County",
+ "El Paso County": "El Paso County",
+ "Lincoln County": "Lincoln County",
+ },
+ "81027": {"Las Animas County": "Las Animas County"},
+ "81029": {"Baca County": "Baca County"},
+ "81030": {"Otero County": "Otero County"},
+ "81033": {"Crowley County": "Crowley County"},
+ "81036": {
+ "Bent County": "Bent County",
+ "Kiowa County": "Kiowa County",
+ "Prowers County": "Prowers County",
+ "Cheyenne County": "Cheyenne County",
+ },
+ "81038": {"Bent County": "Bent County"},
+ "81039": {
+ "Otero County": "Otero County",
+ "Pueblo County": "Pueblo County",
+ "Crowley County": "Crowley County",
+ "Huerfano County": "Huerfano County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81040": {
+ "Custer County": "Custer County",
+ "Pueblo County": "Pueblo County",
+ "Alamosa County": "Alamosa County",
+ "Costilla County": "Costilla County",
+ "Huerfano County": "Huerfano County",
+ "Saguache County": "Saguache County",
+ },
+ "81041": {"Baca County": "Baca County", "Prowers County": "Prowers County"},
+ "81043": {"Prowers County": "Prowers County"},
+ "81044": {"Baca County": "Baca County", "Bent County": "Bent County"},
+ "81045": {
+ "Kiowa County": "Kiowa County",
+ "Lincoln County": "Lincoln County",
+ "Cheyenne County": "Cheyenne County",
+ },
+ "81047": {"Baca County": "Baca County", "Kiowa County": "Kiowa County", "Prowers County": "Prowers County"},
+ "81049": {
+ "Baca County": "Baca County",
+ "Bent County": "Bent County",
+ "Otero County": "Otero County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81050": {
+ "Bent County": "Bent County",
+ "Kiowa County": "Kiowa County",
+ "Otero County": "Otero County",
+ "Crowley County": "Crowley County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81052": {
+ "Baca County": "Baca County",
+ "Bent County": "Bent County",
+ "Kiowa County": "Kiowa County",
+ "Prowers County": "Prowers County",
+ },
+ "81054": {
+ "Baca County": "Baca County",
+ "Bent County": "Bent County",
+ "Kiowa County": "Kiowa County",
+ "Otero County": "Otero County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81055": {
+ "Costilla County": "Costilla County",
+ "Huerfano County": "Huerfano County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81057": {"Bent County": "Bent County"},
+ "81058": {"Otero County": "Otero County", "Crowley County": "Crowley County"},
+ "81059": {
+ "Otero County": "Otero County",
+ "Pueblo County": "Pueblo County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81062": {
+ "Otero County": "Otero County",
+ "Pueblo County": "Pueblo County",
+ "Crowley County": "Crowley County",
+ "El Paso County": "El Paso County",
+ "Lincoln County": "Lincoln County",
+ },
+ "81063": {
+ "Otero County": "Otero County",
+ "Crowley County": "Crowley County",
+ "Lincoln County": "Lincoln County",
+ },
+ "81064": {"Baca County": "Baca County", "Las Animas County": "Las Animas County"},
+ "81067": {
+ "Otero County": "Otero County",
+ "Pueblo County": "Pueblo County",
+ "Crowley County": "Crowley County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81069": {
+ "Custer County": "Custer County",
+ "Pueblo County": "Pueblo County",
+ "Huerfano County": "Huerfano County",
+ },
+ "81071": {
+ "Kiowa County": "Kiowa County",
+ "Prowers County": "Prowers County",
+ "Cheyenne County": "Cheyenne County",
+ },
+ "81073": {
+ "Baca County": "Baca County",
+ "Bent County": "Bent County",
+ "Prowers County": "Prowers County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81076": {
+ "Kiowa County": "Kiowa County",
+ "Otero County": "Otero County",
+ "Crowley County": "Crowley County",
+ "Lincoln County": "Lincoln County",
+ },
+ "81077": {"Otero County": "Otero County"},
+ "81081": {"Las Animas County": "Las Animas County"},
+ "81082": {"Las Animas County": "Las Animas County"},
+ "81084": {"Baca County": "Baca County", "Prowers County": "Prowers County"},
+ "81087": {"Baca County": "Baca County"},
+ "81089": {
+ "Pueblo County": "Pueblo County",
+ "Huerfano County": "Huerfano County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81090": {"Baca County": "Baca County", "Prowers County": "Prowers County"},
+ "81091": {
+ "Costilla County": "Costilla County",
+ "Huerfano County": "Huerfano County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81092": {"Bent County": "Bent County", "Kiowa County": "Kiowa County", "Prowers County": "Prowers County"},
+ "81101": {
+ "Alamosa County": "Alamosa County",
+ "Conejos County": "Conejos County",
+ "Costilla County": "Costilla County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81120": {
+ "Conejos County": "Conejos County",
+ "Costilla County": "Costilla County",
+ "Archuleta County": "Archuleta County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81121": {"La Plata County": "La Plata County", "Archuleta County": "Archuleta County"},
+ "81122": {
+ "Hinsdale County": "Hinsdale County",
+ "La Plata County": "La Plata County",
+ "San Juan County": "San Juan County",
+ "Archuleta County": "Archuleta County",
+ },
+ "81123": {
+ "Alamosa County": "Alamosa County",
+ "Conejos County": "Conejos County",
+ "Costilla County": "Costilla County",
+ "Huerfano County": "Huerfano County",
+ },
+ "81124": {"Conejos County": "Conejos County"},
+ "81125": {
+ "Alamosa County": "Alamosa County",
+ "Saguache County": "Saguache County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81126": {"Costilla County": "Costilla County"},
+ "81128": {"Conejos County": "Conejos County", "Archuleta County": "Archuleta County"},
+ "81129": {"Conejos County": "Conejos County"},
+ "81130": {
+ "Mineral County": "Mineral County",
+ "Hinsdale County": "Hinsdale County",
+ "Saguache County": "Saguache County",
+ "San Juan County": "San Juan County",
+ "Archuleta County": "Archuleta County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81131": {
+ "Custer County": "Custer County",
+ "Alamosa County": "Alamosa County",
+ "Huerfano County": "Huerfano County",
+ "Saguache County": "Saguache County",
+ },
+ "81132": {
+ "Conejos County": "Conejos County",
+ "Mineral County": "Mineral County",
+ "Saguache County": "Saguache County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81133": {"Costilla County": "Costilla County", "Huerfano County": "Huerfano County"},
+ "81136": {"Alamosa County": "Alamosa County", "Saguache County": "Saguache County"},
+ "81137": {"La Plata County": "La Plata County", "Archuleta County": "Archuleta County"},
+ "81138": {"Costilla County": "Costilla County"},
+ "81140": {
+ "Alamosa County": "Alamosa County",
+ "Conejos County": "Conejos County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81141": {"Conejos County": "Conejos County", "Costilla County": "Costilla County"},
+ "81143": {"Custer County": "Custer County", "Saguache County": "Saguache County"},
+ "81144": {
+ "Alamosa County": "Alamosa County",
+ "Conejos County": "Conejos County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81146": {
+ "Alamosa County": "Alamosa County",
+ "Costilla County": "Costilla County",
+ "Huerfano County": "Huerfano County",
+ "Saguache County": "Saguache County",
+ },
+ "81147": {
+ "Conejos County": "Conejos County",
+ "Mineral County": "Mineral County",
+ "Hinsdale County": "Hinsdale County",
+ "La Plata County": "La Plata County",
+ "San Juan County": "San Juan County",
+ "Archuleta County": "Archuleta County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81148": {"Conejos County": "Conejos County"},
+ "81149": {"Mineral County": "Mineral County", "Saguache County": "Saguache County"},
+ "81151": {
+ "Alamosa County": "Alamosa County",
+ "Conejos County": "Conejos County",
+ "Costilla County": "Costilla County",
+ },
+ "81152": {
+ "Conejos County": "Conejos County",
+ "Costilla County": "Costilla County",
+ "Huerfano County": "Huerfano County",
+ "Las Animas County": "Las Animas County",
+ },
+ "81154": {
+ "Conejos County": "Conejos County",
+ "Mineral County": "Mineral County",
+ "Archuleta County": "Archuleta County",
+ "Rio Grande County": "Rio Grande County",
+ },
+ "81155": {
+ "Custer County": "Custer County",
+ "Chaffee County": "Chaffee County",
+ "Fremont County": "Fremont County",
+ "Saguache County": "Saguache County",
+ },
+ "81201": {
+ "Park County": "Park County",
+ "Chaffee County": "Chaffee County",
+ "Fremont County": "Fremont County",
+ "Gunnison County": "Gunnison County",
+ "Saguache County": "Saguache County",
+ },
+ "81210": {
+ "Pitkin County": "Pitkin County",
+ "Chaffee County": "Chaffee County",
+ "Gunnison County": "Gunnison County",
+ },
+ "81211": {
+ "Lake County": "Lake County",
+ "Park County": "Park County",
+ "Pitkin County": "Pitkin County",
+ "Chaffee County": "Chaffee County",
+ "Gunnison County": "Gunnison County",
+ },
+ "81212": {
+ "Park County": "Park County",
+ "Custer County": "Custer County",
+ "Teller County": "Teller County",
+ "Fremont County": "Fremont County",
+ },
+ "81220": {
+ "Ouray County": "Ouray County",
+ "Gunnison County": "Gunnison County",
+ "Hinsdale County": "Hinsdale County",
+ "Montrose County": "Montrose County",
+ },
+ "81221": {"Fremont County": "Fremont County"},
+ "81222": {"Fremont County": "Fremont County", "Saguache County": "Saguache County"},
+ "81223": {
+ "Custer County": "Custer County",
+ "Fremont County": "Fremont County",
+ "Saguache County": "Saguache County",
+ },
+ "81224": {"Pitkin County": "Pitkin County", "Gunnison County": "Gunnison County"},
+ "81225": {"Pitkin County": "Pitkin County", "Gunnison County": "Gunnison County"},
+ "81226": {"Custer County": "Custer County", "Fremont County": "Fremont County"},
+ "81227": {"Chaffee County": "Chaffee County"},
+ "81230": {
+ "Delta County": "Delta County",
+ "Mineral County": "Mineral County",
+ "Gunnison County": "Gunnison County",
+ "Hinsdale County": "Hinsdale County",
+ "Montrose County": "Montrose County",
+ "Saguache County": "Saguache County",
+ },
+ "81231": {"Gunnison County": "Gunnison County"},
+ "81232": {"Custer County": "Custer County", "Fremont County": "Fremont County"},
+ "81233": {"Fremont County": "Fremont County", "Saguache County": "Saguache County"},
+ "81235": {
+ "Ouray County": "Ouray County",
+ "Mineral County": "Mineral County",
+ "Gunnison County": "Gunnison County",
+ "Hinsdale County": "Hinsdale County",
+ "Saguache County": "Saguache County",
+ "San Juan County": "San Juan County",
+ },
+ "81236": {"Chaffee County": "Chaffee County", "Gunnison County": "Gunnison County"},
+ "81237": {"Gunnison County": "Gunnison County"},
+ "81239": {"Gunnison County": "Gunnison County", "Saguache County": "Saguache County"},
+ "81240": {
+ "Pueblo County": "Pueblo County",
+ "Teller County": "Teller County",
+ "El Paso County": "El Paso County",
+ "Fremont County": "Fremont County",
+ },
+ "81241": {"Gunnison County": "Gunnison County"},
+ "81242": {"Chaffee County": "Chaffee County"},
+ "81243": {
+ "Gunnison County": "Gunnison County",
+ "Hinsdale County": "Hinsdale County",
+ "Saguache County": "Saguache County",
+ },
+ "81244": {"Fremont County": "Fremont County"},
+ "81248": {
+ "Chaffee County": "Chaffee County",
+ "Gunnison County": "Gunnison County",
+ "Saguache County": "Saguache County",
+ },
+ "81251": {"Lake County": "Lake County", "Pitkin County": "Pitkin County", "Chaffee County": "Chaffee County"},
+ "81252": {
+ "Custer County": "Custer County",
+ "Fremont County": "Fremont County",
+ "Huerfano County": "Huerfano County",
+ "Saguache County": "Saguache County",
+ },
+ "81253": {
+ "Custer County": "Custer County",
+ "Pueblo County": "Pueblo County",
+ "Fremont County": "Fremont County",
+ },
+ "81301": {
+ "Dolores County": "Dolores County",
+ "La Plata County": "La Plata County",
+ "San Juan County": "San Juan County",
+ "Montezuma County": "Montezuma County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81303": {"La Plata County": "La Plata County"},
+ "81320": {
+ "Dolores County": "Dolores County",
+ "Montezuma County": "Montezuma County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81321": {"Montezuma County": "Montezuma County"},
+ "81323": {
+ "Dolores County": "Dolores County",
+ "La Plata County": "La Plata County",
+ "San Juan County": "San Juan County",
+ "Montezuma County": "Montezuma County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81324": {
+ "Dolores County": "Dolores County",
+ "Montezuma County": "Montezuma County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81325": {
+ "Dolores County": "Dolores County",
+ "Montrose County": "Montrose County",
+ "Montezuma County": "Montezuma County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81326": {"La Plata County": "La Plata County", "Montezuma County": "Montezuma County"},
+ "81327": {"Montezuma County": "Montezuma County"},
+ "81328": {"La Plata County": "La Plata County", "Montezuma County": "Montezuma County"},
+ "81330": {"Montezuma County": "Montezuma County"},
+ "81331": {"Dolores County": "Dolores County", "Montezuma County": "Montezuma County"},
+ "81332": {
+ "Dolores County": "Dolores County",
+ "La Plata County": "La Plata County",
+ "San Juan County": "San Juan County",
+ "Montezuma County": "Montezuma County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81334": {"La Plata County": "La Plata County", "Montezuma County": "Montezuma County"},
+ "81335": {"Montezuma County": "Montezuma County"},
+ "81401": {
+ "Delta County": "Delta County",
+ "Ouray County": "Ouray County",
+ "Gunnison County": "Gunnison County",
+ "Montrose County": "Montrose County",
+ },
+ "81403": {
+ "Ouray County": "Ouray County",
+ "Gunnison County": "Gunnison County",
+ "Montrose County": "Montrose County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81410": {"Delta County": "Delta County"},
+ "81411": {"Montrose County": "Montrose County", "San Miguel County": "San Miguel County"},
+ "81413": {"Mesa County": "Mesa County", "Delta County": "Delta County"},
+ "81415": {
+ "Delta County": "Delta County",
+ "Gunnison County": "Gunnison County",
+ "Montrose County": "Montrose County",
+ },
+ "81416": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Montrose County": "Montrose County"},
+ "81418": {"Delta County": "Delta County"},
+ "81419": {"Mesa County": "Mesa County", "Delta County": "Delta County"},
+ "81422": {
+ "Mesa County": "Mesa County",
+ "Montrose County": "Montrose County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81423": {
+ "Dolores County": "Dolores County",
+ "Montrose County": "Montrose County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81424": {"Montrose County": "Montrose County"},
+ "81425": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Montrose County": "Montrose County"},
+ "81426": {
+ "Dolores County": "Dolores County",
+ "San Juan County": "San Juan County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81427": {
+ "Ouray County": "Ouray County",
+ "Hinsdale County": "Hinsdale County",
+ "San Juan County": "San Juan County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81428": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Gunnison County": "Gunnison County"},
+ "81429": {"Montrose County": "Montrose County", "San Miguel County": "San Miguel County"},
+ "81430": {
+ "Ouray County": "Ouray County",
+ "Dolores County": "Dolores County",
+ "Montrose County": "Montrose County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81431": {"Montrose County": "Montrose County", "San Miguel County": "San Miguel County"},
+ "81432": {
+ "Ouray County": "Ouray County",
+ "Gunnison County": "Gunnison County",
+ "Hinsdale County": "Hinsdale County",
+ "Montrose County": "Montrose County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81433": {
+ "Ouray County": "Ouray County",
+ "Hinsdale County": "Hinsdale County",
+ "La Plata County": "La Plata County",
+ "San Juan County": "San Juan County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81434": {
+ "Mesa County": "Mesa County",
+ "Delta County": "Delta County",
+ "Pitkin County": "Pitkin County",
+ "Gunnison County": "Gunnison County",
+ },
+ "81435": {
+ "Ouray County": "Ouray County",
+ "Dolores County": "Dolores County",
+ "San Juan County": "San Juan County",
+ "San Miguel County": "San Miguel County",
+ },
+ "81501": {"Mesa County": "Mesa County"},
+ "81503": {"Mesa County": "Mesa County"},
+ "81504": {"Mesa County": "Mesa County"},
+ "81505": {"Mesa County": "Mesa County"},
+ "81506": {"Mesa County": "Mesa County"},
+ "81507": {"Mesa County": "Mesa County"},
+ "81520": {"Mesa County": "Mesa County"},
+ "81521": {"Mesa County": "Mesa County"},
+ "81522": {"Mesa County": "Mesa County", "Montrose County": "Montrose County"},
+ "81523": {"Mesa County": "Mesa County"},
+ "81524": {"Mesa County": "Mesa County", "Garfield County": "Garfield County"},
+ "81525": {"Mesa County": "Mesa County", "Garfield County": "Garfield County"},
+ "81526": {"Mesa County": "Mesa County"},
+ "81527": {"Mesa County": "Mesa County", "Delta County": "Delta County", "Montrose County": "Montrose County"},
+ "81601": {
+ "Eagle County": "Eagle County",
+ "Pitkin County": "Pitkin County",
+ "Garfield County": "Garfield County",
+ },
+ "81610": {"Moffat County": "Moffat County", "Rio Blanco County": "Rio Blanco County"},
+ "81611": {
+ "Lake County": "Lake County",
+ "Pitkin County": "Pitkin County",
+ "Chaffee County": "Chaffee County",
+ "Gunnison County": "Gunnison County",
+ },
+ "81612": {"Pitkin County": "Pitkin County"},
+ "81615": {"Pitkin County": "Pitkin County"},
+ "81620": {"Eagle County": "Eagle County"},
+ "81621": {
+ "Eagle County": "Eagle County",
+ "Pitkin County": "Pitkin County",
+ "Garfield County": "Garfield County",
+ },
+ "81623": {
+ "Mesa County": "Mesa County",
+ "Eagle County": "Eagle County",
+ "Pitkin County": "Pitkin County",
+ "Garfield County": "Garfield County",
+ "Gunnison County": "Gunnison County",
+ },
+ "81624": {
+ "Mesa County": "Mesa County",
+ "Delta County": "Delta County",
+ "Pitkin County": "Pitkin County",
+ "Garfield County": "Garfield County",
+ "Gunnison County": "Gunnison County",
+ },
+ "81625": {"Routt County": "Routt County", "Moffat County": "Moffat County"},
+ "81630": {
+ "Mesa County": "Mesa County",
+ "Garfield County": "Garfield County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81631": {"Eagle County": "Eagle County"},
+ "81632": {"Eagle County": "Eagle County"},
+ "81633": {"Moffat County": "Moffat County", "Rio Blanco County": "Rio Blanco County"},
+ "81635": {
+ "Mesa County": "Mesa County",
+ "Garfield County": "Garfield County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81637": {
+ "Eagle County": "Eagle County",
+ "Routt County": "Routt County",
+ "Garfield County": "Garfield County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81638": {
+ "Routt County": "Routt County",
+ "Moffat County": "Moffat County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81639": {
+ "Routt County": "Routt County",
+ "Moffat County": "Moffat County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81640": {"Moffat County": "Moffat County", "Rio Blanco County": "Rio Blanco County"},
+ "81641": {
+ "Routt County": "Routt County",
+ "Moffat County": "Moffat County",
+ "Garfield County": "Garfield County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81642": {"Lake County": "Lake County", "Eagle County": "Eagle County", "Pitkin County": "Pitkin County"},
+ "81643": {"Mesa County": "Mesa County", "Delta County": "Delta County"},
+ "81645": {
+ "Lake County": "Lake County",
+ "Eagle County": "Eagle County",
+ "Pitkin County": "Pitkin County",
+ "Summit County": "Summit County",
+ },
+ "81646": {"Mesa County": "Mesa County", "Delta County": "Delta County"},
+ "81647": {
+ "Mesa County": "Mesa County",
+ "Pitkin County": "Pitkin County",
+ "Garfield County": "Garfield County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81648": {
+ "Moffat County": "Moffat County",
+ "Garfield County": "Garfield County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81649": {"Eagle County": "Eagle County", "Summit County": "Summit County"},
+ "81650": {
+ "Mesa County": "Mesa County",
+ "Garfield County": "Garfield County",
+ "Rio Blanco County": "Rio Blanco County",
+ },
+ "81652": {"Mesa County": "Mesa County", "Garfield County": "Garfield County"},
+ "81653": {"Routt County": "Routt County", "Moffat County": "Moffat County"},
+ "81654": {"Pitkin County": "Pitkin County", "Gunnison County": "Gunnison County"},
+ "81655": {"Eagle County": "Eagle County", "Summit County": "Summit County"},
+ "81656": {"Pitkin County": "Pitkin County"},
+ "81657": {"Eagle County": "Eagle County", "Summit County": "Summit County"},
+ "82063": {"Jackson County": "Jackson County", "Larimer County": "Larimer County"},
+ }
+
+ category_benefits = {
+ "cash": {
+ "benefits": {
+ "oap": {
+ "_label": "cashAssistanceBenefits.oap",
+ "_default_message": "State cash assistance for individuals 60 years of age or older (Old Age Pension/OAP)",
+ },
+ "ssi": {
+ "_label": "cashAssistanceBenefits.ssi",
+ "_default_message": "Federal cash assistance for individuals who are disabled, blind, or 65 years of age or older (Supplemental Security Income/SSI)",
+ },
+ "ssdi": {
+ "_label": "cashAssistanceBenefits.ssdi",
+ "_default_message": "Social security benefit for people with disabilities (Social Security Disability Insurance/SSDI)",
+ },
+ "tanf": {
+ "_label": "cashAssistanceBenefits.tanf",
+ "_default_message": "Cash assistance and work support (Temporary Assistance for Needy Families (TANF/Colorado Works))",
+ },
+ "andcs": {
+ "_label": "cashAssistanceBenefits.andcs",
+ "_default_message": "State cash assistance for individuals who are disabled and receiving SSI (Aid to the Needy Disabled - Colorado Supplement/AND-CS)",
+ },
+ },
+ "category_name": "Cash Assistance",
+ },
+ "childCare": {
+ "benefits": {
+ "upk": {
+ "_label": "childCareBenefits.univpresc",
+ "_default_message": "Free preschool (Universal Preschool Colorado)",
+ },
+ "pell": {
+ "_label": "childCareBenefits.pell",
+ "_default_message": "Federal grant to finance college costs (Pell Grant)",
+ },
+ "cccap": {
+ "_label": "childCareBenefits.cccap",
+ "_default_message": "Help with child care costs (Colorado Child Care Assistance Program/CCCAP)",
+ },
+ "mydenver": {
+ "_label": "childCareBenefits.mydenver",
+ "_default_message": "Reduced-cost youth programs (MY Denver Card)",
+ },
+ "coheadstart": {
+ "_label": "childCareBenefits.coheadstart",
+ "_default_message": "Free early child care and preschool (Colorado Head Start)",
+ },
+ "denverpresc": {
+ "_label": "childCareBenefits.denverpresc",
+ "_default_message": "Tuition credits for Denver preschoolers (Denver Preschool Program)",
+ },
+ },
+ "category_name": "Child Care, Youth, and Education",
+ },
+ "healthCare": {
+ "benefits": {
+ "dentallowincseniors": {
+ "_label": "healthCareBenefits.dentallowincseniors",
+ "_default_message": "Low-cost dental care for people 60 years of age or older (Colorado Dental Health Program for Low-Income Seniors)",
+ }
+ },
+ "category_name": "Health Care",
+ },
+ "taxCredits": {
+ "benefits": {
+ "ctc": {
+ "_label": "taxCreditBenefits.ctc",
+ "_default_message": "Federal tax credit: child tax credit (Child Tax Credit)",
+ },
+ "eitc": {
+ "_label": "taxCreditBenefits.eitc",
+ "_default_message": "Federal tax credit: earned income (Earned Income Tax Credit)",
+ },
+ "coctc": {
+ "_label": "taxCreditBenefits.coctc",
+ "_default_message": "State tax credit: Colorado child tax credit",
+ },
+ "coeitc": {
+ "_label": "taxCreditBenefits.coeitc",
+ "_default_message": "State tax credit: earned income (Colorado Earned Income Tax Credit/Expanded Earned Income Tax Credit)",
+ },
+ },
+ "category_name": "Tax Credits",
+ },
+ "transportation": {
+ "benefits": {
+ "rtdlive": {
+ "_label": "transportationBenefits.rtdlive",
+ "_default_message": "Discounted RTD fares (RTD LiVE)",
+ }
+ },
+ "category_name": "Transportation",
+ },
+ "foodAndNutrition": {
+ "benefits": {
+ "ede": {
+ "_label": "foodAndNutritionBenefits.ede",
+ "_default_message": "Food support for people 60 years of age or older (Everyday Eats)",
+ },
+ "wic": {
+ "_label": "foodAndNutritionBenefits.wic",
+ "_default_message": "Food and breastfeeding assistance (Special Supplemental Nutrition Program for Women, Infants, and Children/WIC)",
+ },
+ "nslp": {
+ "_label": "foodAndNutritionBenefits.nslp",
+ "_default_message": "Free school meals (National School Lunch Program)",
+ },
+ "snap": {
+ "_label": "foodAndNutritionBenefits.snap",
+ "_default_message": "Food assistance (Supplemental Nutrition Assistance Program/SNAP)",
+ },
+ },
+ "category_name": "Food and Nutrition",
+ },
+ "housingAndUtilities": {
+ "benefits": {
+ "acp": {
+ "_label": "housingAndUtilities.acp",
+ "_default_message": "Home internet discount (Affordable Connectivity Program)",
+ },
+ "ubp": {
+ "_label": "housingAndUtilities.ubp",
+ "_default_message": "Help paying utility bills (Colorado Utility Bill Help Program)",
+ },
+ "leap": {
+ "_label": "housingAndUtilities.leap",
+ "_default_message": "Help with winter heating bills (Low-Income Energy Assistance Program/LEAP)",
+ },
+ "cowap": {
+ "_label": "housingAndUtilities.cowap",
+ "_default_message": "Free home energy upgrades (Weatherization Assistance Program)",
+ },
+ "lifeline": {
+ "_label": "housingAndUtilities.lifeline",
+ "_default_message": "Phone or internet discount (Lifeline Phone/Internet Service)",
+ },
+ "coPropTaxRentHeatCreditRebate": {
+ "_label": "cashAssistanceBenefits.coPropTaxRentHeatCreditRebate",
+ "_default_message": "Cash to pay property tax, rent, and heat bills (Colorado Property Tax/Rent/Heat Credit Rebate)",
+ },
+ },
+ "category_name": "Housing and Utilities",
+ },
+ }
def handle(self, *args, **options):
# Save acute_condition_options to database
@@ -78,4 +2625,4 @@ def handle(self, *args, **options):
Configuration.objects.create(name="counties_by_zipcode", data=self.counties_by_zipcode, active=True)
# Save category_benefits to database
- Configuration.objects.create(name="category_benefits", data=self.category_benefits, active=True)
\ No newline at end of file
+ Configuration.objects.create(name="category_benefits", data=self.category_benefits, active=True)
diff --git a/configuration/models.py b/configuration/models.py
index 381fc791..9a78753f 100644
--- a/configuration/models.py
+++ b/configuration/models.py
@@ -1,9 +1,10 @@
from django.db import models
+
class Configuration(models.Model):
name = models.CharField(max_length=320)
data = models.JSONField(default=dict)
active = models.BooleanField()
-
+
def __str__(self):
- return self.name
\ No newline at end of file
+ return self.name
diff --git a/configuration/serializers.py b/configuration/serializers.py
index 8e767be6..6fedd161 100644
--- a/configuration/serializers.py
+++ b/configuration/serializers.py
@@ -1,9 +1,10 @@
from configuration.models import Configuration
from rest_framework import serializers
+
class ConfigurationSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Configuration
- fields = '__all__'
\ No newline at end of file
+ fields = "__all__"
diff --git a/configuration/urls.py b/configuration/urls.py
index 0e786d1a..b97f2c6a 100644
--- a/configuration/urls.py
+++ b/configuration/urls.py
@@ -3,8 +3,8 @@
from . import views
router = routers.DefaultRouter()
-router.register(r'configuration', views.ConfigurationView)
+router.register(r"configuration", views.ConfigurationView)
urlpatterns = [
- path('', include(router.urls)),
+ path("", include(router.urls)),
]
diff --git a/configuration/views.py b/configuration/views.py
index fcbed50e..9da1b1aa 100644
--- a/configuration/views.py
+++ b/configuration/views.py
@@ -10,13 +10,13 @@ class ConfigurationView(viewsets.ReadOnlyModelViewSet):
"""
API endpoint that allows configurations to be viewed.
"""
+
queryset = Configuration.objects.filter(active=True)
serializer_class = ConfigurationSerializer
permission_classes = [permissions.DjangoModelPermissions]
-
def retrieve(self, request, pk=None):
configuration = get_object_or_404(self.queryset, name=pk)
serializer = ConfigurationSerializer(configuration)
- return Response(serializer.data)
\ No newline at end of file
+ return Response(serializer.data)
diff --git a/integrations/apps.py b/integrations/apps.py
index bb57e755..f50c67a6 100644
--- a/integrations/apps.py
+++ b/integrations/apps.py
@@ -2,4 +2,4 @@
class IntegrationsConfig(AppConfig):
- name = 'integrations'
+ name = "integrations"
diff --git a/integrations/management/commands/hubspotsync.py b/integrations/management/commands/hubspotsync.py
index 0b408c44..7fb95061 100644
--- a/integrations/management/commands/hubspotsync.py
+++ b/integrations/management/commands/hubspotsync.py
@@ -8,26 +8,26 @@
class Command(BaseCommand):
- help = 'Syncs new users to Hubspot and clears PII from local records'
+ help = "Syncs new users to Hubspot and clears PII from local records"
def add_arguments(self, parser):
- parser.add_argument('limit', nargs='?', default='1', type=int)
+ parser.add_argument("limit", nargs="?", default="1", type=int)
def handle(self, *args, **options):
- limit = options['limit']
+ limit = options["limit"]
status = self.sync_mfb_hubspot_users(limit)
- if len(status['completed']) > 0:
- self.stdout.write(
- self.style.SUCCESS('Successfully synced %s users.' % len(status['completed'])))
- for message in status['completed']:
+ if len(status["completed"]) > 0:
+ self.stdout.write(self.style.SUCCESS("Successfully synced %s users." % len(status["completed"])))
+ for message in status["completed"]:
self.stdout.write(
- self.style.SUCCESS('Successfully synced user %s with contact %s.' % (message[0], message[1])))
- if len(status['failed']) > 0:
- self.stdout.write(
- self.style.WARNING('Failed to sync %s users.' % len(status['failed'])))
- for message in status['failed']:
+ self.style.SUCCESS("Successfully synced user %s with contact %s." % (message[0], message[1]))
+ )
+ if len(status["failed"]) > 0:
+ self.stdout.write(self.style.WARNING("Failed to sync %s users." % len(status["failed"])))
+ for message in status["failed"]:
self.stdout.write(
- self.style.SUCCESS('Successfully synced user %s with contact %s.' % (message[0], message[1])))
+ self.style.SUCCESS("Successfully synced user %s with contact %s." % (message[0], message[1]))
+ )
# MFB allows users to sign up to receive benefits updates or offers. If they do
# so PII is temporarily stored against their user record. This cron function
@@ -35,23 +35,21 @@ def handle(self, *args, **options):
# hubspot, and then clears the PII on the user record in favor of storing the
# external id. This separates PII from household demographic.
def sync_mfb_hubspot_users(self, limit):
- status = {
- 'processed': 0,
- 'completed': [],
- 'failed': []
- }
+ status = {"processed": 0, "completed": [], "failed": []}
screen = None
processed = 0
# for now, we only sync users to hubspot who have signed up for offers or
# updates and given TCPA consent
- unsynced = User.objects.filter(Q(send_offers=True) | Q(send_updates=True))\
- .filter(external_id__isnull=True)\
+ unsynced = (
+ User.objects.filter(Q(send_offers=True) | Q(send_updates=True))
+ .filter(external_id__isnull=True)
.filter(tcpa_consent=True)
+ )
for user in unsynced:
if processed < limit:
- user_screens = Screen.objects.filter(user_id=user.id).order_by('-submission_date')
+ user_screens = Screen.objects.filter(user_id=user.id).order_by("-submission_date")
if user_screens:
screen = user_screens.first()
else:
@@ -59,19 +57,19 @@ def sync_mfb_hubspot_users(self, limit):
hubspot_id = upsert_user_hubspot(user, screen)
if hubspot_id:
self.replace_pii_with_hubspot_id(hubspot_id, user)
- status['completed'].append((user.id, hubspot_id))
+ status["completed"].append((user.id, hubspot_id))
else:
- status['failed'].append((user.id, hubspot_id))
+ status["failed"].append((user.id, hubspot_id))
# Delay to prevent hitting rate limit of 100 req per 10 seconds
- time.sleep(.2)
+ time.sleep(0.2)
processed += 1
return status
# stores an external id from hubspot and then clears all of the PII
def replace_pii_with_hubspot_id(self, hubspot_id, user):
- random_id = str(uuid.uuid4()).replace('-', '')
+ random_id = str(uuid.uuid4()).replace("-", "")
user.external_id = hubspot_id
- user.email_or_cell = f'{hubspot_id}+{random_id}@myfriendben.org'
+ user.email_or_cell = f"{hubspot_id}+{random_id}@myfriendben.org"
user.first_name = None
user.last_name = None
user.cell = None
diff --git a/integrations/services/communications/__init__.py b/integrations/services/communications/__init__.py
index 18608ce6..10f4b18e 100644
--- a/integrations/services/communications/__init__.py
+++ b/integrations/services/communications/__init__.py
@@ -1,2 +1 @@
from .message import MessageUser
-
diff --git a/integrations/services/communications/message.py b/integrations/services/communications/message.py
index c709261b..45a84103 100644
--- a/integrations/services/communications/message.py
+++ b/integrations/services/communications/message.py
@@ -16,8 +16,8 @@ class MessageUser:
cell_auth_token = config("TWILIO_TOKEN")
cell_from_phone_number = config("TWILIO_PHONE_NUMBER")
- email_from = 'screener@myfriendben.org'
- email_api_key = config('SENDGRID')
+ email_from = "screener@myfriendben.org"
+ email_api_key = config("SENDGRID")
def __init__(self, screen: Screen, lang: str) -> None:
self.screen = screen
@@ -45,16 +45,16 @@ def email(self, email: str, send_tests=False):
sg.client.mail.send.post(request_body=mail.get())
- self.log('emailScreen')
+ self.log("emailScreen")
def _email_client(self):
return sendgrid.SendGridAPIClient(api_key=self.email_api_key)
def _email_subject(self):
- return Translation.objects.get(label='sendResults.email-subject').get_lang(self.lang).text
+ return Translation.objects.get(label="sendResults.email-subject").get_lang(self.lang).text
def _email_body(self):
- words = Translation.objects.get(label='sendResults.email').get_lang(self.lang).text
+ words = Translation.objects.get(label="sendResults.email").get_lang(self.lang).text
url = self._generate_link()
return words + f' {url}'
@@ -69,22 +69,21 @@ def text(self, cell: str, send_tests=False):
to=cell,
)
- self.log('textScreen')
+ self.log("textScreen")
def _text_body(self):
- words = Translation.objects.get(label='sendResults.email').get_lang(self.lang).text
+ words = Translation.objects.get(label="sendResults.email").get_lang(self.lang).text
url = self._generate_link()
- return f'{words} {url}'
+ return f"{words} {url}"
def _cell_client(self):
return Client(self.cell_account_sid, self.cell_auth_token)
-
def _generate_link(self):
return f"{self.front_end_domain}/{self.screen.uuid}/results"
- def log(self, type: Literal['emailScreen', 'textScreen']):
+ def log(self, type: Literal["emailScreen", "textScreen"]):
self.screen.last_email_request_date = timezone.now()
self.screen.save()
@@ -92,4 +91,3 @@ def log(self, type: Literal['emailScreen', 'textScreen']):
type=type,
screen=self.screen,
)
-
diff --git a/integrations/services/google_translate/integration.py b/integrations/services/google_translate/integration.py
index 7405f47c..29a1eb02 100644
--- a/integrations/services/google_translate/integration.py
+++ b/integrations/services/google_translate/integration.py
@@ -6,50 +6,50 @@
import html
-class Translate():
+class Translate:
main_language: str = settings.LANGUAGE_CODE
languages: list[str] = [
- lang['code'] for lang in settings.PARLER_LANGUAGES[None] if lang['code'] != settings.LANGUAGE_CODE
+ lang["code"] for lang in settings.PARLER_LANGUAGES[None] if lang["code"] != settings.LANGUAGE_CODE
]
def __init__(self):
- info = json.loads(config('GOOGLE_APPLICATION_CREDENTIALS'))
+ info = json.loads(config("GOOGLE_APPLICATION_CREDENTIALS"))
creds = service_account.Credentials.from_service_account_info(info)
self.client = translate.Client(credentials=creds)
def translate(self, lang: str, text: str):
- '''
+ """
Translates the text from the default language to the lang param language.
- '''
+ """
if lang not in Translate.languages:
- raise Exception(f'{lang} is not configured in settings, or is the default language')
+ raise Exception(f"{lang} is not configured in settings, or is the default language")
result = self.client.translate(text, target_language=lang, source_language=Translate.main_language)
return self.format_text(result)
def bulk_translate(self, langs: list[str], texts: list[str]):
- '''
+ """
Translates all of the texts to the target langs.
Include __all__ in langs to tranlsate to all languages.
- '''
- if '__all__' in langs:
+ """
+ if "__all__" in langs:
langs = Translate.languages
translations = {text: {} for text in texts}
for lang in langs:
if lang not in Translate.languages:
- raise Exception(f'{lang} is not configured in settings, or is the default language')
+ raise Exception(f"{lang} is not configured in settings, or is the default language")
results = self.client.translate(texts, target_language=lang, source_language=Translate.main_language)
for result in results:
- translations[result['input']][lang] = self.format_text(result)
+ translations[result["input"]][lang] = self.format_text(result)
return translations
def format_text(self, result):
- leading_spaces = len(result['input']) - len(result['input'].lstrip(' '))
- trailing_spaces = len(result['input']) - len(result['input'].rstrip(' '))
+ leading_spaces = len(result["input"]) - len(result["input"].lstrip(" "))
+ trailing_spaces = len(result["input"]) - len(result["input"].rstrip(" "))
- return ' ' * leading_spaces + html.unescape(result['translatedText']) + ' ' * trailing_spaces
+ return " " * leading_spaces + html.unescape(result["translatedText"]) + " " * trailing_spaces
diff --git a/integrations/services/sheets/sheets.py b/integrations/services/sheets/sheets.py
index 4f6dc1c8..a09e46a6 100644
--- a/integrations/services/sheets/sheets.py
+++ b/integrations/services/sheets/sheets.py
@@ -6,9 +6,9 @@
class GoogleSheets:
- info = json.loads(config('GOOGLE_APPLICATION_CREDENTIALS'))
+ info = json.loads(config("GOOGLE_APPLICATION_CREDENTIALS"))
creds = service_account.Credentials.from_service_account_info(info)
- service = build('sheets', 'v4', credentials=creds)
+ service = build("sheets", "v4", credentials=creds)
sheet = service.spreadsheets()
class ColumnDoesNotExist(Exception):
@@ -19,20 +19,18 @@ def __init__(self, spreadsheet_id: str, cell_range: str) -> None:
self.cell_range = cell_range
def data(self) -> list[list[any]]:
- '''
+ """
return a list of rows in the cell range
- '''
- result = self.sheet.values().get(
- spreadsheetId=self.spreadsheet_id, range=self.cell_range
- ).execute()
- values = result.get('values', [])
+ """
+ result = self.sheet.values().get(spreadsheetId=self.spreadsheet_id, range=self.cell_range).execute()
+ values = result.get("values", [])
return values
def data_by_column(self, *column_names: str) -> list[dict[str, any]]:
- '''
+ """
return an array of dictionaries containing the column names and their values
- '''
+ """
data = self.data()
raw_column_names = data[0]
@@ -61,20 +59,20 @@ def data_by_column(self, *column_names: str) -> list[dict[str, any]]:
return organized_data
def print_raw_column_names(self):
- '''
+ """
print the column names of the spreadsheet
WARN: this should only be used during development
- '''
+ """
raw_column_names = self.data()[0]
for name in raw_column_names:
print(repr(name))
def _raise_missing_columns(self, needed_columns: list[str], existing_columns: list[str]):
- '''
+ """
raise an exception with the column names from needed_columns that are not in existing_columns
- '''
+ """
missing_columns = []
for column in needed_columns:
@@ -88,11 +86,10 @@ class GoogleSheetsCache(Cache):
expire_time = 60 * 60 * 24
default = []
- sheet_id = ''
- range_name = ''
+ sheet_id = ""
+ range_name = ""
def update(self):
sheet_values = GoogleSheets(self.sheet_id, self.range_name).data()
return sheet_values
-
diff --git a/manage.py b/manage.py
index 2dd7eb2e..cec8e4c5 100755
--- a/manage.py
+++ b/manage.py
@@ -6,7 +6,7 @@
def main():
"""Run administrative tasks."""
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'benefits.settings')
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "benefits.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
@@ -18,5 +18,5 @@ def main():
execute_from_command_line(sys.argv)
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/programs/admin.py b/programs/admin.py
index 77d63c3d..d1e250c0 100644
--- a/programs/admin.py
+++ b/programs/admin.py
@@ -20,10 +20,13 @@
class ProgramAdmin(ModelAdmin):
search_fields = ("name__translations__text",)
list_display = ["get_str", "name_abbreviated", "active", "action_buttons"]
- filter_horizontal = ('legal_status_required', 'documents',)
+ filter_horizontal = (
+ "legal_status_required",
+ "documents",
+ )
def get_str(self, obj):
- return str(obj) if str(obj).strip() else 'unnamed'
+ return str(obj) if str(obj).strip() else "unnamed"
get_str.admin_order_field = "name"
get_str.short_description = "Program"
@@ -66,10 +69,8 @@ def action_buttons(self, obj):
reverse("translation_admin_url", args=[category.id]),
reverse("translation_admin_url", args=[learn_more_link.id]),
reverse("translation_admin_url", args=[apply_button_link.id]),
- reverse("translation_admin_url", args=[
- estimated_delivery_time.id]),
- reverse("translation_admin_url", args=[
- estimated_application_time.id]),
+ reverse("translation_admin_url", args=[estimated_delivery_time.id]),
+ reverse("translation_admin_url", args=[estimated_application_time.id]),
reverse("translation_admin_url", args=[value_type.id]),
reverse("translation_admin_url", args=[warning.id]),
reverse("translation_admin_url", args=[website_description.id]),
@@ -90,10 +91,13 @@ class NavigatorCountiesAdmin(ModelAdmin):
class NavigatorAdmin(ModelAdmin):
search_fields = ("name__translations__text",)
list_display = ["get_str", "external_name", "action_buttons"]
- filter_horizontal = ('program', 'counties',)
+ filter_horizontal = (
+ "program",
+ "counties",
+ )
def get_str(self, obj):
- return str(obj) if str(obj).strip() else 'unnamed'
+ return str(obj) if str(obj).strip() else "unnamed"
get_str.admin_order_field = "name"
get_str.short_description = "Navigator"
@@ -129,10 +133,13 @@ def action_buttons(self, obj):
class UrgentNeedAdmin(ModelAdmin):
search_fields = ("name__translations__text",)
list_display = ["get_str", "external_name", "active", "action_buttons"]
- filter_horizontal = ('type_short', 'functions',)
+ filter_horizontal = (
+ "type_short",
+ "functions",
+ )
def get_str(self, obj):
- return str(obj) if str(obj).strip() else 'unnamed'
+ return str(obj) if str(obj).strip() else "unnamed"
get_str.admin_order_field = "name"
get_str.short_description = "Urgent Need"
@@ -191,8 +198,11 @@ class DocumentAdmin(ModelAdmin):
class ReferrerAdmin(ModelAdmin):
search_fields = ("referrer_code",)
- filter_horizontal = ('webhook_functions',
- 'primary_navigators', 'remove_programs',)
+ filter_horizontal = (
+ "webhook_functions",
+ "primary_navigators",
+ "remove_programs",
+ )
class WebHookFunctionsAdmin(ModelAdmin):
diff --git a/programs/apps.py b/programs/apps.py
index 8d5355c3..34c4c1e7 100644
--- a/programs/apps.py
+++ b/programs/apps.py
@@ -2,5 +2,5 @@
class ProgramsConfig(AppConfig):
- default_auto_field = 'django.db.models.BigAutoField'
- name = 'programs'
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "programs"
diff --git a/programs/co_county_zips.py b/programs/co_county_zips.py
index 78746a10..bcb3f762 100644
--- a/programs/co_county_zips.py
+++ b/programs/co_county_zips.py
@@ -1,4 +1,3 @@
-
def counties_from_zip(lookup_zip):
matches = []
@@ -911,8 +910,7 @@ def counties_from_zip(lookup_zip):
"81416",
"81521",
],
- "Mineral County": [
- "81230", "81149", "81147", "81154", "81235", "81132", "81130"],
+ "Mineral County": ["81230", "81149", "81147", "81154", "81235", "81132", "81130"],
"Moffat County": [
"81648",
"81638",
diff --git a/programs/management/commands/add_history.py b/programs/management/commands/add_history.py
index 8edaeaae..5a1faa94 100644
--- a/programs/management/commands/add_history.py
+++ b/programs/management/commands/add_history.py
@@ -8,38 +8,33 @@
class Command(BaseCommand):
- help = 'Adds a new program eligibility snapshot to the history yaml file for all screens'
+ help = "Adds a new program eligibility snapshot to the history yaml file for all screens"
def create_screen(self, path):
- with open(path, 'r') as file:
+ with open(path, "r") as file:
screen_dict = yaml.safe_load(file)
screen = Screen.objects.create(
- **{key: value for key, value in screen_dict.items() if key != 'household_members'},
+ **{key: value for key, value in screen_dict.items() if key != "household_members"},
agree_to_tos=True,
completed=False,
is_test=True
- )
+ )
members = []
incomes = []
expenses = []
- for member in screen_dict['household_members']:
- has_income = len(member['incomes']) >= 1
- has_expense = len(member['expenses']) >= 1
- household_member = {key: value for key, value in member.items() if key not in ('incomes', 'expenses')}
- member_model = HouseholdMember(**household_member,
- has_income=has_income,
- has_expenses=has_expense,
- screen=screen)
+ for member in screen_dict["household_members"]:
+ has_income = len(member["incomes"]) >= 1
+ has_expense = len(member["expenses"]) >= 1
+ household_member = {key: value for key, value in member.items() if key not in ("incomes", "expenses")}
+ member_model = HouseholdMember(
+ **household_member, has_income=has_income, has_expenses=has_expense, screen=screen
+ )
members.append(member_model)
- for income in member['incomes']:
- incomes.append(IncomeStream(**income,
- screen=screen,
- household_member=member_model))
- for expense in member['expenses']:
- expenses.append(Expense(**expense,
- screen=screen,
- household_member=member_model))
+ for income in member["incomes"]:
+ incomes.append(IncomeStream(**income, screen=screen, household_member=member_model))
+ for expense in member["expenses"]:
+ expenses.append(Expense(**expense, screen=screen, household_member=member_model))
HouseholdMember.objects.bulk_create(members)
IncomeStream.objects.bulk_create(incomes)
@@ -50,32 +45,32 @@ def create_screen(self, path):
def eligibility(self, screen):
eligibility = {}
for benefit, calculator in calculators.items():
- raw_result = calculator(screen, [
- {'name_abbreviated': 'medicaid', 'eligible': False if benefit == 'cfhc' else True},
- {'name_abbreviated': 'tanf', 'eligible': False}
- ])
- eligibility[benefit] = {
- 'eligibility': raw_result['eligibility']['eligible'],
- 'value': raw_result['value']
- }
+ raw_result = calculator(
+ screen,
+ [
+ {"name_abbreviated": "medicaid", "eligible": False if benefit == "cfhc" else True},
+ {"name_abbreviated": "tanf", "eligible": False},
+ ],
+ )
+ eligibility[benefit] = {"eligibility": raw_result["eligibility"]["eligible"], "value": raw_result["value"]}
return eligibility
def update_history(seld, eligibility, path, date):
- with open(path, 'r') as file:
+ with open(path, "r") as file:
history = yaml.safe_load(file)
- with open(path, 'w') as file:
+ with open(path, "w") as file:
if history is None:
- yaml.dump([{'date': date, 'eligibility': eligibility}], file)
+ yaml.dump([{"date": date, "eligibility": eligibility}], file)
else:
- history.append({'date': date, 'eligibility': eligibility})
+ history.append({"date": date, "eligibility": eligibility})
yaml.dump(history, file)
def handle(self, *args, **options):
- base_path = os.path.join(settings.BASE_DIR, 'programs', 'program_history')
+ base_path = os.path.join(settings.BASE_DIR, "programs", "program_history")
date = datetime.now().strftime("%m/%d/%Y %H:%M:%S")
for directory in os.listdir(base_path):
print(directory)
- screen = self.create_screen(os.path.join(base_path, directory, 'screen.yaml'))
+ screen = self.create_screen(os.path.join(base_path, directory, "screen.yaml"))
eligibility = self.eligibility(screen)
- self.update_history(eligibility, os.path.join(base_path, directory, 'history.yaml'), date)
+ self.update_history(eligibility, os.path.join(base_path, directory, "history.yaml"), date)
diff --git a/programs/management/commands/diff_history.py b/programs/management/commands/diff_history.py
index 9698fe98..3fd8006f 100644
--- a/programs/management/commands/diff_history.py
+++ b/programs/management/commands/diff_history.py
@@ -5,42 +5,42 @@
class Command(BaseCommand):
- help = 'Checks history for changes'
+ help = "Checks history for changes"
def compare(self, file):
- with open(file, 'r') as file:
+ with open(file, "r") as file:
history = yaml.safe_load(file)
try:
- latest = history[-1]['eligibility']
- second_latest = history[-2]['eligibility']
+ latest = history[-1]["eligibility"]
+ second_latest = history[-2]["eligibility"]
except IndexError:
- print('nothing to compare')
+ print("nothing to compare")
return
for key in latest:
try:
- new_eligible = latest[key]['eligibility']
+ new_eligible = latest[key]["eligibility"]
except KeyError:
- print(key, 'was deleted')
+ print(key, "was deleted")
continue
try:
- old_eligible = second_latest[key]['eligibility']
+ old_eligible = second_latest[key]["eligibility"]
except KeyError:
- print(key, 'was added')
+ print(key, "was added")
continue
if new_eligible != old_eligible:
- print(f' {key}: {old_eligible} => {new_eligible}')
+ print(f" {key}: {old_eligible} => {new_eligible}")
- new_value = latest[key]['value']
- old_value = second_latest[key]['value']
+ new_value = latest[key]["value"]
+ old_value = second_latest[key]["value"]
if new_value != old_value:
- print(f' {key}: {old_value} => {new_value}')
+ print(f" {key}: {old_value} => {new_value}")
def handle(self, *args, **options):
- base_path = os.path.join(settings.BASE_DIR, 'programs', 'program_history')
+ base_path = os.path.join(settings.BASE_DIR, "programs", "program_history")
for directory in os.listdir(base_path):
- print(directory+':')
- self.compare(os.path.join(base_path, directory, 'history.yaml'))
+ print(directory + ":")
+ self.compare(os.path.join(base_path, directory, "history.yaml"))
diff --git a/programs/management/commands/quick_start.py b/programs/management/commands/quick_start.py
index 3f89859f..7c2460f4 100644
--- a/programs/management/commands/quick_start.py
+++ b/programs/management/commands/quick_start.py
@@ -12,9 +12,7 @@
class Command(BaseCommand):
- help = (
- 'create programs, navigators, urgent needs, and other starting database stuff'
- )
+ help = "create programs, navigators, urgent needs, and other starting database stuff"
fpl = {
1: 13_590,
@@ -27,116 +25,116 @@ class Command(BaseCommand):
8: 41_910,
}
legal_statuses = [
- 'gc_under18_no5',
- 'gc_18plus_no5',
- 'gc_5plus',
- 'refugee',
- 'green_card',
- 'non_citizen',
- 'citizen',
- 'other',
- 'otherHealthCarePregnant',
- 'otherHealthCareUnder19',
- 'otherWithWorkPermission',
+ "gc_under18_no5",
+ "gc_18plus_no5",
+ "gc_5plus",
+ "refugee",
+ "green_card",
+ "non_citizen",
+ "citizen",
+ "other",
+ "otherHealthCarePregnant",
+ "otherHealthCareUnder19",
+ "otherWithWorkPermission",
]
urgent_need_categories = [
- 'legal services',
- 'dental care',
- 'job resources',
- 'family planning',
- 'funeral',
- 'child dev',
- 'mental health',
- 'housing',
- 'baby supplies',
- 'food',
+ "legal services",
+ "dental care",
+ "job resources",
+ "family planning",
+ "funeral",
+ "child dev",
+ "mental health",
+ "housing",
+ "baby supplies",
+ "food",
]
urgent_need_functions = [
- 'co_legal_services',
- 'eoc',
- 'trua',
- 'bia_food_delivery',
- 'child',
- 'helpkitchen_zipcode',
- 'denver',
+ "co_legal_services",
+ "eoc",
+ "trua",
+ "bia_food_delivery",
+ "child",
+ "helpkitchen_zipcode",
+ "denver",
]
programs = [
- {'abbr': 'cwd_medicaid', 'external': 'cwd_medicaid'},
- {'abbr': 'awd_medicaid', 'external': 'awd_medivaid'},
- {'abbr': 'emergency_medicaid', 'external': 'emergency_medicaid'},
- {'abbr': 'medicare_savings', 'external': 'medicare_savings'},
- {'abbr': 'ssi', 'external': 'ssi'},
- {'abbr': 'trua', 'external': 'trua'},
- {'abbr': 'rhc', 'external': 'rhc'},
- {'abbr': 'wic', 'external': 'wic'},
- {'abbr': 'omnisalud', 'external': 'omnisalud'},
- {'abbr': 'dpp', 'external': 'dpp'},
- {'abbr': 'lwcr', 'external': 'lwcr'},
- {'abbr': 'lifeline', 'external': 'lifeline'},
- {'abbr': 'fps', 'external': 'fps'},
- {'abbr': 'leap', 'external': 'leap'},
- {'abbr': 'pell_grant', 'external': 'pell_grant'},
- {'abbr': 'mydenver', 'external': 'mydenver'},
- {'abbr': 'ede', 'external': 'ede'},
- {'abbr': 'cdhcs', 'external': 'cdhcs'},
- {'abbr': 'nslp', 'external': 'nslp'},
- {'abbr': 'erc', 'external': 'erc'},
- {'abbr': 'chs', 'external': 'chs'},
- {'abbr': 'cccap', 'external': 'cccap'},
- {'abbr': 'chp', 'external': 'chp'},
- {'abbr': 'coeitc', 'external': 'coexeitc'},
- {'abbr': 'acp', 'external': 'acp'},
- {'abbr': 'rtdlive', 'external': 'rtdlive'},
- {'abbr': 'coctc', 'external': 'coctc'},
- {'abbr': 'ssdi', 'external': 'ssdi'},
- {'abbr': 'tanf', 'external': 'tanf'},
- {'abbr': 'coeitc', 'external': 'coeitc'},
- {'abbr': 'cpcr', 'external': 'cpcr'},
- {'abbr': 'eitc', 'external': 'eitc'},
- {'abbr': 'cfhc', 'external': 'cfhc'},
- {'abbr': 'myspark', 'external': 'myspark'},
- {'abbr': 'snap', 'external': 'snap'},
- {'abbr': 'ctc', 'external': 'ctc'},
- {'abbr': 'medicaid', 'external': 'medicaid'},
- {'abbr': 'andcs', 'external': 'andcs'},
- {'abbr': 'oap', 'external': 'oap'},
- {'abbr': 'upk', 'external': 'upk'},
+ {"abbr": "cwd_medicaid", "external": "cwd_medicaid"},
+ {"abbr": "awd_medicaid", "external": "awd_medivaid"},
+ {"abbr": "emergency_medicaid", "external": "emergency_medicaid"},
+ {"abbr": "medicare_savings", "external": "medicare_savings"},
+ {"abbr": "ssi", "external": "ssi"},
+ {"abbr": "trua", "external": "trua"},
+ {"abbr": "rhc", "external": "rhc"},
+ {"abbr": "wic", "external": "wic"},
+ {"abbr": "omnisalud", "external": "omnisalud"},
+ {"abbr": "dpp", "external": "dpp"},
+ {"abbr": "lwcr", "external": "lwcr"},
+ {"abbr": "lifeline", "external": "lifeline"},
+ {"abbr": "fps", "external": "fps"},
+ {"abbr": "leap", "external": "leap"},
+ {"abbr": "pell_grant", "external": "pell_grant"},
+ {"abbr": "mydenver", "external": "mydenver"},
+ {"abbr": "ede", "external": "ede"},
+ {"abbr": "cdhcs", "external": "cdhcs"},
+ {"abbr": "nslp", "external": "nslp"},
+ {"abbr": "erc", "external": "erc"},
+ {"abbr": "chs", "external": "chs"},
+ {"abbr": "cccap", "external": "cccap"},
+ {"abbr": "chp", "external": "chp"},
+ {"abbr": "coeitc", "external": "coexeitc"},
+ {"abbr": "acp", "external": "acp"},
+ {"abbr": "rtdlive", "external": "rtdlive"},
+ {"abbr": "coctc", "external": "coctc"},
+ {"abbr": "ssdi", "external": "ssdi"},
+ {"abbr": "tanf", "external": "tanf"},
+ {"abbr": "coeitc", "external": "coeitc"},
+ {"abbr": "cpcr", "external": "cpcr"},
+ {"abbr": "eitc", "external": "eitc"},
+ {"abbr": "cfhc", "external": "cfhc"},
+ {"abbr": "myspark", "external": "myspark"},
+ {"abbr": "snap", "external": "snap"},
+ {"abbr": "ctc", "external": "ctc"},
+ {"abbr": "medicaid", "external": "medicaid"},
+ {"abbr": "andcs", "external": "andcs"},
+ {"abbr": "oap", "external": "oap"},
+ {"abbr": "upk", "external": "upk"},
]
urgent_needs = [
- 'bia_food',
- 'coemap',
- 'dbap',
- 'plentiful',
- 'eic',
- 'ccs',
- 'ndbn',
- 'hfc',
- 'rhc',
- 'fps',
- 'better_offer',
- 'cedp',
- 'chc',
- 'cda',
- 'eocbpa',
- 'cls',
- 'trua',
- 'imatter',
+ "bia_food",
+ "coemap",
+ "dbap",
+ "plentiful",
+ "eic",
+ "ccs",
+ "ndbn",
+ "hfc",
+ "rhc",
+ "fps",
+ "better_offer",
+ "cedp",
+ "chc",
+ "cda",
+ "eocbpa",
+ "cls",
+ "trua",
+ "imatter",
]
navigators = [
- 'gac',
- 'bia',
- 'bdt',
- 'acc',
- 'mhuw',
- 'dpp',
- 'uph',
- 'cowicc',
+ "gac",
+ "bia",
+ "bdt",
+ "acc",
+ "mhuw",
+ "dpp",
+ "uph",
+ "cowicc",
]
def handle(self, *args, **options):
# create FPL
fpl = FederalPoveryLimit.objects.create(
- year='THIS YEAR',
+ year="THIS YEAR",
has_1_person=self.fpl[1],
has_2_people=self.fpl[2],
has_3_people=self.fpl[3],
@@ -164,8 +162,8 @@ def handle(self, *args, **options):
# create programs
programs = []
for program in self.programs:
- new_program = Program.objects.new_program(program['abbr'])
- new_program.external_name = program['external']
+ new_program = Program.objects.new_program(program["abbr"])
+ new_program.external_name = program["external"]
new_program.fpl = fpl
for status in statuses:
# set all legal statuses for each program
diff --git a/programs/management/commands/rm_latest_history.py b/programs/management/commands/rm_latest_history.py
index c52b25bb..762a36dc 100644
--- a/programs/management/commands/rm_latest_history.py
+++ b/programs/management/commands/rm_latest_history.py
@@ -5,19 +5,19 @@
class Command(BaseCommand):
- help = 'Checks history for changes'
+ help = "Checks history for changes"
def remove_latest(self, path):
- with open(path, 'r') as file:
+ with open(path, "r") as file:
history = yaml.safe_load(file)
history = history[:-1]
- with open(path, 'w') as file:
+ with open(path, "w") as file:
yaml.dump(history, file)
def handle(self, *args, **options):
- base_path = os.path.join(settings.BASE_DIR, 'programs', 'program_history')
+ base_path = os.path.join(settings.BASE_DIR, "programs", "program_history")
for directory in os.listdir(base_path):
print(directory)
- self.remove_latest(os.path.join(base_path, directory, 'history.yaml'))
+ self.remove_latest(os.path.join(base_path, directory, "history.yaml"))
diff --git a/programs/migrations/0001_initial.py b/programs/migrations/0001_initial.py
index 94d27846..258f33b7 100644
--- a/programs/migrations/0001_initial.py
+++ b/programs/migrations/0001_initial.py
@@ -4,27 +4,26 @@
import parler.fields
import parler.models
-class Migration(migrations.Migration):
+class Migration(migrations.Migration):
initial = True
- dependencies = [
- ]
+ dependencies = []
operations = [
migrations.CreateModel(
- name='Program',
+ name="Program",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('programSnapshot', models.TextField()),
- ('programName', models.CharField(max_length=120)),
- ('programDescription', models.TextField()),
- ('learnMoreLink', models.CharField(max_length=320)),
- ('applyButtonLink', models.CharField(max_length=320)),
- ('dollarValue', models.IntegerField()),
- ('estimatedDeliveryTime', models.CharField(max_length=120)),
- ('legalStatusRequired', models.BooleanField()),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("programSnapshot", models.TextField()),
+ ("programName", models.CharField(max_length=120)),
+ ("programDescription", models.TextField()),
+ ("learnMoreLink", models.CharField(max_length=320)),
+ ("applyButtonLink", models.CharField(max_length=320)),
+ ("dollarValue", models.IntegerField()),
+ ("estimatedDeliveryTime", models.CharField(max_length=120)),
+ ("legalStatusRequired", models.BooleanField()),
],
- bases=(parler.models.TranslatableModelMixin, models.Model)
+ bases=(parler.models.TranslatableModelMixin, models.Model),
),
]
diff --git a/programs/migrations/0002_program_programnameshort.py b/programs/migrations/0002_program_programnameshort.py
index fa128a4a..056d7300 100644
--- a/programs/migrations/0002_program_programnameshort.py
+++ b/programs/migrations/0002_program_programnameshort.py
@@ -4,16 +4,15 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0001_initial'),
+ ("programs", "0001_initial"),
]
operations = [
migrations.AddField(
- model_name='program',
- name='programNameShort',
- field=models.CharField(default='snap', max_length=120),
+ model_name="program",
+ name="programNameShort",
+ field=models.CharField(default="snap", max_length=120),
preserve_default=False,
),
]
diff --git a/programs/migrations/0003_rename_applybuttonlink_program_apply_button_link_and_more.py b/programs/migrations/0003_rename_applybuttonlink_program_apply_button_link_and_more.py
index 55be7831..ff041972 100644
--- a/programs/migrations/0003_rename_applybuttonlink_program_apply_button_link_and_more.py
+++ b/programs/migrations/0003_rename_applybuttonlink_program_apply_button_link_and_more.py
@@ -4,55 +4,54 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0002_program_programnameshort'),
+ ("programs", "0002_program_programnameshort"),
]
operations = [
migrations.RenameField(
- model_name='program',
- old_name='applyButtonLink',
- new_name='apply_button_link',
+ model_name="program",
+ old_name="applyButtonLink",
+ new_name="apply_button_link",
),
migrations.RenameField(
- model_name='program',
- old_name='dollarValue',
- new_name='dollar_value',
+ model_name="program",
+ old_name="dollarValue",
+ new_name="dollar_value",
),
migrations.RenameField(
- model_name='program',
- old_name='estimatedDeliveryTime',
- new_name='estimated_delivery_time',
+ model_name="program",
+ old_name="estimatedDeliveryTime",
+ new_name="estimated_delivery_time",
),
migrations.RenameField(
- model_name='program',
- old_name='learnMoreLink',
- new_name='learn_more_link',
+ model_name="program",
+ old_name="learnMoreLink",
+ new_name="learn_more_link",
),
migrations.RenameField(
- model_name='program',
- old_name='legalStatusRequired',
- new_name='legal_status_required',
+ model_name="program",
+ old_name="legalStatusRequired",
+ new_name="legal_status_required",
),
migrations.RenameField(
- model_name='program',
- old_name='programDescription',
- new_name='program_description',
+ model_name="program",
+ old_name="programDescription",
+ new_name="program_description",
),
migrations.RenameField(
- model_name='program',
- old_name='programName',
- new_name='program_name',
+ model_name="program",
+ old_name="programName",
+ new_name="program_name",
),
migrations.RenameField(
- model_name='program',
- old_name='programNameShort',
- new_name='program_name_short',
+ model_name="program",
+ old_name="programNameShort",
+ new_name="program_name_short",
),
migrations.RenameField(
- model_name='program',
- old_name='programSnapshot',
- new_name='program_snapshot',
+ model_name="program",
+ old_name="programSnapshot",
+ new_name="program_snapshot",
),
]
diff --git a/programs/migrations/0004_rename_program_snapshot_program_description_short.py b/programs/migrations/0004_rename_program_snapshot_program_description_short.py
index 290e77ac..0d9564e7 100644
--- a/programs/migrations/0004_rename_program_snapshot_program_description_short.py
+++ b/programs/migrations/0004_rename_program_snapshot_program_description_short.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0003_rename_applybuttonlink_program_apply_button_link_and_more'),
+ ("programs", "0003_rename_applybuttonlink_program_apply_button_link_and_more"),
]
operations = [
migrations.RenameField(
- model_name='program',
- old_name='program_snapshot',
- new_name='description_short',
+ model_name="program",
+ old_name="program_snapshot",
+ new_name="description_short",
),
]
diff --git a/programs/migrations/0005_rename_program_name_program_name.py b/programs/migrations/0005_rename_program_name_program_name.py
index e45319c6..6a020db9 100644
--- a/programs/migrations/0005_rename_program_name_program_name.py
+++ b/programs/migrations/0005_rename_program_name_program_name.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0004_rename_program_snapshot_program_description_short'),
+ ("programs", "0004_rename_program_snapshot_program_description_short"),
]
operations = [
migrations.RenameField(
- model_name='program',
- old_name='program_name',
- new_name='name',
+ model_name="program",
+ old_name="program_name",
+ new_name="name",
),
]
diff --git a/programs/migrations/0006_rename_program_description_program_description_and_more.py b/programs/migrations/0006_rename_program_description_program_description_and_more.py
index e6001367..1846cf8f 100644
--- a/programs/migrations/0006_rename_program_description_program_description_and_more.py
+++ b/programs/migrations/0006_rename_program_description_program_description_and_more.py
@@ -4,20 +4,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0005_rename_program_name_program_name'),
+ ("programs", "0005_rename_program_name_program_name"),
]
operations = [
migrations.RenameField(
- model_name='program',
- old_name='program_description',
- new_name='description',
+ model_name="program",
+ old_name="program_description",
+ new_name="description",
),
migrations.RenameField(
- model_name='program',
- old_name='program_name_short',
- new_name='name_abbreviated',
+ model_name="program",
+ old_name="program_name_short",
+ new_name="name_abbreviated",
),
]
diff --git a/programs/migrations/0007_alter_program_estimated_delivery_time.py b/programs/migrations/0007_alter_program_estimated_delivery_time.py
index c8b21efd..4a1a6bd8 100644
--- a/programs/migrations/0007_alter_program_estimated_delivery_time.py
+++ b/programs/migrations/0007_alter_program_estimated_delivery_time.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0006_rename_program_description_program_description_and_more'),
+ ("programs", "0006_rename_program_description_program_description_and_more"),
]
operations = [
migrations.AlterField(
- model_name='program',
- name='estimated_delivery_time',
+ model_name="program",
+ name="estimated_delivery_time",
field=models.CharField(max_length=320),
),
]
diff --git a/programs/migrations/0008_alter_program_legal_status_required.py b/programs/migrations/0008_alter_program_legal_status_required.py
index 36454bce..bcdd2a87 100644
--- a/programs/migrations/0008_alter_program_legal_status_required.py
+++ b/programs/migrations/0008_alter_program_legal_status_required.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0007_alter_program_estimated_delivery_time'),
+ ("programs", "0007_alter_program_estimated_delivery_time"),
]
operations = [
migrations.AlterField(
- model_name='program',
- name='legal_status_required',
+ model_name="program",
+ name="legal_status_required",
field=models.CharField(max_length=120),
),
]
diff --git a/programs/migrations/0009_program_value_type.py b/programs/migrations/0009_program_value_type.py
index 6d127a49..e2f61b6f 100644
--- a/programs/migrations/0009_program_value_type.py
+++ b/programs/migrations/0009_program_value_type.py
@@ -4,16 +4,15 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0008_alter_program_legal_status_required'),
+ ("programs", "0008_alter_program_legal_status_required"),
]
operations = [
migrations.AddField(
- model_name='program',
- name='value_type',
- field=models.CharField(default='non-discretionary', max_length=120),
+ model_name="program",
+ name="value_type",
+ field=models.CharField(default="non-discretionary", max_length=120),
preserve_default=False,
),
]
diff --git a/programs/migrations/0010_rename_apply_button_link_program__apply_button_link_and_more.py b/programs/migrations/0010_rename_apply_button_link_program__apply_button_link_and_more.py
index 3f94cdbd..2a7ffbc2 100644
--- a/programs/migrations/0010_rename_apply_button_link_program__apply_button_link_and_more.py
+++ b/programs/migrations/0010_rename_apply_button_link_program__apply_button_link_and_more.py
@@ -4,60 +4,59 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0009_program_value_type'),
+ ("programs", "0009_program_value_type"),
]
operations = [
migrations.RenameField(
- model_name='program',
- old_name='apply_button_link',
- new_name='_apply_button_link',
+ model_name="program",
+ old_name="apply_button_link",
+ new_name="_apply_button_link",
),
migrations.RenameField(
- model_name='program',
- old_name='description',
- new_name='_description',
+ model_name="program",
+ old_name="description",
+ new_name="_description",
),
migrations.RenameField(
- model_name='program',
- old_name='description_short',
- new_name='_description_short',
+ model_name="program",
+ old_name="description_short",
+ new_name="_description_short",
),
migrations.RenameField(
- model_name='program',
- old_name='dollar_value',
- new_name='_dollar_value',
+ model_name="program",
+ old_name="dollar_value",
+ new_name="_dollar_value",
),
migrations.RenameField(
- model_name='program',
- old_name='estimated_delivery_time',
- new_name='_estimated_delivery_time',
+ model_name="program",
+ old_name="estimated_delivery_time",
+ new_name="_estimated_delivery_time",
),
migrations.RenameField(
- model_name='program',
- old_name='learn_more_link',
- new_name='_learn_more_link',
+ model_name="program",
+ old_name="learn_more_link",
+ new_name="_learn_more_link",
),
migrations.RenameField(
- model_name='program',
- old_name='legal_status_required',
- new_name='_legal_status_required',
+ model_name="program",
+ old_name="legal_status_required",
+ new_name="_legal_status_required",
),
migrations.RenameField(
- model_name='program',
- old_name='name',
- new_name='_name',
+ model_name="program",
+ old_name="name",
+ new_name="_name",
),
migrations.RenameField(
- model_name='program',
- old_name='name_abbreviated',
- new_name='_name_abbreviated',
+ model_name="program",
+ old_name="name_abbreviated",
+ new_name="_name_abbreviated",
),
migrations.RenameField(
- model_name='program',
- old_name='value_type',
- new_name='_value_type',
+ model_name="program",
+ old_name="value_type",
+ new_name="_value_type",
),
]
diff --git a/programs/migrations/0011_add_translation_model.py b/programs/migrations/0011_add_translation_model.py
index c7318de7..0a807c4e 100644
--- a/programs/migrations/0011_add_translation_model.py
+++ b/programs/migrations/0011_add_translation_model.py
@@ -7,36 +7,44 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0010_rename_apply_button_link_program__apply_button_link_and_more'),
+ ("programs", "0010_rename_apply_button_link_program__apply_button_link_and_more"),
]
operations = [
migrations.CreateModel(
- name='ProgramTranslation',
+ name="ProgramTranslation",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')),
- ('description_short', models.TextField()),
- ('name', models.CharField(max_length=120)),
- ('name_abbreviated', models.CharField(max_length=120)),
- ('description', models.TextField()),
- ('learn_more_link', models.CharField(max_length=320)),
- ('apply_button_link', models.CharField(max_length=320)),
- ('dollar_value', models.IntegerField()),
- ('value_type', models.CharField(max_length=120)),
- ('estimated_delivery_time', models.CharField(max_length=320)),
- ('legal_status_required', models.CharField(max_length=120)),
- ('master', parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='programs.program')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language")),
+ ("description_short", models.TextField()),
+ ("name", models.CharField(max_length=120)),
+ ("name_abbreviated", models.CharField(max_length=120)),
+ ("description", models.TextField()),
+ ("learn_more_link", models.CharField(max_length=320)),
+ ("apply_button_link", models.CharField(max_length=320)),
+ ("dollar_value", models.IntegerField()),
+ ("value_type", models.CharField(max_length=120)),
+ ("estimated_delivery_time", models.CharField(max_length=320)),
+ ("legal_status_required", models.CharField(max_length=120)),
+ (
+ "master",
+ parler.fields.TranslationsForeignKey(
+ editable=False,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="translations",
+ to="programs.program",
+ ),
+ ),
],
options={
- 'verbose_name': 'program Translation',
- 'db_table': 'programs_program_translation',
- 'db_tablespace': '',
- 'managed': True,
- 'default_permissions': (),
- 'unique_together': {('language_code', 'master')},
+ "verbose_name": "program Translation",
+ "db_table": "programs_program_translation",
+ "db_tablespace": "",
+ "managed": True,
+ "default_permissions": (),
+ "unique_together": {("language_code", "master")},
},
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
),
diff --git a/programs/migrations/0012_migrate_translatable_fields.py b/programs/migrations/0012_migrate_translatable_fields.py
index e34f5246..cde7cc50 100644
--- a/programs/migrations/0012_migrate_translatable_fields.py
+++ b/programs/migrations/0012_migrate_translatable_fields.py
@@ -4,31 +4,31 @@
def forwards_func(apps, schema_editor):
- Program = apps.get_model('programs', 'Program')
- ProgramTranslation = apps.get_model('programs', 'ProgramTranslation')
+ Program = apps.get_model("programs", "Program")
+ ProgramTranslation = apps.get_model("programs", "ProgramTranslation")
for object in Program.objects.all():
ProgramTranslation.objects.create(
master_id=object.pk,
language_code=settings.LANGUAGE_CODE,
- description_short = object._description_short,
- name = object._name,
- name_abbreviated = object._name_abbreviated,
- description = object._description,
- learn_more_link = object._learn_more_link,
- apply_button_link = object._apply_button_link,
- dollar_value = object._dollar_value,
- value_type = object._value_type,
- estimated_delivery_time = object._estimated_delivery_time,
- legal_status_required = object._legal_status_required
+ description_short=object._description_short,
+ name=object._name,
+ name_abbreviated=object._name_abbreviated,
+ description=object._description,
+ learn_more_link=object._learn_more_link,
+ apply_button_link=object._apply_button_link,
+ dollar_value=object._dollar_value,
+ value_type=object._value_type,
+ estimated_delivery_time=object._estimated_delivery_time,
+ legal_status_required=object._legal_status_required,
)
-class Migration(migrations.Migration):
+class Migration(migrations.Migration):
dependencies = [
- ('programs', '0011_add_translation_model'),
+ ("programs", "0011_add_translation_model"),
]
operations = [
migrations.RunPython(forwards_func),
- ]
\ No newline at end of file
+ ]
diff --git a/programs/migrations/0013_remove_program__apply_button_link_and_more.py b/programs/migrations/0013_remove_program__apply_button_link_and_more.py
index 28dd2663..8af02cab 100644
--- a/programs/migrations/0013_remove_program__apply_button_link_and_more.py
+++ b/programs/migrations/0013_remove_program__apply_button_link_and_more.py
@@ -4,50 +4,49 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0012_migrate_translatable_fields'),
+ ("programs", "0012_migrate_translatable_fields"),
]
operations = [
migrations.RemoveField(
- model_name='program',
- name='_apply_button_link',
+ model_name="program",
+ name="_apply_button_link",
),
migrations.RemoveField(
- model_name='program',
- name='_description',
+ model_name="program",
+ name="_description",
),
migrations.RemoveField(
- model_name='program',
- name='_description_short',
+ model_name="program",
+ name="_description_short",
),
migrations.RemoveField(
- model_name='program',
- name='_dollar_value',
+ model_name="program",
+ name="_dollar_value",
),
migrations.RemoveField(
- model_name='program',
- name='_estimated_delivery_time',
+ model_name="program",
+ name="_estimated_delivery_time",
),
migrations.RemoveField(
- model_name='program',
- name='_learn_more_link',
+ model_name="program",
+ name="_learn_more_link",
),
migrations.RemoveField(
- model_name='program',
- name='_legal_status_required',
+ model_name="program",
+ name="_legal_status_required",
),
migrations.RemoveField(
- model_name='program',
- name='_name',
+ model_name="program",
+ name="_name",
),
migrations.RemoveField(
- model_name='program',
- name='_name_abbreviated',
+ model_name="program",
+ name="_name_abbreviated",
),
migrations.RemoveField(
- model_name='program',
- name='_value_type',
+ model_name="program",
+ name="_value_type",
),
]
diff --git a/programs/migrations/0014_programtranslation_estimated_application_time.py b/programs/migrations/0014_programtranslation_estimated_application_time.py
index 00125414..87bfbd17 100644
--- a/programs/migrations/0014_programtranslation_estimated_application_time.py
+++ b/programs/migrations/0014_programtranslation_estimated_application_time.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0013_remove_program__apply_button_link_and_more'),
+ ("programs", "0013_remove_program__apply_button_link_and_more"),
]
operations = [
migrations.AddField(
- model_name='programtranslation',
- name='estimated_application_time',
+ model_name="programtranslation",
+ name="estimated_application_time",
field=models.CharField(blank=True, default=None, max_length=320, null=True),
),
]
diff --git a/programs/migrations/0015_programtranslation_active.py b/programs/migrations/0015_programtranslation_active.py
index c603b279..b2fa6244 100644
--- a/programs/migrations/0015_programtranslation_active.py
+++ b/programs/migrations/0015_programtranslation_active.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0014_programtranslation_estimated_application_time'),
+ ("programs", "0014_programtranslation_estimated_application_time"),
]
operations = [
migrations.AddField(
- model_name='programtranslation',
- name='active',
+ model_name="programtranslation",
+ name="active",
field=models.BooleanField(blank=True, default=False),
),
]
diff --git a/programs/migrations/0016_alter_programtranslation_active.py b/programs/migrations/0016_alter_programtranslation_active.py
index dff7dddb..405e51a9 100644
--- a/programs/migrations/0016_alter_programtranslation_active.py
+++ b/programs/migrations/0016_alter_programtranslation_active.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0015_programtranslation_active'),
+ ("programs", "0015_programtranslation_active"),
]
operations = [
migrations.AlterField(
- model_name='programtranslation',
- name='active',
+ model_name="programtranslation",
+ name="active",
field=models.BooleanField(blank=True, default=True),
),
]
diff --git a/programs/migrations/0017_navigator_navigatortranslation.py b/programs/migrations/0017_navigator_navigatortranslation.py
index 2b6bffcc..816a8dac 100644
--- a/programs/migrations/0017_navigator_navigatortranslation.py
+++ b/programs/migrations/0017_navigator_navigatortranslation.py
@@ -8,42 +8,53 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0016_alter_programtranslation_active'),
+ ("programs", "0016_alter_programtranslation_active"),
]
operations = [
migrations.CreateModel(
- name='Navigator',
+ name="Navigator",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
],
options={
- 'abstract': False,
+ "abstract": False,
},
bases=(parler.models.TranslatableModelMixin, models.Model),
),
migrations.CreateModel(
- name='NavigatorTranslation',
+ name="NavigatorTranslation",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')),
- ('name', models.CharField(max_length=120)),
- ('cell', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None)),
- ('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='email address')),
- ('assistance_link', models.CharField(blank=True, max_length=320)),
- ('description', models.TextField()),
- ('master', parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='programs.navigator')),
- ('program', models.ManyToManyField(to='programs.program')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language")),
+ ("name", models.CharField(max_length=120)),
+ (
+ "cell",
+ phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None),
+ ),
+ ("email", models.EmailField(blank=True, max_length=254, null=True, verbose_name="email address")),
+ ("assistance_link", models.CharField(blank=True, max_length=320)),
+ ("description", models.TextField()),
+ (
+ "master",
+ parler.fields.TranslationsForeignKey(
+ editable=False,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="translations",
+ to="programs.navigator",
+ ),
+ ),
+ ("program", models.ManyToManyField(to="programs.program")),
],
options={
- 'verbose_name': 'navigator Translation',
- 'db_table': 'programs_navigator_translation',
- 'db_tablespace': '',
- 'managed': True,
- 'default_permissions': (),
- 'unique_together': {('language_code', 'master')},
+ "verbose_name": "navigator Translation",
+ "db_table": "programs_navigator_translation",
+ "db_tablespace": "",
+ "managed": True,
+ "default_permissions": (),
+ "unique_together": {("language_code", "master")},
},
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
),
diff --git a/programs/migrations/0018_alter_navigatortranslation_cell.py b/programs/migrations/0018_alter_navigatortranslation_cell.py
index 3eb7fa8c..e6e872bc 100644
--- a/programs/migrations/0018_alter_navigatortranslation_cell.py
+++ b/programs/migrations/0018_alter_navigatortranslation_cell.py
@@ -5,15 +5,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0017_navigator_navigatortranslation'),
+ ("programs", "0017_navigator_navigatortranslation"),
]
operations = [
migrations.AlterField(
- model_name='navigatortranslation',
- name='cell',
+ model_name="navigatortranslation",
+ name="cell",
field=phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None),
),
]
diff --git a/programs/migrations/0019_rename_cell_navigatortranslation_phone_number_and_more.py b/programs/migrations/0019_rename_cell_navigatortranslation_phone_number_and_more.py
index d4f3441e..b9fdb878 100644
--- a/programs/migrations/0019_rename_cell_navigatortranslation_phone_number_and_more.py
+++ b/programs/migrations/0019_rename_cell_navigatortranslation_phone_number_and_more.py
@@ -4,20 +4,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0018_alter_navigatortranslation_cell'),
+ ("programs", "0018_alter_navigatortranslation_cell"),
]
operations = [
migrations.RenameField(
- model_name='navigatortranslation',
- old_name='cell',
- new_name='phone_number',
+ model_name="navigatortranslation",
+ old_name="cell",
+ new_name="phone_number",
),
migrations.AlterField(
- model_name='navigatortranslation',
- name='program',
- field=models.ManyToManyField(related_name='navigator', to='programs.program'),
+ model_name="navigatortranslation",
+ name="program",
+ field=models.ManyToManyField(related_name="navigator", to="programs.program"),
),
]
diff --git a/programs/migrations/0020_remove_navigatortranslation_program.py b/programs/migrations/0020_remove_navigatortranslation_program.py
index b1207a4e..9f588613 100644
--- a/programs/migrations/0020_remove_navigatortranslation_program.py
+++ b/programs/migrations/0020_remove_navigatortranslation_program.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0019_rename_cell_navigatortranslation_phone_number_and_more'),
+ ("programs", "0019_rename_cell_navigatortranslation_phone_number_and_more"),
]
operations = [
migrations.RemoveField(
- model_name='navigatortranslation',
- name='program',
+ model_name="navigatortranslation",
+ name="program",
),
]
diff --git a/programs/migrations/0021_navigatortranslation_program.py b/programs/migrations/0021_navigatortranslation_program.py
index 5d221ac3..39d84b79 100644
--- a/programs/migrations/0021_navigatortranslation_program.py
+++ b/programs/migrations/0021_navigatortranslation_program.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0020_remove_navigatortranslation_program'),
+ ("programs", "0020_remove_navigatortranslation_program"),
]
operations = [
migrations.AddField(
- model_name='navigatortranslation',
- name='program',
- field=models.ManyToManyField(related_name='navigator', to='programs.program'),
+ model_name="navigatortranslation",
+ name="program",
+ field=models.ManyToManyField(related_name="navigator", to="programs.program"),
),
]
diff --git a/programs/migrations/0022_remove_navigatortranslation_assistance_link_and_more.py b/programs/migrations/0022_remove_navigatortranslation_assistance_link_and_more.py
index 1f5f1573..00f47829 100644
--- a/programs/migrations/0022_remove_navigatortranslation_assistance_link_and_more.py
+++ b/programs/migrations/0022_remove_navigatortranslation_assistance_link_and_more.py
@@ -5,42 +5,41 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0021_navigatortranslation_program'),
+ ("programs", "0021_navigatortranslation_program"),
]
operations = [
migrations.RemoveField(
- model_name='navigatortranslation',
- name='assistance_link',
+ model_name="navigatortranslation",
+ name="assistance_link",
),
migrations.RemoveField(
- model_name='navigatortranslation',
- name='email',
+ model_name="navigatortranslation",
+ name="email",
),
migrations.RemoveField(
- model_name='navigatortranslation',
- name='phone_number',
+ model_name="navigatortranslation",
+ name="phone_number",
),
migrations.RemoveField(
- model_name='navigatortranslation',
- name='program',
+ model_name="navigatortranslation",
+ name="program",
),
migrations.AddField(
- model_name='navigator',
- name='email',
- field=models.EmailField(blank=True, max_length=254, null=True, verbose_name='email address'),
+ model_name="navigator",
+ name="email",
+ field=models.EmailField(blank=True, max_length=254, null=True, verbose_name="email address"),
),
migrations.AddField(
- model_name='navigator',
- name='phone_number',
+ model_name="navigator",
+ name="phone_number",
field=phonenumber_field.modelfields.PhoneNumberField(default=0, max_length=128, region=None),
preserve_default=False,
),
migrations.AddField(
- model_name='navigator',
- name='program',
- field=models.ManyToManyField(related_name='navigator', to='programs.program'),
+ model_name="navigator",
+ name="program",
+ field=models.ManyToManyField(related_name="navigator", to="programs.program"),
),
]
diff --git a/programs/migrations/0023_navigator_assistance_link.py b/programs/migrations/0023_navigator_assistance_link.py
index 7d1cf337..df4d1479 100644
--- a/programs/migrations/0023_navigator_assistance_link.py
+++ b/programs/migrations/0023_navigator_assistance_link.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0022_remove_navigatortranslation_assistance_link_and_more'),
+ ("programs", "0022_remove_navigatortranslation_assistance_link_and_more"),
]
operations = [
migrations.AddField(
- model_name='navigator',
- name='assistance_link',
+ model_name="navigator",
+ name="assistance_link",
field=models.CharField(blank=True, max_length=320),
),
]
diff --git a/programs/migrations/0024_remove_navigator_assistance_link_and_more.py b/programs/migrations/0024_remove_navigator_assistance_link_and_more.py
index 7bc05b95..7d151426 100644
--- a/programs/migrations/0024_remove_navigator_assistance_link_and_more.py
+++ b/programs/migrations/0024_remove_navigator_assistance_link_and_more.py
@@ -5,37 +5,36 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0023_navigator_assistance_link'),
+ ("programs", "0023_navigator_assistance_link"),
]
operations = [
migrations.RemoveField(
- model_name='navigator',
- name='assistance_link',
+ model_name="navigator",
+ name="assistance_link",
),
migrations.RemoveField(
- model_name='navigator',
- name='email',
+ model_name="navigator",
+ name="email",
),
migrations.RemoveField(
- model_name='navigator',
- name='phone_number',
+ model_name="navigator",
+ name="phone_number",
),
migrations.AddField(
- model_name='navigatortranslation',
- name='assistance_link',
+ model_name="navigatortranslation",
+ name="assistance_link",
field=models.CharField(blank=True, max_length=320),
),
migrations.AddField(
- model_name='navigatortranslation',
- name='email',
- field=models.EmailField(blank=True, max_length=254, null=True, verbose_name='email address'),
+ model_name="navigatortranslation",
+ name="email",
+ field=models.EmailField(blank=True, max_length=254, null=True, verbose_name="email address"),
),
migrations.AddField(
- model_name='navigatortranslation',
- name='phone_number',
+ model_name="navigatortranslation",
+ name="phone_number",
field=phonenumber_field.modelfields.PhoneNumberField(default=0, max_length=128, region=None),
preserve_default=False,
),
diff --git a/programs/migrations/0025_remove_navigatortranslation_phone_number_and_more.py b/programs/migrations/0025_remove_navigatortranslation_phone_number_and_more.py
index 2953c949..6fdcabe2 100644
--- a/programs/migrations/0025_remove_navigatortranslation_phone_number_and_more.py
+++ b/programs/migrations/0025_remove_navigatortranslation_phone_number_and_more.py
@@ -5,19 +5,18 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0024_remove_navigator_assistance_link_and_more'),
+ ("programs", "0024_remove_navigator_assistance_link_and_more"),
]
operations = [
migrations.RemoveField(
- model_name='navigatortranslation',
- name='phone_number',
+ model_name="navigatortranslation",
+ name="phone_number",
),
migrations.AddField(
- model_name='navigator',
- name='phone_number',
+ model_name="navigator",
+ name="phone_number",
field=phonenumber_field.modelfields.PhoneNumberField(default=0, max_length=128, region=None),
preserve_default=False,
),
diff --git a/programs/migrations/0026_remove_navigator_phone_number_and_more.py b/programs/migrations/0026_remove_navigator_phone_number_and_more.py
index 32797317..4e89bcb4 100644
--- a/programs/migrations/0026_remove_navigator_phone_number_and_more.py
+++ b/programs/migrations/0026_remove_navigator_phone_number_and_more.py
@@ -5,19 +5,18 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0025_remove_navigatortranslation_phone_number_and_more'),
+ ("programs", "0025_remove_navigatortranslation_phone_number_and_more"),
]
operations = [
migrations.RemoveField(
- model_name='navigator',
- name='phone_number',
+ model_name="navigator",
+ name="phone_number",
),
migrations.AddField(
- model_name='navigatortranslation',
- name='phone_number',
+ model_name="navigatortranslation",
+ name="phone_number",
field=phonenumber_field.modelfields.PhoneNumberField(default=0, max_length=128, region=None),
preserve_default=False,
),
diff --git a/programs/migrations/0027_remove_navigatortranslation_phone_number_and_more.py b/programs/migrations/0027_remove_navigatortranslation_phone_number_and_more.py
index 955e8e1e..a1bd4920 100644
--- a/programs/migrations/0027_remove_navigatortranslation_phone_number_and_more.py
+++ b/programs/migrations/0027_remove_navigatortranslation_phone_number_and_more.py
@@ -5,19 +5,18 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0026_remove_navigator_phone_number_and_more'),
+ ("programs", "0026_remove_navigator_phone_number_and_more"),
]
operations = [
migrations.RemoveField(
- model_name='navigatortranslation',
- name='phone_number',
+ model_name="navigatortranslation",
+ name="phone_number",
),
migrations.AddField(
- model_name='navigator',
- name='phone_number',
+ model_name="navigator",
+ name="phone_number",
field=phonenumber_field.modelfields.PhoneNumberField(default=0, max_length=128, region=None),
preserve_default=False,
),
diff --git a/programs/migrations/0028_alter_navigator_phone_number.py b/programs/migrations/0028_alter_navigator_phone_number.py
index 7b057179..193f4ab6 100644
--- a/programs/migrations/0028_alter_navigator_phone_number.py
+++ b/programs/migrations/0028_alter_navigator_phone_number.py
@@ -5,15 +5,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0027_remove_navigatortranslation_phone_number_and_more'),
+ ("programs", "0027_remove_navigatortranslation_phone_number_and_more"),
]
operations = [
migrations.AlterField(
- model_name='navigator',
- name='phone_number',
+ model_name="navigator",
+ name="phone_number",
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None),
),
]
diff --git a/programs/migrations/0029_programtranslation_catagory.py b/programs/migrations/0029_programtranslation_catagory.py
index fdfd2b8e..7a222abd 100644
--- a/programs/migrations/0029_programtranslation_catagory.py
+++ b/programs/migrations/0029_programtranslation_catagory.py
@@ -4,16 +4,15 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0028_alter_navigator_phone_number'),
+ ("programs", "0028_alter_navigator_phone_number"),
]
operations = [
migrations.AddField(
- model_name='programtranslation',
- name='catagory',
- field=models.CharField(default='no category', max_length=120),
+ model_name="programtranslation",
+ name="catagory",
+ field=models.CharField(default="no category", max_length=120),
preserve_default=False,
),
]
diff --git a/programs/migrations/0030_rename_catagory_programtranslation_category.py b/programs/migrations/0030_rename_catagory_programtranslation_category.py
index a8209894..92ff0fc3 100644
--- a/programs/migrations/0030_rename_catagory_programtranslation_category.py
+++ b/programs/migrations/0030_rename_catagory_programtranslation_category.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0029_programtranslation_catagory'),
+ ("programs", "0029_programtranslation_catagory"),
]
operations = [
migrations.RenameField(
- model_name='programtranslation',
- old_name='catagory',
- new_name='category',
+ model_name="programtranslation",
+ old_name="catagory",
+ new_name="category",
),
]
diff --git a/programs/migrations/0031_urgentneed_urgentneedtranslation.py b/programs/migrations/0031_urgentneed_urgentneedtranslation.py
index c60f6554..f73c9765 100644
--- a/programs/migrations/0031_urgentneed_urgentneedtranslation.py
+++ b/programs/migrations/0031_urgentneed_urgentneedtranslation.py
@@ -8,43 +8,54 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0030_rename_catagory_programtranslation_category'),
+ ("programs", "0030_rename_catagory_programtranslation_category"),
]
operations = [
migrations.CreateModel(
- name='UrgentNeed',
+ name="UrgentNeed",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('phone_number', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None)),
- ('type_short', models.CharField(max_length=120)),
- ('active', models.BooleanField(blank=True, default=True)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ (
+ "phone_number",
+ phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None),
+ ),
+ ("type_short", models.CharField(max_length=120)),
+ ("active", models.BooleanField(blank=True, default=True)),
],
options={
- 'abstract': False,
+ "abstract": False,
},
bases=(parler.models.TranslatableModelMixin, models.Model),
),
migrations.CreateModel(
- name='UrgentNeedTranslation',
+ name="UrgentNeedTranslation",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')),
- ('name', models.CharField(max_length=120)),
- ('description', models.TextField()),
- ('link', models.CharField(max_length=320)),
- ('type', models.CharField(max_length=120)),
- ('master', parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='programs.urgentneed')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language")),
+ ("name", models.CharField(max_length=120)),
+ ("description", models.TextField()),
+ ("link", models.CharField(max_length=320)),
+ ("type", models.CharField(max_length=120)),
+ (
+ "master",
+ parler.fields.TranslationsForeignKey(
+ editable=False,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="translations",
+ to="programs.urgentneed",
+ ),
+ ),
],
options={
- 'verbose_name': 'urgent need Translation',
- 'db_table': 'programs_urgentneed_translation',
- 'db_tablespace': '',
- 'managed': True,
- 'default_permissions': (),
- 'unique_together': {('language_code', 'master')},
+ "verbose_name": "urgent need Translation",
+ "db_table": "programs_urgentneed_translation",
+ "db_tablespace": "",
+ "managed": True,
+ "default_permissions": (),
+ "unique_together": {("language_code", "master")},
},
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
),
diff --git a/programs/migrations/0032_urgentneedfunction_urgentneed_functions.py b/programs/migrations/0032_urgentneedfunction_urgentneed_functions.py
index 93264c67..4716ef84 100644
--- a/programs/migrations/0032_urgentneedfunction_urgentneed_functions.py
+++ b/programs/migrations/0032_urgentneedfunction_urgentneed_functions.py
@@ -4,22 +4,21 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0031_urgentneed_urgentneedtranslation'),
+ ("programs", "0031_urgentneed_urgentneedtranslation"),
]
operations = [
migrations.CreateModel(
- name='UrgentNeedFunction',
+ name="UrgentNeedFunction",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=32)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("name", models.CharField(max_length=32)),
],
),
migrations.AddField(
- model_name='urgentneed',
- name='functions',
- field=models.ManyToManyField(related_name='function', to='programs.urgentneedfunction'),
+ model_name="urgentneed",
+ name="functions",
+ field=models.ManyToManyField(related_name="function", to="programs.urgentneedfunction"),
),
]
diff --git a/programs/migrations/0033_alter_urgentneed_functions.py b/programs/migrations/0033_alter_urgentneed_functions.py
index 660b3551..529a8d9c 100644
--- a/programs/migrations/0033_alter_urgentneed_functions.py
+++ b/programs/migrations/0033_alter_urgentneed_functions.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0032_urgentneedfunction_urgentneed_functions'),
+ ("programs", "0032_urgentneedfunction_urgentneed_functions"),
]
operations = [
migrations.AlterField(
- model_name='urgentneed',
- name='functions',
- field=models.ManyToManyField(blank=True, related_name='function', to='programs.urgentneedfunction'),
+ model_name="urgentneed",
+ name="functions",
+ field=models.ManyToManyField(blank=True, related_name="function", to="programs.urgentneedfunction"),
),
]
diff --git a/programs/migrations/0034_alter_urgentneedtranslation_link.py b/programs/migrations/0034_alter_urgentneedtranslation_link.py
index f4f4c6b2..a0e64eb4 100644
--- a/programs/migrations/0034_alter_urgentneedtranslation_link.py
+++ b/programs/migrations/0034_alter_urgentneedtranslation_link.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0033_alter_urgentneed_functions'),
+ ("programs", "0033_alter_urgentneed_functions"),
]
operations = [
migrations.AlterField(
- model_name='urgentneedtranslation',
- name='link',
+ model_name="urgentneedtranslation",
+ name="link",
field=models.CharField(blank=True, max_length=320, null=True),
),
]
diff --git a/programs/migrations/0035_federalpoverylimit.py b/programs/migrations/0035_federalpoverylimit.py
index 3b2dd758..7e2ae4af 100644
--- a/programs/migrations/0035_federalpoverylimit.py
+++ b/programs/migrations/0035_federalpoverylimit.py
@@ -4,25 +4,24 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0034_alter_urgentneedtranslation_link'),
+ ("programs", "0034_alter_urgentneedtranslation_link"),
]
operations = [
migrations.CreateModel(
- name='FederalPoveryLimit',
+ name="FederalPoveryLimit",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('year', models.CharField(max_length=32)),
- ('has_1_person', models.IntegerField()),
- ('has_2_person', models.IntegerField()),
- ('has_3_person', models.IntegerField()),
- ('has_4_person', models.IntegerField()),
- ('has_5_person', models.IntegerField()),
- ('has_6_person', models.IntegerField()),
- ('has_7_person', models.IntegerField()),
- ('has_8_person', models.IntegerField()),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("year", models.CharField(max_length=32)),
+ ("has_1_person", models.IntegerField()),
+ ("has_2_person", models.IntegerField()),
+ ("has_3_person", models.IntegerField()),
+ ("has_4_person", models.IntegerField()),
+ ("has_5_person", models.IntegerField()),
+ ("has_6_person", models.IntegerField()),
+ ("has_7_person", models.IntegerField()),
+ ("has_8_person", models.IntegerField()),
],
),
]
diff --git a/programs/migrations/0036_rename_has_2_person_federalpoverylimit_has_2_people_and_more.py b/programs/migrations/0036_rename_has_2_person_federalpoverylimit_has_2_people_and_more.py
index 0e6ced24..4b797788 100644
--- a/programs/migrations/0036_rename_has_2_person_federalpoverylimit_has_2_people_and_more.py
+++ b/programs/migrations/0036_rename_has_2_person_federalpoverylimit_has_2_people_and_more.py
@@ -4,45 +4,44 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0035_federalpoverylimit'),
+ ("programs", "0035_federalpoverylimit"),
]
operations = [
migrations.RenameField(
- model_name='federalpoverylimit',
- old_name='has_2_person',
- new_name='has_2_people',
+ model_name="federalpoverylimit",
+ old_name="has_2_person",
+ new_name="has_2_people",
),
migrations.RenameField(
- model_name='federalpoverylimit',
- old_name='has_3_person',
- new_name='has_3_people',
+ model_name="federalpoverylimit",
+ old_name="has_3_person",
+ new_name="has_3_people",
),
migrations.RenameField(
- model_name='federalpoverylimit',
- old_name='has_4_person',
- new_name='has_4_people',
+ model_name="federalpoverylimit",
+ old_name="has_4_person",
+ new_name="has_4_people",
),
migrations.RenameField(
- model_name='federalpoverylimit',
- old_name='has_5_person',
- new_name='has_5_people',
+ model_name="federalpoverylimit",
+ old_name="has_5_person",
+ new_name="has_5_people",
),
migrations.RenameField(
- model_name='federalpoverylimit',
- old_name='has_6_person',
- new_name='has_6_people',
+ model_name="federalpoverylimit",
+ old_name="has_6_person",
+ new_name="has_6_people",
),
migrations.RenameField(
- model_name='federalpoverylimit',
- old_name='has_7_person',
- new_name='has_7_people',
+ model_name="federalpoverylimit",
+ old_name="has_7_person",
+ new_name="has_7_people",
),
migrations.RenameField(
- model_name='federalpoverylimit',
- old_name='has_8_person',
- new_name='has_8_people',
+ model_name="federalpoverylimit",
+ old_name="has_8_person",
+ new_name="has_8_people",
),
]
diff --git a/programs/migrations/0037_alter_federalpoverylimit_year.py b/programs/migrations/0037_alter_federalpoverylimit_year.py
index 6ea0c297..c1b848a8 100644
--- a/programs/migrations/0037_alter_federalpoverylimit_year.py
+++ b/programs/migrations/0037_alter_federalpoverylimit_year.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0036_rename_has_2_person_federalpoverylimit_has_2_people_and_more'),
+ ("programs", "0036_rename_has_2_person_federalpoverylimit_has_2_people_and_more"),
]
operations = [
migrations.AlterField(
- model_name='federalpoverylimit',
- name='year',
+ model_name="federalpoverylimit",
+ name="year",
field=models.CharField(max_length=32, unique=True),
),
]
diff --git a/programs/migrations/0038_program_fpl.py b/programs/migrations/0038_program_fpl.py
index 41bc791c..d55276b2 100644
--- a/programs/migrations/0038_program_fpl.py
+++ b/programs/migrations/0038_program_fpl.py
@@ -5,15 +5,20 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0037_alter_federalpoverylimit_year'),
+ ("programs", "0037_alter_federalpoverylimit_year"),
]
operations = [
migrations.AddField(
- model_name='program',
- name='fpl',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='fpl', to='programs.federalpoverylimit'),
+ model_name="program",
+ name="fpl",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ related_name="fpl",
+ to="programs.federalpoverylimit",
+ ),
),
]
diff --git a/programs/migrations/0039_webhookfunction_referrer_referrertranslation.py b/programs/migrations/0039_webhookfunction_referrer_referrertranslation.py
index 22f38634..94de0c56 100644
--- a/programs/migrations/0039_webhookfunction_referrer_referrertranslation.py
+++ b/programs/migrations/0039_webhookfunction_referrer_referrertranslation.py
@@ -7,52 +7,66 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0038_program_fpl'),
+ ("programs", "0038_program_fpl"),
]
operations = [
migrations.CreateModel(
- name='WebHookFunction',
+ name="WebHookFunction",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=64)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("name", models.CharField(max_length=64)),
],
),
migrations.CreateModel(
- name='Referrer',
+ name="Referrer",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('referrer_code', models.CharField(max_length=64, unique=True)),
- ('webhook_url', models.CharField(blank=True, max_length=320, null=True)),
- ('logo', models.ImageField(upload_to='')),
- ('white_label_css', models.FileField(upload_to='')),
- ('primary_navigators', models.ManyToManyField(blank=True, related_name='primary_navigators', to='programs.navigator')),
- ('webhook_functions', models.ManyToManyField(blank=True, related_name='web_hook', to='programs.webhookfunction')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("referrer_code", models.CharField(max_length=64, unique=True)),
+ ("webhook_url", models.CharField(blank=True, max_length=320, null=True)),
+ ("logo", models.ImageField(upload_to="")),
+ ("white_label_css", models.FileField(upload_to="")),
+ (
+ "primary_navigators",
+ models.ManyToManyField(blank=True, related_name="primary_navigators", to="programs.navigator"),
+ ),
+ (
+ "webhook_functions",
+ models.ManyToManyField(blank=True, related_name="web_hook", to="programs.webhookfunction"),
+ ),
],
options={
- 'abstract': False,
+ "abstract": False,
},
bases=(parler.models.TranslatableModelMixin, models.Model),
),
migrations.CreateModel(
- name='ReferrerTranslation',
+ name="ReferrerTranslation",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')),
- ('header_html', models.FileField(upload_to='')),
- ('footer_html', models.FileField(upload_to='')),
- ('consent_text', models.TextField()),
- ('master', parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='programs.referrer')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language")),
+ ("header_html", models.FileField(upload_to="")),
+ ("footer_html", models.FileField(upload_to="")),
+ ("consent_text", models.TextField()),
+ (
+ "master",
+ parler.fields.TranslationsForeignKey(
+ editable=False,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="translations",
+ to="programs.referrer",
+ ),
+ ),
],
options={
- 'verbose_name': 'referrer Translation',
- 'db_table': 'programs_referrer_translation',
- 'db_tablespace': '',
- 'managed': True,
- 'default_permissions': (),
- 'unique_together': {('language_code', 'master')},
+ "verbose_name": "referrer Translation",
+ "db_table": "programs_referrer_translation",
+ "db_tablespace": "",
+ "managed": True,
+ "default_permissions": (),
+ "unique_together": {("language_code", "master")},
},
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
),
diff --git a/programs/migrations/0040_alter_referrer_logo_alter_referrer_white_label_css_and_more.py b/programs/migrations/0040_alter_referrer_logo_alter_referrer_white_label_css_and_more.py
index 2994a8ab..2042297b 100644
--- a/programs/migrations/0040_alter_referrer_logo_alter_referrer_white_label_css_and_more.py
+++ b/programs/migrations/0040_alter_referrer_logo_alter_referrer_white_label_css_and_more.py
@@ -4,35 +4,34 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0039_webhookfunction_referrer_referrertranslation'),
+ ("programs", "0039_webhookfunction_referrer_referrertranslation"),
]
operations = [
migrations.AlterField(
- model_name='referrer',
- name='logo',
- field=models.ImageField(blank=True, null=True, upload_to=''),
+ model_name="referrer",
+ name="logo",
+ field=models.ImageField(blank=True, null=True, upload_to=""),
),
migrations.AlterField(
- model_name='referrer',
- name='white_label_css',
- field=models.FileField(blank=True, null=True, upload_to=''),
+ model_name="referrer",
+ name="white_label_css",
+ field=models.FileField(blank=True, null=True, upload_to=""),
),
migrations.AlterField(
- model_name='referrertranslation',
- name='consent_text',
+ model_name="referrertranslation",
+ name="consent_text",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
- model_name='referrertranslation',
- name='footer_html',
- field=models.FileField(blank=True, null=True, upload_to=''),
+ model_name="referrertranslation",
+ name="footer_html",
+ field=models.FileField(blank=True, null=True, upload_to=""),
),
migrations.AlterField(
- model_name='referrertranslation',
- name='header_html',
- field=models.FileField(blank=True, null=True, upload_to=''),
+ model_name="referrertranslation",
+ name="header_html",
+ field=models.FileField(blank=True, null=True, upload_to=""),
),
]
diff --git a/programs/migrations/0041_remove_referrer_logo_remove_referrer_white_label_css_and_more.py b/programs/migrations/0041_remove_referrer_logo_remove_referrer_white_label_css_and_more.py
index 430d2054..5790c472 100644
--- a/programs/migrations/0041_remove_referrer_logo_remove_referrer_white_label_css_and_more.py
+++ b/programs/migrations/0041_remove_referrer_logo_remove_referrer_white_label_css_and_more.py
@@ -6,70 +6,115 @@
class Migration(migrations.Migration):
dependencies = [
- ('translations', '0002_translation_active'),
- ('programs', '0040_alter_referrer_logo_alter_referrer_white_label_css_and_more'),
+ ("translations", "0002_translation_active"),
+ ("programs", "0040_alter_referrer_logo_alter_referrer_white_label_css_and_more"),
]
operations = [
migrations.RemoveField(
- model_name='referrer',
- name='logo',
+ model_name="referrer",
+ name="logo",
),
migrations.RemoveField(
- model_name='referrer',
- name='white_label_css',
+ model_name="referrer",
+ name="white_label_css",
),
migrations.AddField(
- model_name='program',
- name='active_1',
+ model_name="program",
+ name="active_1",
field=models.BooleanField(blank=True, default=True, null=True),
),
migrations.AddField(
- model_name='program',
- name='apply_button_link_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='apply_button_link', to='translations.translation'),
+ model_name="program",
+ name="apply_button_link_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="apply_button_link",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='program',
- name='category_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='category', to='translations.translation'),
+ model_name="program",
+ name="category_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="category",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='program',
- name='description_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='description', to='translations.translation'),
+ model_name="program",
+ name="description_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="description",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='program',
- name='description_short_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='description_short', to='translations.translation'),
+ model_name="program",
+ name="description_short_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="description_short",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='program',
- name='estimated_application_time_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='estimated_application_time', to='translations.translation'),
+ model_name="program",
+ name="estimated_application_time_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="estimated_application_time",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='program',
- name='estimated_delivery_time_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='estimated_delivery_time', to='translations.translation'),
+ model_name="program",
+ name="estimated_delivery_time_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="estimated_delivery_time",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='program',
- name='learn_more_link_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='learn_more_link', to='translations.translation'),
+ model_name="program",
+ name="learn_more_link_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="learn_more_link",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='program',
- name='name_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='name', to='translations.translation'),
+ model_name="program",
+ name="name_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="name",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='program',
- name='value_type_1',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='value_type', to='translations.translation'),
+ model_name="program",
+ name="value_type_1",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="value_type",
+ to="translations.translation",
+ ),
),
migrations.DeleteModel(
- name='ReferrerTranslation',
+ name="ReferrerTranslation",
),
]
diff --git a/programs/migrations/0042_auto_20230905_1620.py b/programs/migrations/0042_auto_20230905_1620.py
index c18ce108..30638b97 100644
--- a/programs/migrations/0042_auto_20230905_1620.py
+++ b/programs/migrations/0042_auto_20230905_1620.py
@@ -5,44 +5,44 @@
def migrate_translations(apps, schema_editor):
- Program = apps.get_model('programs', 'Program')
- Translation = apps.get_model('translations', 'Translation')
+ Program = apps.get_model("programs", "Program")
+ Translation = apps.get_model("translations", "Translation")
translated_fields = (
- 'description_short',
- 'name',
- 'description',
- 'learn_more_link',
- 'apply_button_link',
- 'value_type',
- 'estimated_delivery_time',
- 'estimated_application_time',
- 'category',
- )
- non_translated_fields = (
- 'active',
- 'legal_status_required',
- 'name_abbreviated'
+ "description_short",
+ "name",
+ "description",
+ "learn_more_link",
+ "apply_button_link",
+ "value_type",
+ "estimated_delivery_time",
+ "estimated_application_time",
+ "category",
)
+ non_translated_fields = ("active", "legal_status_required", "name_abbreviated")
for program in Program.objects.all():
for field in translated_fields:
- translation = Translation.objects.add_translation(f'program.{program.name_abbreviated}_{program.id}-{field}', getattr(program, field))
- setattr(program, field + '_1', translation)
+ translation = Translation.objects.add_translation(
+ f"program.{program.name_abbreviated}_{program.id}-{field}", getattr(program, field)
+ )
+ setattr(program, field + "_1", translation)
for lang in settings.PARLER_LANGUAGES[None]:
- program.set_current_language(lang['code'])
- Translation.objects.edit_translation(f'program.{program.name_abbreviated}_{program.id}-{field}', lang['code'], getattr(program, field), True)
+ program.set_current_language(lang["code"])
+ Translation.objects.edit_translation(
+ f"program.{program.name_abbreviated}_{program.id}-{field}",
+ lang["code"],
+ getattr(program, field),
+ True,
+ )
for field in non_translated_fields:
- setattr(program, field + '_1', getattr(program, field))
+ setattr(program, field + "_1", getattr(program, field))
program.save()
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0041_remove_referrer_logo_remove_referrer_white_label_css_and_more'),
- ('translations', '0003_alter_translation_managers'),
+ ("programs", "0041_remove_referrer_logo_remove_referrer_white_label_css_and_more"),
+ ("translations", "0003_alter_translation_managers"),
]
- operations = [
- migrations.RunPython(migrate_translations)
- ]
+ operations = [migrations.RunPython(migrate_translations)]
diff --git a/programs/migrations/0043_auto_20230906_0938.py b/programs/migrations/0043_auto_20230906_0938.py
index 9360c94f..7d90d3d9 100644
--- a/programs/migrations/0043_auto_20230906_0938.py
+++ b/programs/migrations/0043_auto_20230906_0938.py
@@ -4,34 +4,31 @@
def connect_translations(apps, schema_editor):
- Program = apps.get_model('programs', 'Program')
- Translation = apps.get_model('translations', 'Translation')
+ Program = apps.get_model("programs", "Program")
+ Translation = apps.get_model("translations", "Translation")
translated_fields = (
- 'description_short',
- 'name',
- 'description',
- 'learn_more_link',
- 'apply_button_link',
- 'value_type',
- 'estimated_delivery_time',
- 'estimated_application_time',
- 'category',
+ "description_short",
+ "name",
+ "description",
+ "learn_more_link",
+ "apply_button_link",
+ "value_type",
+ "estimated_delivery_time",
+ "estimated_application_time",
+ "category",
)
for program in Program.objects.all():
for field in translated_fields:
- translation = Translation.objects.get(label=f'program.{program.name_abbreviated}_{program.id}-{field}')
- setattr(program, field + '_1', translation)
+ translation = Translation.objects.get(label=f"program.{program.name_abbreviated}_{program.id}-{field}")
+ setattr(program, field + "_1", translation)
program.save()
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0042_auto_20230905_1620'),
- ('translations', '0003_alter_translation_managers'),
+ ("programs", "0042_auto_20230905_1620"),
+ ("translations", "0003_alter_translation_managers"),
]
- operations = [
- migrations.RunPython(connect_translations)
- ]
+ operations = [migrations.RunPython(connect_translations)]
diff --git a/programs/migrations/0044_program_legal_status_required_1_and_more.py b/programs/migrations/0044_program_legal_status_required_1_and_more.py
index 962a0610..2a6dfc61 100644
--- a/programs/migrations/0044_program_legal_status_required_1_and_more.py
+++ b/programs/migrations/0044_program_legal_status_required_1_and_more.py
@@ -4,20 +4,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0043_auto_20230906_0938'),
+ ("programs", "0043_auto_20230906_0938"),
]
operations = [
migrations.AddField(
- model_name='program',
- name='legal_status_required_1',
+ model_name="program",
+ name="legal_status_required_1",
field=models.CharField(max_length=120, null=True),
),
migrations.AddField(
- model_name='program',
- name='name_abbreviated_1',
+ model_name="program",
+ name="name_abbreviated_1",
field=models.CharField(max_length=120, null=True),
),
]
diff --git a/programs/migrations/0045_auto_20230906_0951.py b/programs/migrations/0045_auto_20230906_0951.py
index 8fe3bc9a..7b670181 100644
--- a/programs/migrations/0045_auto_20230906_0951.py
+++ b/programs/migrations/0045_auto_20230906_0951.py
@@ -4,25 +4,18 @@
def other_data_migrations(apps, _):
- Program = apps.get_model('programs', 'Program')
+ Program = apps.get_model("programs", "Program")
- non_translated_fields = (
- 'active',
- 'legal_status_required',
- 'name_abbreviated'
- )
+ non_translated_fields = ("active", "legal_status_required", "name_abbreviated")
for program in Program.objects.all():
for field in non_translated_fields:
- setattr(program, field + '_1', getattr(program, field))
+ setattr(program, field + "_1", getattr(program, field))
program.save()
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0044_program_legal_status_required_1_and_more'),
+ ("programs", "0044_program_legal_status_required_1_and_more"),
]
- operations = [
- migrations.RunPython(other_data_migrations)
- ]
+ operations = [migrations.RunPython(other_data_migrations)]
diff --git a/programs/migrations/0046_delete_programtranslation.py b/programs/migrations/0046_delete_programtranslation.py
index 7b925bd8..d72732d6 100644
--- a/programs/migrations/0046_delete_programtranslation.py
+++ b/programs/migrations/0046_delete_programtranslation.py
@@ -4,13 +4,12 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0045_auto_20230906_0951'),
+ ("programs", "0045_auto_20230906_0951"),
]
operations = [
migrations.DeleteModel(
- name='ProgramTranslation',
+ name="ProgramTranslation",
),
]
diff --git a/programs/migrations/0047_alter_program_active_1_and_more.py b/programs/migrations/0047_alter_program_active_1_and_more.py
index 2fc46273..c1312984 100644
--- a/programs/migrations/0047_alter_program_active_1_and_more.py
+++ b/programs/migrations/0047_alter_program_active_1_and_more.py
@@ -5,71 +5,98 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('translations', '0003_alter_translation_managers'),
- ('programs', '0046_delete_programtranslation'),
+ ("translations", "0003_alter_translation_managers"),
+ ("programs", "0046_delete_programtranslation"),
]
operations = [
migrations.AlterField(
- model_name='program',
- name='active_1',
+ model_name="program",
+ name="active_1",
field=models.BooleanField(blank=True, default=True),
),
migrations.AlterField(
- model_name='program',
- name='apply_button_link_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='apply_button_link', to='translations.translation'),
+ model_name="program",
+ name="apply_button_link_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="apply_button_link",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='category_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='category', to='translations.translation'),
+ model_name="program",
+ name="category_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT, related_name="category", to="translations.translation"
+ ),
),
migrations.AlterField(
- model_name='program',
- name='description_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='description', to='translations.translation'),
+ model_name="program",
+ name="description_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT, related_name="description", to="translations.translation"
+ ),
),
migrations.AlterField(
- model_name='program',
- name='description_short_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='description_short', to='translations.translation'),
+ model_name="program",
+ name="description_short_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="description_short",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='estimated_application_time_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='estimated_application_time', to='translations.translation'),
+ model_name="program",
+ name="estimated_application_time_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="estimated_application_time",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='estimated_delivery_time_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='estimated_delivery_time', to='translations.translation'),
+ model_name="program",
+ name="estimated_delivery_time_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="estimated_delivery_time",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='learn_more_link_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='learn_more_link', to='translations.translation'),
+ model_name="program",
+ name="learn_more_link_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="learn_more_link",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='legal_status_required_1',
+ model_name="program",
+ name="legal_status_required_1",
field=models.CharField(max_length=120),
),
migrations.AlterField(
- model_name='program',
- name='name_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='name', to='translations.translation'),
+ model_name="program",
+ name="name_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT, related_name="name", to="translations.translation"
+ ),
),
migrations.AlterField(
- model_name='program',
- name='name_abbreviated_1',
+ model_name="program",
+ name="name_abbreviated_1",
field=models.CharField(max_length=120),
),
migrations.AlterField(
- model_name='program',
- name='value_type_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='value_type', to='translations.translation'),
+ model_name="program",
+ name="value_type_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT, related_name="value_type", to="translations.translation"
+ ),
),
]
diff --git a/programs/migrations/0048_rename_active_1_program_active_and_more.py b/programs/migrations/0048_rename_active_1_program_active_and_more.py
index 7bec3c84..fd66ea2b 100644
--- a/programs/migrations/0048_rename_active_1_program_active_and_more.py
+++ b/programs/migrations/0048_rename_active_1_program_active_and_more.py
@@ -4,70 +4,69 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0047_alter_program_active_1_and_more'),
+ ("programs", "0047_alter_program_active_1_and_more"),
]
operations = [
migrations.RenameField(
- model_name='program',
- old_name='active_1',
- new_name='active',
+ model_name="program",
+ old_name="active_1",
+ new_name="active",
),
migrations.RenameField(
- model_name='program',
- old_name='apply_button_link_1',
- new_name='apply_button_link',
+ model_name="program",
+ old_name="apply_button_link_1",
+ new_name="apply_button_link",
),
migrations.RenameField(
- model_name='program',
- old_name='category_1',
- new_name='category',
+ model_name="program",
+ old_name="category_1",
+ new_name="category",
),
migrations.RenameField(
- model_name='program',
- old_name='description_1',
- new_name='description',
+ model_name="program",
+ old_name="description_1",
+ new_name="description",
),
migrations.RenameField(
- model_name='program',
- old_name='description_short_1',
- new_name='description_short',
+ model_name="program",
+ old_name="description_short_1",
+ new_name="description_short",
),
migrations.RenameField(
- model_name='program',
- old_name='estimated_application_time_1',
- new_name='estimated_application_time',
+ model_name="program",
+ old_name="estimated_application_time_1",
+ new_name="estimated_application_time",
),
migrations.RenameField(
- model_name='program',
- old_name='estimated_delivery_time_1',
- new_name='estimated_delivery_time',
+ model_name="program",
+ old_name="estimated_delivery_time_1",
+ new_name="estimated_delivery_time",
),
migrations.RenameField(
- model_name='program',
- old_name='learn_more_link_1',
- new_name='learn_more_link',
+ model_name="program",
+ old_name="learn_more_link_1",
+ new_name="learn_more_link",
),
migrations.RenameField(
- model_name='program',
- old_name='legal_status_required_1',
- new_name='legal_status_required',
+ model_name="program",
+ old_name="legal_status_required_1",
+ new_name="legal_status_required",
),
migrations.RenameField(
- model_name='program',
- old_name='name_1',
- new_name='name',
+ model_name="program",
+ old_name="name_1",
+ new_name="name",
),
migrations.RenameField(
- model_name='program',
- old_name='name_abbreviated_1',
- new_name='name_abbreviated',
+ model_name="program",
+ old_name="name_abbreviated_1",
+ new_name="name_abbreviated",
),
migrations.RenameField(
- model_name='program',
- old_name='value_type_1',
- new_name='value_type',
+ model_name="program",
+ old_name="value_type_1",
+ new_name="value_type",
),
]
diff --git a/programs/migrations/0049_navigator_assistance_link_1_navigator_description_1_and_more.py b/programs/migrations/0049_navigator_assistance_link_1_navigator_description_1_and_more.py
index 206e9e9d..c6550838 100644
--- a/programs/migrations/0049_navigator_assistance_link_1_navigator_description_1_and_more.py
+++ b/programs/migrations/0049_navigator_assistance_link_1_navigator_description_1_and_more.py
@@ -5,96 +5,177 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('translations', '0003_alter_translation_managers'),
- ('programs', '0048_rename_active_1_program_active_and_more'),
+ ("translations", "0003_alter_translation_managers"),
+ ("programs", "0048_rename_active_1_program_active_and_more"),
]
operations = [
migrations.AddField(
- model_name='navigator',
- name='assistance_link_1',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='navigator_assistance_link', to='translations.translation'),
+ model_name="navigator",
+ name="assistance_link_1",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="navigator_assistance_link",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='navigator',
- name='description_1',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='navigator_name_description', to='translations.translation'),
+ model_name="navigator",
+ name="description_1",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="navigator_name_description",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='navigator',
- name='email_1',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='navigator_email', to='translations.translation'),
+ model_name="navigator",
+ name="email_1",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="navigator_email",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='navigator',
- name='name_1',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='navigator_name', to='translations.translation'),
+ model_name="navigator",
+ name="name_1",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="navigator_name",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='urgentneed',
- name='description_1',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='urgent_need_description', to='translations.translation'),
+ model_name="urgentneed",
+ name="description_1",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="urgent_need_description",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='urgentneed',
- name='link_1',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='urgent_need_link', to='translations.translation'),
+ model_name="urgentneed",
+ name="link_1",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="urgent_need_link",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='urgentneed',
- name='name_1',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='urgent_need_name', to='translations.translation'),
+ model_name="urgentneed",
+ name="name_1",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="urgent_need_name",
+ to="translations.translation",
+ ),
),
migrations.AddField(
- model_name='urgentneed',
- name='type_1',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='urgent_need_type', to='translations.translation'),
+ model_name="urgentneed",
+ name="type_1",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="urgent_need_type",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='apply_button_link',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_apply_button_link', to='translations.translation'),
+ model_name="program",
+ name="apply_button_link",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="program_apply_button_link",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='category',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_category', to='translations.translation'),
+ model_name="program",
+ name="category",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="program_category",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='description',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_description', to='translations.translation'),
+ model_name="program",
+ name="description",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="program_description",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='description_short',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_description_short', to='translations.translation'),
+ model_name="program",
+ name="description_short",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="program_description_short",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='estimated_application_time',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_estimated_application_time', to='translations.translation'),
+ model_name="program",
+ name="estimated_application_time",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="program_estimated_application_time",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='estimated_delivery_time',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_estimated_delivery_time', to='translations.translation'),
+ model_name="program",
+ name="estimated_delivery_time",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="program_estimated_delivery_time",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='learn_more_link',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_learn_more_link', to='translations.translation'),
+ model_name="program",
+ name="learn_more_link",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="program_learn_more_link",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='program',
- name='name',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_name', to='translations.translation'),
+ model_name="program",
+ name="name",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT, related_name="program_name", to="translations.translation"
+ ),
),
migrations.AlterField(
- model_name='program',
- name='value_type',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='program_value_type', to='translations.translation'),
+ model_name="program",
+ name="value_type",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="program_value_type",
+ to="translations.translation",
+ ),
),
]
diff --git a/programs/migrations/0050_auto_20230906_1427.py b/programs/migrations/0050_auto_20230906_1427.py
index 6a7e0494..f753e67e 100644
--- a/programs/migrations/0050_auto_20230906_1427.py
+++ b/programs/migrations/0050_auto_20230906_1427.py
@@ -5,52 +5,59 @@
def urgent_need_migrations(apps, _):
- UrgentNeed = apps.get_model('programs', 'UrgentNeed')
- Translation = apps.get_model('translations', 'Translation')
+ UrgentNeed = apps.get_model("programs", "UrgentNeed")
+ Translation = apps.get_model("translations", "Translation")
translated_fields = (
- 'name',
- 'description',
- 'link',
- 'type',
+ "name",
+ "description",
+ "link",
+ "type",
)
for urgent_need in UrgentNeed.objects.all():
main_name = urgent_need.name
for field in translated_fields:
- translation = Translation.objects.add_translation(f'urgent_need.{main_name}_{urgent_need.id}-{field}', getattr(urgent_need, field))
- setattr(urgent_need, field + '_1', translation)
+ translation = Translation.objects.add_translation(
+ f"urgent_need.{main_name}_{urgent_need.id}-{field}", getattr(urgent_need, field)
+ )
+ setattr(urgent_need, field + "_1", translation)
for lang in settings.PARLER_LANGUAGES[None]:
- urgent_need.set_current_language(lang['code'])
- Translation.objects.edit_translation(f'urgent_need.{main_name}_{urgent_need.id}-{field}', lang['code'], getattr(urgent_need, field), True)
+ urgent_need.set_current_language(lang["code"])
+ Translation.objects.edit_translation(
+ f"urgent_need.{main_name}_{urgent_need.id}-{field}", lang["code"], getattr(urgent_need, field), True
+ )
urgent_need.save()
def navigator_migrations(apps, _):
- Navigator = apps.get_model('programs', 'Navigator')
- Translation = apps.get_model('translations', 'Translation')
+ Navigator = apps.get_model("programs", "Navigator")
+ Translation = apps.get_model("translations", "Translation")
translated_fields = (
- 'name',
- 'email',
- 'assistance_link',
- 'description',
+ "name",
+ "email",
+ "assistance_link",
+ "description",
)
for navigator in Navigator.objects.all():
main_name = navigator.name
for field in translated_fields:
- translation = Translation.objects.add_translation(f'navigator.{main_name}_{navigator.id}-{field}', getattr(navigator, field))
- setattr(navigator, field + '_1', translation)
+ translation = Translation.objects.add_translation(
+ f"navigator.{main_name}_{navigator.id}-{field}", getattr(navigator, field)
+ )
+ setattr(navigator, field + "_1", translation)
for lang in settings.PARLER_LANGUAGES[None]:
- navigator.set_current_language(lang['code'])
- Translation.objects.edit_translation(f'navigator.{main_name}_{navigator.id}-{field}', lang['code'], getattr(navigator, field), True)
+ navigator.set_current_language(lang["code"])
+ Translation.objects.edit_translation(
+ f"navigator.{main_name}_{navigator.id}-{field}", lang["code"], getattr(navigator, field), True
+ )
navigator.save()
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0049_navigator_assistance_link_1_navigator_description_1_and_more'),
- ('translations', '0003_alter_translation_managers'),
+ ("programs", "0049_navigator_assistance_link_1_navigator_description_1_and_more"),
+ ("translations", "0003_alter_translation_managers"),
]
operations = [
diff --git a/programs/migrations/0051_alter_urgentneedtranslation_unique_together_and_more.py b/programs/migrations/0051_alter_urgentneedtranslation_unique_together_and_more.py
index c00907f1..bc62b8c7 100644
--- a/programs/migrations/0051_alter_urgentneedtranslation_unique_together_and_more.py
+++ b/programs/migrations/0051_alter_urgentneedtranslation_unique_together_and_more.py
@@ -4,24 +4,23 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0050_auto_20230906_1427'),
+ ("programs", "0050_auto_20230906_1427"),
]
operations = [
migrations.AlterUniqueTogether(
- name='urgentneedtranslation',
+ name="urgentneedtranslation",
unique_together=None,
),
migrations.RemoveField(
- model_name='urgentneedtranslation',
- name='master',
+ model_name="urgentneedtranslation",
+ name="master",
),
migrations.DeleteModel(
- name='NavigatorTranslation',
+ name="NavigatorTranslation",
),
migrations.DeleteModel(
- name='UrgentNeedTranslation',
+ name="UrgentNeedTranslation",
),
]
diff --git a/programs/migrations/0052_alter_navigator_assistance_link_1_and_more.py b/programs/migrations/0052_alter_navigator_assistance_link_1_and_more.py
index 865c43c9..73e8c3ee 100644
--- a/programs/migrations/0052_alter_navigator_assistance_link_1_and_more.py
+++ b/programs/migrations/0052_alter_navigator_assistance_link_1_and_more.py
@@ -5,51 +5,82 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('translations', '0003_alter_translation_managers'),
- ('programs', '0051_alter_urgentneedtranslation_unique_together_and_more'),
+ ("translations", "0003_alter_translation_managers"),
+ ("programs", "0051_alter_urgentneedtranslation_unique_together_and_more"),
]
operations = [
migrations.AlterField(
- model_name='navigator',
- name='assistance_link_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='navigator_assistance_link', to='translations.translation'),
+ model_name="navigator",
+ name="assistance_link_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="navigator_assistance_link",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='navigator',
- name='description_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='navigator_name_description', to='translations.translation'),
+ model_name="navigator",
+ name="description_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="navigator_name_description",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='navigator',
- name='email_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='navigator_email', to='translations.translation'),
+ model_name="navigator",
+ name="email_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="navigator_email",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='navigator',
- name='name_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='navigator_name', to='translations.translation'),
+ model_name="navigator",
+ name="name_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="navigator_name",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='urgentneed',
- name='description_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='urgent_need_description', to='translations.translation'),
+ model_name="urgentneed",
+ name="description_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="urgent_need_description",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='urgentneed',
- name='link_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='urgent_need_link', to='translations.translation'),
+ model_name="urgentneed",
+ name="link_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="urgent_need_link",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='urgentneed',
- name='name_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='urgent_need_name', to='translations.translation'),
+ model_name="urgentneed",
+ name="name_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="urgent_need_name",
+ to="translations.translation",
+ ),
),
migrations.AlterField(
- model_name='urgentneed',
- name='type_1',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='urgent_need_type', to='translations.translation'),
+ model_name="urgentneed",
+ name="type_1",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.PROTECT,
+ related_name="urgent_need_type",
+ to="translations.translation",
+ ),
),
]
diff --git a/programs/migrations/0053_rename_assistance_link_1_navigator_assistance_link_and_more.py b/programs/migrations/0053_rename_assistance_link_1_navigator_assistance_link_and_more.py
index cb2bd7bc..3595687a 100644
--- a/programs/migrations/0053_rename_assistance_link_1_navigator_assistance_link_and_more.py
+++ b/programs/migrations/0053_rename_assistance_link_1_navigator_assistance_link_and_more.py
@@ -4,50 +4,49 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0052_alter_navigator_assistance_link_1_and_more'),
+ ("programs", "0052_alter_navigator_assistance_link_1_and_more"),
]
operations = [
migrations.RenameField(
- model_name='navigator',
- old_name='assistance_link_1',
- new_name='assistance_link',
+ model_name="navigator",
+ old_name="assistance_link_1",
+ new_name="assistance_link",
),
migrations.RenameField(
- model_name='navigator',
- old_name='description_1',
- new_name='description',
+ model_name="navigator",
+ old_name="description_1",
+ new_name="description",
),
migrations.RenameField(
- model_name='navigator',
- old_name='email_1',
- new_name='email',
+ model_name="navigator",
+ old_name="email_1",
+ new_name="email",
),
migrations.RenameField(
- model_name='navigator',
- old_name='name_1',
- new_name='name',
+ model_name="navigator",
+ old_name="name_1",
+ new_name="name",
),
migrations.RenameField(
- model_name='urgentneed',
- old_name='description_1',
- new_name='description',
+ model_name="urgentneed",
+ old_name="description_1",
+ new_name="description",
),
migrations.RenameField(
- model_name='urgentneed',
- old_name='link_1',
- new_name='link',
+ model_name="urgentneed",
+ old_name="link_1",
+ new_name="link",
),
migrations.RenameField(
- model_name='urgentneed',
- old_name='name_1',
- new_name='name',
+ model_name="urgentneed",
+ old_name="name_1",
+ new_name="name",
),
migrations.RenameField(
- model_name='urgentneed',
- old_name='type_1',
- new_name='type',
+ model_name="urgentneed",
+ old_name="type_1",
+ new_name="type",
),
]
diff --git a/programs/migrations/0054_navigator_external_name_program_external_name_and_more.py b/programs/migrations/0054_navigator_external_name_program_external_name_and_more.py
index a76fd8d9..2900d027 100644
--- a/programs/migrations/0054_navigator_external_name_program_external_name_and_more.py
+++ b/programs/migrations/0054_navigator_external_name_program_external_name_and_more.py
@@ -4,25 +4,24 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0053_rename_assistance_link_1_navigator_assistance_link_and_more'),
+ ("programs", "0053_rename_assistance_link_1_navigator_assistance_link_and_more"),
]
operations = [
migrations.AddField(
- model_name='navigator',
- name='external_name',
+ model_name="navigator",
+ name="external_name",
field=models.CharField(max_length=120, null=True, unique=True),
),
migrations.AddField(
- model_name='program',
- name='external_name',
+ model_name="program",
+ name="external_name",
field=models.CharField(max_length=120, null=True, unique=True),
),
migrations.AddField(
- model_name='urgentneed',
- name='external_name',
+ model_name="urgentneed",
+ name="external_name",
field=models.CharField(max_length=120, null=True, unique=True),
),
]
diff --git a/programs/migrations/0055_alter_navigator_external_name_and_more.py b/programs/migrations/0055_alter_navigator_external_name_and_more.py
index 941c9468..56bc4415 100644
--- a/programs/migrations/0055_alter_navigator_external_name_and_more.py
+++ b/programs/migrations/0055_alter_navigator_external_name_and_more.py
@@ -4,25 +4,24 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0054_navigator_external_name_program_external_name_and_more'),
+ ("programs", "0054_navigator_external_name_program_external_name_and_more"),
]
operations = [
migrations.AlterField(
- model_name='navigator',
- name='external_name',
+ model_name="navigator",
+ name="external_name",
field=models.CharField(blank=True, max_length=120, null=True, unique=True),
),
migrations.AlterField(
- model_name='program',
- name='external_name',
+ model_name="program",
+ name="external_name",
field=models.CharField(blank=True, max_length=120, null=True, unique=True),
),
migrations.AlterField(
- model_name='urgentneed',
- name='external_name',
+ model_name="urgentneed",
+ name="external_name",
field=models.CharField(blank=True, max_length=120, null=True, unique=True),
),
]
diff --git a/programs/migrations/0056_urgentneedcategory_remove_urgentneed_type_short_and_more.py b/programs/migrations/0056_urgentneedcategory_remove_urgentneed_type_short_and_more.py
index 9f7f540b..79f7af3d 100644
--- a/programs/migrations/0056_urgentneedcategory_remove_urgentneed_type_short_and_more.py
+++ b/programs/migrations/0056_urgentneedcategory_remove_urgentneed_type_short_and_more.py
@@ -4,26 +4,25 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0055_alter_navigator_external_name_and_more'),
+ ("programs", "0055_alter_navigator_external_name_and_more"),
]
operations = [
migrations.CreateModel(
- name='UrgentNeedCategory',
+ name="UrgentNeedCategory",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=120)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("name", models.CharField(max_length=120)),
],
),
migrations.RemoveField(
- model_name='urgentneed',
- name='type_short',
+ model_name="urgentneed",
+ name="type_short",
),
migrations.AddField(
- model_name='urgentneed',
- name='type_short',
- field=models.ManyToManyField(related_name='type_short', to='programs.urgentneedcategory'),
+ model_name="urgentneed",
+ name="type_short",
+ field=models.ManyToManyField(related_name="type_short", to="programs.urgentneedcategory"),
),
]
diff --git a/programs/migrations/0057_alter_urgentneedcategory_options_and_more.py b/programs/migrations/0057_alter_urgentneedcategory_options_and_more.py
index ce202af1..5dc54ad4 100644
--- a/programs/migrations/0057_alter_urgentneedcategory_options_and_more.py
+++ b/programs/migrations/0057_alter_urgentneedcategory_options_and_more.py
@@ -5,31 +5,39 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0056_urgentneedcategory_remove_urgentneed_type_short_and_more'),
+ ("programs", "0056_urgentneedcategory_remove_urgentneed_type_short_and_more"),
]
operations = [
migrations.AlterModelOptions(
- name='urgentneedcategory',
- options={'verbose_name_plural': 'Urgent Need Categories'},
+ name="urgentneedcategory",
+ options={"verbose_name_plural": "Urgent Need Categories"},
),
migrations.RemoveField(
- model_name='program',
- name='legal_status_required',
+ model_name="program",
+ name="legal_status_required",
),
migrations.AlterField(
- model_name='urgentneed',
- name='type_short',
- field=models.ManyToManyField(related_name='urgent_needs', to='programs.urgentneedcategory'),
+ model_name="urgentneed",
+ name="type_short",
+ field=models.ManyToManyField(related_name="urgent_needs", to="programs.urgentneedcategory"),
),
migrations.CreateModel(
- name='LegalStatus',
+ name="LegalStatus",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('status', models.CharField(max_length=256)),
- ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='programs.legalstatus')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("status", models.CharField(max_length=256)),
+ (
+ "parent",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ related_name="children",
+ to="programs.legalstatus",
+ ),
+ ),
],
),
]
diff --git a/programs/migrations/0058_program_legal_status_required.py b/programs/migrations/0058_program_legal_status_required.py
index 16b01d6b..5653cdbb 100644
--- a/programs/migrations/0058_program_legal_status_required.py
+++ b/programs/migrations/0058_program_legal_status_required.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0057_alter_urgentneedcategory_options_and_more'),
+ ("programs", "0057_alter_urgentneedcategory_options_and_more"),
]
operations = [
migrations.AddField(
- model_name='program',
- name='legal_status_required',
- field=models.ManyToManyField(related_name='programs', to='programs.legalstatus'),
+ model_name="program",
+ name="legal_status_required",
+ field=models.ManyToManyField(related_name="programs", to="programs.legalstatus"),
),
]
diff --git a/programs/migrations/0059_alter_program_legal_status_required.py b/programs/migrations/0059_alter_program_legal_status_required.py
index 7513d4f5..81f1e4e1 100644
--- a/programs/migrations/0059_alter_program_legal_status_required.py
+++ b/programs/migrations/0059_alter_program_legal_status_required.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('programs', '0058_program_legal_status_required'),
+ ("programs", "0058_program_legal_status_required"),
]
operations = [
migrations.AlterField(
- model_name='program',
- name='legal_status_required',
- field=models.ManyToManyField(blank=True, related_name='programs', to='programs.legalstatus'),
+ model_name="program",
+ name="legal_status_required",
+ field=models.ManyToManyField(blank=True, related_name="programs", to="programs.legalstatus"),
),
]
diff --git a/programs/migrations/0060_alter_navigator_program.py b/programs/migrations/0060_alter_navigator_program.py
index bf16d611..d2790a19 100644
--- a/programs/migrations/0060_alter_navigator_program.py
+++ b/programs/migrations/0060_alter_navigator_program.py
@@ -12,8 +12,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name="navigator",
name="program",
- field=models.ManyToManyField(
- blank=True, related_name="navigator", to="programs.program"
- ),
+ field=models.ManyToManyField(blank=True, related_name="navigator", to="programs.program"),
),
]
diff --git a/programs/migrations/0061_referrer_remove_programs.py b/programs/migrations/0061_referrer_remove_programs.py
index fd76f695..8fd80118 100644
--- a/programs/migrations/0061_referrer_remove_programs.py
+++ b/programs/migrations/0061_referrer_remove_programs.py
@@ -12,8 +12,6 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name="referrer",
name="remove_programs",
- field=models.ManyToManyField(
- blank=True, related_name="removed_programs", to="programs.program"
- ),
+ field=models.ManyToManyField(blank=True, related_name="removed_programs", to="programs.program"),
),
]
diff --git a/programs/migrations/0062_document_program_documents.py b/programs/migrations/0062_document_program_documents.py
index f62a9659..217a5457 100644
--- a/programs/migrations/0062_document_program_documents.py
+++ b/programs/migrations/0062_document_program_documents.py
@@ -37,8 +37,6 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name="program",
name="documents",
- field=models.ManyToManyField(
- blank=True, related_name="program_documents", to="programs.document"
- ),
+ field=models.ManyToManyField(blank=True, related_name="program_documents", to="programs.document"),
),
]
diff --git a/programs/migrations/0062_navigatorcounties_navigator_counties.py b/programs/migrations/0062_navigatorcounties_navigator_counties.py
index b0212add..df2da244 100644
--- a/programs/migrations/0062_navigatorcounties_navigator_counties.py
+++ b/programs/migrations/0062_navigatorcounties_navigator_counties.py
@@ -27,8 +27,6 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name="navigator",
name="counties",
- field=models.ManyToManyField(
- blank=True, related_name="navigator", to="programs.navigatorcounties"
- ),
+ field=models.ManyToManyField(blank=True, related_name="navigator", to="programs.navigatorcounties"),
),
]
diff --git a/programs/migrations/0063_navigatorcounty_delete_navigatorcounties_and_more.py b/programs/migrations/0063_navigatorcounty_delete_navigatorcounties_and_more.py
index dcf1a554..1f146ef6 100644
--- a/programs/migrations/0063_navigatorcounty_delete_navigatorcounties_and_more.py
+++ b/programs/migrations/0063_navigatorcounty_delete_navigatorcounties_and_more.py
@@ -30,8 +30,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name="navigator",
name="counties",
- field=models.ManyToManyField(
- blank=True, related_name="navigator", to="programs.navigatorcounty"
- ),
+ field=models.ManyToManyField(blank=True, related_name="navigator", to="programs.navigatorcounty"),
),
]
diff --git a/programs/migrations/0066_auto_20240130_1146.py b/programs/migrations/0066_auto_20240130_1146.py
index fde4ea86..7ff778d7 100644
--- a/programs/migrations/0066_auto_20240130_1146.py
+++ b/programs/migrations/0066_auto_20240130_1146.py
@@ -4,19 +4,17 @@
def add_warning(apps, schema_editor):
- Program = apps.get_model('programs', 'Program')
- UrgentNeed = apps.get_model('programs', 'UrgentNeed')
- Translation = apps.get_model('translations', 'Translation')
+ Program = apps.get_model("programs", "Program")
+ UrgentNeed = apps.get_model("programs", "UrgentNeed")
+ Translation = apps.get_model("translations", "Translation")
for need in UrgentNeed.objects.all():
- translation = Translation.objects.add_translation(
- f'urgent_need.{need.name.text}-{need.id}_warning', ''
- )
+ translation = Translation.objects.add_translation(f"urgent_need.{need.name.text}-{need.id}_warning", "")
UrgentNeed.objects.filter(pk=need.id).update(warning=translation.id)
for program in Program.objects.all():
translation = Translation.objects.add_translation(
- f'programs.{program.name_abbreviated}-{program.id}_warning', ''
+ f"programs.{program.name_abbreviated}-{program.id}_warning", ""
)
Program.objects.filter(pk=program.id).update(warning=translation.id)
diff --git a/programs/migrations/0070_auto_20240506_1817.py b/programs/migrations/0070_auto_20240506_1817.py
index de348500..f292b117 100644
--- a/programs/migrations/0070_auto_20240506_1817.py
+++ b/programs/migrations/0070_auto_20240506_1817.py
@@ -3,12 +3,12 @@
def add_estimated_value(apps, schema_editor):
- Program = apps.get_model('programs', 'Program')
- Translation = apps.get_model('translations', 'Translation')
+ Program = apps.get_model("programs", "Program")
+ Translation = apps.get_model("translations", "Translation")
for program in Program.objects.all():
translation = Translation.objects.add_translation(
- f'programs.{program.name_abbreviated}-{program.id}_estimated_value', ''
+ f"programs.{program.name_abbreviated}-{program.id}_estimated_value", ""
)
Program.objects.filter(pk=program.id).update(estimated_value=translation.id)
diff --git a/programs/models.py b/programs/models.py
index ed553084..4e2a9c3c 100644
--- a/programs/models.py
+++ b/programs/models.py
@@ -34,8 +34,7 @@ def __str__(self):
class LegalStatus(models.Model):
status = models.CharField(max_length=256)
- parent = models.ForeignKey(
- "self", related_name="children", blank=True, null=True, on_delete=models.SET_NULL)
+ parent = models.ForeignKey("self", related_name="children", blank=True, null=True, on_delete=models.SET_NULL)
def __str__(self):
return self.status
@@ -45,8 +44,7 @@ class DocumentManager(models.Manager):
translated_fields = ("text",)
def new_document(self, external_name):
- translation = Translation.objects.add_translation(
- f"document.{external_name}_temporary_key")
+ translation = Translation.objects.add_translation(f"document.{external_name}_temporary_key")
document = self.create(external_name=external_name, text=translation)
@@ -57,10 +55,8 @@ def new_document(self, external_name):
class Document(models.Model):
- external_name = models.CharField(
- max_length=120, blank=True, null=True, unique=True)
- text = models.ForeignKey(Translation, related_name="documents",
- blank=False, null=False, on_delete=models.PROTECT)
+ external_name = models.CharField(max_length=120, blank=True, null=True, unique=True)
+ text = models.ForeignKey(Translation, related_name="documents", blank=False, null=False, on_delete=models.PROTECT)
objects = DocumentManager()
@@ -92,8 +88,7 @@ def new_program(self, name_abbreviated):
)
# try to set the external_name to the name_abbreviated
- external_name_exists = self.filter(
- external_name=name_abbreviated).count() > 0
+ external_name_exists = self.filter(external_name=name_abbreviated).count() > 0
program = self.create(
name_abbreviated=name_abbreviated,
@@ -116,16 +111,12 @@ def new_program(self, name_abbreviated):
# logic for eligibility and value is stored.
class Program(models.Model):
name_abbreviated = models.CharField(max_length=120)
- external_name = models.CharField(
- max_length=120, blank=True, null=True, unique=True)
- legal_status_required = models.ManyToManyField(
- LegalStatus, related_name="programs", blank=True)
- documents = models.ManyToManyField(
- Document, related_name="program_documents", blank=True)
+ external_name = models.CharField(max_length=120, blank=True, null=True, unique=True)
+ legal_status_required = models.ManyToManyField(LegalStatus, related_name="programs", blank=True)
+ documents = models.ManyToManyField(Document, related_name="program_documents", blank=True)
active = models.BooleanField(blank=True, default=True)
low_confidence = models.BooleanField(blank=True, null=False, default=False)
- fpl = models.ForeignKey(FederalPoveryLimit, related_name="fpl",
- blank=True, null=True, on_delete=models.SET_NULL)
+ fpl = models.ForeignKey(FederalPoveryLimit, related_name="fpl", blank=True, null=True, on_delete=models.SET_NULL)
description_short = models.ForeignKey(
Translation, related_name="program_description_short", blank=False, null=False, on_delete=models.PROTECT
@@ -241,8 +232,7 @@ class UrgentNeedManager(models.Manager):
def new_urgent_need(self, name, phone_number):
translations = {}
for field in self.translated_fields:
- translations[field] = Translation.objects.add_translation(
- f"urgent_need.{name}_temporary_key-{field}")
+ translations[field] = Translation.objects.add_translation(f"urgent_need.{name}_temporary_key-{field}")
# try to set the external_name to the name
external_name_exists = self.filter(external_name=name).count() > 0
@@ -263,15 +253,12 @@ def new_urgent_need(self, name, phone_number):
class UrgentNeed(models.Model):
- external_name = models.CharField(
- max_length=120, blank=True, null=True, unique=True)
+ external_name = models.CharField(max_length=120, blank=True, null=True, unique=True)
phone_number = PhoneNumberField(blank=True, null=True)
- type_short = models.ManyToManyField(
- UrgentNeedCategory, related_name="urgent_needs")
+ type_short = models.ManyToManyField(UrgentNeedCategory, related_name="urgent_needs")
active = models.BooleanField(blank=True, null=False, default=True)
low_confidence = models.BooleanField(blank=True, null=False, default=False)
- functions = models.ManyToManyField(
- UrgentNeedFunction, related_name="function", blank=True)
+ functions = models.ManyToManyField(UrgentNeedFunction, related_name="function", blank=True)
name = models.ForeignKey(
Translation, related_name="urgent_need_name", blank=False, null=False, on_delete=models.PROTECT
@@ -316,8 +303,7 @@ class NavigatorManager(models.Manager):
def new_navigator(self, name, phone_number):
translations = {}
for field in self.translated_fields:
- translations[field] = Translation.objects.add_translation(
- f"navigator.{name}_temporary_key-{field}")
+ translations[field] = Translation.objects.add_translation(f"navigator.{name}_temporary_key-{field}")
# try to set the external_name to the name
external_name_exists = self.filter(external_name=name).count() > 0
@@ -336,13 +322,10 @@ def new_navigator(self, name, phone_number):
class Navigator(models.Model):
- program = models.ManyToManyField(
- Program, related_name="navigator", blank=True)
- external_name = models.CharField(
- max_length=120, blank=True, null=True, unique=True)
+ program = models.ManyToManyField(Program, related_name="navigator", blank=True)
+ external_name = models.CharField(max_length=120, blank=True, null=True, unique=True)
phone_number = PhoneNumberField(blank=True, null=True)
- counties = models.ManyToManyField(
- NavigatorCounty, related_name="navigator", blank=True)
+ counties = models.ManyToManyField(NavigatorCounty, related_name="navigator", blank=True)
name = models.ForeignKey(
Translation, related_name="navigator_name", blank=False, null=False, on_delete=models.PROTECT
@@ -373,12 +356,9 @@ def __str__(self):
class Referrer(models.Model):
referrer_code = models.CharField(max_length=64, unique=True)
webhook_url = models.CharField(max_length=320, blank=True, null=True)
- webhook_functions = models.ManyToManyField(
- WebHookFunction, related_name="web_hook", blank=True)
- primary_navigators = models.ManyToManyField(
- Navigator, related_name="primary_navigators", blank=True)
- remove_programs = models.ManyToManyField(
- Program, related_name="removed_programs", blank=True)
+ webhook_functions = models.ManyToManyField(WebHookFunction, related_name="web_hook", blank=True)
+ primary_navigators = models.ManyToManyField(Navigator, related_name="primary_navigators", blank=True)
+ remove_programs = models.ManyToManyField(Program, related_name="removed_programs", blank=True)
def __str__(self):
return self.referrer_code
diff --git a/programs/programs/__init__.py b/programs/programs/__init__.py
index f2f2c433..13e75b6d 100644
--- a/programs/programs/__init__.py
+++ b/programs/programs/__init__.py
@@ -2,7 +2,4 @@
from .federal import federal_calculators
from .calc import ProgramCalculator
-calculators: dict[str, type[ProgramCalculator]] = {
- **co_calculators,
- **federal_calculators
-}
+calculators: dict[str, type[ProgramCalculator]] = {**co_calculators, **federal_calculators}
diff --git a/programs/programs/calc.py b/programs/programs/calc.py
index 41975bea..0498b0c2 100644
--- a/programs/programs/calc.py
+++ b/programs/programs/calc.py
@@ -1,6 +1,7 @@
from screener.models import Screen
from programs.util import Dependencies
from typing import TYPE_CHECKING
+
if TYPE_CHECKING:
from programs.models import Program
@@ -15,9 +16,9 @@ def __init__(self):
self.multiple_tax_units = False
def condition(self, passed: bool, message=None):
- '''
+ """
Uses a condition to update the pass fail messages and eligibility.
- '''
+ """
if message is None:
if not passed:
@@ -30,22 +31,22 @@ def condition(self, passed: bool, message=None):
self.failed(message)
def failed(self, msg):
- '''
+ """
Mark eligibility as failed and add a message to `fail_messages`
- '''
+ """
self.eligible = False
self.fail_messages.append(msg)
def passed(self, msg):
- '''
+ """
Add a message to `pass_messages`
- '''
+ """
self.pass_messages.append(msg)
def member_eligibility(self, members, conditions):
- '''
+ """
Filter out members that do not meet the condition and make eligibility messages
- '''
+ """
if len(conditions) <= 0:
self.eligible_member_count = len(members)
return members
@@ -61,46 +62,47 @@ def member_eligibility(self, members, conditions):
return self.member_eligibility(eligible_members, conditions)
def to_dict(self):
- '''
+ """
Return the eligibility as a dictionary
- '''
+ """
return {
- 'eligible': self.eligible,
- 'passed': self.pass_messages,
- 'failed': self.fail_messages,
- 'estimated_value': self.value if self.eligible else 0,
- 'multiple_tax_units': self.multiple_tax_units,
+ "eligible": self.eligible,
+ "passed": self.pass_messages,
+ "failed": self.fail_messages,
+ "estimated_value": self.value if self.eligible else 0,
+ "multiple_tax_units": self.multiple_tax_units,
}
class ProgramCalculator:
- '''
+ """
Base class for all Programs
- '''
+ """
+
dependencies = tuple()
amount = 0
tax_unit_dependent = False
- def __init__(self, screen: Screen, program: 'Program', data):
+ def __init__(self, screen: Screen, program: "Program", data):
self.screen = screen
self.program = program
self.data = data
def eligible(self) -> Eligibility:
- '''
+ """
Returns the `Eligibility` object with whether or not the program is eligible
- '''
+ """
return Eligibility()
def value(self, eligible_members: int):
- '''
+ """
Return the value of the program
- '''
+ """
return self.amount
@classmethod
def can_calc(cls, missing_dependencies: Dependencies):
- '''
+ """
Returns whether or not the program can be calculated with the missing dependencies
- '''
+ """
return not missing_dependencies.has(*cls.dependencies)
diff --git a/programs/programs/co/__init__.py b/programs/programs/co/__init__.py
index 9113689f..356a3523 100644
--- a/programs/programs/co/__init__.py
+++ b/programs/programs/co/__init__.py
@@ -30,33 +30,32 @@
co_calculators: dict[str, type[ProgramCalculator]] = {
- 'rtdlive': RtdLive,
- 'cccap': ChildCareAssistance,
- 'mydenver': MyDenver,
- 'cocb': CashBack,
- 'leap': EnergyAssistance,
- 'erc': EnergyResourceCenter,
- 'omnisalud': OmniSalud,
- 'cdhcs': DentalHealthCareSeniors,
- 'rhc': ReproductiveHealthCare,
- 'cfhc': ConnectForHealth,
- 'fps': FamilyPlanningServices,
- 'dpp': DenverPreschoolProgram,
- 'ede': EveryDayEats,
- 'cpcr': PropertyCreditRebate,
- 'upk': UniversalPreschool,
- 'myspark': MySpark,
- 'lwcr': LowWageCovidRelief,
- 'cwd_medicaid': MedicaidChildWithDisability,
- 'awd_medicaid': MedicaidAdultWithDisability,
- 'emergency_medicaid': EmergencyMedicaid,
- 'bca': BasicCashAssistance,
- 'cowap': WeatherizationAssistance,
- 'tabor': Tabor,
- 'trua': Trua,
- 'ubp': UtilityBillPay,
- 'rag': RentalAssistanceGrant,
- 'erap': EmergencyRentalAssistance,
- 'nfp': NurseFamilyPartnership,
+ "rtdlive": RtdLive,
+ "cccap": ChildCareAssistance,
+ "mydenver": MyDenver,
+ "cocb": CashBack,
+ "leap": EnergyAssistance,
+ "erc": EnergyResourceCenter,
+ "omnisalud": OmniSalud,
+ "cdhcs": DentalHealthCareSeniors,
+ "rhc": ReproductiveHealthCare,
+ "cfhc": ConnectForHealth,
+ "fps": FamilyPlanningServices,
+ "dpp": DenverPreschoolProgram,
+ "ede": EveryDayEats,
+ "cpcr": PropertyCreditRebate,
+ "upk": UniversalPreschool,
+ "myspark": MySpark,
+ "lwcr": LowWageCovidRelief,
+ "cwd_medicaid": MedicaidChildWithDisability,
+ "awd_medicaid": MedicaidAdultWithDisability,
+ "emergency_medicaid": EmergencyMedicaid,
+ "bca": BasicCashAssistance,
+ "cowap": WeatherizationAssistance,
+ "tabor": Tabor,
+ "trua": Trua,
+ "ubp": UtilityBillPay,
+ "rag": RentalAssistanceGrant,
+ "erap": EmergencyRentalAssistance,
+ "nfp": NurseFamilyPartnership,
}
-
diff --git a/programs/programs/co/basic_cash_assistance/calculator.py b/programs/programs/co/basic_cash_assistance/calculator.py
index f86dcf38..6d8e0710 100644
--- a/programs/programs/co/basic_cash_assistance/calculator.py
+++ b/programs/programs/co/basic_cash_assistance/calculator.py
@@ -5,8 +5,8 @@
class BasicCashAssistance(ProgramCalculator):
amount = 1_000
- county = 'Denver County'
- dependencies = ['zipcode', 'age']
+ county = "Denver County"
+ dependencies = ["zipcode", "age"]
def eligible(self) -> Eligibility:
e = Eligibility()
diff --git a/programs/programs/co/cash_back/calculator.py b/programs/programs/co/cash_back/calculator.py
index 320321ff..7c4fd16c 100644
--- a/programs/programs/co/cash_back/calculator.py
+++ b/programs/programs/co/cash_back/calculator.py
@@ -4,7 +4,7 @@
class CashBack(ProgramCalculator):
amount = 750
- dependencies = ['age']
+ dependencies = ["age"]
def eligible(self) -> Eligibility:
e = Eligibility()
diff --git a/programs/programs/co/child_care_assistance/calculator.py b/programs/programs/co/child_care_assistance/calculator.py
index b5b4f9b6..991c651c 100644
--- a/programs/programs/co/child_care_assistance/calculator.py
+++ b/programs/programs/co/child_care_assistance/calculator.py
@@ -6,8 +6,8 @@
class CCCAPCache(GoogleSheetsCache):
- sheet_id = '1WzobLnLoxGbN_JfTuw3jUCZV5N7IA_0uvwEkIoMt3Wk'
- range_name = 'Sheet1!A14:J78'
+ sheet_id = "1WzobLnLoxGbN_JfTuw3jUCZV5N7IA_0uvwEkIoMt3Wk"
+ range_name = "Sheet1!A14:J78"
class ChildCareAssistance(ProgramCalculator):
@@ -16,7 +16,7 @@ class ChildCareAssistance(ProgramCalculator):
max_age_preschool = 4
max_age_afterschool = 13
max_age_afterschool_disabled = 19
- dependencies = ['age', 'income_amount', 'income_frequency', 'zipcode', 'household_size']
+ dependencies = ["age", "income_amount", "income_frequency", "zipcode", "household_size"]
county_values = CCCAPCache()
def eligible(self) -> Eligibility:
@@ -34,8 +34,8 @@ def eligible(self) -> Eligibility:
e.condition(bool(cccap_county_data), messages.location())
# income
- frequency = 'yearly'
- income_types = ['all']
+ frequency = "yearly"
+ income_types = ["all"]
gross_income = self.screen.calc_gross_income(frequency, income_types)
if cccap_county_data:
income_limit = cccap_county_data[self.screen.household_size] * 12
@@ -54,9 +54,11 @@ def value(self, eligible_members: int):
value += ChildCareAssistance.preschool_value
elif household_member.age < ChildCareAssistance.max_age_afterschool:
value += ChildCareAssistance.afterschool_value
- elif household_member.age >= ChildCareAssistance.max_age_afterschool and \
- household_member.age <= ChildCareAssistance.max_age_afterschool_disabled and \
- household_member.has_disability():
+ elif (
+ household_member.age >= ChildCareAssistance.max_age_afterschool
+ and household_member.age <= ChildCareAssistance.max_age_afterschool_disabled
+ and household_member.has_disability()
+ ):
value += ChildCareAssistance.afterschool_value
return value
@@ -68,9 +70,11 @@ def _num_cccap_children(self):
for household_member in household_members:
if household_member.age < ChildCareAssistance.max_age_afterschool:
children += 1
- elif household_member.age >= ChildCareAssistance.max_age_afterschool and \
- household_member.age <= ChildCareAssistance.max_age_afterschool_disabled and \
- household_member.has_disability():
+ elif (
+ household_member.age >= ChildCareAssistance.max_age_afterschool
+ and household_member.age <= ChildCareAssistance.max_age_afterschool_disabled
+ and household_member.has_disability()
+ ):
children += 1
return children
@@ -80,21 +84,20 @@ def _cccap_county_values(self, county_name):
sheet_values = self.county_values.fetch()
cccap_county_name = county_name.replace(" County", "")
- non_decimal = re.compile(r'[^\d.]+')
+ non_decimal = re.compile(r"[^\d.]+")
for row in sheet_values:
if row[0] == cccap_county_name:
match = {
1: -1,
- 2: float(non_decimal.sub('', row[2])),
- 3: float(non_decimal.sub('', row[3])),
- 4: float(non_decimal.sub('', row[4])),
- 5: float(non_decimal.sub('', row[5])),
- 6: float(non_decimal.sub('', row[6])),
- 7: float(non_decimal.sub('', row[7])),
- 8: float(non_decimal.sub('', row[8])),
- 9: float(non_decimal.sub('', row[9]))
+ 2: float(non_decimal.sub("", row[2])),
+ 3: float(non_decimal.sub("", row[3])),
+ 4: float(non_decimal.sub("", row[4])),
+ 5: float(non_decimal.sub("", row[5])),
+ 6: float(non_decimal.sub("", row[6])),
+ 7: float(non_decimal.sub("", row[7])),
+ 8: float(non_decimal.sub("", row[8])),
+ 9: float(non_decimal.sub("", row[9])),
}
return match
-
diff --git a/programs/programs/co/connect_for_health/calculator.py b/programs/programs/co/connect_for_health/calculator.py
index 6f654422..6b90307a 100644
--- a/programs/programs/co/connect_for_health/calculator.py
+++ b/programs/programs/co/connect_for_health/calculator.py
@@ -6,51 +6,44 @@
class CFHCache(GoogleSheetsCache):
default = {}
- sheet_id = '1SuOhwX5psXsipMS_G5DE_f9jLS2qWxf6temxY445EQg'
+ sheet_id = "1SuOhwX5psXsipMS_G5DE_f9jLS2qWxf6temxY445EQg"
range_name = "'2023 report'!A2:B65"
def update(self):
data = super().update()
- return {d[0].strip() + ' County': float(d[1].replace(',', '')) for d in data}
+ return {d[0].strip() + " County": float(d[1].replace(",", "")) for d in data}
class ConnectForHealth(ProgramCalculator):
percent_of_fpl = 4
- dependencies = ['insurance', 'income_amount', 'income_frequency', 'county', 'household_size']
+ dependencies = ["insurance", "income_amount", "income_frequency", "county", "household_size"]
county_values = CFHCache()
def eligible(self) -> Eligibility:
e = Eligibility()
# Medicade eligibility
- e.condition(not medicaid_eligible(self.data), messages.must_not_have_benefit('Medicaid'))
+ e.condition(not medicaid_eligible(self.data), messages.must_not_have_benefit("Medicaid"))
# Someone has no health insurance
- has_no_hi = self.screen.has_insurance_types(('none', 'private'))
+ has_no_hi = self.screen.has_insurance_types(("none", "private"))
e.condition(has_no_hi, messages.has_no_insurance())
# HH member has no va insurance
e.member_eligibility(
self.screen.household_members.all(),
- [
- (
- lambda m: not m.insurance.has_insurance_types(('va', 'private')),
- messages.must_not_have_benefit('VA')
- )
- ]
+ [(lambda m: not m.insurance.has_insurance_types(("va", "private")), messages.must_not_have_benefit("VA"))],
)
# Income
fpl = self.program.fpl.as_dict()
income_band = int(fpl[self.screen.household_size] / 12 * ConnectForHealth.percent_of_fpl)
- gross_income = int(self.screen.calc_gross_income('yearly', ('all',)) / 12)
- e.condition(gross_income < income_band,
- messages.income(gross_income, income_band))
+ gross_income = int(self.screen.calc_gross_income("yearly", ("all",)) / 12)
+ e.condition(gross_income < income_band, messages.income(gross_income, income_band))
return e
def value(self, eligible_members: int):
values = self.county_values.fetch()
return values[self.screen.county] * 12
-
diff --git a/programs/programs/co/connect_for_health/tests.py b/programs/programs/co/connect_for_health/tests.py
index c963e90c..10d99cb7 100644
--- a/programs/programs/co/connect_for_health/tests.py
+++ b/programs/programs/co/connect_for_health/tests.py
@@ -7,8 +7,8 @@ class TestConnectForHealth(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
+ zipcode="80205",
+ county="Denver County",
household_size=1,
household_assets=0,
has_employer_hi=True,
@@ -19,7 +19,7 @@ def setUp(self):
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=60,
student=False,
student_full_time=False,
@@ -43,11 +43,7 @@ def test_health_insurance_failed_all_conditions(self):
self.screen1.has_no_hi = False
self.screen1.save()
income = IncomeStream.objects.create(
- screen=self.screen1,
- household_member=self.person1,
- type='wages',
- amount=5800,
- frequency='monthly'
+ screen=self.screen1, household_member=self.person1, type="wages", amount=5800, frequency="monthly"
)
cfhc = ConnectForHealth(self.screen1)
diff --git a/programs/programs/co/dental_health_care_seniors/calculator.py b/programs/programs/co/dental_health_care_seniors/calculator.py
index f1ce6dfa..d6f26352 100644
--- a/programs/programs/co/dental_health_care_seniors/calculator.py
+++ b/programs/programs/co/dental_health_care_seniors/calculator.py
@@ -6,7 +6,7 @@ class DentalHealthCareSeniors(ProgramCalculator):
amount = 80
min_age = 60
percent_of_fpl = 2.5
- dependencies = ['age', 'income_amount', 'income_frequency', 'insurance', 'household_size']
+ dependencies = ["age", "income_amount", "income_frequency", "insurance", "household_size"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -14,22 +14,21 @@ def eligible(self) -> Eligibility:
self.screen.household_members.all(),
[
(
- lambda m: m.insurance.has_insurance_types(('medicaid', 'private')),
- messages.must_not_have_benefit('Medicaid')
+ lambda m: m.insurance.has_insurance_types(("medicaid", "private")),
+ messages.must_not_have_benefit("Medicaid"),
),
(
lambda m: m.age > DentalHealthCareSeniors.min_age,
- messages.older_than(DentalHealthCareSeniors.min_age)
- )
- ]
+ messages.older_than(DentalHealthCareSeniors.min_age),
+ ),
+ ],
)
# Income test
fpl = self.program.fpl.as_dict()
gross_income = int(self.screen.calc_gross_income("monthly", ["all"]))
income_band = int(DentalHealthCareSeniors.percent_of_fpl * fpl[self.screen.household_size] / 12)
- e.condition(gross_income <= income_band,
- messages.income(gross_income, income_band))
+ e.condition(gross_income <= income_band, messages.income(gross_income, income_band))
return e
diff --git a/programs/programs/co/dental_health_care_seniors/tests.py b/programs/programs/co/dental_health_care_seniors/tests.py
index d6bd2319..44bc1672 100644
--- a/programs/programs/co/dental_health_care_seniors/tests.py
+++ b/programs/programs/co/dental_health_care_seniors/tests.py
@@ -7,15 +7,15 @@ class TestDentalHealthCareSeniorsPension(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
+ zipcode="80205",
+ county="Denver County",
household_size=1,
household_assets=0,
- has_no_hi=True
+ has_no_hi=True,
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=60,
student=False,
student_full_time=False,
@@ -41,11 +41,7 @@ def test_dental_health_care_seniors_failed_all_conditions(self):
self.screen1.has_medicaid = True
self.screen1.save()
IncomeStream.objects.create(
- screen=self.screen1,
- household_member=self.person1,
- type='wages',
- amount=3000,
- frequency='monthly'
+ screen=self.screen1, household_member=self.person1, type="wages", amount=3000, frequency="monthly"
)
cdhcs = DentalHealthCareSeniors(self.screen1)
diff --git a/programs/programs/co/denver_preschool_program/calculator.py b/programs/programs/co/denver_preschool_program/calculator.py
index bc19c482..4fcb9a8e 100644
--- a/programs/programs/co/denver_preschool_program/calculator.py
+++ b/programs/programs/co/denver_preschool_program/calculator.py
@@ -8,7 +8,7 @@ class DenverPreschoolProgram(ProgramCalculator):
min_age = 3
max_age = 4
county = "Denver County"
- dependencies = ['age', 'zipcode']
+ dependencies = ["age", "zipcode"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -18,8 +18,7 @@ def eligible(self) -> Eligibility:
age_min=DenverPreschoolProgram.min_age, age_max=DenverPreschoolProgram.max_age
)
- e.condition(num_children >= 1,
- messages.child(DenverPreschoolProgram.min_age, DenverPreschoolProgram.max_age))
+ e.condition(num_children >= 1, messages.child(DenverPreschoolProgram.min_age, DenverPreschoolProgram.max_age))
if self.screen.county is not None:
counties = [self.screen.county]
@@ -27,7 +26,6 @@ def eligible(self) -> Eligibility:
counties = counties_from_zip(self.screen.zipcode)
# Lives in Denver
- e.condition(DenverPreschoolProgram.county in counties,
- messages.location())
+ e.condition(DenverPreschoolProgram.county in counties, messages.location())
return e
diff --git a/programs/programs/co/denver_preschool_program/tests.py b/programs/programs/co/denver_preschool_program/tests.py
index 916018ab..08ebf51c 100644
--- a/programs/programs/co/denver_preschool_program/tests.py
+++ b/programs/programs/co/denver_preschool_program/tests.py
@@ -6,14 +6,11 @@
class TestDenverPreschoolProgram(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
- agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
- household_size=2
+ agree_to_tos=True, zipcode="80205", county="Denver County", household_size=2
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=30,
student=False,
student_full_time=False,
@@ -28,7 +25,7 @@ def setUp(self):
)
self.person2 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='child',
+ relationship="child",
age=3,
student=False,
student_full_time=False,
diff --git a/programs/programs/co/emergency_rental_assistance/calculator.py b/programs/programs/co/emergency_rental_assistance/calculator.py
index 18ccfda9..dc79d697 100644
--- a/programs/programs/co/emergency_rental_assistance/calculator.py
+++ b/programs/programs/co/emergency_rental_assistance/calculator.py
@@ -6,18 +6,18 @@
class EmergencyRentalAssistanceIncomeLimitsCache(GoogleSheetsCache):
default = {}
- sheet_id = '1QHb-ZT0Y2oWjFMoeP_wy8ClveslINWdehb-CXhB8WSE'
+ sheet_id = "1QHb-ZT0Y2oWjFMoeP_wy8ClveslINWdehb-CXhB8WSE"
range_name = "'2022 80% AMI'!A2:I"
def update(self):
data = super().update()
- return {d[0].strip() + ' County': [int(v.replace(',', '')) for v in d[1:]] for d in data}
+ return {d[0].strip() + " County": [int(v.replace(",", "")) for v in d[1:]] for d in data}
class EmergencyRentalAssistance(ProgramCalculator):
amount = 13_848
- dependencies = ['income_amount', 'income_frequency', 'household_size', 'zipcode']
+ dependencies = ["income_amount", "income_frequency", "household_size", "zipcode"]
income_cache = EmergencyRentalAssistanceIncomeLimitsCache()
def eligible(self) -> Eligibility:
@@ -27,11 +27,10 @@ def eligible(self) -> Eligibility:
counties = counties_from_zip(self.screen.zipcode)
county_name = self.screen.county if self.screen.county is not None else counties[0]
- income = self.screen.calc_gross_income('yearly', ['all'])
- income_limits = EmergencyRentalAssistance.income_cache.fetch()
+ income = self.screen.calc_gross_income("yearly", ["all"])
+ income_limits = EmergencyRentalAssistance.income_cache.fetch()
# NOTE: 80% to income is already applied in the sheet.
income_limit = income_limits[county_name][self.screen.household_size - 1]
e.condition(income < income_limit, messages.income(income, income_limit))
return e
-
diff --git a/programs/programs/co/energy_assistance/calculator.py b/programs/programs/co/energy_assistance/calculator.py
index 0ade8cce..e774b3b3 100644
--- a/programs/programs/co/energy_assistance/calculator.py
+++ b/programs/programs/co/energy_assistance/calculator.py
@@ -9,10 +9,10 @@
class LeapValueCache(Cache):
expire_time = 60 * 60 * 24
default = []
- sheet_id = '1W8WbJsb5Mgb4CUkte2SCuDnqigqkmaO3LC0KSfhEdGg'
+ sheet_id = "1W8WbJsb5Mgb4CUkte2SCuDnqigqkmaO3LC0KSfhEdGg"
range_name = "'FFY 2024'!A1:G65"
- county_column = '2023/2024 Season\nUpdated: \n4/30/2024'
- average_column = 'Average Benefit'
+ county_column = "2023/2024 Season\nUpdated: \n4/30/2024"
+ average_column = "Average Benefit"
def update(self):
data = GoogleSheets(self.sheet_id, self.range_name).data_by_column(self.county_column, self.average_column)
@@ -31,7 +31,7 @@ class EnergyAssistance(ProgramCalculator):
7: 8_001,
8: 8_179,
}
- dependencies = ['income_frequency', 'income_amount', 'zipcode', 'household_size']
+ dependencies = ["income_frequency", "income_amount", "zipcode", "household_size"]
county_values = LeapValueCache()
def eligible(self) -> Eligibility:
@@ -39,13 +39,11 @@ def eligible(self) -> Eligibility:
# income
frequency = "monthly"
- income_types = ['all']
+ income_types = ["all"]
income_limit = EnergyAssistance.income_bands[self.screen.household_size]
leap_income = self.screen.calc_gross_income(frequency, income_types)
- e.condition(
- leap_income < income_limit, messages.income(leap_income, income_limit)
- )
+ e.condition(leap_income < income_limit, messages.income(leap_income, income_limit))
return e
@@ -60,9 +58,9 @@ def value(self, eligible_members: int):
values = []
for row in data:
- county = row[0].strip().replace('Application County: ', '') + ' County'
+ county = row[0].strip().replace("Application County: ", "") + " County"
if county in counties:
- values.append(int(float(row[1].replace('$', ''))))
+ values.append(int(float(row[1].replace("$", ""))))
value = 362
lowest = math.inf
@@ -74,4 +72,3 @@ def value(self, eligible_members: int):
lowest = possible_value
return value
-
diff --git a/programs/programs/co/energy_resource_center/calculator.py b/programs/programs/co/energy_resource_center/calculator.py
index 57ad3e14..89470343 100644
--- a/programs/programs/co/energy_resource_center/calculator.py
+++ b/programs/programs/co/energy_resource_center/calculator.py
@@ -4,17 +4,8 @@
class EnergyResourceCenter(ProgramCalculator):
amount = 4000
- income_bands = {
- 1: 2880,
- 2: 3766,
- 3: 4652,
- 4: 5539,
- 5: 6425,
- 6: 7311,
- 7: 7477,
- 8: 7644
- }
- dependencies = ['household_size', 'income_amount', 'income_frequency']
+ income_bands = {1: 2880, 2: 3766, 3: 4652, 4: 5539, 5: 6425, 6: 7311, 7: 7477, 8: 7644}
+ dependencies = ["household_size", "income_amount", "income_frequency"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -22,7 +13,6 @@ def eligible(self) -> Eligibility:
# income
gross_income = self.screen.calc_gross_income("monthly", ["all"])
income_band = EnergyResourceCenter.income_bands[self.screen.household_size]
- e.condition(gross_income <= income_band,
- messages.income(gross_income, income_band))
+ e.condition(gross_income <= income_band, messages.income(gross_income, income_band))
return e
diff --git a/programs/programs/co/energy_resource_center/tests.py b/programs/programs/co/energy_resource_center/tests.py
index 3821af10..49610c97 100644
--- a/programs/programs/co/energy_resource_center/tests.py
+++ b/programs/programs/co/energy_resource_center/tests.py
@@ -7,14 +7,14 @@ class TestEnergyResourceCenterPension(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
+ zipcode="80205",
+ county="Denver County",
household_size=1,
household_assets=0,
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=60,
student=False,
student_full_time=False,
@@ -36,14 +36,9 @@ def test_energy_resource_center_visually_impaired_is_eligible(self):
def test_energy_resource_center_failed_income_condition(self):
income = IncomeStream.objects.create(
- screen=self.screen1,
- household_member=self.person1,
- type='wages',
- amount=3000,
- frequency='monthly'
+ screen=self.screen1, household_member=self.person1, type="wages", amount=3000, frequency="monthly"
)
erc = EnergyResourceCenter(self.screen1)
eligibility = erc.eligibility
self.assertFalse(eligibility["eligible"])
-
diff --git a/programs/programs/co/every_day_eats/calculator.py b/programs/programs/co/every_day_eats/calculator.py
index 4dbc585c..fec2df6a 100644
--- a/programs/programs/co/every_day_eats/calculator.py
+++ b/programs/programs/co/every_day_eats/calculator.py
@@ -6,7 +6,7 @@ class EveryDayEats(ProgramCalculator):
amount = 600
min_age = 60
percent_of_fpl = 1.3
- dependencies = ['age', 'income_amount', 'income_frequency', 'household_size']
+ dependencies = ["age", "income_amount", "income_frequency", "household_size"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -18,7 +18,7 @@ def eligible(self) -> Eligibility:
# Income
fpl = self.program.fpl.as_dict()
income_limit = EveryDayEats.percent_of_fpl * fpl[self.screen.household_size]
- gross_income = self.screen.calc_gross_income('yearly', ['all'])
+ gross_income = self.screen.calc_gross_income("yearly", ["all"])
e.condition(gross_income < income_limit, messages.income(gross_income, income_limit))
diff --git a/programs/programs/co/every_day_eats/tests.py b/programs/programs/co/every_day_eats/tests.py
index 01fc093f..03606c18 100644
--- a/programs/programs/co/every_day_eats/tests.py
+++ b/programs/programs/co/every_day_eats/tests.py
@@ -7,14 +7,14 @@ class TestEveryDayEatsPension(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
+ zipcode="80205",
+ county="Denver County",
household_size=1,
household_assets=0,
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=60,
student=False,
student_full_time=False,
@@ -36,11 +36,7 @@ def test_every_day_eats_visually_impaired_is_eligible(self):
def test_every_day_eats_failed_all_conditions(self):
income = IncomeStream.objects.create(
- screen=self.screen1,
- household_member=self.person1,
- type='wages',
- amount=3000,
- frequency='monthly'
+ screen=self.screen1, household_member=self.person1, type="wages", amount=3000, frequency="monthly"
)
self.person1.age = 30
self.person1.save()
diff --git a/programs/programs/co/low_wage_covid_relief/calculator.py b/programs/programs/co/low_wage_covid_relief/calculator.py
index c09ed3c0..92d8653f 100644
--- a/programs/programs/co/low_wage_covid_relief/calculator.py
+++ b/programs/programs/co/low_wage_covid_relief/calculator.py
@@ -7,7 +7,7 @@
class LowWageCovidRelief(ProgramCalculator):
amount = 1_500
- auto_eligible_benefits = (*STATE_MEDICAID_OPTIONS, 'tanf', 'snap', 'wic', 'leap')
+ auto_eligible_benefits = (*STATE_MEDICAID_OPTIONS, "tanf", "snap", "wic", "leap")
income_limits = {
1: -math.inf,
2: 3_266.25,
@@ -18,8 +18,8 @@ class LowWageCovidRelief(ProgramCalculator):
7: 7_522.50,
8: 8_373.75,
}
- county = 'Adams County'
- dependencies = ['zipode', 'household_size', 'income_amount', 'income_frequency']
+ county = "Adams County"
+ dependencies = ["zipode", "household_size", "income_amount", "income_frequency"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -38,13 +38,13 @@ def eligible(self) -> Eligibility:
has_benefit = self.screen.has_benefit(benefit)
for benefit in self.data:
- if benefit['name_abbreviated'] in LowWageCovidRelief.auto_eligible_benefits and benefit['eligible']:
+ if benefit["name_abbreviated"] in LowWageCovidRelief.auto_eligible_benefits and benefit["eligible"]:
has_benefit = True
break
# meets income limit
income_limit = LowWageCovidRelief.income_limits[self.screen.household_size]
- income = self.screen.calc_gross_income('monthly', ['all'])
+ income = self.screen.calc_gross_income("monthly", ["all"])
meets_income_limit = income <= income_limit
if not (meets_income_limit or has_benefit):
diff --git a/programs/programs/co/medicaid/adult_with_disability/calculator.py b/programs/programs/co/medicaid/adult_with_disability/calculator.py
index 3d461bff..18e3ed1f 100644
--- a/programs/programs/co/medicaid/adult_with_disability/calculator.py
+++ b/programs/programs/co/medicaid/adult_with_disability/calculator.py
@@ -7,40 +7,43 @@ class MedicaidAdultWithDisability(ProgramCalculator):
min_age = 16
max_income_percent = 4.5
earned_deduction = 65
- earned_percent = .5
+ earned_percent = 0.5
amount = 310
unearned_deduction = 20
min_age = 16
- insurance_types = ('employer', 'private', 'none')
- dependencies = ['insurance', 'age', 'household_size', 'income_type', 'income_amount', 'income_frequency']
+ insurance_types = ("employer", "private", "none")
+ dependencies = ["insurance", "age", "household_size", "income_type", "income_amount", "income_frequency"]
def eligible(self) -> Eligibility:
e = Eligibility()
# Does not qualify for Medicaid
- e.condition(not medicaid_eligible(self.data), messages.must_not_have_benefit('Medicaid'))
+ e.condition(not medicaid_eligible(self.data), messages.must_not_have_benefit("Medicaid"))
def income_eligible(member):
fpl = self.program.fpl.as_dict()
income_limit = fpl[self.screen.household_size] * MedicaidAdultWithDisability.max_income_percent
earned_deduction = MedicaidAdultWithDisability.earned_deduction
earned_percent = MedicaidAdultWithDisability.earned_percent
- earned = max(0, int(
- (int(member.calc_gross_income('yearly', ['earned'])) - earned_deduction) * earned_percent
- ))
+ earned = max(
+ 0, int((int(member.calc_gross_income("yearly", ["earned"])) - earned_deduction) * earned_percent)
+ )
unearned_deduction = MedicaidAdultWithDisability.unearned_deduction
- unearned = int(member.calc_gross_income('yearly', ['unearned'])) - unearned_deduction
+ unearned = int(member.calc_gross_income("yearly", ["unearned"])) - unearned_deduction
return earned + unearned <= income_limit
- e.member_eligibility(self.screen.household_members.all(), [
- (
- lambda m: m.age >= MedicaidAdultWithDisability.min_age,
- messages.older_than(min_age=MedicaidAdultWithDisability.min_age)
- ),
- (lambda m: m.long_term_disability or m.visually_impaired, messages.has_disability()),
- (lambda m: m.insurance.has_insurance_types(MedicaidAdultWithDisability.insurance_types), None),
- (income_eligible, None)
- ])
+ e.member_eligibility(
+ self.screen.household_members.all(),
+ [
+ (
+ lambda m: m.age >= MedicaidAdultWithDisability.min_age,
+ messages.older_than(min_age=MedicaidAdultWithDisability.min_age),
+ ),
+ (lambda m: m.long_term_disability or m.visually_impaired, messages.has_disability()),
+ (lambda m: m.insurance.has_insurance_types(MedicaidAdultWithDisability.insurance_types), None),
+ (income_eligible, None),
+ ],
+ )
return e
diff --git a/programs/programs/co/medicaid/child_with_disability/calculator.py b/programs/programs/co/medicaid/child_with_disability/calculator.py
index 7b83f7e3..3a189af1 100644
--- a/programs/programs/co/medicaid/child_with_disability/calculator.py
+++ b/programs/programs/co/medicaid/child_with_disability/calculator.py
@@ -7,32 +7,35 @@ class MedicaidChildWithDisability(ProgramCalculator):
max_age = 18
max_income_percent = 3
earned_deduction = 90
- income_percent = 1 - .33
- insurance_types = ('employer', 'private', 'none')
+ income_percent = 1 - 0.33
+ insurance_types = ("employer", "private", "none")
amount = 200
- dependencies = ['insurance', 'age', 'household_size', 'income_type', 'income_amount', 'income_frequency']
+ dependencies = ["insurance", "age", "household_size", "income_type", "income_amount", "income_frequency"]
def eligible(self) -> Eligibility:
e = Eligibility()
# Does not qualify for Medicaid
- e.condition(not medicaid_eligible(self.data), messages.must_not_have_benefit('Medicaid'))
+ e.condition(not medicaid_eligible(self.data), messages.must_not_have_benefit("Medicaid"))
fpl = self.program.fpl.as_dict()
income_limit = fpl[self.screen.household_size] * MedicaidChildWithDisability.max_income_percent
- earned = max(0, int(
- self.screen.calc_gross_income('yearly', ['earned']) - MedicaidChildWithDisability.earned_deduction
- ))
- unearned = self.screen.calc_gross_income('yearly', ['unearned'])
+ earned = max(
+ 0, int(self.screen.calc_gross_income("yearly", ["earned"]) - MedicaidChildWithDisability.earned_deduction)
+ )
+ unearned = self.screen.calc_gross_income("yearly", ["unearned"])
income = (earned + unearned) * MedicaidChildWithDisability.income_percent
e.condition(income <= income_limit, messages.income(income, income_limit))
- e.member_eligibility(self.screen.household_members.all(), [
- (lambda m: m.age <= MedicaidChildWithDisability.max_age, messages.child()),
- (lambda m: m.long_term_disability or m.visually_impaired, messages.has_disability()),
- (lambda m: m.insurance.has_insurance_types(MedicaidChildWithDisability.insurance_types), None),
- (lambda m: not (m.calc_gross_income('yearly', ['earned']) >= 0 and m.age >= 16), None),
- ])
+ e.member_eligibility(
+ self.screen.household_members.all(),
+ [
+ (lambda m: m.age <= MedicaidChildWithDisability.max_age, messages.child()),
+ (lambda m: m.long_term_disability or m.visually_impaired, messages.has_disability()),
+ (lambda m: m.insurance.has_insurance_types(MedicaidChildWithDisability.insurance_types), None),
+ (lambda m: not (m.calc_gross_income("yearly", ["earned"]) >= 0 and m.age >= 16), None),
+ ],
+ )
return e
diff --git a/programs/programs/co/medicaid/family_planning_services/calculator.py b/programs/programs/co/medicaid/family_planning_services/calculator.py
index 9b9e448a..029bd8ed 100644
--- a/programs/programs/co/medicaid/family_planning_services/calculator.py
+++ b/programs/programs/co/medicaid/family_planning_services/calculator.py
@@ -7,7 +7,7 @@ class FamilyPlanningServices(ProgramCalculator):
amount = 404
min_age = 12
fpl_percent = 2.6
- dependencies = ['age', 'insurance', 'income_frequency', 'income_amount', 'household_size']
+ dependencies = ["age", "insurance", "income_frequency", "income_amount", "household_size"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -15,24 +15,21 @@ def eligible(self) -> Eligibility:
# Does not have insurance
has_no_insurance = False
for member in self.screen.household_members.all():
- has_no_insurance = member.insurance.has_insurance_types(('none',)) or has_no_insurance
+ has_no_insurance = member.insurance.has_insurance_types(("none",)) or has_no_insurance
e.condition(has_no_insurance, messages.has_no_insurance())
# Not Medicaid eligible
- e.condition(not medicaid_eligible(self.data), messages.must_not_have_benefit('Medicaid'))
+ e.condition(not medicaid_eligible(self.data), messages.must_not_have_benefit("Medicaid"))
e.member_eligibility(
self.screen.household_members.all(),
- [
- (lambda m: not m.pregnant, None),
- (lambda m: m.age >= FamilyPlanningServices.min_age, None)
- ]
+ [(lambda m: not m.pregnant, None), (lambda m: m.age >= FamilyPlanningServices.min_age, None)],
)
# Income
fpl = self.program.fpl.as_dict()
income_limit = int(FamilyPlanningServices.fpl_percent * fpl[self.screen.household_size])
- gross_income = int(self.screen.calc_gross_income('yearly', ['all']))
+ gross_income = int(self.screen.calc_gross_income("yearly", ["all"]))
e.condition(gross_income < income_limit, messages.income(gross_income, income_limit))
diff --git a/programs/programs/co/medicaid/family_planning_services/tests.py b/programs/programs/co/medicaid/family_planning_services/tests.py
index e8b466a4..a9ea43ea 100644
--- a/programs/programs/co/medicaid/family_planning_services/tests.py
+++ b/programs/programs/co/medicaid/family_planning_services/tests.py
@@ -7,14 +7,14 @@ class TestFamilyPlanningServicesPension(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
+ zipcode="80205",
+ county="Denver County",
household_size=2,
household_assets=0,
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=60,
student=False,
student_full_time=False,
@@ -29,7 +29,7 @@ def setUp(self):
)
self.person2 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='child',
+ relationship="child",
age=10,
student=True,
student_full_time=False,
@@ -44,7 +44,7 @@ def setUp(self):
)
def test_family_planning_services_pass_all_conditions(self):
- fps = FamilyPlanningServices(self.screen1, [{"name_abbreviated": 'medicaid', "eligible": False}])
+ fps = FamilyPlanningServices(self.screen1, [{"name_abbreviated": "medicaid", "eligible": False}])
eligibility = fps.eligibility
self.assertTrue(eligibility["eligible"])
@@ -53,15 +53,10 @@ def test_family_planning_services_failed_all_conditions(self):
self.person2.age = 20
self.person2.save()
IncomeStream.objects.create(
- screen=self.screen1,
- household_member=self.person1,
- type='wages',
- amount=4000,
- frequency='monthly'
+ screen=self.screen1, household_member=self.person1, type="wages", amount=4000, frequency="monthly"
)
- fps = FamilyPlanningServices(self.screen1,
- [{"name_abbreviated": 'medicaid', "eligible": True}])
+ fps = FamilyPlanningServices(self.screen1, [{"name_abbreviated": "medicaid", "eligible": True}])
eligibility = fps.eligibility
self.assertFalse(eligibility["eligible"])
diff --git a/programs/programs/co/my_spark/calculator.py b/programs/programs/co/my_spark/calculator.py
index 5b0c9204..9b8bd989 100644
--- a/programs/programs/co/my_spark/calculator.py
+++ b/programs/programs/co/my_spark/calculator.py
@@ -7,8 +7,8 @@ class MySpark(ProgramCalculator):
amount_per_child = 1_000
max_age = 14
min_age = 11
- county = 'Denver County'
- dependencies = ['age', 'zipcode']
+ county = "Denver County"
+ dependencies = ["age", "zipcode"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -16,10 +16,10 @@ def eligible(self) -> Eligibility:
# Qualify for FRL
is_frl_eligible = False
for benefit in self.data:
- if benefit["name_abbreviated"] == 'nslp':
+ if benefit["name_abbreviated"] == "nslp":
is_frl_eligible = benefit["eligible"]
break
- e.condition(is_frl_eligible, messages.must_have_benefit('Free or Reduced Lunch'))
+ e.condition(is_frl_eligible, messages.must_have_benefit("Free or Reduced Lunch"))
if self.screen.county is not None:
counties = [self.screen.county]
@@ -35,9 +35,9 @@ def eligible(self) -> Eligibility:
[
(
lambda m: m.age >= MySpark.min_age and m.age <= MySpark.max_age,
- messages.child(MySpark.min_age, MySpark.max_age)
+ messages.child(MySpark.min_age, MySpark.max_age),
)
- ]
+ ],
)
return e
diff --git a/programs/programs/co/mydenver/calculator.py b/programs/programs/co/mydenver/calculator.py
index ad87dd15..7985e7a4 100644
--- a/programs/programs/co/mydenver/calculator.py
+++ b/programs/programs/co/mydenver/calculator.py
@@ -4,11 +4,11 @@
class MyDenver(ProgramCalculator):
- eligible_counties = ['Denver County']
+ eligible_counties = ["Denver County"]
child_age_min = 5
child_age_max = 18
- child_relationship = ['child', 'fosterChild', 'stepChild', 'grandChild', 'relatedOther', 'headOfHousehold']
- dependencies = ['age', 'zipcode', 'relationship']
+ child_relationship = ["child", "fosterChild", "stepChild", "grandChild", "relatedOther", "headOfHousehold"]
+ dependencies = ["age", "zipcode", "relationship"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -30,7 +30,7 @@ def eligible(self) -> Eligibility:
children = self.screen.num_children(
age_max=MyDenver.child_age_max,
age_min=MyDenver.child_age_min,
- child_relationship=MyDenver.child_relationship
+ child_relationship=MyDenver.child_relationship,
)
e.condition(children > 0, messages.child(min_age=5))
@@ -41,7 +41,7 @@ def value(self, eligible_members: int):
children = self.screen.num_children(
age_max=MyDenver.child_age_max,
age_min=MyDenver.child_age_min,
- child_relationship=MyDenver.child_relationship
+ child_relationship=MyDenver.child_relationship,
)
return children * 150
diff --git a/programs/programs/co/nfp/calculator.py b/programs/programs/co/nfp/calculator.py
index e01a6b21..d71adeef 100644
--- a/programs/programs/co/nfp/calculator.py
+++ b/programs/programs/co/nfp/calculator.py
@@ -6,21 +6,13 @@ def calculate_nfp(screen, data, program):
eligibility = eligibility_nfp(screen, program)
value = value_nfp(screen)
- calculation = {
- 'eligibility': eligibility,
- 'value': value
- }
+ calculation = {"eligibility": eligibility, "value": value}
return calculation
def eligibility_nfp(screen, program):
-
- eligibility = {
- "eligible": True,
- "passed": [],
- "failed": []
- }
+ eligibility = {"eligible": True, "passed": [], "failed": []}
frequency = "yearly"
@@ -36,10 +28,12 @@ def eligibility_nfp(screen, program):
eligibility["eligible"] = False
eligibility["failed"].append(
_("Calculated income of ")
- + str(math.trunc(gross_income)) + _(" for a household with ")
+ + str(math.trunc(gross_income))
+ + _(" for a household with ")
+ str(screen.household_size)
+ _(" members is above the income limit of ")
- + str(income_limit))
+ + str(income_limit)
+ )
else:
eligibility["passed"].append(
_("Calculated income of ")
@@ -47,7 +41,8 @@ def eligibility_nfp(screen, program):
+ _(" for a household with ")
+ str(screen.household_size)
+ _(" members is below the income limit of ")
- + str(income_limit))
+ + str(income_limit)
+ )
return eligibility
diff --git a/programs/programs/co/nurse_family_partnership/calculator.py b/programs/programs/co/nurse_family_partnership/calculator.py
index 644e5d31..5740c368 100644
--- a/programs/programs/co/nurse_family_partnership/calculator.py
+++ b/programs/programs/co/nurse_family_partnership/calculator.py
@@ -5,46 +5,42 @@
class NurseFamilyPartnership(ProgramCalculator):
fpl_percent = 2
- child_relationships = ['child', 'grandChild']
+ child_relationships = ["child", "grandChild"]
amount = 15_000
dependencies = [
- 'relationship',
- 'income_frequency',
- 'income_amount',
- 'age',
- 'pregnant',
+ "relationship",
+ "income_frequency",
+ "income_amount",
+ "age",
+ "pregnant",
]
def eligible(self) -> Eligibility:
e = Eligibility()
# no other children
- e.condition(
- self.screen.num_children(child_relationship=NurseFamilyPartnership.child_relationships) == 0
- )
+ e.condition(self.screen.num_children(child_relationship=NurseFamilyPartnership.child_relationships) == 0)
def income_eligible(member: HouseholdMember):
income_limit = self.program.fpl.as_dict()[2] * NurseFamilyPartnership.fpl_percent
- income = member.calc_gross_income('yearly', ['all'])
+ income = member.calc_gross_income("yearly", ["all"])
is_income_eligible = income <= income_limit
insurance: Insurance = member.insurance
has_medicaid = insurance.medicaid or insurance.emergency_medicaid
- has_wic = self.screen.has_benefit('wic')
+ has_wic = self.screen.has_benefit("wic")
return is_income_eligible or has_medicaid or has_wic
-
e.member_eligibility(
self.screen.household_members.all(),
[
(lambda m: m.pregnant, messages.is_pregnant()),
(income_eligible, None),
- ]
+ ],
)
return e
-
diff --git a/programs/programs/co/omnisalud/calculator.py b/programs/programs/co/omnisalud/calculator.py
index d6b5145d..b8d22887 100644
--- a/programs/programs/co/omnisalud/calculator.py
+++ b/programs/programs/co/omnisalud/calculator.py
@@ -6,7 +6,7 @@ class OmniSalud(ProgramCalculator):
individual_limit = 1699
family_4_limit = 3469
amount = 610
- dependencies = ['income_amount', 'income_frequency', 'household_size', 'age', 'insurance']
+ dependencies = ["income_amount", "income_frequency", "household_size", "age", "insurance"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -17,7 +17,7 @@ def eligible(self) -> Eligibility:
e.condition(gross_income <= income_band, messages.income(gross_income, income_band))
# No health insurance
- has_no_hi = self.screen.has_insurance_types(('none',))
+ has_no_hi = self.screen.has_insurance_types(("none",))
e.condition(has_no_hi, messages.has_no_insurance())
return e
diff --git a/programs/programs/co/omnisalud/tests.py b/programs/programs/co/omnisalud/tests.py
index 0078afd0..23845a1a 100644
--- a/programs/programs/co/omnisalud/tests.py
+++ b/programs/programs/co/omnisalud/tests.py
@@ -7,15 +7,15 @@ class TestOmniSaludPension(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
+ zipcode="80205",
+ county="Denver County",
household_size=1,
household_assets=0,
- has_no_hi=True
+ has_no_hi=True,
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=20,
student=False,
student_full_time=False,
@@ -39,11 +39,7 @@ def test_omnisalud_failed_all_conditions(self):
self.screen1.has_no_hi = False
self.screen1.save()
IncomeStream.objects.create(
- screen=self.screen1,
- household_member=self.person1,
- type='wages',
- amount=2000,
- frequency='monthly'
+ screen=self.screen1, household_member=self.person1, type="wages", amount=2000, frequency="monthly"
)
omnisalud = OmniSalud(self.screen1)
diff --git a/programs/programs/co/pe/__init__.py b/programs/programs/co/pe/__init__.py
index 871fc89a..a43da0d8 100644
--- a/programs/programs/co/pe/__init__.py
+++ b/programs/programs/co/pe/__init__.py
@@ -4,19 +4,18 @@
co_member_calculators = {
- 'co_medicaid': member.CoMedicaid,
- 'andcs': member.AidToTheNeedyAndDisabled,
- 'oap': member.OldAgePension,
- 'chp': member.Chp,
+ "co_medicaid": member.CoMedicaid,
+ "andcs": member.AidToTheNeedyAndDisabled,
+ "oap": member.OldAgePension,
+ "chp": member.Chp,
}
co_tax_unit_calculators = {
- 'coeitc': tax.Coeitc,
- 'coctc': tax.Coctc,
+ "coeitc": tax.Coeitc,
+ "coctc": tax.Coctc,
}
co_pe_calculators: dict[str, type[PolicyEngineCalulator]] = {
**co_member_calculators,
**co_tax_unit_calculators,
}
-
diff --git a/programs/programs/co/pe/member.py b/programs/programs/co/pe/member.py
index f1276202..1866b10d 100644
--- a/programs/programs/co/pe/member.py
+++ b/programs/programs/co/pe/member.py
@@ -8,13 +8,13 @@ class CoMedicaid(Medicaid):
adult_medicaid_average = 310 * 12
aged_medicaid_average = 170 * 12
pe_inputs = [
- *Medicaid.pe_inputs,
+ *Medicaid.pe_inputs,
dependency.household.CoStateCode,
]
class AidToTheNeedyAndDisabled(PolicyEngineMembersCalculator):
- pe_name = 'co_state_supplement'
+ pe_name = "co_state_supplement"
pe_inputs = [
dependency.member.SsiCountableResourcesDependency,
dependency.member.SsiReportedDependency,
@@ -32,7 +32,7 @@ class AidToTheNeedyAndDisabled(PolicyEngineMembersCalculator):
class OldAgePension(PolicyEngineMembersCalculator):
- pe_name = 'co_oap'
+ pe_name = "co_oap"
pe_inputs = [
dependency.member.SsiCountableResourcesDependency,
dependency.member.SsiEarnedIncomeDependency,
@@ -47,7 +47,7 @@ class OldAgePension(PolicyEngineMembersCalculator):
class Chp(PolicyEngineMembersCalculator):
- pe_name = 'co_chp'
+ pe_name = "co_chp"
pe_inputs = [
dependency.member.AgeDependency,
dependency.member.PregnancyDependency,
@@ -65,8 +65,8 @@ def value(self):
if not self.in_tax_unit(member.id):
continue
- chp_eligible = self.sim.value(self.pe_category, str(member.id), 'co_chp_eligible', self.pe_period) > 0
- if chp_eligible and self.screen.has_insurance_types(('none',)):
+ chp_eligible = self.sim.value(self.pe_category, str(member.id), "co_chp_eligible", self.pe_period) > 0
+ if chp_eligible and self.screen.has_insurance_types(("none",)):
total += self.amount
return total
diff --git a/programs/programs/co/pe/tax.py b/programs/programs/co/pe/tax.py
index 53e4aa62..4e84992f 100644
--- a/programs/programs/co/pe/tax.py
+++ b/programs/programs/co/pe/tax.py
@@ -4,16 +4,16 @@
class Coeitc(PolicyEngineTaxUnitCalulator):
- pe_name = 'co_eitc'
+ pe_name = "co_eitc"
pe_inputs = [
- *Eitc.pe_inputs,
+ *Eitc.pe_inputs,
dependency.household.CoStateCode,
]
pe_outputs = [dependency.tax.Coeitc]
class Coctc(PolicyEngineTaxUnitCalulator):
- pe_name = 'ctc'
+ pe_name = "ctc"
pe_inputs = [
dependency.member.AgeDependency,
dependency.member.TaxUnitDependentDependency,
@@ -24,18 +24,18 @@ class Coctc(PolicyEngineTaxUnitCalulator):
pe_outputs = [dependency.tax.Ctc]
income_bands = {
- "single": [{"max": 25000, "percent": .6}, {"max": 50000, "percent": .3}, {"max": 75000, "percent": .1}],
- "maried": [{"max": 35000, "percent": .6}, {"max": 60000, "percent": .3}, {"max": 85000, "percent": .1}]
+ "single": [{"max": 25000, "percent": 0.6}, {"max": 50000, "percent": 0.3}, {"max": 75000, "percent": 0.1}],
+ "maried": [{"max": 35000, "percent": 0.6}, {"max": 60000, "percent": 0.3}, {"max": 85000, "percent": 0.1}],
}
def value(self):
- income = self.screen.calc_gross_income('yearly', ['all'])
- relationship_status = 'maried' if self.screen.is_joint() else 'single'
+ income = self.screen.calc_gross_income("yearly", ["all"])
+ relationship_status = "maried" if self.screen.is_joint() else "single"
multiplier = 0
for band in self.income_bands[relationship_status]:
# if the income is less than the band then set the multiplier and break out of the loop
- if income <= band['max']:
- multiplier = band['percent']
+ if income <= band["max"]:
+ multiplier = band["percent"]
break
return self.get_variable() * multiplier
diff --git a/programs/programs/co/property_credit_rebate/calculator.py b/programs/programs/co/property_credit_rebate/calculator.py
index 274271c3..7165047d 100644
--- a/programs/programs/co/property_credit_rebate/calculator.py
+++ b/programs/programs/co/property_credit_rebate/calculator.py
@@ -7,7 +7,7 @@ class PropertyCreditRebate(ProgramCalculator):
min_age = 65
disabled_min_age = 18
income_limit = {"single": 18_026, "married": 23_345}
- dependencies = ['age', 'income_frequency', 'income_amount', 'relationship']
+ dependencies = ["age", "income_frequency", "income_amount", "relationship"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -22,20 +22,20 @@ def eligible(self) -> Eligibility:
# Someone is old enough
someone_old_enough = self.screen.num_adults(age_max=PropertyCreditRebate.min_age) >= 1
- e.condition(someone_disabled or someone_old_enough,
- messages.has_disability())
+ e.condition(someone_disabled or someone_old_enough, messages.has_disability())
- e.condition(someone_disabled or someone_old_enough,
- messages.older_than(PropertyCreditRebate.min_age))
+ e.condition(someone_disabled or someone_old_enough, messages.older_than(PropertyCreditRebate.min_age))
# Income test
- relationship_status = 'single'
+ relationship_status = "single"
for member_id, married_to in self.screen.relationship_map().items():
if married_to is not None:
- relationship_status = 'married'
+ relationship_status = "married"
- gross_income = self.screen.calc_gross_income('yearly', ['all'])
- e.condition(gross_income <= PropertyCreditRebate.income_limit[relationship_status],
- messages.income(gross_income, PropertyCreditRebate.income_limit[relationship_status]))
+ gross_income = self.screen.calc_gross_income("yearly", ["all"])
+ e.condition(
+ gross_income <= PropertyCreditRebate.income_limit[relationship_status],
+ messages.income(gross_income, PropertyCreditRebate.income_limit[relationship_status]),
+ )
return e
diff --git a/programs/programs/co/property_credit_rebate/tests.py b/programs/programs/co/property_credit_rebate/tests.py
index 849bbfea..3cb476ab 100644
--- a/programs/programs/co/property_credit_rebate/tests.py
+++ b/programs/programs/co/property_credit_rebate/tests.py
@@ -7,16 +7,16 @@ class TestPropertyCreditRebatePension(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
+ zipcode="80205",
+ county="Denver County",
household_size=2,
household_assets=0,
has_tanf=False,
- has_ssi=False
+ has_ssi=False,
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=65,
student=False,
student_full_time=False,
@@ -45,12 +45,8 @@ def test_property_credit_rebate_failed_all_conditions(self):
self.person1.disabled = False
self.person1.save()
income = IncomeStream.objects.create(
- screen=self.screen1,
- household_member=self.person1,
- type='wages',
- amount=2000,
- frequency='monthly'
- )
+ screen=self.screen1, household_member=self.person1, type="wages", amount=2000, frequency="monthly"
+ )
cpcr = PropertyCreditRebate(self.screen1)
eligibility = cpcr.eligibility
diff --git a/programs/programs/co/rental_assistance_grant/calculator.py b/programs/programs/co/rental_assistance_grant/calculator.py
index 20e7c02f..a0fd0af3 100644
--- a/programs/programs/co/rental_assistance_grant/calculator.py
+++ b/programs/programs/co/rental_assistance_grant/calculator.py
@@ -6,18 +6,18 @@
class RAGCache(GoogleSheetsCache):
default = {}
- sheet_id = '1DntpIXZfUY2yTy1_rAhaGLUH4PUAfpTSAn-j2tf2tts'
+ sheet_id = "1DntpIXZfUY2yTy1_rAhaGLUH4PUAfpTSAn-j2tf2tts"
range_name = "'2023 80% AMI'!A2:I65"
def update(self):
data = super().update()
- return {d[0].strip() + ' County': [int(v.replace(',', '')) for v in d[1:]] for d in data}
+ return {d[0].strip() + " County": [int(v.replace(",", "")) for v in d[1:]] for d in data}
class RentalAssistanceGrant(ProgramCalculator):
amount = 10_000
- dependencies = ['income_amount', 'income_frequency', 'household_size', 'zipcode']
+ dependencies = ["income_amount", "income_frequency", "household_size", "zipcode"]
income_limits = RAGCache()
def eligible(self) -> Eligibility:
@@ -28,7 +28,7 @@ def eligible(self) -> Eligibility:
county_name = self.screen.county if self.screen.county is not None else counties[0]
# income
- gross_income = int(self.screen.calc_gross_income('yearly', ['all']))
+ gross_income = int(self.screen.calc_gross_income("yearly", ["all"]))
limits = self.income_limits.fetch()
@@ -40,4 +40,3 @@ def eligible(self) -> Eligibility:
e.condition(gross_income <= income_limit, messages.income(gross_income, income_limit))
return e
-
diff --git a/programs/programs/co/reproductive_health_care/calculator.py b/programs/programs/co/reproductive_health_care/calculator.py
index a8383ee8..c9933222 100644
--- a/programs/programs/co/reproductive_health_care/calculator.py
+++ b/programs/programs/co/reproductive_health_care/calculator.py
@@ -5,13 +5,13 @@
class ReproductiveHealthCare(ProgramCalculator):
amount = 268
- dependencies = ['insurance']
+ dependencies = ["insurance"]
def eligible(self) -> Eligibility:
e = Eligibility()
# No health insurance
- has_no_hi = self.screen.has_insurance_types(('none',))
+ has_no_hi = self.screen.has_insurance_types(("none",))
e.condition(has_no_hi, messages.has_no_insurance())
# Medicade eligibility
diff --git a/programs/programs/co/reproductive_health_care/tests.py b/programs/programs/co/reproductive_health_care/tests.py
index 10fd1ad3..76ee25a5 100644
--- a/programs/programs/co/reproductive_health_care/tests.py
+++ b/programs/programs/co/reproductive_health_care/tests.py
@@ -30,9 +30,7 @@ def setUp(self):
)
def test_reproductive_health_care_pass_all_conditions(self):
- rhc = ReproductiveHealthCare(
- self.screen1, [{"name_abbreviated": "medicaid", "eligible": True}]
- )
+ rhc = ReproductiveHealthCare(self.screen1, [{"name_abbreviated": "medicaid", "eligible": True}])
eligibility = rhc.eligibility
self.assertTrue(eligibility["eligible"])
@@ -41,9 +39,7 @@ def test_reproductive_health_care_failed_all_conditions(self):
self.person1.has_no_hi = False
self.person1.save()
- rhc = ReproductiveHealthCare(
- self.screen1, [{"name_abbreviated": "medicaid", "eligible": False}]
- )
+ rhc = ReproductiveHealthCare(self.screen1, [{"name_abbreviated": "medicaid", "eligible": False}])
eligibility = rhc.eligibility
self.assertFalse(eligibility["eligible"])
diff --git a/programs/programs/co/rtdlive/calculator.py b/programs/programs/co/rtdlive/calculator.py
index d7e43ee3..b8be8c4b 100644
--- a/programs/programs/co/rtdlive/calculator.py
+++ b/programs/programs/co/rtdlive/calculator.py
@@ -6,20 +6,20 @@
class RtdLive(ProgramCalculator):
eligible_counties = [
- 'Adams County',
- 'Arapahoe County',
- 'Boulder County',
- 'Broomfield County',
- 'Denver County',
- 'Douglas County',
- 'Jefferson County'
+ "Adams County",
+ "Arapahoe County",
+ "Boulder County",
+ "Broomfield County",
+ "Denver County",
+ "Douglas County",
+ "Jefferson County",
]
min_age = 20
max_age = 64
percent_of_fpl = 2.5
tax_unit_dependent = True
amount = 732
- dependencies = ['age', 'income_amount', 'income_frequency', 'zipcode', 'household_size']
+ dependencies = ["age", "income_amount", "income_frequency", "zipcode", "household_size"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -30,7 +30,7 @@ def eligible(self) -> Eligibility:
# income
frequency = "yearly"
- income_types = ['all']
+ income_types = ["all"]
fpl = self.program.fpl.as_dict()
income_limit = RtdLive.percent_of_fpl * fpl[len(members)]
@@ -48,7 +48,7 @@ def eligible(self) -> Eligibility:
lambda m: m.age >= RtdLive.min_age and m.age <= RtdLive.max_age,
messages.adult(RtdLive.min_age, RtdLive.max_age),
),
- ]
+ ],
)
# geography
diff --git a/programs/programs/co/tabor/calculator.py b/programs/programs/co/tabor/calculator.py
index fbacb075..ea1e4006 100644
--- a/programs/programs/co/tabor/calculator.py
+++ b/programs/programs/co/tabor/calculator.py
@@ -5,16 +5,14 @@
class Tabor(ProgramCalculator):
min_age = 18
amount = 800
- dependencies = ['age']
+ dependencies = ["age"]
def eligible(self) -> Eligibility:
e = Eligibility()
e.member_eligibility(
self.screen.household_members.all(),
- [
- (lambda m: m.age >= Tabor.min_age, messages.older_than(Tabor.min_age))
- ]
+ [(lambda m: m.age >= Tabor.min_age, messages.older_than(Tabor.min_age))],
)
return e
diff --git a/programs/programs/co/trua/calculator.py b/programs/programs/co/trua/calculator.py
index 33057c53..396dbfcf 100644
--- a/programs/programs/co/trua/calculator.py
+++ b/programs/programs/co/trua/calculator.py
@@ -15,16 +15,16 @@ class Trua(ProgramCalculator):
8: 124_950,
}
- county = 'Denver County'
+ county = "Denver County"
amount = 6_500
- dependencies = ['income_amount', 'income_frequency', 'household_size', 'zipcode']
+ dependencies = ["income_amount", "income_frequency", "household_size", "zipcode"]
def eligible(self) -> Eligibility:
e = Eligibility()
# Income test
gross_income = int(self.screen.calc_gross_income("monthly", ["all"]))
- income_limit = int(Trua.income_limit[self.screen.household_size]/12)
+ income_limit = int(Trua.income_limit[self.screen.household_size] / 12)
# Location test
zipcode = self.screen.zipcode
diff --git a/programs/programs/co/universal_preschool/calculator.py b/programs/programs/co/universal_preschool/calculator.py
index 0916f97e..5e1241a6 100644
--- a/programs/programs/co/universal_preschool/calculator.py
+++ b/programs/programs/co/universal_preschool/calculator.py
@@ -6,12 +6,8 @@ class UniversalPreschool(ProgramCalculator):
qualifying_age = 3
age = 4
percent_of_fpl = 2.7
- amount = {
- '10_hours': 4_837,
- '15_hours': 6_044,
- '30_hours': 10_655
- }
- dependencies = ['age', 'income_amount', 'income_frequency', 'relationship', 'household_size']
+ amount = {"10_hours": 4_837, "15_hours": 6_044, "30_hours": 10_655}
+ dependencies = ["age", "income_amount", "income_frequency", "relationship", "household_size"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -19,7 +15,7 @@ def eligible(self) -> Eligibility:
foster_children = self.screen.num_children(
age_min=UniversalPreschool.qualifying_age,
age_max=UniversalPreschool.age,
- child_relationship=['fosterChild']
+ child_relationship=["fosterChild"],
)
income_requirement = self._meets_income_requirement()
@@ -28,15 +24,14 @@ def eligible(self) -> Eligibility:
# Has child
children = self.screen.num_children(age_min=UniversalPreschool.age, age_max=UniversalPreschool.age)
qualifying_children = self.screen.num_children(
- age_min=UniversalPreschool.qualifying_age,
- age_max=UniversalPreschool.age
+ age_min=UniversalPreschool.qualifying_age, age_max=UniversalPreschool.age
)
min_age = UniversalPreschool.qualifying_age if other_factors else UniversalPreschool.age
e.condition(
children >= 1 or (qualifying_children >= 1 and other_factors),
- messages.child(min_age, UniversalPreschool.age)
+ messages.child(min_age, UniversalPreschool.age),
)
return e
@@ -48,17 +43,17 @@ def value(self, eligible_members: int):
for child in self.screen.household_members.filter(
age__range=(UniversalPreschool.qualifying_age, UniversalPreschool.age)
):
- if child.relationship == 'fosterChild' or income_requirement:
+ if child.relationship == "fosterChild" or income_requirement:
if child.age == 3:
- value += UniversalPreschool.amount['10_hours']
+ value += UniversalPreschool.amount["10_hours"]
else:
- value += UniversalPreschool.amount['30_hours']
+ value += UniversalPreschool.amount["30_hours"]
else:
- value += UniversalPreschool.amount['15_hours']
+ value += UniversalPreschool.amount["15_hours"]
return value
def _meets_income_requirement(self):
fpl = self.program.fpl.as_dict()
income_limit = int(UniversalPreschool.percent_of_fpl * fpl[self.screen.household_size])
- return self.screen.calc_gross_income('yearly', ['all']) < income_limit
+ return self.screen.calc_gross_income("yearly", ["all"]) < income_limit
diff --git a/programs/programs/co/utility_bill_pay/calculator.py b/programs/programs/co/utility_bill_pay/calculator.py
index e93169bd..f47b513c 100644
--- a/programs/programs/co/utility_bill_pay/calculator.py
+++ b/programs/programs/co/utility_bill_pay/calculator.py
@@ -13,9 +13,9 @@ class UtilityBillPay(ProgramCalculator):
96_014,
101_120,
)
- presumptive_eligibility = ('snap', 'ssi', 'andcs', 'tanf', 'wic')
+ presumptive_eligibility = ("snap", "ssi", "andcs", "tanf", "wic")
amount = 350
- dependencies = ['household_size', 'income_amount', 'income_frequency']
+ dependencies = ["household_size", "income_amount", "income_frequency"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -27,7 +27,7 @@ def eligible(self) -> Eligibility:
presumptive_eligible = True
# income
- income = int(self.screen.calc_gross_income('yearly', ['all']))
+ income = int(self.screen.calc_gross_income("yearly", ["all"]))
income_limit = UtilityBillPay.income_limits[self.screen.household_size - 1]
e.condition(income < income_limit or presumptive_eligible, messages.income(income, income_limit))
diff --git a/programs/programs/co/weatherization_assistance/calculator.py b/programs/programs/co/weatherization_assistance/calculator.py
index 596d2b48..2f8190dc 100644
--- a/programs/programs/co/weatherization_assistance/calculator.py
+++ b/programs/programs/co/weatherization_assistance/calculator.py
@@ -13,16 +13,16 @@ class WeatherizationAssistance(ProgramCalculator):
96_014,
101_120,
)
- presumptive_eligibility = ('andcs', 'ssi', 'snap', 'leap', 'tanf')
+ presumptive_eligibility = ("andcs", "ssi", "snap", "leap", "tanf")
amount = 350
- dependencies = ['household_size', 'income_amount', 'income_frequency']
+ dependencies = ["household_size", "income_amount", "income_frequency"]
def eligible(self) -> Eligibility:
e = Eligibility()
# income condition
income_limit = WeatherizationAssistance.income_limits[self.screen.household_size - 1]
- income = int(self.screen.calc_gross_income('yearly', ['all']))
+ income = int(self.screen.calc_gross_income("yearly", ["all"]))
income_eligible = income <= income_limit
# categorical eligibility
diff --git a/programs/programs/federal/__init__.py b/programs/programs/federal/__init__.py
index b8f23164..60fd00ab 100644
--- a/programs/programs/federal/__init__.py
+++ b/programs/programs/federal/__init__.py
@@ -4,7 +4,7 @@
from ..calc import ProgramCalculator
federal_calculators: dict[str, type[ProgramCalculator]] = {
- 'ssdi': Ssdi,
- 'chs': HeadStart,
- 'medicare_savings': MedicareSavings,
+ "ssdi": Ssdi,
+ "chs": HeadStart,
+ "medicare_savings": MedicareSavings,
}
diff --git a/programs/programs/federal/head_start/calculator.py b/programs/programs/federal/head_start/calculator.py
index 2e343d80..d9f5dec9 100644
--- a/programs/programs/federal/head_start/calculator.py
+++ b/programs/programs/federal/head_start/calculator.py
@@ -8,9 +8,9 @@ class HeadStart(ProgramCalculator):
amount = 10655
max_age = 5
min_age = 3
- adams_percent_of_fpl = 1.3 # Adams County uses 130% FPL instead of 100% FPL
- adams_county = 'Adams County'
- dependencies = ['age', 'household_size', 'income_frequency', 'income_amount', 'zipcode']
+ adams_percent_of_fpl = 1.3 # Adams County uses 130% FPL instead of 100% FPL
+ adams_county = "Adams County"
+ dependencies = ["age", "household_size", "income_frequency", "income_amount", "zipcode"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -33,17 +33,19 @@ def eligible(self) -> Eligibility:
break
e.condition(in_eligible_county, messages.location())
-
+
in_adams = HeadStart.adams_county in counties
# income
fpl = self.program.fpl.as_dict()
income_limit = int(fpl[self.screen.household_size] / 12)
income_limit_adams_county = int(fpl[self.screen.household_size] / 12 * HeadStart.adams_percent_of_fpl)
- gross_income = int(self.screen.calc_gross_income('monthly', ['all']))
+ gross_income = int(self.screen.calc_gross_income("monthly", ["all"]))
if in_adams:
- e.condition(gross_income < income_limit_adams_county, messages.income(gross_income, income_limit_adams_county))
+ e.condition(
+ gross_income < income_limit_adams_county, messages.income(gross_income, income_limit_adams_county)
+ )
else:
e.condition(gross_income < income_limit, messages.income(gross_income, income_limit))
diff --git a/programs/programs/federal/head_start/eligible_zipcodes.py b/programs/programs/federal/head_start/eligible_zipcodes.py
index 1b643547..d24b33c5 100644
--- a/programs/programs/federal/head_start/eligible_zipcodes.py
+++ b/programs/programs/federal/head_start/eligible_zipcodes.py
@@ -1,40 +1,40 @@
eligible_zipcode = [
- 'Adams County',
- 'Alamosa County',
- 'Arapahoe County',
- 'Archuleta County',
- 'Bent County',
- 'Boulder County',
- 'Chaffee County',
- 'Conejos County',
- 'Costilla County',
- 'Delta County',
- 'Denver County',
- 'Eagle County',
- 'El Paso County',
- 'Fremont County',
- 'Garfield County',
- 'Huerfano County',
- 'Jefferson County',
- 'La Plata County',
- 'Lake County',
- 'Larimer County',
- 'Las Animas County',
- 'Lincoln County',
- 'Logan County',
- 'Mesa County',
- 'Moffat County',
- 'Montezuma County',
- 'Montrose County',
- 'Morgan County',
- 'Otero County',
- 'Prowers County',
- 'Pueblo County',
- 'Rio Grande County',
- 'Saguache County',
- 'Summit County',
- 'Teller County',
- 'Washington County',
- 'Weld County',
- 'Yuma County',
+ "Adams County",
+ "Alamosa County",
+ "Arapahoe County",
+ "Archuleta County",
+ "Bent County",
+ "Boulder County",
+ "Chaffee County",
+ "Conejos County",
+ "Costilla County",
+ "Delta County",
+ "Denver County",
+ "Eagle County",
+ "El Paso County",
+ "Fremont County",
+ "Garfield County",
+ "Huerfano County",
+ "Jefferson County",
+ "La Plata County",
+ "Lake County",
+ "Larimer County",
+ "Las Animas County",
+ "Lincoln County",
+ "Logan County",
+ "Mesa County",
+ "Moffat County",
+ "Montezuma County",
+ "Montrose County",
+ "Morgan County",
+ "Otero County",
+ "Prowers County",
+ "Pueblo County",
+ "Rio Grande County",
+ "Saguache County",
+ "Summit County",
+ "Teller County",
+ "Washington County",
+ "Weld County",
+ "Yuma County",
]
diff --git a/programs/programs/federal/head_start/tests.py b/programs/programs/federal/head_start/tests.py
index 89c7866c..0e8ce00b 100644
--- a/programs/programs/federal/head_start/tests.py
+++ b/programs/programs/federal/head_start/tests.py
@@ -7,14 +7,14 @@ class TestHeadStartPension(TestCase):
def setUp(self):
self.screen1 = Screen.objects.create(
agree_to_tos=True,
- zipcode='80205',
- county='Denver County',
+ zipcode="80205",
+ county="Denver County",
household_size=2,
household_assets=0,
)
self.person1 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='headOfHousehold',
+ relationship="headOfHousehold",
age=30,
student=False,
student_full_time=False,
@@ -29,7 +29,7 @@ def setUp(self):
)
self.person2 = HouseholdMember.objects.create(
screen=self.screen1,
- relationship='child',
+ relationship="child",
age=4,
student=False,
student_full_time=False,
@@ -51,17 +51,13 @@ def test_head_start_visually_impaired_is_eligible(self):
def test_head_start_failed_all_conditions(self):
income = IncomeStream.objects.create(
- screen=self.screen1,
- household_member=self.person1,
- type='wages',
- amount=2000,
- frequency='monthly'
+ screen=self.screen1, household_member=self.person1, type="wages", amount=2000, frequency="monthly"
)
self.screen1.save()
- self.person2.age=6
+ self.person2.age = 6
self.person2.save()
chs = HeadStart(self.screen1)
eligibility = chs.eligibility
- self.assertFalse(eligibility["eligible"])
\ No newline at end of file
+ self.assertFalse(eligibility["eligible"])
diff --git a/programs/programs/federal/medicare_savings/calculator.py b/programs/programs/federal/medicare_savings/calculator.py
index 0803e45f..b3ef1177 100644
--- a/programs/programs/federal/medicare_savings/calculator.py
+++ b/programs/programs/federal/medicare_savings/calculator.py
@@ -3,18 +3,18 @@
class MedicareSavings(ProgramCalculator):
- valid_insurance = ('none', 'employer', 'private', 'medicare')
+ valid_insurance = ("none", "employer", "private", "medicare")
asset_limit = {
- 'single': 10_930,
- 'married': 17_130,
+ "single": 10_930,
+ "married": 17_130,
}
income_limit = {
- 'single': 1_715,
- 'married': 2_320,
+ "single": 1_715,
+ "married": 2_320,
}
min_age = 65
amount = 175
- dependencies = ['household_assets', 'relationship', 'income_frequency', 'income_amount', 'age']
+ dependencies = ["household_assets", "relationship", "income_frequency", "income_amount", "age"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -22,19 +22,19 @@ def eligible(self) -> Eligibility:
members = self.screen.household_members.all()
def asset_limit(member):
- status = 'married' if member.is_married()['is_married'] else 'single'
+ status = "married" if member.is_married()["is_married"] else "single"
return self.screen.household_assets < MedicareSavings.asset_limit[status]
def income_limit(member):
is_married = member.is_married()
- if not is_married['is_married']:
- status = 'single'
+ if not is_married["is_married"]:
+ status = "single"
spouse_income = 0
else:
- status = 'married'
- spouse_income = is_married['married_to'].calc_gross_income('monthly', ('all',))
+ status = "married"
+ spouse_income = is_married["married_to"].calc_gross_income("monthly", ("all",))
max_income = MedicareSavings.income_limit[status]
- income = member.calc_gross_income('monthly', ('all',)) + spouse_income
+ income = member.calc_gross_income("monthly", ("all",)) + spouse_income
return income < max_income
e.member_eligibility(
@@ -43,11 +43,11 @@ def income_limit(member):
(lambda m: m.age >= MedicareSavings.min_age, messages.older_than(MedicareSavings.min_age)),
(
lambda m: m.insurance.has_insurance_types(MedicareSavings.valid_insurance),
- messages.has_no_insurance()
+ messages.has_no_insurance(),
),
(asset_limit, None),
- (income_limit, None)
- ]
+ (income_limit, None),
+ ],
)
return e
diff --git a/programs/programs/federal/pe/__init__.py b/programs/programs/federal/pe/__init__.py
index 5416e2db..bafc4afa 100644
--- a/programs/programs/federal/pe/__init__.py
+++ b/programs/programs/federal/pe/__init__.py
@@ -5,22 +5,22 @@
federal_member_calculators = {
- 'wic': member.Wic,
- 'pell_grant': member.PellGrant,
- 'ssi': member.Ssi,
+ "wic": member.Wic,
+ "pell_grant": member.PellGrant,
+ "ssi": member.Ssi,
}
federal_spm_unit_calculators = {
- 'acp': spm.Acp,
- 'lifeline': spm.Lifeline,
- 'nslp': spm.SchoolLunch,
- 'snap': spm.Snap,
- 'tanf': spm.Tanf,
+ "acp": spm.Acp,
+ "lifeline": spm.Lifeline,
+ "nslp": spm.SchoolLunch,
+ "snap": spm.Snap,
+ "tanf": spm.Tanf,
}
federal_tax_unit_calculators = {
- 'eitc': tax.Eitc,
- 'ctc': tax.Ctc,
+ "eitc": tax.Eitc,
+ "ctc": tax.Ctc,
}
federal_pe_calculators: dict[str, type[PolicyEngineCalulator]] = {
@@ -28,4 +28,3 @@
**federal_spm_unit_calculators,
**federal_tax_unit_calculators,
}
-
diff --git a/programs/programs/federal/pe/member.py b/programs/programs/federal/pe/member.py
index e6d842fb..7bd6141d 100644
--- a/programs/programs/federal/pe/member.py
+++ b/programs/programs/federal/pe/member.py
@@ -4,14 +4,14 @@
class Wic(PolicyEngineMembersCalculator):
wic_categories = {
- 'NONE': 0,
- 'INFANT': 130,
- 'CHILD': 74,
+ "NONE": 0,
+ "INFANT": 130,
+ "CHILD": 74,
"PREGNANT": 100,
"POSTPARTUM": 100,
"BREASTFEEDING": 100,
}
- pe_name = 'wic'
+ pe_name = "wic"
pe_inputs = [
dependency.member.PregnancyDependency,
dependency.member.AgeDependency,
@@ -25,14 +25,14 @@ def value(self):
for member in self.screen.household_members.all():
if self.get_member_variable(member.id) > 0:
- wic_category = self.sim.value('people', str(member.id), 'wic_category', self.pe_period)
+ wic_category = self.sim.value("people", str(member.id), "wic_category", self.pe_period)
total += self.wic_categories[wic_category] * 12
return total
class Medicaid(PolicyEngineMembersCalculator):
- pe_name = 'medicaid'
+ pe_name = "medicaid"
pe_inputs = [
dependency.member.AgeDependency,
dependency.member.PregnancyDependency,
@@ -94,19 +94,21 @@ def value(self):
if member.pregnant is True or member.age <= 5:
in_wic_demographic = True
if total == 0 and in_wic_demographic:
- if self.screen.has_benefit('medicaid') is True \
- or self.screen.has_benefit('tanf') is True \
- or self.screen.has_benefit('snap') is True:
+ if (
+ self.screen.has_benefit("medicaid") is True
+ or self.screen.has_benefit("tanf") is True
+ or self.screen.has_benefit("snap") is True
+ ):
total = self.presumptive_amount
return total
def _get_age(self, member_id: int) -> int:
- return self.sim.value(self.pe_category, str(member_id), 'age', self.pe_period)
+ return self.sim.value(self.pe_category, str(member_id), "age", self.pe_period)
class PellGrant(PolicyEngineMembersCalculator):
- pe_name = 'pell_grant'
+ pe_name = "pell_grant"
pe_inputs = [
dependency.member.PellGrantDependentAvailableIncomeDependency,
dependency.member.PellGrantCountableAssetsDependency,
@@ -122,7 +124,7 @@ class PellGrant(PolicyEngineMembersCalculator):
class Ssi(PolicyEngineMembersCalculator):
- pe_name = 'ssi'
+ pe_name = "ssi"
pe_inputs = [
dependency.member.SsiCountableResourcesDependency,
dependency.member.SsiReportedDependency,
@@ -136,4 +138,3 @@ class Ssi(PolicyEngineMembersCalculator):
dependency.member.TaxUnitDependentDependency,
]
pe_outputs = [dependency.member.Ssi]
-
diff --git a/programs/programs/federal/pe/spm.py b/programs/programs/federal/pe/spm.py
index c312d267..b55f229f 100644
--- a/programs/programs/federal/pe/spm.py
+++ b/programs/programs/federal/pe/spm.py
@@ -4,7 +4,7 @@
class Snap(PolicyEngineSpmCalulator):
- pe_name = 'snap'
+ pe_name = "snap"
pe_inputs = [
dependency.spm.SnapChildSupportDeductionDependency,
dependency.spm.SnapGrossIncomeDependency,
@@ -29,7 +29,7 @@ def value(self):
class SchoolLunch(PolicyEngineSpmCalulator):
- pe_name = 'school_meal_daily_subsidy'
+ pe_name = "school_meal_daily_subsidy"
pe_inputs = dependency.school_lunch_income
pe_outputs = [dependency.spm.SchoolMealDailySubsidy, dependency.spm.SchoolMealTier]
@@ -40,14 +40,14 @@ def value(self):
num_children = self.screen.num_children(3, 18)
if self.get_variable() > 0 and num_children > 0:
- if self.sim.value(self.pe_category, self.pe_sub_category, 'school_meal_tier', self.pe_period) != 'PAID':
+ if self.sim.value(self.pe_category, self.pe_sub_category, "school_meal_tier", self.pe_period) != "PAID":
total = SchoolLunch.amount * num_children
return total
class Tanf(PolicyEngineSpmCalulator):
- pe_name = 'co_tanf'
+ pe_name = "co_tanf"
pe_inputs = [
dependency.member.AgeDependency,
dependency.member.PregnancyDependency,
@@ -59,7 +59,7 @@ class Tanf(PolicyEngineSpmCalulator):
class Acp(PolicyEngineSpmCalulator):
- pe_name = 'acp'
+ pe_name = "acp"
pe_inputs = [
dependency.spm.BroadbandCostDependency,
*dependency.irs_gross_income,
@@ -68,7 +68,7 @@ class Acp(PolicyEngineSpmCalulator):
class Lifeline(PolicyEngineSpmCalulator):
- pe_name = 'lifeline'
+ pe_name = "lifeline"
pe_inputs = [
dependency.spm.BroadbandCostDependency,
*dependency.irs_gross_income,
diff --git a/programs/programs/federal/pe/tax.py b/programs/programs/federal/pe/tax.py
index b7e63e8c..ceb6673e 100644
--- a/programs/programs/federal/pe/tax.py
+++ b/programs/programs/federal/pe/tax.py
@@ -3,7 +3,7 @@
class Eitc(PolicyEngineTaxUnitCalulator):
- pe_name = 'eitc'
+ pe_name = "eitc"
pe_inputs = [
dependency.member.AgeDependency,
dependency.member.TaxUnitSpouseDependency,
@@ -13,9 +13,8 @@ class Eitc(PolicyEngineTaxUnitCalulator):
pe_outputs = [dependency.tax.Eitc]
-
class Ctc(PolicyEngineTaxUnitCalulator):
- pe_name = 'ctc'
+ pe_name = "ctc"
pe_inputs = [
dependency.member.AgeDependency,
dependency.member.TaxUnitDependentDependency,
@@ -23,5 +22,3 @@ class Ctc(PolicyEngineTaxUnitCalulator):
*dependency.irs_gross_income,
]
pe_outputs = [dependency.tax.Ctc]
-
-
diff --git a/programs/programs/federal/ssdi/calculator.py b/programs/programs/federal/ssdi/calculator.py
index 031e742f..b7472fb0 100644
--- a/programs/programs/federal/ssdi/calculator.py
+++ b/programs/programs/federal/ssdi/calculator.py
@@ -7,7 +7,7 @@ class Ssdi(ProgramCalculator):
income_limit = 1_550
income_limit_blind = 2_590
amount = 1_537
- dependencies = ['income_amount', 'income_frequency', 'household_size']
+ dependencies = ["income_amount", "income_frequency", "household_size"]
def eligible(self) -> Eligibility:
e = Eligibility()
@@ -20,7 +20,7 @@ def income_condition(member):
nonlocal cat_eligibile
income_limit = Ssdi.income_limit_blind if member.visually_impaired else Ssdi.income_limit
- member_income = member.calc_gross_income('monthly', ('all',))
+ member_income = member.calc_gross_income("monthly", ("all",))
if member_income < lowest_income:
lowest_income = member_income
@@ -30,10 +30,7 @@ def income_condition(member):
e.member_eligibility(
self.screen.household_members.all(),
- [
- (lambda m: m.has_disability(), messages.has_disability()),
- (income_condition, None)
- ]
+ [(lambda m: m.has_disability(), messages.has_disability()), (income_condition, None)],
)
if cat_eligibile > 0:
diff --git a/programs/programs/messages.py b/programs/programs/messages.py
index 49f18f07..0ab02d29 100644
--- a/programs/programs/messages.py
+++ b/programs/programs/messages.py
@@ -1,118 +1,98 @@
def translation(name, i, message):
- return {
- 'default_message': message,
- 'label': f'eligibility_message.{name}-{i}'
- }
+ return {"default_message": message, "label": f"eligibility_message.{name}-{i}"}
def income(income, max_income):
- '''
+ """
Household makes ${income} per year which must be less than ${max_income}
- '''
+ """
return (
- translation('income', 0, 'Household makes'),
- f' ${round(income)} ',
- translation('income', 1, 'per year which must be less than'),
- f' ${round(max_income)}'
+ translation("income", 0, "Household makes"),
+ f" ${round(income)} ",
+ translation("income", 1, "per year which must be less than"),
+ f" ${round(max_income)}",
)
def assets(asset_limit):
- '''
+ """
Household resources must not exceed ${asset_limit}
- '''
- return (
- translation('assets', 0, 'Household resources must not exceed'),
- f' ${round(asset_limit)}'
- )
+ """
+ return (translation("assets", 0, "Household resources must not exceed"), f" ${round(asset_limit)}")
def child(min_age=0, max_age=18):
- '''
+ """
Must have a child between the ages of {min_age} and {max_age}
- '''
+ """
return (
- translation('child', 0, 'Must have a child between the ages of'),
- f' {min_age} ',
- translation('child', 1, 'and'),
- f' {max_age}'
+ translation("child", 0, "Must have a child between the ages of"),
+ f" {min_age} ",
+ translation("child", 1, "and"),
+ f" {max_age}",
)
def adult(min_age, max_age):
- '''
+ """
Someone in the household must be between the ages of {min_age} and {max_age}
- '''
+ """
return (
- translation('adult', 0, 'Someone in the household must be between the ages of'),
- f' {min_age} ',
- translation('adult', 1, 'and'),
- f' {max_age}'
+ translation("adult", 0, "Someone in the household must be between the ages of"),
+ f" {min_age} ",
+ translation("adult", 1, "and"),
+ f" {max_age}",
)
def older_than(min_age):
- '''
+ """
Someone in the household must be at least {min_age} years old
- '''
+ """
return (
- translation('older_than', 0, 'Someone in the household must be at least'),
- f' {min_age} ',
- translation('older_than', 1, 'years old')
+ translation("older_than", 0, "Someone in the household must be at least"),
+ f" {min_age} ",
+ translation("older_than", 1, "years old"),
)
def must_have_benefit(benefit_name):
- '''
+ """
Household must have {benefit_name}
- '''
- return (
- translation('has_benefit', 0, 'Household must have'),
- f' {benefit_name}'
- )
+ """
+ return (translation("has_benefit", 0, "Household must have"), f" {benefit_name}")
def must_not_have_benefit(benefit_name):
- '''
+ """
Household must not have {benefit_name}
- '''
- return (
- translation('not_have_benefit', 0, 'Household must not have'),
- f' {benefit_name}'
- )
+ """
+ return (translation("not_have_benefit", 0, "Household must not have"), f" {benefit_name}")
def location():
- '''
+ """
Must live in an eligible location
- '''
- return (
- translation('location', 0, 'Must live in an eligible location'),
- )
+ """
+ return (translation("location", 0, "Must live in an eligible location"),)
def has_disability():
- '''
+ """
Someone in the household must have a disability
- '''
- return (
- translation('disability', 0, 'Someone in the household must have a disability'),
- )
+ """
+ return (translation("disability", 0, "Someone in the household must have a disability"),)
def has_no_insurance():
- '''
+ """
Someone in the household must not have health insurance
- '''
- return (
- translation('no_insurance', 0, 'Someone in the household must not have health insurance'),
- )
+ """
+ return (translation("no_insurance", 0, "Someone in the household must not have health insurance"),)
def is_pregnant():
- '''
+ """
Someone in the household must be pregnant
- '''
- return (
- translation('pregnant', 0, 'Someone in the household must be pregnant'),
- )
+ """
+ return (translation("pregnant", 0, "Someone in the household must be pregnant"),)
diff --git a/programs/programs/nc/pe/__init__.py b/programs/programs/nc/pe/__init__.py
index 9d323c10..9a7fb52d 100644
--- a/programs/programs/nc/pe/__init__.py
+++ b/programs/programs/nc/pe/__init__.py
@@ -3,11 +3,10 @@
nc_member_calculators = {
- 'nc_medicaid': member.NcMedicaid,
+ "nc_medicaid": member.NcMedicaid,
}
nc_pe_calculators: dict[str, type[PolicyEngineCalulator]] = {
**nc_member_calculators,
}
-
diff --git a/programs/programs/nc/pe/member.py b/programs/programs/nc/pe/member.py
index b9e9ddf9..053e0b5a 100644
--- a/programs/programs/nc/pe/member.py
+++ b/programs/programs/nc/pe/member.py
@@ -3,11 +3,11 @@
class NcMedicaid(Medicaid):
- child_medicaid_average = 200 * 12 # TODO: NC specific average goes here
- adult_medicaid_average = 310 * 12 # TODO: NC specific average goes here
- aged_medicaid_average = 170 * 12 # TODO: NC specific average goes here
+ child_medicaid_average = 200 * 12 # TODO: NC specific average goes here
+ adult_medicaid_average = 310 * 12 # TODO: NC specific average goes here
+ aged_medicaid_average = 170 * 12 # TODO: NC specific average goes here
pe_inputs = [
- *Medicaid.pe_inputs,
+ *Medicaid.pe_inputs,
dependency.household.NcStateCode,
]
@@ -15,4 +15,3 @@ class NcMedicaid(Medicaid):
# def value(self):
# ...
# return 500
-
diff --git a/programs/programs/policyengine/calculators/__init__.py b/programs/programs/policyengine/calculators/__init__.py
index 6ecf236c..7adce32a 100644
--- a/programs/programs/policyengine/calculators/__init__.py
+++ b/programs/programs/policyengine/calculators/__init__.py
@@ -1,7 +1,16 @@
-from programs.programs.federal.pe import federal_member_calculators, federal_spm_unit_calculators, federal_tax_unit_calculators
+from programs.programs.federal.pe import (
+ federal_member_calculators,
+ federal_spm_unit_calculators,
+ federal_tax_unit_calculators,
+)
from programs.programs.co.pe import co_member_calculators, co_tax_unit_calculators
from programs.programs.nc.pe import nc_member_calculators
-from .base import PolicyEngineMembersCalculator, PolicyEngineSpmCalulator, PolicyEngineTaxUnitCalulator, PolicyEngineCalulator
+from .base import (
+ PolicyEngineMembersCalculator,
+ PolicyEngineSpmCalulator,
+ PolicyEngineTaxUnitCalulator,
+ PolicyEngineCalulator,
+)
all_member_calculators: dict[str, type[PolicyEngineMembersCalculator]] = {
@@ -26,4 +35,3 @@
}
all_pe_programs = all_calculators.keys()
-
diff --git a/programs/programs/policyengine/calculators/base.py b/programs/programs/policyengine/calculators/base.py
index 1eaea971..3754aafb 100644
--- a/programs/programs/policyengine/calculators/base.py
+++ b/programs/programs/policyengine/calculators/base.py
@@ -8,16 +8,16 @@
class PolicyEngineCalulator(ProgramCalculator):
- '''
+ """
Base class for all Policy Engine programs
- '''
+ """
pe_inputs: List[type[PolicyEngineScreenInput]] = []
pe_outputs: List[type[PolicyEngineScreenInput]] = []
- pe_name = ''
- pe_category = ''
- pe_sub_category = ''
+ pe_name = ""
+ pe_category = ""
+ pe_sub_category = ""
pe_period = YEAR
def __init__(self, screen: Screen, sim: Sim):
@@ -35,9 +35,9 @@ def value(self):
return int(self.get_variable())
def get_variable(self):
- '''
+ """
Return value of the default variable
- '''
+ """
return self.sim.value(self.pe_category, self.pe_sub_category, self.pe_name, self.pe_period)
@classmethod
@@ -50,20 +50,20 @@ def can_calc(cls, missing_dependencies: Dependencies):
class PolicyEngineTaxUnitCalulator(PolicyEngineCalulator):
- pe_category = 'tax_units'
- pe_sub_category = 'tax_unit'
+ pe_category = "tax_units"
+ pe_sub_category = "tax_unit"
tax_unit_dependent = True
pe_period = PREVIOUS_YEAR
class PolicyEngineSpmCalulator(PolicyEngineCalulator):
- pe_category = 'spm_units'
- pe_sub_category = 'spm_unit'
+ pe_category = "spm_units"
+ pe_sub_category = "spm_unit"
class PolicyEngineMembersCalculator(PolicyEngineCalulator):
tax_unit_dependent = True
- pe_category = 'people'
+ pe_category = "people"
def value(self):
total = 0
@@ -80,8 +80,7 @@ def value(self):
return total
def in_tax_unit(self, member_id: int) -> bool:
- return str(member_id) in self.sim.members('tax_units', 'tax_unit')
+ return str(member_id) in self.sim.members("tax_units", "tax_unit")
def get_member_variable(self, member_id: int):
return self.sim.value(self.pe_category, str(member_id), self.pe_name, self.pe_period)
-
diff --git a/programs/programs/policyengine/calculators/constants.py b/programs/programs/policyengine/calculators/constants.py
index 2143bb25..11af220f 100644
--- a/programs/programs/policyengine/calculators/constants.py
+++ b/programs/programs/policyengine/calculators/constants.py
@@ -2,6 +2,6 @@
# Medicaid
# CHP+
-YEAR = '2024'
-PREVIOUS_YEAR = '2023'
-SNAP_PERIOD = '2024-01'
+YEAR = "2024"
+PREVIOUS_YEAR = "2023"
+SNAP_PERIOD = "2024-01"
diff --git a/programs/programs/policyengine/calculators/dependencies/base.py b/programs/programs/policyengine/calculators/dependencies/base.py
index 7c571fec..ca8536ca 100644
--- a/programs/programs/policyengine/calculators/dependencies/base.py
+++ b/programs/programs/policyengine/calculators/dependencies/base.py
@@ -3,14 +3,14 @@
class PolicyEngineScreenInput:
- '''
+ """
Base class for all Policy Engine dependencies
- '''
+ """
member = False
- unit = ''
- sub_unit = ''
- field = ''
+ unit = ""
+ sub_unit = ""
+ field = ""
dependencies = tuple()
def __init__(self, screen: Screen, members: List[HouseholdMember], relationship_map):
@@ -19,45 +19,45 @@ def __init__(self, screen: Screen, members: List[HouseholdMember], relationship_
self.relationship_map = relationship_map
def value(self):
- '''
+ """
Return the value to send to Policy Engine
- '''
+ """
return None
class Household(PolicyEngineScreenInput):
- '''
+ """
Base class for all household unit Policy Engine dependencies
- '''
+ """
- unit = 'households'
- sub_unit = 'household'
+ unit = "households"
+ sub_unit = "household"
class TaxUnit(PolicyEngineScreenInput):
- '''
+ """
Base class for all tax unit Policy Engine dependencies
- '''
+ """
- unit = 'tax_units'
- sub_unit = 'tax_unit'
+ unit = "tax_units"
+ sub_unit = "tax_unit"
class SpmUnit(PolicyEngineScreenInput):
- '''
+ """
Base class for all spm unit Policy Engine dependencies
- '''
+ """
- unit = 'spm_units'
- sub_unit = 'spm_unit'
+ unit = "spm_units"
+ sub_unit = "spm_unit"
class Member(PolicyEngineScreenInput):
- '''
+ """
Base class for all member unit Policy Engine dependencies
- '''
+ """
- unit = 'people'
+ unit = "people"
member = True
def __init__(self, screen: Screen, member: HouseholdMember, relationship_map):
@@ -70,9 +70,9 @@ def value(self):
class DependencyError(Exception):
- '''
+ """
Dependency conflict error
- '''
+ """
def __init__(self, field, value_1, value_2) -> None:
- super().__init__(f'Confilcting Policy Engine Dependencies in {field}: {value_1} and {value_2}')
+ super().__init__(f"Confilcting Policy Engine Dependencies in {field}: {value_1} and {value_2}")
diff --git a/programs/programs/policyengine/calculators/dependencies/household.py b/programs/programs/policyengine/calculators/dependencies/household.py
index 4b3e3149..be221dd0 100644
--- a/programs/programs/policyengine/calculators/dependencies/household.py
+++ b/programs/programs/policyengine/calculators/dependencies/household.py
@@ -2,17 +2,17 @@
class StateCode(Household):
- field = 'state_code'
+ field = "state_code"
- state = ''
+ state = ""
def value(self):
return self.state
class CoStateCode(StateCode):
- state = 'CO'
+ state = "CO"
-class NcStateCode(StateCode):
- state = 'NC'
+class NcStateCode(StateCode):
+ state = "NC"
diff --git a/programs/programs/policyengine/calculators/dependencies/member.py b/programs/programs/policyengine/calculators/dependencies/member.py
index 273e8263..bc5e1d28 100644
--- a/programs/programs/policyengine/calculators/dependencies/member.py
+++ b/programs/programs/policyengine/calculators/dependencies/member.py
@@ -2,50 +2,50 @@
class AgeDependency(Member):
- field = 'age'
- dependencies = ('age',)
+ field = "age"
+ dependencies = ("age",)
def value(self):
return self.member.age
class PregnancyDependency(Member):
- field = 'is_pregnant'
+ field = "is_pregnant"
def value(self):
return self.member.pregnant or False
class FullTimeCollegeStudentDependency(Member):
- field = 'is_full_time_college_student'
+ field = "is_full_time_college_student"
def value(self):
return self.member.student or False
class TaxUnitHeadDependency(Member):
- field = 'is_tax_unit_head'
- dependencies = ('relationship',)
+ field = "is_tax_unit_head"
+ dependencies = ("relationship",)
def value(self):
return self.member.is_head()
class TaxUnitSpouseDependency(Member):
- field = 'is_tax_unit_spouse'
- dependencies = ('relationship',)
+ field = "is_tax_unit_spouse"
+ dependencies = ("relationship",)
def value(self):
return self.member.is_spouse()
class TaxUnitDependentDependency(Member):
- field = 'is_tax_unit_dependent'
+ field = "is_tax_unit_dependent"
dependencies = (
- 'relationship',
- 'age',
- 'income_amount',
- 'income_frequency',
+ "relationship",
+ "age",
+ "income_amount",
+ "income_frequency",
)
def value(self):
@@ -53,37 +53,37 @@ def value(self):
class WicCategory(Member):
- field = 'wic_category'
+ field = "wic_category"
class Wic(Member):
- field = 'wic'
+ field = "wic"
class Medicaid(Member):
- field = 'medicaid'
+ field = "medicaid"
class Ssi(Member):
- field = 'ssi'
+ field = "ssi"
class IsDisabledDependency(Member):
- field = 'is_disabled'
+ field = "is_disabled"
def value(self):
return self.member.disabled or self.member.long_term_disability
class IsBlindDependency(Member):
- field = 'is_blind'
+ field = "is_blind"
def value(self):
return self.member.visually_impaired
class SsiReportedDependency(Member):
- field = 'ssi_reported'
+ field = "ssi_reported"
def value(self):
# Policy Eninge uses this value for is_ssi_disabled, but it does not apply to MFB
@@ -91,10 +91,10 @@ def value(self):
class SsiCountableResourcesDependency(Member):
- field = 'ssi_countable_resources'
+ field = "ssi_countable_resources"
dependencies = (
- 'household_assets',
- 'age',
+ "household_assets",
+ "age",
)
def value(self):
@@ -106,102 +106,102 @@ def value(self):
class SsiAmountIfEligible(Member):
- field = 'ssi_amount_if_eligible'
+ field = "ssi_amount_if_eligible"
class Andcs(Member):
- field = 'co_state_supplement'
+ field = "co_state_supplement"
class Oap(Member):
- field = 'co_oap'
+ field = "co_oap"
class PellGrant(Member):
- field = 'pell_grant'
+ field = "pell_grant"
class PellGrantDependentAvailableIncomeDependency(Member):
- field = 'pell_grant_dependent_available_income'
+ field = "pell_grant_dependent_available_income"
dependencies = (
- 'income_type',
- 'income_amount',
- 'income_frequency',
+ "income_type",
+ "income_amount",
+ "income_frequency",
)
def value(self):
- return int(self.member.calc_gross_income('yearly', ['all']))
+ return int(self.member.calc_gross_income("yearly", ["all"]))
class PellGrantCountableAssetsDependency(Member):
- field = 'pell_grant_countable_assets'
- dependencies = ('household_assets',)
+ field = "pell_grant_countable_assets"
+ dependencies = ("household_assets",)
def value(self):
return int(self.screen.household_assets)
class CostOfAttendingCollegeDependency(Member):
- field = 'cost_of_attending_college'
- dependencies = ('age',)
+ field = "cost_of_attending_college"
+ dependencies = ("age",)
def value(self):
return 22_288 * (self.member.age >= 16 and self.member.student)
class PellGrantMonthsInSchoolDependency(Member):
- field = 'pell_grant_months_in_school'
+ field = "pell_grant_months_in_school"
def value(self):
return 9
class ChpEligible(Member):
- field = 'co_chp_eligible'
+ field = "co_chp_eligible"
class IncomeDependency(Member):
dependencies = (
- 'income_type',
- 'income_amount',
- 'income_frequency',
+ "income_type",
+ "income_amount",
+ "income_frequency",
)
income_types = []
def value(self):
- return int(self.member.calc_gross_income('yearly', self.income_types))
+ return int(self.member.calc_gross_income("yearly", self.income_types))
class EmploymentIncomeDependency(IncomeDependency):
- field = 'employment_income'
- income_types = ['wages']
+ field = "employment_income"
+ income_types = ["wages"]
class SelfEmploymentIncomeDependency(IncomeDependency):
- field = 'self_employment_income'
- income_types = ['selfEmployment']
+ field = "self_employment_income"
+ income_types = ["selfEmployment"]
class RentalIncomeDependency(IncomeDependency):
- field = 'rental_income'
- income_types = ['rental']
+ field = "rental_income"
+ income_types = ["rental"]
class PensionIncomeDependency(IncomeDependency):
- field = 'taxable_pension_income'
- income_types = ['pension', 'veteran']
+ field = "taxable_pension_income"
+ income_types = ["pension", "veteran"]
class SocialSecurityIncomeDependency(IncomeDependency):
- field = 'social_security'
- income_types = ['sSDisability', 'sSSurvivor', 'sSRetirement', 'sSDependent']
+ field = "social_security"
+ income_types = ["sSDisability", "sSSurvivor", "sSRetirement", "sSDependent"]
class SsiEarnedIncomeDependency(IncomeDependency):
- field = 'ssi_earned_income'
- income_types = ['earned']
+ field = "ssi_earned_income"
+ income_types = ["earned"]
class SsiUnearnedIncomeDependency(IncomeDependency):
- field = 'ssi_unearned_income'
- income_types = ['unearned']
+ field = "ssi_unearned_income"
+ income_types = ["unearned"]
diff --git a/programs/programs/policyengine/calculators/dependencies/spm.py b/programs/programs/policyengine/calculators/dependencies/spm.py
index ec142e8e..fa59adcd 100644
--- a/programs/programs/policyengine/calculators/dependencies/spm.py
+++ b/programs/programs/policyengine/calculators/dependencies/spm.py
@@ -3,40 +3,40 @@
class SnapChildSupportDeductionDependency(SpmUnit):
- field = 'snap_child_support_deduction'
+ field = "snap_child_support_deduction"
def value(self):
- return self.screen.calc_expenses('yearly', ['childSupport'])
+ return self.screen.calc_expenses("yearly", ["childSupport"])
class SnapDependentCareDeductionDependency(SpmUnit):
- field = 'childcare_expenses'
+ field = "childcare_expenses"
def value(self):
- return self.screen.calc_expenses('yearly', ['childCare'])
+ return self.screen.calc_expenses("yearly", ["childCare"])
class SnapEarnedIncomeDependency(SpmUnit):
- field = 'snap_earned_income'
+ field = "snap_earned_income"
dependencies = (
- 'income_type',
- 'income_amount',
- 'income_frequency',
+ "income_type",
+ "income_amount",
+ "income_frequency",
)
def value(self):
- return self.screen.calc_gross_income('yearly', ['earned'])
+ return self.screen.calc_gross_income("yearly", ["earned"])
class HousingCostDependency(SpmUnit):
- field = 'housing_cost'
+ field = "housing_cost"
def value(self):
- return int(self.screen.calc_expenses('yearly', ['rent', 'mortgage']))
+ return int(self.screen.calc_expenses("yearly", ["rent", "mortgage"]))
class SnapAssetsDependency(SpmUnit):
- field = 'snap_assets'
+ field = "snap_assets"
def value(self):
assets = self.screen.household_assets or 0
@@ -44,149 +44,145 @@ def value(self):
class SnapGrossIncomeDependency(SpmUnit):
- field = 'snap_gross_income'
+ field = "snap_gross_income"
dependencies = (
- 'income_amount',
- 'income_frequency',
+ "income_amount",
+ "income_frequency",
)
def value(self):
- return int(self.screen.calc_gross_income('yearly', ['all']))
+ return int(self.screen.calc_gross_income("yearly", ["all"]))
class MeetsSnapGrossIncomeTestDependency(SpmUnit):
- field = 'meets_snap_gross_income_test'
+ field = "meets_snap_gross_income_test"
dependencies = (
- 'income_amount',
- 'income_frequency',
- 'household_size',
+ "income_amount",
+ "income_frequency",
+ "household_size",
)
def value(self):
- fpl = FederalPoveryLimit.objects.get(year='THIS YEAR').as_dict()
- snap_gross_income = self.screen.calc_gross_income('yearly', ['all'])
+ fpl = FederalPoveryLimit.objects.get(year="THIS YEAR").as_dict()
+ snap_gross_income = self.screen.calc_gross_income("yearly", ["all"])
snap_gross_limit = 2 * fpl[self.screen.household_size]
return snap_gross_income < snap_gross_limit
class MeetsSnapAssetTestDependency(SpmUnit):
- field = 'meets_snap_asset_test'
+ field = "meets_snap_asset_test"
def value(self):
return True
class MeetsSnapCategoricalEligibilityDependency(SpmUnit):
- field = 'meets_snap_categorical_eligibility'
+ field = "meets_snap_categorical_eligibility"
def value(self):
return False
class HasHeatingCoolingExpenseDependency(SpmUnit):
- field = 'has_heating_cooling_expense'
+ field = "has_heating_cooling_expense"
def value(self):
- return self.screen.has_expense(['heating', 'cooling'])
+ return self.screen.has_expense(["heating", "cooling"])
class HasPhoneExpenseDependency(SpmUnit):
- field = 'has_phone_expense'
+ field = "has_phone_expense"
def value(self):
- return self.screen.has_expense(['telephone'])
+ return self.screen.has_expense(["telephone"])
class UtilityExpenseDependency(SpmUnit):
- field = 'utility_expense'
+ field = "utility_expense"
def value(self):
- return int(
- self.screen.calc_expenses(
- 'yearly', ['otherUtilities', 'heating', 'cooling']
- )
- )
+ return int(self.screen.calc_expenses("yearly", ["otherUtilities", "heating", "cooling"]))
class HeatingCoolingExpenseDependency(SpmUnit):
- field = 'heating_cooling_expense'
+ field = "heating_cooling_expense"
def value(self):
- return self.screen.calc_expenses('yearly', ['heating', 'cooling'])
+ return self.screen.calc_expenses("yearly", ["heating", "cooling"])
class PhoneExpenseDependency(SpmUnit):
- field = 'phone_expense'
+ field = "phone_expense"
def value(self):
- return self.screen.calc_expenses('yearly', ['telephone'])
+ return self.screen.calc_expenses("yearly", ["telephone"])
class ElectricityExpenseDependency(SpmUnit):
- field = 'electricity_expense'
+ field = "electricity_expense"
def value(self):
- return self.screen.calc_expenses('yearly', ['otherUtilities'])
+ return self.screen.calc_expenses("yearly", ["otherUtilities"])
class SnapEmergencyAllotmentDependency(SpmUnit):
- field = 'snap_emergency_allotment'
+ field = "snap_emergency_allotment"
def value(self):
return 0
class Snap(SpmUnit):
- field = 'snap'
+ field = "snap"
class Acp(SpmUnit):
- field = 'acp'
+ field = "acp"
class SchoolMealDailySubsidy(SpmUnit):
- field = 'school_meal_daily_subsidy'
+ field = "school_meal_daily_subsidy"
class SchoolMealTier(SpmUnit):
- field = 'school_meal_tier'
+ field = "school_meal_tier"
class Lifeline(SpmUnit):
- field = 'lifeline'
+ field = "lifeline"
class TanfCountableGrossIncomeDependency(SpmUnit):
- field = 'co_tanf_countable_gross_earned_income'
+ field = "co_tanf_countable_gross_earned_income"
dependencies = (
- 'income_type',
- 'income_amount',
- 'income_frequency',
+ "income_type",
+ "income_amount",
+ "income_frequency",
)
def value(self):
- return int(self.screen.calc_gross_income('yearly', ['earned']))
+ return int(self.screen.calc_gross_income("yearly", ["earned"]))
class TanfCountableGrossUnearnedIncomeDependency(SpmUnit):
- field = 'co_tanf_countable_gross_unearned_income'
+ field = "co_tanf_countable_gross_unearned_income"
dependencies = (
- 'income_type',
- 'income_amount',
- 'income_frequency',
+ "income_type",
+ "income_amount",
+ "income_frequency",
)
def value(self):
- return int(self.screen.calc_gross_income('yearly', ['unearned']))
+ return int(self.screen.calc_gross_income("yearly", ["unearned"]))
class Tanf(SpmUnit):
- field = 'co_tanf'
+ field = "co_tanf"
class BroadbandCostDependency(SpmUnit):
- field = 'broadband_cost'
+ field = "broadband_cost"
def value(self):
return 500
diff --git a/programs/programs/policyengine/calculators/dependencies/tax.py b/programs/programs/policyengine/calculators/dependencies/tax.py
index 95edfce6..76007591 100644
--- a/programs/programs/policyengine/calculators/dependencies/tax.py
+++ b/programs/programs/policyengine/calculators/dependencies/tax.py
@@ -3,26 +3,26 @@
class Eitc(TaxUnit):
- field = 'eitc'
+ field = "eitc"
class Coeitc(TaxUnit):
- field = 'co_eitc'
+ field = "co_eitc"
class Ctc(TaxUnit):
- field = 'ctc'
+ field = "ctc"
class JointDependency(TaxUnit):
- field = 'tax_unit_is_joint'
+ field = "tax_unit_is_joint"
def value(self):
return self.screen.is_joint()
class PellGrantPrimaryIncomeDependency(TaxUnit):
- field = 'pell_grant_primary_income'
+ field = "pell_grant_primary_income"
def value(self):
total = 0
@@ -30,14 +30,14 @@ def value(self):
is_head = TaxUnitHeadDependency(self.screen, member, self.relationship_map).value()
is_spouse = TaxUnitSpouseDependency(self.screen, member, self.relationship_map).value()
if is_head or is_spouse:
- total += int(member.calc_gross_income('yearly', ['all']))
+ total += int(member.calc_gross_income("yearly", ["all"]))
return total
class PellGrantDependentsInCollegeDependency(TaxUnit):
- field = 'pell_grant_dependents_in_college'
- dependencies = ('student',)
+ field = "pell_grant_dependents_in_college"
+ dependencies = ("student",)
def value(self):
pell_grant_dependents_in_college = 0
diff --git a/programs/programs/urgent_needs/urgent_need_functions.py b/programs/programs/urgent_needs/urgent_need_functions.py
index 65c9a0a4..4db1c793 100644
--- a/programs/programs/urgent_needs/urgent_need_functions.py
+++ b/programs/programs/urgent_needs/urgent_need_functions.py
@@ -5,17 +5,17 @@
class UrgentNeedFunction:
- '''
+ """
Base class for all urgent need conditions
- '''
+ """
dependencies = []
@classmethod
def calc(cls, screen: Screen, missing_dependencies: Dependencies):
- '''
+ """
Calculate if the urgent need can be calculated and if the condition is met
- '''
+ """
if not cls.can_calc(missing_dependencies):
return False
@@ -23,16 +23,16 @@ def calc(cls, screen: Screen, missing_dependencies: Dependencies):
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Returns if the condition is met
- '''
+ """
return True
@classmethod
def can_calc(cls, missing_dependencies: Dependencies):
- '''
+ """
Returns if the condition can be calculated
- '''
+ """
if missing_dependencies.has(*cls.dependencies):
return False
@@ -40,97 +40,97 @@ def can_calc(cls, missing_dependencies: Dependencies):
class LivesInDenver(UrgentNeedFunction):
- dependencies = ['county']
+ dependencies = ["county"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Household lives in the Denver County
- '''
- return screen.county == 'Denver County'
+ """
+ return screen.county == "Denver County"
class MealInCounties(UrgentNeedFunction):
- dependencies = ['county']
+ dependencies = ["county"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Household lives in Denver or Jefferson County
- '''
- eligible_counties = ['Denver County', 'Jefferson County']
+ """
+ eligible_counties = ["Denver County", "Jefferson County"]
return screen.county in eligible_counties
class HelpkitchenZipcode(UrgentNeedFunction):
- dependencies = ['zipcode']
+ dependencies = ["zipcode"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Lives in a zipcode that is eligible for HelpKitchen
- '''
+ """
zipcodes = [
- '80010',
- '80011',
- '80012',
- '80013',
- '80014',
- '80015',
- '80016',
- '80017',
- '80018',
- '80019',
- '80045',
- '80102',
- '80112',
- '80137',
- '80138',
- '80230',
- '80231',
- '80238',
- '80247',
- '80249',
+ "80010",
+ "80011",
+ "80012",
+ "80013",
+ "80014",
+ "80015",
+ "80016",
+ "80017",
+ "80018",
+ "80019",
+ "80045",
+ "80102",
+ "80112",
+ "80137",
+ "80138",
+ "80230",
+ "80231",
+ "80238",
+ "80247",
+ "80249",
]
return screen.zipcode in zipcodes
class Child(UrgentNeedFunction):
- dependencies = ['age']
+ dependencies = ["age"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if someone is younger than 18
- '''
- return screen.num_children(child_relationship=['all']) > 0
+ """
+ return screen.num_children(child_relationship=["all"]) > 0
class BiaFoodDelivery(UrgentNeedFunction):
- dependencies = ['county']
+ dependencies = ["county"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if in Adams, Arapahoe, Denver or Jefferson county
- '''
+ """
eligible_counties = [
- 'Adams County',
- 'Arapahoe County',
- 'Denver County',
- 'Jefferson County',
+ "Adams County",
+ "Arapahoe County",
+ "Denver County",
+ "Jefferson County",
]
return screen.county in eligible_counties
class Trua(UrgentNeedFunction):
- dependencies = ['household_size', 'income_amount', 'income_frequency']
+ dependencies = ["household_size", "income_amount", "income_frequency"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if the household is below the income limit for their household size
- '''
+ """
income_limits = {
1: 66_300,
2: 75_750,
@@ -141,19 +141,19 @@ def eligible(cls, screen: Screen):
7: 117_400,
8: 124_950,
}
- household_income = screen.calc_gross_income('yearly', ['all'])
+ household_income = screen.calc_gross_income("yearly", ["all"])
income_limit = income_limits[screen.household_size]
return household_income <= income_limit
class ForeclosureFinAssistProgram(UrgentNeedFunction):
- dependencies = ['household_size', 'income_amount', 'income_frequency', 'county']
+ dependencies = ["household_size", "income_amount", "income_frequency", "county"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if the household is at or below 80% the income limit for their household size & they live in Denver
- '''
+ """
income_limits = {
1: 66_300,
2: 75_750,
@@ -164,9 +164,9 @@ def eligible(cls, screen: Screen):
7: 117_400,
8: 124_950,
}
- household_income = screen.calc_gross_income('yearly', ['all'])
+ household_income = screen.calc_gross_income("yearly", ["all"])
income_limit = income_limits[screen.household_size]
- return household_income <= income_limit and screen.county == 'Denver County'
+ return household_income <= income_limit and screen.county == "Denver County"
class EocIncomeLimitCache(GoogleSheetsCache):
@@ -177,155 +177,150 @@ class EocIncomeLimitCache(GoogleSheetsCache):
def update(self):
data = super().update()
- return {d[0].strip() + ' County': [int(v.replace(',', '')) for v in d[1:]] for d in data}
+ return {d[0].strip() + " County": [int(v.replace(",", "")) for v in d[1:]] for d in data}
class Eoc(UrgentNeedFunction):
limits_cache = EocIncomeLimitCache()
- dependencies = ['income_amount', 'income_frequency', 'household_size', 'county']
+ dependencies = ["income_amount", "income_frequency", "household_size", "county"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if the household is below the income limit for their county and household size
- '''
+ """
- income = int(screen.calc_gross_income('yearly', ['all']))
+ income = int(screen.calc_gross_income("yearly", ["all"]))
limits = Eoc.limits_cache.fetch()
if screen.county not in limits:
return False
- income_limit = limits[screen.county][
- screen.household_size - 1
- ]
+ income_limit = limits[screen.county][screen.household_size - 1]
return income < income_limit
class CoLegalServices(UrgentNeedFunction):
- dependencies = ['income_amount', 'income_frequency', 'household_size', 'age']
+ dependencies = ["income_amount", "income_frequency", "household_size", "age"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if the household is has an income bellow 200% FPL or someone in the household is over 60 years old
- '''
- fpl = FederalPoveryLimit.objects.get(year='THIS YEAR').as_dict()
- is_income_eligible = (
- screen.calc_gross_income('yearly', ['all']) < fpl[screen.household_size]
- )
+ """
+ fpl = FederalPoveryLimit.objects.get(year="THIS YEAR").as_dict()
+ is_income_eligible = screen.calc_gross_income("yearly", ["all"]) < fpl[screen.household_size]
is_age_eligible = screen.num_adults(age_max=60) > 0
return is_income_eligible or is_age_eligible
class CoEmergencyMortgageIncomeLimitCache(GoogleSheetsCache):
default = {}
- sheet_id = '1M_BQxs135UV4uO-CUpHtt9Xy89l1RmSufdP9c3nEh-M'
+ sheet_id = "1M_BQxs135UV4uO-CUpHtt9Xy89l1RmSufdP9c3nEh-M"
range_name = "'100% AMI 2023'!A2:I65"
def update(self):
data = super().update()
- return {d[0] + ' County': [int(v.replace(',', '')) for v in d[1:]] for d in data}
+ return {d[0] + " County": [int(v.replace(",", "")) for v in d[1:]] for d in data}
class CoEmergencyMortgageAssistance(UrgentNeedFunction):
limits_cache = CoEmergencyMortgageIncomeLimitCache()
- dependencies = ['income_amount', 'income_frequency', 'household_size', 'county']
+ dependencies = ["income_amount", "income_frequency", "household_size", "county"]
@classmethod
def eligible(cls, screen: Screen):
- income = int(screen.calc_gross_income('yearly', ['all']))
+ income = int(screen.calc_gross_income("yearly", ["all"]))
limits = CoEmergencyMortgageAssistance.limits_cache.fetch()
if screen.county not in limits:
return False
- income_limit = limits[screen.county][
- screen.household_size - 1
- ]
+ income_limit = limits[screen.county][screen.household_size - 1]
return income < income_limit
+
class ChildFirst(UrgentNeedFunction):
- dependencies = ['age', 'county']
+ dependencies = ["age", "county"]
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if the household has a child aged 0-5 and lives in an eligible county
- '''
+ """
is_age_eligible = screen.num_children(age_max=5) > 0
eligible_counties = [
- 'Adams County',
- 'Alamosa County',
- 'Arapahoe County',
- 'Bent County',
- 'Boulder County',
- 'Broomfield County',
- 'Chaffee County',
- 'Clear Creek County',
- 'Conejos County',
- 'Costilla County',
- 'Crowley County',
- 'Custer County',
- 'Douglas County',
- 'El Paso County',
- 'Fremont County',
- 'Gilpin County',
- 'Jefferson County',
- 'Lake County',
- 'Mineral County',
- 'Otero County',
- 'Rio Grand County',
- 'Routt County',
- 'Saguache County',
- 'Weld County',
+ "Adams County",
+ "Alamosa County",
+ "Arapahoe County",
+ "Bent County",
+ "Boulder County",
+ "Broomfield County",
+ "Chaffee County",
+ "Clear Creek County",
+ "Conejos County",
+ "Costilla County",
+ "Crowley County",
+ "Custer County",
+ "Douglas County",
+ "El Paso County",
+ "Fremont County",
+ "Gilpin County",
+ "Jefferson County",
+ "Lake County",
+ "Mineral County",
+ "Otero County",
+ "Rio Grand County",
+ "Routt County",
+ "Saguache County",
+ "Weld County",
]
return is_age_eligible and screen.county in eligible_counties
class EarlyChildhoodMentalHealthSupport(UrgentNeedFunction):
- dependencies = ['age']
+ dependencies = ["age"]
max_age = 5
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if the householdh as a child aged 0-5
- '''
+ """
return screen.num_children(age_max=cls.max_age) > 0
class ParentsOfPreschoolYoungsters(UrgentNeedFunction):
- dependencies = ['age', 'county']
+ dependencies = ["age", "county"]
counties = [
- 'Adams County',
- 'Alamosa County',
- 'Arapahoe County',
- 'Costilla County',
- 'Crowley County',
- 'Denver County',
- 'Dolores County',
- 'Jefferson County',
- 'Montezuma County',
- 'Otero County',
- 'Pueblo County',
- 'Saguache County',
- 'Weld County',
+ "Adams County",
+ "Alamosa County",
+ "Arapahoe County",
+ "Costilla County",
+ "Crowley County",
+ "Denver County",
+ "Dolores County",
+ "Jefferson County",
+ "Montezuma County",
+ "Otero County",
+ "Pueblo County",
+ "Saguache County",
+ "Weld County",
]
min_age = 2
max_age = 5
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if a child is between 2 and 5 and lives in an eligible county
- '''
+ """
age_eligible = screen.num_children(age_min=cls.min_age, age_max=cls.max_age) > 0
county_eligible = screen.county in cls.counties
@@ -333,49 +328,48 @@ def eligible(cls, screen: Screen):
class ParentsAsTeacher(UrgentNeedFunction):
- dependencies = ['age', 'county']
+ dependencies = ["age", "county"]
counties = [
- 'Adams County',
- 'Alamosa County',
- 'Arapahoe County',
- 'Bent County',
- 'Boulder County',
- 'Conejos County',
- 'Costilla County',
- 'Crowley County',
- 'Delta County',
- 'Denver County',
- 'Dolores County',
- 'El Paso County',
- 'Fremont County',
- 'Gunnison County',
- 'Huerfano County',
- 'Jefferson County',
- 'La Plata County',
- 'Larimer County',
- 'Las Animas County',
- 'Mesa County',
- 'Montezuma County',
- 'Montrose County',
- 'Morgan County',
- 'Otero County',
- 'Ouray County',
- 'Park County',
- 'Pueblo County',
- 'Routt County',
- 'Saguache County',
- 'San Miguel County',
- 'Teller County',
+ "Adams County",
+ "Alamosa County",
+ "Arapahoe County",
+ "Bent County",
+ "Boulder County",
+ "Conejos County",
+ "Costilla County",
+ "Crowley County",
+ "Delta County",
+ "Denver County",
+ "Dolores County",
+ "El Paso County",
+ "Fremont County",
+ "Gunnison County",
+ "Huerfano County",
+ "Jefferson County",
+ "La Plata County",
+ "Larimer County",
+ "Las Animas County",
+ "Mesa County",
+ "Montezuma County",
+ "Montrose County",
+ "Morgan County",
+ "Otero County",
+ "Ouray County",
+ "Park County",
+ "Pueblo County",
+ "Routt County",
+ "Saguache County",
+ "San Miguel County",
+ "Teller County",
]
max_age = 5
@classmethod
def eligible(cls, screen: Screen):
- '''
+ """
Return True if there is a child younger than 5 and lives in an eligible county
- '''
+ """
age_eligible = screen.num_children(age_max=cls.max_age) > 0
county_eligible = screen.county in cls.counties
return age_eligible and county_eligible
-
diff --git a/programs/urls.py b/programs/urls.py
index 7d39e395..ddebede9 100644
--- a/programs/urls.py
+++ b/programs/urls.py
@@ -3,12 +3,10 @@
from . import views
router = routers.DefaultRouter()
-router.register(r'programs', views.ProgramViewSet)
-router.register(r'navigators', views.NavigatorViewSet)
-router.register(r'urgent-needs', views.UrgentNeedViewSet)
+router.register(r"programs", views.ProgramViewSet)
+router.register(r"navigators", views.NavigatorViewSet)
+router.register(r"urgent-needs", views.UrgentNeedViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
-urlpatterns = [
- path('', include(router.urls))
-]
+urlpatterns = [path("", include(router.urls))]
diff --git a/screener/admin.py b/screener/admin.py
index dd553bd2..6741e7e5 100644
--- a/screener/admin.py
+++ b/screener/admin.py
@@ -9,7 +9,7 @@
class screenAdmin(ModelAdmin):
- search_fields = ('id',)
+ search_fields = ("id",)
class CustomMessageAdmin(ModelAdmin):
diff --git a/screener/apps.py b/screener/apps.py
index d2b31097..1b0ed4d7 100644
--- a/screener/apps.py
+++ b/screener/apps.py
@@ -2,5 +2,5 @@
class ScreenerConfig(AppConfig):
- default_auto_field = 'django.db.models.BigAutoField'
- name = 'screener'
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "screener"
diff --git a/screener/management/commands/batch_snapshots.py b/screener/management/commands/batch_snapshots.py
index 9efe1832..d77f8bde 100644
--- a/screener/management/commands/batch_snapshots.py
+++ b/screener/management/commands/batch_snapshots.py
@@ -6,44 +6,38 @@
class Command(BaseCommand):
- help = '''
+ help = """
Creates snapshots for all users.
Limit default is 1.
Defaults to only creating snapshots for users with emails.
- '''
+ """
def add_arguments(self, parser):
- parser.add_argument('--limit', default=1, type=int)
- parser.add_argument('--all', default=False, type=bool)
- parser.add_argument('--new', default=False, type=bool)
+ parser.add_argument("--limit", default=1, type=int)
+ parser.add_argument("--all", default=False, type=bool)
+ parser.add_argument("--new", default=False, type=bool)
def handle(self, *args, **options):
# Get the screens
- screens = Screen.objects.filter(
- agree_to_tos=True,
- is_test=False,
- is_test_data=False,
- completed=True
- )
-
- if not options['all']:
+ screens = Screen.objects.filter(agree_to_tos=True, is_test=False, is_test_data=False, completed=True)
+
+ if not options["all"]:
screens = screens.exclude(user__isnull=True)
- if options['new']:
+ if options["new"]:
screens = screens.filter(eligibility_snapshots__isnull=True)
# List[:None] is everything in the list
- limit = None if options['limit'] == -1 else options['limit']
- screens = screens.order_by('-submission_date')[:limit]
+ limit = None if options["limit"] == -1 else options["limit"]
+ screens = screens.order_by("-submission_date")[:limit]
# Calculate eligibility for each screen
errors = []
- for i in trange(len(screens), desc='Screens'):
+ for i in trange(len(screens), desc="Screens"):
try:
eligibility_results(screens[i], batch=True)
time.sleep(1)
except Exception as e:
- errors.append(str(screens[i].id) + ': ' + str(e))
+ errors.append(str(screens[i].id) + ": " + str(e))
if len(errors):
- self.stdout.write(
- self.style.ERROR('The following screens had errors:\n' + '\n'.join(errors)))
+ self.stdout.write(self.style.ERROR("The following screens had errors:\n" + "\n".join(errors)))
diff --git a/screener/management/commands/email_new_benefits.py b/screener/management/commands/email_new_benefits.py
index e6301a6e..c893cd3a 100644
--- a/screener/management/commands/email_new_benefits.py
+++ b/screener/management/commands/email_new_benefits.py
@@ -5,26 +5,24 @@
class Command(BaseCommand):
- help = '''
+ help = """
Update number of new benefits and amount of new benefits in HubSpot
- '''
+ """
def add_arguments(self, parser):
- parser.add_argument('--limit', default=1, type=int)
+ parser.add_argument("--limit", default=1, type=int)
def handle(self, *args, **options):
screens = Screen.objects.all().exclude(user__isnull=True)
latest_snapshots = []
- limit = options['limit']
+ limit = options["limit"]
for screen in screens:
try:
- previous_snapshot = EligibilitySnapshot.objects \
- .filter(is_batch=True, screen=screen) \
- .latest('submission_date')
- except ObjectDoesNotExist:
- self.stdout.write(
- self.style.WARNING(f'No snapshots for screen with id of {screen.id}')
+ previous_snapshot = EligibilitySnapshot.objects.filter(is_batch=True, screen=screen).latest(
+ "submission_date"
)
+ except ObjectDoesNotExist:
+ self.stdout.write(self.style.WARNING(f"No snapshots for screen with id of {screen.id}"))
continue
latest_snapshots.append(previous_snapshot)
@@ -48,9 +46,7 @@ def handle(self, *args, **options):
limit -= 1
if not len(existing_users):
- self.stdout.write(
- self.style.WARNING('No users in HubSpot. Make sure that you add users to HubSpot first')
- )
+ self.stdout.write(self.style.WARNING("No users in HubSpot. Make sure that you add users to HubSpot first"))
return
hubspot.bulk_update(existing_users)
diff --git a/screener/migrations/0001_initial.py b/screener/migrations/0001_initial.py
index 1cf4e8fd..5269a795 100644
--- a/screener/migrations/0001_initial.py
+++ b/screener/migrations/0001_initial.py
@@ -5,46 +5,44 @@
class Migration(migrations.Migration):
-
initial = True
- dependencies = [
- ]
+ dependencies = []
operations = [
migrations.CreateModel(
- name='Screen',
+ name="Screen",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('submission_date', models.DateTimeField(auto_now=True)),
- ('agree_to_tos', models.BooleanField()),
- ('applicant_age', models.IntegerField()),
- ('zipcode', models.CharField(max_length=5)),
- ('student', models.BooleanField()),
- ('student_full_time', models.BooleanField()),
- ('pregnant', models.BooleanField()),
- ('unemployed', models.BooleanField()),
- ('worked_in_last_18_mos', models.BooleanField()),
- ('visually_impaired', models.BooleanField()),
- ('disabled', models.BooleanField()),
- ('veteran', models.BooleanField()),
- ('medicaid', models.BooleanField()),
- ('disability_medicaid', models.BooleanField()),
- ('has_income', models.BooleanField()),
- ('has_expenses', models.BooleanField()),
- ('household_size', models.IntegerField()),
- ('household_assets', models.DecimalField(decimal_places=2, max_digits=10)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("submission_date", models.DateTimeField(auto_now=True)),
+ ("agree_to_tos", models.BooleanField()),
+ ("applicant_age", models.IntegerField()),
+ ("zipcode", models.CharField(max_length=5)),
+ ("student", models.BooleanField()),
+ ("student_full_time", models.BooleanField()),
+ ("pregnant", models.BooleanField()),
+ ("unemployed", models.BooleanField()),
+ ("worked_in_last_18_mos", models.BooleanField()),
+ ("visually_impaired", models.BooleanField()),
+ ("disabled", models.BooleanField()),
+ ("veteran", models.BooleanField()),
+ ("medicaid", models.BooleanField()),
+ ("disability_medicaid", models.BooleanField()),
+ ("has_income", models.BooleanField()),
+ ("has_expenses", models.BooleanField()),
+ ("household_size", models.IntegerField()),
+ ("household_assets", models.DecimalField(decimal_places=2, max_digits=10)),
],
),
migrations.CreateModel(
- name='incomeStream',
+ name="incomeStream",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('type', models.CharField(max_length=30)),
- ('label', models.CharField(max_length=200)),
- ('amount', models.DecimalField(decimal_places=2, max_digits=10)),
- ('frequency', models.CharField(max_length=30)),
- ('screen', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='screener.screen')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("type", models.CharField(max_length=30)),
+ ("label", models.CharField(max_length=200)),
+ ("amount", models.DecimalField(decimal_places=2, max_digits=10)),
+ ("frequency", models.CharField(max_length=30)),
+ ("screen", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="screener.screen")),
],
),
]
diff --git a/screener/migrations/0002_screen_housing_situation_expense.py b/screener/migrations/0002_screen_housing_situation_expense.py
index 9c29bffa..296acba1 100644
--- a/screener/migrations/0002_screen_housing_situation_expense.py
+++ b/screener/migrations/0002_screen_housing_situation_expense.py
@@ -5,26 +5,25 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0001_initial'),
+ ("screener", "0001_initial"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='housing_situation',
- field=models.CharField(default='rent', max_length=30),
+ model_name="screen",
+ name="housing_situation",
+ field=models.CharField(default="rent", max_length=30),
preserve_default=False,
),
migrations.CreateModel(
- name='Expense',
+ name="Expense",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=30)),
- ('amount', models.DecimalField(decimal_places=2, max_digits=10)),
- ('frequency', models.CharField(max_length=30)),
- ('screen', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='screener.screen')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("name", models.CharField(max_length=30)),
+ ("amount", models.DecimalField(decimal_places=2, max_digits=10)),
+ ("frequency", models.CharField(max_length=30)),
+ ("screen", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="screener.screen")),
],
),
]
diff --git a/screener/migrations/0003_rename_type_incomestream_name.py b/screener/migrations/0003_rename_type_incomestream_name.py
index 493fe880..085cd9c4 100644
--- a/screener/migrations/0003_rename_type_incomestream_name.py
+++ b/screener/migrations/0003_rename_type_incomestream_name.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0002_screen_housing_situation_expense'),
+ ("screener", "0002_screen_housing_situation_expense"),
]
operations = [
migrations.RenameField(
- model_name='incomestream',
- old_name='type',
- new_name='name',
+ model_name="incomestream",
+ old_name="type",
+ new_name="name",
),
]
diff --git a/screener/migrations/0004_remove_incomestream_label.py b/screener/migrations/0004_remove_incomestream_label.py
index 8f2f2dfa..e8aebb8d 100644
--- a/screener/migrations/0004_remove_incomestream_label.py
+++ b/screener/migrations/0004_remove_incomestream_label.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0003_rename_type_incomestream_name'),
+ ("screener", "0003_rename_type_incomestream_name"),
]
operations = [
migrations.RemoveField(
- model_name='incomestream',
- name='label',
+ model_name="incomestream",
+ name="label",
),
]
diff --git a/screener/migrations/0005_alter_incomestream_screen.py b/screener/migrations/0005_alter_incomestream_screen.py
index f4d6f091..b36feb5b 100644
--- a/screener/migrations/0005_alter_incomestream_screen.py
+++ b/screener/migrations/0005_alter_incomestream_screen.py
@@ -5,15 +5,16 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0004_remove_incomestream_label'),
+ ("screener", "0004_remove_incomestream_label"),
]
operations = [
migrations.AlterField(
- model_name='incomestream',
- name='screen',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='incomestreams', to='screener.screen'),
+ model_name="incomestream",
+ name="screen",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE, related_name="incomestreams", to="screener.screen"
+ ),
),
]
diff --git a/screener/migrations/0006_rename_name_expense_type_and_more.py b/screener/migrations/0006_rename_name_expense_type_and_more.py
index b592d8fe..7b62cdff 100644
--- a/screener/migrations/0006_rename_name_expense_type_and_more.py
+++ b/screener/migrations/0006_rename_name_expense_type_and_more.py
@@ -5,25 +5,26 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0005_alter_incomestream_screen'),
+ ("screener", "0005_alter_incomestream_screen"),
]
operations = [
migrations.RenameField(
- model_name='expense',
- old_name='name',
- new_name='type',
+ model_name="expense",
+ old_name="name",
+ new_name="type",
),
migrations.RenameField(
- model_name='incomestream',
- old_name='name',
- new_name='type',
+ model_name="incomestream",
+ old_name="name",
+ new_name="type",
),
migrations.AlterField(
- model_name='expense',
- name='screen',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='expenses', to='screener.screen'),
+ model_name="expense",
+ name="screen",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE, related_name="expenses", to="screener.screen"
+ ),
),
]
diff --git a/screener/migrations/0007_rename_applicant_age_screen_age.py b/screener/migrations/0007_rename_applicant_age_screen_age.py
index b54fd4bc..336ad346 100644
--- a/screener/migrations/0007_rename_applicant_age_screen_age.py
+++ b/screener/migrations/0007_rename_applicant_age_screen_age.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0006_rename_name_expense_type_and_more'),
+ ("screener", "0006_rename_name_expense_type_and_more"),
]
operations = [
migrations.RenameField(
- model_name='screen',
- old_name='applicant_age',
- new_name='age',
+ model_name="screen",
+ old_name="applicant_age",
+ new_name="age",
),
]
diff --git a/screener/migrations/0008_householdmember.py b/screener/migrations/0008_householdmember.py
index a655842a..d668e41e 100644
--- a/screener/migrations/0008_householdmember.py
+++ b/screener/migrations/0008_householdmember.py
@@ -5,31 +5,37 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0007_rename_applicant_age_screen_age'),
+ ("screener", "0007_rename_applicant_age_screen_age"),
]
operations = [
migrations.CreateModel(
- name='HouseholdMember',
+ name="HouseholdMember",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('age', models.IntegerField()),
- ('zipcode', models.CharField(max_length=5)),
- ('student', models.BooleanField()),
- ('student_full_time', models.BooleanField()),
- ('pregnant', models.BooleanField()),
- ('unemployed', models.BooleanField()),
- ('worked_in_last_18_mos', models.BooleanField()),
- ('visually_impaired', models.BooleanField()),
- ('disabled', models.BooleanField()),
- ('veteran', models.BooleanField()),
- ('medicaid', models.BooleanField()),
- ('disability_medicaid', models.BooleanField()),
- ('has_income', models.BooleanField()),
- ('has_expenses', models.BooleanField()),
- ('screen', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='householdmembers', to='screener.screen')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("age", models.IntegerField()),
+ ("zipcode", models.CharField(max_length=5)),
+ ("student", models.BooleanField()),
+ ("student_full_time", models.BooleanField()),
+ ("pregnant", models.BooleanField()),
+ ("unemployed", models.BooleanField()),
+ ("worked_in_last_18_mos", models.BooleanField()),
+ ("visually_impaired", models.BooleanField()),
+ ("disabled", models.BooleanField()),
+ ("veteran", models.BooleanField()),
+ ("medicaid", models.BooleanField()),
+ ("disability_medicaid", models.BooleanField()),
+ ("has_income", models.BooleanField()),
+ ("has_expenses", models.BooleanField()),
+ (
+ "screen",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="householdmembers",
+ to="screener.screen",
+ ),
+ ),
],
),
]
diff --git a/screener/migrations/0009_remove_householdmember_zipcode.py b/screener/migrations/0009_remove_householdmember_zipcode.py
index ca828419..7ad698b1 100644
--- a/screener/migrations/0009_remove_householdmember_zipcode.py
+++ b/screener/migrations/0009_remove_householdmember_zipcode.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0008_householdmember'),
+ ("screener", "0008_householdmember"),
]
operations = [
migrations.RemoveField(
- model_name='householdmember',
- name='zipcode',
+ model_name="householdmember",
+ name="zipcode",
),
]
diff --git a/screener/migrations/0010_remove_screen_age_remove_screen_disability_medicaid_and_more.py b/screener/migrations/0010_remove_screen_age_remove_screen_disability_medicaid_and_more.py
index 9167e3de..940dbabe 100644
--- a/screener/migrations/0010_remove_screen_age_remove_screen_disability_medicaid_and_more.py
+++ b/screener/migrations/0010_remove_screen_age_remove_screen_disability_medicaid_and_more.py
@@ -4,62 +4,61 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0009_remove_householdmember_zipcode'),
+ ("screener", "0009_remove_householdmember_zipcode"),
]
operations = [
migrations.RemoveField(
- model_name='screen',
- name='age',
+ model_name="screen",
+ name="age",
),
migrations.RemoveField(
- model_name='screen',
- name='disability_medicaid',
+ model_name="screen",
+ name="disability_medicaid",
),
migrations.RemoveField(
- model_name='screen',
- name='disabled',
+ model_name="screen",
+ name="disabled",
),
migrations.RemoveField(
- model_name='screen',
- name='has_expenses',
+ model_name="screen",
+ name="has_expenses",
),
migrations.RemoveField(
- model_name='screen',
- name='has_income',
+ model_name="screen",
+ name="has_income",
),
migrations.RemoveField(
- model_name='screen',
- name='medicaid',
+ model_name="screen",
+ name="medicaid",
),
migrations.RemoveField(
- model_name='screen',
- name='pregnant',
+ model_name="screen",
+ name="pregnant",
),
migrations.RemoveField(
- model_name='screen',
- name='student',
+ model_name="screen",
+ name="student",
),
migrations.RemoveField(
- model_name='screen',
- name='student_full_time',
+ model_name="screen",
+ name="student_full_time",
),
migrations.RemoveField(
- model_name='screen',
- name='unemployed',
+ model_name="screen",
+ name="unemployed",
),
migrations.RemoveField(
- model_name='screen',
- name='veteran',
+ model_name="screen",
+ name="veteran",
),
migrations.RemoveField(
- model_name='screen',
- name='visually_impaired',
+ model_name="screen",
+ name="visually_impaired",
),
migrations.RemoveField(
- model_name='screen',
- name='worked_in_last_18_mos',
+ model_name="screen",
+ name="worked_in_last_18_mos",
),
]
diff --git a/screener/migrations/0011_expense_household_member_and_more.py b/screener/migrations/0011_expense_household_member_and_more.py
index 38a0147d..c7edfe9d 100644
--- a/screener/migrations/0011_expense_household_member_and_more.py
+++ b/screener/migrations/0011_expense_household_member_and_more.py
@@ -5,22 +5,31 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0010_remove_screen_age_remove_screen_disability_medicaid_and_more'),
+ ("screener", "0010_remove_screen_age_remove_screen_disability_medicaid_and_more"),
]
operations = [
migrations.AddField(
- model_name='expense',
- name='household_member',
- field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='expenses', to='screener.householdmember'),
+ model_name="expense",
+ name="household_member",
+ field=models.ForeignKey(
+ default=1,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="expenses",
+ to="screener.householdmember",
+ ),
preserve_default=False,
),
migrations.AddField(
- model_name='incomestream',
- name='household_member',
- field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='incomestreams', to='screener.householdmember'),
+ model_name="incomestream",
+ name="household_member",
+ field=models.ForeignKey(
+ default=1,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="incomestreams",
+ to="screener.householdmember",
+ ),
preserve_default=False,
),
]
diff --git a/screener/migrations/0012_alter_householdmember_screen_and_more.py b/screener/migrations/0012_alter_householdmember_screen_and_more.py
index 40dcc7ff..0d480450 100644
--- a/screener/migrations/0012_alter_householdmember_screen_and_more.py
+++ b/screener/migrations/0012_alter_householdmember_screen_and_more.py
@@ -5,25 +5,32 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0011_expense_household_member_and_more'),
+ ("screener", "0011_expense_household_member_and_more"),
]
operations = [
migrations.AlterField(
- model_name='householdmember',
- name='screen',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='household_members', to='screener.screen'),
+ model_name="householdmember",
+ name="screen",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE, related_name="household_members", to="screener.screen"
+ ),
),
migrations.AlterField(
- model_name='incomestream',
- name='household_member',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='income_streams', to='screener.householdmember'),
+ model_name="incomestream",
+ name="household_member",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="income_streams",
+ to="screener.householdmember",
+ ),
),
migrations.AlterField(
- model_name='incomestream',
- name='screen',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='income_streams', to='screener.screen'),
+ model_name="incomestream",
+ name="screen",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE, related_name="income_streams", to="screener.screen"
+ ),
),
]
diff --git a/screener/migrations/0013_householdmember_relationship.py b/screener/migrations/0013_householdmember_relationship.py
index 3ba8336f..cd66da4e 100644
--- a/screener/migrations/0013_householdmember_relationship.py
+++ b/screener/migrations/0013_householdmember_relationship.py
@@ -4,16 +4,15 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0012_alter_householdmember_screen_and_more'),
+ ("screener", "0012_alter_householdmember_screen_and_more"),
]
operations = [
migrations.AddField(
- model_name='householdmember',
- name='relationship',
- field=models.CharField(default='parent', max_length=30),
+ model_name="householdmember",
+ name="relationship",
+ field=models.CharField(default="parent", max_length=30),
preserve_default=False,
),
]
diff --git a/screener/migrations/0014_screen_cell_screen_email.py b/screener/migrations/0014_screen_cell_screen_email.py
index 0dc0d7ed..6f7bd68e 100644
--- a/screener/migrations/0014_screen_cell_screen_email.py
+++ b/screener/migrations/0014_screen_cell_screen_email.py
@@ -5,20 +5,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0013_householdmember_relationship'),
+ ("screener", "0013_householdmember_relationship"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='cell',
+ model_name="screen",
+ name="cell",
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None),
),
migrations.AddField(
- model_name='screen',
- name='email',
+ model_name="screen",
+ name="email",
field=models.CharField(blank=True, max_length=320),
),
]
diff --git a/screener/migrations/0015_remove_screen_cell.py b/screener/migrations/0015_remove_screen_cell.py
index ba186afd..f2703086 100644
--- a/screener/migrations/0015_remove_screen_cell.py
+++ b/screener/migrations/0015_remove_screen_cell.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0014_screen_cell_screen_email'),
+ ("screener", "0014_screen_cell_screen_email"),
]
operations = [
migrations.RemoveField(
- model_name='screen',
- name='cell',
+ model_name="screen",
+ name="cell",
),
]
diff --git a/screener/migrations/0016_remove_screen_email.py b/screener/migrations/0016_remove_screen_email.py
index 6456247b..6ecccab0 100644
--- a/screener/migrations/0016_remove_screen_email.py
+++ b/screener/migrations/0016_remove_screen_email.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0015_remove_screen_cell'),
+ ("screener", "0015_remove_screen_cell"),
]
operations = [
migrations.RemoveField(
- model_name='screen',
- name='email',
+ model_name="screen",
+ name="email",
),
]
diff --git a/screener/migrations/0017_screen_last_email_request_date.py b/screener/migrations/0017_screen_last_email_request_date.py
index 2c15230d..5e69a6a8 100644
--- a/screener/migrations/0017_screen_last_email_request_date.py
+++ b/screener/migrations/0017_screen_last_email_request_date.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0016_remove_screen_email'),
+ ("screener", "0016_remove_screen_email"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='last_email_request_date',
+ model_name="screen",
+ name="last_email_request_date",
field=models.DateTimeField(blank=True, null=True),
),
]
diff --git a/screener/migrations/0018_screen_user.py b/screener/migrations/0018_screen_user.py
index 3509e95e..03d0fc79 100644
--- a/screener/migrations/0018_screen_user.py
+++ b/screener/migrations/0018_screen_user.py
@@ -6,16 +6,21 @@
class Migration(migrations.Migration):
-
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ('screener', '0017_screen_last_email_request_date'),
+ ("screener", "0017_screen_last_email_request_date"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='user',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='screens', to=settings.AUTH_USER_MODEL),
+ model_name="screen",
+ name="user",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="screens",
+ to=settings.AUTH_USER_MODEL,
+ ),
),
]
diff --git a/screener/migrations/0019_screen_start_date.py b/screener/migrations/0019_screen_start_date.py
index 4bdb856b..b7e1a673 100644
--- a/screener/migrations/0019_screen_start_date.py
+++ b/screener/migrations/0019_screen_start_date.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0018_screen_user'),
+ ("screener", "0018_screen_user"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='start_date',
+ model_name="screen",
+ name="start_date",
field=models.DateTimeField(blank=True, null=True),
),
]
diff --git a/screener/migrations/0020_screen_is_test.py b/screener/migrations/0020_screen_is_test.py
index 1bd1fb96..5535a831 100644
--- a/screener/migrations/0020_screen_is_test.py
+++ b/screener/migrations/0020_screen_is_test.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0019_screen_start_date'),
+ ("screener", "0019_screen_start_date"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='is_test',
+ model_name="screen",
+ name="is_test",
field=models.BooleanField(blank=True, default=False),
),
]
diff --git a/screener/migrations/0021_messages.py b/screener/migrations/0021_messages.py
index f8377f68..9f3fb465 100644
--- a/screener/migrations/0021_messages.py
+++ b/screener/migrations/0021_messages.py
@@ -6,21 +6,33 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0020_screen_is_test'),
+ ("screener", "0020_screen_is_test"),
]
operations = [
migrations.CreateModel(
- name='Messages',
+ name="Messages",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('sent', models.DateTimeField(auto_now=True)),
- ('cell', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None, unique=True)),
- ('email', models.EmailField(blank=True, max_length=254, null=True, unique=True, verbose_name='email address')),
- ('message', models.CharField(blank=True, max_length=320, null=True)),
- ('screen', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='messages', to='screener.screen')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("sent", models.DateTimeField(auto_now=True)),
+ (
+ "cell",
+ phonenumber_field.modelfields.PhoneNumberField(
+ blank=True, max_length=128, null=True, region=None, unique=True
+ ),
+ ),
+ (
+ "email",
+ models.EmailField(blank=True, max_length=254, null=True, unique=True, verbose_name="email address"),
+ ),
+ ("message", models.CharField(blank=True, max_length=320, null=True)),
+ (
+ "screen",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE, related_name="messages", to="screener.screen"
+ ),
+ ),
],
),
]
diff --git a/screener/migrations/0022_rename_messages_message.py b/screener/migrations/0022_rename_messages_message.py
index 71f7f1e2..bc9145c0 100644
--- a/screener/migrations/0022_rename_messages_message.py
+++ b/screener/migrations/0022_rename_messages_message.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0021_messages'),
+ ("screener", "0021_messages"),
]
operations = [
migrations.RenameModel(
- old_name='Messages',
- new_name='Message',
+ old_name="Messages",
+ new_name="Message",
),
]
diff --git a/screener/migrations/0023_rename_message_message_content_message_type.py b/screener/migrations/0023_rename_message_message_content_message_type.py
index 87ed8481..b5d83512 100644
--- a/screener/migrations/0023_rename_message_message_content_message_type.py
+++ b/screener/migrations/0023_rename_message_message_content_message_type.py
@@ -4,21 +4,20 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0022_rename_messages_message'),
+ ("screener", "0022_rename_messages_message"),
]
operations = [
migrations.RenameField(
- model_name='message',
- old_name='message',
- new_name='content',
+ model_name="message",
+ old_name="message",
+ new_name="content",
),
migrations.AddField(
- model_name='message',
- name='type',
- field=models.CharField(default='', max_length=30),
+ model_name="message",
+ name="type",
+ field=models.CharField(default="", max_length=30),
preserve_default=False,
),
]
diff --git a/screener/migrations/0024_alter_message_cell_alter_message_email.py b/screener/migrations/0024_alter_message_cell_alter_message_email.py
index 263d9d29..9ee9261b 100644
--- a/screener/migrations/0024_alter_message_cell_alter_message_email.py
+++ b/screener/migrations/0024_alter_message_cell_alter_message_email.py
@@ -5,20 +5,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0023_rename_message_message_content_message_type'),
+ ("screener", "0023_rename_message_message_content_message_type"),
]
operations = [
migrations.AlterField(
- model_name='message',
- name='cell',
+ model_name="message",
+ name="cell",
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None),
),
migrations.AlterField(
- model_name='message',
- name='email',
- field=models.EmailField(blank=True, max_length=254, null=True, verbose_name='email address'),
+ model_name="message",
+ name="email",
+ field=models.EmailField(blank=True, max_length=254, null=True, verbose_name="email address"),
),
]
diff --git a/screener/migrations/0025_screen_external_id.py b/screener/migrations/0025_screen_external_id.py
index 67bced38..69083f2d 100644
--- a/screener/migrations/0025_screen_external_id.py
+++ b/screener/migrations/0025_screen_external_id.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0024_alter_message_cell_alter_message_email'),
+ ("screener", "0024_alter_message_cell_alter_message_email"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='external_id',
+ model_name="screen",
+ name="external_id",
field=models.CharField(blank=True, max_length=120, null=True),
),
]
diff --git a/screener/migrations/0026_screen_filed_taxes.py b/screener/migrations/0026_screen_filed_taxes.py
index 40b12481..e2d500fe 100644
--- a/screener/migrations/0026_screen_filed_taxes.py
+++ b/screener/migrations/0026_screen_filed_taxes.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0025_screen_external_id'),
+ ("screener", "0025_screen_external_id"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='filed_taxes',
+ model_name="screen",
+ name="filed_taxes",
field=models.BooleanField(blank=True, default=None, null=True),
),
]
diff --git a/screener/migrations/0027_remove_screen_filed_taxes.py b/screener/migrations/0027_remove_screen_filed_taxes.py
index 98c2743d..1b30d814 100644
--- a/screener/migrations/0027_remove_screen_filed_taxes.py
+++ b/screener/migrations/0027_remove_screen_filed_taxes.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0026_screen_filed_taxes'),
+ ("screener", "0026_screen_filed_taxes"),
]
operations = [
migrations.RemoveField(
- model_name='screen',
- name='filed_taxes',
+ model_name="screen",
+ name="filed_taxes",
),
]
diff --git a/screener/migrations/0028_screen_last_tax_filing_year.py b/screener/migrations/0028_screen_last_tax_filing_year.py
index 7e602175..41f24c6d 100644
--- a/screener/migrations/0028_screen_last_tax_filing_year.py
+++ b/screener/migrations/0028_screen_last_tax_filing_year.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0027_remove_screen_filed_taxes'),
+ ("screener", "0027_remove_screen_filed_taxes"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='last_tax_filing_year',
+ model_name="screen",
+ name="last_tax_filing_year",
field=models.CharField(blank=True, default=None, max_length=120, null=True),
),
]
diff --git a/screener/migrations/0029_alter_screen_housing_situation.py b/screener/migrations/0029_alter_screen_housing_situation.py
index 97fa7799..20e71f1c 100644
--- a/screener/migrations/0029_alter_screen_housing_situation.py
+++ b/screener/migrations/0029_alter_screen_housing_situation.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0028_screen_last_tax_filing_year'),
+ ("screener", "0028_screen_last_tax_filing_year"),
]
operations = [
migrations.AlterField(
- model_name='screen',
- name='housing_situation',
+ model_name="screen",
+ name="housing_situation",
field=models.CharField(blank=True, default=None, max_length=30, null=True),
),
]
diff --git a/screener/migrations/0030_screen_has_acp_screen_has_ccb_screen_has_cccap_and_more.py b/screener/migrations/0030_screen_has_acp_screen_has_ccb_screen_has_cccap_and_more.py
index 24cf05f0..bd2b3276 100644
--- a/screener/migrations/0030_screen_has_acp_screen_has_ccb_screen_has_cccap_and_more.py
+++ b/screener/migrations/0030_screen_has_acp_screen_has_ccb_screen_has_cccap_and_more.py
@@ -4,85 +4,84 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0029_alter_screen_housing_situation'),
+ ("screener", "0029_alter_screen_housing_situation"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='has_acp',
+ model_name="screen",
+ name="has_acp",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_ccb',
+ model_name="screen",
+ name="has_ccb",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_cccap',
+ model_name="screen",
+ name="has_cccap",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_chp',
+ model_name="screen",
+ name="has_chp",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_coeitc',
+ model_name="screen",
+ name="has_coeitc",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_ctc',
+ model_name="screen",
+ name="has_ctc",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_eitc',
+ model_name="screen",
+ name="has_eitc",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_lifeline',
+ model_name="screen",
+ name="has_lifeline",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_medicaid',
+ model_name="screen",
+ name="has_medicaid",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_mydenver',
+ model_name="screen",
+ name="has_mydenver",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_nslp',
+ model_name="screen",
+ name="has_nslp",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_rtdlive',
+ model_name="screen",
+ name="has_rtdlive",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_snap',
+ model_name="screen",
+ name="has_snap",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_tanf',
+ model_name="screen",
+ name="has_tanf",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_wic',
+ model_name="screen",
+ name="has_wic",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0031_alter_householdmember_disability_medicaid_and_more.py b/screener/migrations/0031_alter_householdmember_disability_medicaid_and_more.py
index 4b1dd9c4..d80cc09e 100644
--- a/screener/migrations/0031_alter_householdmember_disability_medicaid_and_more.py
+++ b/screener/migrations/0031_alter_householdmember_disability_medicaid_and_more.py
@@ -4,20 +4,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0030_screen_has_acp_screen_has_ccb_screen_has_cccap_and_more'),
+ ("screener", "0030_screen_has_acp_screen_has_ccb_screen_has_cccap_and_more"),
]
operations = [
migrations.AlterField(
- model_name='householdmember',
- name='disability_medicaid',
+ model_name="householdmember",
+ name="disability_medicaid",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='medicaid',
+ model_name="householdmember",
+ name="medicaid",
field=models.BooleanField(blank=True, null=True),
),
]
diff --git a/screener/migrations/0032_message_uid.py b/screener/migrations/0032_message_uid.py
index 14ad42c9..d0010baa 100644
--- a/screener/migrations/0032_message_uid.py
+++ b/screener/migrations/0032_message_uid.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0031_alter_householdmember_disability_medicaid_and_more'),
+ ("screener", "0031_alter_householdmember_disability_medicaid_and_more"),
]
operations = [
migrations.AddField(
- model_name='message',
- name='uid',
+ model_name="message",
+ name="uid",
field=models.IntegerField(blank=True, null=True),
),
]
diff --git a/screener/migrations/0033_screen_referral_source.py b/screener/migrations/0033_screen_referral_source.py
index 92c783e3..486aeeed 100644
--- a/screener/migrations/0033_screen_referral_source.py
+++ b/screener/migrations/0033_screen_referral_source.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0032_message_uid'),
+ ("screener", "0032_message_uid"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='referral_source',
+ model_name="screen",
+ name="referral_source",
field=models.CharField(blank=True, default=None, max_length=320, null=True),
),
]
diff --git a/screener/migrations/0034_alter_screen_household_assets.py b/screener/migrations/0034_alter_screen_household_assets.py
index 83bff2c4..e586bbab 100644
--- a/screener/migrations/0034_alter_screen_household_assets.py
+++ b/screener/migrations/0034_alter_screen_household_assets.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0033_screen_referral_source'),
+ ("screener", "0033_screen_referral_source"),
]
operations = [
migrations.AlterField(
- model_name='screen',
- name='household_assets',
+ model_name="screen",
+ name="household_assets",
field=models.DecimalField(blank=True, decimal_places=2, default=None, max_digits=10, null=True),
),
]
diff --git a/screener/migrations/0035_screen_county.py b/screener/migrations/0035_screen_county.py
index e1717eb8..4fc78071 100644
--- a/screener/migrations/0035_screen_county.py
+++ b/screener/migrations/0035_screen_county.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0034_alter_screen_household_assets'),
+ ("screener", "0034_alter_screen_household_assets"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='county',
+ model_name="screen",
+ name="county",
field=models.CharField(blank=True, default=None, max_length=120, null=True),
),
]
diff --git a/screener/migrations/0036_screen_request_language_code.py b/screener/migrations/0036_screen_request_language_code.py
index a56c4cb9..571c1a5d 100644
--- a/screener/migrations/0036_screen_request_language_code.py
+++ b/screener/migrations/0036_screen_request_language_code.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0035_screen_county'),
+ ("screener", "0035_screen_county"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='request_language_code',
+ model_name="screen",
+ name="request_language_code",
field=models.CharField(blank=True, max_length=12, null=True),
),
]
diff --git a/screener/migrations/0037_eligibilitysnapshot_programeligibilitysnapshot.py b/screener/migrations/0037_eligibilitysnapshot_programeligibilitysnapshot.py
index 89028830..a026c130 100644
--- a/screener/migrations/0037_eligibilitysnapshot_programeligibilitysnapshot.py
+++ b/screener/migrations/0037_eligibilitysnapshot_programeligibilitysnapshot.py
@@ -5,35 +5,48 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0036_screen_request_language_code'),
+ ("screener", "0036_screen_request_language_code"),
]
operations = [
migrations.CreateModel(
- name='EligibilitySnapshot',
+ name="EligibilitySnapshot",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('submission_date', models.DateTimeField(auto_now=True)),
- ('screen', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='eligibility_snapshots', to='screener.screen')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("submission_date", models.DateTimeField(auto_now=True)),
+ (
+ "screen",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="eligibility_snapshots",
+ to="screener.screen",
+ ),
+ ),
],
),
migrations.CreateModel(
- name='ProgramEligibilitySnapshot',
+ name="ProgramEligibilitySnapshot",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=320)),
- ('name_abbreviated', models.CharField(max_length=32)),
- ('value_type', models.CharField(max_length=120)),
- ('estimated_value', models.DecimalField(decimal_places=2, max_digits=10)),
- ('estimated_delivery_time', models.CharField(max_length=120)),
- ('estimated_application_time', models.CharField(max_length=120)),
- ('legal_status_required', models.CharField(max_length=120)),
- ('eligible', models.BooleanField()),
- ('failed_tests', models.JSONField()),
- ('passed_tests', models.JSONField()),
- ('eligibility_snapshot', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='program_snapshots', to='screener.eligibilitysnapshot')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("name", models.CharField(max_length=320)),
+ ("name_abbreviated", models.CharField(max_length=32)),
+ ("value_type", models.CharField(max_length=120)),
+ ("estimated_value", models.DecimalField(decimal_places=2, max_digits=10)),
+ ("estimated_delivery_time", models.CharField(max_length=120)),
+ ("estimated_application_time", models.CharField(max_length=120)),
+ ("legal_status_required", models.CharField(max_length=120)),
+ ("eligible", models.BooleanField()),
+ ("failed_tests", models.JSONField()),
+ ("passed_tests", models.JSONField()),
+ (
+ "eligibility_snapshot",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="program_snapshots",
+ to="screener.eligibilitysnapshot",
+ ),
+ ),
],
),
]
diff --git a/screener/migrations/0038_alter_programeligibilitysnapshot_estimated_application_time_and_more.py b/screener/migrations/0038_alter_programeligibilitysnapshot_estimated_application_time_and_more.py
index 18bafb77..d8a24e8c 100644
--- a/screener/migrations/0038_alter_programeligibilitysnapshot_estimated_application_time_and_more.py
+++ b/screener/migrations/0038_alter_programeligibilitysnapshot_estimated_application_time_and_more.py
@@ -4,35 +4,34 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0037_eligibilitysnapshot_programeligibilitysnapshot'),
+ ("screener", "0037_eligibilitysnapshot_programeligibilitysnapshot"),
]
operations = [
migrations.AlterField(
- model_name='programeligibilitysnapshot',
- name='estimated_application_time',
+ model_name="programeligibilitysnapshot",
+ name="estimated_application_time",
field=models.CharField(blank=True, max_length=120, null=True),
),
migrations.AlterField(
- model_name='programeligibilitysnapshot',
- name='estimated_delivery_time',
+ model_name="programeligibilitysnapshot",
+ name="estimated_delivery_time",
field=models.CharField(blank=True, max_length=120, null=True),
),
migrations.AlterField(
- model_name='programeligibilitysnapshot',
- name='failed_tests',
+ model_name="programeligibilitysnapshot",
+ name="failed_tests",
field=models.JSONField(blank=True, null=True),
),
migrations.AlterField(
- model_name='programeligibilitysnapshot',
- name='legal_status_required',
+ model_name="programeligibilitysnapshot",
+ name="legal_status_required",
field=models.CharField(blank=True, max_length=120, null=True),
),
migrations.AlterField(
- model_name='programeligibilitysnapshot',
- name='passed_tests',
+ model_name="programeligibilitysnapshot",
+ name="passed_tests",
field=models.JSONField(blank=True, null=True),
),
]
diff --git a/screener/migrations/0039_screen_has_ssi.py b/screener/migrations/0039_screen_has_ssi.py
index 116f4e23..84aa63e9 100644
--- a/screener/migrations/0039_screen_has_ssi.py
+++ b/screener/migrations/0039_screen_has_ssi.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0038_alter_programeligibilitysnapshot_estimated_application_time_and_more'),
+ ("screener", "0038_alter_programeligibilitysnapshot_estimated_application_time_and_more"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='has_ssi',
+ model_name="screen",
+ name="has_ssi",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0040_screen_has_chp_hi_screen_has_employer_hi_and_more.py b/screener/migrations/0040_screen_has_chp_hi_screen_has_employer_hi_and_more.py
index d5f205d5..b52afd91 100644
--- a/screener/migrations/0040_screen_has_chp_hi_screen_has_employer_hi_and_more.py
+++ b/screener/migrations/0040_screen_has_chp_hi_screen_has_employer_hi_and_more.py
@@ -4,35 +4,34 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0039_screen_has_ssi'),
+ ("screener", "0039_screen_has_ssi"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='has_chp_hi',
+ model_name="screen",
+ name="has_chp_hi",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_employer_hi',
+ model_name="screen",
+ name="has_employer_hi",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_medicaid_hi',
+ model_name="screen",
+ name="has_medicaid_hi",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_no_hi',
+ model_name="screen",
+ name="has_no_hi",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_private_hi',
+ model_name="screen",
+ name="has_private_hi",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0041_screen_referrer_code.py b/screener/migrations/0041_screen_referrer_code.py
index 8cdcb3cd..bfcb342b 100644
--- a/screener/migrations/0041_screen_referrer_code.py
+++ b/screener/migrations/0041_screen_referrer_code.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0040_screen_has_chp_hi_screen_has_employer_hi_and_more'),
+ ("screener", "0040_screen_has_chp_hi_screen_has_employer_hi_and_more"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='referrer_code',
+ model_name="screen",
+ name="referrer_code",
field=models.CharField(blank=True, default=None, max_length=320, null=True),
),
]
diff --git a/screener/migrations/0042_screen_needs_baby_supplies_and_more.py b/screener/migrations/0042_screen_needs_baby_supplies_and_more.py
index e1c1808f..4e6a039a 100644
--- a/screener/migrations/0042_screen_needs_baby_supplies_and_more.py
+++ b/screener/migrations/0042_screen_needs_baby_supplies_and_more.py
@@ -4,40 +4,39 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0041_screen_referrer_code'),
+ ("screener", "0041_screen_referrer_code"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='needs_baby_supplies',
+ model_name="screen",
+ name="needs_baby_supplies",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='needs_child_dev_help',
+ model_name="screen",
+ name="needs_child_dev_help",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='needs_food',
+ model_name="screen",
+ name="needs_food",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='needs_funeral_help',
+ model_name="screen",
+ name="needs_funeral_help",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='needs_housing_help',
+ model_name="screen",
+ name="needs_housing_help",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='needs_mental_health_help',
+ model_name="screen",
+ name="needs_mental_health_help",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0043_screen_has_medicare_hi.py b/screener/migrations/0043_screen_has_medicare_hi.py
index e4e6f54e..e5babd3d 100644
--- a/screener/migrations/0043_screen_has_medicare_hi.py
+++ b/screener/migrations/0043_screen_has_medicare_hi.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0042_screen_needs_baby_supplies_and_more'),
+ ("screener", "0042_screen_needs_baby_supplies_and_more"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='has_medicare_hi',
+ model_name="screen",
+ name="has_medicare_hi",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0044_screen_is_verified.py b/screener/migrations/0044_screen_is_verified.py
index b0ce051f..65b0ce57 100644
--- a/screener/migrations/0044_screen_is_verified.py
+++ b/screener/migrations/0044_screen_is_verified.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0043_screen_has_medicare_hi'),
+ ("screener", "0043_screen_has_medicare_hi"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='is_verified',
+ model_name="screen",
+ name="is_verified",
field=models.BooleanField(blank=True, default=False),
),
]
diff --git a/screener/migrations/0045_screen_uuid.py b/screener/migrations/0045_screen_uuid.py
index efa0f356..11d1d653 100644
--- a/screener/migrations/0045_screen_uuid.py
+++ b/screener/migrations/0045_screen_uuid.py
@@ -5,15 +5,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0044_screen_is_verified'),
+ ("screener", "0044_screen_is_verified"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='uuid',
+ model_name="screen",
+ name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False),
),
]
diff --git a/screener/migrations/0046_alter_screen_uuid.py b/screener/migrations/0046_alter_screen_uuid.py
index 55eeae10..5e8d3853 100644
--- a/screener/migrations/0046_alter_screen_uuid.py
+++ b/screener/migrations/0046_alter_screen_uuid.py
@@ -5,15 +5,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0045_screen_uuid'),
+ ("screener", "0045_screen_uuid"),
]
operations = [
migrations.AlterField(
- model_name='screen',
- name='uuid',
+ model_name="screen",
+ name="uuid",
field=models.UUIDField(default=uuid.uuid4),
),
]
diff --git a/screener/migrations/0047_incomestream_hours_worked.py b/screener/migrations/0047_incomestream_hours_worked.py
index 144f8eb7..9cd2edd9 100644
--- a/screener/migrations/0047_incomestream_hours_worked.py
+++ b/screener/migrations/0047_incomestream_hours_worked.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0046_alter_screen_uuid'),
+ ("screener", "0046_alter_screen_uuid"),
]
operations = [
migrations.AddField(
- model_name='incomestream',
- name='hours_worked',
+ model_name="incomestream",
+ name="hours_worked",
field=models.IntegerField(null=True),
),
]
diff --git a/screener/migrations/0048_screen_needs_family_planning_help.py b/screener/migrations/0048_screen_needs_family_planning_help.py
index ebc5c318..2a7f76eb 100644
--- a/screener/migrations/0048_screen_needs_family_planning_help.py
+++ b/screener/migrations/0048_screen_needs_family_planning_help.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0047_incomestream_hours_worked'),
+ ("screener", "0047_incomestream_hours_worked"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='needs_family_planning_help',
+ model_name="screen",
+ name="needs_family_planning_help",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0049_eligibilitysnapshot_batch.py b/screener/migrations/0049_eligibilitysnapshot_batch.py
index 00664c9c..4c3142eb 100644
--- a/screener/migrations/0049_eligibilitysnapshot_batch.py
+++ b/screener/migrations/0049_eligibilitysnapshot_batch.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0048_screen_needs_family_planning_help'),
+ ("screener", "0048_screen_needs_family_planning_help"),
]
operations = [
migrations.AddField(
- model_name='eligibilitysnapshot',
- name='batch',
+ model_name="eligibilitysnapshot",
+ name="batch",
field=models.BooleanField(default=False),
),
]
diff --git a/screener/migrations/0050_rename_batch_eligibilitysnapshot_is_batch.py b/screener/migrations/0050_rename_batch_eligibilitysnapshot_is_batch.py
index 65329ee0..84ba7698 100644
--- a/screener/migrations/0050_rename_batch_eligibilitysnapshot_is_batch.py
+++ b/screener/migrations/0050_rename_batch_eligibilitysnapshot_is_batch.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0049_eligibilitysnapshot_batch'),
+ ("screener", "0049_eligibilitysnapshot_batch"),
]
operations = [
migrations.RenameField(
- model_name='eligibilitysnapshot',
- old_name='batch',
- new_name='is_batch',
+ model_name="eligibilitysnapshot",
+ old_name="batch",
+ new_name="is_batch",
),
]
diff --git a/screener/migrations/0051_programeligibilitysnapshot_new.py b/screener/migrations/0051_programeligibilitysnapshot_new.py
index fe09c847..aed99351 100644
--- a/screener/migrations/0051_programeligibilitysnapshot_new.py
+++ b/screener/migrations/0051_programeligibilitysnapshot_new.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0050_rename_batch_eligibilitysnapshot_is_batch'),
+ ("screener", "0050_rename_batch_eligibilitysnapshot_is_batch"),
]
operations = [
migrations.AddField(
- model_name='programeligibilitysnapshot',
- name='new',
+ model_name="programeligibilitysnapshot",
+ name="new",
field=models.BooleanField(default=False),
),
]
diff --git a/screener/migrations/0052_alter_expense_household_member.py b/screener/migrations/0052_alter_expense_household_member.py
index b9230f44..63d6119a 100644
--- a/screener/migrations/0052_alter_expense_household_member.py
+++ b/screener/migrations/0052_alter_expense_household_member.py
@@ -5,15 +5,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0051_programeligibilitysnapshot_new'),
+ ("screener", "0051_programeligibilitysnapshot_new"),
]
operations = [
migrations.AlterField(
- model_name='expense',
- name='household_member',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='expenses', to='screener.householdmember'),
+ model_name="expense",
+ name="household_member",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="expenses",
+ to="screener.householdmember",
+ ),
),
]
diff --git a/screener/migrations/0053_alter_householdmember_has_expenses_and_more.py b/screener/migrations/0053_alter_householdmember_has_expenses_and_more.py
index f80325bb..7cef8bbb 100644
--- a/screener/migrations/0053_alter_householdmember_has_expenses_and_more.py
+++ b/screener/migrations/0053_alter_householdmember_has_expenses_and_more.py
@@ -4,20 +4,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0052_alter_expense_household_member'),
+ ("screener", "0052_alter_expense_household_member"),
]
operations = [
migrations.AlterField(
- model_name='householdmember',
- name='has_expenses',
+ model_name="householdmember",
+ name="has_expenses",
field=models.BooleanField(null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='has_income',
+ model_name="householdmember",
+ name="has_income",
field=models.BooleanField(null=True),
),
]
diff --git a/screener/migrations/0054_alter_expense_amount_alter_expense_frequency_and_more.py b/screener/migrations/0054_alter_expense_amount_alter_expense_frequency_and_more.py
index d7bb9d19..f2044965 100644
--- a/screener/migrations/0054_alter_expense_amount_alter_expense_frequency_and_more.py
+++ b/screener/migrations/0054_alter_expense_amount_alter_expense_frequency_and_more.py
@@ -4,125 +4,124 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0053_alter_householdmember_has_expenses_and_more'),
+ ("screener", "0053_alter_householdmember_has_expenses_and_more"),
]
operations = [
migrations.AlterField(
- model_name='expense',
- name='amount',
+ model_name="expense",
+ name="amount",
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True),
),
migrations.AlterField(
- model_name='expense',
- name='frequency',
+ model_name="expense",
+ name="frequency",
field=models.CharField(blank=True, max_length=30, null=True),
),
migrations.AlterField(
- model_name='expense',
- name='type',
+ model_name="expense",
+ name="type",
field=models.CharField(blank=True, max_length=30, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='age',
+ model_name="householdmember",
+ name="age",
field=models.IntegerField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='disabled',
+ model_name="householdmember",
+ name="disabled",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='has_expenses',
+ model_name="householdmember",
+ name="has_expenses",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='has_income',
+ model_name="householdmember",
+ name="has_income",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='pregnant',
+ model_name="householdmember",
+ name="pregnant",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='relationship',
+ model_name="householdmember",
+ name="relationship",
field=models.CharField(blank=True, max_length=30, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='student',
+ model_name="householdmember",
+ name="student",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='student_full_time',
+ model_name="householdmember",
+ name="student_full_time",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='unemployed',
+ model_name="householdmember",
+ name="unemployed",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='veteran',
+ model_name="householdmember",
+ name="veteran",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='visually_impaired',
+ model_name="householdmember",
+ name="visually_impaired",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='householdmember',
- name='worked_in_last_18_mos',
+ model_name="householdmember",
+ name="worked_in_last_18_mos",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='incomestream',
- name='amount',
+ model_name="incomestream",
+ name="amount",
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True),
),
migrations.AlterField(
- model_name='incomestream',
- name='frequency',
+ model_name="incomestream",
+ name="frequency",
field=models.CharField(blank=True, max_length=30, null=True),
),
migrations.AlterField(
- model_name='incomestream',
- name='hours_worked',
+ model_name="incomestream",
+ name="hours_worked",
field=models.IntegerField(blank=True, null=True),
),
migrations.AlterField(
- model_name='incomestream',
- name='type',
+ model_name="incomestream",
+ name="type",
field=models.CharField(blank=True, max_length=30, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='agree_to_tos',
+ model_name="screen",
+ name="agree_to_tos",
field=models.BooleanField(blank=True, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='household_size',
+ model_name="screen",
+ name="household_size",
field=models.IntegerField(blank=True, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='submission_date',
+ model_name="screen",
+ name="submission_date",
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='zipcode',
+ model_name="screen",
+ name="zipcode",
field=models.CharField(blank=True, max_length=5, null=True),
),
]
diff --git a/screener/migrations/0055_screen_has_andcs_screen_has_benefits_and_more.py b/screener/migrations/0055_screen_has_andcs_screen_has_benefits_and_more.py
index 07b3a853..0499cd39 100644
--- a/screener/migrations/0055_screen_has_andcs_screen_has_benefits_and_more.py
+++ b/screener/migrations/0055_screen_has_andcs_screen_has_benefits_and_more.py
@@ -4,60 +4,59 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0054_alter_expense_amount_alter_expense_frequency_and_more'),
+ ("screener", "0054_alter_expense_amount_alter_expense_frequency_and_more"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='has_andcs',
+ model_name="screen",
+ name="has_andcs",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_benefits',
- field=models.CharField(blank=True, default='preferNotToAnswer', max_length=32, null=True),
+ model_name="screen",
+ name="has_benefits",
+ field=models.CharField(blank=True, default="preferNotToAnswer", max_length=32, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_cdhcs',
+ model_name="screen",
+ name="has_cdhcs",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_chs',
+ model_name="screen",
+ name="has_chs",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_cpcr',
+ model_name="screen",
+ name="has_cpcr",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_dpp',
+ model_name="screen",
+ name="has_dpp",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_ede',
+ model_name="screen",
+ name="has_ede",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_erc',
+ model_name="screen",
+ name="has_erc",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_leap',
+ model_name="screen",
+ name="has_leap",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_oap',
+ model_name="screen",
+ name="has_oap",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0056_screen_completed.py b/screener/migrations/0056_screen_completed.py
index 38f8afa1..e2ed6944 100644
--- a/screener/migrations/0056_screen_completed.py
+++ b/screener/migrations/0056_screen_completed.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0055_screen_has_andcs_screen_has_benefits_and_more'),
+ ("screener", "0055_screen_has_andcs_screen_has_benefits_and_more"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='completed',
+ model_name="screen",
+ name="completed",
field=models.BooleanField(default=True),
preserve_default=False,
),
diff --git a/screener/migrations/0057_screen_has_coctc_screen_has_upk.py b/screener/migrations/0057_screen_has_coctc_screen_has_upk.py
index 5df00262..c31e431e 100644
--- a/screener/migrations/0057_screen_has_coctc_screen_has_upk.py
+++ b/screener/migrations/0057_screen_has_coctc_screen_has_upk.py
@@ -4,20 +4,19 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0056_screen_completed'),
+ ("screener", "0056_screen_completed"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='has_coctc',
+ model_name="screen",
+ name="has_coctc",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='has_upk',
+ model_name="screen",
+ name="has_upk",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0058_webhookfunctions_webhooks_webhookstranslation.py b/screener/migrations/0058_webhookfunctions_webhooks_webhookstranslation.py
index d0b6c4f7..9535fb58 100644
--- a/screener/migrations/0058_webhookfunctions_webhooks_webhookstranslation.py
+++ b/screener/migrations/0058_webhookfunctions_webhooks_webhookstranslation.py
@@ -7,46 +7,54 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0057_screen_has_coctc_screen_has_upk'),
+ ("screener", "0057_screen_has_coctc_screen_has_upk"),
]
operations = [
migrations.CreateModel(
- name='WebHookFunctions',
+ name="WebHookFunctions",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=64)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("name", models.CharField(max_length=64)),
],
),
migrations.CreateModel(
- name='WebHooks',
+ name="WebHooks",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('referrer_code', models.CharField(max_length=120)),
- ('url', models.CharField(max_length=320)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("referrer_code", models.CharField(max_length=120)),
+ ("url", models.CharField(max_length=320)),
],
options={
- 'abstract': False,
+ "abstract": False,
},
bases=(parler.models.TranslatableModelMixin, models.Model),
),
migrations.CreateModel(
- name='WebHooksTranslation',
+ name="WebHooksTranslation",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')),
- ('consent_text', models.TextField()),
- ('master', parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='screener.webhooks')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language")),
+ ("consent_text", models.TextField()),
+ (
+ "master",
+ parler.fields.TranslationsForeignKey(
+ editable=False,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="translations",
+ to="screener.webhooks",
+ ),
+ ),
],
options={
- 'verbose_name': 'web hooks Translation',
- 'db_table': 'screener_webhooks_translation',
- 'db_tablespace': '',
- 'managed': True,
- 'default_permissions': (),
- 'unique_together': {('language_code', 'master')},
+ "verbose_name": "web hooks Translation",
+ "db_table": "screener_webhooks_translation",
+ "db_tablespace": "",
+ "managed": True,
+ "default_permissions": (),
+ "unique_together": {("language_code", "master")},
},
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
),
diff --git a/screener/migrations/0059_webhook_webhookfunction_webhooktranslation_and_more.py b/screener/migrations/0059_webhook_webhookfunction_webhooktranslation_and_more.py
index 936b95c4..ace290bc 100644
--- a/screener/migrations/0059_webhook_webhookfunction_webhooktranslation_and_more.py
+++ b/screener/migrations/0059_webhook_webhookfunction_webhooktranslation_and_more.py
@@ -7,69 +7,77 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0058_webhookfunctions_webhooks_webhookstranslation'),
+ ("screener", "0058_webhookfunctions_webhooks_webhookstranslation"),
]
operations = [
migrations.CreateModel(
- name='WebHook',
+ name="WebHook",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('referrer_code', models.CharField(max_length=120)),
- ('url', models.CharField(max_length=320)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("referrer_code", models.CharField(max_length=120)),
+ ("url", models.CharField(max_length=320)),
],
options={
- 'abstract': False,
+ "abstract": False,
},
bases=(parler.models.TranslatableModelMixin, models.Model),
),
migrations.CreateModel(
- name='WebHookFunction',
+ name="WebHookFunction",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=64)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("name", models.CharField(max_length=64)),
],
),
migrations.CreateModel(
- name='WebHookTranslation',
+ name="WebHookTranslation",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')),
- ('consent_text', models.TextField()),
- ('master', parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='screener.webhook')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language")),
+ ("consent_text", models.TextField()),
+ (
+ "master",
+ parler.fields.TranslationsForeignKey(
+ editable=False,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="translations",
+ to="screener.webhook",
+ ),
+ ),
],
options={
- 'verbose_name': 'web hook Translation',
- 'db_table': 'screener_webhook_translation',
- 'db_tablespace': '',
- 'managed': True,
- 'default_permissions': (),
- 'unique_together': {('language_code', 'master')},
+ "verbose_name": "web hook Translation",
+ "db_table": "screener_webhook_translation",
+ "db_tablespace": "",
+ "managed": True,
+ "default_permissions": (),
+ "unique_together": {("language_code", "master")},
},
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
),
migrations.DeleteModel(
- name='WebHookFunctions',
+ name="WebHookFunctions",
),
migrations.AlterUniqueTogether(
- name='webhookstranslation',
+ name="webhookstranslation",
unique_together=None,
),
migrations.RemoveField(
- model_name='webhookstranslation',
- name='master',
+ model_name="webhookstranslation",
+ name="master",
),
migrations.DeleteModel(
- name='WebHooks',
+ name="WebHooks",
),
migrations.DeleteModel(
- name='WebHooksTranslation',
+ name="WebHooksTranslation",
),
migrations.AddField(
- model_name='webhook',
- name='functions',
- field=models.ManyToManyField(related_name='function', to='screener.webhookfunction'),
+ model_name="webhook",
+ name="functions",
+ field=models.ManyToManyField(related_name="function", to="screener.webhookfunction"),
),
]
diff --git a/screener/migrations/0060_screen_is_test_data.py b/screener/migrations/0060_screen_is_test_data.py
index 95e95ddf..77b681cf 100644
--- a/screener/migrations/0060_screen_is_test_data.py
+++ b/screener/migrations/0060_screen_is_test_data.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0059_webhook_webhookfunction_webhooktranslation_and_more'),
+ ("screener", "0059_webhook_webhookfunction_webhooktranslation_and_more"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='is_test_data',
+ model_name="screen",
+ name="is_test_data",
field=models.BooleanField(blank=True, default=False),
),
]
diff --git a/screener/migrations/0061_alter_screen_is_test_data.py b/screener/migrations/0061_alter_screen_is_test_data.py
index 809b2542..65e46c3b 100644
--- a/screener/migrations/0061_alter_screen_is_test_data.py
+++ b/screener/migrations/0061_alter_screen_is_test_data.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0060_screen_is_test_data'),
+ ("screener", "0060_screen_is_test_data"),
]
operations = [
migrations.AlterField(
- model_name='screen',
- name='is_test_data',
+ model_name="screen",
+ name="is_test_data",
field=models.BooleanField(blank=True),
),
]
diff --git a/screener/migrations/0062_alter_screen_is_test_data.py b/screener/migrations/0062_alter_screen_is_test_data.py
index 22abc76a..8d5e8b56 100644
--- a/screener/migrations/0062_alter_screen_is_test_data.py
+++ b/screener/migrations/0062_alter_screen_is_test_data.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0061_alter_screen_is_test_data'),
+ ("screener", "0061_alter_screen_is_test_data"),
]
operations = [
migrations.AlterField(
- model_name='screen',
- name='is_test_data',
+ model_name="screen",
+ name="is_test_data",
field=models.BooleanField(blank=True, null=True),
),
]
diff --git a/screener/migrations/0063_alter_webhooktranslation_unique_together_and_more.py b/screener/migrations/0063_alter_webhooktranslation_unique_together_and_more.py
index 1bceb48f..eb14c3ad 100644
--- a/screener/migrations/0063_alter_webhooktranslation_unique_together_and_more.py
+++ b/screener/migrations/0063_alter_webhooktranslation_unique_together_and_more.py
@@ -4,27 +4,26 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0062_alter_screen_is_test_data'),
+ ("screener", "0062_alter_screen_is_test_data"),
]
operations = [
migrations.AlterUniqueTogether(
- name='webhooktranslation',
+ name="webhooktranslation",
unique_together=None,
),
migrations.RemoveField(
- model_name='webhooktranslation',
- name='master',
+ model_name="webhooktranslation",
+ name="master",
),
migrations.DeleteModel(
- name='WebHook',
+ name="WebHook",
),
migrations.DeleteModel(
- name='WebHookFunction',
+ name="WebHookFunction",
),
migrations.DeleteModel(
- name='WebHookTranslation',
+ name="WebHookTranslation",
),
]
diff --git a/screener/migrations/0064_screen_needs_dental_care_help_and_more.py b/screener/migrations/0064_screen_needs_dental_care_help_and_more.py
index 6f41d27f..9d483c51 100644
--- a/screener/migrations/0064_screen_needs_dental_care_help_and_more.py
+++ b/screener/migrations/0064_screen_needs_dental_care_help_and_more.py
@@ -4,25 +4,24 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0063_alter_webhooktranslation_unique_together_and_more'),
+ ("screener", "0063_alter_webhooktranslation_unique_together_and_more"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='needs_dental_care_help',
+ model_name="screen",
+ name="needs_dental_care_help",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='needs_job_resources',
+ model_name="screen",
+ name="needs_job_resources",
field=models.BooleanField(blank=True, default=False, null=True),
),
migrations.AddField(
- model_name='screen',
- name='needs_legal_services',
+ model_name="screen",
+ name="needs_legal_services",
field=models.BooleanField(blank=True, default=False, null=True),
),
]
diff --git a/screener/migrations/0065_rename_needs_dental_care_help_screen_needs_dental_care.py b/screener/migrations/0065_rename_needs_dental_care_help_screen_needs_dental_care.py
index 72b4b84a..10ee521d 100644
--- a/screener/migrations/0065_rename_needs_dental_care_help_screen_needs_dental_care.py
+++ b/screener/migrations/0065_rename_needs_dental_care_help_screen_needs_dental_care.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0064_screen_needs_dental_care_help_and_more'),
+ ("screener", "0064_screen_needs_dental_care_help_and_more"),
]
operations = [
migrations.RenameField(
- model_name='screen',
- old_name='needs_dental_care_help',
- new_name='needs_dental_care',
+ model_name="screen",
+ old_name="needs_dental_care_help",
+ new_name="needs_dental_care",
),
]
diff --git a/screener/migrations/0066_screen_is_13_or_older.py b/screener/migrations/0066_screen_is_13_or_older.py
index d4b9553c..f48e87c7 100644
--- a/screener/migrations/0066_screen_is_13_or_older.py
+++ b/screener/migrations/0066_screen_is_13_or_older.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0065_rename_needs_dental_care_help_screen_needs_dental_care'),
+ ("screener", "0065_rename_needs_dental_care_help_screen_needs_dental_care"),
]
operations = [
migrations.AddField(
- model_name='screen',
- name='is_13_or_older',
+ model_name="screen",
+ name="is_13_or_older",
field=models.BooleanField(blank=True, null=True),
),
]
diff --git a/screener/migrations/0067_alter_expense_household_member_alter_screen_user.py b/screener/migrations/0067_alter_expense_household_member_alter_screen_user.py
index b0efdc35..4f5c1320 100644
--- a/screener/migrations/0067_alter_expense_household_member_alter_screen_user.py
+++ b/screener/migrations/0067_alter_expense_household_member_alter_screen_user.py
@@ -6,21 +6,31 @@
class Migration(migrations.Migration):
-
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ('screener', '0066_screen_is_13_or_older'),
+ ("screener", "0066_screen_is_13_or_older"),
]
operations = [
migrations.AlterField(
- model_name='expense',
- name='household_member',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='expenses', to='screener.householdmember'),
+ model_name="expense",
+ name="household_member",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ related_name="expenses",
+ to="screener.householdmember",
+ ),
),
migrations.AlterField(
- model_name='screen',
- name='user',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='screens', to=settings.AUTH_USER_MODEL),
+ model_name="screen",
+ name="user",
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ related_name="screens",
+ to=settings.AUTH_USER_MODEL,
+ ),
),
]
diff --git a/screener/migrations/0068_householdmember_insurance.py b/screener/migrations/0068_householdmember_insurance.py
index 9d1d2106..eabbbba4 100644
--- a/screener/migrations/0068_householdmember_insurance.py
+++ b/screener/migrations/0068_householdmember_insurance.py
@@ -4,15 +4,28 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0067_alter_expense_household_member_alter_screen_user'),
+ ("screener", "0067_alter_expense_household_member_alter_screen_user"),
]
operations = [
migrations.AddField(
- model_name='householdmember',
- name='insurance',
- field=models.CharField(choices=[('dont_know', 'Dont Know'), ('none', 'None'), ('employer', 'Employer'), ('private', 'Private'), ('chp', 'Chp'), ('medicaid', 'Medicaid'), ('medicare', 'Medicare'), ('emergency_medicaid', 'Emergency Medicaid'), ('family_planning', 'Family Planning')], default='dont_know', max_length=64),
+ model_name="householdmember",
+ name="insurance",
+ field=models.CharField(
+ choices=[
+ ("dont_know", "Dont Know"),
+ ("none", "None"),
+ ("employer", "Employer"),
+ ("private", "Private"),
+ ("chp", "Chp"),
+ ("medicaid", "Medicaid"),
+ ("medicare", "Medicare"),
+ ("emergency_medicaid", "Emergency Medicaid"),
+ ("family_planning", "Family Planning"),
+ ],
+ default="dont_know",
+ max_length=64,
+ ),
),
]
diff --git a/screener/migrations/0069_alter_screen_has_chp_hi_alter_screen_has_employer_hi_and_more.py b/screener/migrations/0069_alter_screen_has_chp_hi_alter_screen_has_employer_hi_and_more.py
index 27ab9d63..17c16f92 100644
--- a/screener/migrations/0069_alter_screen_has_chp_hi_alter_screen_has_employer_hi_and_more.py
+++ b/screener/migrations/0069_alter_screen_has_chp_hi_alter_screen_has_employer_hi_and_more.py
@@ -4,40 +4,39 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0068_householdmember_insurance'),
+ ("screener", "0068_householdmember_insurance"),
]
operations = [
migrations.AlterField(
- model_name='screen',
- name='has_chp_hi',
+ model_name="screen",
+ name="has_chp_hi",
field=models.BooleanField(blank=True, default=None, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='has_employer_hi',
+ model_name="screen",
+ name="has_employer_hi",
field=models.BooleanField(blank=True, default=None, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='has_medicaid_hi',
+ model_name="screen",
+ name="has_medicaid_hi",
field=models.BooleanField(blank=True, default=None, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='has_medicare_hi',
+ model_name="screen",
+ name="has_medicare_hi",
field=models.BooleanField(blank=True, default=None, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='has_no_hi',
+ model_name="screen",
+ name="has_no_hi",
field=models.BooleanField(blank=True, default=None, null=True),
),
migrations.AlterField(
- model_name='screen',
- name='has_private_hi',
+ model_name="screen",
+ name="has_private_hi",
field=models.BooleanField(blank=True, default=None, null=True),
),
]
diff --git a/screener/migrations/0070_remove_programeligibilitysnapshot_legal_status_required.py b/screener/migrations/0070_remove_programeligibilitysnapshot_legal_status_required.py
index 7735ee07..be878856 100644
--- a/screener/migrations/0070_remove_programeligibilitysnapshot_legal_status_required.py
+++ b/screener/migrations/0070_remove_programeligibilitysnapshot_legal_status_required.py
@@ -4,14 +4,13 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('screener', '0069_alter_screen_has_chp_hi_alter_screen_has_employer_hi_and_more'),
+ ("screener", "0069_alter_screen_has_chp_hi_alter_screen_has_employer_hi_and_more"),
]
operations = [
migrations.RemoveField(
- model_name='programeligibilitysnapshot',
- name='legal_status_required',
+ model_name="programeligibilitysnapshot",
+ name="legal_status_required",
),
]
diff --git a/screener/migrations/0074_alter_screen_household_assets.py b/screener/migrations/0074_alter_screen_household_assets.py
index 00a2cb39..534b039c 100644
--- a/screener/migrations/0074_alter_screen_household_assets.py
+++ b/screener/migrations/0074_alter_screen_household_assets.py
@@ -12,8 +12,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name="screen",
name="household_assets",
- field=models.DecimalField(
- blank=True, decimal_places=2, default=0, max_digits=10, null=True
- ),
+ field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=10, null=True),
),
]
diff --git a/screener/migrations/0075_alter_screen_household_assets.py b/screener/migrations/0075_alter_screen_household_assets.py
index 045f3d6e..51896937 100644
--- a/screener/migrations/0075_alter_screen_household_assets.py
+++ b/screener/migrations/0075_alter_screen_household_assets.py
@@ -12,8 +12,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name="screen",
name="household_assets",
- field=models.DecimalField(
- blank=True, decimal_places=2, default=None, max_digits=10, null=True
- ),
+ field=models.DecimalField(blank=True, decimal_places=2, default=None, max_digits=10, null=True),
),
]
diff --git a/screener/models.py b/screener/models.py
index 1cab30f1..80bab04e 100644
--- a/screener/models.py
+++ b/screener/models.py
@@ -30,10 +30,10 @@ class Screen(models.Model):
is_test = models.BooleanField(default=False, blank=True)
is_test_data = models.BooleanField(blank=True, null=True)
is_verified = models.BooleanField(default=False, blank=True)
- user = models.ForeignKey(User, related_name='screens', on_delete=models.SET_NULL, blank=True, null=True)
+ user = models.ForeignKey(User, related_name="screens", on_delete=models.SET_NULL, blank=True, null=True)
external_id = models.CharField(max_length=120, blank=True, null=True)
request_language_code = models.CharField(max_length=12, blank=True, null=True)
- has_benefits = models.CharField(max_length=32, default='preferNotToAnswer', blank=True, null=True)
+ has_benefits = models.CharField(max_length=32, default="preferNotToAnswer", blank=True, null=True)
has_tanf = models.BooleanField(default=False, blank=True, null=True)
has_wic = models.BooleanField(default=False, blank=True, null=True)
has_snap = models.BooleanField(default=False, blank=True, null=True)
@@ -115,15 +115,13 @@ def has_expense(self, expense_types):
return True
return False
- def num_children(self, age_min=0, age_max=18, include_pregnant=False, child_relationship=['all']):
+ def num_children(self, age_min=0, age_max=18, include_pregnant=False, child_relationship=["all"]):
children = 0
household_members = self.household_members.all()
for household_member in household_members:
- has_child_relationship = household_member.relationship in child_relationship or 'all' in child_relationship
- if household_member.age >= age_min and \
- household_member.age <= age_max and \
- has_child_relationship:
+ has_child_relationship = household_member.relationship in child_relationship or "all" in child_relationship
+ if household_member.age >= age_min and household_member.age <= age_max and has_child_relationship:
children += 1
if household_member.pregnant and include_pregnant:
children += 1
@@ -140,15 +138,15 @@ def num_adults(self, age_max=19):
def num_guardians(self):
parents = 0
- child_relationship = ['child', 'fosterChild']
- guardian_relationship = ['parent', 'fosterParent']
+ child_relationship = ["child", "fosterChild"]
+ guardian_relationship = ["parent", "fosterParent"]
hoh_child_exists = False
household_members = self.household_members.all()
for household_member in household_members:
if household_member.relationship in child_relationship:
hoh_child_exists = True
- elif household_member.relationship == 'headOfHousehold':
+ elif household_member.relationship == "headOfHousehold":
if household_member.pregnant:
hoh_child_exists = True
elif household_member.pregnant:
@@ -157,9 +155,9 @@ def num_guardians(self):
parents += 1
for household_member in household_members:
- if hoh_child_exists and household_member.relationship == 'spouse':
+ if hoh_child_exists and household_member.relationship == "spouse":
parents += 1
- elif hoh_child_exists and household_member.relationship == 'headOfHousehold':
+ elif hoh_child_exists and household_member.relationship == "headOfHousehold":
parents += 1
return parents
@@ -168,7 +166,7 @@ def is_joint(self):
is_joint = False
household_members = self.household_members.all()
for household_member in household_members:
- if household_member.relationship == 'spouse':
+ if household_member.relationship == "spouse":
is_joint = True
return is_joint
@@ -186,35 +184,38 @@ def relationship_map(self):
all_members = self.household_members.values()
for member in all_members:
- if member['id'] in relationship_map and relationship_map[member['id']] is not None:
+ if member["id"] in relationship_map and relationship_map[member["id"]] is not None:
continue
- relationship = member['relationship']
+ relationship = member["relationship"]
probable_spouse = None
- if relationship == 'headOfHousehold':
+ if relationship == "headOfHousehold":
for other_member in all_members:
- if other_member['relationship'] in ('spouse', 'domesticPartner') and\
- other_member['id'] not in relationship_map:
- probable_spouse = other_member['id']
+ if (
+ other_member["relationship"] in ("spouse", "domesticPartner")
+ and other_member["id"] not in relationship_map
+ ):
+ probable_spouse = other_member["id"]
break
- elif relationship in ('spouse', 'domesticPartner'):
+ elif relationship in ("spouse", "domesticPartner"):
for other_member in all_members:
- if other_member['relationship'] == 'headOfHousehold' and\
- other_member['id'] not in relationship_map:
- probable_spouse = other_member['id']
+ if other_member["relationship"] == "headOfHousehold" and other_member["id"] not in relationship_map:
+ probable_spouse = other_member["id"]
break
- elif relationship in ('parent', 'fosterParent', 'stepParent', 'grandParent'):
+ elif relationship in ("parent", "fosterParent", "stepParent", "grandParent"):
for other_member in all_members:
- if other_member['relationship'] == relationship and\
- other_member['id'] != member['id'] and\
- other_member['id'] not in relationship_map:
- probable_spouse = other_member['id']
+ if (
+ other_member["relationship"] == relationship
+ and other_member["id"] != member["id"]
+ and other_member["id"] not in relationship_map
+ ):
+ probable_spouse = other_member["id"]
break
- relationship_map[member['id']] = probable_spouse
+ relationship_map[member["id"]] = probable_spouse
if probable_spouse is not None:
- relationship_map[probable_spouse] = member['id']
+ relationship_map[probable_spouse] = member["id"]
return relationship_map
@@ -227,41 +228,41 @@ def has_insurance_types(self, types, strict=True):
def has_benefit(self, name_abbreviated):
name_map = {
- 'tanf': self.has_tanf,
- 'wic': self.has_wic,
- 'snap': self.has_snap,
- 'lifeline': self.has_lifeline,
- 'acp': self.has_acp,
- 'eitc': self.has_eitc,
- 'coeitc': self.has_coeitc,
- 'nslp': self.has_nslp,
- 'ctc': self.has_ctc,
- 'rtdlive': self.has_rtdlive,
- 'cccap': self.has_cccap,
- 'mydenver': self.has_mydenver,
- 'ccb': self.has_ccb,
- 'ssi': self.has_ssi or self.calc_gross_income('yearly', ('sSI',)) > 0,
- 'andcs': self.has_andcs,
- 'chs': self.has_chs,
- 'cpcr': self.has_cpcr,
- 'cdhcs': self.has_cdhcs,
- 'dpp': self.has_dpp,
- 'ede': self.has_ede,
- 'erc': self.has_erc,
- 'leap': self.has_leap,
- 'oap': self.has_oap,
- 'coctc': self.has_coctc,
- 'upk': self.has_upk,
- 'ssdi': self.has_ssdi or self.calc_gross_income('yearly', ('sSDisability',)) > 0,
- 'pell_grant': self.has_pell_grant,
- 'rag': self.has_rag,
- 'cowap': self.has_cowap,
- 'ubp': self.has_ubp,
- 'co_medicaid': self.has_medicaid or self.has_medicaid_hi,
- 'nc_medicaid': self.has_medicaid or self.has_medicaid_hi,
- 'medicare': self.has_medicare_hi,
- 'chp': self.has_chp or self.has_chp_hi,
- 'va': self.has_va,
+ "tanf": self.has_tanf,
+ "wic": self.has_wic,
+ "snap": self.has_snap,
+ "lifeline": self.has_lifeline,
+ "acp": self.has_acp,
+ "eitc": self.has_eitc,
+ "coeitc": self.has_coeitc,
+ "nslp": self.has_nslp,
+ "ctc": self.has_ctc,
+ "rtdlive": self.has_rtdlive,
+ "cccap": self.has_cccap,
+ "mydenver": self.has_mydenver,
+ "ccb": self.has_ccb,
+ "ssi": self.has_ssi or self.calc_gross_income("yearly", ("sSI",)) > 0,
+ "andcs": self.has_andcs,
+ "chs": self.has_chs,
+ "cpcr": self.has_cpcr,
+ "cdhcs": self.has_cdhcs,
+ "dpp": self.has_dpp,
+ "ede": self.has_ede,
+ "erc": self.has_erc,
+ "leap": self.has_leap,
+ "oap": self.has_oap,
+ "coctc": self.has_coctc,
+ "upk": self.has_upk,
+ "ssdi": self.has_ssdi or self.calc_gross_income("yearly", ("sSDisability",)) > 0,
+ "pell_grant": self.has_pell_grant,
+ "rag": self.has_rag,
+ "cowap": self.has_cowap,
+ "ubp": self.has_ubp,
+ "co_medicaid": self.has_medicaid or self.has_medicaid_hi,
+ "nc_medicaid": self.has_medicaid or self.has_medicaid_hi,
+ "medicare": self.has_medicare_hi,
+ "chp": self.has_chp or self.has_chp_hi,
+ "va": self.has_va,
}
has_insurance = self.has_insurance_types((name_abbreviated,), strict=False)
@@ -274,19 +275,21 @@ def has_benefit(self, name_abbreviated):
return has_insurance or has_benefit
def set_screen_is_test(self):
- referral_source_tests = ['testorprospect', 'test']
+ referral_source_tests = ["testorprospect", "test"]
- self.is_test_data = self.is_test or \
- (self.referral_source is not None and self.referral_source.lower() in referral_source_tests) or \
- (self.referrer_code is not None and self.referrer_code.lower() in referral_source_tests)
+ self.is_test_data = (
+ self.is_test
+ or (self.referral_source is not None and self.referral_source.lower() in referral_source_tests)
+ or (self.referrer_code is not None and self.referrer_code.lower() in referral_source_tests)
+ )
self.save()
def get_head(self):
for member in self.household_members.all():
- if member.relationship == 'headOfHousehold':
+ if member.relationship == "headOfHousehold":
return member
- raise Exception('No head of household')
+ raise Exception("No head of household")
def get_language_code(self):
language_code = settings.LANGUAGE_CODE
@@ -304,7 +307,7 @@ def has_members_ouside_of_tax_unit(self):
return False
def missing_fields(self):
- screen_fields = ('zipcode', 'county', 'household_size', 'household_assets')
+ screen_fields = ("zipcode", "county", "household_size", "household_assets")
missing_fields = Dependencies()
@@ -325,7 +328,7 @@ def missing_fields(self):
class Message(models.Model):
sent = models.DateTimeField(auto_now=True)
type = models.CharField(max_length=30)
- screen = models.ForeignKey(Screen, related_name='messages', on_delete=models.CASCADE)
+ screen = models.ForeignKey(Screen, related_name="messages", on_delete=models.CASCADE)
content = models.CharField(max_length=320, blank=True, null=True)
uid = models.IntegerField(blank=True, null=True)
@@ -333,7 +336,7 @@ class Message(models.Model):
# Table of fields specific to individual household members. Parent model is the
# Screen
class HouseholdMember(models.Model):
- screen = models.ForeignKey(Screen, related_name='household_members', on_delete=models.CASCADE)
+ screen = models.ForeignKey(Screen, related_name="household_members", on_delete=models.CASCADE)
relationship = models.CharField(max_length=30, blank=True, null=True)
age = models.IntegerField(blank=True, null=True)
student = models.BooleanField(blank=True, null=True)
@@ -389,13 +392,13 @@ def calc_net_income(self, frequency, income_types, expense_types):
return float(net_income)
def is_married(self):
- if self.relationship in ('spouse', 'domesticPartner'):
- head_of_house = HouseholdMember.objects.all().filter(screen=self.screen, relationship='headOfHousehold')[0]
+ if self.relationship in ("spouse", "domesticPartner"):
+ head_of_house = HouseholdMember.objects.all().filter(screen=self.screen, relationship="headOfHousehold")[0]
return {"is_married": True, "married_to": head_of_house}
- if self.relationship == 'headOfHousehold':
+ if self.relationship == "headOfHousehold":
all_household_members = HouseholdMember.objects.all().filter(screen=self.screen)
for member in all_household_members:
- if member.relationship in ('spouse', 'domesticPartner'):
+ if member.relationship in ("spouse", "domesticPartner"):
return {"is_married": True, "married_to": member}
return {"is_married": False}
@@ -403,7 +406,7 @@ def has_disability(self):
return self.disabled or self.visually_impaired or self.long_term_disability
def is_head(self):
- return self.relationship == 'headOfHousehold'
+ return self.relationship == "headOfHousehold"
def is_spouse(self):
return self.screen.relationship_map()[self.screen.get_head().id] == self.id
@@ -412,15 +415,8 @@ def is_dependent(self):
is_tax_unit_spouse = self.is_spouse()
is_tax_unit_head = self.is_head()
is_tax_unit_dependent = (
- (
- self.age <= 18
- or (self.student and self.age <= 23)
- or self.has_disability()
- )
- and (
- self.calc_gross_income('yearly', ['all'])
- <= self.screen.calc_gross_income('yearly', ['all']) / 2
- )
+ (self.age <= 18 or (self.student and self.age <= 23) or self.has_disability())
+ and (self.calc_gross_income("yearly", ["all"]) <= self.screen.calc_gross_income("yearly", ["all"]) / 2)
and (not (is_tax_unit_head or is_tax_unit_spouse))
)
@@ -431,14 +427,14 @@ def is_in_tax_unit(self):
def missing_fields(self):
member_fields = (
- 'relationship',
- 'age',
- 'student',
- 'pregnant',
- 'visually_impaired',
- 'disabled',
- 'long_term_disability',
- 'insurance'
+ "relationship",
+ "age",
+ "student",
+ "pregnant",
+ "visually_impaired",
+ "disabled",
+ "long_term_disability",
+ "insurance",
)
missing_fields = Dependencies()
@@ -455,8 +451,8 @@ def missing_fields(self):
# HouseholdMember income streams
class IncomeStream(models.Model):
- screen = models.ForeignKey(Screen, related_name='income_streams', on_delete=models.CASCADE)
- household_member = models.ForeignKey(HouseholdMember, related_name='income_streams', on_delete=models.CASCADE)
+ screen = models.ForeignKey(Screen, related_name="income_streams", on_delete=models.CASCADE)
+ household_member = models.ForeignKey(HouseholdMember, related_name="income_streams", on_delete=models.CASCADE)
type = models.CharField(max_length=30, blank=True, null=True)
amount = models.DecimalField(decimal_places=2, max_digits=10, blank=True, null=True)
frequency = models.CharField(max_length=30, blank=True, null=True)
@@ -498,20 +494,24 @@ def _hour_to_month(self):
return self.amount * self.hours_worked * Decimal(4.35)
def missing_fields(self):
- income_fields = ('type', 'amount', 'frequency',)
+ income_fields = (
+ "type",
+ "amount",
+ "frequency",
+ )
missing_fields = Dependencies()
for field in income_fields:
if getattr(self, field) is None:
- missing_fields.add('income_' + field)
+ missing_fields.add("income_" + field)
return missing_fields
# HouseholdMember expenses
class Expense(models.Model):
- screen = models.ForeignKey(Screen, related_name='expenses', on_delete=models.CASCADE)
- household_member = models.ForeignKey(HouseholdMember, related_name='expenses', on_delete=models.SET_NULL, null=True)
+ screen = models.ForeignKey(Screen, related_name="expenses", on_delete=models.CASCADE)
+ household_member = models.ForeignKey(HouseholdMember, related_name="expenses", on_delete=models.SET_NULL, null=True)
type = models.CharField(max_length=30, blank=True, null=True)
amount = models.DecimalField(decimal_places=2, max_digits=10, blank=True, null=True)
frequency = models.CharField(max_length=30, blank=True, null=True)
@@ -544,23 +544,20 @@ def yearly(self):
return yearly
def missing_fields(self):
- expense_fields = ('type', 'amount')
+ expense_fields = ("type", "amount")
missing_fields = Dependencies()
for field in expense_fields:
if getattr(self, field) is None:
- missing_fields.add('expense_' + field)
+ missing_fields.add("expense_" + field)
return missing_fields
class Insurance(models.Model):
household_member = models.OneToOneField(
- HouseholdMember,
- related_name='insurance',
- null=False,
- on_delete=models.CASCADE
+ HouseholdMember, related_name="insurance", null=False, on_delete=models.CASCADE
)
dont_know = models.BooleanField(default=False)
none = models.BooleanField(default=True)
@@ -574,14 +571,14 @@ class Insurance(models.Model):
va = models.BooleanField(default=False)
def has_insurance_types(self, types, strict=True):
- if 'none' in types:
- types = (*types, 'dont_know')
+ if "none" in types:
+ types = (*types, "dont_know")
insurance = self.insurance_map()
for hi_type in types:
if hi_type not in insurance:
if strict:
- raise KeyError(f'{hi_type} not in insurance types')
+ raise KeyError(f"{hi_type} not in insurance types")
continue
if insurance[hi_type]:
@@ -591,18 +588,18 @@ def has_insurance_types(self, types, strict=True):
def insurance_map(self):
return {
- 'dont_know': self.dont_know,
- 'none': self.none,
- 'employer': self.employer,
- 'private': self.private,
- 'chp': self.chp,
- 'medicaid': self.medicaid,
- 'nc_medicaid': self.medicaid,
- 'co_medicaid': self.medicaid,
- 'medicare': self.medicare,
- 'emergency_medicaid': self.emergency_medicaid,
- 'family_planning': self.family_planning,
- 'va': self.va,
+ "dont_know": self.dont_know,
+ "none": self.none,
+ "employer": self.employer,
+ "private": self.private,
+ "chp": self.chp,
+ "medicaid": self.medicaid,
+ "nc_medicaid": self.medicaid,
+ "co_medicaid": self.medicaid,
+ "medicare": self.medicare,
+ "emergency_medicaid": self.emergency_medicaid,
+ "family_planning": self.family_planning,
+ "va": self.va,
}
@@ -610,7 +607,7 @@ def insurance_map(self):
# for a completed screen. This table is currently used primarily for analytics
# but will eventually drive new benefit update notifications
class EligibilitySnapshot(models.Model):
- screen = models.ForeignKey(Screen, related_name='eligibility_snapshots', on_delete=models.CASCADE)
+ screen = models.ForeignKey(Screen, related_name="eligibility_snapshots", on_delete=models.CASCADE)
submission_date = models.DateTimeField(auto_now=True)
is_batch = models.BooleanField(default=False)
@@ -618,7 +615,9 @@ class EligibilitySnapshot(models.Model):
# Eligibility results for each specific program per screen. These are
# aggregated per screen using the EligibilitySnapshot id
class ProgramEligibilitySnapshot(models.Model):
- eligibility_snapshot = models.ForeignKey(EligibilitySnapshot, related_name='program_snapshots', on_delete=models.CASCADE)
+ eligibility_snapshot = models.ForeignKey(
+ EligibilitySnapshot, related_name="program_snapshots", on_delete=models.CASCADE
+ )
new = models.BooleanField(default=False)
name = models.CharField(max_length=320)
name_abbreviated = models.CharField(max_length=32)
diff --git a/screener/one_time_scripts.py b/screener/one_time_scripts.py
index 8ad8f55d..8cbbcf61 100644
--- a/screener/one_time_scripts.py
+++ b/screener/one_time_scripts.py
@@ -11,18 +11,119 @@
def generate_bwf_snapshots():
- bwf_ids = ['123', '121001', '119201', '119151', '118901', '119001', '118751', '118301', '118001', '117651',
- '117501', '117451', '116601', '116551', '116351', '116151', '115851', '115801', '114751', '114501',
- '114401', '114201', '114001', '113901', '113651', '113501', '113451', '111301', '108751', '108151',
- '107101', '106551', '106201', '101901', '101701', '100451', '100201', '95051', '93801', '82751',
- '82701', '77151', '71851', '71051', '70851', '70751', '70701', '70351', '70301', '70201', '68651',
- '67401', '67001', '66651', '66601', '66301', '65851', '65101', '65001', '64951', '64801', '64751',
- '62951', '59051', '59001', '58801', '58201', '57851', '57651', '57601', '56801', '56351', '56101',
- '55901', '55801', '55501', '55451', '55051', '54951', '54801', '54751', '54551', '76501', '54151',
- '53351', '53051', '52701', '52351', '52301', '52151', '51601', '51151', '51001', '49901', '49851',
- '49551', '49251', '48901', '48701', '48551', '48501', '48401', '47751', '46951', '46751', '46151',
- '46001', '41201', '40701', '40101']
- screens = Screen.objects.filter(external_id__in=bwf_ids).order_by('-submission_date')
+ bwf_ids = [
+ "123",
+ "121001",
+ "119201",
+ "119151",
+ "118901",
+ "119001",
+ "118751",
+ "118301",
+ "118001",
+ "117651",
+ "117501",
+ "117451",
+ "116601",
+ "116551",
+ "116351",
+ "116151",
+ "115851",
+ "115801",
+ "114751",
+ "114501",
+ "114401",
+ "114201",
+ "114001",
+ "113901",
+ "113651",
+ "113501",
+ "113451",
+ "111301",
+ "108751",
+ "108151",
+ "107101",
+ "106551",
+ "106201",
+ "101901",
+ "101701",
+ "100451",
+ "100201",
+ "95051",
+ "93801",
+ "82751",
+ "82701",
+ "77151",
+ "71851",
+ "71051",
+ "70851",
+ "70751",
+ "70701",
+ "70351",
+ "70301",
+ "70201",
+ "68651",
+ "67401",
+ "67001",
+ "66651",
+ "66601",
+ "66301",
+ "65851",
+ "65101",
+ "65001",
+ "64951",
+ "64801",
+ "64751",
+ "62951",
+ "59051",
+ "59001",
+ "58801",
+ "58201",
+ "57851",
+ "57651",
+ "57601",
+ "56801",
+ "56351",
+ "56101",
+ "55901",
+ "55801",
+ "55501",
+ "55451",
+ "55051",
+ "54951",
+ "54801",
+ "54751",
+ "54551",
+ "76501",
+ "54151",
+ "53351",
+ "53051",
+ "52701",
+ "52351",
+ "52301",
+ "52151",
+ "51601",
+ "51151",
+ "51001",
+ "49901",
+ "49851",
+ "49551",
+ "49251",
+ "48901",
+ "48701",
+ "48551",
+ "48501",
+ "48401",
+ "47751",
+ "46951",
+ "46751",
+ "46151",
+ "46001",
+ "41201",
+ "40701",
+ "40101",
+ ]
+ screens = Screen.objects.filter(external_id__in=bwf_ids).order_by("-submission_date")
total_screens = screens.count()
print("Total BWF Screens found: " + str(total_screens))
@@ -42,13 +143,58 @@ def generate_bwf_snapshots():
eligibility_snapshot.save()
eligibility_snapshot.generate_program_snapshots()
count += 1
- print("Snapshot " + str(count) + "/" + str(total_screens_without_snapshots) + " generated for " + str(screen.external_id))
+ print(
+ "Snapshot "
+ + str(count)
+ + "/"
+ + str(total_screens_without_snapshots)
+ + " generated for "
+ + str(screen.external_id)
+ )
def generate_nav_snapshots():
- nav_ids = ['3171', '3183', '3200', '3230', '3233', '3243', '3245', '3248', '3260', '3373', '3374', '3375', '3376',
- '3377', '3300', '3301', '3310', '3312', '3313', '3316', '3343', '3363', '3364', '3365', '3368', '3397',
- '3398', '3399', '2686', '2693', '2690', '2688', '2694', '2707', '2715', '2710', '2711', '2709', '2713']
+ nav_ids = [
+ "3171",
+ "3183",
+ "3200",
+ "3230",
+ "3233",
+ "3243",
+ "3245",
+ "3248",
+ "3260",
+ "3373",
+ "3374",
+ "3375",
+ "3376",
+ "3377",
+ "3300",
+ "3301",
+ "3310",
+ "3312",
+ "3313",
+ "3316",
+ "3343",
+ "3363",
+ "3364",
+ "3365",
+ "3368",
+ "3397",
+ "3398",
+ "3399",
+ "2686",
+ "2693",
+ "2690",
+ "2688",
+ "2694",
+ "2707",
+ "2715",
+ "2710",
+ "2711",
+ "2709",
+ "2713",
+ ]
screens = Screen.objects.filter(id__in=nav_ids)
total_screens = screens.count()
@@ -62,7 +208,7 @@ def generate_nav_snapshots():
def generate_bia_sample_snapshot():
- nav_ids = ['4097', '4147', '4148', '4149']
+ nav_ids = ["4097", "4147", "4148", "4149"]
screens = Screen.objects.filter(id__in=nav_ids)
total_screens = screens.count()
@@ -76,40 +222,36 @@ def generate_bia_sample_snapshot():
def add_from_json(new_json_str):
- '''
+ """
Add json string from screen endpoint as parameter. Use triple quotes if in shell
- '''
+ """
new_json = json.loads(new_json_str)
screen = Screen.objects.create(
- **{k: v for k, v in new_json.items() if k not in ('household_members', 'id', 'uuid', 'user', 'expenses')},
- )
+ **{k: v for k, v in new_json.items() if k not in ("household_members", "id", "uuid", "user", "expenses")},
+ )
members = []
incomes = []
expenses = []
- for member in new_json['household_members']:
- household_member = {k: v for k, v in member.items() if k not in ('income_streams', 'expenses', 'screen', 'id')}
+ for member in new_json["household_members"]:
+ household_member = {k: v for k, v in member.items() if k not in ("income_streams", "expenses", "screen", "id")}
member_model = HouseholdMember(**household_member, screen=screen)
members.append(member_model)
- for income in member['income_streams']:
- income = {k: v for k, v in income.items() if k not in ('household_member', 'screen', 'id')}
- incomes.append(IncomeStream(**income,
- screen=screen,
- household_member=member_model))
- for expense in new_json['expenses']:
- expense = {k: v for k, v in expense.items() if k not in ('household_member', 'screen', 'id')}
- expenses.append(Expense(**expense,
- screen=screen,
- household_member=member_model))
+ for income in member["income_streams"]:
+ income = {k: v for k, v in income.items() if k not in ("household_member", "screen", "id")}
+ incomes.append(IncomeStream(**income, screen=screen, household_member=member_model))
+ for expense in new_json["expenses"]:
+ expense = {k: v for k, v in expense.items() if k not in ("household_member", "screen", "id")}
+ expenses.append(Expense(**expense, screen=screen, household_member=member_model))
HouseholdMember.objects.bulk_create(members)
IncomeStream.objects.bulk_create(incomes)
Expense.objects.bulk_create(expenses)
- print('id:', screen.id)
- print('uuid:', screen.uuid)
+ print("id:", screen.id)
+ print("uuid:", screen.uuid)
def uniqueUUIDs():
@@ -118,12 +260,12 @@ def uniqueUUIDs():
currentUUIDs = []
for screen in screens:
if screen.uuid in currentUUIDs:
- print(screen.uuid, 'was replaced')
+ print(screen.uuid, "was replaced")
screen.uuid = uuid.uuid4()
screen.save()
currentUUIDs.append(screen.uuid)
- print('done')
+ print("done")
def update_is_test_data():
@@ -132,7 +274,7 @@ def update_is_test_data():
for screen in screens:
screen.set_screen_is_test()
- print('done')
+ print("done")
def fix_insurance():
@@ -148,4 +290,4 @@ def fix_insurance():
member.insurance = Insurance.objects.create(household_member=member)
member.save()
- print('done')
+ print("done")
diff --git a/screener/serializers.py b/screener/serializers.py
index d8f4bc37..8b37cefc 100644
--- a/screener/serializers.py
+++ b/screener/serializers.py
@@ -9,7 +9,7 @@ class MessageSerializer(serializers.ModelSerializer):
class Meta:
model = Message
- fields = '__all__'
+ fields = "__all__"
class InsuranceSerializer(serializers.ModelSerializer):
@@ -17,8 +17,8 @@ class InsuranceSerializer(serializers.ModelSerializer):
class Meta:
model = Insurance
- fields = '__all__'
- read_only_fields = ('household_member',)
+ fields = "__all__"
+ read_only_fields = ("household_member",)
class IncomeStreamSerializer(serializers.ModelSerializer):
@@ -26,8 +26,8 @@ class IncomeStreamSerializer(serializers.ModelSerializer):
class Meta:
model = IncomeStream
- fields = '__all__'
- read_only_fields = ('screen', 'household_member', 'id')
+ fields = "__all__"
+ read_only_fields = ("screen", "household_member", "id")
class ExpenseSerializer(serializers.ModelSerializer):
@@ -35,8 +35,8 @@ class ExpenseSerializer(serializers.ModelSerializer):
class Meta:
model = Expense
- fields = '__all__'
- read_only_fields = ('screen', 'household_member', 'id')
+ fields = "__all__"
+ read_only_fields = ("screen", "household_member", "id")
class HouseholdMemberSerializer(serializers.ModelSerializer):
@@ -46,26 +46,26 @@ class HouseholdMemberSerializer(serializers.ModelSerializer):
class Meta:
model = HouseholdMember
fields = (
- 'id',
- 'screen',
- 'relationship',
- 'age',
- 'student',
- 'student_full_time',
- 'pregnant',
- 'unemployed',
- 'worked_in_last_18_mos',
- 'visually_impaired',
- 'disabled',
- 'long_term_disability',
- 'veteran',
- 'medicaid',
- 'disability_medicaid',
- 'has_income',
- 'income_streams',
- 'insurance',
+ "id",
+ "screen",
+ "relationship",
+ "age",
+ "student",
+ "student_full_time",
+ "pregnant",
+ "unemployed",
+ "worked_in_last_18_mos",
+ "visually_impaired",
+ "disabled",
+ "long_term_disability",
+ "veteran",
+ "medicaid",
+ "disability_medicaid",
+ "has_income",
+ "income_streams",
+ "insurance",
)
- read_only_fields = ('screen', 'id')
+ read_only_fields = ("screen", "id")
class ScreenSerializer(serializers.ModelSerializer):
@@ -76,98 +76,98 @@ class ScreenSerializer(serializers.ModelSerializer):
class Meta:
model = Screen
fields = (
- 'id',
- 'uuid',
- 'completed',
- 'is_test',
- 'is_test_data',
- 'start_date',
- 'submission_date',
- 'agree_to_tos',
- 'is_13_or_older',
- 'zipcode',
- 'county',
- 'referral_source',
- 'referrer_code',
- 'household_size',
- 'household_assets',
- 'housing_situation',
- 'household_members',
- 'last_email_request_date',
- 'last_tax_filing_year',
- 'expenses',
- 'user',
- 'external_id',
- 'request_language_code',
- 'has_benefits',
- 'has_tanf',
- 'has_wic',
- 'has_snap',
- 'has_lifeline',
- 'has_acp',
- 'has_eitc',
- 'has_coeitc',
- 'has_nslp',
- 'has_ctc',
- 'has_medicaid',
- 'has_rtdlive',
- 'has_cccap',
- 'has_mydenver',
- 'has_chp',
- 'has_ccb',
- 'has_ssi',
- 'has_andcs',
- 'has_chs',
- 'has_cpcr',
- 'has_cdhcs',
- 'has_dpp',
- 'has_ede',
- 'has_erc',
- 'has_leap',
- 'has_oap',
- 'has_coctc',
- 'has_upk',
- 'has_ssdi',
- 'has_cowap',
- 'has_ubp',
- 'has_pell_grant',
- 'has_rag',
- 'has_employer_hi',
- 'has_private_hi',
- 'has_medicaid_hi',
- 'has_medicare_hi',
- 'has_chp_hi',
- 'has_no_hi',
- 'has_va',
- 'needs_food',
- 'needs_baby_supplies',
- 'needs_housing_help',
- 'needs_mental_health_help',
- 'needs_child_dev_help',
- 'needs_funeral_help',
- 'needs_family_planning_help',
- 'needs_job_resources',
- 'needs_dental_care',
- 'needs_legal_services'
+ "id",
+ "uuid",
+ "completed",
+ "is_test",
+ "is_test_data",
+ "start_date",
+ "submission_date",
+ "agree_to_tos",
+ "is_13_or_older",
+ "zipcode",
+ "county",
+ "referral_source",
+ "referrer_code",
+ "household_size",
+ "household_assets",
+ "housing_situation",
+ "household_members",
+ "last_email_request_date",
+ "last_tax_filing_year",
+ "expenses",
+ "user",
+ "external_id",
+ "request_language_code",
+ "has_benefits",
+ "has_tanf",
+ "has_wic",
+ "has_snap",
+ "has_lifeline",
+ "has_acp",
+ "has_eitc",
+ "has_coeitc",
+ "has_nslp",
+ "has_ctc",
+ "has_medicaid",
+ "has_rtdlive",
+ "has_cccap",
+ "has_mydenver",
+ "has_chp",
+ "has_ccb",
+ "has_ssi",
+ "has_andcs",
+ "has_chs",
+ "has_cpcr",
+ "has_cdhcs",
+ "has_dpp",
+ "has_ede",
+ "has_erc",
+ "has_leap",
+ "has_oap",
+ "has_coctc",
+ "has_upk",
+ "has_ssdi",
+ "has_cowap",
+ "has_ubp",
+ "has_pell_grant",
+ "has_rag",
+ "has_employer_hi",
+ "has_private_hi",
+ "has_medicaid_hi",
+ "has_medicare_hi",
+ "has_chp_hi",
+ "has_no_hi",
+ "has_va",
+ "needs_food",
+ "needs_baby_supplies",
+ "needs_housing_help",
+ "needs_mental_health_help",
+ "needs_child_dev_help",
+ "needs_funeral_help",
+ "needs_family_planning_help",
+ "needs_job_resources",
+ "needs_dental_care",
+ "needs_legal_services",
)
read_only_fields = (
- 'id',
- 'uuid',
- 'submision_date',
- 'last_email_request_date',
- 'completed',
- 'user',
- 'is_test_data'
+ "id",
+ "uuid",
+ "submision_date",
+ "last_email_request_date",
+ "completed",
+ "user",
+ "is_test_data",
)
def create(self, validated_data):
- household_members = validated_data.pop('household_members')
- expenses = validated_data.pop('expenses')
+ household_members = validated_data.pop("household_members")
+ expenses = validated_data.pop("expenses")
screen = Screen.objects.create(**validated_data, completed=False)
screen.set_screen_is_test()
for member in household_members:
- incomes = member.pop('income_streams')
- insurance = member.pop('insurance')
+ incomes = member.pop("income_streams")
+ insurance = member.pop("insurance")
household_member = HouseholdMember.objects.create(**member, screen=screen)
for income in incomes:
IncomeStream.objects.create(**income, screen=screen, household_member=household_member)
@@ -177,14 +177,14 @@ def create(self, validated_data):
return screen
def update(self, instance, validated_data):
- household_members = validated_data.pop('household_members')
- expenses = validated_data.pop('expenses')
+ household_members = validated_data.pop("household_members")
+ expenses = validated_data.pop("expenses")
Screen.objects.filter(pk=instance.id).update(**validated_data)
HouseholdMember.objects.filter(screen=instance).delete()
Expense.objects.filter(screen=instance).delete()
for member in household_members:
- incomes = member.pop('income_streams')
- insurance = member.pop('insurance')
+ incomes = member.pop("income_streams")
+ insurance = member.pop("insurance")
household_member = HouseholdMember.objects.create(**member, screen=instance)
for income in incomes:
IncomeStream.objects.create(**income, screen=instance, household_member=household_member)
@@ -234,14 +234,14 @@ class EligibilitySerializer(serializers.Serializer):
estimated_value_override = TranslationSerializer()
class Meta:
- fields = '__all__'
+ fields = "__all__"
class EligibilityTranslationSerializer(serializers.Serializer):
translations = serializers.DictField()
class Meta:
- fields = ('translations',)
+ fields = ("translations",)
class UrgentNeedSerializer(serializers.Serializer):
diff --git a/screener/tests.py b/screener/tests.py
index 013defb8..17958a59 100644
--- a/screener/tests.py
+++ b/screener/tests.py
@@ -8,7 +8,7 @@ def test_create_single_parent_two_children_household(self):
self.assertTrue(isinstance(screen, Screen))
-def create_default_household_member(screen, relationship='headOfHousehold', age=25):
+def create_default_household_member(screen, relationship="headOfHousehold", age=25):
default = screen.household_members.create(
relationship=relationship,
age=age,
@@ -23,7 +23,7 @@ def create_default_household_member(screen, relationship='headOfHousehold', age=
medicaid=False,
disability_medicaid=False,
has_income=True,
- has_expenses=True
+ has_expenses=True,
)
return default
@@ -34,16 +34,16 @@ def create_default_household_member(screen, relationship='headOfHousehold', age=
# 1900 in monthly expenses between childcare and rent
# no assets
def create_single_parent_two_children_household(annual_income):
- screen = Screen.objects.create(household_assets=0, household_size=3,
- zipcode='80204', agree_to_tos=True,
- housing_situation='renting')
+ screen = Screen.objects.create(
+ household_assets=0, household_size=3, zipcode="80204", agree_to_tos=True, housing_situation="renting"
+ )
parent = create_default_household_member(screen)
- parent.expenses.create(type='rent', amount='1200', frequency='monthly', screen=screen)
- parent.expenses.create(type='childCare', amount='700', frequency='monthly', screen=screen)
- parent.income_streams.create(type='wages', amount=annual_income, frequency='yearly', screen=screen)
+ parent.expenses.create(type="rent", amount="1200", frequency="monthly", screen=screen)
+ parent.expenses.create(type="childCare", amount="700", frequency="monthly", screen=screen)
+ parent.income_streams.create(type="wages", amount=annual_income, frequency="yearly", screen=screen)
- create_default_household_member(screen, relationship='child', age=4)
- create_default_household_member(screen, relationship='child', age=6)
+ create_default_household_member(screen, relationship="child", age=4)
+ create_default_household_member(screen, relationship="child", age=6)
return screen
diff --git a/screener/urls.py b/screener/urls.py
index a91e6c6c..04edf7c5 100644
--- a/screener/urls.py
+++ b/screener/urls.py
@@ -3,13 +3,12 @@
from . import views
router = routers.DefaultRouter()
-router.register(r'screens', views.ScreenViewSet)
-router.register(r'messages', views.MessageViewSet)
+router.register(r"screens", views.ScreenViewSet)
+router.register(r"messages", views.MessageViewSet)
urlpatterns = [
- path('', views.index, name='index'),
- path('', include(router.urls)),
- path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
- path('eligibility/', views.EligibilityTranslationView.as_view(),
- name='translated screen eligibility endpoint')
+ path("", views.index, name="index"),
+ path("", include(router.urls)),
+ path("api-auth/", include("rest_framework.urls", namespace="rest_framework")),
+ path("eligibility/", views.EligibilityTranslationView.as_view(), name="translated screen eligibility endpoint"),
]
diff --git a/screener/views.py b/screener/views.py
index 894f73cf..5c41d4e4 100644
--- a/screener/views.py
+++ b/screener/views.py
@@ -51,12 +51,12 @@ class ScreenViewSet(
API endpoint that allows screens to be viewed or edited.
"""
- queryset = Screen.objects.all().order_by('-submission_date')
+ queryset = Screen.objects.all().order_by("-submission_date")
serializer_class = ScreenSerializer
permission_classes = [permissions.DjangoModelPermissions]
- filterset_fields = ['agree_to_tos', 'is_test']
+ filterset_fields = ["agree_to_tos", "is_test"]
paginate_by = 10
- paginate_by_param = 'page_size'
+ paginate_by_param = "page_size"
max_paginate_by = 100
def retrieve(self, request, pk=None):
@@ -83,7 +83,7 @@ class HouseholdMemberViewSet(viewsets.ModelViewSet):
queryset = HouseholdMember.objects.all()
serializer_class = HouseholdMemberSerializer
permission_classes = [permissions.DjangoModelPermissions]
- filterset_fields = ['has_income']
+ filterset_fields = ["has_income"]
class IncomeStreamViewSet(viewsets.ModelViewSet):
@@ -94,7 +94,7 @@ class IncomeStreamViewSet(viewsets.ModelViewSet):
queryset = IncomeStream.objects.all()
serializer_class = IncomeStreamSerializer
permission_classes = [permissions.DjangoModelPermissions]
- filterset_fields = ['screen']
+ filterset_fields = ["screen"]
class ExpenseViewSet(viewsets.ModelViewSet):
@@ -105,11 +105,10 @@ class ExpenseViewSet(viewsets.ModelViewSet):
queryset = Expense.objects.all()
serializer_class = ExpenseSerializer
permission_classes = [permissions.DjangoModelPermissions]
- filterset_fields = ['screen']
+ filterset_fields = ["screen"]
class EligibilityView(views.APIView):
-
def get(self, request, id):
data = eligibility_results(id)
results = EligibilitySerializer(data, many=True).data
@@ -117,7 +116,6 @@ def get(self, request, id):
class EligibilityTranslationView(views.APIView):
-
@swagger_auto_schema(responses={200: ResultsSerializer()})
def get(self, request, id):
screen = Screen.objects.get(uuid=id)
@@ -147,19 +145,19 @@ class MessageViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
API endpoint that logs messages sent.
"""
- queryset = Message.objects.all().order_by('-sent')
+ queryset = Message.objects.all().order_by("-sent")
serializer_class = MessageSerializer
permission_classes = [permissions.DjangoModelPermissions]
def create(self, request):
body = json.loads(request.body.decode())
- screen = Screen.objects.get(uuid=body['screen'])
+ screen = Screen.objects.get(uuid=body["screen"])
message = MessageUser(screen, screen.get_language_code())
- if 'email' in body:
- message.email(body['email'], send_tests=True)
- if 'phone' in body:
- message.text('+1' + body['phone'], send_tests=True)
+ if "email" in body:
+ message.email(body["email"], send_tests=True)
+ if "phone" in body:
+ message.text("+1" + body["phone"], send_tests=True)
return Response({}, status=status.HTTP_201_CREATED)
@@ -172,22 +170,18 @@ def eligibility_results(screen, batch=False):
excluded_programs = []
if referrer is not None:
- excluded_programs = referrer.remove_programs.values('id')
+ excluded_programs = referrer.remove_programs.values("id")
- all_programs = Program.objects.filter(active=True).exclude(id__in=excluded_programs).prefetch_related(
- 'legal_status_required', 'documents'
+ all_programs = (
+ Program.objects.filter(active=True)
+ .exclude(id__in=excluded_programs)
+ .prefetch_related("legal_status_required", "documents")
)
data = []
try:
- previous_snapshot = EligibilitySnapshot.objects.filter(
- is_batch=False, screen=screen
- ).latest('submission_date')
- previous_results = (
- None
- if previous_snapshot is None
- else previous_snapshot.program_snapshots.all()
- )
+ previous_snapshot = EligibilitySnapshot.objects.filter(is_batch=False, screen=screen).latest("submission_date")
+ previous_results = None if previous_snapshot is None else previous_snapshot.program_snapshots.all()
except ObjectDoesNotExist:
previous_snapshot = None
snapshot = EligibilitySnapshot.objects.create(screen=screen, is_batch=batch)
@@ -205,7 +199,7 @@ def eligibility_results(screen, batch=False):
pe_programs = pe_calculators.keys()
def sort_first(program):
- calc_first = ('tanf', 'ssi', 'medicaid', 'nslp', 'leap')
+ calc_first = ("tanf", "ssi", "medicaid", "nslp", "leap")
if program.name_abbreviated in calc_first:
return 0
@@ -232,23 +226,21 @@ def sort_first(program):
eligibility = pe_eligibility[program.name_abbreviated]
- all_navigators = program.navigator.all().prefetch_related('counties')
+ all_navigators = program.navigator.all().prefetch_related("counties")
county_navigators = []
for nav in all_navigators:
counties = nav.counties.all()
- if len(counties) == 0 or (screen.county is not None and any(
- screen.county in county.name for county in counties
- )):
+ if len(counties) == 0 or (
+ screen.county is not None and any(screen.county in county.name for county in counties)
+ ):
county_navigators.append(nav)
if referrer is None:
navigators = county_navigators
else:
primary_navigators = referrer.primary_navigators.all()
- referrer_navigators = [
- nav for nav in primary_navigators if nav in county_navigators
- ]
+ referrer_navigators = [nav for nav in primary_navigators if nav in county_navigators]
if len(referrer_navigators) == 0:
navigators = county_navigators
else:
@@ -259,16 +251,14 @@ def sort_first(program):
for previous_snapshot in previous_results:
if (
previous_snapshot.name_abbreviated == program.name_abbreviated
- and eligibility['eligible'] == previous_snapshot.eligible
+ and eligibility["eligible"] == previous_snapshot.eligible
):
new = False
else:
new = False
if not skip and program.active:
- legal_status = [
- status.status for status in program.legal_status_required.all()
- ]
+ legal_status = [status.status for status in program.legal_status_required.all()]
ProgramEligibilitySnapshot.objects.create(
eligibility_snapshot=snapshot,
name=program.name.text,
@@ -288,12 +278,8 @@ def sort_first(program):
"name": default_message(program.name),
"name_abbreviated": program.name_abbreviated,
"estimated_value": eligibility["estimated_value"],
- "estimated_delivery_time": default_message(
- program.estimated_delivery_time
- ),
- "estimated_application_time": default_message(
- program.estimated_application_time
- ),
+ "estimated_delivery_time": default_message(program.estimated_delivery_time),
+ "estimated_application_time": default_message(program.estimated_application_time),
"description_short": default_message(program.description_short),
"short_name": program.name_abbreviated,
"description": default_message(program.description),
@@ -307,23 +293,19 @@ def sort_first(program):
"eligible": eligibility["eligible"],
"failed_tests": eligibility["failed"],
"passed_tests": eligibility["passed"],
- "navigators": [
- serialized_navigator(navigator) for navigator in navigators
- ],
+ "navigators": [serialized_navigator(navigator) for navigator in navigators],
"already_has": screen.has_benefit(program.name_abbreviated),
"new": new,
"low_confidence": program.low_confidence,
- "documents": [
- default_message(d.text) for d in program.documents.all()
- ],
- "multiple_tax_units": eligibility["multiple_tax_units"]
+ "documents": [default_message(d.text) for d in program.documents.all()],
+ "multiple_tax_units": eligibility["multiple_tax_units"],
}
)
eligible_programs = []
for program in data:
clean_program = program
- clean_program['estimated_value'] = math.trunc(clean_program['estimated_value'])
+ clean_program["estimated_value"] = math.trunc(clean_program["estimated_value"])
eligible_programs.append(clean_program)
return eligible_programs, missing_programs
@@ -331,7 +313,7 @@ def sort_first(program):
def default_message(translation):
translation.set_current_language(settings.LANGUAGE_CODE)
- return {'default_message': translation.text, 'label': translation.label}
+ return {"default_message": translation.text, "label": translation.label}
def serialized_navigator(navigator):
@@ -348,47 +330,35 @@ def serialized_navigator(navigator):
def urgent_need_results(screen):
possible_needs = {
- 'food': screen.needs_food,
- 'baby supplies': screen.needs_baby_supplies,
- 'housing': screen.needs_housing_help,
- 'mental health': screen.needs_mental_health_help,
- 'child dev': screen.needs_child_dev_help,
- 'funeral': screen.needs_funeral_help,
- 'family planning': screen.needs_family_planning_help,
- 'job resources': screen.needs_job_resources,
- 'dental care': screen.needs_dental_care,
- 'legal services': screen.needs_legal_services,
+ "food": screen.needs_food,
+ "baby supplies": screen.needs_baby_supplies,
+ "housing": screen.needs_housing_help,
+ "mental health": screen.needs_mental_health_help,
+ "child dev": screen.needs_child_dev_help,
+ "funeral": screen.needs_funeral_help,
+ "family planning": screen.needs_family_planning_help,
+ "job resources": screen.needs_job_resources,
+ "dental care": screen.needs_dental_care,
+ "legal services": screen.needs_legal_services,
}
missing_dependencies = screen.missing_fields()
need_functions = {
- 'denver': urgent_need_functions.LivesInDenver.calc(
- screen, missing_dependencies
- ),
- 'meal': urgent_need_functions.MealInCounties.calc(
- screen, missing_dependencies
- ),
- 'helpkitchen_zipcode': urgent_need_functions.HelpkitchenZipcode.calc(
- screen, missing_dependencies
- ),
- 'child': urgent_need_functions.Child.calc(screen, missing_dependencies),
- 'bia_food_delivery': urgent_need_functions.BiaFoodDelivery.calc(
- screen, missing_dependencies
- ),
- 'trua': urgent_need_functions.Trua.calc(screen, missing_dependencies),
- 'ffap': urgent_need_functions.ForeclosureFinAssistProgram.calc(screen, missing_dependencies),
- 'eoc': urgent_need_functions.Eoc.calc(screen, missing_dependencies),
- 'co_legal_services': urgent_need_functions.CoLegalServices.calc(
- screen, missing_dependencies
- ),
- 'co_emergency_mortgage': urgent_need_functions.CoEmergencyMortgageAssistance.calc(
- screen, missing_dependencies
- ),
- 'child_first': urgent_need_functions.ChildFirst.calc(screen, missing_dependencies),
- 'ecmh': urgent_need_functions.EarlyChildhoodMentalHealthSupport.calc(screen, missing_dependencies),
- 'hippy': urgent_need_functions.ParentsOfPreschoolYoungsters.calc(screen, missing_dependencies),
- 'pat': urgent_need_functions.ParentsAsTeacher.calc(screen, missing_dependencies),
+ "denver": urgent_need_functions.LivesInDenver.calc(screen, missing_dependencies),
+ "meal": urgent_need_functions.MealInCounties.calc(screen, missing_dependencies),
+ "helpkitchen_zipcode": urgent_need_functions.HelpkitchenZipcode.calc(screen, missing_dependencies),
+ "child": urgent_need_functions.Child.calc(screen, missing_dependencies),
+ "bia_food_delivery": urgent_need_functions.BiaFoodDelivery.calc(screen, missing_dependencies),
+ "trua": urgent_need_functions.Trua.calc(screen, missing_dependencies),
+ "ffap": urgent_need_functions.ForeclosureFinAssistProgram.calc(screen, missing_dependencies),
+ "eoc": urgent_need_functions.Eoc.calc(screen, missing_dependencies),
+ "co_legal_services": urgent_need_functions.CoLegalServices.calc(screen, missing_dependencies),
+ "co_emergency_mortgage": urgent_need_functions.CoEmergencyMortgageAssistance.calc(screen, missing_dependencies),
+ "child_first": urgent_need_functions.ChildFirst.calc(screen, missing_dependencies),
+ "ecmh": urgent_need_functions.EarlyChildhoodMentalHealthSupport.calc(screen, missing_dependencies),
+ "hippy": urgent_need_functions.ParentsOfPreschoolYoungsters.calc(screen, missing_dependencies),
+ "pat": urgent_need_functions.ParentsAsTeacher.calc(screen, missing_dependencies),
}
list_of_needs = []
@@ -396,9 +366,7 @@ def urgent_need_results(screen):
if has_need:
list_of_needs.append(need)
- urgent_need_resources = UrgentNeed.objects.filter(
- type_short__name__in=list_of_needs, active=True
- ).distinct()
+ urgent_need_resources = UrgentNeed.objects.filter(type_short__name__in=list_of_needs, active=True).distinct()
eligible_urgent_needs = []
for need in urgent_need_resources:
diff --git a/screener/webhooks.py b/screener/webhooks.py
index 624c99e1..c8cf12dd 100644
--- a/screener/webhooks.py
+++ b/screener/webhooks.py
@@ -4,7 +4,7 @@
import requests
-class Hook():
+class Hook:
def __init__(self, hook: Referrer):
self.hook = hook
self.functions = [func.name for func in hook.webhook_functions.all()]
@@ -12,11 +12,11 @@ def __init__(self, hook: Referrer):
def send(self, screen: Screen, results: dict):
if screen.completed:
return
- request_data = {'external_id': screen.external_id}
- if 'send_screen' in self.functions:
+ request_data = {"external_id": screen.external_id}
+ if "send_screen" in self.functions:
key, value = self.screen_data(screen)
request_data[key] = value
- if 'send_results' in self.functions:
+ if "send_results" in self.functions:
key, value = self.send_eligibility(results)
request_data[key] = value
@@ -28,10 +28,10 @@ def send(self, screen: Screen, results: dict):
def screen_data(self, screen: Screen):
screen_dict = ScreenSerializer(screen).data
- return 'screen', screen_dict
+ return "screen", screen_dict
def send_eligibility(self, results: dict):
- return 'eligibility', results
+ return "eligibility", results
def eligibility_hooks():
diff --git a/translations/admin.py b/translations/admin.py
index 569aca08..d52e34ad 100644
--- a/translations/admin.py
+++ b/translations/admin.py
@@ -7,21 +7,20 @@
class TranslationAdmin(ModelAdmin, TranslatableAdmin):
- search_fields = ('label',)
- list_display = ['label', 'used_model', 'no_auto',
- 'edited', 'active', 'go_to']
+ search_fields = ("label",)
+ list_display = ["label", "used_model", "no_auto", "edited", "active", "go_to"]
def used_model(self, obj):
- model_name = obj.used_by['model_name']
+ model_name = obj.used_by["model_name"]
return model_name.capitalize()
- used_model.short_description = 'Used by (Model)'
+ used_model.short_description = "Used by (Model)"
def go_to(self, obj):
- url = reverse_lazy('translation_admin_url', args=[obj.pk])
+ url = reverse_lazy("translation_admin_url", args=[obj.pk])
return format_html('Label', url)
- go_to.short_description = 'Translate:'
+ go_to.short_description = "Translate:"
admin.site.register(Translation, TranslationAdmin)
diff --git a/translations/apps.py b/translations/apps.py
index cfd4a9e5..f21c6589 100644
--- a/translations/apps.py
+++ b/translations/apps.py
@@ -2,5 +2,5 @@
class TranslationsConfig(AppConfig):
- default_auto_field = 'django.db.models.BigAutoField'
- name = 'translations'
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "translations"
diff --git a/translations/bulk_import_translations.py b/translations/bulk_import_translations.py
index 0b6a6d78..8e818e74 100644
--- a/translations/bulk_import_translations.py
+++ b/translations/bulk_import_translations.py
@@ -9,8 +9,8 @@
@transaction.atomic
def bulk_add(translations):
- if config('ALLOW_TRANSLATION_IMPORT', 'False') != 'True':
- raise Exception('Translation import not allowed')
+ if config("ALLOW_TRANSLATION_IMPORT", "False") != "True":
+ raise Exception("Translation import not allowed")
protected_translation_ids = []
Translation.objects.select_for_update().all()
@@ -28,19 +28,16 @@ def bulk_add(translations):
Translation.objects.exclude(id__in=protected_translation_ids).delete()
translations_data = list(translations.items())
- for i in trange(len(translations_data), desc='Translations'):
+ for i in trange(len(translations_data), desc="Translations"):
label, details = translations_data[i]
translation = Translation.objects.add_translation(
- label,
- details['langs'][settings.LANGUAGE_CODE][0],
- active=details['active'],
- no_auto=details['no_auto']
+ label, details["langs"][settings.LANGUAGE_CODE][0], active=details["active"], no_auto=details["no_auto"]
)
- del details['langs'][settings.LANGUAGE_CODE]
+ del details["langs"][settings.LANGUAGE_CODE]
- if details['reference'] is not False:
- ref = details['reference']
- if ref[0] == 'programs_program':
+ if details["reference"] is not False:
+ ref = details["reference"]
+ if ref[0] == "programs_program":
try:
obj = Program.objects.get(external_name=ref[1])
except ObjectDoesNotExist:
@@ -48,14 +45,14 @@ def bulk_add(translations):
obj.external_name = ref[1]
obj.active = ref[3] if len(ref) == 4 else False
obj.save()
- elif ref[0] == 'programs_navigator':
+ elif ref[0] == "programs_navigator":
try:
obj = Navigator.objects.get(external_name=ref[1])
except ObjectDoesNotExist:
obj = Navigator.objects.new_navigator(ref[1], None)
obj.external_name = ref[1]
obj.save()
- elif ref[0] == 'programs_urgentneed':
+ elif ref[0] == "programs_urgentneed":
try:
obj = UrgentNeed.objects.get(external_name=ref[1])
except ObjectDoesNotExist:
@@ -63,7 +60,7 @@ def bulk_add(translations):
obj.external_name = ref[1]
obj.active = ref[3] if len(ref) == 4 else False
obj.save()
- elif ref[0] == 'programs_document':
+ elif ref[0] == "programs_document":
try:
obj = Document.objects.get(external_name=ref[1])
except ObjectDoesNotExist:
@@ -71,13 +68,8 @@ def bulk_add(translations):
getattr(translation, ref[2]).set([obj])
- for lang, message in details['langs'].items():
- Translation.objects.edit_translation_by_id(
- translation.id,
- lang,
- message[0],
- manual=message[1]
- )
+ for lang, message in details["langs"].items():
+ Translation.objects.edit_translation_by_id(translation.id, lang, message[0], manual=message[1])
def translation_ids(model):
diff --git a/translations/management/commands/bulk_export.py b/translations/management/commands/bulk_export.py
index af39210e..fc852287 100644
--- a/translations/management/commands/bulk_export.py
+++ b/translations/management/commands/bulk_export.py
@@ -4,10 +4,10 @@
class Command(BaseCommand):
- help = '''
+ help = """
Get translation export
- '''
+ """
def handle(self, *args, **options) -> str:
- self.stdout.reconfigure(encoding='utf-8')
+ self.stdout.reconfigure(encoding="utf-8")
return json.dumps(Translation.objects.export_translations(), ensure_ascii=False)
diff --git a/translations/management/commands/bulk_import.py b/translations/management/commands/bulk_import.py
index b338e70c..66abce57 100644
--- a/translations/management/commands/bulk_import.py
+++ b/translations/management/commands/bulk_import.py
@@ -6,21 +6,24 @@
class Command(BaseCommand):
- '''
+ """
Run on heroku:
`heroku run --no-tty -a [HEROKU APP NAME] manage.py bulk_import < [PATH TO FILE]`
- '''
+ """
- help = '''
+ help = """
Get translation export
- '''
+ """
def add_arguments(self, parser):
parser.add_argument(
- 'data', nargs='?', type=argparse.FileType('r', encoding='utf-8'), default=stdin,
+ "data",
+ nargs="?",
+ type=argparse.FileType("r", encoding="utf-8"),
+ default=stdin,
)
def handle(self, *args, **options):
- data = json.load(options['data'])
+ data = json.load(options["data"])
bulk_add(data)
diff --git a/translations/management/commands/bulk_translate.py b/translations/management/commands/bulk_translate.py
index e5c23a63..0d4cca8d 100644
--- a/translations/management/commands/bulk_translate.py
+++ b/translations/management/commands/bulk_translate.py
@@ -5,24 +5,24 @@
class Command(BaseCommand):
- help = '''
+ help = """
Get translation export
- '''
+ """
def add_arguments(self, parser):
- parser.add_argument('--limit', default=1, type=int)
- parser.add_argument('--all', default=False, type=bool)
- parser.add_argument('--lang', default=settings.LANGUAGE_CODE, type=str)
+ parser.add_argument("--limit", default=1, type=int)
+ parser.add_argument("--all", default=False, type=bool)
+ parser.add_argument("--lang", default=settings.LANGUAGE_CODE, type=str)
def handle(self, *args, **options):
- limit = 10_000 if options['all'] else min(10_000, options['limit'])
+ limit = 10_000 if options["all"] else min(10_000, options["limit"])
max_batch_size = 128
char_limit = 5_000
- lang = options['lang']
+ lang = options["lang"]
translate = Translate()
- translations = Translation.objects.prefetch_related('translations').language(settings.LANGUAGE_CODE).all()
+ translations = Translation.objects.prefetch_related("translations").language(settings.LANGUAGE_CODE).all()
total_count = 0
temp_chars = 0
diff --git a/translations/migrations/0001_initial.py b/translations/migrations/0001_initial.py
index f6231ca7..1d53c90f 100644
--- a/translations/migrations/0001_initial.py
+++ b/translations/migrations/0001_initial.py
@@ -7,40 +7,47 @@
class Migration(migrations.Migration):
-
initial = True
- dependencies = [
- ]
+ dependencies = []
operations = [
migrations.CreateModel(
- name='Translation',
+ name="Translation",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('label', models.CharField(max_length=128, unique=True)),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("label", models.CharField(max_length=128, unique=True)),
],
options={
- 'abstract': False,
+ "abstract": False,
},
bases=(parler.models.TranslatableModelMixin, models.Model),
),
migrations.CreateModel(
- name='TranslationTranslation',
+ name="TranslationTranslation",
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')),
- ('text', models.TextField(blank=True, null=True)),
- ('edited', models.BooleanField(default=False)),
- ('master', parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='translations.translation')),
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ ("language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language")),
+ ("text", models.TextField(blank=True, null=True)),
+ ("edited", models.BooleanField(default=False)),
+ (
+ "master",
+ parler.fields.TranslationsForeignKey(
+ editable=False,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="translations",
+ to="translations.translation",
+ ),
+ ),
],
options={
- 'verbose_name': 'translation Translation',
- 'db_table': 'translations_translation_translation',
- 'db_tablespace': '',
- 'managed': True,
- 'default_permissions': (),
- 'unique_together': {('language_code', 'master')},
+ "verbose_name": "translation Translation",
+ "db_table": "translations_translation_translation",
+ "db_tablespace": "",
+ "managed": True,
+ "default_permissions": (),
+ "unique_together": {("language_code", "master")},
},
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
),
diff --git a/translations/migrations/0002_translation_active.py b/translations/migrations/0002_translation_active.py
index af090adf..bcb759be 100644
--- a/translations/migrations/0002_translation_active.py
+++ b/translations/migrations/0002_translation_active.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('translations', '0001_initial'),
+ ("translations", "0001_initial"),
]
operations = [
migrations.AddField(
- model_name='translation',
- name='active',
+ model_name="translation",
+ name="active",
field=models.BooleanField(default=True),
),
]
diff --git a/translations/migrations/0003_alter_translation_managers.py b/translations/migrations/0003_alter_translation_managers.py
index 264b0024..e3ae1db4 100644
--- a/translations/migrations/0003_alter_translation_managers.py
+++ b/translations/migrations/0003_alter_translation_managers.py
@@ -5,16 +5,15 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('translations', '0002_translation_active'),
+ ("translations", "0002_translation_active"),
]
operations = [
migrations.AlterModelManagers(
- name='translation',
+ name="translation",
managers=[
- ('objects', translations.models.TranslationManager()),
+ ("objects", translations.models.TranslationManager()),
],
),
]
diff --git a/translations/migrations/0004_translation_no_auto.py b/translations/migrations/0004_translation_no_auto.py
index 7af1943b..7113a986 100644
--- a/translations/migrations/0004_translation_no_auto.py
+++ b/translations/migrations/0004_translation_no_auto.py
@@ -4,15 +4,14 @@
class Migration(migrations.Migration):
-
dependencies = [
- ('translations', '0003_alter_translation_managers'),
+ ("translations", "0003_alter_translation_managers"),
]
operations = [
migrations.AddField(
- model_name='translation',
- name='no_auto',
+ model_name="translation",
+ name="no_auto",
field=models.BooleanField(default=False),
),
]
diff --git a/translations/models.py b/translations/models.py
index d3be47de..542e1048 100644
--- a/translations/models.py
+++ b/translations/models.py
@@ -3,7 +3,7 @@
from django.conf import settings
-BLANK_TRANSLATION_PLACEHOLDER = '[PLACEHOLDER]'
+BLANK_TRANSLATION_PLACEHOLDER = "[PLACEHOLDER]"
class TranslationManager(TranslatableManager):
@@ -11,15 +11,13 @@ class TranslationManager(TranslatableManager):
def add_translation(self, label, default_message=BLANK_TRANSLATION_PLACEHOLDER, active=True, no_auto=False):
default_lang = settings.LANGUAGE_CODE
- parent = self.get_or_create(label=label, defaults={
- "active": active, "no_auto": no_auto})[0]
+ parent = self.get_or_create(label=label, defaults={"active": active, "no_auto": no_auto})[0]
if parent.active != active or parent.active != no_auto:
parent.active = active
parent.no_auto = no_auto
parent.save()
- parent.create_translation(
- default_lang, text=default_message, edited=True)
+ parent.create_translation(default_lang, text=default_message, edited=True)
return parent
def edit_translation(self, label, lang, translation, manual=True):
@@ -36,8 +34,7 @@ def edit_translation(self, label, lang, translation, manual=True):
return parent
def edit_translation_by_id(self, id, lang, translation, manual=True):
- parent = self.prefetch_related(
- "translations").language(lang).get(pk=id)
+ parent = self.prefetch_related("translations").language(lang).get(pk=id)
lang_trans = parent.get_lang(lang)
is_edited = lang_trans is not None and lang_trans.edited is True and lang_trans.text != ""
@@ -81,8 +78,7 @@ def export_translations(self):
for lang in all_langs:
translation.set_current_language(lang["code"])
- translations_export[translation.label]["langs"][lang["code"]] = (
- translation.text, translation.edited)
+ translations_export[translation.label]["langs"][lang["code"]] = (translation.text, translation.edited)
return translations_export
@@ -93,8 +89,7 @@ class Translation(TranslatableModel):
)
active = models.BooleanField(default=True, null=False)
no_auto = models.BooleanField(default=False, null=False)
- label = models.CharField(max_length=128, null=False,
- blank=False, unique=True)
+ label = models.CharField(max_length=128, null=False, blank=False, unique=True)
objects = TranslationManager()
@@ -125,10 +120,8 @@ def find_used_model(self, label_unpack=False):
except AttributeError:
active = True
- external_name = getattr(
- self, reverse.related_name).first().external_name
- table = getattr(
- self, reverse.related_name).first()._meta.db_table
+ external_name = getattr(self, reverse.related_name).first().external_name
+ table = getattr(self, reverse.related_name).first()._meta.db_table
if external_name:
return (table, external_name, reverse.related_name, active)
has_relationship = True
@@ -142,6 +135,7 @@ def find_used_model(self, label_unpack=False):
an external name or an abbreviated name). If no relationship is found, it returns
default values indicating the translation is unassigned.
"""
+
@property
def used_by(self):
reverse = self.find_used_model(label_unpack=True)
@@ -149,21 +143,11 @@ def used_by(self):
instance = getattr(self, reverse.get_accessor_name()).first()
model_name = reverse.related_model._meta.model_name
field_name = reverse.field.name
- external_name = getattr(instance, 'external_name', None)
- abbreviated_name = getattr(instance, 'abbreviated_name', None)
+ external_name = getattr(instance, "external_name", None)
+ abbreviated_name = getattr(instance, "abbreviated_name", None)
display_name = external_name if external_name else abbreviated_name
- return {
- 'id': instance.id,
- 'model_name': model_name,
- 'field_name': field_name,
- 'display_name': display_name
- }
- return {
- 'id': None,
- 'model_name': 'unassigned',
- 'field_name': None,
- 'display_name': None
- }
+ return {"id": instance.id, "model_name": model_name, "field_name": field_name, "display_name": display_name}
+ return {"id": None, "model_name": "unassigned", "field_name": None, "display_name": None}
def get_lang(self, lang):
return self.translations.filter(language_code=lang).first()
diff --git a/translations/urls.py b/translations/urls.py
index aa5c9cc4..7180ed5d 100644
--- a/translations/urls.py
+++ b/translations/urls.py
@@ -3,27 +3,27 @@
urlpatterns = [
- path('', views.TranslationView.as_view()),
- path('admin', views.admin_view, name='translations_api_url'),
- path('admin/filter', views.filter_view),
- path('admin/create', views.create_translation_view),
- path('admin/programs', views.programs_view),
- path('admin/programs/filter', views.programs_filter_view),
- path('admin/programs/create', views.create_program_view),
- path('admin/programs/', views.program_view),
- path('admin/navigators', views.navigators_view),
- path('admin/navigators/filter', views.navigator_filter_view),
- path('admin/navigators/create', views.create_navigator_view),
- path('admin/navigators/', views.navigator_view),
- path('admin/documents', views.documents_view),
- path('admin/documents/filter', views.document_filter_view),
- path('admin/documents/create', views.create_document_view),
- path('admin/documents/', views.document_view),
- path('admin/urgent_needs', views.urgent_needs_view),
- path('admin/urgent_needs/filter', views.urgent_need_filter_view),
- path('admin/urgent_needs/create', views.create_urgent_need_view),
- path('admin/urgent_needs/', views.urgent_need_view),
- path('admin/', views.translation_view, name='translation_admin_url'),
- path('admin//', views.edit_translation),
- path('admin///auto', views.auto_translate),
+ path("", views.TranslationView.as_view()),
+ path("admin", views.admin_view, name="translations_api_url"),
+ path("admin/filter", views.filter_view),
+ path("admin/create", views.create_translation_view),
+ path("admin/programs", views.programs_view),
+ path("admin/programs/filter", views.programs_filter_view),
+ path("admin/programs/create", views.create_program_view),
+ path("admin/programs/", views.program_view),
+ path("admin/navigators", views.navigators_view),
+ path("admin/navigators/filter", views.navigator_filter_view),
+ path("admin/navigators/create", views.create_navigator_view),
+ path("admin/navigators/", views.navigator_view),
+ path("admin/documents", views.documents_view),
+ path("admin/documents/filter", views.document_filter_view),
+ path("admin/documents/create", views.create_document_view),
+ path("admin/documents/", views.document_view),
+ path("admin/urgent_needs", views.urgent_needs_view),
+ path("admin/urgent_needs/filter", views.urgent_need_filter_view),
+ path("admin/urgent_needs/create", views.create_urgent_need_view),
+ path("admin/urgent_needs/", views.urgent_need_view),
+ path("admin/", views.translation_view, name="translation_admin_url"),
+ path("admin//", views.edit_translation),
+ path("admin///auto", views.auto_translate),
]
diff --git a/translations/views.py b/translations/views.py
index aa014dc5..2d21782d 100644
--- a/translations/views.py
+++ b/translations/views.py
@@ -17,10 +17,9 @@
class TranslationView(views.APIView):
-
def get(self, request):
- language = request.query_params.get('lang')
- all_langs = [lang['code'] for lang in settings.PARLER_LANGUAGES[None]]
+ language = request.query_params.get("lang")
+ all_langs = [lang["code"] for lang in settings.PARLER_LANGUAGES[None]]
if language in all_langs:
translations = Translation.objects.all_translations([language])
@@ -31,507 +30,446 @@ def get(self, request):
class NewTranslationForm(forms.Form):
- label = forms.CharField(max_length=128, widget=forms.TextInput(
- attrs={'class': 'input'}))
- default_message = forms.CharField(widget=forms.Textarea(
- attrs={'name': 'text', 'rows': 3, 'cols': 50, 'class': 'textarea'}))
+ label = forms.CharField(max_length=128, widget=forms.TextInput(attrs={"class": "input"}))
+ default_message = forms.CharField(
+ widget=forms.Textarea(attrs={"name": "text", "rows": 3, "cols": 50, "class": "textarea"})
+ )
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def admin_view(request):
- if request.method == 'GET':
- translations = Translation.objects.all().order_by('id')
+ if request.method == "GET":
+ translations = Translation.objects.all().order_by("id")
# Display 50 translations per page
paginator = Paginator(translations, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
for translation in page_obj:
used_by_info = translation.used_by
- translation.entry_id = used_by_info['id']
- translation.model_name = used_by_info['model_name']
- translation.field_name = used_by_info['field_name']
- translation.display_name = used_by_info['display_name']
+ translation.entry_id = used_by_info["id"]
+ translation.model_name = used_by_info["model_name"]
+ translation.field_name = used_by_info["field_name"]
+ translation.display_name = used_by_info["display_name"]
- context = {
- 'page_obj': page_obj
- }
+ context = {"page_obj": page_obj}
return render(request, "main.html", context)
- elif request.method == 'POST':
+ elif request.method == "POST":
form = NewTranslationForm(request.POST)
if form.is_valid():
- text = form['default_message'].value()
- translation = Translation.objects.add_translation(
- form['label'].value(), text)
+ text = form["default_message"].value()
+ translation = Translation.objects.add_translation(form["label"].value(), text)
- auto_translations = Translate().bulk_translate(
- ['__all__'], [text])[text]
+ auto_translations = Translate().bulk_translate(["__all__"], [text])[text]
for [language, auto_text] in auto_translations.items():
- Translation.objects.edit_translation_by_id(
- translation.id, language, auto_text, False)
+ Translation.objects.edit_translation_by_id(translation.id, language, auto_text, False)
response = HttpResponse()
response.headers["HX-Redirect"] = f"/api/translations/admin/{translation.id}"
return response
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def create_translation_view(request):
- context = {
- 'form': NewTranslationForm(),
- 'route': '/api/translations/admin'
- }
+ context = {"form": NewTranslationForm(), "route": "/api/translations/admin"}
return render(request, "util/create_form.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def filter_view(request):
- translations = Translation.objects \
- .filter(label__icontains=request.GET.get('label', '')) \
- .translated(text__icontains=request.GET.get('text', ''))
+ translations = Translation.objects.filter(label__icontains=request.GET.get("label", "")).translated(
+ text__icontains=request.GET.get("text", "")
+ )
paginator = Paginator(translations, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
for translation in page_obj:
used_by_info = translation.used_by
- translation.entry_id = used_by_info['id']
- translation.model_name = used_by_info['model_name']
- translation.field_name = used_by_info['field_name']
- translation.display_name = used_by_info['display_name']
+ translation.entry_id = used_by_info["id"]
+ translation.model_name = used_by_info["model_name"]
+ translation.field_name = used_by_info["field_name"]
+ translation.display_name = used_by_info["display_name"]
- context = {
- 'page_obj': page_obj
- }
+ context = {"page_obj": page_obj}
return render(request, "translations.html", context)
class TranslationForm(forms.Form):
- text = forms.CharField(widget=forms.Textarea(
- attrs={'name': 'text', 'rows': 3, 'cols': 50, 'class': 'textarea'}), required=False)
+ text = forms.CharField(
+ widget=forms.Textarea(attrs={"name": "text", "rows": 3, "cols": 50, "class": "textarea"}), required=False
+ )
class LabelForm(forms.Form):
- label = forms.CharField(max_length=128, widget=forms.TextInput(
- attrs={'class': 'input'}))
+ label = forms.CharField(max_length=128, widget=forms.TextInput(attrs={"class": "input"}))
active = forms.BooleanField(required=False)
no_auto = forms.BooleanField(required=False)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def translation_view(request, id=0):
- if request.method == 'GET':
- translation = Translation.objects.prefetch_related(
- 'translations').get(pk=id)
- langs = [lang['code'] for lang in settings.PARLER_LANGUAGES[None]]
+ if request.method == "GET":
+ translation = Translation.objects.prefetch_related("translations").get(pk=id)
+ langs = [lang["code"] for lang in settings.PARLER_LANGUAGES[None]]
- translations = {t.language_code: TranslationForm(
- {'text': t.text}) for t in translation.translations.all()}
+ translations = {t.language_code: TranslationForm({"text": t.text}) for t in translation.translations.all()}
for lang in langs:
if lang not in translations:
translations[lang] = TranslationForm()
context = {
- 'translation': translation,
- 'langs': translations,
- 'label_form': LabelForm({
- 'label': translation.label,
- 'active': translation.active,
- 'no_auto': translation.no_auto
- })
+ "translation": translation,
+ "langs": translations,
+ "label_form": LabelForm(
+ {"label": translation.label, "active": translation.active, "no_auto": translation.no_auto}
+ ),
}
return render(request, "edit/main.html", context)
- elif request.method == 'POST':
+ elif request.method == "POST":
form = LabelForm(request.POST)
if form.is_valid():
translation = Translation.objects.get(pk=id)
- translation.label = form['label'].value()
- translation.active = form['active'].value()
- translation.no_auto = form['no_auto'].value()
+ translation.label = form["label"].value()
+ translation.active = form["active"].value()
+ translation.no_auto = form["no_auto"].value()
translation.save()
context = {
- 'form': LabelForm({
- 'label': translation.label,
- 'active': translation.active,
- 'no_auto': translation.no_auto
- }),
+ "form": LabelForm(
+ {"label": translation.label, "active": translation.active, "no_auto": translation.no_auto}
+ ),
}
return render(request, "edit/label_form.html", context)
- elif request.method == 'DELETE':
+ elif request.method == "DELETE":
try:
Translation.objects.get(pk=id).delete()
except ProtectedError:
return render(
request,
- 'error.html',
- {"error_message": "Please delete the program that this translation is attached to if you want to delete this translation"}
+ "error.html",
+ {
+ "error_message": "Please delete the program that this translation is attached to if you want to delete this translation"
+ },
)
response = HttpResponse()
response.headers["HX-Redirect"] = "/api/translations/admin"
return response
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
-def edit_translation(request, id=0, lang='en-us'):
- if request.method == 'POST':
+def edit_translation(request, id=0, lang="en-us"):
+ if request.method == "POST":
form = TranslationForm(request.POST)
if form.is_valid():
- text = form['text'].value()
- translation = Translation.objects.edit_translation_by_id(
- id, lang, text)
+ text = form["text"].value()
+ translation = Translation.objects.edit_translation_by_id(id, lang, text)
if lang == settings.LANGUAGE_CODE:
- translations = Translate().bulk_translate(
- ['__all__'], [text])[text]
+ translations = Translate().bulk_translate(["__all__"], [text])[text]
for [language, translation] in translations.items():
- Translation.objects.edit_translation_by_id(
- id, language, translation, False)
+ Translation.objects.edit_translation_by_id(id, language, translation, False)
parent = Translation.objects.get(pk=id)
- forms = {t.language_code: TranslationForm(
- {'text': t.text}) for t in parent.translations.all()}
+ forms = {t.language_code: TranslationForm({"text": t.text}) for t in parent.translations.all()}
context = {
- 'translation': parent,
- 'langs': forms,
+ "translation": parent,
+ "langs": forms,
}
return render(request, "edit/langs.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
-def auto_translate(request, id=0, lang='en-us'):
- if request.method == 'POST':
- translation = Translation.objects.language(
- settings.LANGUAGE_CODE).get(pk=id)
+def auto_translate(request, id=0, lang="en-us"):
+ if request.method == "POST":
+ translation = Translation.objects.language(settings.LANGUAGE_CODE).get(pk=id)
auto = Translate().translate(lang, translation.text)
# Set text to manualy edited initially in order to update, and then set it to not edited
- new_translation = Translation.objects.edit_translation_by_id(
- translation.id, lang, auto)
+ new_translation = Translation.objects.edit_translation_by_id(translation.id, lang, auto)
new_translation.edited = False
new_translation.save()
context = {
- 'form': TranslationForm({'text': new_translation.text}),
- 'lang': lang,
- 'translation': translation,
+ "form": TranslationForm({"text": new_translation.text}),
+ "lang": lang,
+ "translation": translation,
}
return render(request, "edit/lang_form.html", context)
class NewProgramForm(forms.Form):
- name_abbreviated = forms.CharField(max_length=120, widget=forms.TextInput(
- attrs={'class': 'input'}))
+ name_abbreviated = forms.CharField(max_length=120, widget=forms.TextInput(attrs={"class": "input"}))
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def programs_view(request):
- if request.method == 'GET':
- programs = Program.objects.all().order_by('external_name')
+ if request.method == "GET":
+ programs = Program.objects.all().order_by("external_name")
paginator = Paginator(programs, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
- context = {
- 'page_obj': page_obj
- }
+ context = {"page_obj": page_obj}
- return render(request, 'programs/main.html', context)
- elif request.method == 'POST':
+ return render(request, "programs/main.html", context)
+ elif request.method == "POST":
form = NewProgramForm(request.POST)
if form.is_valid():
program = Program.objects.new_program(
- form['name_abbreviated'].value(),
+ form["name_abbreviated"].value(),
)
response = HttpResponse()
response.headers["HX-Redirect"] = f"/api/translations/admin/programs/{program.id}"
return response
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def create_program_view(request):
- if request.method == 'GET':
- context = {
- 'form': NewProgramForm(),
- 'route': '/api/translations/admin/programs'
- }
+ if request.method == "GET":
+ context = {"form": NewProgramForm(), "route": "/api/translations/admin/programs"}
- return render(request, 'util/create_form.html', context)
+ return render(request, "util/create_form.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def program_view(request, id=0):
- if request.method == 'GET':
+ if request.method == "GET":
program = Program.objects.get(pk=id)
- context = {
- 'program': program
- }
+ context = {"program": program}
- return render(request, 'programs/program.html', context)
+ return render(request, "programs/program.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def programs_filter_view(request):
- if request.method == 'GET':
- programs = Program.objects.filter(
- name__translations__text__icontains=request.GET.get('name', '')).distinct().order_by('external_name')
+ if request.method == "GET":
+ programs = (
+ Program.objects.filter(name__translations__text__icontains=request.GET.get("name", ""))
+ .distinct()
+ .order_by("external_name")
+ )
paginator = Paginator(programs, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
- context = {
- 'page_obj': page_obj
- }
+ context = {"page_obj": page_obj}
- return render(request, 'programs/list.html', context)
+ return render(request, "programs/list.html", context)
class NewNavigatorForm(forms.Form):
- label = forms.CharField(max_length=50, widget=forms.TextInput(
- attrs={'class': 'input'}))
- phone_number = PhoneNumberField(required=False,
- widget=forms.TextInput(
- attrs={'class': 'input'})
- )
+ label = forms.CharField(max_length=50, widget=forms.TextInput(attrs={"class": "input"}))
+ phone_number = PhoneNumberField(required=False, widget=forms.TextInput(attrs={"class": "input"}))
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def navigators_view(request):
- if request.method == 'GET':
- navigators = Navigator.objects.all().order_by('external_name')
+ if request.method == "GET":
+ navigators = Navigator.objects.all().order_by("external_name")
paginator = Paginator(navigators, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
- context = {
- 'page_obj': page_obj
- }
+ context = {"page_obj": page_obj}
- return render(request, 'navigators/main.html', context)
- if request.method == 'POST':
+ return render(request, "navigators/main.html", context)
+ if request.method == "POST":
form = NewNavigatorForm(request.POST)
if form.is_valid():
navigator = Navigator.objects.new_navigator(
- form['label'].value(),
- form['phone_number'].value(),
+ form["label"].value(),
+ form["phone_number"].value(),
)
response = HttpResponse()
- response.headers[
- "HX-Redirect"] = f"/api/translations/admin/navigators/{navigator.id}"
+ response.headers["HX-Redirect"] = f"/api/translations/admin/navigators/{navigator.id}"
return response
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def create_navigator_view(request):
- if request.method == 'GET':
- context = {
- 'form': NewNavigatorForm(),
- 'route': '/api/translations/admin/navigators'
- }
+ if request.method == "GET":
+ context = {"form": NewNavigatorForm(), "route": "/api/translations/admin/navigators"}
- return render(request, 'util/create_form.html', context)
+ return render(request, "util/create_form.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def navigator_view(request, id=0):
- if request.method == 'GET':
+ if request.method == "GET":
navigator = Navigator.objects.get(pk=id)
- context = {
- 'navigator': navigator
- }
+ context = {"navigator": navigator}
- return render(request, 'navigators/navigator.html', context)
+ return render(request, "navigators/navigator.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def navigator_filter_view(request):
- if request.method == 'GET':
- navigators = Navigator.objects.filter(
- name__translations__text__icontains=request.GET.get('name', '')).distinct().order_by('external_name')
+ if request.method == "GET":
+ navigators = (
+ Navigator.objects.filter(name__translations__text__icontains=request.GET.get("name", ""))
+ .distinct()
+ .order_by("external_name")
+ )
paginator = Paginator(navigators, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
- context = {
- 'page_obj': page_obj
- }
+ context = {"page_obj": page_obj}
- return render(request, 'navigators/list.html', context)
+ return render(request, "navigators/list.html", context)
class NewUrgentNeedForm(forms.Form):
- label = forms.CharField(max_length=50, widget=forms.TextInput(
- attrs={'class': 'input'}))
- phone_number = PhoneNumberField(required=False,
- widget=forms.TextInput(
- attrs={'class': 'input'})
- )
+ label = forms.CharField(max_length=50, widget=forms.TextInput(attrs={"class": "input"}))
+ phone_number = PhoneNumberField(required=False, widget=forms.TextInput(attrs={"class": "input"}))
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def urgent_needs_view(request):
- if request.method == 'GET':
- urgent_needs = UrgentNeed.objects.all().order_by('external_name')
+ if request.method == "GET":
+ urgent_needs = UrgentNeed.objects.all().order_by("external_name")
paginator = Paginator(urgent_needs, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
- context = {
- 'page_obj': page_obj
- }
- return render(request, 'urgent_needs/main.html', context)
- if request.method == 'POST':
+ context = {"page_obj": page_obj}
+ return render(request, "urgent_needs/main.html", context)
+ if request.method == "POST":
form = NewUrgentNeedForm(request.POST)
if form.is_valid():
urgent_need = UrgentNeed.objects.new_urgent_need(
- form['label'].value(),
- form['phone_number'].value(),
+ form["label"].value(),
+ form["phone_number"].value(),
)
response = HttpResponse()
- response.headers[
- "HX-Redirect"] = f"/api/translations/admin/urgent_needs/{urgent_need.id}"
+ response.headers["HX-Redirect"] = f"/api/translations/admin/urgent_needs/{urgent_need.id}"
return response
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def create_urgent_need_view(request):
- if request.method == 'GET':
- context = {
- 'form': NewUrgentNeedForm(),
- 'route': '/api/translations/admin/urgent_needs'
- }
+ if request.method == "GET":
+ context = {"form": NewUrgentNeedForm(), "route": "/api/translations/admin/urgent_needs"}
- return render(request, 'util/create_form.html', context)
+ return render(request, "util/create_form.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def urgent_need_view(request, id=0):
- if request.method == 'GET':
+ if request.method == "GET":
urgent_need = UrgentNeed.objects.get(pk=id)
- context = {
- 'urgent_need': urgent_need
- }
+ context = {"urgent_need": urgent_need}
- return render(request, 'urgent_needs/urgent_need.html', context)
+ return render(request, "urgent_needs/urgent_need.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def urgent_need_filter_view(request):
- if request.method == 'GET':
- urgent_needs = UrgentNeed.objects.filter(
- name__translations__text__icontains=request.GET.get('name', '')).distinct().order_by('external_name')
+ if request.method == "GET":
+ urgent_needs = (
+ UrgentNeed.objects.filter(name__translations__text__icontains=request.GET.get("name", ""))
+ .distinct()
+ .order_by("external_name")
+ )
paginator = Paginator(urgent_needs, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
- context = {
- 'page_obj': page_obj
- }
+ context = {"page_obj": page_obj}
- return render(request, 'urgent_needs/list.html', context)
+ return render(request, "urgent_needs/list.html", context)
class NewDocumentForm(forms.Form):
- external_name = forms.CharField(max_length=120, widget=forms.TextInput(
- attrs={'class': 'input'}))
+ external_name = forms.CharField(max_length=120, widget=forms.TextInput(attrs={"class": "input"}))
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def documents_view(request):
- if request.method == 'GET':
- documents = Document.objects.all().order_by('external_name')
+ if request.method == "GET":
+ documents = Document.objects.all().order_by("external_name")
paginator = Paginator(documents, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
- context = {
- 'page_obj': page_obj
- }
- return render(request, 'documents/main.html', context)
- if request.method == 'POST':
+ context = {"page_obj": page_obj}
+ return render(request, "documents/main.html", context)
+ if request.method == "POST":
form = NewDocumentForm(request.POST)
if form.is_valid():
- document = Document.objects.new_document(
- form['external_name'].value())
+ document = Document.objects.new_document(form["external_name"].value())
response = HttpResponse()
response.headers["HX-Redirect"] = f"/api/translations/admin/documents/{document.id}"
return response
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def create_document_view(request):
- if request.method == 'GET':
- context = {
- 'form': NewDocumentForm(),
- 'route': '/api/translations/admin/documents'
- }
+ if request.method == "GET":
+ context = {"form": NewDocumentForm(), "route": "/api/translations/admin/documents"}
- return render(request, 'util/create_form.html', context)
+ return render(request, "util/create_form.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def document_view(request, id=0):
- if request.method == 'GET':
+ if request.method == "GET":
document = Document.objects.get(pk=id)
- context = {
- 'document': document
- }
+ context = {"document": document}
- return render(request, 'documents/document.html', context)
+ return render(request, "documents/document.html", context)
-@login_required(login_url='/admin/login')
+@login_required(login_url="/admin/login")
@staff_member_required
def document_filter_view(request):
- if request.method == 'GET':
- query = request.GET.get('name', '')
- documents = Document.objects.filter(
- external_name__contains=query).order_by('external_name')
+ if request.method == "GET":
+ query = request.GET.get("name", "")
+ documents = Document.objects.filter(external_name__contains=query).order_by("external_name")
paginator = Paginator(documents, 50)
- page_number = request.GET.get('page')
+ page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
- context = {
- 'page_obj': page_obj
- }
+ context = {"page_obj": page_obj}
- return render(request, 'documents/list.html', context)
+ return render(request, "documents/list.html", context)