Skip to content

Commit

Permalink
Release 2024.05.1 (#2101)
Browse files Browse the repository at this point in the history
  • Loading branch information
lalver1 committed May 15, 2024
2 parents f821eec + 130da6f commit 3281457
Show file tree
Hide file tree
Showing 96 changed files with 1,953 additions and 380 deletions.
2 changes: 2 additions & 0 deletions .devcontainer/postAttach.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
set -eu

# initialize pre-commit

git config --global --add safe.directory /home/calitp/app
pre-commit install --overwrite
8 changes: 8 additions & 0 deletions .github/workflows/add-to-project-dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,11 @@ jobs:
with:
project-url: https://github.com/orgs/cal-itp/projects/${{ secrets.GH_PROJECT }}
github-token: ${{ secrets.GH_PROJECTS_TOKEN }}

- uses: EndBug/project-fields@v2
with:
operation: set
fields: Effort
values: 1
project_url: https://github.com/orgs/cal-itp/projects/${{ secrets.GH_PROJECT }}
github_token: ${{ secrets.GH_PROJECTS_TOKEN }}
31 changes: 26 additions & 5 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,28 @@ on:
- cron: "24 9 * * 6"

jobs:
setup:
name: Set up CodeQL analysis
runs-on: ubuntu-latest
# Required permissions
permissions:
pull-requests: read
outputs:
# changes is a JSON array with names of all filters matching any of the changed files
languages: ${{ steps.filter.outputs.changes }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
javascript: "**.js"
python: "**.py"
codeql:
name: CodeQL Analyze
runs-on: ubuntu-latest
needs: setup
permissions:
actions: read
contents: read
Expand All @@ -26,7 +45,9 @@ jobs:
strategy:
fail-fast: false
matrix:
language: ["javascript", "python"]
# Parse JSON array containing names of all filters matching any of changed files
# e.g. ['javascript', 'python'] if both file types had changes
language: ${{ fromJSON(needs.setup.outputs.languages) }}

steps:
- name: Checkout repository
Expand All @@ -36,10 +57,10 @@ jobs:
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#specifying-configuration-details-using-the-config-input
config: |
paths-ignore:
- tests
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
11 changes: 6 additions & 5 deletions .github/workflows/mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ jobs:
runs-on: ubuntu-latest
# only pull requests should generate a preview
if: github.event.pull_request
permissions:
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -48,16 +50,15 @@ jobs:
mkdocs build
- name: Install Netlify CLI
run: npm install --location=global netlify-cli
run: npm install --location=global netlify-cli@17.x.x

- name: Deploy Preview to Netlify
run: |
netlify deploy \
--alias="${GITHUB_REPOSITORY#*/}-${{ github.event.number }}" \
--auth=${{ secrets.NETLIFY_AUTH_TOKEN }} \
--dir="site" \
--alias="${GITHUB_REPOSITORY#*/}-${{ github.event.number }}"
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_PREVIEW_APP_SITE_ID }}
--site=${{ secrets.NETLIFY_PREVIEW_APP_SITE_ID }}
- name: Find existing comment
uses: peter-evans/find-comment@v3
Expand Down
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ default_stages:

repos:
- repo: https://github.com/compilerla/conventional-pre-commit
rev: v3.1.0
rev: v3.2.0
hooks:
- id: conventional-pre-commit
stages: [commit-msg]

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: mixed-line-ending
Expand All @@ -34,7 +34,7 @@ repos:
args: ["--maxkb=1500"]

- repo: https://github.com/psf/black
rev: 24.2.0
rev: 24.4.2
hooks:
- id: black
types:
Expand Down
8 changes: 7 additions & 1 deletion benefits/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import logging
import requests

from adminsortable2.admin import SortableAdminMixin
from django.conf import settings
from django.contrib import admin
from . import models
Expand All @@ -16,8 +17,8 @@


