Skip to content

Commit

Permalink
Feature/1610.2 frontend parsing status (#2622)
Browse files Browse the repository at this point in the history
* saving state real quick

* finishing merge with latest

* Missed old test script

* Added new test, more cleanup

* Updating unit tests in DFS, preparing for 1610

* Merging in Jan's 1610 code for parserError useful-ness

* Revert "Merging in Jan's 1610 code for parserError useful-ness"

This reverts commit c5796da.

* update to test to use dfs fixture

* saving state before new 1610 merge

* Resolving merge conflicts with 1610.

* Linting changes and comparing to 1610

* Some unit test linting but inherited 1610 issues

* Re-ordering job to run tests vs lint first.

* Updates to linting and unit tests.

* Fixing linting.

* Update tdrs-backend/setup.cfg

* updates per PR.

* Excluding trailers for rejection

* VSCode merge resolution is garbage.

* Fixing precheck for not implemented types

* Updating to error-handle not implemented schema types

* - Updated view to show latest datafiles
- Added admin filter to show newest or all datafile records
- Updated indices to allow easier elastic queries

* - Updated search indices to have parent FK

* - Fix lint errors

* - Updated submission tests
- Moved create_datafile to util

* - fix lint errors

* - removing frontend filtering

* - addding datafile to admin model

* Revert "- addding datafile to admin model"

This reverts commit 35a6f24.

* - Fixed issue where datafile FK wasnt populating
- Regenerated migration

* - Readding datafile back to admin view now that the error is resolved

* - adding datafile back

* Revert "- Readding datafile back to admin view now that the error is resolved"

This reverts commit 2807425.

* - Removed unnecessary fields
- Updated dependencies
- Updated filter

* - Updated document to include required fields

* - Fixed failing test

* add adminUrl to deployment cypress overrides

* Adding "beta" banners to relevant error report sections (#2522)

* Update views.py

* Update views.py

* Update SubmissionHistory.jsx

* Update SubmissionHistory.test.js

* Apply suggestions from code review

Co-authored-by: Miles Reiter <mreiter@goraft.tech>

* lint fixes

---------

Co-authored-by: Miles Reiter <mreiter@goraft.tech>
Co-authored-by: Alex P <63075587+ADPennington@users.noreply.github.com>
Co-authored-by: andrew-jameson <ajameson@teamraft.com>

* Create sprint-73-summary.md (#2565)

* hotfix for large file sizes (#2542)

* hotfix for large file sizes

* apply timeouts/req limits to dev

* filter identity pages from scan

* IGNORE sql injection

---------

Co-authored-by: Jan Timpe <jtimpe@goraft.tech>
Co-authored-by: mo sohani <msohani@goraft.tech>
Co-authored-by: Alex P <63075587+ADPennington@users.noreply.github.com>

* updating validation error language

* accidentally included coding challenge

* rm comments

* 2550 deactivation email link (#2557)

* - updated nginx buildpack

* - specifying different nginx version

* - Updating changelog

* - added script to update certain apps in cf
- added workflow for each environment in circi

* - fixed base config

* - fixing jobs

* - Updated based on feedback in OH

* - Updating defaults

* - Removing defaults

* - Fixing indent

* - Adding params to config

* test

* test

* - updating work dir

* - Adding checkout

* - adding cf check

* - logging into cf

* - update cf check to install required binary

* - removing unnecessary switch

* - Forcing plugin installation

* - test installing plugin from script also

* - Adding url to email

* - test code for sandbox

* - using my email

* Revert "Merge branch 'update-cf-os' into 2551-deactivation-email-link"

This reverts commit e963b9d, reversing
changes made to cc9cf81.

* Revert "- using my email"

This reverts commit cc9cf81.

* Revert "- test code for sandbox"

This reverts commit 0603774.

---------

Co-authored-by: Alex P <63075587+ADPennington@users.noreply.github.com>
Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>

* Update README.md (#2577)

Add ATO

Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>

* Create 2023, Spring - Testing CSV & Excel-based error reports.md

* Update README.md

* Updating deliverable links (#2584)

* User viewset not returning/duplicating users (#2573)

* - Fixed issue not allowing pagination to work locally with nginx
- Added ordering to user field to fix duplicates issue

* - fix lint error

* - Removing ID check since we cannot guarantee that the uuid that is generated per test run will be lexigraphically consistent

---------

Co-authored-by: Alex P <63075587+ADPennington@users.noreply.github.com>
Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>

* Update cf os (#2523)

* - updated nginx buildpack

* - specifying different nginx version

* - Updating changelog

* - added script to update certain apps in cf
- added workflow for each environment in circi

* - fixed base config

* - fixing jobs

* - Updated based on feedback in OH

* - Updating defaults

* - Removing defaults

* - Fixing indent

* - Adding params to config

* test

* test

* - updating work dir

* - Adding checkout

* - adding cf check

* - logging into cf

* - update cf check to install required binary

* - removing unnecessary switch

* - Forcing plugin installation

* - test installing plugin from script also

* - Adding new dependencies

* - adding package

* - fixing broken install

* - fixing libs

* - using correct command

* - gettign correct version of libc

* - trying to upgrade libs

* - testing

* - Updated README and script

* Revert "- Updated README and script"

This reverts commit 92697b3.

* - Removed unnecessary circi stuff
- Removed script
- Updated docs to callout updating secondary apps

* - Correct spelling error

---------

Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>

* Item Number Mismatch (#2578)

* - Updated schemas and models to reflect correct item numbers of fields

* - Revert migration

* - Updated header/trailer item numbers

* - Fixed item numbers off by one errors

---------

Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>

* pipeline filtering (#2538)

* pipeline changes that filter based on paths and branches. circle ci tracks specified branches in order to keep current functionality on HHS side.

* updated syntax to be in line with build-all.yml

* removed comma

* WIP build flow docs

* added Architecture Decision Record for the change to pipeline workflows

* corrected file type of doc to .md

---------

Co-authored-by: George Hudson <ghudson@teamraft.com>
Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>

* Hotfix Devops/2457 path filtering for documentation (#2597)

* pipeline changes that filter based on paths and branches. circle ci tracks specified branches in order to keep current functionality on HHS side.

* updated syntax to be in line with build-all.yml

* removed comma

* WIP build flow docs

* added Architecture Decision Record for the change to pipeline workflows

* corrected file type of doc to .md

* build and test all on PRs even for documentation

---------

Co-authored-by: George Hudson <ghudson@teamraft.com>

* Create sprint-74-summary.md (#2596)

Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>

* added URL filters (#2580)

* added URL filters

* allow github to trigger owasp and label deploys (#2601)

Co-authored-by: George Hudson <ghudson@teamraft.com>

---------

Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>
Co-authored-by: George Hudson <georgehudson78@gmail.com>
Co-authored-by: George Hudson <ghudson@teamraft.com>

* Create sprint-75-summary.md (#2608)

* Create sprint-76-summary.md (#2609)

Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>

* - Resolved failing tests

* - Corrected merge thrash

* - Using randbits to generate pk to get around confilcting sequence pks

* Revert "- Using randbits to generate pk to get around confilcting sequence pks"

This reverts commit ac9b065.

* - Updating region in fixture instead of factory
- letting django handle transaction for test

* - Moved datafile reference to avoid confusion

* pushing up incomplete codebase

* Other unit tests now have passed w/ good error handling

* Working tests, need to get setup for case aggregates populating via DB

* - Updated queries
- Added helper function
- Need to merge in 2579 for queries to work

* minor improvement to month2int

* - Fixing most merge errors

* - Fixing functions

* - Updated queries based on generic relation

* - Updated queries to count by case number instead of record number

* - Added route
- Updated task to create dfs

* - updated tests to include dfs

* Cleaning up most comments that are no longer necessary and fixed lint issues.

* making minor updates, still broken tests.

* updating pipfile.lock and rebuild image resolved test issues

* Reorganizing tests, still failing in test_parse.py

* deleted summary file, split into other test scripts.

* Fixed missing self reference.

* Linting fixes.

* Found reference failure in deployed env.

* Removing extra returns for missing record type.

* lint fix

* Addressed invocation of datafile for failing test

* lint update for whitespace

* Intermediary commit, broken test

* add reverse relation

* frontend summary status

* new assignemnts in util

* - updated rejected query to correctly count objs

* - Fixing most tests

* - Fixed user error. Swapped numbers by accident.

* - make region None to avoid PK collision

* - Fix lint errors

* - Updating to avoid warning

* add acceptance icon

* add reverse relationship to summary model

* vscode merge conflict resolution (#2623)

* auto-create the external network

* didn't stage commit properly

* checking diffs, matching 1613.2

* doesn't work in pipeline. must be cached local

* re-commenting in unit test

* lint failures fixed

---------

Co-authored-by: andrew-jameson <ajameson@teamraft.com>

* add a pending status

* add acceptance status tests

* update warning icon

* rm old assert

* update rejected icon

* url change per me, want pipeline to run e2e

* Upgraded to querysets, fix PR comments, PE str

* missing : not caught locally

* Feat/1613 merge 2 (#2650)

* Create sprint-78-summary.md (#2645)

* Missing/unsaved parser_error for record_type

* removing redundant tests

* Hopefully resolved on unit tests and lint

---------

Co-authored-by: Smithh-Co <121890311+Smithh-Co@users.noreply.github.com>
Co-authored-by: andrew-jameson <ajameson@teamraft.com>

* icontains

* tests

* Changing dict structure per 1612.

* fixed tests and lint issues, parse is too complex

* schema_manager replaces schema check

* Saving state prior to merge-conflict.

* Adopting latest manager, removing old error style.

* Commented out t6 line during Office hours

* minor reference update

* Acclimating to schemaManager

* lint-fix isinstance

* syntax mistake with isinstance

* Apply suggestions from code review

* reverting search_index merge artifacts.

* adjusting for removing unused "get-schema()"

* whitespace lint

* Feedback from Jan

* Ensuring tests run/work.

* Ensure we have leading zero in rptmonthyear.

* Minor lint fix for exception logging

* fix migration

* add backend partially accepted status

* add frontend partially accepted status

* add partially accepted test

* rm accidental commit

* rm unused variable

* resolving merge conflict problems

* fixing tests from merge conflicts.

* dumb lint fix

* Update tdrs-backend/tdpservice/parsers/migrations/0007_alter_datafilesummary_datafile.py

* fix merge errors

* fix name attr not populated for preparsing errors

* include preparsing errors in row_precheck_errors status

* make header precheck errors force rejected status

* lint msg

---------

Co-authored-by: Andrew Jameson <ajameson@goraft.tech>
Co-authored-by: Andrew <84722778+andrew-jameson@users.noreply.github.com>
Co-authored-by: andrew-jameson <ajameson@teamraft.com>
Co-authored-by: elipe17 <elipe@teamraft.com>
Co-authored-by: Miles Reiter <mreiter@goraft.tech>
Co-authored-by: Alex P <63075587+ADPennington@users.noreply.github.com>
Co-authored-by: Smithh-Co <121890311+Smithh-Co@users.noreply.github.com>
Co-authored-by: mo sohani <msohani@goraft.tech>
Co-authored-by: Eric Lipe <125676261+elipe17@users.noreply.github.com>
Co-authored-by: Lauren Frohlich <61251539+lfrohlich@users.noreply.github.com>
Co-authored-by: Miles Reiter <reitermb@gmail.com>
Co-authored-by: George Hudson <georgehudson78@gmail.com>
Co-authored-by: George Hudson <ghudson@teamraft.com>
Co-authored-by: raftmsohani <97037188+raftmsohani@users.noreply.github.com>
  • Loading branch information
15 people authored Oct 4, 2023
1 parent fb6cc5f commit 8de88cd
Show file tree
Hide file tree
Showing 12 changed files with 186 additions and 11 deletions.
3 changes: 3 additions & 0 deletions tdrs-backend/tdpservice/data_files/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from tdpservice.security.models import ClamAVFileScan
from tdpservice.stts.models import STT
from tdpservice.users.models import User
from tdpservice.parsers.serializers import DataFileSummarySerializer
logger = logging.getLogger(__name__)

class DataFileSerializer(serializers.ModelSerializer):
Expand All @@ -22,6 +23,7 @@ class DataFileSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
ssp = serializers.BooleanField(write_only=True)
has_error = serializers.SerializerMethodField()
summary = DataFileSummarySerializer(many=False, read_only=True)

class Meta:
"""Metadata."""
Expand All @@ -45,6 +47,7 @@ class Meta:
's3_location',
's3_versioning_id',
'has_error',
'summary'
]

read_only_fields = ("version",)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ class Migration(migrations.Migration):
model_name='parsererror',
name='error_type',
field=models.TextField(choices=[('1', 'File pre-check'), ('2', 'Record value invalid'), ('3', 'Record value consistency'), ('4', 'Case consistency'), ('5', 'Section consistency'), ('6', 'Historical consistency')], max_length=128),
)
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 3.2.15 on 2023-07-20 20:50

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


class Migration(migrations.Migration):

dependencies = [
('data_files', '0012_datafile_s3_versioning_id'),
('parsers', '0007_datafilesummary'),
]

operations = [
migrations.AlterField(
model_name='datafilesummary',
name='datafile',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='summary', to='data_files.datafile'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.2.15 on 2023-08-23 12:43

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('parsers', '0008_alter_datafilesummary_datafile'),
]

operations = [
migrations.AlterField(
model_name='datafilesummary',
name='status',
field=models.CharField(choices=[('Pending', 'Pending'), ('Accepted', 'Accepted'), ('Accepted with Errors', 'Accepted With Errors'), ('Partially Accepted with Errors', 'Partially Accepted'), ('Rejected', 'Rejected')], default='Pending', max_length=50),
),
]
9 changes: 8 additions & 1 deletion tdrs-backend/tdpservice/parsers/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ class Status(models.TextChoices):
PENDING = "Pending" # file has been uploaded, but not validated
ACCEPTED = "Accepted"
ACCEPTED_WITH_ERRORS = "Accepted with Errors"
PARTIALLY_ACCEPTED = "Partially Accepted with Errors"
REJECTED = "Rejected"

status = models.CharField(
Expand All @@ -85,7 +86,7 @@ class Status(models.TextChoices):
default=Status.PENDING,
)

datafile = models.ForeignKey(DataFile, on_delete=models.CASCADE)
datafile = models.OneToOneField(DataFile, on_delete=models.CASCADE, related_name="summary")

case_aggregates = models.JSONField(null=True, blank=False)

Expand All @@ -100,11 +101,17 @@ def get_status(self):
.exclude(error_message__icontains="trailer")\
.exclude(error_message__icontains="Unknown Record_Type was found.")

row_precheck_errors = errors.filter(error_type=ParserErrorCategoryChoices.PRE_CHECK)\
.filter(field_name="Record_Type")\
.exclude(error_message__icontains="trailer")

if errors is None:
return DataFileSummary.Status.PENDING
elif errors.count() == 0:
return DataFileSummary.Status.ACCEPTED
elif precheck_errors.count() > 0:
return DataFileSummary.Status.REJECTED
elif row_precheck_errors.count() > 0:
return DataFileSummary.Status.PARTIALLY_ACCEPTED
else:
return DataFileSummary.Status.ACCEPTED_WITH_ERRORS
2 changes: 1 addition & 1 deletion tdrs-backend/tdpservice/parsers/parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def parse_datafile(datafile):
header_line = rawfile.readline().decode().strip()
header, header_is_valid, header_errors = schema_defs.header.parse_and_validate(
header_line,
util.make_generate_parser_error(datafile, 1)
util.make_generate_file_precheck_parser_error(datafile, 1)
)
if not header_is_valid:
logger.info(f"Preparser Error: {len(header_errors)} header errors encountered.")
Expand Down
2 changes: 1 addition & 1 deletion tdrs-backend/tdpservice/parsers/test/test_parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -608,7 +608,7 @@ def test_parse_bad_tfs1_missing_required(bad_tanf_s1__row_missing_required_field

parse.parse_datafile(bad_tanf_s1__row_missing_required_field)

assert dfs.get_status() == DataFileSummary.Status.ACCEPTED_WITH_ERRORS
assert dfs.get_status() == DataFileSummary.Status.PARTIALLY_ACCEPTED

parser_errors = ParserError.objects.filter(file=bad_tanf_s1__row_missing_required_field)
assert parser_errors.count() == 4
Expand Down
18 changes: 17 additions & 1 deletion tdrs-backend/tdpservice/parsers/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def generate_parser_error(datafile, line_number, schema, error_category, error_m
row_number=line_number,
column_number=getattr(field, 'item', None),
item_number=getattr(field, 'item', None),
field_name=getattr(field, 'name', None),
field_name=getattr(field, 'name', None) if hasattr(field, 'name') else field,
rpt_month_year=getattr(record, 'RPT_MONTH_YEAR', None),
case_number=getattr(record, 'CASE_NUMBER', None),
error_message=error_message,
Expand Down Expand Up @@ -64,6 +64,22 @@ def generate(schema, error_category, error_message, record=None, field=None):
return generate


def make_generate_file_precheck_parser_error(datafile, line_number):
"""Configure a generate_parser_error that acts as a file pre-check error."""
def generate(schema, error_category, error_message, record=None, field=None):
return generate_parser_error(
datafile=datafile,
line_number=line_number,
schema=schema,
error_category=error_category,
error_message=error_message,
record=record,
field=None, # purposely overridden to force a "Rejected" status for certain file precheck errors
)

return generate


class SchemaManager:
"""Manages one or more RowSchema's and runs all parsers and validators."""

Expand Down
3 changes: 2 additions & 1 deletion tdrs-backend/tdpservice/scheduling/parser_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ def parse(data_file_id):
# for undetermined amount of time.
data_file = DataFile.objects.get(id=data_file_id)

logger.info(f"DataFile parsing started for file -> {repr(data_file)}")
logger.info(f"DataFile parsing started for file {data_file.filename}")

dfs = DataFileSummary.objects.create(datafile=data_file, status=DataFileSummary.Status.PENDING)
errors = parse_datafile(data_file)
dfs.status = dfs.get_status()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@ import axios from 'axios'
import PropTypes from 'prop-types'
import { useDispatch, useSelector } from 'react-redux'
import { fileUploadSections } from '../../reducers/reports'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import {
faCheckCircle,
faExclamationCircle,
faXmarkCircle,
faClock,
} from '@fortawesome/free-solid-svg-icons'
import Paginator from '../Paginator'
import { getAvailableFileList, download } from '../../actions/reports'
import { useEffect } from 'react'
Expand All @@ -11,6 +18,39 @@ import { getParseErrors } from '../../actions/createXLSReport'

const formatDate = (dateStr) => new Date(dateStr).toLocaleString()

const SubmissionSummaryStatusIcon = ({ status }) => {
let icon = null
let color = null

switch (status) {
case 'Pending':
icon = faClock
color = '#005EA2'
break
case 'Accepted':
icon = faCheckCircle
color = '#40bb45'
break
case 'Partially Accepted with Errors':
icon = faExclamationCircle
color = '#ec4e11'
break
case 'Accepted with Errors':
icon = faExclamationCircle
color = '#ec4e11'
break
case 'Rejected':
icon = faXmarkCircle
color = '#bb0000'
break
default:
break
}
return (
<FontAwesomeIcon className="margin-right-1" icon={icon} color={color} />
)
}

const SubmissionHistoryRow = ({ file }) => {
const dispatch = useDispatch()

Expand Down Expand Up @@ -41,14 +81,24 @@ const SubmissionHistoryRow = ({ file }) => {
{file.fileName}
</button>
</td>
<td>
{file.summary ? (
<>
<SubmissionSummaryStatusIcon status={file.summary.status} />
{file.summary && file.summary.status
? file.summary.status
: 'Pending'}
</>
) : (
'N/A'
)}
</td>
<td>
{file.hasError > 0 ? (
<button className="section-download" onClick={returned_errors}>
{file.year}-{file.quarter}-{file.section}.xlsx
</button>
) : (
'Currently Unavailable'
)}
) : null}
</td>
</tr>
)
Expand Down Expand Up @@ -78,6 +128,7 @@ const SectionSubmissionHistory = ({ section, label, files }) => {
<th>Submitted On</th>
<th>Submitted By</th>
<th>File Name</th>
<th>Acceptance Status</th>
<th>Error Reports (In development)</th>
</tr>
</thead>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,8 +244,6 @@ describe('SubmissionHistory', () => {
expect(
screen.queryByText('Error Reports (In development)')
).toBeInTheDocument()

expect(screen.queryByText('Currently Unavailable')).toBeInTheDocument()
})

it('Shows SSP results when SSP-MOE file type selected', () => {
Expand Down Expand Up @@ -339,4 +337,63 @@ describe('SubmissionHistory', () => {
expect(screen.queryByText('test5.txt')).toBeInTheDocument()
expect(screen.queryByText('test6.txt')).not.toBeInTheDocument()
})

it.each([
'Pending',
'Accepted',
'Accepted with Errors',
'Partially Accepted with Errors',
'Rejected',
null,
])('Shows the submission acceptance status', (status) => {
const state = {
reports: {
files: [
{
id: '123',
fileName: 'test1.txt',
fileType: 'TANF',
quarter: 'Q1',
section: 'Active Case Data',
uuid: '123-4-4-321',
year: '2023',
s3_version_id: '321-0-0-123',
createdAt: '12/12/2012 12:12',
submittedBy: 'test@teamraft.com',
summary: {
datafile: '123',
status: status,
case_aggregates: {
Oct: {
total: 0,
accepted: 0,
rejected: 0,
},
Nov: {
total: 0,
accepted: 0,
rejected: 0,
},
Dec: {
total: 0,
accepted: 0,
rejected: 0,
},
},
},
},
],
},
}

const store = appConfigureStore(state)
const dispatch = jest.fn(store.dispatch)
store.dispatch = dispatch

setup(store)

expect(screen.queryByText('Acceptance Status')).toBeInTheDocument()
expect(screen.queryByText('test1.txt')).toBeInTheDocument()
expect(screen.queryByText(status || 'Pending')).toBeInTheDocument()
})
})
2 changes: 2 additions & 0 deletions tdrs-frontend/src/reducers/reports.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ export const serializeApiDataFile = (dataFile) => ({
createdAt: dataFile.created_at,
submittedBy: dataFile.submitted_by,
hasError: dataFile.has_error,
summary: dataFile.summary,
})

const initialState = {
Expand Down Expand Up @@ -131,6 +132,7 @@ const reports = (state = initialState, action) => {
created_at: null,
submitted_by: null,
has_error: null,
summary: null,
})
}),
}
Expand Down

0 comments on commit 8de88cd

Please sign in to comment.