for model in [
models.AuthProvider,
models.EligibilityType,
models.EligibilityVerifier,
models.PaymentProcessor,
models.PemData,
models.TransitAgency,
Expand All @@ -26,6 +27,11 @@
admin.site.register(model)


@admin.register(models.EligibilityVerifier)
class SortableEligibilityVerifierAdmin(SortableAdminMixin, admin.ModelAdmin):
pass


def pre_login_user(user, request):
logger.debug(f"Running pre-login callback for user: {user.username}")
token = request.session.get("google_sso_access_token")
Expand Down
12 changes: 12 additions & 0 deletions benefits/core/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,18 @@ class ViewedPageEvent(Event):

def __init__(self, request):
super().__init__(request, "viewed page")
# Add UTM codes
utm_campaign = request.GET.get("utm_campaign")
utm_source = request.GET.get("utm_source")
utm_medium = request.GET.get("utm_medium")
utm_content = request.GET.get("utm_content")
utm_id = request.GET.get("utm_id")
self.update_event_properties(
utm_campaign=utm_campaign, utm_source=utm_source, utm_medium=utm_medium, utm_content=utm_content, utm_id=utm_id
)
self.update_user_properties(
utm_campaign=utm_campaign, utm_source=utm_source, utm_medium=utm_medium, utm_content=utm_content, utm_id=utm_id
)


class ChangedLanguageEvent(Event):
Expand Down
22 changes: 21 additions & 1 deletion benefits/core/context_processors.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,15 @@
from . import models, session


def unique_values(original_list):
# dict.fromkeys gets the unique values and preserves order
return list(dict.fromkeys(original_list))


def _agency_context(agency):
return {
"eligibility_index_url": agency.eligibility_index_url,
"help_template": agency.help_template,
"help_templates": unique_values([v.help_template for v in agency.active_verifiers if v.help_template is not None]),
"info_url": agency.info_url,
"long_name": agency.long_name,
"phone": agency.phone,
Expand Down Expand Up @@ -64,6 +69,21 @@ def debug(request):
return {"debug": session.context_dict(request)}


def enrollment(request):
"""Context processor adds enrollment information to request context."""
eligibility = session.eligibility(request)
expiry = session.enrollment_expiry(request)
reenrollment = session.enrollment_reenrollment(request)

data = {
"expires": expiry,
"reenrollment": reenrollment,
"supports_expiration": eligibility.supports_expiration if eligibility else False,
}

return {"enrollment": data}


def origin(request):
"""Context processor adds session.origin to request context."""
origin = session.origin(request)
Expand Down
28 changes: 28 additions & 0 deletions benefits/core/migrations/0003_eligibilitytype_expiration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 5.0.2 on 2024-03-14 20:48

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("core", "0002_paymentprocessor_backoffice_api"),
]

operations = [
migrations.AddField(
model_name="eligibilitytype",
name="expiration_days",
field=models.PositiveSmallIntegerField(blank=True, null=True),
),
migrations.AddField(
model_name="eligibilitytype",
name="expiration_reenrollment_days",
field=models.PositiveSmallIntegerField(blank=True, null=True),
),
migrations.AddField(
model_name="eligibilitytype",
name="supports_expiration",
field=models.BooleanField(default=False),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Generated by Django 5.0.3 on 2024-03-19 20:22

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("core", "0003_eligibilitytype_expiration"),
]

# see https://django-admin-sortable2.readthedocs.io/en/latest/usage.html#initial-data
def set_initial_display_order(apps, schema_editor):
EligibilityVerifier = apps.get_model("core", "EligibilityVerifier")
for order, item in enumerate(EligibilityVerifier.objects.all(), 1):
item.display_order = order
item.save(update_fields=["display_order"])

operations = [
migrations.AlterModelOptions(
name="eligibilityverifier",
options={"ordering": ["display_order"]},
),
migrations.AddField(
model_name="eligibilityverifier",
name="display_order",
field=models.PositiveSmallIntegerField(default=0),
),
migrations.RunPython(set_initial_display_order, reverse_code=migrations.RunPython.noop),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 5.0.3 on 2024-03-21 00:31

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("core", "0004_alter_eligibilityverifier_display_order"),
]

operations = [
migrations.RemoveField(
model_name="transitagency",
name="help_template",
),
migrations.AddField(
model_name="eligibilityverifier",
name="help_template",
field=models.TextField(null=True),
),
]
93 changes: 93 additions & 0 deletions benefits/core/migrations/0006_alter_allow_blank.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Generated by Django 5.0.3 on 2024-03-25 19:48

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("core", "0005_move_help_template_to_eligibilityverifier"),
]

operations = [
migrations.AlterField(
model_name="authprovider",
name="claim",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="authprovider",
name="scope",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="authprovider",
name="sign_out_button_template",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="authprovider",
name="sign_out_link_template",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="api_auth_header",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="api_url",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="auth_provider",
field=models.ForeignKey(
blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to="core.authprovider"
),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="form_class",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="help_template",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="jwe_cek_enc",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="jwe_encryption_alg",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="jws_signing_alg",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="public_key",
field=models.ForeignKey(
blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="+", to="core.pemdata"
),
),
migrations.AlterField(
model_name="eligibilityverifier",
name="start_template",
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name="pemdata",
name="remote_url",
field=models.TextField(blank=True, null=True),
),
]

0 comments on commit 3281457

Please sign in to comment.